LeeYzero的博客

业精于勤,行成于思

0%

[读书笔记] 数据密集型应用

最近断断续续花了一个月时间看了一遍数据密集型应用系统设计,也就是大家所说的DDIA(Designing Data-Intensive Applications)。这是一本一看就停不下来的书,强烈安利做业务系统的同学看看。那这本书到底在讲什么呢?

数据模型是对现实世界的抽象,可以从微观角度理解为“数据结构”,它是一个应用系统中最重要的部分。数据模型在一定程度上会影响到系统设计人员解决问题的方式。关系型数据库在很长一段时间大行其道(虽然NoSQL越来越流行,但关系型数据库仍然有一席之地),通常我们在做系统设计时首先会对现实对象建模,建立对象之间的关系,以便能更好的用关系型数据库来表现。然而从这本书中我们可以看到,关系型数据库并不是惟一的数据模型,在做系统设计的时候,不应该受具体数据模型影响,了解各数据模型的优缺点和应用场景,有助于我们设计更具可靠性、可扩展性以及可维护性的系统。

一句话概括:这是一本介绍各种数据库原理及其应用的书

具体来讲,本书从可靠性、可扩展性和可维护性角度展开,介绍各类数据库原理和应用。全书一共分成了三个部分:

第一部分介绍了数据系统的基础,首先对数据系统可靠性、可扩展性、可维护性进行定义和解释,然后综述了数据模型和查询语言,最后介绍了数据库的核心原理以及基于数据库的两类系统——事务处理系统与分析处理系统。

第二部分介绍了分布式数据,包括数据复制、分区、事务等。个人感觉最精彩的部分在于阐述分布式系统的挑战以及一致性问题。看完这部分,你就知道为什么设计一个分布式系统这么难,以及各种分布式数据库系统如何在可靠性、可用性之间寻找平衡。

第三部分介绍派生数据,包括批处理系统、流处理系统以及数据库系统的发展趋势。这部分说明了为什么消息系统(数据流)也是一种数据库,讨论了派生数据和数据源,批处理和流数据的关系以及在应用系统中的价值和定位。这部分让我现有的知识,比如关系型数据库、消息队列、批处理系统(Map-Reduce)、流处理系统之间产生了化学反应,把整块知识串起来了。

这本书对我最大的价值在于,它在广度上极大提升我对数据库的认识,同时对各数据库原理有了一定的了解。有些人批评这本书在深度不够,实践上也不够具体。我想说这恰好是作者拿捏得当的地方,它看起来像是一本对数据度的综述,但同时剖析了各种数据库的核心原理,而且是以比较通俗的语言描述,全书基本没有复杂的公式和理论证明,这在一定程度上降低了阅读门槛,同时让读者知其然并知其所以然,关于更深入的讨论,作者提供了很多高质量的引用文献。对一些关键原理的总结上也是非常到位的,比如最后一章中关系数据库的端到端问题,可以说对端到端原则 End-To-End Argument In System Design 的精简。关于实践上,并不是这本书的重点,这本书已经超过500页了,如果再针对各项数据库技术详细讨论具体实践,估计书的厚度就控制不住了,同时也会让这本书缺乏重点。关于实践,最好还是看具体数据库的相关书籍。但如果先看了这本,再看其它数据库应用的书籍,会在宏观上有一个整体的认识,同时对各数据库的应用场景,优缺点也有一个大致的了解,读起来会更事半功倍。