什么是「数据密集型应用系统」?
当数据(数据量、数据复杂度、数据变化速度)是一个应用的主要挑战,那么可以把这个应用称为数据密集型的。
与之相对的是计算密集型——处理器速度是主要瓶颈。
其实我们平时遇到的大部分系统都是数据密集型的——应用代码访问内存、硬盘、数据库、消息队列中的数据,经过业务逻辑处理,再返回给用户。
image.png很多软件都是在解决不同场景下的数据存储和检索问题——MySQL,Redis,HBase,Kafka,ElasticSearch……
还有很多技术是围绕着数据展开——索引,编码(JSON, XML, Thrift, ProtoBuffer),行列存储……
当分布式处理数据时,要考虑——数据复制,分区,事务等等。
总之,只要是个程序员,就肯定跟数据打过交道,或多或少对上述软件与技术有所了解。
在我们学知识的时候,往往都是分门别类的学:这本书讲 MySQL 的,那本书讲 Redis 的。
这种学习方法使知识割裂,很难让我们掌握不同的技术之间的区别和联系。
《数据密集型应用系统设计》这本书,把所有跟「数据」有关的知识点进行了整理、归纳、总结,从一个很高的层次把各项技术的共性和区别讲得透彻。
当我们懂了底层原理之后,就明白了每项技术产生的背景是什么,解决了什么问题,有什么适用场景。
这本书分为了三部分:
第一部分:数据系统的基石,包括数据模型与查询语言、存储与检索、数据编码与演化;
第二部分:分布式数据,包括复制、分片、事务、一致性与共识;
第三部分:衍生数据,包括批处理、流处理、数据系统的未来。
从一个最简单的数据库开始,逐步越讲越深入,把常见的数据库的存储与检索方式剖析完了。
这时间花得值,解决了之前对「数据」的理解只浮于表面、而没有深究的问题。
参考
设计数据密集型应用 - 中文翻译
https://vonng.gitbooks.io/ddia-cn/content/
数据密集型应用系统设计
https://www.yuque.com/fuxuemingzhu/cdpqne
Designing Data-Intensive Application 阅读分享
https://www.bilibili.com/video/BV19Z4y1W7kT/
https://asktug.com/t/topic/33907
《设计数据密集型应用》一书有没有比较好的学习方法?
https://www.zhihu.com/question/268832961
网友评论