Skip to content

第8章:分布式数据库与综合设计

分片与复制

分片把不同数据分到不同节点,复制在多个节点保存同一逻辑数据。前者主要扩大容量和并行度,后者主要提高容错与读取能力,二者可同时存在。

按用户 ID 分片便于单用户事务,但跨用户转账可能跨分片。分片键决定局部性,不只是哈希函数选择;热点用户也可能破坏负载均衡。

原子提交与复制共识

两阶段提交先让参与者准备,再由协调者决定提交或中止。已准备的参与者不能随意单独中止,否则可能与已提交节点矛盾;协调者故障时因此可能阻塞。

共识复制使一组副本同意日志顺序,原子提交让多个独立数据分片对事务结果一致。用共识复制每个分片,并不会自动让跨分片事务原子提交。

OLTP 与 OLAP

事务处理强调短请求、索引访问、低延迟和并发更新;分析处理强调大范围扫描、聚合、压缩与并行执行。两者可以在同一系统中结合,但缓存、存储格式和资源调度会产生冲突。

列存和向量化常有利于分析,行存和细粒度索引常有利于点查更新。选择应依据实际访问模式,而不是把某个类别当作普遍更先进。

一次转账的完整状态

应用发来唯一请求 ID,数据库检查业务条件,在事务内扣款、加款并记录请求结果;提交前满足日志持久化要求,提交后返回。响应丢失时,客户端凭同一 ID 查询或重试,避免重复执行。

这要求去重记录与余额更新一起原子提交。若先更新余额、之后单独保存 ID,二者之间崩溃仍会让重试重复扣款。

综合练习

  1. 为选课系统设计模式、三个常用查询的索引、事务边界和恢复要求,说明每项选择服务哪个访问模式。
  2. 对跨分片转账区分复制日志、并发控制、原子提交和业务去重各自的状态。
  3. 在本地数据库用 EXPLAIN 比较全表扫描与索引方案;先核对查询结果,再记录行数、缓存条件和运行时间。

上次更新: