1.数据库和存储系统的概念、区别
(1)存储系统定义:
- 存储系统:一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件,就可以称为存储系统
- 特点:作为后端软件的底座,性能敏感 存储系统软件架构,容易受硬件影响
(2)单机存储系统怎么做到高性能/高性价比/高可靠性?
- 方案:R(edundant) A(rray) of I(nexpensive) D(isks)
- RAID出现的背景: 单块大容量磁盘的价格>多块小容量磁盘;单块磁盘的写入性能<多块磁盘的并发写入性能单块磁盘的容错能力有限,不够安全
- 使用RAID
- RAID 0 多块磁盘简单组合 数据条带化存储,提高磁盘带宽没有额外的容错设计
- RAID 1 一块磁盘对应一块额外镜像盘真实空间利用率仅50% 容错能力强
- RAID 0+1 结合了RAID O和RAID 1真实空间利用率仅50%容错能力强,写入带宽好(实际中常用)
(3)关系型数据库
概念补充:
关系 = 集合 = 任意元素组成的若干有序偶对,反应了事物间的关系
关系代数 = 对关系作运算的抽象查询语言交、并、笛卡尔积"..
SQL = 一种DSL = 方便人类阅读的关系代数表达形式
- 关系型数据库与存储系统的区别:关系型数据库是存储系统,但是在存储之外,又发展出其他能力:
- 结构化数据友好
- 支持事务(ACID)
- SQL 支持复杂查询语言
(4)非关系性数据库
- 区别:非关系型数据库也是存储系统,但是一般不要求严格的结构化
- 半结构化数据友好
- SQL 可能支持复杂查询语言
- 可能支持事务(ACID)
(5)总结数据库 vs 经典存储
- 结构化数据管理
- 数据库:写入关系型数据库,以表形式管理
- 经典存储:写入文件,自行定义管理结构
- 事务能力
- 数据库:凸显出数据库支持「事务」的优越性
- 事务具有: A(tomicity),事务内的操作要么全做,要么不做
- C(onsistency),事务执行前后,数据状态是一致的
- I(solation),可以隔离多个并发事务,避免影响
- D(urability),事务一旦提交成功,数据保证持久性
- 经典存储:没有事务
- 数据库:凸显出数据库支持「事务」的优越性
- 复杂查询能力
- 问题:写入数据之后,想做很复杂的查询怎么办? Example:请查询出名字以xiao开头,且密码提示问题小于10个字的人,并按性别分组统计人数?
- 数据库:使用sql语句支持复杂查询,灵活简洁
- 经典存储:僵化复杂
2.单机存储
- 定义:单个计算机节点上的存储软件系统,一般不涉及网络交互。包括:
- 本地文件系统:文件
- 分布式系统:key-value存储
- 常见使用方式:put(k, v)& get(k)
- 常见数据结构:LSM-Tree,某种程度上牺牲读性能,追求写入性能
具体来说就是:
0)分为内存和磁盘两部分,内存中存储Memtable和Immutable MemTable;磁盘中存储leveli SSTable (i=0,1,2...)
1)内存和磁盘数据结构都遵循顺序写入,key-value数据结构会有序的不断追加到内存里的MemTable
2)当MemTable满了之后会被刷新到Immutable MemTable中,经过一段时间就会触发逻辑顺序写入磁盘的level0 SSTable里面。
3)当SSTable被装满就会逐层下放到level1 SSTable ...
4)因此最终当想要读一个最新版本的key-value数据,需要合并多层的key-value数据才能服务用户的get请求,降低了读性能提高了写性能
3.分布式存储
- 定义:在单机存储基础上实现了分布式协议,涉及大量网络交互
(1)分布式文件系统:HDFS
- HDFS核心特点: 支持海量数据存储 高容错性(软件系统支持质量比较差的硬件) 弱POSIX语义 使用普通x86服务器,性价比高
(2)分布式对象存储:Ceph
- Ceph的核心特点: 一套系统支持对象接口、块接口、文件接口,但是一切皆对象 数据写入采用主备复制模型 数据分布模型采用CRUSH算法
4.单机关系型数据库
-
定义:单个计算机节点上的数据库系统 事务在单机内执行,也可能通过网络交互实现分布式事务
-
代表:Mysql、PostgreSQl
- 关系型数据库的通用组件: Query Engine负责解析query,生成查询计划
- Txn Manager-负责事务并发管理 Lock Manager -负责锁相关的策略 Storage Engine负责组织内存/磁盘数据结构
- Replication-负责主备同步
- 关键内存数据结构:B-Tree、B+-Tree、LRU List等
- 关键磁盘数据结构: WriteAheadLog(RedoLog)、Page
-
在关系型数据库中一半是内存数据结构,一半是磁盘数据结构。在内存中有树和tempdata两种结构;在磁盘中中有 pageFiles、redoLogFiles、Others三种结构。树中的每个节点都是page数据结构,当用户来插入或更新某个数据就会访问这个page数据结构。每次操作page会先记录一条操作日志redolog,来保证更新操作不会丢失。内存数据中Temp Data比如存储一些排序结果之类的临时数据,当全完事后再拼起来一起发给用户。而磁盘存储中的三种结构就对应存储这三种数据。
5.单机非关系型数据库
- 代表:MongoDB、Redis、ElasticSearch
- 关系型数据库一般直接使用SQL交互,而非关系型数据库交互方式各不相同
- 非关系型数据库的数据结构千奇百怪,没有关系约束后,schema相对灵活
- 不管是否关系型数据库,大家都在尝试支持SQL(子集)和“事务”
6.分布式数据库
- Q:单机数据库遇到了哪些问题&挑战,需要我们引入分布式架构来解决?
- 容量:单点容量有限,受硬件限制
- 方案:存储节点池化,动态扩缩容
- 弹性:当需要数据库扩容等操作时,不好在不停机情况下转移数据
- 方案:同样通过存储节点池化,实现动态扩缩容来解决
- 性价比:
- 方案:同样通过存储节点池化,cpu不够用可以多分配给它可抢的cpu server而不是多分cpu、database的大小也可以通过池化来动态扩容而不用再迁移,总体上具有更高存储性价比