数据密集型应用系统设计

Aleksandr Shitik
Aleksandr Shitik

我撰写自己的文章和书籍,并评论电影和书籍。 在宇宙学与天文学、IT、效率与规划方面的专家。

数据密集型应用系统设计
Martin Kleppmann
类别: 编程
出版年份: 2018
阅读年份: 2020
我的评分: 最高
阅读次数: 1
总页数: 640
摘要(页): 28
原始出版语言: 英语
其他语言的翻译: 俄语, 西班牙语, 中文

总体描述

本书包含12个章节,分为3个部分。几乎没有配图,阅读起来相当费时费力——满眼都是密密麻麻的文字,而且字体也不够大。每章末尾有几页内容小结,还附有大量参考文献。

内容概要

第一章解释了可维护性、可扩展性和可靠性等术语。作者讨论了这些概念的定义及其重要性。顺便说一句,我记得大学课程里就讲过,这些远不是软件应该具备的全部特性。

第二章描述了数据模型,特别是经典的关系型数据库、文档数据库和图数据库。目前还没有太多具体内容——只是简单介绍了各自特点、优缺点。值得一提的是,这章还涉及查询语言(除了SQL,作者甚至把CSS也列为声明式语言的例子)。

第三章开始出现对普通开发者日常工作中不太常见的复杂概念:B树、SSTable、LSM树、哈希索引。这些内容本身不难,但平时很少直接接触,所以很容易遗忘。50页的内容最终能记住两三个要点就不错了。不过本章提到的索引操作和数据库存储子系统(以InnoDB和MyISAM为例),倒是我几乎每天都会用到的。

第四章专门讨论数据序列化格式。必须肯定作者没有止步于JSON和XML,还涵盖了Thrift、Protocol Buffers和Avro。同时也介绍了REST和RPC等数据传输方式。至此,关于信息系统基础的第一部分结束,开始进入分布式系统部分。

新章节从复制技术开始。这部分内容质量不错,详细介绍了复制系统的拓扑结构,包括主从节点(甚至包含无主复制)、一致性、延迟问题、法定人数等概念。

接下来关于分区的章节同样出色。清楚区分了分区与复制的差异,详细讲解了按键值范围分区、哈希分区、查询路由和负载均衡等核心主题。特别说明的是,这些分区原理具有普适性——在MongoDB、Elasticsearch和SolrCloud中称为"分片"(shard),在HBase叫"区域"(region),在Bigtable叫"片"(tablet),在Cassandra和Riak则叫"虚拟节点"(vnode)。

事务章节的讲解也很到位,主要围绕ACID特性展开,同时包含错误处理和事务中止等内容。

本部分最后两章分别讨论分布式系统的故障问题(如网络不可靠、设备间时钟不同步等"不可靠时钟"现象),以及一致性与共识(线性一致性)和分布式事务处理。

后续章节(如果不考虑最后一章关于信息系统未来的纯理论探讨)值得关注的是批处理和流处理相关内容,涉及Hadoop、MapReduce和消息代理等。不过这些内容都略显浅显。

个人评价

这本编程理论著作深入剖析了数据库类型、事务概念、复制分区、高负载与分布式系统可用性问题、流批处理等专业术语——最重要的是给出了解决相关问题的技术方案。厚重的内容使阅读过程显得漫长枯燥。但如果说学习编程就像在脑海中拼凑马赛克,每块拼图代表某项技术、方法或经验,那么这本书无疑提供了大量优质拼图。因此,尽管阅读体验艰辛,读书笔记也篇幅惊人,我仍然给出了相当高的评价。

Вверх