CDC
Change Data Capture
DBなどのデータの変更を検知し、その変更をキャプチャし、他のシステムに反映させる手法
Claude Code.icon
DBに対する変更(INSERT / UPDATE / DELETE)を検知して、その変更イベントを別のシステムに伝える仕組み・手法の総称です。「データが変わったこと」を捉えて流すのがポイントです。
なぜ必要か
従来、あるDBのデータを別のシステム(データウェアハウス、検索エンジン、キャッシュ、別マイクロサービス)に同期させたいとき、こんな方法が使われてきました。
定期バッチで全件コピー → 重い・リアルタイム性がない
差分を updated_at でポーリング → DELETE を捕捉できない、取りこぼしが起きる、DBに負荷
CDC はこれらの問題を解決し、ニアリアルタイムかつ低負荷で、削除も含めた変更を確実に伝えられます。
主な実装方式
Query-based CDC
Timestamp-based CDC, Polling publisherパターン
updated_at 等を定期的にポーリング
簡単だがDELETE検知不可・負荷高
Log-based CDC
Transaction log tailingパターン
DBのトランザクションログ(MySQLのbinlog、PostgreSQLのWAL等)を読む
最も主流
アプリ無改修・低負荷・取りこぼしが少ない
トリガーベース
DBトリガーで変更を別テーブルに記録
DBに依存せず実現できるが、書き込み負荷が増える
実務ではログベースが最良とされることが多いです。トランザクションログはDB自身が整合性のために必ず書いているものなので、それを「タダ乗り」して読むのが効率的だからです。
https://www.integrate.io/jp/blog/what-is-change-data-capture-ja/
リアルタイム通信をDBが検知し、それをリアルタイムでアプリケーションに通知する
https://blog.foresta.me/posts/research-cdc-platform/
https://techblog.zozo.com/entry/implementation-of-cqrs-using-outbox-and-cdc-with-dynamodb
https://datacater.io/blog/2020-06-22/everything-you-need-to-know-about-cdc.html
https://rheb.hatenablog.com/entry/2020/02/10/event-sourcing-vs-cdc/
CDC v.s. Event Sourcing
https://tech-blog.tabelog.com/entry/debezium-usecases-in-tabelog