MakingSenseofStreamProcessing / Database = Log of Changes


Chapter 3 Database = Log of Changes

要約

  • データベースは変更履歴(ログ)であると極端に考えてみる
    • データベースへの変更はイベントのストリーム、ということになる
    • データベースへのあらゆる書き込みはストリーム内のイベント、ということになる
    • 元のデータベースにコミットされたの同じ順序で他のデータベースに適用すると、完全な複製ができあがる
  • これは、データベースのレプリケーションにほかならない(第2章、図2-19を参照)
  • リーダーデータベース(マスターデータベース)はレプリケーションログを生成する
    • フォロワー(レプリカ)がリーダーへ追いつくために必要な変更の(イベントの)ストリーム
    • ストリームを継続的に反映していくことで、リーダーと同期し続けることができる
  • 上述のとおりレプリケーションと同じ事を考えている
    • フォロワーは、リーダーデータベースとは異なるテクノロジーだけど(検索インデックス、キャッシュ、データウェアハウス)
  • レプリケーションはデータベースの備える一般的な機能だが、レプリケーションログは実装依存で、公開APIにはなっていない
    • レプリケーションイベントは、アプリケーションからアクセスできるような形式にはなっていない
  • チェンジ・データ・キャプチャ(CDC)
    • あるストレージから別のストレージへデータを複製する仕組みのこと
    • 対象のデータベースから次のような情報を抽出する必要がある(アプリケーションが利用できる形式で)
      • ある時点のデータベース全体の一貫したスナップショット
      • スナップショット以降に発生したあらゆる変更(挿入、更新、削除)のリアルタイムストリーム
  • CDCを主要な技術要素として開発している会社(とそのプロダクト)
  • Kafka の 0.9 リリースから Kafka Connect という API を提供するようになった
    • Kafka を他のデータベースなどに接続するための API
    • 他のデータベースのスナップショットや変更ストリームを、Kafka に流す
      • CDC を利用する
    • Databus などを参考にしている
  • 変更ストリームにデータベースへの最初の書き込みが含まれるならスナップショットは不要
    • しかし、たいていのデータベースはしばらくするとトランザクションログを消してしまう
      • ディスク領域を節約するため
    • したがって、基本的には変更ストリームを取り始める前のスナップショットは必要

担当者のつぶやき

みんなの突っ込み