# 目录

> DDIA 第一版完整目录：十二章，涵盖数据系统基础、分布式数据与派生数据。

---

LLMS 索引： [llms.txt](/v1/llms.txt)

---

![](/title-v1.jpg)

这份目录与左侧章节树、页末顺序导航共享同一阅读顺序；章内标题直接来自各页的稳定锚点。选择任意条目即可进入对应章节或小节。

- [目录](/v1/toc/)
  - [插图目录](/v1/toc/#list-of-figures)
- [序言](/v1/preface/)
  - [本书的目标读者](/v1/preface/#本书的目标读者)
  - [本书涉及的领域](/v1/preface/#本书涉及的领域)
  - [本书纲要](/v1/preface/#本书纲要)
  - [参考文献与延伸阅读](/v1/preface/#参考文献与延伸阅读)
  - [O‘Reilly Safari](/v1/preface/#oreilly-safari)
  - [致谢](/v1/preface/#致谢)
- [I 数据系统基础](/v1/part-i/)
  - [索引](/v1/part-i/#索引)
- [1 可靠性、可伸缩性和可维护性](/v1/ch1/)
  - [关于数据系统的思考](/v1/ch1/#关于数据系统的思考)
  - [可靠性](/v1/ch1/#可靠性)
    - [硬件故障](/v1/ch1/#硬件故障)
    - [软件错误](/v1/ch1/#软件错误)
    - [人为错误](/v1/ch1/#人为错误)
    - [可靠性有多重要？](/v1/ch1/#可靠性有多重要)
  - [可伸缩性](/v1/ch1/#可伸缩性)
    - [描述负载](/v1/ch1/#描述负载)
    - [描述性能](/v1/ch1/#描述性能)
      - [延迟和响应时间](/v1/ch1/#延迟和响应时间)
      - [实践中的百分位点](/v1/ch1/#实践中的百分位点)
    - [应对负载的方法](/v1/ch1/#应对负载的方法)
  - [可维护性](/v1/ch1/#可维护性)
    - [可操作性：人生苦短，关爱运维](/v1/ch1/#可操作性人生苦短关爱运维)
    - [简单性：管理复杂度](/v1/ch1/#简单性管理复杂度)
    - [可演化性：拥抱变化](/v1/ch1/#可演化性拥抱变化)
  - [本章小结](/v1/ch1/#本章小结)
  - [参考文献](/v1/ch1/#参考文献)
- [2 数据模型与查询语言](/v1/ch2/)
  - [关系模型与文档模型](/v1/ch2/#关系模型与文档模型)
    - [NoSQL 的诞生](/v1/ch2/#nosql-的诞生)
    - [对象关系不匹配](/v1/ch2/#对象关系不匹配)
    - [多对一和多对多的关系](/v1/ch2/#多对一和多对多的关系)
    - [文档数据库是否在重蹈覆辙？](/v1/ch2/#文档数据库是否在重蹈覆辙)
      - [网状模型](/v1/ch2/#网状模型)
      - [关系模型](/v1/ch2/#关系模型)
      - [与文档数据库相比](/v1/ch2/#与文档数据库相比)
    - [关系型数据库与文档数据库在今日的对比](/v1/ch2/#关系型数据库与文档数据库在今日的对比)
      - [哪种数据模型更有助于简化应用代码？](/v1/ch2/#哪种数据模型更有助于简化应用代码)
      - [文档模型中的模式灵活性](/v1/ch2/#文档模型中的模式灵活性)
      - [查询的数据局部性](/v1/ch2/#查询的数据局部性)
      - [文档和关系数据库的融合](/v1/ch2/#文档和关系数据库的融合)
  - [数据查询语言](/v1/ch2/#数据查询语言)
    - [Web 上的声明式查询](/v1/ch2/#web-上的声明式查询)
    - [MapReduce查询](/v1/ch2/#mapreduce查询)
  - [图数据模型](/v1/ch2/#图数据模型)
    - [属性图](/v1/ch2/#属性图)
    - [Cypher 查询语言](/v1/ch2/#cypher-查询语言)
    - [SQL 中的图查询](/v1/ch2/#sql-中的图查询)
    - [三元组存储和 SPARQL](/v1/ch2/#三元组存储和-sparql)
      - [语义网](/v1/ch2/#语义网)
      - [RDF 数据模型](/v1/ch2/#rdf-数据模型)
    - [SPARQL 查询语言](/v1/ch2/#sparql-查询语言)
      - [图形数据库与网状模型相比较](/v1/ch2/#图形数据库与网状模型相比较)
    - [基础：Datalog](/v1/ch2/#基础datalog)
  - [本章小结](/v1/ch2/#本章小结)
  - [参考文献](/v1/ch2/#参考文献)
- [3 存储与检索](/v1/ch3/)
  - [驱动数据库的数据结构](/v1/ch3/#驱动数据库的数据结构)
    - [散列索引](/v1/ch3/#散列索引)
    - [SSTables和LSM树](/v1/ch3/#sstables和lsm树)
      - [构建和维护SSTables](/v1/ch3/#构建和维护sstables)
      - [用SSTables制作LSM树](/v1/ch3/#用sstables制作lsm树)
      - [性能优化](/v1/ch3/#性能优化)
    - [B树](/v1/ch3/#b树)
      - [让B树更可靠](/v1/ch3/#让b树更可靠)
      - [B树的优化](/v1/ch3/#b树的优化)
    - [比较B树和LSM树](/v1/ch3/#比较b树和lsm树)
      - [LSM树的优点](/v1/ch3/#lsm树的优点)
      - [LSM树的缺点](/v1/ch3/#lsm树的缺点)
    - [其他索引结构](/v1/ch3/#其他索引结构)
      - [将值存储在索引中](/v1/ch3/#将值存储在索引中)
      - [多列索引](/v1/ch3/#多列索引)
      - [全文搜索和模糊索引](/v1/ch3/#全文搜索和模糊索引)
      - [在内存中存储一切](/v1/ch3/#在内存中存储一切)
  - [事务处理还是分析？](/v1/ch3/#事务处理还是分析)
    - [数据仓库](/v1/ch3/#数据仓库)
      - [OLTP数据库和数据仓库之间的分歧](/v1/ch3/#oltp数据库和数据仓库之间的分歧)
    - [星型和雪花型：分析的模式](/v1/ch3/#星型和雪花型分析的模式)
  - [列式存储](/v1/ch3/#列式存储)
    - [列压缩](/v1/ch3/#列压缩)
      - [列式存储和列族](/v1/ch3/#列式存储和列族)
      - [内存带宽和矢量化处理](/v1/ch3/#内存带宽和矢量化处理)
    - [列式存储中的排序顺序](/v1/ch3/#列式存储中的排序顺序)
      - [几个不同的排序顺序](/v1/ch3/#几个不同的排序顺序)
    - [写入列式存储](/v1/ch3/#写入列式存储)
    - [聚合：数据立方体和物化视图](/v1/ch3/#聚合数据立方体和物化视图)
  - [本章小结](/v1/ch3/#本章小结)
  - [参考文献](/v1/ch3/#参考文献)
- [4 编码与演化](/v1/ch4/)
  - [编码数据的格式](/v1/ch4/#编码数据的格式)
    - [语言特定的格式](/v1/ch4/#语言特定的格式)
    - [JSON、XML和二进制变体](/v1/ch4/#jsonxml和二进制变体)
      - [二进制编码](/v1/ch4/#二进制编码)
    - [Thrift与Protocol Buffers](/v1/ch4/#thrift与protocol-buffers)
      - [字段标签和模式演变](/v1/ch4/#字段标签和模式演变)
      - [数据类型和模式演变](/v1/ch4/#数据类型和模式演变)
    - [Avro](/v1/ch4/#avro)
      - [Writer模式与Reader模式](/v1/ch4/#writer模式与reader模式)
      - [模式演变规则](/v1/ch4/#模式演变规则)
      - [但Writer模式到底是什么？](/v1/ch4/#但writer模式到底是什么)
      - [动态生成的模式](/v1/ch4/#动态生成的模式)
      - [代码生成和动态类型的语言](/v1/ch4/#代码生成和动态类型的语言)
    - [模式的优点](/v1/ch4/#模式的优点)
  - [数据流的类型](/v1/ch4/#数据流的类型)
    - [数据库中的数据流](/v1/ch4/#数据库中的数据流)
      - [在不同的时间写入不同的值](/v1/ch4/#在不同的时间写入不同的值)
      - [归档存储](/v1/ch4/#归档存储)
    - [服务中的数据流：REST与RPC](/v1/ch4/#服务中的数据流rest与rpc)
      - [Web服务](/v1/ch4/#web服务)
      - [远程过程调用（RPC）的问题](/v1/ch4/#远程过程调用rpc的问题)
      - [RPC的当前方向](/v1/ch4/#rpc的当前方向)
      - [数据编码与RPC的演化](/v1/ch4/#数据编码与rpc的演化)
    - [消息传递中的数据流](/v1/ch4/#消息传递中的数据流)
      - [消息代理](/v1/ch4/#消息代理)
      - [分布式的Actor框架](/v1/ch4/#分布式的actor框架)
  - [本章小结](/v1/ch4/#本章小结)
  - [参考文献](/v1/ch4/#参考文献)
- [II 分布式数据](/v1/part-ii/)
  - [伸缩至更高的载荷](/v1/part-ii/#伸缩至更高的载荷)
    - [无共享架构](/v1/part-ii/#无共享架构)
    - [复制 vs 分区](/v1/part-ii/#复制-vs-分区)
  - [索引](/v1/part-ii/#索引)
  - [参考文献](/v1/part-ii/#参考文献)
- [5 复制](/v1/ch5/)
  - [领导者与追随者](/v1/ch5/#领导者与追随者)
    - [同步复制与异步复制](/v1/ch5/#同步复制与异步复制)
    - [关于复制的研究](/v1/ch5/#关于复制的研究)
    - [设置新从库](/v1/ch5/#设置新从库)
    - [处理节点宕机](/v1/ch5/#处理节点宕机)
      - [从库失效：追赶恢复](/v1/ch5/#从库失效追赶恢复)
      - [主库失效：故障切换](/v1/ch5/#主库失效故障切换)
    - [复制日志的实现](/v1/ch5/#复制日志的实现)
      - [基于语句的复制](/v1/ch5/#基于语句的复制)
      - [传输预写式日志（WAL）](/v1/ch5/#传输预写式日志wal)
      - [逻辑日志复制（基于行）](/v1/ch5/#逻辑日志复制基于行)
      - [基于触发器的复制](/v1/ch5/#基于触发器的复制)
  - [复制延迟问题](/v1/ch5/#复制延迟问题)
    - [读己之写](/v1/ch5/#读己之写)
    - [单调读](/v1/ch5/#单调读)
    - [一致前缀读](/v1/ch5/#一致前缀读)
    - [复制延迟的解决方案](/v1/ch5/#复制延迟的解决方案)
  - [多主复制](/v1/ch5/#多主复制)
    - [多主复制的应用场景](/v1/ch5/#多主复制的应用场景)
      - [运维多个数据中心](/v1/ch5/#运维多个数据中心)
      - [需要离线操作的客户端](/v1/ch5/#需要离线操作的客户端)
      - [协同编辑](/v1/ch5/#协同编辑)
    - [处理写入冲突](/v1/ch5/#处理写入冲突)
      - [同步与异步冲突检测](/v1/ch5/#同步与异步冲突检测)
      - [避免冲突](/v1/ch5/#避免冲突)
      - [收敛至一致的状态](/v1/ch5/#收敛至一致的状态)
      - [自定义冲突解决逻辑](/v1/ch5/#自定义冲突解决逻辑)
      - [自动冲突解决](/v1/ch5/#自动冲突解决)
      - [什么是冲突？](/v1/ch5/#什么是冲突)
    - [多主复制拓扑](/v1/ch5/#多主复制拓扑)
  - [无主复制](/v1/ch5/#无主复制)
    - [当节点故障时写入数据库](/v1/ch5/#当节点故障时写入数据库)
      - [读修复和反熵](/v1/ch5/#读修复和反熵)
      - [读写的法定人数](/v1/ch5/#读写的法定人数)
    - [法定人数一致性的局限性](/v1/ch5/#法定人数一致性的局限性)
      - [监控陈旧度](/v1/ch5/#监控陈旧度)
    - [宽松的法定人数与提示移交](/v1/ch5/#宽松的法定人数与提示移交)
      - [运维多个数据中心](/v1/ch5/#运维多个数据中心-1)
    - [检测并发写入](/v1/ch5/#检测并发写入)
      - [最后写入胜利（丢弃并发写入）](/v1/ch5/#最后写入胜利丢弃并发写入)
      - [“此前发生”的关系和并发](/v1/ch5/#此前发生的关系和并发)
      - [并发性、时间和相对性](/v1/ch5/#并发性时间和相对性)
      - [捕获&quot;此前发生&quot;关系](/v1/ch5/#捕获此前发生关系)
      - [合并并发写入的值](/v1/ch5/#合并并发写入的值)
      - [版本向量](/v1/ch5/#版本向量)
      - [版本向量和向量时钟](/v1/ch5/#版本向量和向量时钟)
  - [本章小结](/v1/ch5/#本章小结)
  - [参考文献](/v1/ch5/#参考文献)
- [6 分区](/v1/ch6/)
  - [分区与复制](/v1/ch6/#分区与复制)
  - [键值数据的分区](/v1/ch6/#键值数据的分区)
    - [根据键的范围分区](/v1/ch6/#根据键的范围分区)
    - [根据键的散列分区](/v1/ch6/#根据键的散列分区)
      - [一致性哈希](/v1/ch6/#一致性哈希)
    - [负载偏斜与热点消除](/v1/ch6/#负载偏斜与热点消除)
  - [分区与次级索引](/v1/ch6/#分区与次级索引)
    - [基于文档的次级索引进行分区](/v1/ch6/#基于文档的次级索引进行分区)
    - [基于关键词(Term)的次级索引进行分区](/v1/ch6/#基于关键词term的次级索引进行分区)
  - [分区再平衡](/v1/ch6/#分区再平衡)
    - [再平衡策略](/v1/ch6/#再平衡策略)
      - [反面教材：hash mod N](/v1/ch6/#反面教材hash-mod-n)
      - [固定数量的分区](/v1/ch6/#固定数量的分区)
      - [动态分区](/v1/ch6/#动态分区)
      - [按节点比例分区](/v1/ch6/#按节点比例分区)
    - [运维：手动还是自动再平衡](/v1/ch6/#运维手动还是自动再平衡)
  - [请求路由](/v1/ch6/#请求路由)
    - [执行并行查询](/v1/ch6/#执行并行查询)
  - [本章小结](/v1/ch6/#本章小结)
  - [参考文献](/v1/ch6/#参考文献)
- [7 事务](/v1/ch7/)
  - [事务的棘手概念](/v1/ch7/#事务的棘手概念)
    - [ACID的含义](/v1/ch7/#acid的含义)
      - [原子性](/v1/ch7/#原子性)
      - [一致性](/v1/ch7/#一致性)
      - [隔离性](/v1/ch7/#隔离性)
      - [持久性](/v1/ch7/#持久性)
      - [复制与持久性](/v1/ch7/#复制与持久性)
    - [单对象和多对象操作](/v1/ch7/#单对象和多对象操作)
      - [单对象写入](/v1/ch7/#单对象写入)
      - [多对象事务的需求](/v1/ch7/#多对象事务的需求)
      - [处理错误和中止](/v1/ch7/#处理错误和中止)
  - [弱隔离级别](/v1/ch7/#弱隔离级别)
    - [读已提交](/v1/ch7/#读已提交)
      - [没有脏读](/v1/ch7/#没有脏读)
      - [没有脏写](/v1/ch7/#没有脏写)
      - [实现读已提交](/v1/ch7/#实现读已提交)
    - [快照隔离和可重复读](/v1/ch7/#快照隔离和可重复读)
      - [实现快照隔离](/v1/ch7/#实现快照隔离)
      - [观察一致性快照的可见性规则](/v1/ch7/#观察一致性快照的可见性规则)
      - [索引和快照隔离](/v1/ch7/#索引和快照隔离)
      - [可重复读与命名混淆](/v1/ch7/#可重复读与命名混淆)
    - [防止丢失更新](/v1/ch7/#防止丢失更新)
      - [原子写](/v1/ch7/#原子写)
      - [显式锁定](/v1/ch7/#显式锁定)
      - [自动检测丢失的更新](/v1/ch7/#自动检测丢失的更新)
      - [比较并设置（CAS）](/v1/ch7/#比较并设置cas)
      - [冲突解决和复制](/v1/ch7/#冲突解决和复制)
    - [写入偏差与幻读](/v1/ch7/#写入偏差与幻读)
      - [写入偏差的特征](/v1/ch7/#写入偏差的特征)
      - [写入偏差的更多例子](/v1/ch7/#写入偏差的更多例子)
      - [导致写入偏差的幻读](/v1/ch7/#导致写入偏差的幻读)
      - [物化冲突](/v1/ch7/#物化冲突)
  - [可串行化](/v1/ch7/#可串行化)
    - [真的串行执行](/v1/ch7/#真的串行执行)
      - [在存储过程中封装事务](/v1/ch7/#在存储过程中封装事务)
      - [存储过程的优点和缺点](/v1/ch7/#存储过程的优点和缺点)
      - [分区](/v1/ch7/#分区)
      - [串行执行小结](/v1/ch7/#串行执行小结)
    - [两阶段锁定](/v1/ch7/#两阶段锁定)
      - [2PL不是2PC](/v1/ch7/#2pl不是2pc)
      - [实现两阶段锁](/v1/ch7/#实现两阶段锁)
      - [两阶段锁定的性能](/v1/ch7/#两阶段锁定的性能)
      - [谓词锁](/v1/ch7/#谓词锁)
      - [索引范围锁](/v1/ch7/#索引范围锁)
    - [可串行化快照隔离](/v1/ch7/#可串行化快照隔离)
      - [悲观与乐观的并发控制](/v1/ch7/#悲观与乐观的并发控制)
      - [基于过时前提的决策](/v1/ch7/#基于过时前提的决策)
      - [检测旧MVCC读取](/v1/ch7/#检测旧mvcc读取)
      - [检测影响之前读取的写入](/v1/ch7/#检测影响之前读取的写入)
      - [可串行化快照隔离的性能](/v1/ch7/#可串行化快照隔离的性能)
  - [本章小结](/v1/ch7/#本章小结)
  - [参考文献](/v1/ch7/#参考文献)
- [8 分布式系统的麻烦](/v1/ch8/)
  - [故障与部分失效](/v1/ch8/#故障与部分失效)
    - [云计算与超级计算机](/v1/ch8/#云计算与超级计算机)
      - [从不可靠的组件构建可靠的系统](/v1/ch8/#从不可靠的组件构建可靠的系统)
  - [不可靠的网络](/v1/ch8/#不可靠的网络)
    - [真实世界的网络故障](/v1/ch8/#真实世界的网络故障)
      - [网络分区](/v1/ch8/#网络分区)
    - [检测故障](/v1/ch8/#检测故障)
    - [超时与无穷的延迟](/v1/ch8/#超时与无穷的延迟)
      - [网络拥塞和排队](/v1/ch8/#网络拥塞和排队)
      - [TCP与UDP](/v1/ch8/#tcp与udp)
    - [同步网络与异步网络](/v1/ch8/#同步网络与异步网络)
      - [我们不能简单地使网络延迟可预测吗？](/v1/ch8/#我们不能简单地使网络延迟可预测吗)
    - [延迟和资源利用](/v1/ch8/#延迟和资源利用)
  - [不可靠的时钟](/v1/ch8/#不可靠的时钟)
    - [单调钟与日历时钟](/v1/ch8/#单调钟与日历时钟)
      - [日历时钟](/v1/ch8/#日历时钟)
      - [单调钟](/v1/ch8/#单调钟)
    - [时钟同步与准确性](/v1/ch8/#时钟同步与准确性)
    - [依赖同步时钟](/v1/ch8/#依赖同步时钟)
      - [有序事件的时间戳](/v1/ch8/#有序事件的时间戳)
      - [时钟读数存在置信区间](/v1/ch8/#时钟读数存在置信区间)
      - [全局快照的同步时钟](/v1/ch8/#全局快照的同步时钟)
    - [进程暂停](/v1/ch8/#进程暂停)
      - [响应时间保证](/v1/ch8/#响应时间保证)
      - [实时是真的吗？](/v1/ch8/#实时是真的吗)
      - [限制垃圾收集的影响](/v1/ch8/#限制垃圾收集的影响)
  - [知识、真相与谎言](/v1/ch8/#知识真相与谎言)
    - [真相由多数所定义](/v1/ch8/#真相由多数所定义)
      - [领导者和锁](/v1/ch8/#领导者和锁)
      - [防护令牌](/v1/ch8/#防护令牌)
    - [拜占庭故障](/v1/ch8/#拜占庭故障)
    - [拜占庭将军问题](/v1/ch8/#拜占庭将军问题)
      - [弱谎言形式](/v1/ch8/#弱谎言形式)
    - [系统模型与现实](/v1/ch8/#系统模型与现实)
      - [算法的正确性](/v1/ch8/#算法的正确性)
      - [安全性和活性](/v1/ch8/#安全性和活性)
      - [将系统模型映射到现实世界](/v1/ch8/#将系统模型映射到现实世界)
  - [本章小结](/v1/ch8/#本章小结)
  - [参考文献](/v1/ch8/#参考文献)
- [9 一致性与共识](/v1/ch9/)
  - [一致性保证](/v1/ch9/#一致性保证)
  - [线性一致性](/v1/ch9/#线性一致性)
    - [什么使得系统线性一致？](/v1/ch9/#什么使得系统线性一致)
    - [依赖线性一致性](/v1/ch9/#依赖线性一致性)
      - [锁定和领导选举](/v1/ch9/#锁定和领导选举)
      - [约束和唯一性保证](/v1/ch9/#约束和唯一性保证)
      - [跨信道的时序依赖](/v1/ch9/#跨信道的时序依赖)
    - [实现线性一致的系统](/v1/ch9/#实现线性一致的系统)
      - [线性一致性和法定人数](/v1/ch9/#线性一致性和法定人数)
    - [线性一致性的代价](/v1/ch9/#线性一致性的代价)
      - [CAP定理](/v1/ch9/#cap定理)
      - [CAP定理没有帮助](/v1/ch9/#cap定理没有帮助)
      - [线性一致性和网络延迟](/v1/ch9/#线性一致性和网络延迟)
  - [顺序保证](/v1/ch9/#顺序保证)
    - [顺序与因果关系](/v1/ch9/#顺序与因果关系)
      - [因果顺序不是全序的](/v1/ch9/#因果顺序不是全序的)
      - [线性一致性强于因果一致性](/v1/ch9/#线性一致性强于因果一致性)
      - [捕获因果关系](/v1/ch9/#捕获因果关系)
    - [序列号顺序](/v1/ch9/#序列号顺序)
      - [非因果序列号生成器](/v1/ch9/#非因果序列号生成器)
      - [兰伯特时间戳](/v1/ch9/#兰伯特时间戳)
      - [光有时间戳排序还不够](/v1/ch9/#光有时间戳排序还不够)
    - [全序广播](/v1/ch9/#全序广播)
      - [顺序保证的范围](/v1/ch9/#顺序保证的范围)
      - [使用全序广播](/v1/ch9/#使用全序广播)
      - [使用全序广播实现线性一致的存储](/v1/ch9/#使用全序广播实现线性一致的存储)
      - [使用线性一致性存储实现全序广播](/v1/ch9/#使用线性一致性存储实现全序广播)
  - [分布式事务与共识](/v1/ch9/#分布式事务与共识)
    - [共识的不可能性](/v1/ch9/#共识的不可能性)
    - [原子提交与两阶段提交](/v1/ch9/#原子提交与两阶段提交)
      - [从单节点到分布式原子提交](/v1/ch9/#从单节点到分布式原子提交)
      - [两阶段提交简介](/v1/ch9/#两阶段提交简介)
      - [不要把2PC和2PL搞混了](/v1/ch9/#不要把2pc和2pl搞混了)
      - [系统承诺](/v1/ch9/#系统承诺)
      - [协调者失效](/v1/ch9/#协调者失效)
      - [三阶段提交](/v1/ch9/#三阶段提交)
    - [实践中的分布式事务](/v1/ch9/#实践中的分布式事务)
      - [恰好一次的消息处理](/v1/ch9/#恰好一次的消息处理)
      - [XA事务](/v1/ch9/#xa事务)
      - [怀疑时持有锁](/v1/ch9/#怀疑时持有锁)
      - [从协调者故障中恢复](/v1/ch9/#从协调者故障中恢复)
      - [分布式事务的限制](/v1/ch9/#分布式事务的限制)
    - [容错共识](/v1/ch9/#容错共识)
      - [共识算法和全序广播](/v1/ch9/#共识算法和全序广播)
      - [单主复制与共识](/v1/ch9/#单主复制与共识)
      - [纪元编号和法定人数](/v1/ch9/#纪元编号和法定人数)
      - [共识的局限性](/v1/ch9/#共识的局限性)
    - [成员与协调服务](/v1/ch9/#成员与协调服务)
      - [将工作分配给节点](/v1/ch9/#将工作分配给节点)
      - [服务发现](/v1/ch9/#服务发现)
      - [成员资格服务](/v1/ch9/#成员资格服务)
  - [本章小结](/v1/ch9/#本章小结)
  - [参考文献](/v1/ch9/#参考文献)
- [III 衍生数据](/v1/part-iii/)
  - [记录系统和衍生数据系统](/v1/part-iii/#记录系统和衍生数据系统)
  - [章节概述](/v1/part-iii/#章节概述)
  - [索引](/v1/part-iii/#索引)
- [10 批处理](/v1/ch10/)
  - [使用Unix工具的批处理](/v1/ch10/#使用unix工具的批处理)
    - [简单日志分析](/v1/ch10/#简单日志分析)
      - [命令链与自定义程序](/v1/ch10/#命令链与自定义程序)
      - [排序 VS 内存中的聚合](/v1/ch10/#排序-vs-内存中的聚合)
    - [Unix哲学](/v1/ch10/#unix哲学)
      - [统一的接口](/v1/ch10/#统一的接口)
      - [逻辑与布线相分离](/v1/ch10/#逻辑与布线相分离)
      - [透明度和实验](/v1/ch10/#透明度和实验)
  - [MapReduce和分布式文件系统](/v1/ch10/#mapreduce和分布式文件系统)
    - [MapReduce作业执行](/v1/ch10/#mapreduce作业执行)
      - [分布式执行MapReduce](/v1/ch10/#分布式执行mapreduce)
      - [MapReduce工作流](/v1/ch10/#mapreduce工作流)
    - [Reduce侧连接与分组](/v1/ch10/#reduce侧连接与分组)
      - [示例：用户活动事件分析](/v1/ch10/#示例用户活动事件分析)
      - [排序合并连接](/v1/ch10/#排序合并连接)
      - [把相关数据放在一起](/v1/ch10/#把相关数据放在一起)
      - [分组](/v1/ch10/#分组)
      - [处理偏斜](/v1/ch10/#处理偏斜)
    - [Map侧连接](/v1/ch10/#map侧连接)
      - [广播散列连接](/v1/ch10/#广播散列连接)
      - [分区散列连接](/v1/ch10/#分区散列连接)
      - [Map侧合并连接](/v1/ch10/#map侧合并连接)
      - [MapReduce工作流与Map侧连接](/v1/ch10/#mapreduce工作流与map侧连接)
    - [批处理工作流的输出](/v1/ch10/#批处理工作流的输出)
      - [建立搜索索引](/v1/ch10/#建立搜索索引)
      - [键值存储作为批处理输出](/v1/ch10/#键值存储作为批处理输出)
      - [批处理输出的哲学](/v1/ch10/#批处理输出的哲学)
    - [Hadoop与分布式数据库的对比](/v1/ch10/#hadoop与分布式数据库的对比)
      - [存储多样性](/v1/ch10/#存储多样性)
      - [处理模型的多样性](/v1/ch10/#处理模型的多样性)
      - [针对频繁故障设计](/v1/ch10/#针对频繁故障设计)
  - [MapReduce之后](/v1/ch10/#mapreduce之后)
    - [物化中间状态](/v1/ch10/#物化中间状态)
      - [数据流引擎](/v1/ch10/#数据流引擎)
      - [容错](/v1/ch10/#容错)
      - [关于物化的讨论](/v1/ch10/#关于物化的讨论)
    - [图与迭代处理](/v1/ch10/#图与迭代处理)
      - [Pregel处理模型](/v1/ch10/#pregel处理模型)
      - [容错](/v1/ch10/#容错-1)
      - [并行执行](/v1/ch10/#并行执行)
    - [高级API和语言](/v1/ch10/#高级api和语言)
      - [向声明式查询语言的转变](/v1/ch10/#向声明式查询语言的转变)
      - [专业化的不同领域](/v1/ch10/#专业化的不同领域)
  - [本章小结](/v1/ch10/#本章小结)
  - [参考文献](/v1/ch10/#参考文献)
- [11 流处理](/v1/ch11/)
  - [传递事件流](/v1/ch11/#传递事件流)
    - [消息传递系统](/v1/ch11/#消息传递系统)
      - [直接从生产者传递给消费者](/v1/ch11/#直接从生产者传递给消费者)
      - [消息代理](/v1/ch11/#消息代理)
      - [消息代理与数据库的对比](/v1/ch11/#消息代理与数据库的对比)
      - [多个消费者](/v1/ch11/#多个消费者)
      - [确认与重新传递](/v1/ch11/#确认与重新传递)
    - [分区日志](/v1/ch11/#分区日志)
      - [使用日志进行消息存储](/v1/ch11/#使用日志进行消息存储)
      - [日志与传统的消息传递相比](/v1/ch11/#日志与传统的消息传递相比)
      - [消费者偏移量](/v1/ch11/#消费者偏移量)
      - [磁盘空间使用](/v1/ch11/#磁盘空间使用)
      - [当消费者跟不上生产者时](/v1/ch11/#当消费者跟不上生产者时)
      - [重播旧消息](/v1/ch11/#重播旧消息)
  - [数据库与流](/v1/ch11/#数据库与流)
    - [保持系统同步](/v1/ch11/#保持系统同步)
    - [变更数据捕获](/v1/ch11/#变更数据捕获)
      - [变更数据捕获的实现](/v1/ch11/#变更数据捕获的实现)
      - [初始快照](/v1/ch11/#初始快照)
      - [日志压缩](/v1/ch11/#日志压缩)
      - [变更流的API支持](/v1/ch11/#变更流的api支持)
    - [事件溯源](/v1/ch11/#事件溯源)
      - [从事件日志中派生出当前状态](/v1/ch11/#从事件日志中派生出当前状态)
      - [命令和事件](/v1/ch11/#命令和事件)
    - [状态、流和不变性](/v1/ch11/#状态流和不变性)
      - [不可变事件的优点](/v1/ch11/#不可变事件的优点)
      - [从同一事件日志中派生多个视图](/v1/ch11/#从同一事件日志中派生多个视图)
      - [并发控制](/v1/ch11/#并发控制)
      - [不变性的局限性](/v1/ch11/#不变性的局限性)
  - [流处理](/v1/ch11/#流处理)
    - [流处理的应用](/v1/ch11/#流处理的应用)
      - [复合事件处理](/v1/ch11/#复合事件处理)
      - [流分析](/v1/ch11/#流分析)
      - [维护物化视图](/v1/ch11/#维护物化视图)
      - [在流上搜索](/v1/ch11/#在流上搜索)
      - [消息传递和RPC](/v1/ch11/#消息传递和rpc)
    - [时间推理](/v1/ch11/#时间推理)
      - [事件时间与处理时间](/v1/ch11/#事件时间与处理时间)
      - [知道什么时候准备好了](/v1/ch11/#知道什么时候准备好了)
      - [你用的是谁的时钟？](/v1/ch11/#你用的是谁的时钟)
      - [窗口的类型](/v1/ch11/#窗口的类型)
    - [流连接](/v1/ch11/#流连接)
      - [流流连接（窗口连接）](/v1/ch11/#流流连接窗口连接)
      - [流表连接（流扩充）](/v1/ch11/#流表连接流扩充)
      - [表表连接（维护物化视图）](/v1/ch11/#表表连接维护物化视图)
      - [连接的时间依赖性](/v1/ch11/#连接的时间依赖性)
    - [容错](/v1/ch11/#容错)
      - [微批量与存档点](/v1/ch11/#微批量与存档点)
      - [原子提交再现](/v1/ch11/#原子提交再现)
      - [幂等性](/v1/ch11/#幂等性)
      - [失败后重建状态](/v1/ch11/#失败后重建状态)
  - [本章小结](/v1/ch11/#本章小结)
  - [参考文献](/v1/ch11/#参考文献)
- [12 数据系统的未来](/v1/ch12/)
  - [数据集成](/v1/ch12/#数据集成)
    - [组合使用衍生数据的工具](/v1/ch12/#组合使用衍生数据的工具)
      - [理解数据流](/v1/ch12/#理解数据流)
      - [衍生数据与分布式事务](/v1/ch12/#衍生数据与分布式事务)
      - [全序的限制](/v1/ch12/#全序的限制)
      - [排序事件以捕获因果关系](/v1/ch12/#排序事件以捕获因果关系)
    - [批处理与流处理](/v1/ch12/#批处理与流处理)
      - [维护衍生状态](/v1/ch12/#维护衍生状态)
      - [应用演化后重新处理数据](/v1/ch12/#应用演化后重新处理数据)
    - [铁路上的模式迁移](/v1/ch12/#铁路上的模式迁移)
      - [Lambda架构](/v1/ch12/#lambda架构)
      - [统一批处理和流处理](/v1/ch12/#统一批处理和流处理)
  - [分拆数据库](/v1/ch12/#分拆数据库)
    - [组合使用数据存储技术](/v1/ch12/#组合使用数据存储技术)
      - [创建索引](/v1/ch12/#创建索引)
      - [一切的元数据库](/v1/ch12/#一切的元数据库)
      - [开展分拆工作](/v1/ch12/#开展分拆工作)
      - [分拆系统vs集成系统](/v1/ch12/#分拆系统vs集成系统)
      - [少了什么？](/v1/ch12/#少了什么)
    - [围绕数据流设计应用](/v1/ch12/#围绕数据流设计应用)
      - [应用代码作为衍生函数](/v1/ch12/#应用代码作为衍生函数)
      - [应用代码和状态的分离](/v1/ch12/#应用代码和状态的分离)
      - [数据流：应用代码与状态变化的交互](/v1/ch12/#数据流应用代码与状态变化的交互)
      - [流处理器和服务](/v1/ch12/#流处理器和服务)
    - [观察衍生数据状态](/v1/ch12/#观察衍生数据状态)
      - [物化视图和缓存](/v1/ch12/#物化视图和缓存)
      - [有状态、可离线的客户端](/v1/ch12/#有状态可离线的客户端)
      - [将状态变更推送给客户端](/v1/ch12/#将状态变更推送给客户端)
      - [端到端的事件流](/v1/ch12/#端到端的事件流)
      - [读也是事件](/v1/ch12/#读也是事件)
      - [多分区数据处理](/v1/ch12/#多分区数据处理)
  - [将事情做正确](/v1/ch12/#将事情做正确)
    - [数据库的端到端原则](/v1/ch12/#数据库的端到端原则)
      - [正好执行一次操作](/v1/ch12/#正好执行一次操作)
      - [抑制重复](/v1/ch12/#抑制重复)
      - [操作标识符](/v1/ch12/#操作标识符)
      - [端到端原则](/v1/ch12/#端到端原则)
      - [在数据系统中应用端到端思考](/v1/ch12/#在数据系统中应用端到端思考)
    - [强制约束](/v1/ch12/#强制约束)
      - [唯一性约束需要达成共识](/v1/ch12/#唯一性约束需要达成共识)
      - [基于日志消息传递中的唯一性](/v1/ch12/#基于日志消息传递中的唯一性)
      - [多分区请求处理](/v1/ch12/#多分区请求处理)
    - [及时性与完整性](/v1/ch12/#及时性与完整性)
      - [数据流系统的正确性](/v1/ch12/#数据流系统的正确性)
      - [宽松地解释约束](/v1/ch12/#宽松地解释约束)
      - [无协调数据系统](/v1/ch12/#无协调数据系统)
    - [信任但验证](/v1/ch12/#信任但验证)
      - [维护完整性，尽管软件有Bug](/v1/ch12/#维护完整性尽管软件有bug)
      - [不要盲目信任承诺](/v1/ch12/#不要盲目信任承诺)
      - [验证的文化](/v1/ch12/#验证的文化)
      - [为可审计性而设计](/v1/ch12/#为可审计性而设计)
      - [端到端原则重现](/v1/ch12/#端到端原则重现)
      - [用于可审计数据系统的工具](/v1/ch12/#用于可审计数据系统的工具)
  - [做正确的事情](/v1/ch12/#做正确的事情)
    - [预测性分析](/v1/ch12/#预测性分析)
      - [偏见与歧视](/v1/ch12/#偏见与歧视)
      - [责任与问责](/v1/ch12/#责任与问责)
      - [反馈循环](/v1/ch12/#反馈循环)
    - [隐私和追踪](/v1/ch12/#隐私和追踪)
      - [监视](/v1/ch12/#监视)
      - [同意与选择的自由](/v1/ch12/#同意与选择的自由)
      - [隐私与数据使用](/v1/ch12/#隐私与数据使用)
      - [数据资产与权力](/v1/ch12/#数据资产与权力)
      - [回顾工业革命](/v1/ch12/#回顾工业革命)
      - [立法与自律](/v1/ch12/#立法与自律)
  - [本章小结](/v1/ch12/#本章小结)
  - [参考文献](/v1/ch12/#参考文献)
- [术语表](/v1/glossary/)
  - [异步（asynchronous）](/v1/glossary/#异步asynchronous)
  - [原子（atomic）](/v1/glossary/#原子atomic)
  - [背压（backpressure）](/v1/glossary/#背压backpressure)
  - [批处理（batch process）](/v1/glossary/#批处理batch-process)
  - [边界（bounded）](/v1/glossary/#边界bounded)
  - [拜占庭故障（Byzantine fault）](/v1/glossary/#拜占庭故障byzantine-fault)
  - [缓存（cache）](/v1/glossary/#缓存cache)
  - [CAP定理（CAP theorem）](/v1/glossary/#cap定理cap-theorem)
  - [因果关系（causality）](/v1/glossary/#因果关系causality)
  - [共识（consensus）](/v1/glossary/#共识consensus)
  - [数据仓库（data warehouse）](/v1/glossary/#数据仓库data-warehouse)
  - [声明式（declarative）](/v1/glossary/#声明式declarative)
  - [非规范化（denormalize）](/v1/glossary/#非规范化denormalize)
  - [衍生数据（derived data）](/v1/glossary/#衍生数据derived-data)
  - [确定性（deterministic）](/v1/glossary/#确定性deterministic)
  - [分布式（distributed）](/v1/glossary/#分布式distributed)
  - [持久（durable）](/v1/glossary/#持久durable)
  - [ETL（Extract-Transform-Load）](/v1/glossary/#etlextract-transform-load)
  - [故障切换（failover）](/v1/glossary/#故障切换failover)
  - [容错（fault-tolerant）](/v1/glossary/#容错fault-tolerant)
  - [流量控制（flow control）](/v1/glossary/#流量控制flow-control)
  - [追随者（follower）](/v1/glossary/#追随者follower)
  - [全文检索（full-text search）](/v1/glossary/#全文检索full-text-search)
  - [图（graph）](/v1/glossary/#图graph)
  - [散列（hash）](/v1/glossary/#散列hash)
  - [幂等（idempotent）](/v1/glossary/#幂等idempotent)
  - [索引（index）](/v1/glossary/#索引index)
  - [隔离性（isolation）](/v1/glossary/#隔离性isolation)
  - [连接（join）](/v1/glossary/#连接join)
  - [领导者（leader）](/v1/glossary/#领导者leader)
  - [线性化（linearizable）](/v1/glossary/#线性化linearizable)
  - [局部性（locality）](/v1/glossary/#局部性locality)
  - [锁（lock）](/v1/glossary/#锁lock)
  - [日志（log）](/v1/glossary/#日志log)
  - [物化（materialize）](/v1/glossary/#物化materialize)
  - [节点（node）](/v1/glossary/#节点node)
  - [规范化（normalized）](/v1/glossary/#规范化normalized)
  - [OLAP（Online Analytic Processing）](/v1/glossary/#olaponline-analytic-processing)
  - [OLTP（Online Transaction Processing）](/v1/glossary/#oltponline-transaction-processing)
  - [分区（partitioning）](/v1/glossary/#分区partitioning)
  - [百分位点（percentile）](/v1/glossary/#百分位点percentile)
  - [主键（primary key）](/v1/glossary/#主键primary-key)
  - [法定人数（quorum）](/v1/glossary/#法定人数quorum)
  - [再平衡（rebalance）](/v1/glossary/#再平衡rebalance)
  - [复制（replication）](/v1/glossary/#复制replication)
  - [模式（schema）](/v1/glossary/#模式schema)
  - [次级索引（secondary index）](/v1/glossary/#次级索引secondary-index)
  - [可串行化（serializable）](/v1/glossary/#可串行化serializable)
  - [无共享（shared-nothing）](/v1/glossary/#无共享shared-nothing)
  - [偏斜（skew）](/v1/glossary/#偏斜skew)
  - [脑裂（split brain）](/v1/glossary/#脑裂split-brain)
  - [存储过程（stored procedure）](/v1/glossary/#存储过程stored-procedure)
  - [流处理（stream process）](/v1/glossary/#流处理stream-process)
  - [同步（synchronous）](/v1/glossary/#同步synchronous)
  - [记录系统（system of record）](/v1/glossary/#记录系统system-of-record)
  - [超时（timeout）](/v1/glossary/#超时timeout)
  - [全序（total order）](/v1/glossary/#全序total-order)
  - [事务（transaction）](/v1/glossary/#事务transaction)
  - [两阶段提交（2PC, two-phase commit）](/v1/glossary/#两阶段提交2pc-two-phase-commit)
  - [两阶段锁定（2PL, two-phase locking）](/v1/glossary/#两阶段锁定2pl-two-phase-locking)
  - [无边界（unbounded）](/v1/glossary/#无边界unbounded)
- [后记](/v1/colophon/)
  - [关于作者](/v1/colophon/#关于作者)
  - [关于译者](/v1/colophon/#关于译者)
  - [后记](/v1/colophon/#后记)
- [贡献者](/v1/contrib/)
  - [译者](/v1/contrib/#译者)
  - [校订与维护](/v1/contrib/#校订与维护)
  - [繁体中文版本](/v1/contrib/#繁体中文版本)
  - [贡献列表](/v1/contrib/#贡献列表)

## 插图目录 {#list-of-figures}

全书编号插图使用稳定图号和锚点；正文中的“图 N-N”引用会同时链接到这里列出的目标。

- [图 1-1](/v1/ch1/#fig_ddia_0101) — 一个可能的组合使用多个组件的数据系统架构
- [图 1-2](/v1/ch1/#fig_ddia_0102) — 推特主页时间线的关系型模式简单实现
- [图 1-3](/v1/ch1/#fig_ddia_0103) — 用于分发推特至关注者的数据流水线，2012 年 11 月的负载参数【16】
- [图 1-4](/v1/ch1/#fig_ddia_0104) — 展示了一个服务 100 次请求响应时间的均值与百分位数
- [图 1-5](/v1/ch1/#fig_ddia_0105) — 当一个请求需要多个后端请求时，单个后端慢请求就会拖慢整个终端用户的请求
- [图 2-1](/v1/ch2/#fig_ddia_0201) — 使用关系型模式来表示领英简介
- [图 2-2](/v1/ch2/#fig_ddia_0202) — 一对多关系构建了一个树结构
- [图 2-3](/v1/ch2/#fig_ddia_0203) — 公司名不仅是字符串，还是一个指向公司实体的链接（LinkedIn 截图）
- [图 2-4](/v1/ch2/#fig_ddia_0204) — 使用多对多关系扩展简历
- [图 2-5](/v1/ch2/#fig_ddia_0205) — 图数据结构示例（框代表顶点，箭头代表边）
- [图 2-6](/v1/ch2/#fig_ddia_0206) — 使用示例 2\-11 中的 Datalog 规则来确定爱达荷州在北美。
- [图 3-1](/v1/ch3/#fig_ddia_0301) — 以类 CSV 格式存储键值对的日志，并使用内存散列映射进行索引。
- [图 3-2](/v1/ch3/#fig_ddia_0302) — 键值更新日志（统计猫咪视频的播放次数）的压缩，只保留每个键的最近值
- [图 3-3](/v1/ch3/#fig_ddia_0303) — 同时执行压缩和分段合并
- [图 3-4](/v1/ch3/#fig_ddia_0304) — 合并几个 SSTable 段，只保留每个键的最新值
- [图 3-5](/v1/ch3/#fig_ddia_0305) — 具有内存索引的 SSTable
- [图 3-6](/v1/ch3/#fig_ddia_0306) — 使用 B 树索引查找一个键
- [图 3-7](/v1/ch3/#fig_ddia_0307) — 通过分割页面来生长 B 树
- [图 3-8](/v1/ch3/#fig_ddia_0308) — ETL 至数据仓库的简化提纲
- [图 3-9](/v1/ch3/#fig_ddia_0309) — 用于数据仓库的星型模式的示例
- [图 3-10](/v1/ch3/#fig_ddia_0310) — 按列存储关系型数据，而不是行
- [图 3-11](/v1/ch3/#fig_ddia_0311) — 压缩的位图索引存储布局
- [图 3-12](/v1/ch3/#fig_ddia_0312) — 数据立方的两个维度，通过求和聚合
- [图 4-1](/v1/ch4/#fig_ddia_0401) — 使用 MessagePack 编码的记录（例 4\-1）
- [图 4-2](/v1/ch4/#fig_ddia_0402) — 使用 Thrift 二进制协议编码的记录
- [图 4-3](/v1/ch4/#fig_ddia_0403) — 使用 Thrift 压缩协议编码的记录
- [图 4-4](/v1/ch4/#fig_ddia_0404) — 使用 Protobuf 编码的记录
- [图 4-5](/v1/ch4/#fig_ddia_0405) — 使用 Avro 编码的记录
- [图 4-6](/v1/ch4/#fig_ddia_0406) — 一个 Avro Reader 解决读写模式的差异
- [图 4-7](/v1/ch4/#fig_ddia_0407) — 当较旧版本的应用程序更新以前由较新版本的应用程序编写的数据时，如果不小心，数据可能会丢失。
- [图 II-1](/v1/part-ii/#fig_ddia_part-ii_01) — 一个数据库切分为两个分区，每个分区都有两个副本
- [图 5-1](/v1/ch5/#fig_ddia_0501) — 基于领导者的（主\/从）复制
- [图 5-2](/v1/ch5/#fig_ddia_0502) — 基于领导者的复制：一个同步从库和一个异步从库
- [图 5-3](/v1/ch5/#fig_ddia_0503) — 用户写入后从旧副本中读取数据。需要写后读 \(read\-after\-write\) 的一致性来防止这种异常
- [图 5-4](/v1/ch5/#fig_ddia_0504) — 用户首先从新副本读取，然后从旧副本读取。时间看上去回退了。为了防止这种异常，我们需要单调的读取。
- [图 5-5](/v1/ch5/#fig_ddia_0505) — 如果某些分区的复制速度慢于其他分区，那么观察者可能会在看到问题之前先看到答案。
- [图 5-6](/v1/ch5/#fig_ddia_0506) — 跨多个数据中心的多主复制
- [图 5-7](/v1/ch5/#fig_ddia_0507) — 两个主库同时更新同一记录引起的写入冲突
- [图 5-8](/v1/ch5/#fig_ddia_0508) — 三种可以在多主复制中使用的拓扑示例。
- [图 5-9](/v1/ch5/#fig_ddia_0509) — 使用多主复制时，写入可能会以错误的顺序到达某些副本。
- [图 5-10](/v1/ch5/#fig_ddia_0510) — 法定写入，法定读取，并在节点中断后读修复。
- [图 5-11](/v1/ch5/#fig_ddia_0511) — 如果 \$w \+ r \> n\$，读取 r 个副本，至少有一个副本必然包含了最近的成功写入。
- [图 5-12](/v1/ch5/#fig_ddia_0512) — 并发写入 Dynamo 风格的数据存储：没有明确定义的顺序。
- [图 5-13](/v1/ch5/#fig_ddia_0513) — 在同时编辑购物车时捕获两个客户端之间的因果关系。
- [图 5-14](/v1/ch5/#fig_ddia_0514) — 图 5\-13 中的因果依赖关系图。
- [图 6-1](/v1/ch6/#fig_ddia_0601) — 组合使用复制和分区：每个节点充当某些分区的主库，其他分区充当从库。
- [图 6-2](/v1/ch6/#fig_ddia_0602) — 印刷版百科全书按照关键字范围进行分区
- [图 6-3](/v1/ch6/#fig_ddia_0603) — 按哈希键分区
- [图 6-4](/v1/ch6/#fig_ddia_0604) — 基于文档的次级索引进行分区
- [图 6-5](/v1/ch6/#fig_ddia_0605) — 基于关键词对次级索引进行分区
- [图 6-6](/v1/ch6/#fig_ddia_0606) — 将新节点添加到每个节点具有多个分区的数据库集群。
- [图 6-7](/v1/ch6/#fig_ddia_0607) — 将请求路由到正确节点的三种不同方式。
- [图 6-8](/v1/ch6/#fig_ddia_0608) — 使用 ZooKeeper 跟踪分区分配给节点。
- [图 7-1](/v1/ch7/#fig_ddia_0701) — 两个客户之间的竞争状态同时递增计数器
- [图 7-2](/v1/ch7/#fig_ddia_0702) — 违反隔离性：一个事务读取另一个事务的未被执行的写入（“脏读”）。
- [图 7-3](/v1/ch7/#fig_ddia_0703) — 原子性确保发生错误时，事务先前的任何写入都会被撤消，以避免状态不一致
- [图 7-4](/v1/ch7/#fig_ddia_0704) — 没有脏读：用户 2 只有在用户 1 的事务已经提交后才能看到 x 的新值。
- [图 7-5](/v1/ch7/#fig_ddia_0705) — 如果存在脏写，来自不同事务的冲突写入可能会混淆在一起
- [图 7-6](/v1/ch7/#fig_ddia_0706) — 读取偏差：Alice 观察数据库处于不一致的状态
- [图 7-7](/v1/ch7/#fig_ddia_0707) — 使用多版本对象实现快照隔离
- [图 7-8](/v1/ch7/#fig_ddia_0708) — 写入偏差导致应用程序错误的示例
- [图 7-9](/v1/ch7/#fig_ddia_0709) — 交互式事务和存储过程之间的区别（使用图 7\-8 的示例事务）
- [图 7-10](/v1/ch7/#fig_ddia_0710) — 检测事务何时从 MVCC 快照读取过时的值
- [图 7-11](/v1/ch7/#fig_ddia_0711) — 在可串行化快照隔离中，检测一个事务何时修改另一个事务的读取。
- [图 8-1](/v1/ch8/#fig_ddia_0801) — 如果发送请求并没有得到响应，则无法区分（a）请求是否丢失，（b）远程节点是否关闭，或（c）响应是否丢失。
- [图 8-2](/v1/ch8/#fig_ddia_0802) — 如果有多台机器将网络流量发送到同一目的地，则其交换机队列可能会被填满。在这里，端口 1\,2 和 4 都试图发送数据包到端口 3
- [图 8-3](/v1/ch8/#fig_ddia_0803) — 客户端 B 的写入比客户端 A 的写入要晚，但是 B 的写入具有较早的时间戳。
- [图 8-4](/v1/ch8/#fig_ddia_0804) — 分布式锁的实现不正确：客户端 1 认为它仍然具有有效的租约，即使它已经过期，从而破坏了存储中的文件
- [图 8-5](/v1/ch8/#fig_ddia_0805) — 只允许以增加防护令牌的顺序进行写操作，从而保证存储安全
- [图 9-1](/v1/ch9/#fig_ddia_0901) — 这个系统是非线性一致的，导致了球迷的困惑
- [图 9-2](/v1/ch9/#fig_ddia_0902) — 如果读取请求与写入请求并发，则可能会返回旧值或新值
- [图 9-3](/v1/ch9/#fig_ddia_0903) — 任何一个读取返回新值后，所有后续读取（在相同或其他客户端上）也必须返回新值。
- [图 9-4](/v1/ch9/#fig_ddia_0904) — 将读取和写入看起来已经生效的时间点进行可视化。客户端 B 的最后一次读取不是线性一致的
- [图 9-5](/v1/ch9/#fig_ddia_0905) — Web 服务器和图像缩放器通过文件存储和消息队列进行通信，打开竞争条件的可能性。
- [图 9-6](/v1/ch9/#fig_ddia_0906) — 非线性一致的执行，尽管使用了严格的法定人数
- [图 9-7](/v1/ch9/#fig_ddia_0907) — 网络中断迫使在线性一致性和可用性之间做出选择。
- [图 9-8](/v1/ch9/#fig_ddia_0908) — Lamport 时间戳提供了与因果关系一致的全序。
- [图 9-9](/v1/ch9/#fig_ddia_0909) — 两阶段提交（2PC）的成功执行
- [图 9-10](/v1/ch9/#fig_ddia_0910) — 参与者投赞成票后，协调者崩溃。数据库 1 不知道是否提交或中止
- [图 10-1](/v1/ch10/#fig_ddia_1001) — 具有三个 Mapper 和三个 Reducer 的 MapReduce 任务
- [图 10-2](/v1/ch10/#fig_ddia_1002) — 用户行为日志与用户档案的连接
- [图 10-3](/v1/ch10/#fig_ddia_1003) — 在用户 ID 上进行的 Reduce 端连接。如果输入数据集分区为多个文件，则每个分区都会被多个 Mapper 并行处理
- [图 11-1](/v1/ch11/#fig_ddia_1101) — （a）负载平衡：在消费者间共享消费主题；（b）扇出：将每条消息传递给多个消费者。
- [图 11-2](/v1/ch11/#fig_ddia_1102) — 在处理 m3 时消费者 2 崩溃，因此稍后重传至消费者 1
- [图 11-3](/v1/ch11/#fig_ddia_1103) — 生产者通过将消息追加写入主题分区文件来发送消息，消费者依次读取这些文件
- [图 11-4](/v1/ch11/#fig_ddia_1104) — 在数据库中 X 首先被设置为 A，然后被设置为 B，而在搜索索引处，写入以相反的顺序到达
- [图 11-5](/v1/ch11/#fig_ddia_1105) — 将数据按顺序写入一个数据库，然后按照相同的顺序将这些更改应用到其他系统
- [图 11-6](/v1/ch11/#fig_ddia_1106) — 应用当前状态与事件流之间的关系
- [图 11-7](/v1/ch11/#fig_ddia_1107) — 按处理时间分窗，会因为处理速率的变动引入人为因素
- [图 12-1](/v1/ch12/#fig_ddia_1201) — 在搜索索引中，写（文档更新）遇上读（查询）
