# 目录

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

---

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

---

![](/title.jpg)

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

- [目录](/zh/toc/)
  - [插图目录](/zh/toc/#list-of-figures)
  - [表格目录](/zh/toc/#list-of-tables)
  - [示例目录](/zh/toc/#list-of-examples)
- [序言](/zh/preface/)
  - [本书的目标读者](/zh/preface/#本书的目标读者)
  - [本书涉及的领域](/zh/preface/#本书涉及的领域)
  - [本书纲要](/zh/preface/#本书纲要)
  - [参考文献与延伸阅读](/zh/preface/#参考文献与延伸阅读)
  - [O‘Reilly Safari](/zh/preface/#oreilly-safari)
  - [联系我们](/zh/preface/#联系我们)
  - [致谢](/zh/preface/#致谢)
- [I 数据系统基础](/zh/part-i/)
  - [1. 数据系统架构中的权衡](/zh/part-i/#1-数据系统架构中的权衡)
  - [2. 定义非功能性需求](/zh/part-i/#2-定义非功能性需求)
  - [3. 数据模型与查询语言](/zh/part-i/#3-数据模型与查询语言)
  - [4. 存储与检索](/zh/part-i/#4-存储与检索)
  - [5. 编码与演化](/zh/part-i/#5-编码与演化)
- [1 数据系统架构中的权衡](/zh/ch1/)
  - [分析型与事务型系统](/zh/ch1/#sec_introduction_analytics)
    - [事务处理与分析的特征](/zh/ch1/#sec_introduction_oltp)
    - [数据仓库](/zh/ch1/#sec_introduction_dwh)
      - [从数据仓库到数据湖](/zh/ch1/#from-data-warehouse-to-data-lake)
      - [超越数据湖](/zh/ch1/#beyond-the-data-lake)
    - [记录系统与衍生数据](/zh/ch1/#sec_introduction_derived)
  - [云服务与自托管](/zh/ch1/#sec_introduction_cloud)
    - [云服务的利弊](/zh/ch1/#sec_introduction_cloud_tradeoffs)
    - [云原生系统架构](/zh/ch1/#sec_introduction_cloud_native)
      - [云服务的分层](/zh/ch1/#layering-of-cloud-services)
      - [存储与计算的分离](/zh/ch1/#sec_introduction_storage_compute)
    - [云时代的运维](/zh/ch1/#sec_introduction_operations)
  - [分布式与单节点系统](/zh/ch1/#sec_introduction_distributed)
    - [分布式系统的问题](/zh/ch1/#sec_introduction_dist_sys_problems)
    - [微服务与无服务器](/zh/ch1/#sec_introduction_microservices)
    - [云计算与超级计算](/zh/ch1/#id17)
  - [数据系统、法律与社会](/zh/ch1/#sec_introduction_compliance)
  - [总结](/zh/ch1/#summary)
    - [参考文献](/zh/ch1/#参考文献)
- [2 定义非功能性需求](/zh/ch2/)
  - [案例研究：社交网络首页时间线](/zh/ch2/#sec_introduction_twitter)
    - [表示用户、帖子与关注关系](/zh/ch2/#id20)
    - [时间线的物化与更新](/zh/ch2/#sec_introduction_materializing)
  - [描述性能](/zh/ch2/#sec_introduction_percentiles)
    - [延迟与响应时间](/zh/ch2/#id23)
    - [平均值、中位数与分位数](/zh/ch2/#id24)
    - [响应时间指标的应用](/zh/ch2/#sec_introduction_slo_sla)
  - [可靠性与容错](/zh/ch2/#sec_introduction_reliability)
    - [容错](/zh/ch2/#id27)
    - [硬件与软件故障](/zh/ch2/#sec_introduction_hardware_faults)
      - [通过冗余容忍硬件故障](/zh/ch2/#tolerating-hardware-faults-through-redundancy)
      - [软件故障](/zh/ch2/#software-faults)
    - [人类与可靠性](/zh/ch2/#id31)
  - [可伸缩性](/zh/ch2/#sec_introduction_scalability)
    - [描述负载](/zh/ch2/#id33)
    - [共享内存、共享磁盘与无共享架构](/zh/ch2/#sec_introduction_shared_nothing)
    - [可伸缩性原则](/zh/ch2/#id35)
  - [可维护性](/zh/ch2/#sec_introduction_maintainability)
    - [可运维性：让运维更轻松](/zh/ch2/#id37)
    - [简单性：管理复杂度](/zh/ch2/#id38)
    - [可演化性：让变化更容易](/zh/ch2/#sec_introduction_evolvability)
  - [总结](/zh/ch2/#summary)
    - [参考文献](/zh/ch2/#参考文献)
- [3 数据模型与查询语言](/zh/ch3/)
  - [关系模型与文档模型](/zh/ch3/#sec_datamodels_history)
    - [对象关系不匹配](/zh/ch3/#sec_datamodels_document)
      - [对象关系映射（ORM）](/zh/ch3/#object-relational-mapping-orm)
      - [用于一对多关系的文档数据模型](/zh/ch3/#the-document-data-model-for-one-to-many-relationships)
    - [规范化、反规范化与连接](/zh/ch3/#sec_datamodels_normalization)
      - [规范化的权衡](/zh/ch3/#trade-offs-of-normalization)
      - [社交网络案例研究中的反规范化](/zh/ch3/#denormalization-in-the-social-networking-case-study)
    - [多对一与多对多关系](/zh/ch3/#sec_datamodels_many_to_many)
    - [星型与雪花型：分析模式](/zh/ch3/#sec_datamodels_analytics)
    - [何时使用哪种模型](/zh/ch3/#sec_datamodels_document_summary)
      - [文档模型中的模式灵活性](/zh/ch3/#sec_datamodels_schema_flexibility)
      - [读写的数据局部性](/zh/ch3/#sec_datamodels_document_locality)
      - [文档的查询语言](/zh/ch3/#query-languages-for-documents)
      - [文档和关系数据库的融合](/zh/ch3/#convergence-of-document-and-relational-databases)
  - [图数据模型](/zh/ch3/#sec_datamodels_graph)
    - [属性图](/zh/ch3/#id56)
    - [Cypher 查询语言](/zh/ch3/#id57)
    - [SQL 中的图查询](/zh/ch3/#id58)
    - [三元组存储与 SPARQL](/zh/ch3/#id59)
      - [RDF 数据模型](/zh/ch3/#the-rdf-data-model)
      - [SPARQL 查询语言](/zh/ch3/#the-sparql-query-language)
    - [Datalog：递归关系查询](/zh/ch3/#id62)
    - [GraphQL](/zh/ch3/#id63)
  - [事件溯源与 CQRS](/zh/ch3/#sec_datamodels_events)
  - [数据框、矩阵与数组](/zh/ch3/#sec_datamodels_dataframes)
  - [总结](/zh/ch3/#summary)
    - [参考文献](/zh/ch3/#参考文献)
- [4 存储与检索](/zh/ch4/)
  - [OLTP 系统的存储与索引](/zh/ch4/#sec_storage_oltp)
    - [日志结构存储](/zh/ch4/#sec_storage_log_structured)
      - [SSTable 文件格式](/zh/ch4/#the-sstable-file-format)
      - [构建和合并 SSTable](/zh/ch4/#constructing-and-merging-sstables)
      - [布隆过滤器](/zh/ch4/#bloom-filters)
      - [压实策略](/zh/ch4/#sec_storage_lsm_compaction)
    - [B 树](/zh/ch4/#sec_storage_b_trees)
      - [使 B 树可靠](/zh/ch4/#sec_storage_btree_wal)
      - [B 树变体](/zh/ch4/#b-tree-variants)
    - [比较 B 树与 LSM 树](/zh/ch4/#sec_storage_btree_lsm_comparison)
      - [读取性能](/zh/ch4/#read-performance)
      - [顺序与随机写入](/zh/ch4/#sidebar_sequential)
      - [写放大](/zh/ch4/#write-amplification)
      - [磁盘空间使用](/zh/ch4/#disk-space-usage)
    - [多列索引与二级索引](/zh/ch4/#sec_storage_index_multicolumn)
      - [在索引中存储值](/zh/ch4/#sec_storage_index_heap)
    - [全内存存储](/zh/ch4/#sec_storage_inmemory)
  - [分析型数据存储](/zh/ch4/#sec_storage_analytics)
    - [云数据仓库](/zh/ch4/#sec_cloud_data_warehouses)
    - [列式存储](/zh/ch4/#sec_storage_column)
      - [列压缩](/zh/ch4/#sec_storage_column_compression)
      - [列存储中的排序顺序](/zh/ch4/#sort-order-in-column-storage)
      - [写入列式存储](/zh/ch4/#writing-to-column-oriented-storage)
    - [查询执行：编译与向量化](/zh/ch4/#sec_storage_vectorized)
    - [物化视图与多维数据集](/zh/ch4/#sec_storage_materialized_views)
  - [多维索引与全文索引](/zh/ch4/#sec_storage_multidimensional)
    - [全文检索](/zh/ch4/#sec_storage_full_text)
    - [向量嵌入](/zh/ch4/#id92)
  - [总结](/zh/ch4/#summary)
    - [参考文献](/zh/ch4/#参考文献)
- [5 编码与演化](/zh/ch5/)
  - [编码数据的格式](/zh/ch5/#sec_encoding_formats)
    - [特定语言的格式](/zh/ch5/#id96)
    - [JSON、XML 及其二进制变体](/zh/ch5/#sec_encoding_json)
      - [JSON 模式](/zh/ch5/#json-schema)
      - [二进制编码](/zh/ch5/#binary-encoding)
    - [Protocol Buffers](/zh/ch5/#sec_encoding_protobuf)
      - [字段标签与模式演化](/zh/ch5/#field-tags-and-schema-evolution)
    - [Avro](/zh/ch5/#sec_encoding_avro)
      - [写入者模式与读取者模式](/zh/ch5/#the-writers-schema-and-the-readers-schema)
      - [模式演化规则](/zh/ch5/#schema-evolution-rules)
      - [但什么是写入者模式？](/zh/ch5/#but-what-is-the-writers-schema)
      - [动态生成的模式](/zh/ch5/#dynamically-generated-schemas)
    - [模式的优点](/zh/ch5/#sec_encoding_schemas)
  - [数据流的模式](/zh/ch5/#sec_encoding_dataflow)
    - [流经数据库的数据流](/zh/ch5/#sec_encoding_dataflow_db)
      - [不同时间写入的不同值](/zh/ch5/#different-values-written-at-different-times)
      - [归档存储](/zh/ch5/#archival-storage)
    - [流经服务的数据流：REST 与 RPC](/zh/ch5/#sec_encoding_dataflow_rpc)
      - [Web 服务](/zh/ch5/#sec_web_services)
      - [远程过程调用（RPC）的问题](/zh/ch5/#sec_problems_with_rpc)
      - [负载均衡器、服务发现和服务网格](/zh/ch5/#sec_encoding_service_discovery)
      - [RPC 的数据编码与演化](/zh/ch5/#data-encoding-and-evolution-for-rpc)
    - [持久化执行与工作流](/zh/ch5/#sec_encoding_dataflow_workflows)
      - [持久化执行](/zh/ch5/#durable-execution)
    - [事件驱动的架构](/zh/ch5/#sec_encoding_dataflow_msg)
      - [消息代理](/zh/ch5/#message-brokers)
      - [分布式 actor 框架](/zh/ch5/#distributed-actor-frameworks)
  - [总结](/zh/ch5/#summary)
    - [参考文献](/zh/ch5/#参考文献)
- [II 分布式数据](/zh/part-ii/)
  - [伸缩至更高的负载](/zh/part-ii/#伸缩至更高的负载)
    - [无共享架构](/zh/part-ii/#无共享架构)
    - [复制 vs 分区](/zh/part-ii/#复制-vs-分区)
  - [6. 复制](/zh/part-ii/#6-复制)
  - [7. 分片](/zh/part-ii/#7-分片)
  - [8. 事务](/zh/part-ii/#8-事务)
  - [9. 分布式系统的麻烦](/zh/part-ii/#9-分布式系统的麻烦)
  - [10. 一致性与共识](/zh/part-ii/#10-一致性与共识)
    - [参考](/zh/part-ii/#参考)
- [6 复制](/zh/ch6/)
  - [单主复制](/zh/ch6/#sec_replication_leader)
    - [同步复制与异步复制](/zh/ch6/#sec_replication_sync_async)
    - [设置新的副本](/zh/ch6/#sec_replication_new_replica)
    - [处理节点故障](/zh/ch6/#sec_replication_failover)
      - [追随者失效：追赶恢复](/zh/ch6/#follower-failure-catch-up-recovery)
      - [领导者失效：故障切换](/zh/ch6/#leader-failure-failover)
    - [复制日志的实现](/zh/ch6/#sec_replication_implementation)
      - [基于语句的复制](/zh/ch6/#statement-based-replication)
      - [预写日志（WAL）传输](/zh/ch6/#write-ahead-log-wal-shipping)
      - [逻辑（基于行）日志复制](/zh/ch6/#logical-row-based-log-replication)
  - [复制延迟的问题](/zh/ch6/#sec_replication_lag)
    - [读己之写](/zh/ch6/#sec_replication_ryw)
    - [单调读](/zh/ch6/#sec_replication_monotonic_reads)
    - [一致前缀读](/zh/ch6/#sec_replication_consistent_prefix)
    - [复制延迟的解决方案](/zh/ch6/#id131)
  - [多主复制](/zh/ch6/#sec_replication_multi_leader)
    - [跨地域运行](/zh/ch6/#sec_replication_multi_dc)
      - [多主复制拓扑](/zh/ch6/#sec_replication_topologies)
      - [不同拓扑的问题](/zh/ch6/#problems-with-different-topologies)
    - [同步引擎与本地优先软件](/zh/ch6/#sec_replication_offline_clients)
      - [实时协作、离线优先和本地优先应用](/zh/ch6/#real-time-collaboration-offline-first-and-local-first-apps)
      - [同步引擎的利弊](/zh/ch6/#pros-and-cons-of-sync-engines)
    - [处理写入冲突](/zh/ch6/#sec_replication_write_conflicts)
      - [冲突避免](/zh/ch6/#conflict-avoidance)
      - [最后写入者胜（丢弃并发写入）](/zh/ch6/#sec_replication_lww)
      - [手动冲突解决](/zh/ch6/#manual-conflict-resolution)
      - [自动冲突解决](/zh/ch6/#automatic-conflict-resolution)
    - [CRDT 与操作变换](/zh/ch6/#sec_replication_crdts)
      - [什么是冲突？](/zh/ch6/#what-is-a-conflict)
  - [无主复制](/zh/ch6/#sec_replication_leaderless)
    - [当节点故障时写入数据库](/zh/ch6/#id287)
      - [追赶错过的写入](/zh/ch6/#sec_replication_read_repair)
      - [读写仲裁](/zh/ch6/#sec_replication_quorum_condition)
    - [仲裁一致性的局限](/zh/ch6/#sec_replication_quorum_limitations)
      - [监控陈旧性](/zh/ch6/#monitoring-staleness)
    - [单主与无主复制的性能](/zh/ch6/#sec_replication_leaderless_perf)
      - [多地区操作](/zh/ch6/#multi-region-operation)
    - [检测并发写入](/zh/ch6/#sec_replication_concurrent)
      - [“先发生”关系与并发](/zh/ch6/#sec_replication_happens_before)
      - [捕获先发生关系](/zh/ch6/#capturing-the-happens-before-relationship)
      - [版本向量](/zh/ch6/#version-vectors)
  - [总结](/zh/ch6/#summary)
    - [参考文献](/zh/ch6/#参考文献)
- [7 分片](/zh/ch7/)
  - [分片的利与弊](/zh/ch7/#sec_sharding_reasons)
    - [面向多租户的分片](/zh/ch7/#sec_sharding_multitenancy)
  - [键值数据的分片](/zh/ch7/#sec_sharding_key_value)
    - [按键的范围分片](/zh/ch7/#sec_sharding_key_range)
      - [再平衡键范围分片数据](/zh/ch7/#rebalancing-key-range-sharded-data)
    - [按键的哈希分片](/zh/ch7/#sec_sharding_hash)
      - [哈希取模节点数](/zh/ch7/#hash-modulo-number-of-nodes)
      - [固定数量的分片](/zh/ch7/#fixed-number-of-shards)
      - [按哈希范围分片](/zh/ch7/#sharding-by-hash-range)
      - [一致性哈希](/zh/ch7/#sec_sharding_consistent_hashing)
    - [倾斜的工作负载与缓解热点](/zh/ch7/#sec_sharding_skew)
    - [运维：自动/手动再平衡](/zh/ch7/#sec_sharding_operations)
  - [请求路由](/zh/ch7/#sec_sharding_routing)
  - [分片与二级索引](/zh/ch7/#sec_sharding_secondary_indexes)
    - [本地二级索引](/zh/ch7/#id166)
    - [全局二级索引](/zh/ch7/#id167)
  - [总结](/zh/ch7/#summary)
    - [参考文献](/zh/ch7/#参考文献)
- [8 事务](/zh/ch8/)
  - [事务到底是什么？](/zh/ch8/#sec_transactions_overview)
    - [ACID 的含义](/zh/ch8/#sec_transactions_acid)
      - [原子性](/zh/ch8/#sec_transactions_acid_atomicity)
      - [一致性](/zh/ch8/#sec_transactions_acid_consistency)
      - [隔离性](/zh/ch8/#sec_transactions_acid_isolation)
      - [持久性](/zh/ch8/#durability)
    - [单对象与多对象操作](/zh/ch8/#sec_transactions_multi_object)
      - [单对象写入](/zh/ch8/#sec_transactions_single_object)
      - [多对象事务的需求](/zh/ch8/#sec_transactions_need)
      - [处理错误和中止](/zh/ch8/#handling-errors-and-aborts)
  - [弱隔离级别](/zh/ch8/#sec_transactions_isolation_levels)
    - [读已提交](/zh/ch8/#sec_transactions_read_committed)
      - [没有脏读](/zh/ch8/#no-dirty-reads)
      - [没有脏写](/zh/ch8/#sec_transactions_dirty_write)
      - [实现读已提交](/zh/ch8/#sec_transactions_read_committed_impl)
    - [快照隔离与可重复读](/zh/ch8/#sec_transactions_snapshot_isolation)
      - [多版本并发控制（MVCC）](/zh/ch8/#sec_transactions_snapshot_impl)
      - [观察一致快照的可见性规则](/zh/ch8/#sec_transactions_mvcc_visibility)
      - [索引与快照隔离](/zh/ch8/#indexes-and-snapshot-isolation)
      - [快照隔离、可重复读和命名混淆](/zh/ch8/#snapshot-isolation-repeatable-read-and-naming-confusion)
    - [防止丢失更新](/zh/ch8/#sec_transactions_lost_update)
      - [原子写操作](/zh/ch8/#atomic-write-operations)
      - [显式锁定](/zh/ch8/#explicit-locking)
      - [自动检测丢失更新](/zh/ch8/#automatically-detecting-lost-updates)
      - [条件写入（比较并设置）](/zh/ch8/#sec_transactions_compare_and_set)
      - [冲突解决与复制](/zh/ch8/#conflict-resolution-and-replication)
    - [写偏差与幻读](/zh/ch8/#sec_transactions_write_skew)
      - [写偏差的特征](/zh/ch8/#characterizing-write-skew)
      - [写偏差的更多例子](/zh/ch8/#more-examples-of-write-skew)
      - [导致写偏差的幻读](/zh/ch8/#sec_transactions_phantom)
      - [物化冲突](/zh/ch8/#materializing-conflicts)
  - [可串行化](/zh/ch8/#sec_transactions_serializability)
    - [实际串行执行](/zh/ch8/#sec_transactions_serial)
      - [将事务封装在存储过程中](/zh/ch8/#encapsulating-transactions-in-stored-procedures)
      - [存储过程的利弊](/zh/ch8/#sec_transactions_stored_proc_tradeoffs)
      - [分片](/zh/ch8/#sharding)
      - [串行执行总结](/zh/ch8/#summary-of-serial-execution)
    - [两阶段锁定（2PL）](/zh/ch8/#sec_transactions_2pl)
      - [两阶段锁定的实现](/zh/ch8/#implementation-of-two-phase-locking)
      - [两阶段锁定的性能](/zh/ch8/#performance-of-two-phase-locking)
      - [谓词锁](/zh/ch8/#predicate-locks)
      - [索引范围锁](/zh/ch8/#sec_transactions_2pl_range)
    - [可串行化快照隔离（SSI）](/zh/ch8/#sec_transactions_ssi)
      - [悲观并发控制与乐观并发控制](/zh/ch8/#pessimistic-versus-optimistic-concurrency-control)
      - [基于过时前提的决策](/zh/ch8/#decisions-based-on-an-outdated-premise)
      - [检测陈旧的 MVCC 读取](/zh/ch8/#detecting-stale-mvcc-reads)
      - [检测影响先前读取的写入](/zh/ch8/#sec_detecting_writes_affect_reads)
      - [可串行化快照隔离的性能](/zh/ch8/#performance-of-serializable-snapshot-isolation)
  - [分布式事务](/zh/ch8/#sec_transactions_distributed)
    - [两阶段提交（2PC）](/zh/ch8/#sec_transactions_2pc)
      - [系统承诺](/zh/ch8/#a-system-of-promises)
      - [协调者失效](/zh/ch8/#coordinator-failure)
      - [三阶段提交](/zh/ch8/#three-phase-commit)
    - [跨不同系统的分布式事务](/zh/ch8/#sec_transactions_xa)
      - [恰好一次消息处理](/zh/ch8/#sec_transactions_exactly_once)
      - [XA 事务](/zh/ch8/#xa-transactions)
      - [存疑时持有锁](/zh/ch8/#holding-locks-while-in-doubt)
      - [从协调者失效中恢复](/zh/ch8/#recovering-from-coordinator-failure)
      - [XA 事务的问题](/zh/ch8/#problems-with-xa-transactions)
    - [数据库内部的分布式事务](/zh/ch8/#sec_transactions_internal)
      - [再谈恰好一次消息处理](/zh/ch8/#exactly-once-message-processing-revisited)
  - [总结](/zh/ch8/#summary)
    - [参考文献](/zh/ch8/#references)
- [9 分布式系统的麻烦](/zh/ch9/)
  - [故障与部分失效](/zh/ch9/#sec_distributed_partial_failure)
  - [不可靠的网络](/zh/ch9/#sec_distributed_networks)
    - [TCP 的局限性](/zh/ch9/#sec_distributed_tcp)
    - [实践中的网络故障](/zh/ch9/#sec_distributed_network_faults)
    - [故障检测](/zh/ch9/#id307)
    - [超时和无界延迟](/zh/ch9/#sec_distributed_queueing)
      - [网络拥塞与排队](/zh/ch9/#network-congestion-and-queueing)
    - [同步网络与异步网络](/zh/ch9/#sec_distributed_sync_networks)
      - [我们不能简单地让网络延迟可预测吗？](/zh/ch9/#can-we-not-simply-make-network-delays-predictable)
  - [不可靠的时钟](/zh/ch9/#sec_distributed_clocks)
    - [单调时钟与日历时钟](/zh/ch9/#sec_distributed_monotonic_timeofday)
      - [日历时钟](/zh/ch9/#time-of-day-clocks)
      - [单调时钟](/zh/ch9/#monotonic-clocks)
    - [时钟同步和准确性](/zh/ch9/#sec_distributed_clock_accuracy)
    - [对同步时钟的依赖](/zh/ch9/#sec_distributed_clocks_relying)
      - [用于事件排序的时间戳](/zh/ch9/#sec_distributed_lww)
      - [带置信区间的时钟读数](/zh/ch9/#clock-readings-with-a-confidence-interval)
      - [用于全局快照的同步时钟](/zh/ch9/#sec_distributed_spanner)
    - [进程暂停](/zh/ch9/#sec_distributed_clocks_pauses)
      - [响应时间保证](/zh/ch9/#sec_distributed_clocks_realtime)
      - [限制垃圾回收的影响](/zh/ch9/#sec_distributed_gc_impact)
  - [知识、真相和谎言](/zh/ch9/#sec_distributed_truth)
    - [多数派原则](/zh/ch9/#sec_distributed_majority)
    - [分布式锁和租约](/zh/ch9/#sec_distributed_lock_fencing)
      - [用栅栏机制隔离僵尸与延迟请求](/zh/ch9/#sec_distributed_fencing_tokens)
      - [多副本隔离](/zh/ch9/#fencing-with-multiple-replicas)
    - [拜占庭故障](/zh/ch9/#sec_distributed_byzantine)
      - [弱形式的谎言](/zh/ch9/#weak-forms-of-lying)
    - [系统模型与现实](/zh/ch9/#sec_distributed_system_model)
      - [定义算法的正确性](/zh/ch9/#defining-the-correctness-of-an-algorithm)
      - [安全性与活性](/zh/ch9/#sec_distributed_safety_liveness)
      - [将系统模型映射到现实世界](/zh/ch9/#mapping-system-models-to-the-real-world)
    - [形式化方法和随机测试](/zh/ch9/#sec_distributed_formal)
      - [模型检查与规范语言](/zh/ch9/#model-checking-and-specification-languages)
      - [故障注入](/zh/ch9/#sec_fault_injection)
      - [确定性模拟测试](/zh/ch9/#deterministic-simulation-testing)
  - [总结](/zh/ch9/#summary)
    - [参考文献](/zh/ch9/#参考文献)
- [10 一致性与共识](/zh/ch10/)
  - [线性一致性](/zh/ch10/#sec_consistency_linearizability)
    - [什么使系统具有线性一致性？](/zh/ch10/#sec_consistency_lin_definition)
    - [依赖线性一致性](/zh/ch10/#sec_consistency_linearizability_usage)
      - [锁定与领导者选举](/zh/ch10/#locking-and-leader-election)
      - [约束与唯一性保证](/zh/ch10/#sec_consistency_uniqueness)
      - [跨通道时序依赖](/zh/ch10/#cross-channel-timing-dependencies)
    - [实现线性一致性系统](/zh/ch10/#sec_consistency_implementing_linearizable)
      - [线性一致性与仲裁](/zh/ch10/#sec_consistency_quorum_linearizable)
    - [线性一致性的代价](/zh/ch10/#sec_linearizability_cost)
      - [CAP 定理](/zh/ch10/#the-cap-theorem)
      - [线性一致性与网络延迟](/zh/ch10/#linearizability-and-network-delays)
  - [ID 生成器和逻辑时钟](/zh/ch10/#sec_consistency_logical)
    - [逻辑时钟](/zh/ch10/#sec_consistency_timestamps)
      - [Lamport 时间戳](/zh/ch10/#lamport-timestamps)
      - [混合逻辑时钟](/zh/ch10/#hybrid-logical-clocks)
      - [Lamport/混合逻辑时钟 vs. 向量时钟](/zh/ch10/#lamporthybrid-logical-clocks-vs-vector-clocks)
    - [线性一致的 ID 生成器](/zh/ch10/#sec_consistency_linearizable_id)
      - [实现线性一致的 ID 生成器](/zh/ch10/#implementing-a-linearizable-id-generator)
      - [使用逻辑时钟强制约束](/zh/ch10/#enforcing-constraints-using-logical-clocks)
  - [共识](/zh/ch10/#sec_consistency_consensus)
    - [共识的多面性](/zh/ch10/#sec_consistency_faces)
      - [单值共识](/zh/ch10/#single-value-consensus)
      - [比较并设置作为共识](/zh/ch10/#compare-and-set-as-consensus)
      - [共享日志作为共识](/zh/ch10/#sec_consistency_shared_logs)
      - [获取并增加作为共识](/zh/ch10/#fetch-and-add-as-consensus)
      - [原子提交作为共识](/zh/ch10/#atomic-commitment-as-consensus)
    - [共识的实践](/zh/ch10/#sec_consistency_total_order)
      - [使用共享日志](/zh/ch10/#sec_consistency_smr)
      - [从单主复制到共识](/zh/ch10/#from-single-leader-replication-to-consensus)
      - [共识的微妙之处](/zh/ch10/#subtleties-of-consensus)
      - [共识的利弊](/zh/ch10/#pros-and-cons-of-consensus)
    - [协调服务](/zh/ch10/#sec_consistency_coordination)
      - [将工作分配给节点](/zh/ch10/#allocating-work-to-nodes)
      - [服务发现](/zh/ch10/#service-discovery)
  - [总结](/zh/ch10/#summary)
    - [参考文献](/zh/ch10/#参考文献)
- [III 衍生数据](/zh/part-iii/)
  - [记录系统和衍生数据系统](/zh/part-iii/#记录系统和衍生数据系统)
  - [章节概述](/zh/part-iii/#章节概述)
  - [索引](/zh/part-iii/#索引)
  - [11. 批处理](/zh/part-iii/#11-批处理)
  - [12. 流处理](/zh/part-iii/#12-流处理)
  - [13. 流式系统的哲学](/zh/part-iii/#13-流式系统的哲学)
  - [14. 做正确的事情](/zh/part-iii/#14-做正确的事情)
- [11 批处理](/zh/ch11/)
  - [使用 Unix 工具的批处理](/zh/ch11/#sec_batch_unix)
    - [简单日志分析](/zh/ch11/#sec_batch_log_analysis)
    - [命令链与自定义程序](/zh/ch11/#sec_batch_custom_program)
    - [排序与内存聚合](/zh/ch11/#id275)
  - [分布式系统中的批处理](/zh/ch11/#sec_batch_distributed)
    - [分布式文件系统](/zh/ch11/#sec_batch_dfs)
    - [对象存储](/zh/ch11/#id277)
    - [分布式作业编排](/zh/ch11/#id278)
      - [资源分配](/zh/ch11/#id279)
      - [工作流调度](/zh/ch11/#sec_batch_workflows)
      - [故障处理](/zh/ch11/#id281)
  - [批处理模型](/zh/ch11/#id431)
    - [MapReduce](/zh/ch11/#sec_batch_mapreduce)
    - [数据流引擎](/zh/ch11/#sec_batch_dataflow)
    - [混洗数据](/zh/ch11/#sec_shuffle)
      - [JOIN 与 GROUP BY](/zh/ch11/#sec_batch_join)
    - [查询语言](/zh/ch11/#sec_batch_query_lanauges)
    - [数据框](/zh/ch11/#id287)
  - [批处理用例](/zh/ch11/#sec_batch_output)
    - [提取—转换—加载（ETL）](/zh/ch11/#sec_batch_etl_usage)
    - [分析](/zh/ch11/#sec_batch_olap)
    - [机器学习](/zh/ch11/#id290)
    - [对外提供衍生数据](/zh/ch11/#sec_batch_serving_derived)
  - [本章小结](/zh/ch11/#id292)
    - [脚注](/zh/ch11/#脚注)
    - [参考文献](/zh/ch11/#references)
- [12 流处理](/zh/ch12/)
  - [传递事件流](/zh/ch12/#sec_stream_transmit)
    - [消息传递系统](/zh/ch12/#sec_stream_messaging)
      - [直接从生产者传递给消费者](/zh/ch12/#id296)
      - [消息代理](/zh/ch12/#id433)
      - [消息代理与数据库的对比](/zh/ch12/#id297)
      - [多个消费者](/zh/ch12/#id298)
      - [确认应答与重新传递](/zh/ch12/#sec_stream_reordering)
    - [基于日志的消息代理](/zh/ch12/#sec_stream_log)
      - [使用日志进行消息存储](/zh/ch12/#id300)
      - [日志与传统消息传递的比较](/zh/ch12/#sec_stream_logs_vs_messaging)
      - [消费者偏移量](/zh/ch12/#sec_stream_log_offsets)
      - [磁盘空间使用](/zh/ch12/#sec_stream_disk_usage)
      - [当消费者跟不上生产者时](/zh/ch12/#id459)
      - [重播旧消息](/zh/ch12/#sec_stream_replay)
  - [数据库与流](/zh/ch12/#sec_stream_databases)
    - [保持系统同步](/zh/ch12/#sec_stream_sync)
    - [变更数据捕获](/zh/ch12/#sec_stream_cdc)
      - [变更数据捕获的实现](/zh/ch12/#id307)
      - [初始快照](/zh/ch12/#sec_stream_cdc_snapshot)
      - [日志压实](/zh/ch12/#sec_stream_log_compaction)
      - [变更流的 API 支持](/zh/ch12/#sec_stream_change_api)
      - [变更数据捕获与事件溯源](/zh/ch12/#sec_stream_event_sourcing)
    - [状态、流和不变性](/zh/ch12/#sec_stream_immutability)
      - [不可变事件的优点](/zh/ch12/#sec_stream_immutability_pros)
      - [从同一事件日志中派生多个视图](/zh/ch12/#sec_stream_deriving_views)
      - [并发控制](/zh/ch12/#sec_stream_concurrency)
      - [不变性的局限](/zh/ch12/#sec_stream_immutability_limitations)
  - [流处理](/zh/ch12/#sec_stream_processing)
    - [流处理的应用](/zh/ch12/#sec_stream_uses)
      - [复合事件处理](/zh/ch12/#id317)
      - [流分析](/zh/ch12/#id318)
      - [维护物化视图](/zh/ch12/#sec_stream_mat_view)
      - [在流上搜索](/zh/ch12/#id320)
      - [事件驱动架构与 RPC](/zh/ch12/#sec_stream_actors_drpc)
    - [时间推理](/zh/ch12/#sec_stream_time)
      - [事件时间与处理时间](/zh/ch12/#id322)
      - [处理滞留事件](/zh/ch12/#id323)
      - [你用的是谁的时钟？](/zh/ch12/#id438)
      - [窗口的类型](/zh/ch12/#id324)
    - [流连接](/zh/ch12/#sec_stream_joins)
      - [流流连接（窗口连接）](/zh/ch12/#id440)
      - [流表连接（流扩充）](/zh/ch12/#sec_stream_table_joins)
      - [表表连接（维护物化视图）](/zh/ch12/#id326)
      - [连接的时间依赖性](/zh/ch12/#sec_stream_join_time)
    - [容错](/zh/ch12/#sec_stream_fault_tolerance)
      - [微批处理与检查点](/zh/ch12/#id329)
      - [再谈原子提交](/zh/ch12/#sec_stream_atomic_commit)
      - [幂等性](/zh/ch12/#sec_stream_idempotence)
      - [失败后重建状态](/zh/ch12/#sec_stream_state_fault_tolerance)
  - [本章小结](/zh/ch12/#id332)
    - [脚注](/zh/ch12/#脚注)
    - [参考文献](/zh/ch12/#references)
- [13 流式系统的哲学](/zh/ch13/)
  - [数据集成](/zh/ch13/#sec_future_integration)
    - [通过衍生数据组合专用工具](/zh/ch13/#id442)
      - [理解数据流](/zh/ch13/#id443)
      - [衍生数据与分布式事务](/zh/ch13/#sec_future_derived_vs_transactions)
      - [全序的局限](/zh/ch13/#id335)
      - [排序事件以捕获因果关系](/zh/ch13/#sec_future_capture_causality)
    - [批处理与流处理](/zh/ch13/#sec_future_batch_streaming)
      - [维护衍生状态](/zh/ch13/#id446)
      - [为应用演化而重新处理数据](/zh/ch13/#sec_future_reprocessing)
      - [统一批处理与流处理](/zh/ch13/#id338)
  - [分拆数据库](/zh/ch13/#sec_future_unbundling)
    - [组合使用数据存储技术](/zh/ch13/#id447)
      - [创建索引](/zh/ch13/#id340)
      - [一切的元数据库](/zh/ch13/#id341)
      - [让分拆行得通](/zh/ch13/#sec_future_unbundling_favor)
      - [分拆式系统与集成式系统](/zh/ch13/#id448)
    - [围绕数据流设计应用](/zh/ch13/#sec_future_dataflow)
      - [应用代码作为衍生函数](/zh/ch13/#sec_future_dataflow_derivation)
      - [分离应用代码与状态](/zh/ch13/#id344)
      - [数据流：状态变更与应用代码的相互作用](/zh/ch13/#id450)
      - [流处理器与服务](/zh/ch13/#id345)
    - [观察衍生状态](/zh/ch13/#sec_future_observing)
      - [物化视图与缓存](/zh/ch13/#id451)
      - [有状态、可离线的客户端](/zh/ch13/#id347)
      - [将状态变更推送给客户端](/zh/ch13/#id348)
      - [端到端事件流](/zh/ch13/#id349)
      - [读也是事件](/zh/ch13/#sec_future_read_events)
      - [多分片数据处理](/zh/ch13/#sec_future_unbundled_multi_shard)
  - [追求正确性](/zh/ch13/#sec_future_correctness)
    - [数据库的端到端原则](/zh/ch13/#sec_future_end_to_end)
      - [恰好一次执行操作](/zh/ch13/#id353)
      - [抑制重复](/zh/ch13/#id354)
        - [例 13-1. 从一个账户向另一个账户非幂等地转账](/zh/ch13/#例-13-1-从一个账户向另一个账户非幂等地转账)
      - [唯一标识请求](/zh/ch13/#id355)
        - [例 13-2. 使用唯一 ID 抑制重复请求](/zh/ch13/#例-13-2-使用唯一-id-抑制重复请求)
      - [端到端原则](/zh/ch13/#sec_future_e2e_argument)
      - [在数据系统中应用端到端思维](/zh/ch13/#id357)
    - [强制约束](/zh/ch13/#sec_future_constraints)
      - [唯一性约束需要共识](/zh/ch13/#id452)
      - [基于日志的消息传递中的唯一性](/zh/ch13/#sec_future_uniqueness_log)
      - [多分片请求处理](/zh/ch13/#id360)
    - [及时性与完整性](/zh/ch13/#sec_future_integrity)
      - [数据流系统的正确性](/zh/ch13/#id453)
      - [宽松解释约束](/zh/ch13/#id362)
      - [避免协调的数据系统](/zh/ch13/#id454)
    - [信任但验证](/zh/ch13/#sec_future_verification)
      - [面对软件缺陷时维护完整性](/zh/ch13/#id455)
      - [不要盲信承诺](/zh/ch13/#id364)
      - [为可审计性而设计](/zh/ch13/#id365)
      - [再谈端到端原则](/zh/ch13/#id456)
      - [可审计数据系统的工具](/zh/ch13/#id366)
  - [本章小结](/zh/ch13/#id367)
    - [脚注](/zh/ch13/#脚注)
    - [参考文献](/zh/ch13/#references)
- [14 做正确的事情](/zh/ch14/)
  - [预测分析](/zh/ch14/#id369)
    - [偏见与歧视](/zh/ch14/#id370)
    - [责任与问责](/zh/ch14/#id371)
    - [反馈循环](/zh/ch14/#id372)
  - [隐私与追踪](/zh/ch14/#id373)
    - [监视](/zh/ch14/#id374)
    - [同意与选择自由](/zh/ch14/#id375)
    - [隐私与数据使用](/zh/ch14/#id457)
    - [数据资产与权力](/zh/ch14/#id376)
    - [回顾工业革命](/zh/ch14/#id377)
    - [立法与自律](/zh/ch14/#sec_future_legislation)
  - [总结](/zh/ch14/#id594)
    - [脚注](/zh/ch14/#脚注)
    - [参考文献](/zh/ch14/#references)
- [术语表](/zh/glossary/)
  - [异步（asynchronous）](/zh/glossary/#异步asynchronous)
  - [原子（atomic）](/zh/glossary/#原子atomic)
  - [背压（backpressure）](/zh/glossary/#背压backpressure)
  - [批处理（batch process）](/zh/glossary/#批处理batch-process)
  - [有界（bounded）](/zh/glossary/#有界bounded)
  - [拜占庭故障（Byzantine fault）](/zh/glossary/#拜占庭故障byzantine-fault)
  - [缓存（cache）](/zh/glossary/#缓存cache)
  - [CAP 定理（CAP theorem）](/zh/glossary/#cap-定理cap-theorem)
  - [因果关系（causality）](/zh/glossary/#因果关系causality)
  - [共识（consensus）](/zh/glossary/#共识consensus)
  - [数据仓库（data warehouse）](/zh/glossary/#数据仓库data-warehouse)
  - [声明式（declarative）](/zh/glossary/#声明式declarative)
  - [反规范化（denormalize）](/zh/glossary/#反规范化denormalize)
  - [衍生数据（derived data）](/zh/glossary/#衍生数据derived-data)
  - [确定性（deterministic）](/zh/glossary/#确定性deterministic)
  - [分布式（distributed）](/zh/glossary/#分布式distributed)
  - [持久性（durable）](/zh/glossary/#持久性durable)
  - [ETL](/zh/glossary/#etl)
  - [故障切换（failover）](/zh/glossary/#故障切换failover)
  - [容错（fault-tolerant）](/zh/glossary/#容错fault-tolerant)
  - [流量控制（flow control）](/zh/glossary/#流量控制flow-control)
  - [追随者（follower）](/zh/glossary/#追随者follower)
  - [全文检索（full-text search）](/zh/glossary/#全文检索full-text-search)
  - [图（graph）](/zh/glossary/#图graph)
  - [哈希（hash）](/zh/glossary/#哈希hash)
  - [幂等（idempotent）](/zh/glossary/#幂等idempotent)
  - [索引（index）](/zh/glossary/#索引index)
  - [隔离性（isolation）](/zh/glossary/#隔离性isolation)
  - [连接（join）](/zh/glossary/#连接join)
  - [领导者（leader）](/zh/glossary/#领导者leader)
  - [线性一致（linearizable）](/zh/glossary/#线性一致linearizable)
  - [局部性（locality）](/zh/glossary/#局部性locality)
  - [锁（lock）](/zh/glossary/#锁lock)
  - [日志（log）](/zh/glossary/#日志log)
  - [物化（materialize）](/zh/glossary/#物化materialize)
  - [节点（node）](/zh/glossary/#节点node)
  - [规范化（normalized）](/zh/glossary/#规范化normalized)
  - [OLAP](/zh/glossary/#olap)
  - [OLTP](/zh/glossary/#oltp)
  - [分片（sharding）](/zh/glossary/#分片sharding)
  - [分位数（percentile）](/zh/glossary/#分位数percentile)
  - [主键（primary key）](/zh/glossary/#主键primary-key)
  - [法定人数（quorum）](/zh/glossary/#法定人数quorum)
  - [再平衡（rebalance）](/zh/glossary/#再平衡rebalance)
  - [复制（replication）](/zh/glossary/#复制replication)
  - [模式（schema）](/zh/glossary/#模式schema)
  - [二级索引（secondary index）](/zh/glossary/#二级索引secondary-index)
  - [可串行化（serializable）](/zh/glossary/#可串行化serializable)
  - [无共享（shared-nothing）](/zh/glossary/#无共享shared-nothing)
  - [偏斜（skew）](/zh/glossary/#偏斜skew)
  - [脑裂（split brain）](/zh/glossary/#脑裂split-brain)
  - [存储过程（stored procedure）](/zh/glossary/#存储过程stored-procedure)
  - [流处理（stream process）](/zh/glossary/#流处理stream-process)
  - [同步（synchronous）](/zh/glossary/#同步synchronous)
  - [记录系统（system of record）](/zh/glossary/#记录系统system-of-record)
  - [超时（timeout）](/zh/glossary/#超时timeout)
  - [全序（total order）](/zh/glossary/#全序total-order)
  - [事务（transaction）](/zh/glossary/#事务transaction)
  - [两阶段提交（two-phase commit, 2PC）](/zh/glossary/#两阶段提交two-phase-commit-2pc)
  - [两阶段锁（two-phase locking, 2PL）](/zh/glossary/#两阶段锁two-phase-locking-2pl)
  - [无界（unbounded）](/zh/glossary/#无界unbounded)
- [索引](/zh/indexes/)
  - [符号](/zh/indexes/#符号)
  - [A](/zh/indexes/#a)
  - [B](/zh/indexes/#b)
  - [C](/zh/indexes/#c)
  - [D](/zh/indexes/#d)
  - [E](/zh/indexes/#e)
  - [F](/zh/indexes/#f)
  - [G](/zh/indexes/#g)
  - [H](/zh/indexes/#h)
  - [I](/zh/indexes/#i)
  - [J](/zh/indexes/#j)
  - [K](/zh/indexes/#k)
  - [L](/zh/indexes/#l)
  - [M](/zh/indexes/#m)
  - [N](/zh/indexes/#n)
  - [O](/zh/indexes/#o)
  - [P](/zh/indexes/#p)
  - [Q](/zh/indexes/#q)
  - [R](/zh/indexes/#r)
  - [S](/zh/indexes/#s)
  - [T](/zh/indexes/#t)
  - [U](/zh/indexes/#u)
  - [V](/zh/indexes/#v)
  - [W](/zh/indexes/#w)
  - [X](/zh/indexes/#x)
  - [Y](/zh/indexes/#y)
  - [Z](/zh/indexes/#z)
- [后记](/zh/colophon/)
  - [关于作者](/zh/colophon/#关于作者)
  - [关于译者](/zh/colophon/#关于译者)
  - [后记](/zh/colophon/#后记)
- [贡献者](/zh/contrib/)
  - [译者](/zh/contrib/#译者)
  - [校订与维护](/zh/contrib/#校订与维护)
  - [繁体中文版本](/zh/contrib/#繁体中文版本)
  - [贡献列表](/zh/contrib/#贡献列表)

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

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

- [图 1-1](/zh/ch1/#fig_dwh_etl) — 将数据通过 ETL 导入数据仓库的简化示意图。
- [图 1-2](/zh/ch1/#fig_cloud_spectrum) — 软件类型及其运维方式的连续谱。
- [图 2-1](/zh/ch2/#fig_twitter_relational) — 一个允许用户相互关注的社交网络的简单关系模式。
- [图 2-2](/zh/ch2/#fig_twitter_timelines) — 扇出——把新帖子投递给发帖用户的每一位关注者。
- [图 2-3](/zh/ch2/#fig_throughput) — 当服务的吞吐量接近其处理能力上限时，排队会使响应时间急剧增加。
- [图 2-4](/zh/ch2/#fig_response_time) — 响应时间、服务时间、网络延迟和排队延迟。
- [图 2-5](/zh/ch2/#fig_lognormal) — 用 100 次服务请求的响应时间样本说明平均值和分位数。
- [图 2-6](/zh/ch2/#fig_tail_amplification) — 当一次请求需要多个后端调用时，只需一个慢调用，就会拖慢整个最终用户请求。
- [图 3-1](/zh/ch3/#fig_obama_relational) — 使用关系模式表示 LinkedIn 个人资料。
- [图 3-2](/zh/ch3/#fig_json_tree) — 一对多关系形成树状结构。
- [图 3-3](/zh/ch3/#fig_datamodels_m2m_rel) — 关系模型中的多对多关系。
- [图 3-4](/zh/ch3/#fig_datamodels_many_to_many) — 文档模型中的多对多关系；每个虚线框内的数据可以组成一份文档。
- [图 3-5](/zh/ch3/#fig_dwh_schema) — 用于数据仓库的星型模式示例。
- [图 3-6](/zh/ch3/#fig_datamodels_graph) — 图结构数据示例（框表示顶点，箭头表示边）。
- [图 3-7](/zh/ch3/#fig_datalog_naive) — 使用示例 3\-12 中的 Datalog 规则确定爱达荷州在北美。
- [图 3-8](/zh/ch3/#fig_event_sourcing) — 以不可变事件日志作为权威数据源，并从中派生物化视图。
- [图 3-9](/zh/ch3/#fig_dataframe_to_matrix) — 将电影评分的关系数据库转换为矩阵表示。
- [图 4-1](/zh/ch4/#fig_storage_csv_hash_index) — 以类似 CSV 的格式存储键值对日志，并使用内存哈希映射建立索引。
- [图 4-2](/zh/ch4/#fig_storage_sstable_index) — 带有稀疏索引的 SSTable，查询可以直接跳到正确的数据块。
- [图 4-3](/zh/ch4/#fig_storage_sstable_merging) — 合并多个 SSTable 段，仅保留每个键的最新值。
- [图 4-4](/zh/ch4/#fig_storage_bloom) — 布隆过滤器以概率方式快速判断某个键是否存在于某个 SSTable 中。
- [图 4-5](/zh/ch4/#fig_storage_b_tree) — 使用 B 树索引查找键 251。先从根页沿引用进入键 200–300 所在的页，再进入键 250–270 所在的页。
- [图 4-6](/zh/ch4/#fig_storage_b_tree_split) — 在边界键 337 处拆分页，使 B 树增长；父页也随之更新，以引用两个子页。
- [图 4-7](/zh/ch4/#fig_column_store) — 按列而不是按行存储关系数据。
- [图 4-8](/zh/ch4/#fig_bitmap_index) — 对单列进行压缩并建立位图索引的存储方式。
- [图 4-9](/zh/ch4/#fig_bitmap_and) — 两张位图的按位与运算非常适合向量化处理。
- [图 4-10](/zh/ch4/#fig_data_cube) — 多维数据集的两个维度，通过求和聚合数据。
- [图 4-11](/zh/ch4/#fig_vector_hnsw) — 在 HNSW 索引中查找最接近给定查询向量的数据库条目。
- [图 5-1](/zh/ch5/#fig_encoding_preserve_field) — 旧版应用程序更新先前由新版应用程序写入的数据时，若处理不慎，可能丢失数据。
- [图 5-2](/zh/ch5/#fig_encoding_messagepack) — 示例 5\-2 中的记录使用 MessagePack 编码后的结果。
- [图 5-3](/zh/ch5/#fig_encoding_protobuf) — 使用 Protocol Buffers 编码的示例记录。
- [图 5-4](/zh/ch5/#fig_encoding_avro) — 使用 Avro 编码的示例记录。
- [图 5-5](/zh/ch5/#fig_encoding_avro_schemas) — Protocol Buffers 的编码与解码可以使用不同版本的模式。Avro 解码时使用两个模式：写入者模式必须与编码时所用模式完全相同，读取者模式则可以是较旧或较新的版本。
- [图 5-6](/zh/ch5/#fig_encoding_avro_resolution) — Avro 读取器协调写入者模式与读取者模式之间的差异。
- [图 5-7](/zh/ch5/#fig_encoding_workflow) — 使用图形化的业务流程模型与标记法（BPMN）表示工作流的示例。
- [图 II-1](/zh/part-ii/#fig_replication_partitioning) — 一个数据库切分为两个分区，每个分区都有两个副本
- [图 6-1](/zh/ch6/#fig_replication_leader_follower) — 单主复制把所有写入都发往指定的领导者，再由领导者将变更流发送给各追随者副本。
- [图 6-2](/zh/ch6/#fig_replication_sync_replication) — 基于领导者的复制，其中一个追随者同步复制，另一个异步复制。
- [图 6-3](/zh/ch6/#fig_replication_read_your_writes) — 用户写入后，又从陈旧副本读取。要防止这种异常，需要写后读一致性。
- [图 6-4](/zh/ch6/#fig_replication_monotonic_reads) — 用户先从较新的副本读取，随后从陈旧副本读取，时间仿佛倒退了。要防止这种异常，需要单调读。
- [图 6-5](/zh/ch6/#fig_replication_consistent_prefix) — 如果某些分片的复制速度慢于其他分片，观察者可能先看到答案，后看到问题。
- [图 6-6](/zh/ch6/#fig_replication_multi_dc) — 跨多个地区的多主复制。
- [图 6-7](/zh/ch6/#fig_replication_topologies) — 多主复制可以采用的三种拓扑示例。
- [图 6-8](/zh/ch6/#fig_replication_causality) — 在多主复制中，写入抵达某些副本的顺序可能有误。
- [图 6-9](/zh/ch6/#fig_replication_write_conflict) — 两个领导者并发更新同一条记录，造成写入冲突。
- [图 6-10](/zh/ch6/#fig_replication_amazon_anomaly) — 亚马逊购物车异常示例：以并集方式合并购物车冲突时，已删除的商品可能重新出现。
- [图 6-11](/zh/ch6/#fig_replication_ot_crdt) — OT 与 CRDT 分别如何合并字符串中的两次并发插入。
- [图 6-12](/zh/ch6/#fig_replication_quorum_node_outage) — 节点停机后的仲裁写、仲裁读和读修复。
- [图 6-13](/zh/ch6/#fig_replication_quorum_overlap) — 如果 w \+ r \> n，读取的 r 个副本中至少有一个必然见过最近一次成功写入。
- [图 6-14](/zh/ch6/#fig_replication_concurrency) — Dynamo 风格数据存储中的并发写入没有明确定义的顺序。
- [图 6-15](/zh/ch6/#fig_replication_causality_single) — 捕获两个客户端并发编辑购物车时的因果依赖。
- [图 6-16](/zh/ch6/#fig_replication_causal_dependencies) — 图 6\-15 中因果依赖关系的图示。
- [图 7-1](/zh/ch7/#fig_sharding_replicas) — 复制与分片结合使用：每个节点对某些分片充当领导者，对另一些分片充当追随者。
- [图 7-2](/zh/ch7/#fig_sharding_encyclopedia) — 印刷版百科全书按键范围分片。
- [图 7-3](/zh/ch7/#fig_sharding_hash_mod_n) — 通过对键进行哈希并取模节点数来将键分配给节点。更改节点数会导致许多键从一个节点移动到另一个节点。
- [图 7-4](/zh/ch7/#fig_sharding_rebalance_fixed) — 向每个节点有多个分片的数据库集群添加新节点。
- [图 7-5](/zh/ch7/#fig_sharding_hash_range) — 为每个分片分配连续的哈希值范围。
- [图 7-6](/zh/ch7/#fig_sharding_cassandra) — Cassandra 和 ScyllaDB 将可能的哈希值范围（这里是 0–1023）拆成边界随机的连续区间，并为每个节点分配多个区间。
- [图 7-7](/zh/ch7/#fig_sharding_routing) — 将请求路由到正确节点的三种不同方式。
- [图 7-8](/zh/ch7/#fig_sharding_zookeeper) — 使用 ZooKeeper 跟踪分片到节点的分配。
- [图 7-9](/zh/ch7/#fig_sharding_local_secondary) — 本地二级索引：每个分片只索引其自己分片内的记录。
- [图 7-10](/zh/ch7/#fig_sharding_global_secondary) — 全局二级索引反映来自所有分片的数据，并且本身按索引值进行分片。
- [图 8-1](/zh/ch8/#fig_transactions_increment) — 两个客户端并发递增计数器之间的竞态条件。
- [图 8-2](/zh/ch8/#fig_transactions_read_uncommitted) — 违反隔离性：一个事务读取另一个事务的未提交写入（“脏读”）。
- [图 8-3](/zh/ch8/#fig_transactions_atomicity) — 原子性确保如果发生错误，该事务的任何先前写入都会被撤消，以避免不一致的状态。
- [图 8-4](/zh/ch8/#fig_transactions_read_committed) — 没有脏读：用户 2 只有在用户 1 的事务提交后才能看到 x 的新值。
- [图 8-5](/zh/ch8/#fig_transactions_dirty_writes) — 发生脏写时，不同事务的冲突写入可能混杂在一起。
- [图 8-6](/zh/ch8/#fig_transactions_item_many_preceders) — 读偏差：Aaliyah 观察到了数据库的不一致状态。
- [图 8-7](/zh/ch8/#fig_transactions_mvcc) — 使用多版本并发控制实现快照隔离。
- [图 8-8](/zh/ch8/#fig_transactions_write_skew) — 写偏差导致应用程序错误的示例。
- [图 8-9](/zh/ch8/#fig_transactions_stored_proc) — 交互式事务与存储过程的差异（采用图 8\-8中的示例事务）。
- [图 8-10](/zh/ch8/#fig_transactions_detect_mvcc) — 检测事务何时从 MVCC 快照读取过时值。
- [图 8-11](/zh/ch8/#fig_transactions_detect_index_range) — 在可串行化快照隔离中，检测一个事务何时修改了另一个事务读过的数据。
- [图 8-12](/zh/ch8/#fig_transactions_non_atomic) — 当事务涉及多个数据库节点时，它可能在某些节点上提交，在其他节点上失败。
- [图 8-13](/zh/ch8/#fig_transactions_two_phase_commit) — 两阶段提交（2PC）的成功执行。
- [图 8-14](/zh/ch8/#fig_transactions_2pc_crash) — 参与者投票“是”之后，协调者崩溃。数据库 1 不知道该提交还是中止。
- [图 9-1](/zh/ch9/#fig_distributed_network) — 发出请求却没有收到响应时，无法分辨究竟是 \(a\) 请求丢失、\(b\) 远程节点宕机，还是 \(c\) 响应丢失。
- [图 9-2](/zh/ch9/#fig_distributed_switch_queueing) — 多台机器向同一个目的地发送网络流量时，交换机队列可能被塞满。图中端口 1、2 和 4 都在尝试向端口 3 发送数据包。
- [图 9-3](/zh/ch9/#fig_distributed_timestamps) — 客户端 B 的写入在因果关系上晚于客户端 A 的写入，但 B 的写入具有更早的时间戳。
- [图 9-4](/zh/ch9/#fig_distributed_lease_pause) — 分布式锁的错误实现：租约已经过期，客户端 1 却认为它依然有效，因而损坏了存储中的文件。
- [图 9-5](/zh/ch9/#fig_distributed_lease_delay) — 原租约持有者发出的消息可能延迟很久，直到另一个节点接管租约后才抵达。
- [图 9-6](/zh/ch9/#fig_distributed_fencing) — 只允许写入按照递增的栅栏令牌顺序执行，从而保证存储访问安全。
- [图 9-7](/zh/ch9/#fig_distributed_fencing_leaderless) — 使用栅栏令牌保护对无主复制数据库的写入。
- [图 10-1](/zh/ch10/#fig_consistency_linearizability_0) — 这个系统不满足线性一致性，让球迷感到困惑。
- [图 10-2](/zh/ch10/#fig_consistency_linearizability_1) — 如果读请求与写请求并发，则可能返回旧值，也可能返回新值。
- [图 10-3](/zh/ch10/#fig_consistency_linearizability_2) — 任何一次读取返回新值后，所有后续读取（同一或其他客户端上的读取）也必须返回新值。
- [图 10-4](/zh/ch10/#fig_consistency_linearizability_3) — 展示读写操作看似生效的时刻。B 的最后一次读取不满足线性一致性。
- [图 10-5](/zh/ch10/#fig_consistency_transcoder) — Web 服务器与视频转码器既通过文件存储通信，也通过消息队列通信，由此可能发生竞态条件。
- [图 10-6](/zh/ch10/#fig_consistency_leaderless) — 当网络延迟变化不定时，仅靠法定人数不足以保证线性一致性。
- [图 10-7](/zh/ch10/#fig_consistency_cap_availability) — 网络中断迫使系统在线性一致性与可用性之间作出选择。
- [图 10-8](/zh/ch10/#fig_consistency_id_generator) — 为聊天应用的消息分配自增整数 ID 的生成器。
- [图 10-9](/zh/ch10/#fig_consistency_lamport_ts) — Lamport 时间戳给出了与因果关系一致的全序。
- [图 10-10](/zh/ch10/#fig_consistency_permissions) — 用户 A 先把账户设为私密，再分享照片。使用不满足线性一致性的 ID 生成器时，未经授权的访客可能看到这张照片。
- [图 11-1](/zh/ch11/#fig_batch_mapreduce) — 一个包含三个 mapper 和三个 reducer 的 MapReduce 作业。
- [图 11-2](/zh/ch11/#fig_batch_join_example) — 用户活动日志与用户画像数据库的连接。
- [图 11-3](/zh/ch11/#fig_batch_join_reduce) — 基于用户 ID 的排序合并连接。若输入数据集由多个文件分片组成，可并行启动多个 mapper 处理。
- [图 12-1](/zh/ch12/#fig_stream_multi_consumer) — （a）负载均衡：由多个消费者分担一个主题的消费工作；（b）扇出：将每条消息传递给多个消费者。
- [图 12-2](/zh/ch12/#fig_stream_redelivery) — 消费者 2 在处理 m3 时崩溃，因此 m3 稍后被重新传递给消费者 1。
- [图 12-3](/zh/ch12/#fig_stream_kafka_partitions) — 生产者把消息追加到主题分区文件中，消费者则顺序读取这些文件。
- [图 12-4](/zh/ch12/#fig_stream_write_order) — 数据库中的 X 先被设为 A，再被设为 B；写入到达搜索索引的顺序却恰好相反。
- [图 12-5](/zh/ch12/#fig_stream_change_capture) — 按数据写入一个数据库的顺序取得数据，再按相同顺序将变化应用到其他系统。
- [图 12-6](/zh/ch12/#fig_stream_compaction) — 一个键值对日志：键是猫咪视频的 ID（mew、purr、scratch 或 yawn），值是播放次数。日志压实只保留每个键的最新值。
- [图 12-7](/zh/ch12/#fig_stream_integral) — 应用当前状态与事件流之间的关系。
- [图 12-8](/zh/ch12/#fig_stream_processing_time) — 按处理时间划分窗口，会因处理速率的变化而产生人为假象。
- [图 13-1](/zh/ch13/#fig_future_write_read_paths) — 在搜索索引中，写入（文档更新）与读取（查询）相遇。
- [图 13-2](/zh/ch13/#fig_future_multi_shard) — 使用事件日志和流处理器，检查源账户是否有足够余额，并把资金原子地转入目标账户和手续费账户。

## 表格目录 {#list-of-tables}

- [表 1-1](/zh/ch1/#tab_oltp_vs_olap) — 事务型系统与分析型系统的特征比较
- [表 1-2](/zh/ch1/#tab_cloud_native_dbs) — 自托管数据库系统与云原生数据库系统示例
- [表 8-1](/zh/ch8/#ch_transactions_isolation_levels) — 各种隔离级别下可能发生的异常汇总。

## 示例目录 {#list-of-examples}

- [示例 3-1](/zh/ch3/#fig_obama_json) — 将 LinkedIn 个人资料表示为 JSON 文档
- [示例 3-2](/zh/ch3/#fig_datamodels_m2m_json) — 通过 ID 引用组织的简历
- [示例 3-3](/zh/ch3/#fig_graph_sql_schema) — 使用关系模式表示属性图
- [示例 3-4](/zh/ch3/#fig_cypher_create) — 图 3\-6 中的一部分数据，以 Cypher 查询表示
- [示例 3-5](/zh/ch3/#fig_cypher_query) — 查找从美国移居欧洲者的 Cypher 查询
- [示例 3-6](/zh/ch3/#fig_graph_sql_query) — 使用递归公用表表达式，以 SQL 写出与示例 3\-5 相同的查询
- [示例 3-7](/zh/ch3/#fig_graph_n3_triples) — 图 3\-6 中的一部分数据，以 Turtle 三元组表示
- [示例 3-8](/zh/ch3/#fig_graph_n3_shorthand) — 示例 3\-7 中数据的简洁写法
- [示例 3-9](/zh/ch3/#fig_graph_rdf_xml) — 使用 RDF\/XML 语法表示示例 3\-8 中的数据
- [示例 3-10](/zh/ch3/#fig_sparql_query) — 与示例 3\-5 相同的查询，用 SPARQL 表示
- [示例 3-11](/zh/ch3/#fig_datalog_triples) — 图 3\-6 中数据的子集，表示为 Datalog 事实
- [示例 3-12](/zh/ch3/#fig_datalog_query) — 与示例 3\-5 相同的查询，用 Datalog 表示
- [示例 3-13](/zh/ch3/#fig_graphql_query) — 群聊应用的 GraphQL 查询示例
- [示例 3-14](/zh/ch3/#fig_graphql_response) — 对示例 3\-13 中查询的一种可能响应
- [示例 4-1](/zh/ch4/#fig_storage_analytics_query) — 分析人们在一周中的哪一天更倾向于购买新鲜水果或糖果
- [示例 5-1](/zh/ch5/#fig_encoding_json_schema) — 以整数为键、字符串为值的 JSON 模式示例。由于 JSON 模式要求所有键均为字符串，整数键表示为只包含数字的字符串。
- [示例 5-2](/zh/ch5/#fig_encoding_json) — 本章将使用多种二进制格式编码的示例记录
- [示例 5-3](/zh/ch5/#fig_open_api_def) — 使用 YAML 编写的 OpenAPI 服务定义示例
- [示例 5-4](/zh/ch5/#fig_fastapi_def) — 使用 FastAPI 实现示例 5\-3 中定义的服务
- [示例 5-5](/zh/ch5/#fig_temporal_workflow) — 用于图 5\-7 所示支付工作流的 Temporal 工作流定义片段
- [示例 8-1](/zh/ch8/#fig_transactions_select_for_update) — 显式锁定行以防止丢失更新
- [示例 8-2](/zh/ch8/#fig_transactions_meeting_rooms) — 会议室预订系统试图避免重复预订（在快照隔离下并不安全）
