電腦科學

Designing Data-Intensive Applications(資料密集型應用系統設計)

Martin Kleppmann; Chris Riccomini

英文原名: Designing Data-Intensive Applications

Designing Data-Intensive Applications(資料密集型應用系統設計) cover

一本面向實務工作者的指南,講述可靠、可擴充、可維護的資料系統背後的原理。第2版比較資料庫如何儲存與建模資料、資料如何在多台機器間複寫與分割、如何處理資料(包括串流處理),並說明其中的取捨。讀者需具備軟體開發經驗。

需要的基礎

實際的程式設計經驗,以及對資料庫、網路與作業系統的一般了解。

版次
2
出版年份
2026
難度等級
高級
學術層次
大學部
distributed systemsdatabasesdata engineeringreliabilitystream processingsystem design

01 / 導讀

導讀

引用

Kleppmann, M., & Riccomini, C. (2026). Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems (2nd ed.). O'Reilly Media.

章節概要

第二版由 O'Reilly 於 2026 年初出版,約 670 頁。馬丁·克萊普曼現為劍橋大學副教授,研究本地優先軟體和安全協議,克里斯·里科米尼是共同作者。這一版建立在第一版(俗稱“野豬書”)的基礎上,作者稱其整合了新技術和新趨勢。

出版方的介紹點明瞭問題:資料處於系統設計許多挑戰的中心,需要解決的問題包括可擴展性、一致性、可靠性、效率和可維護性。系統種類繁多,從關係資料庫、NoSQL 資料存儲到資料倉庫和資料湖,以雲服務、本地服務或嵌入式資料庫的形式提供。本書引導讀者走過構建現代資料系統所涉及的決策與權衡。下面的概要依照作者和出版方點明的主題領域,不把內容歸於具體章節。

需求、權衡與基本屬性

本書的起點是資料系統必須具備的屬性:可靠性、可擴展性和可維護性,以及一致性和效率。它把設計看作在約束下做選擇,並通過找出各種工具的優缺點,幫助讀者判斷哪些工具適合某個應用。作者把這當作對依靠流行詞來工作的替代。

資料系統的內部如何工作

一個核心承諾是看看從業者已經在用的系統的內部:資料庫如何存儲和檢索資料、如何對資料建模,以及現代資料庫所依據的核心原理。其方法是通過背後的思想來比較各種各樣的工具與做法,而不是教某一款產品的配置。

分佈式資料與分佈式系統

作者說,讀者將理解分佈式系統的基礎。這個領域涉及保存資料的多個副本、把資料分到多臺機器,以及隨之而來的故障和一致性問題。出版方補充說,本書展示了主要雲服務如何為可擴展性、容錯和一致性而設計。

資料處理與應用

本書還把視野從單個資料庫擴展到大規模處理資料的系統,出版方列出的資料倉庫、資料湖和雲服務指向這個範圍,其中包括流處理,以及由一個資料集派生出另一個資料集。正如作者在圖書網站上所說,重點是在大公司和初創公司的高強度負載下得到驗證的思想,把它們同現實而不只是理論聯繫起來。

核心概念

需求與權衡

  • 可靠性、可擴展性與可維護性:書名副標題所承諾的屬性,設計選擇以此為衡量。
  • 一致性與效率:出版方指出系統設計中需要解決的另外兩個問題。

資料系統內部

  • 設計比較:通過比較各種系統背後的基本思想,而不是描述單一工具的方法。
  • 現代資料庫的原理:本書著手解釋的底層機制。

分佈式系統與雲服務

  • 分佈式系統基礎:在許多機器上運行資料系統所遇到的問題。
  • 雲服務設計:主要雲服務如何實現可擴展性、容錯和一致性。

評析

優點

  • 作者所述的方法是通過基本思想比較多種設計,這給讀者帶來持久的理解,而不是很快過時的針對特定工具的做法。
  • 它力求結合理論與實踐:學術思想總是同在高強度負載下行之有效的東西聯繫起來,微軟和 Confluent 等公司的從業者的推薦語都點出了這一點。
  • 第二版增加了一位共同作者,並按作者的話整合了新技術和新趨勢,因此雲服務的內容是主線的一部分。
  • 範圍從關係資料庫到資料湖和雲服務,適合必須在眾多選項中做選擇的工程師。

侷限

  • 本書解釋權衡,不教授如何配置或運維某一款產品,需要動手工具指導的讀者要另找資源。
  • 約 670 頁的篇幅和廣度使其通讀不易,更適合當作反覆查閱的參考書。
  • 它寫給有軟體開發經驗的人。沒有實際編程經驗、對資料庫、網絡和操作系統不熟悉的讀者會覺得節奏很快。
  • 它是面向從業者的書。需要分佈式算法的形式化規約與證明的讀者,要到研究生教材中去找。

在課程中的定位

在分佈式系統這一組書中,這是關於資料層的從業者指南。維蒂洛的《理解分佈式系統》是為開發者寫的簡明導論,適合在它之前先讀。範斯滕與坦嫩鮑姆的《分佈式系統》和庫魯里斯等人的《分佈式系統:概念與設計》是完整教材,以原理優先的方式涵蓋體系結構、通信、命名、協調、複製和容錯。卡欽、蓋拉維和羅德里格斯的《可靠與安全分佈式編程導論》是對抽象與算法的研究生層次論述,規約精確。帕切科的《並行編程導論》講編寫並行程序,是另一個主題。克萊普曼和里科米尼介於導論與形式化教材之間,著眼於真實的存儲與處理系統如何做出權衡。

如何使用本書

本書適合軟體工程師,以及已會編程並接觸過資料庫、網絡和操作系統、想要推理生產資料系統設計的學生。

實用的讀法是按問題來讀。先讀開頭關於需求與權衡的討論,然後選擇工作所需的領域:資料庫如何存儲和建模資料、資料如何在機器之間複製和劃分,或者資料如何處理和派生。想要形式化定義時,把每個領域與範斯滕與坦嫩鮑姆這類原理教材中的相應內容搭配;需要更溫和的第一遍時配合維蒂洛。在設計評審中,把本書當作談論權衡的詞彙來源。務必使用第二版:第一版早於作者所說第二版整合的新技術與新趨勢。