# 序

早就在知乎上听人推荐过这本书，之前偶尔翻过第二部分 Replication 和 Partition 两章，感觉讲的还不错，但对于做分布式存储和数据库人员来说，稍微有点泛泛而谈。初次见面，只觉其好而不神。

今年（2022）建了一个分布式系统和数据库爱好者的微信群，如果不组织大家做点什么，微信群迟早沦为僵尸群，“好”一点的可能变成吹水群，但这显然不是我的初衷。念念不忘，必有回响，心里又掠过了这本书，更兼在北美华人群里见过本书被分享过，还挺受欢迎。一拍大腿，就是他了：组织大家一块过一遍 DDIA 把，于是有了这个读书会。

一精读，便不可收拾。这才发现了此书之妙：数据系统方方面面，知识线索极为庞杂，本书却能以极为合理的脉络将其勾连在一起，形成环环相扣的知识体系。至于泛泛而谈？自然是真真香：这本就是框架式书籍，更何况，每章附录列出参考引用、论文列表，都是非常经典的深入阅读材料。

那么它的组织妙在何处？

现在（20220425）刚精读到第五章，仅以现在认识来简单聊聊我的看法。

第一，全书分三个部分。分别是单机，多机，衍生。从单机开始聊数据系统，可以摒除分布式庞杂理论的影响，专注在数据系统本身相关理论；到第二个部分放开单机限制，着重讲将数据系统扩展到多机所面临的问题和一般解决方案；最后一部分笔锋一转，着眼数据处理，以数据系统视角看，无非是一个数据集的变换，也即数据的派生。三个部分，层层递进，相互正交。这种行文思路，正是大型工业代码组织思路：将复杂度拆解到几个正交、但又相互连结的模块，从而使每个部分都相对内聚而简洁。

第二，具体到第一部分，开篇就给了三个总纲式的“心法”：可靠性、可伸缩性、可维护性。然后，从上到下，由离用户最近的数据模型（比如关系模型）和查询语言（比如 SQL），到稍微底层一点的存储引擎（比如 B+ tree 和 lsm tree）和查询引擎，再到最底层的编码（数据结构的降维）和演化，层层下探，令人拍案叫绝。我之前工作和兴趣之余所接触到的零碎知识，至此百川入海，万法归一。

第三，具体到每一章，也是节节递进，读起来无比丝滑。比如第三章，在讲存储引擎时，从一个仅由两个 shell 函数组成的“kv 引擎” 起，到一个简单的日志结构的存储（Bitcask），再到经典的 LSM-Tree。这又是工程中惯用思路：从一个最小可用原型开始，不断增加需求、解决瓶颈，最终得到一个工业可用的存储引擎。

我们如何认识世界？不断归纳然后演绎。我们如何处理复杂度？不断拆解然后勾连。将汪洋恣肆的复杂度合理疏导，渐次递进，本书无愧神书！

> 如果你也对此书感兴趣，但苦于无人交流，欢迎参加我们的读书会：https://docs.qq.com/sheet/DWHFzdk5lUWx4UWJq?tab=BB08J2 。里面有往期分享录屏、进群方式和之后安排，共勉~