早就在知乎上听人推荐过这本书,之前偶尔翻过第二部分 Replication 和 Partition 两章,感觉讲的还不错,但对于做分布式存储和数据库人员来说,稍微有点泛泛而谈。初次见面,只觉其好而不神。
今年(2022)建了一个分布式系统和数据库爱好者的微信群,如果不组织大家做点什么,微信群迟早沦为僵尸群,“好”一点的可能变成吹水群,但这显然不是我的初衷。念念不忘,必有回响,心里又掠过了这本书,更兼在北美华人群里见过本书被分享过,还挺受欢迎。一拍大腿,就是他了:组织大家一块过一遍 DDIA 把,于是有了这个读书会。
一精读,便不可收拾。这才发现了此书之妙:数据系统方方面面,知识线索极为庞杂,本书却能以极为合理的脉络将其勾连在一起,形成环环相扣的知识体系。至于泛泛而谈?自然是真真香:这本就是框架式书籍,更何况,每章附录列出参考引用、论文列表,都是非常经典的深入阅读材料。
那么它的组织妙在何处?
现在(20220425)刚精读到第五章,仅以现在认识来简单聊聊我的看法。
第一,全书分三个部分。分别是单机,多机,衍生。从单机开始聊数据系统,可以摒除分布式庞杂理论的影响,专注在数据系统本身相关理论;到第二个部分放开单机限制,着重讲将数据系统扩展到多机所面临的问题和一般解决方案;最后一部分笔锋一转,着眼数据处理,以数据系统视角看,无非是一个数据集的变换,也即数据的派生。三个部分,层层递进,相互正交。这种行文思路,正是大型工业代码组织思路:将复杂度拆解到几个正交、但又相互连结的模块,从而使每个部分都相对内聚而简洁。
第二,具体到第一部分,开篇就给了三个总纲式的“心法”:可靠性、可伸缩性、可维护性。然后,从上到下,由离用户最近的数据模型(比如关系模型)和查询语言(比如 SQL),到稍微底层一点的存储引擎(比如 B+ tree 和 lsm tree)和查询引擎,再到最底层的编码(数据结构的降维)和演化,层层下探,令人拍案叫绝。我之前工作和兴趣之余所接触到的零碎知识,至此百川入海,万法归一。
第三,具体到每一章,也是节节递进,读起来无比丝滑。比如第三章,在讲存储引擎时,从一个仅由两个 shell 函数组成的“kv 引擎”起,到一个简单的日志结构的存储(Bitcask),再到经典的 LSM-Tree。这又是工程中惯用思路:从一个最小可用原型开始,不断增加需求、解决瓶颈,最终得到一个工业可用的存储引擎。
我们如何认识世界?不断归纳然后演绎。我们如何处理复杂度?不断拆解然后勾连。将汪洋恣肆的复杂度合理疏导,渐次递进,本书无愧神书!
如果你也对此书感兴趣,但苦于无人交流,欢迎参加我们的读书会:https://docs.qq.com/sheet/DWHFzdk5lUWx4UWJq?tab=BB08J2。里面有往期分享录屏、进群方式和之后安排,共勉~