本系列将 《Designing Data-Intensive Applications》(DDIA,Martin Kleppmann)的笔记按原书三部分整理;正文收录在固定目录 /books/ddia/(与 《LLM Interview Handbook》全译系列 相同的 books 编排),便于收藏章节链接与全文内检索。
声明:本文为个人学习笔记,非官方译本;转载请注明出处,勿用于商业再发行。阅读原书请支持正版(dataintensive.net)。
在线目录(全书三部分)
| 部分 |
主题 |
涵盖章节 |
链接 |
| 一 |
数据系统基础 |
第 1–4 章 |
阅读 |
| 二 |
分布式数据 |
第 5–9 章 |
阅读 |
| 三 |
衍生数据 |
第 10–12 章 |
阅读 |
书籍信息
| 项目 |
内容 |
| 书名 |
Designing Data-Intensive Applications (DDIA) |
| 中文名 |
数据密集型应用系统设计 |
| 作者 |
Martin Kleppmann(剑桥大学分布式系统研究员) |
| 出版时间 |
2017 年 3 月 |
核心主题
本书围绕三个核心概念展开:
- 可靠性 (Reliability):系统在遇到故障时仍能正确工作
- 可扩展性 (Scalability):系统能够应对负载增长
- 可维护性 (Maintainability):系统易于理解、修改和扩展
全书结构(章节摘要)
第一部分:数据系统基础
| 章节 |
核心内容 |
| 第 1 章 |
可靠性、可扩展性、可维护性的定义与实践 |
| 第 2 章 |
关系模型、文档模型、图模型的对比与选择 |
| 第 3 章 |
存储引擎原理:B-Tree、LSM-Tree、OLTP vs OLAP |
| 第 4 章 |
数据编码格式与模式演化:JSON、Protobuf、Avro |
第二部分:分布式数据
| 章节 |
核心内容 |
| 第 5 章 |
数据复制:主从、多主、无主复制策略 |
| 第 6 章 |
数据分区:分区策略、再平衡、请求路由 |
| 第 7 章 |
事务:ACID、隔离级别、分布式事务 |
| 第 8 章 |
分布式系统挑战:网络、时钟、故障模型 |
| 第 9 章 |
一致性与共识:CAP、Paxos、Raft |
第三部分:衍生数据
| 章节 |
核心内容 |
| 第 10 章 |
批处理:MapReduce、Spark、数据流引擎 |
| 第 11 章 |
流处理:Kafka、Flink、事件时间与水位线 |
| 第 12 章 |
数据系统未来:数据集成、端到端正确性、伦理 |
为何这样归档
- 岗位侧:系统设计面试常问存储选型、复制与分区、事务隔离、一致性与消息语义。
- 学习侧:需要一条「单节点 → 分布式 → 批流一体」的主线,避免孤立背题。
- 实践侧:固定在
/books/ddia/ 下,写方案时便于引用与对齐追问点。
各部分的表格与示意图已整理为 Markdown/SVG,图片位于站点 /images/(含 ddia-part1-* 与 ddia/part2、ddia/part3 等路径)。
学习路线
入门路线(适合初学者)
1 2 3 4 5
| 第1章 → 第2章 → 第3章 → 第4章(建立基础) ↓ 第5章 → 第6章(理解分布式基础) ↓ 第10章 → 第11章(了解数据处理)
|
进阶路线(适合有经验的开发者)
1 2 3 4 5
| 第7章 → 第8章 → 第9章(深入分布式) ↓ 第12章(展望未来) ↓ 回顾第1-4章填补知识空白
|
专题路线
| 方向 |
推荐阅读顺序 |
| 数据库 |
2 → 3 → 5 → 6 → 7 |
| 分布式系统 |
5 → 6 → 8 → 9 |
| 数据工程 |
3 → 10 → 11 → 12 |
核心要点速览
数据模型选择
1 2 3 4 5
| 关系模型 ──── 结构化数据、复杂查询、事务支持 ↓ 文档模型 ──── 灵活模式、树状结构、局部性好 ↓ 图模型 ───── 复杂关系、社交网络、知识图谱
|
存储引擎对比
| 引擎 |
优化目标 |
典型应用 |
| B-Tree |
读取优化 |
OLTP 数据库 |
| LSM-Tree |
写入优化 |
日志、时序数据 |
| 列存储 |
分析优化 |
OLAP、数据仓库 |
分布式系统核心权衡
$$
\text{CAP 定理:网络分区时,一致性与可用性不可兼得}
$$
处理范式对比
| 范式 |
数据特性 |
延迟 |
典型框架 |
| 批处理 |
有界、静态 |
分钟~小时 |
Spark, Hadoop |
| 流处理 |
无界、持续 |
毫秒~秒 |
Flink, Kafka Streams |
延伸资源