『データ指向アプリケーションデザイン』

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