『データ指向アプリケーションデザイン』
Martin Kleppmann 著、通称「イノシシ本」。データシステムを設計・評価するための考え方を、信頼性・スケーラビリティ・メンテナンス性の三本柱から整理する。
1章 三つの非機能特性
- 信頼性: フォールト(ヒューマンエラーを含む)を回復可能に扱う。テレメトリで観測する。
- スケーラビリティ: 負荷の記述(例: Twitter のタイムライン — 読み取り時集約 vs 書き込み時ファンアウト)とパフォーマンスの記述。レイテンシは平均ではなくパーセンタイル(p50/p99/p999)で語り、t-digest や HdrHistogram で計測する。万能のスケーリングアーキテクチャは存在しない。
- メンテナンス性: 単純さ(偶発的複雑さを抽象化で除去)と進化性。
2章 データモデルとクエリ言語
- リレーショナル vs ドキュメント。オブジェクトとのインピーダンスミスマッチ、N:1/1:N/N:N の扱い。ドキュメントDBはスキーマオンリード、RDBはスキーマオンライト。
- 宣言的クエリ(SQL/CSS)、MapReduce、MongoDB の aggregation pipeline。
- グラフ型データモデル: プロパティグラフと Cypher(Neo4j)、トリプルストアとセマンティックWeb(RDF/SPARQL)、礎としての Datalog(Prolog のサブセット)。可変長パスは SQL の
WITH RECURSIVEに対応。
以降の章
ストレージと抽出、エンコーディングと進化、レプリケーション、パーティショニング、トランザクション、分散システムの問題、一貫性と合意、バッチ/ストリーム処理を扱う。nosql-databases の理論的背景として参照される。
関連: book-software-architecture-foundations / _moc-book-notes