这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记。
课程资料
存储系统
- 定义:
- 一个提供了读写、控制类接口,能够安全有效地把数据持久化的软件
- 特点:
- 作为后端软件的底座,性能敏感
- 软件架构容易受硬件影响
- 代码既简单又复杂
- 数据从应用到存储
- 缓存:贯穿整个存储体系
- 拷贝:很昂贵,应该尽量减少
- 硬件繁多,需要有抽象统一的接入层
- RAID技术
- 实现单机存储系统的高性能、高性价比、高可靠性,全称Redundant Array of Inexpensive Disks
数据库
ACID
- Atomicity,事务内的操作要么全做,要么不做
- Consistency,事务执行前后,数据状态是一致的
- Isolation,可以隔离多个并发事务,避免影响
- Durability,事务一旦提交成功,数据保证持久性
ACID特性是在写入和更新资料时,为保证事务正确、可靠地执行的四个重要特性。
关系型数据库
- 与存储系统的关系:关系型数据库是存储系统+以下特点
- 结构化数据友好
- 支持事务(ACID)
- 支持复杂查询语言(ex.SQL)
非关系型数据库
- 与存储系统的关系:非关系型数据库也是存储系统,但与关系型数据库的区别是一般不要求严格的结构化
- 特点
- 半结构化数据友好
- 可能支持ACID
- 可能支持复杂的查询语言(SQL之类)
数据库和经典存储的对比
- 结构化数据管理
- 数据库:写入关系型数据库,以表的形式管理
- 经典存储:写入文件,自行定义管理结构
- 事务能力
- 数据库明显优于经典存储
- 复杂查询能力
- 数据库:SQL语言,灵活、简洁
- 经典存储:僵化、复杂
主流产品
单机存储
- 定义:单个计算机上的存储软件系统,一般不涉及网络交互,大致分为本地文件系统和key-value存储两种类型
- Linux本地文件系统
- 管理单元:文件
- 接口:统一的VFS抽象接口
- 两大数据结构:Index Node & Directory Entry
- key-value存储
- 常见使用方式:put(k,v) & get(k)
- 常见数据结构:LSM-Tree,通过牺牲部分readability, 追求writability
分布式存储
- 定义:在单机存储基础上实现了分布式协议,涉及大量网络交互。类似于单机存储,分布式存储也可大致分为分布式文件系统和分布式对象存储
- 比较突出的两种产品:HDFS和Ceph
- HDFS
- 支持海量数据存储
- 高容错性
- 弱POSIX语义
- 使用普通x86服务器,性价比高
- Ceph
- 一套系统支持对象接口,块接口,文件接口,但是一切皆对象
- 数据写入采用主备复制模型
- 数据分布模型采用CRUSH算法(HASH+权重+随机抽签)
单机数据库
- 定义:单个计算机节点上的数据库系统,事务在单机内执行,也可能通过网络交互实现分布式事务。大致分为关系型数据库和非关系型数据库
- 关系型数据库
- 主要产品: oracle, mysql, postgresql
- 非关系型数据库
- 主要产品:mongodb(面向文档), redis(数据结构丰富,包括hash表,set,zset,list等), elasticsearch(面向文档)
- 关系型vs.非关系型数据库的对比
- 关系型db一般直接使用SQL交互,而非关系型db交互方式各不相同
- 非关系型数据库的数据结构千奇百怪,没有关系约束后schema相对灵活
- 不管是否关系型数据库,大家都在尝试支持SQL子集和事务
分布式数据库
- 解决单机数据库在容量、弹性和性价比上的问题和局限
- 仍需改进的部分
- 单写vs多写
- 磁盘弹性-->内存弹性
- 分布式事务的优化
小结
这篇笔记主要总结了“带你认识存储&数据库”一课里对存储系统与数据库系统的详解。通过复习本笔记可帮助我深入地了解存储和数据库的对比,各存储和数据库系统、产品的优劣势。