Change Data Capture

データベースの変更をリアルタイムに検出し、下流システムに伝播させるデータ統合パターン

データベースイベント駆動

Change Data Capture とは

Change Data Capture (CDC) は、データベースの INSERT、UPDATE、DELETE をリアルタイムに検出し、変更イベントとして下流のシステム (検索エンジン、キャッシュ、分析基盤) に伝播させるデータ統合パターンである。アプリケーションコードを変更せずに、データベースの変更を複数のシステムに配信できる。

CDC の実装方式

方式 仕組み 遅延 DB 負荷 信頼性
ログベース トランザクションログを読み取り ミリ秒〜秒 低い 高い
トリガーベース DB トリガーで変更を検出 ミリ秒 高い 高い
ポーリング 定期的にテーブルをスキャン 秒〜分 中程度 中程度
タイムスタンプ updated_at で変更を検出 秒〜分 中程度 DELETE を検出不可

ログベースが最も効率的で、本番環境で推奨される。DB のトランザクションログ (MySQL の binlog、PostgreSQL の WAL) を読み取るため、アプリケーションへの影響が最小限だ。

AWS での CDC

DynamoDB Streams

DynamoDB のネイティブ CDC。アイテムの変更を 24 時間保持し、Lambda で処理する。

RDS + Debezium

MySQL/PostgreSQL のバイナリログを Debezium (オープンソースの CDC ツール) で読み取り、Kafka や Kinesis に転送する。MSK (Managed Streaming for Apache Kafka) と組み合わせて使う。

活用パターン

[DynamoDB][Streams][Lambda][OpenSearch] (検索インデックス更新)
                                   → [ElastiCache] (キャッシュ更新)
                                   → [S3] (分析用データレイク)
                                   → [SQS] (他サービスへの通知)
  • CQRS の読み取りモデル更新
  • 検索インデックスの同期
  • キャッシュの自動更新
  • データレイクへのリアルタイム連携
  • マイクロサービス間のデータ同期

Transactional Outbox との違い

パターン 仕組み 用途
CDC DB のログを直接読み取り 汎用的なデータ同期
Transactional Outbox Outbox テーブルに書き込み → ポーリング イベント発行の信頼性保証

CDC はアプリケーションコードの変更が不要だが、DB のログ形式に依存する。Outbox パターンはアプリケーションが明示的にイベントを書き込むため、イベントの内容を制御しやすい。

Change Data Capture の理解を深めるには関連書籍が参考になる。

関連用語