这是我参与「第五届青训营」笔记创作活动的第15天
一. 重点内容
-
存储 & 数据库
-
主流产品剖析
二. 知识点介绍
1. 存储 & 数据库
- 存储系统:提供了读写、控制类接口,能够安全有效地把数据持久化
- 存储系统特点:
-
- 性能敏感
-
- 容易受硬件影响
-
- 代码既简单又复杂
- 存储器层级架构:
- RAID技术:
-
- 背景:
-
-
- 单块大容量磁盘的价格 > 多块小容量磁盘
-
-
-
- 单块磁盘的写入性能 < 多块磁盘的并发写入性能
-
-
-
- 单块磁盘的容错能力有限,不够安全
-
-
- 高性能、高性价比、高可靠性
-
- Redundant Array of Inexpensive Disks
- 关系:集合=任意元素组成的若干有序偶对,反应了事物间的关系
- 关系型数据库:不单是存储系统,还展现出了其他能力
-
- 结构化数据友好
-
- 支持事务(ACID)
-
- 支持复杂查询语言
- 非关系型数据库:存储系统,一般不要求严格的结构化
-
- 半结构化数据友好
-
- 可能支持事务(ACID)
-
- 可能支持复杂查询语言
- 事务(ACID):
-
- Atomicity:事务内的操作要么全做,要么不做
-
- Consistency:事务执行前后,数据状态是一致的
-
- Isolation:可以隔离多个并发事务,避免影响
-
- Durability:事务一旦提交成功,数据保持持久性
2. 主流产品剖析
- 单机存储:
-
- 本地文件系统:一切皆文件,如Linux文件系统两大数据结构,Index Node & Directory Entry
-
- key-value存储:如RocksDB,常见数据结构如LSM-Tree,某种程度上牺牲读性能,追求写入性能
- 分布式存储:在单机存储基础上实现了分布式协议,涉及大量网络交互
-
- HDFS:
-
-
- 支持海量数据存储
-
-
-
- 高容错性
-
-
-
- 弱POSIX语义
-
-
-
- 使用普通x86服务器,性价比高
-
-
- Ceph:
-
-
- 支持对象接口、快接口、文件接口,一切皆对象
-
-
-
- 数据写入采用主备复制模型
-
-
-
- 数据分布模型采用CRUSH算法
-
- 单机数据库:
-
- 关系型数据库:如MySQL、PostgreSQL等
- 关系型数据库:如MySQL、PostgreSQL等
-
- 非关系型数据库:如MongoDB、Redis、Elasticsearch等
-
-
- 交互方式各不相同
-
-
-
- schema相对灵活,没有关系约束
-
-
-
- 尝试支持SQL(子集)和“事务”
-
- 分布式数据库:
-
- 解决容量有限,受硬件限制的问题:存储节点池化,动态扩缩容
-
- 解决弹性问题
-
- 解决性价比问题
-
- 单写 vs 多写
-
- 从磁盘弹性到内存弹性
-
- 分布式事务优化