一、经典案例
- 数据的产生
- 数据的流动:提交 -> 后端服务器 -> 数据库 -> 其它系统
- 数据的持久化:检验数据的合法性 -> 修改内存 -> 写入存储介质
二、存储 & 数据库简介
2.1 存储系统
- 系统概览:提供读写、控制类接口,能够安全有效地把数据持久化的软件
- 系统特点:性能敏感、代码既“简单”又“复杂”、容易受硬件影响
- 存储器层级结构
- 数据怎么从应用到存储介质:缓存贯穿整个存储体系、应该尽量减少拷贝、硬件需要有抽象统一的接入层
- RAID技术:高性能、高性价比、高可靠性
2.2 数据库
关系型数据库
- 关系:集合,任意元素组成的若干有序偶对,反映事物间的关系
- 关系代数:对关系做运算的抽象查询语言
- SQL:一种DSL,方便人类阅读的关系代数表达形式
- 关系型数据库特点:关系型数据库是存储系统,并且扩展出其他能力,例如支持结构化数据、事务、支持复杂语言
非关系型数据库
- 非关系型数据库特点:非关系型数据库也是存储系统,但一般不要求严格的结构化,对半结构化数据友好、可能支持事务、可能支持复杂查询语言
2.3 数据库 vs 经典存储
- 结构化数据管理更强
- 事务能力更强
- 复杂查询能力更强
2.4 数据库使用方式
DSL:SQL
三、主流产品剖析
3.1 单机存储
- 概览:单个计算机节点上的存储软件系统,一般不涉及网络交互
- 举例:本地文件系统、key-value存储系统等
- 本地文件系统:以文件为管理单元,Linux系统中两大数据结构Index Node记录文件元数据、Directory Entry则是内存结构
- key-value存储:常见数据结构LSM-Tree,某种程度上牺牲读性能、追求写入性能
3.2 分布式存储
- 概览:在单机存储基础上实现了分布式协议,涉及大量网络交互
- 举例:分布式文件系统、分布式对象存储
- HDFS:支持海量数据存储、高容错性、弱POSIX语义、性价比高
- Ceph:一套系统支持对象接口、块接口、文件接口,一切皆对象,数据写入采用主备复制模型、数据分布模型采用CRUSH算法
3.3 单机关系型数据库
- 概览:事务在单机内执行,也可能通过网络交互实现分布式事务
- 关系型数据库通用组件:Query Engine、Txn Manager、Lock Manager、Storage Engine、Replication
- 关键内存数据结构:B-Tree、B+-Tree、LRU List
- 关键磁盘数据结构:WriteAheadLog、Page
3.4 单机非关系型数据库
- 非关系型数据库交互方式各不相同
- 数据结构千奇百怪,schema相对灵活
- 尝试支持SQL和事务
- Elasticsearch:面向文档存储;文档可序列化为JSON;index为文档的集合;存储和构建依赖Lucene引擎;实现大量搜索数据结构、算法;支持RESTFUL API,也支持SQL交互
- MangoDB:面向文档存储;文档可序列化为JSON/BSON;collection为文档集合;存储和构建依赖wiredTiger引擎;4.0后开始支持事务;常用client/SDK交互,通过插件转译支持弱SQL
- Redis:数据结构丰富(hash表、set、zset、list);超高性能;基于内存,支持AOF/RDB持久化;常用redis-cli/多语言SDK交互
3.5 分布式数据库
- 单机数据库问题:容量有限、弹性差、性价比
- 解决方法:存储节点池化,动态扩缩容
四、新技术演进
- 软件架构变更:Bypass OS kernel
- AI增强:智能存储格式转换
- 新硬件革命:存储介质变更、计算单元变更、网络硬件变更