13件のドキュメント
データ志向アプリケーション設計:概要
信頼性・スケーラビリティ・保守性を軸に、データ中心システムの設計原則を整理する。Martin KleppmannのDDIAの核心
データモデルとクエリ言語
リレーショナル・ドキュメント・グラフの3モデルを比較し、それぞれの強みと適切な使いどころを理解する
ストレージエンジンとインデックス
DBが内部でデータをどう保存・検索するか。BツリーとLSMツリーの設計思想の違いを理解することで、適切なDBエンジンを選べるようになる
レプリケーション
同じデータを複数ノードに保持する方法。シングルリーダー・マルチリーダー・リーダーレスの3方式と、レプリケーション遅延が生む一貫性の問題を理解する
パーティショニング(シャーディング)
大量データを複数ノードに分割して格納する方法。キーレンジとハッシュの分割戦略、ホットスポットの回避、リバランシングの設計を理解する
トランザクションとACID
ACIDの意味と各分離レベルが防ぐ競合状態を理解する。「シリアライザブルはいつも必要か?」という問いに答えられるようになる
分散システムの本質的な問題
ネットワーク遅延・クロック同期・プロセス停止など、分散システムが本質的に抱える問題を理解する。「分散環境で何を信頼できるか」を知ることが設計の出発点
一貫性と分散合意
線形化可能性(最強の一貫性)から因果一貫性まで、分散システムの一貫性モデルを整理。RaftとPaxosが解く問題と、分散トランザクションの2PCを理解する
バッチ処理
大量データを効率よく処理するバッチパイプラインの設計。MapReduceの仕組みとその限界、Sparkなどデータフローエンジンへの発展を理解する
ストリーム処理
終わりのないイベントストリームをリアルタイムで処理する方法。Kafkaのログ設計、ウィンドウ集計、ストリーム-バッチ統合の考え方を理解する
エンコーディングとスキーマ進化
JSON/XML の限界とバイナリフォーマット(Protobuf・Avro)の設計思想。後方/前方互換性を保ちながらスキーマを進化させる方法を理解する
Sagaパターンと分散トランザクション
マイクロサービス間にまたがるトランザクションを2PCなしで実現するSagaパターン。コレオグラフィとオーケストレーションの2方式と、補償トランザクションの設計を理解する
データシステムの統合設計
バッチとストリームを統合し、DBを「アンバンドル」して再構成する考え方。DDIAの結論として、派生データとデータフローの全体設計を理解する