我最近在跪读一本神书:《数据密集型应用系统设计》(大名鼎鼎的DDIA)。
这是怎样一本神书?豆瓣评分高达 9.7 分!
什么是「数据密集型应用系统」?
当数据(数据量、数据复杂度、数据变化速度)是一个应用的主要挑战,那么可以把这个应用称为数据密集型的。与之相对的是计算密集型——处理器速度是主要瓶颈。
其实我们平时遇到的大部分系统都是数据密集型的——应用代码访问内存、硬盘、数据库、消息队列中的数据,经过业务逻辑处理,再返回给用户。
很多应用都是在解决不同场景下的数据存储和检索问题——MySQL,Redis,HBase,Kafka,ElasticSearch……
还有很多技术是围绕着数据展开——索引,编码(JSON, XML, Thrift, ProtoBuffer),行列存储……
当数据在分布式处理时,要考虑——数据复制,分区,事务等等。
只要是个程序员,就肯定跟数据打过交道,也都或多或少对上述软件与技术有所了解。
我之前在阿里巴巴的主要工作就是处理数据,但我对数据相关的技术只是处于「看山是山」的阶段,远远没有达到融会贯通的地步。
当我们学知识的时候,往往都是分门别类地学:这本书讲 MySQL 的,那本书讲 Redis 的。这种学习方法使知识割裂,很难让我们掌握不同的技术之间的区别和联系。
《数据密集型应用系统设计》这本书,把所有跟「数据」有关的知识点做了剖析、整理、总结,从一个很高的层次把各项技术的共性和区别讲得透彻。 当我们懂了底层原理之后,就明白了每项技术产生的背景是什么,解决了什么问题,有什么适用场景。
这本书既有理论也有实践,基本没有公式,图很多,阅读起来很流畅,一点也不枯燥。
这本书分为了三部分:
第一部分的第三章「存储与检索」真是精华,从一个最简单的数据库开始,越讲越深入,把常见数据库的存储与检索方式都讲完了。按照第三章的讲解,可以自己动手实现一个数据库,并且这个项目是能写到简历里面的。
我在读《数据密集型应用系统设计》的时候,一边读,一边做笔记。虽然读得比较慢,但是收获确实很多。这种神书根本就读不快啊!里面到处都是我从未看到过的知识点,只能一边读一边思考。不过,这时间花得值,解决了之前我对「数据」的理解只浮于表面、而没有深究的问题。
我的读书笔记
强烈推荐《数据密集型应用系统设计》这本书!大家在阅读的同时也做好笔记,增加知识与大脑的「摩擦」可以记得更牢哦!
这本书我还在阅读之中,欢迎大家跟我交流。
最后,分享一下资源: