# Designing Data-Intensive Applications, 2nd Edition
## 概要
データシステム設計の標準的教科書とされる書籍の第2版。初版(2017)から9年を経て [[Martin Kleppmann]] に [[Chris Riccomini]] が加わり、クラウドとストリーミングの実務を織り込んで全面改訂された。中心にあるのは「最良の解は存在せず、あるのはトレードオフだけだ」という立場で、特定製品の使い方ではなく、複数の設計が何を得て何を捨てているかを比較できる語彙を読者に与えることを目的とする。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 1 Trade-Offs in Data Systems Architecture]])
本書は「データ管理が開発上の主要な課題である」アプリケーションを *data-intensive* と定義し、計算の並列化が課題となる *compute-intensive* システムと区別する。扱う範囲はストレージエンジンの内部構造からレプリケーション・シャーディング・トランザクション・合意アルゴリズム・バッチ/ストリーム処理まで及び、最終章では技術選択が人に及ぼす権力と倫理的責任を論じて閉じる。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 1 Trade-Offs in Data Systems Architecture]], [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 14 Doing the Right Thing]])
## 書誌情報
- **著者**: [[Martin Kleppmann]] and [[Chris Riccomini]]
- **副題**: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
- **版**: Second Edition
- **出版社**: O'Reilly Media
- **発行日**: 2026-02-18
- **ISBN**: 9781098119065(print)/ 9781098119058(識別子)
- **ページ数**: 672 ページ
- **構成**: 全14章(Part 分割はなく、章がフラットに並ぶ)
- **URL**: https://learning.oreilly.com/library/view/designing-data-intensive-applications/9781098119058/
## 構成と主要テーマ
本 wiki には**第1〜14章の全14章**を取り込んだ。
本書の目次に Part 分割はなく、14 章がフラットに並ぶ(初版の3部構成は第2版で撤廃された)。以下の見出しは読み筋を示すために本 wiki 側で内容からまとめた区切りであり、原本の構造ではない。
### 基礎: 語彙と非機能要求(第1〜2章)
データシステムを比較するための語彙と評価軸を用意する導入部。
→ [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 1 Trade-Offs in Data Systems Architecture]] — OLTP/OLAP、記録系と導出データ、クラウド対自己ホスティング、分散対単一ノードという、本書全体で使う語彙とトレードオフを定義する導入章
→ [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 2 Defining Nonfunctional Requirements]] — 性能(応答時間とパーセンタイル)・信頼性(障害と失敗の区別)・スケーラビリティ・保守性という本書の柱を、SNS のホームタイムライン事例を通じて定義する章
### 単一ノードのデータ表現とストレージ(第3〜5章)
データをどう表現し、どう保存し、どう時間をまたいで受け渡すか。
→ [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 3 Data Models and Query Languages]] — リレーショナル・ドキュメント・グラフ・イベントソーシング・DataFrame の5つのデータモデルをトレードオフとして比較する章
→ [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 4 Storage and Retrieval]] — LSM ツリーと B-Tree の内部構造比較、列指向ストレージ、クエリのコンパイルとベクトル化、多次元・全文・ベクトル索引を扱う章
→ [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 5 Encoding and Evolution]] — Protocol Buffers と Avro の互換性規則を軸に、データベース・RPC・イベント駆動という3つのデータフロー様式ごとに要求される互換性の向きを論じる章
### 分散データ(第6〜7章)
データを複数ノードへ複製し分割する2つの基本操作。
→ [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 6 Replication]] — レプリケーションを単一リーダー・マルチリーダー・リーダーレスの3方式に整理し、レプリケーションラグが生む読み取り異常とクォーラム条件の限界、書き込み衝突解決を論じる章
→ [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 7 Sharding]] — キーレンジとハッシュの2方式、ホットスポットの緩和、リバランシング、リクエストルーティング、ローカル対グローバル二次インデックスを扱う章
### 正しさをどう守るか(第8〜10章)
分散環境で何が壊れ、どこまでの保証をどんな代償で買えるのか。本書の理論的中核。
→ [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 8 Transactions]] — ACID と分離レベル、スナップショット分離(MVCC)、直列化可能性の3実装、2相コミットとその弱点までを掘り下げる、本書最長の章
→ [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 9 The Trouble with Distributed Systems]] — 部分故障・信頼できないネットワーク・信頼できないクロック・プロセスの一時停止を体系化し、クォーラム・フェンシングトークン・システムモデルという対処の理論的土台を示す章
→ [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 10 Consistency and Consensus]] — 強い一貫性を線形化可能性として厳密に定義し、リーダー選出・分散ロック・アトミックコミットが単一の合意問題に還元されることを示す章
### 導出データ: バッチとストリーム(第11〜13章)
記録系から導出データを作り続けるための2つの処理様式と、その統合思想。
→ [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 11 Batch Processing]] — Unix ツールから MapReduce・データフローエンジンへの進化を追い、シャッフルという分散ソートを核に ETL・分析・機械学習の導出データを支える仕組みを扱う章
→ [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 12 Stream Processing]] — ストリーム処理をバッチ処理の無限イベントへの拡張と捉え、ログベースメッセージブローカと変更データキャプチャが記録系とデータベースの橋渡しを担うことを示す章
→ [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 13 A Philosophy of Streaming Systems]] — データ統合、データベースのアンバンドリング、エンドツーエンド論、適時性と完全性という設計思想で本書全体を統合する総括章
### 結び(第14章)
→ [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 14 Doing the Right Thing]] — 予測分析とアルゴリズムバイアス、フィードバックループ、監視と同意、データの資産化を論じ、データシステムが人に及ぼす権力とエンジニアの倫理的責任を説く最終章
## 影響と位置づけ
本書を貫くのは「あらゆる設計判断はトレードオフである」という一つの姿勢であり、これは技術選択の場面ごとに繰り返し現れる。第1章の OLTP/OLAP とクラウド対自己ホスティング、第4章の LSM ツリー対 B-Tree、第6章の同期対非同期レプリケーション、第7章のキーレンジ対ハッシュ、第8章の分離レベル、第13章の適時性対完全性は、いずれも「何を得て何を捨てるか」という同型の問いとして提示される。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 1 Trade-Offs in Data Systems Architecture]], [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 13 A Philosophy of Streaming Systems]])
技術的な中核は**「記録系(system of record)と導出データ(derived data)の区別」**にある。第1章がこの対を定義し、第3章がイベントソーシングと CQRS として、第11・12章がバッチとストリームによる導出手段として、第13章が「全順序ログを介したデータ統合」という統合像として引き受ける。第13章はさらに、この見方を推し進めてデータベースを構成要素へ**アンバンドリング**する構想を示す。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 11 Batch Processing]], [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 13 A Philosophy of Streaming Systems]])
第9・10章は本 vault の障害系・分散系 concept 群にとっての理論的な下地にあたる。部分故障・タイムアウトによる障害検知の限界・安全性と活性の区別といった基礎概念が、[[分散システム障害]]・[[フォールトトレランス]]・[[障害注入]]・[[軽量形式手法]] といった既存ページに個別研究として蓄積されてきた知見の共通の土台を与える。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 9 The Trouble with Distributed Systems]], [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 10 Consistency and Consensus]])
初版(2017)についての国内向け解説としては [[@2023__DataEngineeringStudy__30分でわかるデータ指向アプリケーションデザイン]] が本 vault にあり、Parquet・Aurora・dbt など初版刊行後の実装動向を補っている。位置づけの対比としては、[[Observability Engineering 2nd Edition]] が本番システムを「どう観測するか」、[[詳解 システム・パフォーマンス 第2版]] が「どう速くするか」を扱うのに対し、本書は「どう設計し、どこまでの正しさを保証するか」を扱う。
## 関連
- 人物: [[Martin Kleppmann]] / [[Chris Riccomini]]
- 概念(本書から新規に立てたもの): [[リレーショナル対ドキュメントモデル]] / [[グラフデータモデル]] / [[イベントソーシングとCQRS]] / [[スキーマ発展]] / [[バイナリエンコーディング]] / [[単一リーダーレプリケーション]] / [[マルチリーダーレプリケーション]] / [[リーダーレスレプリケーション]] / [[レプリケーションラグと読み取り整合性]] / [[ACIDと分離レベル]] / [[スナップショット分離とMVCC]] / [[直列化可能性]] / [[部分故障]] / [[クロック同期と信頼性]] / [[ビザンチン障害]] / [[システムモデルと安全性・活性]] / [[分散ロックとリース]] / [[線形化可能性]] / [[コーディネーションサービス]] / [[MapReduce]] / [[データフローエンジン]] / [[シャッフルと分散結合]] / [[変更データキャプチャ(CDC)]] / [[イベント時間とウィンドウ処理]] / [[ストリーム処理の耐障害性]] / [[データ統合]] / [[データベースのアンバンドリング]] / [[エンドツーエンド論]] / [[適時性と完全性]] / [[予測分析とアルゴリズムバイアス]] / [[データのプライバシーと同意]]
- 実体: [[PostgreSQL]] / [[MongoDB]] / [[Neo4j]] / [[Apache Cassandra]] / [[Riak]] / [[Dynamo]] / [[RocksDB]] / [[Lucene]] / [[Apache Kafka]] / [[Debezium]] / [[Apache Spark]] / [[Apache Flink]] / [[ZooKeeper]] / [[etcd]] / [[Chubby]] / [[Protocol Buffers]] / [[Apache Avro]] / [[Temporal]]
- 関連ソース: [[@2023__DataEngineeringStudy__30分でわかるデータ指向アプリケーションデザイン]](初版の国内向け解説)
- 関連書籍: [[Observability Engineering 2nd Edition]] / [[詳解 システム・パフォーマンス 第2版]] / [[SRE Book]]
## 出典
- Martin Kleppmann and Chris Riccomini, *Designing Data-Intensive Applications*, 2nd Edition, O'Reilly Media, 2026.
- 原本: `.raw/books/designing-data-intensive-applications-2e/`(全14章の clean markdown、図102点)