CDC
DBなどのデータの変更を検知し、その変更をキャプチャし、他のシステムに反映させる手法
GPT-4.icon
Change Data Capture(CDC、チェンジ・データ・キャプチャ)とは、データベースの変更(追加・更新・削除)を検知し、その変更を他のシステムにリアルタイムまたはバッチで伝播させる技術や仕組みのことです。
🔧 CDCの基本的な用途
データ同期:マイクロサービスやデータレイクとの同期に活用
ETLの高速化:全件スキャンではなく、変更されたデータのみを抽出
監査・ログ記録:変更履歴を記録し、追跡や復元に利用
リアルタイム分析:変更データをストリームとして分析
📦 CDCの種類(方式)
1. トリガーベース
データベースの トリガー を利用し、変更をログテーブルなどに記録
🔹 長所: 対応していないDBでも実装可能
🔸 短所: パフォーマンスに影響を与えやすく、管理が煩雑
2. ポーリングベース(差分比較)
一定間隔でデータを取得して差分を検出
🔹 長所: シンプルで導入しやすい
🔸 短所: 遅延が発生しやすく、負荷が大きくなる
3. トランザクションログベース(ログベース)
DBの Write-Ahead Log(WAL)やバイナリログ(MySQLのbinlogなど) を読み取り
🔹 長所: 非侵襲で高パフォーマンス、リアルタイム性が高い
🔸 短所: DBの内部仕様への依存、設定が複雑なことも
🔄 代表的なツール・サービス
table:_
ツール/サービス 概要
Debezium Kafka ConnectベースのCDCツール。ログベース。PostgreSQL, MySQL, MongoDBなど対応 ✅ 利用シーンの具体例
マイクロサービスアーキテクチャで、他のサービスが特定テーブルの更新をサブスクライブ
RDB → BigQuery, Redshift への非同期データ同期(リアルタイムETL)
ユーザー情報が更新されたときにキャッシュや検索インデックス(Elasticsearchなど)も更新
⚠️ 注意点
一貫性の保証:整合性モデル(at least once / exactly once)に注意
スキーマ変更の対応:CDCパイプラインが壊れることがある
セキュリティ/監査要件:個人情報や変更履歴の扱い
大別すると2種類
DBテーブルの内容を定期的にポーリングし、変更が追加されていれば処理を実行する
ポーリングを行うためDBに余計な負荷をかける場合がある
DBテーブルのタイムスタンプを見て変更を追跡する場合、範囲クエリのサポートが必要になる
DBのトランザクションログを追跡し処理を実行する
ポーリング、範囲クエリのサポートが必要ない
トランザクションログを利用するのでDB固有のソリューションが必要になる