コンピュータサイエンス

Designing Data-Intensive Applications(データ集約型アプリケーションの設計)

Martin Kleppmann; Chris Riccomini

英語原題: Designing Data-Intensive Applications

Designing Data-Intensive Applications(データ集約型アプリケーションの設計) cover

信頼性・拡張性・保守性を備えたデータシステムの背後にある原理を扱う、実務者向けの解説書。第2版は、データベースがデータをどう保存・モデル化するか、データがマシン間でどう複製・分割されるか、ストリームを含めどう処理されるかを比較し、そのトレードオフを説明する。ソフトウェア開発の経験を前提とする。

前提知識

実務的なプログラミング経験と、データベース・ネットワーク・OSについての一般的な理解。

版
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.

章の要約

第 2 版は 2026 年初めに O'Reilly から刊行され、約 670 ページである。マーティン・クレップマンは現在ケンブリッジ大学の准教授でローカルファーストのソフトウェアとセキュリティプロトコルを研究しており、クリス・リコミーニが共著者として加わっている。この版は第 1 版(通称「イノシシ本」)を土台とし、著者は新しい技術と新たな潮流を統合したと述べている。

出版社の説明は問題を次のように示す。データはシステム設計の多くの課題の中心にあり、解決すべき問題にはスケーラビリティ、一貫性、信頼性、効率、保守性がある。リレーショナルデータベースや NoSQL のデータストアからデータウェアハウスやデータレイクまで、クラウドサービス、オンプレミスのサービス、組み込みデータベースとして提供される、圧倒的に多様なシステムがある。本書は、現代のデータシステムを構築する際の判断とトレードオフを読者に案内する。以下の要約は、著者と出版社が挙げる主題領域に沿っており、内容を特定の章に帰属させてはいない。

要件、トレードオフ、基本的な性質

本書の出発点は、データシステムが備えるべき性質、すなわち信頼性、スケーラビリティ、保守性に加え、一貫性と効率である。設計を制約の下での選択として捉え、各ツールの強みと弱みを見極めることで、読者がどのツールがアプリケーションに合うかを判断する助けとなることを目指す。著者はこれを流行語に頼る仕事の代わりになるものとして示す。

データシステムの内部はどう動くか

中心的な約束は、実務家がすでに使っているシステムの内部を覗くことである。データベースがデータをどう格納・検索し、どうモデル化するか、そして現代のデータベースが拠って立つ核心的な原理を扱う。方法は、背後にある考え方によって多様なツールや手法を比較することであり、特定の製品の設定を教えることではない。

分散データと分散システム

著者は、読者が分散システムの基礎を理解できると述べる。この領域は、データの複数のコピーを保つこと、データを複数のマシンに分けること、そしてそれに伴う障害と一貫性の問題を含む。出版社は、主要なクラウドサービスがスケーラビリティ、耐障害性、一貫性のためにどう設計されているかも示すと付け加えている。

データ処理とアプリケーション

本書は単一のデータベースを超えて、大規模にデータを処理するシステムにも及ぶ。出版社が挙げるデータウェアハウス、データレイク、クラウドサービスがその範囲を示しており、ストリーム処理や、あるデータセットから別のデータセットを導くことも含まれる。著者が書籍のサイトで述べるとおり、重視されるのは、大企業とスタートアップの高負荷の下で実証された考え方であり、理論だけでなく現実と結び付けられる。

主要概念

要件とトレードオフ

  • 信頼性、スケーラビリティ、保守性:副題が約束する性質で、設計上の選択はこれに照らして判断される。
  • 一貫性と効率:システム設計で解決すべきものとして出版社が挙げる、さらなる問題。

データシステムの内部

  • 設計の比較:一つのツールを説明するのではなく、多様なシステムの背後にある基本的な考えを比較する方法。
  • 現代のデータベースの原理:本書が説明しようとする基礎的な仕組み。

分散システムとクラウドサービス

  • 分散システムの基礎:多くのマシンにわたってデータシステムを動かす際の問題。
  • クラウドサービスの設計:主要なクラウドサービスがスケーラビリティ、耐障害性、一貫性をどう実現するか。

批判的分析

長所

  • 著者が示す方法は、基本的な考えによって多くの設計を比較することで、すぐ古くなる特定ツールの手順ではなく、長持ちする理解を読者に与える。
  • 理論と実践を結ぶことを目指し、学術的な考えを常に高負荷の下で機能するものと結び付けている。マイクロソフトや Confluent などの実務家による推薦文がこの点を挙げている。
  • 第 2 版では共著者が加わり、著者の言葉で新しい技術と新たな潮流が統合されているので、クラウドサービスの内容は主筋の一部である。
  • リレーショナルデータベースからデータレイク、クラウドサービスまでの範囲は、多くの選択肢から選ばなければならないエンジニアに合う。

短所

  • 本書はトレードオフを説明するもので、特定の製品の設定や運用を教えるものではない。実際にツールを触る指導が必要な読者は、ほかの資料が要る。
  • 約 670 ページの分量と幅広さのため、通読は大変で、繰り返し戻る参考書として扱うほうがよい。
  • ソフトウェア開発の経験がある人向けに書かれている。実際のプログラミング経験がなく、データベース、ネットワーク、オペレーティングシステムに馴染みのない読者には、速いペースに感じられるだろう。
  • 実務家向けの本である。分散アルゴリズムの形式的な仕様と証明が必要な読者は、大学院向けの教科書に当たることになる。

コースにおける位置づけ

分散システムのグループの中で、本書はデータ層についての実務家向けの案内書である。ヴィトリロの『Understanding Distributed Systems』は開発者向けの簡潔な入門で、本書の前に読むのによい。ファン・ステーンとタネンバウムの『Distributed Systems』およびクルーリスらの『Distributed Systems: Concepts and Design』は、アーキテクチャ、通信、名前付け、調整、複製、耐障害性を原理優先で扱う本格的な教科書である。カチン、ゲラウイ、ロドリゲスの『Introduction to Reliable and Secure Distributed Programming』は、抽象とアルゴリズムを厳密な仕様で扱う大学院レベルの本である。パチェコの『An Introduction to Parallel Programming』は並列プログラムの書き方を扱い、主題が異なる。クレップマンとリコミーニは入門と形式的な教科書の間に位置し、現実のストレージと処理のシステムがどうトレードオフをするかに焦点を当てる。

本書の使い方

ソフトウェアエンジニア、およびすでにプログラミングができ、データベース、ネットワーク、オペレーティングシステムに触れたことがあり、本番のデータシステムの設計について考えたい学生に向く。

実際的な読み方は、問いごとに読むことである。まず要件とトレードオフについての冒頭の議論を読み、次に仕事に必要な領域、すなわちデータベースがデータをどう格納・モデル化するか、データをマシン間でどうコピー・分割するか、データをどう処理・導出するかを選ぶ。形式的な定義が欲しいときは、各領域をファン・ステーンとタネンバウムのような原理の教科書の対応する部分と組み合わせ、もっと穏やかな最初の通読が要るときはヴィトリロと併せる。設計レビューでは、トレードオフを語る語彙の源として本書を使う。必ず第 2 版を使うこと。第 1 版は、著者が第 2 版で統合したと述べる新しい技術と潮流より前のものである。