Appearance
第8章:分布式数据库与综合设计
分片与复制
分片把不同数据分到不同节点,复制在多个节点保存同一逻辑数据。前者主要扩大容量和并行度,后者主要提高容错与读取能力,二者可同时存在。
按用户 ID 分片便于单用户事务,但跨用户转账可能跨分片。分片键决定局部性,不只是哈希函数选择;热点用户也可能破坏负载均衡。
原子提交与复制共识
两阶段提交先让参与者准备,再由协调者决定提交或中止。已准备的参与者不能随意单独中止,否则可能与已提交节点矛盾;协调者故障时因此可能阻塞。
共识复制使一组副本同意日志顺序,原子提交让多个独立数据分片对事务结果一致。用共识复制每个分片,并不会自动让跨分片事务原子提交。
OLTP 与 OLAP
事务处理强调短请求、索引访问、低延迟和并发更新;分析处理强调大范围扫描、聚合、压缩与并行执行。两者可以在同一系统中结合,但缓存、存储格式和资源调度会产生冲突。
列存和向量化常有利于分析,行存和细粒度索引常有利于点查更新。选择应依据实际访问模式,而不是把某个类别当作普遍更先进。
一次转账的完整状态
应用发来唯一请求 ID,数据库检查业务条件,在事务内扣款、加款并记录请求结果;提交前满足日志持久化要求,提交后返回。响应丢失时,客户端凭同一 ID 查询或重试,避免重复执行。
这要求去重记录与余额更新一起原子提交。若先更新余额、之后单独保存 ID,二者之间崩溃仍会让重试重复扣款。
综合练习
- 为选课系统设计模式、三个常用查询的索引、事务边界和恢复要求,说明每项选择服务哪个访问模式。
- 对跨分片转账区分复制日志、并发控制、原子提交和业务去重各自的状态。
- 在本地数据库用
EXPLAIN比较全表扫描与索引方案;先核对查询结果,再记录行数、缓存条件和运行时间。