我最近在讀一本好書《數據密集型應用系統設計》(也被叫做 DDIA)。這真是本相見恨晚的神書。

這是怎樣一本神書?豆瓣評分高達 9.7 分!
什么是「數據密集型應用系統」?
當數據(數據量、數據復雜度、數據變化速度)是一個應用的主要挑戰,那么可以把這個應用稱為數據密集型的。與之相對的是計算密集型——處理器速度是主要瓶頸。
其實我們平時遇到的大部分系統都是數據密集型的——應用代碼訪問內存、硬盤、數據庫、消息隊列中的數據,經過業務邏輯處理,再返回給用戶。

很多軟件都是在解決不同場景下的數據存儲和檢索問題——MySQL,Redis,HBase,Kafka,ElasticSearch……
還有很多技術是圍繞着數據展開——索引,編碼(JSON, XML, Thrift, ProtoBuffer),行列存儲……
當分布式處理數據時,要考慮——數據復制,分區,事務等等。
總之,只要是個程序員,就肯定跟數據打過交道,或多或少對上述軟件與技術有所了解。
我之前在阿里巴巴的主要工作就是跟數據打交道,但我對數據相關的技術只是處於「看山是山」的階段,遠遠沒有達到融會貫通的地步。
在我們學知識的時候,往往都是分門別類的學:這本書講 MySQL 的,那本書講 Redis 的。這種學習方法使知識割裂,很難讓我們掌握不同的技術之間的區別和聯系。
《數據密集型應用系統設計》這本書,把所有跟「數據」有關的知識點進行了整理、歸納、總結,從一個很高的層次把各項技術的共性和區別講得透徹。 當我們懂了底層原理之后,就明白了每項技術產生的背景是什么,解決了什么問題,有什么適用場景。
這本書分為了三部分:
- 第一部分:數據系統的基石,包括數據模型與查詢語言、存儲與檢索、數據編碼與演化;
- 第二部分:分布式數據,包括復制、分片、事務、一致性與共識;
- 第三部分:衍生數據,包括批處理、流處理、數據系統的未來。
我現在剛讀完第一部分,正在讀第二部分。第一部分的第三章「存儲與檢索」真是精華,從一個最簡單的數據庫開始,逐步越講越深入,把常見的數據庫的存儲與檢索方式剖析完了。如果你可以按照第三章的講解,自己動手實現一個數據庫,是絕對可以寫到簡歷里面的。
我在讀《數據密集型應用系統設計》的時候,一邊讀,一邊做筆記。雖然讀的比較慢,但是確實收獲很多。這種書根本就讀不快啊!因為里面處處都是我從未看到過的知識點,只能一邊讀一邊思考。不過,這時間花得值,解決了之前我對「數據」的理解只浮於表面、而沒有深究的問題。
總之,我強烈推薦《數據密集型應用系統設計》這本書。在閱讀的同時也做好筆記,增加知識與大腦摩擦往往能記得更牢哦!
這本書我還在閱讀之中,歡迎大家跟我交流。
最后,分享一下資源:
- 負雪明燭的讀書筆記:https://fuxuemingzhu.cn/ddia/
- 《數據密集型應用系統設計》開源翻譯倉庫:https://github.com/Vonng/ddia
- 在線閱讀:https://vonng.gitbooks.io/ddia-cn/content/
- 《數據密集型應用系統設計》紙質書(翻譯水平比在線閱讀版好很多,當當網限時 5 折,強烈建議買書):https://st.jingxi.com/pingou/detail.shtml?sku=10030245018628&activeid=16199334571994&tuanid=99999&d=DwUDd3D&s=&from=cps&addpara=&headUrl=&nickname=&hideyl=&cpsjxsid=16341719319890692325
大家是怎么看待這本書呢?可以在評論區中給我留言。
點擊閱讀原文,跳轉到在線閱讀地址。