这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
经典案例
数据的产生
- 登录APP注册账号,数据产生
数据的流动
- 数据产生,进入后端服务器,然后存入数据库中
数据的持久化
- 检验数据的合法性 -> 修改内存(用高效数据结构组织数据) -> 以寿命&性能友好的方式写入存储介质
存储 & 数据库简介
2.1 存储系统
软件系统:一个提供读写、控制类接口,能够安全有效地把数据持久化的软件
存储系统特点:
- 性能敏感
- 存储系统软件架构,容易受硬件影响
- 存储系统代码,既“简单”又“复杂”
存储系统层级:
tape:磁带
- 缓存很重要,贯穿整个存储体系
- 拷贝很昂贵,应该尽量减少、
- 硬件设备五花八门,需要有抽象统一的接入层
RAID技术
2.2 数据库系统
关系 = 集合 = 任意元素组成的若干有序偶对反应了事物间的关系
关系代数= 对关系作运算的抽象查询语言
SQL = 一种DSL(领域专业语言) = 方便人类阅读的关系代数表达形式
关系型数据库特点:
- 关系型数据库是存储系统
- 结构化数据友好
- 支持事务(ACID)
- 支持复杂查询语言
非关系型数据库特点:
- 非关系型数据库是存储系统,但是一般不要求严格的结构化
- 半结构化数据友好
- 可能支持事务(ACID)
- 可能支持复杂查询语言
数据库 VS 经典存储
- 结构化数据管理,表形式方便管理
- 事务能力
- 复杂查询能力
Everything is D(omain)S(pecific)L(anguage)=> maybe SQL
主流产品剖析
3.1 单机存储
单机存储 = 单个计算机节点上的存储软件系统,一般不涉及网络交换
3.1.1 本地文件系统
Linux经典哲学:一切皆文件
- 文件系统的管理单元:文件
- 文件系统接口:文件系统繁多,如Ext2/3/4,sysfs,rootfs等,但都遵循VFS的统一抽象接口
- Linux数据结构: Index Node 和 Directory Entry
3.3.2 key-value存储
世间一切皆key-value
- 常见使用方式:put(k,v) & get(k)
- 常见数据结构:LSM-Tree,某种程度上牺牲读性能,追求写入性能
- 拳头产品:RocksDB(源码推荐看LeveDB)
3.2 分布式存储
分布式存储 = 在单机存储基础上实现分布式协议,涉及大量网络交互
3.2.1 分布式存储-HDFS
大数据时代的基石
- 核心特点:
- 支持海量数据存储
- 高容错性
- 弱POSIX语义
- 使用普通廉价服务器,性价比高
3.2.2 分布式存储-Ceph
开源分布式存储系统里的万金油
- 一套系统支持对象接口、块接口、文件接口,但是一切皆对象
- 数据写入采用主备复制模型
- 数据分布模型采用CRUSH算法(HASH + 权重 + 随机抽签)
3.3 单机数据库
单机数据库 = 单个计算机节点上的数据库系统
事务在单机内执行,也可能通过网络交互实现分布式事务
3.3.1 单机关系型数据库
-
商业:Oracle , 开源产品: MySQL&PostgreSQL
-
通用组件:
- Query Engine —— 负责解析query,生成查询计划
- Txn Manager —— 负责事务并发管理
- Lock Manager —— 负责锁相关的策略
- Stora Engine —— 负责组织内存/磁盘数据结构
- Replication —— 负责主备同步
-
关键内存数据结构:B- Tree, B+-Tree,LRU List等
-
关键磁盘数据结构:WriteAheadLog(RedoLog)、Page
3.3.2 单机非关系型数据库
- ES、MongoDB、Redis
- 关系型数据库 VS 非关系型数据库
- 关系型数据库直接使用SQL交互,非关系型数据库交互方式各不相同
- 非关系型数据库的数据结构千奇百怪,没有关系约束后,schema相对灵活
- 都在尝试支持SQL子集和事务
- 与RDBMS相比,ES天然能做模糊搜索,还能自动计算关联度
3.4分布式数据库
单机数据库遇到的问题: 容量 、 弹性 、 性价比 (存储节点池化、动态扩缩容)
More to Do
- 从单写到多写
- 从磁盘弹性到内存弹性
- 分布式事务优化
4 新技术演进
4.1 软件架构变更
bypass os kernel (内核旁路):绕开Linux的技术
4.2 AI增强
智能存储格式转换,行列缓存
4.3 新硬件革命
存储介质、计算单元、网络硬件
课后作业
参考:
带你认识存储 & 数据库 .pptx - 飞书云文档 (feishu.cn)