《Designing Data-Intensive Applications》:一本让无数程序员惊叹的技术书籍,豆瓣评分高达9.7,是数据系统设计的必读宝典

书评概述

《Designing Data-Intensive Applications》(简称DDIA)这本书,被广泛认为是技术书籍中的巅峰之作。其在国内的豆瓣评分达到9.7(满分10.00),近90%的读者给予五星评价。

图片

在国外的Goodreads平台上,这本书的评分为4.72(满分5.00),近80%的读者同样给予了五星好评。

图片

深入探讨书籍内容

这本书的标题可能让许多人误以为它仅适合数据处理领域的程序员,其实并非如此。DDIA非常适合每一位从事后端开发的程序员,尤其是从事CRUD操作的开发者。

书中涵盖了分布式数据库、数据分区、事务处理及分布式系统等关键主题。通过深入探讨数据模型与查询语言、数据编码、数据复制与分区、事务一致性以及分布式系统中的挑战(如故障、部分失效、不可靠网络和时钟等),作者提供了丰富而深刻的实例。

例如,在讲解快照隔离技术的多版本并发控制(MVCC)时,作者图解了PostgreSQL如何基于MVCC实现快照隔离。

图片

书中作者的观点

作者明确指出:

  • 数据是后端系统的核心,一切工作都围绕着数据展开;
  • 当今大多数应用程序是数据密集型而非计算密集型,也就是说,系统的瓶颈往往在于数据处理而非CPU资源;
  • 数据库、消息队列、缓存等中间件被统称为数据系统,它们之间的边界愈加模糊,例如:数据存储可以作为消息队列使用(如Redis),而消息队列则提供类似于数据库的持久性保障(如Apache Kafka)。

在阅读此书后,你会发现之前听闻的许多概念都得到了前所未有的阐释,可能会惊叹:“原来是这样啊!这不是某项技术的原理吗?”。

以下是我在第二次阅读时所做的笔记:

图片

第一次阅读时,我仍在大学三年级,书中的许多内容让我感到枯燥且难以理解。经过再次阅读,许多之前困惑的概念变得清晰明了。

与其他课程的结合

这本书与国内外众多系统设计课程及数据相关课程中的内容有着紧密的联系,能够为读者提供深刻的知识启迪。例如,在介绍事务的ACID特性时,书中指出:

原子性、隔离性和持久性是数据库的属性,而一致性(在ACID的意义上)是应用程序的属性。虽然应用可能依赖于数据库的原子性和隔离性来实现一致性,但这并不是数据库单独的责任。

这是否让你觉得自己对ACID概念的理解存在误区?

在介绍数据复制时,书中列举了三种常见的复制方案及其优缺点:

主从复制因其易于理解而广受欢迎,无需担心冲突问题。然而,在节点失效、网络中断或延迟抖动的情况下,多主节点和无主节点的复制方案会更为可靠,但相应的代价是系统的复杂性和弱一致性。

图片

阅读这本书时,可以结合MIT6.824分布式系统课程进行深度理解。该课程在YouTube上有视频版本,地址为:MIT6.824

图片

此课程全英文,对于英语水平较低的同学来说,可能会面临一定挑战。不过,不必担心!B站上有该课程的中文翻译版,地址为:B站翻译版。同时,国内也有朋友提供了该课程的中文文字版,地址为:MIT中文翻译

图片

看了这门课,很多人都感慨:“真羡慕MIT的学生,能够享受如此优秀的学习资源和实践!”我也深感羡慕!这门课程的实验环节非常出色。

作者背景

本书的作者马丁·科勒普曼(Martin Kleppmann)是剑桥大学计算机科学与技术系的高级研究助理和讲师,曾参与多个知名开源项目如Automerge、Apache Avro和Apache Samza。他的个人博客可以访问:Martin Kleppmann博客

图片