【しーでぃーしー】

CDC(変更データキャプチャ) とは?

最終更新:
💡 データベースの変わった分を捉え、ほかの処理へつなぐ仕組み

データベースの追加・更新・削除などの変更を取得し、ほかの処理やシステムへの連携に使う技術。反映の遅延や取得できる変更の範囲は、方式や設定による。

📌 このページのポイント
CDC:DBの変更をほかの処理へつなぐ ログを使う方式の例 ソースDB 追加・更新 削除 変更の取得 ログを読む イベント化 連携先 変更を 反映する 取得と反映の間には遅延がある 初期コピー・保持期間・再送を設計 CDCをETLの抽出に組み込むことも 即時・無欠落・重複なしの一律保証ではない
矢印は変更情報の連携。DBの円柱、ログの書類、宛先DBを区別した。初期コピーやログ保持、障害時の重複に備える必要があり、ETLやバッチ処理の常に低性能な代替という意味ではない。
ひよこ ひよこ
CDCは何をするの?
ペンギン先生 ペンギン先生
対象のテーブルで追加・更新・削除されたデータを取得するよ。たとえば注文の変更を分析へ連携するために使える。取得する処理と、宛先へ反映する処理は分かれる場合があり、即座の反映を保証するものではないんだ。
ひよこ ひよこ
最初から変更だけ送ればよい?
ペンギン先生 ペンギン先生
宛先に既存データが必要なら、最初のコピーも考えるよ。DebeziumのPostgreSQLコネクターは、初期スナップショットの後で変更を継続取得する。対象や方式によっては全件取得の負担を減らせるけれど、常に低負荷という保証ではないんだ。
ひよこ ひよこ
どうやって変更を見つけるの?
ペンギン先生 ペンギン先生
ログを読む方式の例では、SQL ServerのCDCがトランザクションログを読み、変更テーブルに記録するよ。DebeziumではMySQLのbinlogやPostgreSQLの論理レプリケーションを使う。対象DBやツールによって、取得方法や必要な設定が違うんだ。
ひよこ ひよこ
ETLとは何が違うの?
ペンギン先生 ペンギン先生
ETLは抽出・変換・読み込みという処理全体の考え方で、CDCは変更を取得する方法だよ。SQL Serverの資料でも、CDCをETLの増分読み込みに使う例がある。ETLは必ず全件の夜間バッチ、という区別ではないんだ。
ひよこ ひよこ
使うときに注意することは?
ペンギン先生 ペンギン先生
取得の遅れとログなどの保持期間、列の追加や型変更、宛先での反映を確認しよう。保持範囲を超えると変更を取得できない場合がある。Debeziumでは障害からの復旧時に同じイベントが再送されることもあるので、重複しても正しく処理できる設計が必要だよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「CDC」って出てきたら「DBの変更を拾い、ほかの処理へ連携する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Change Data Capture」 = 変更データキャプチャ
💬 Change(変更)+Data(データ)+Capture(捕まえる)で「変わったデータだけを捕まえる」っていう、そのままの名前だよ

参考資料

← 用語集にもどる