Change Data Capture

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

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

Change Data Capture とは

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

CDC の実装方式

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 との違い

Transactional Outbox との違いを以下にまとめる。

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

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

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

この記事は役に立ちましたか?

関連用語

関連する記事