《24 讲吃透分布式数据库》笔记
2023/7/25大约 3 分钟
《24 讲吃透分布式数据库》笔记
开篇词 吃透分布式数据库,提升职场竞争力
略
导论:什么是分布式数据库?
核心概念
数据分片:
- 水平分片:按行分割数据,分散到不同节点
- 垂直分片:按列切割 Schema,分散为多个小 Schema
数据同步:帮助数据库恢复一致性。
分布式数据库发展 = 由合到分再到合:
- 早期关系型商业数据库(Oracle 等)→ 2. OLAP 突破(大数据/MPP)→ 3. 去 IOE + NoSQL → 4. 新一代分布式 OLTP 成熟 → 5. HTAP 融合 OLAP + OLTP
SQL vs NoSQL
略
数据分片:如何存储超大规模数据?
扩展方式
- 垂直扩展:提升硬件(CPU/内存),易达瓶颈
- 水平扩展:分而治之,数据分散到一组廉价机器,性价比更高
分片算法
哈希分片:

范围分片:

分布式 ID
- UUID:性能差、离散度不高
- 雪花算法:时间戳 + 机器 ID + 序列号
数据复制:如何保证高可用?
复制同步模式
- 同步复制:所有从库确认后才返回成功,保证一致性但影响写入
- 半同步复制:部分从库同步确认即可
- 异步复制:不管从库状态直接写入,主库故障可能丢数据
复制与高可用
- 从节点故障:通过最后处理的事务信息从主/其他从节点恢复
- 主节点故障:故障转移(超时检测 → 选择数据最接近的新主 → 重置系统)
复制方式
- 基于语句:记录 SQL 语句,可能有时间函数/自增列等副作用(VoltDB、Calvin)
- WAL 日志同步:低级操作字节流,避免语句副作用,要求引擎一致(PostgreSQL、Oracle)
- 行复制:行粒度变更记录,与存储引擎解耦,易解析
- ETL 工具:最灵活,可过滤/转换/压缩,性能较低
一致性与 CAP 模型
略
实践:设计一个最简单的分布式数据库
略
存储引擎
数据库架构层次
- 传输层:处理网络协议 + 节点间通信
- 查询层:SQL 解析 → 验证分析 → 访问控制 → 查询优化器(生成执行计划)
- 执行层:本地运行单元(存储引擎)+ 远程运行单元
存储引擎核心功能:事务管理器、锁管理、存储结构、内存结构(缓存/缓冲)、提交日志(崩溃恢复)。
行式存储 vs 列式存储
列式存储适合分析聚合(只加载需要的列,不关心的列不读取)。
数据文件与索引文件
- 堆组织表:按写入顺序排布,需额外索引查找
- 主键索引:与数据一对一;二级索引:可能一对多
面向分布式的存储引擎
- 内存型数据库倾向分布式(单机内存容量有限)
- 列式存储与分布式数据库天然契合(OLAP 分析全量数据)
分布式索引
读取路径
- 寻找分片和目标节点 → 2. 检查缓存/缓冲 → 3. 检查磁盘文件 → 4. 合并结果
SSTable
排序的、不可变的、持久化键值对结构。块索引在打开时加载到内存,查找时二分定位块 + 一次磁盘寻道。
内存缓冲
常用快速搜索数据结构:跳表(Redis zset 实现)。