数据密集型应用系统设计(第二版)
数据密集型应用系统设计(第二版)
Martin Kleppmann, Chris Riccomini
高晓明, 陈锋, 马建勋, 姚琪琳 译
出版时间:2026年08月(预计)
页数:666(预计)
“过去十年来,这一直是理解分布式系统的最佳著作,第二版更是青出于蓝。它弥合了分布式系统理论与工程实践之间的巨大鸿沟。真希望它能早些问世,那样我就能少走很多弯路了。”
——Jay Kreps
Apache Kafka 创建者,Confluent 联合创始人
“这本书应当成为软件工程师的必读之作。本书是一部难得的佳作,它将理论与实践融会贯通,帮助开发者在设计和实现数据基础设施与系统时做出明智的决策。”
——Kevin Scott
微软首席技术官

数据是当今系统设计中诸多挑战的核心。可扩展性、一致性、可靠性、效率和可维护性等棘手问题亟待解决。与此同时,各类系统令人目不暇接:关系数据库、NoSQL数据存储、数据仓库、数据湖,还有云服务、本地部署服务和嵌入式数据库。哪些才是适合你的应用的正确选择?如何从众多的术语中理清头绪?
在第二版中,本书作者在广受赞誉的第一版基础上,融入了新技术与新兴趋势。本书将引导你走进构建现代数据系统过程中纷繁的决策与权衡,理清其中的取舍,帮助你学会如何为自身需求选择合适的工具,并深入理解分布式系统的核心原理。
● 深入探索你日常使用的系统的底层机制,学会更高效地运用它们。
● 通过识别不同工具的优势与不足,做出明智的技术决策。
● 了解主流云服务如何针对可扩展性、容错性和一致性进行设计。
● 理解现代数据库设计与实现背后的核心原理。
  1. 前言
  2. 第1章 数据系统架构中的权衡
  3. 1.1 操作型系统与分析型系统
  4. 1.1.1 事务处理与分析的特征
  5. 1.1.2 数据仓库
  6. 1.1.3 记录系统与派生数据
  7. 1.2 云服务与自托管
  8. 1.2.1 云服务的利弊
  9. 1.2.2 云原生系统架构
  10. 1.2.3 云时代的运维
  11. 1.3 分布式系统与单节点系统
  12. 1.3.1 分布式系统的问题
  13. 1.3.2 微服务与无服务器
  14. 1.3.3 云计算与超级计算
  15. 1.4 数据系统、法律与社会
  16. 1.5 小结
  17. 参考文献
  18. 第2章 非功能性需求
  19. 2.1 案例研究:社交网络的主页时间线
  20. 2.1.1 用户、帖子与关注关系
  21. 2.1.2 时间线的物化与更新
  22. 2.2 性能描述
  23. 2.2.1 时延与响应时间
  24. 2.2.2 平均值、中位数与百分位数
  25. 2.2.3 响应时间指标的使用
  26. 2.3 可靠性与容错
  27. 2.3.1 容错
  28. 2.3.2 硬件与软件故障
  29. 2.3.3 人与可靠性
  30. 2.4 可伸缩性
  31. 2.4.1 理解负载
  32. 2.4.2 共享内存、共享磁盘与无共享架构
  33. 2.4.3 可伸缩性的原则
  34. 2.5 可维护性
  35. 2.5.1 可运维性:让运维工作更轻松
  36. 2.5.2 简单性:管理复杂性
  37. 2.5.3 可演化性:让变更更容易
  38. 2.6 小结
  39. 参考文献
  40. 第3章 数据模型与查询语言
  41. 3.1 关系模型与文档模型
  42. 3.1.1 对象关系不匹配
  43. 3.1.2 规范化、反规范化与联接
  44. 3.1.3 多对一与多对多关系
  45. 3.1.4 星形与雪花:用于分析的Schema
  46. 3.1.5 何时选用哪种模型
  47. 3.2 图状数据模型
  48. 3.2.1 属性图
  49. 3.2.2 Cypher查询语言
  50. 3.2.3 SQL中的图查询
  51. 3.2.4 三元组存储与SPARQL
  52. 3.2.5 Datalog:递归关系查询
  53. 3.2.6 GraphQL
  54. 3.3 事件溯源与CQRS
  55. 3.4 DataFrame、矩阵与数组
  56. 3.5 小结
  57. 参考文献
  58. 第4章 存储与检索
  59. 4.1 OLTP的存储与索引
  60. 4.1.1 日志结构存储
  61. 4.1.2 B树
  62. 4.1.3 B树与LSM树的比较
  63. 4.1.4 多列索引与二级索引
  64. 4.1.5 在索引中存储值
  65. 4.1.6 将所有数据保存在内存中
  66. 4.2 面向分析的数据存储
  67. 4.2.1 云数据仓库
  68. 4.2.2 列式存储
  69. 4.2.3 查询执行:编译与向量化
  70. 4.2.4 物化视图与数据立方体
  71. 4.3 多维索引与全文索引
  72. 4.3.1 全文搜索
  73. 4.3.2 向量嵌入
  74. 4.4 小结
  75. 参考文献
  76. 第5章 编码与演进
  77. 5.1 数据编码的格式
  78. 5.1.1 语言特定的格式
  79. 5.1.2 JSON、XML与二进制变体
  80. 5.1.3 Protocol Buffers
  81. 5.1.4 Avro
  82. 5.1.5 Schema的优点
  83. 5.2 数据流的模式
  84. 5.2.1 经由数据库的数据流
  85. 5.2.2 基于服务的数据流:REST与RPC
  86. 5.2.3 持久执行与工作流
  87. 5.2.4 事件驱动架构
  88. 5.3 小结
  89. 参考文献
  90. 第 6 章 复制
  91. 6.1 单主复制
  92. 6.1.1 同步与异步复制
  93. 6.1.2 设置新的从节点
  94. 6.1.3 处理节点停机
  95. 6.1.4 复制日志的实现
  96. 6.1.5 复制延迟问题
  97. 6.1.6 解决复制延迟的方法
  98. 6.2 多主复制
  99. 6.2.1 地理分布式操作
  100. 6.2.2 同步引擎与本地优先软件
  101. 6.2.3 处理写冲突
  102. 6.3 无主复制
  103. 6.3.1 当节点停机时写入数据库
  104. 6.3.2 单主复制与无主复制的性能比较
  105. 6.3.3 跨区域工作方式
  106. 6.3.4 检测并发写入
  107. 6.4 小结
  108. 参考文献
  109. 第7章 分片
  110. 7.1 分片的利与弊
  111. 7.2 多租户分片
  112. 7.3 键值数据的分片
  113. 7.3.1 按键范围分片
  114. 7.3.2 按键哈希分片
  115. 7.3.3 负载倾斜与热点缓解
  116. 7.3.4 运维:自动与手动再平衡
  117. 7.4 请求路由
  118. 7.5 分片与二级索引
  119. 7.5.1 本地二级索引
  120. 7.5.2 全局二级索引
  121. 7.6 小结
  122. 参考文献
  123. 第8章 事务
  124. 8.1 事务究竟是什么
  125. 8.1.1 ACID的含义
  126. 8.1.2 单对象与多对象操作
  127. 8.2 弱隔离级别
  128. 8.2.1 读已提交
  129. 8.2.2 快照隔离与可重复读
  130. 8.2.3 防止丢失更新
  131. 8.2.4 写倾斜与幻象
  132. 8.3 可串行化
  133. 8.3.1 实际串行执行
  134. 8.3.2 两阶段锁定
  135. 8.3.3 可串行化快照隔离
  136. 8.4 分布式事务
  137. 8.4.1 两阶段提交
  138. 8.4.2 跨异构系统的分布式事务
  139. 8.4.3 数据库内部分布式事务
  140. 8.4.4 恰好一次消息处理再探
  141. 8.5 小结
  142. 参考文献
  143. 第9章 分布式系统的挑战
  144. 9.1 故障与局部故障
  145. 9.2 不可靠的网络
  146. 9.2.1 TCP的局限
  147. 9.2.2 实践中的网络故障
  148. 9.2.3 故障检测
  149. 9.2.4 超时与无界延迟
  150. 9.2.5 同步网络与异步网络
  151. 9.3 不可靠的时钟
  152. 9.3.1 单调时钟与日历时钟
  153. 9.3.2 时钟的同步与精度
  154. 9.3.3 依赖同步时钟
  155. 9.3.4 进程暂停
  156. 9.4 知识、真相与谎言
  157. 9.4.1 多数派规则
  158. 9.4.2 分布式锁与租约
  159. 9.4.3 拜占庭故障
  160. 9.4.4 系统模型与现实
  161. 9.4.5 形式化方法与随机测试
  162. 9.5 小结
  163. 参考文献
  164. 第10章 一致性与共识
  165. 10.1 线性一致性
  166. 10.1.1 是什么让系统具备线性一致性
  167. 10.1.2 依赖线性一致性
  168. 10.1.3 实现线性一致的系统
  169. 10.1.4 线性一致性的代价
  170. 10.2 ID生成器与逻辑时钟
  171. 10.2.1 逻辑时钟
  172. 10.2.2 具备线性一致性的ID生成器
  173. 10.3 共识
  174. 10.3.1 共识的多种面貌
  175. 10.3.2 实践中的共识
  176. 10.3.3 协调服务
  177. 10.4 小结
  178. 参考文献
  179. 第11章 批处理
  180. 11.1 使用UNIX工具进行批处理
  181. 11.1.1 简单的日志分析
  182. 11.1.2 命令链与自定义程序
  183. 11.1.3 排序与内存聚合
  184. 11.2 分布式系统中的批处理
  185. 11.2.1 分布式文件系统
  186. 11.2.2 对象存储
  187. 11.2.3 分布式作业编排
  188. 11.3 批处理模型
  189. 11.3.1 MapReduce
  190. 11.3.2 数据流引擎
  191. 11.3.3 shuffle数据
  192. 11.3.4 联接与分组
  193. 11.3.5 查询语言
  194. 11.3.6 DataFrame
  195. 11.4 批处理用例
  196. 11.4.1 ETL(抽取、转换、加载)
  197. 11.4.2 分析
  198. 11.4.3 机器学习
  199. 11.4.4 提供派生数据
  200. 11.5 小结
  201. 参考文献
  202. 第12章 流处理
  203. 12.1 传输事件流
  204. 12.1.1 消息系统
  205. 12.1.2 基于日志的消息代理
  206. 12.2 数据库与数据流
  207. 12.2.1 保持系统同步
  208. 12.2.2 变更数据捕获
  209. 12.2.3 状态、数据流与不可变性
  210. 12.3 处理流
  211. 12.3.1 流处理的用途
  212. 12.3.2 理清时间逻辑
  213. 12.3.3 数据流联接
  214. 12.3.4 容错
  215. 12.4 小结
  216. 参考文献
  217. 第13章 流式系统的哲学
  218. 13.1 数据集成
  219. 13.1.1 通过派生数据组合专用工具
  220. 13.1.2 批处理与流处理
  221. 13.2 拆解数据库
  222. 13.2.1 组合数据存储技术
  223. 13.2.2 围绕数据流设计应用
  224. 13.2.3 观察派生状态
  225. 13.3 追求正确性
  226. 13.3.1 数据库语境下的端到端论证
  227. 13.3.2 强制约束
  228. 13.3.3 时效性与完整性
  229. 13.3.4 信任,但要验证
  230. 13.4 小结
  231. 参考文献
  232. 第14章 做正确的事
  233. 14.1 预测分析
  234. 14.1.1 偏见与歧视
  235. 14.1.2 责任与问责
  236. 14.1.3 反馈回路
  237. 14.2 隐私与追踪
  238. 14.2.1 监视
  239. 14.2.2 同意与选择自由
  240. 14.2.3 隐私与数据使用
  241. 14.2.4 数据作为资产与权力
  242. 14.2.5 回顾工业革命
  243. 14.2.6 立法与自我约束
  244. 14.3 小结
  245. 参考文献
  246. 术语表
  247. 作者介绍
  248. 封面介绍
书名:数据密集型应用系统设计(第二版)
译者:高晓明, 陈锋, 马建勋, 姚琪琳 译
国内出版社:中国电力出版社
出版时间:2026年08月(预计)
页数:666(预计)
书号:978-7-5239-1198-3
原版书书名:Designing Data-Intensive Applications, 2nd Edition
原版书出版商:O'Reilly Media
Martin Kleppmann
 
Martin Kleppmann是英国剑桥大学分布式系统方向的研究员。此前,他曾是LinkedIn和Rapportive等互联网公司的软件工程师,负责大规模数据基础设施建设。在此过程中他遇到过一些困难,因此他希望这本书能够帮助读者避免重蹈覆辙。Martin还是一位活跃的会议演讲者、博主和开源贡献者。他认为,每个人都应该学习深刻的技术理念,对技术的深入理解能帮助我们开发出更好的软件。
 
 
Chris Riccomini
 
Chris Riccomini是一位软件工程师、初创企业投资人和技术作者。他是Apache Samza和SlateDB的联合创建者,《The Missing README》的合著者,同时经营着Materialized View Capital。
 
 
本书封面上的动物是一只印度野猪(学名:Sus scrofa cristatus),这是分布于印度、缅甸、尼泊尔、斯里兰卡和泰国的一个亚种,与欧洲野猪相比,其背部鬃毛更高,没有毛茸茸的底绒,头骨也更大、更平直。印度野猪体色灰黑,脊背上长有坚硬的刚毛。雄性拥有突出的犬齿(称为“獠牙”),体型也大于雌性。该物种肩高平均84~89cm,体重约90~135kg。
印度野猪的天敌包括熊、虎以及各种大型猫科动物。野猪习性夜行,属杂食动物,食谱广泛,包括根茎、昆虫、腐肉、坚果、浆果和小型动物。它们喜欢翻拱垃圾堆和农田,令农民深感头痛,每天需摄入4000~4500卡路里。发达的嗅觉使它们善于在地下觅食,但视力较差。
在印度教传说中,野猪是毗湿奴神的化身之一。在古希腊葬礼纪念碑上,它象征着英勇却落败的斗士。斯堪的纳维亚、日耳曼和盎格鲁-撒克逊武士的盔甲与武器上,常以这种凶猛的动物作为装饰。在中国的十二生肖中,猪象征着坚毅与冲劲。
O’Reilly封面上的许多动物都濒临灭绝,而它们对这个世界同样至关重要。
购买选项
定价:148.00元(预计)
书号:978-7-5239-1198-3
出版社:中国电力出版社