读书笔记之《数据密集型应用》

花了大概半个月的时间,将《设计数据密集型应用》看了一遍,不愧是豆瓣10.0的好书。算法

做者在一本书里面,讲解了MySQL, Redis, Solr, Mongodb, Elasticsearch, Kafka, Hive, Hbase, Spark, Flink, Mapreduce, Neo4j, Titan, InfiniteGraph等几乎全部数据存储,数据处理的组件。在一本书里面,囊括几乎全部类型的数据库,队列,NoSQL, 批处理,流式处理组件, 很有“指点江山,激昂文字,粪土当年万户侯”的感受。shell

本书讲解了从文档数据模型到关系数据模型到图数据模型的变迁及面临的问题; 讲解了分布式系统的核心问题; 介绍了批处理到流式处理可以应付的业务场景。固然因为本书囊括的技术点过于宏大,无法一一介绍各个组件的详细特性及功能点,更多地是站在一个宏观的层面介绍各个组件的特性及可以覆盖的业务场景。数据库

本书让我印象深入的有以下几个点:网络

1 数据模型架构

本书介绍了文档型数据库,关系型数据库,图数据库。 文档型数据库的schemaless, 典型的就是Mongodb和Elasticsearch; 关系型数据库没必要说了,应用最普遍的MySQL; 图数据库用得比较少,Neo4j算是典型了。 经过从文档到图,从无关联处处处关联。让Mongodb, Elasticsearch, MySQL, Neo4j在个人知识体系中再也不是孤立的点,而是有内在联系的知识链条。

2 shell版的数据库并发

做者经过一个基于shell实现的数据库,讲解索引。 从Hash索引到树索引, 从B tree到 LSM tree。Hash索引没法解决区间查询的问题, 二叉树面对硬盘索引读取性能问题, B Tree的写入性能问题...  估计读完本书后,我一度陷入困惑,应该是但愿更深刻探索索引细节的想法和原定计划的冲突。

3 shell版的mapreduceless

做者经过组合cat, awk, sort, uniq, head 几个简单的命令分析日志,让后讲解mapreduce。 这个切入点至关经典, 比mapreduce的word-count有意思多了。

4 分布式系统的一致性分布式

做者讲解了分布式系统存在的问题,主要是一致性问题。 而后引出选举算法的核心: 共识。至关精辟。 惋惜分布式算法的细节我一贯敬而远之,以为这个坑有点深,不急着入坑。

闪光点太多了,也许了解了一些系统的细节后,再看本书,收获会更有所不一样。ide

做者的脉络很清晰: 性能

一个系统必需要面对以下的3个问题: 可靠性,可扩展性,可维护性。 而后基于这3个核心点,讲解数据密集型应用是如何实现这3个目标的。

从数据模型层面,抽象一个统一的存取方式,好比SQL。
基于设计的模型,实现各类索引,保障系统的性能。
网络传输层面,设计各类数据编码,平衡易用性和性能的矛盾。

当单个节点没法知足业务并发的需求时,经过副本扩展系统。 这里一致性的问题就已然出现了。
当单个节点没法知足业务存储的需求时,经过分片扩展系统,解决存储瓶颈,不管是容量仍是性能瓶颈。
经过事务机制保证原子性,解决数据不一致的问题。
列举了分布式系统的种种麻烦及解决问题的算法。

最后介绍了衍生数据,讲解批处理和流式处理。

做者至关于给数据处理组件画了一幅全景图。如此多的数据组件,开发系统作架构选型也将是个极大的考验。好在能理解各个组件的异同,学习可以举一反三,触类旁通也是不错的。

相关文章
相关标签/搜索