CDC(Change Data Capture:変更データキャプチャ) は、ソースシステム内のデータに加えられた変更(挿入、更新、削除など)をキャプチャするデータ統合パターンです。また、これらの変更は一般にCDCフィードと呼ばれます。
現在では、データはオンプレミスとSaaSの二つの環境で使用していることが多いです。
1.オンプレミス:企業が自社のサーバーやデータセンターにソフトウェアをインストールし、管理する。データの加工を担当。 2.SaaS(Software as a Service):クラウドプロバイダーがインフラを管理し、ユーザーはインターネット経由でサービスを利用する。データの活用を担当。 |
そのため、オンプレミスでデータを変更した際、SaaSのデータも変更する必要が出てきます。
ここで活躍するのがCDCです!
CDCを活用すると、以下のようになります。
CDCのデータの処理方法は以下の2つのパターンがあります。
まず、2つともデータベースにデータをアップロードします。その後、データの変更の仕方によって変化します。
1.データの直接変更のリアルタイム検出と記録: データベース内のデータが直接変更される場合、CDCがその変更をリアルタイムで検出し、その変更を記録します。これにより、データベース内の最新情報が常に維持されます。 2.追加情報を含む再アップロードの処理: データに変更が加わった場合、再度データをアップロードすると、CDCがその変更部分を検出し、その部分を対象に処理を行います。これにより、効率的に変更データのみを処理できます。 |
CDCのメリットを用いるメリットは以下の3点です。
①リアルタイム性:データ変更が即座に反映されるため、最新情報を常に利用可能
②効率性:必要な変更部分だけを転送するので、大量データ処理の負担を軽減
③自動化:手動でデータ更新をする必要が無くなる
|
これにより、データ処理の効率化が見込めます!
「専門用語が多くて分からないよ~!」といった方向けに例を用いて分かりやすく説明します。
レストランの予約システムを想像してみてください。
あるお客様が19:00~21:00のコース料理の予約をしました。この場合の動作は以下の通りです。
1.お客様が予約をする
2.CDCが変更を検知
3.リアルタイムで他のシステムに通知
4.結果的な効果
|
簡単に図にするとこのような流れです。
このような動作が起こり、お客様が時間通りにレストランに行くと待ち時間無しでご飯を食べることができるというわけです。
これを先ほど同様に3つのポイントにまとめると、
①リアルタイム性:予約情報が入力された瞬間に他のシステムも最新情報に更新される
②効率性:必要な変更部分だけ(今回の場合、19:00-21:00の新規予約)が処理されるため、無駄なデータ処理が無い
③自動化:手動で情報を共有する必要が無く、全て自動で連携される
|
そのため、「CDC=データの実況放送」とイメージするのが良いと思います!
次は、そのようなCDCの3つの方式について紹介します!
1つ目はクエリベースです。
クエリ:ソフトウェアに対するデータの問い合わせや要求などを一定の形式で表現すること |
図書館や本屋で本を探すとき、検索の機械を使う事があると思います。この時に、「著者名」「タイトル」「ジャンル」といった条件を入力すると思います。この条件がクエリです。
クエリベースでは、データベースに対して定期的にクエリを実行し、変更されたレコードを抽出する方法です。具体的には、テーブルの更新日付やタイムスタンプを条件にして、変更されたレコードを取得します。
例えば、
このように「最終更新日時が2025年2月28日以降」の条件を指定してクエリを実行することで、その日以降に更新されたレコードの抽出が可能です。
メリット:
実装が比較的簡単で、特別なツールや設定が不要。
デメリット:
データ量が多い場合、クエリの実行に時間がかかり、データベースに負荷がかかる可能性がある。削除されたレコードの検出が難しい。
2つ目はトリガーベースです。
トリガー:何かの動作や処理を開始するきっかけとなるイベントや条件 |
朝7時になるとアラームが鳴る目覚まし時計の場合、朝7時がトリガーです。
トリガーベースでは、データベーストリガーを利用して、データの変更が発生した際に別のテーブルに自動的に変更情報を記録する方法です。トリガーはINSERT(挿入)、UPDATE(更新)、DELETE(削除)の3つの操作に対して設定が可能です。
メリット:
変更が発生した瞬間にデータをキャプチャでき、削除されたレコードも取得可能。
デメリット:
別テーブルの管理による運用の複雑化。トリガーのロジックが複雑になることもある。
3つ目はログベースです。
ログ:システムやアプリケーションが動作中に記録する出来事や操作の履歴 |
イメージとしては、買い物のレシートです。レシートには「買い物をした日時」「購入した商品」「金額」といったものが記録されており、これらがログに該当します。
ログベースは、データベースのトランザクションログを解析して変更データを抽出する方法です。トランザクションログには、データベース内で行われたすべての変更が記録されています。
メリット:
トランザクションログとやり取りを行うため、データベースに負担をかける事が無く、リアルタイムで変更の検出が可能。
デメリット:
トランザクションログの解析には専用のツールやソフトウェアが必要で、古いデータベースでは対応していない可能性がある。
ここでは、CDCのユースケースとして2つ紹介します。
Amazonで下のような在庫数の表示を見たことはありませんか?
これは人が手打ちしているわけではありません!
商品が購入されるとCDCが変更を検知し、以下の動作を行います。
在庫管理システム ➡ 在庫数の減少をリアルタイムに反映 販売分析ツール ➡ 販売数をリアルタイムに反映 |
銀行口座のアプリの場合、「1万円引き下ろした」や「3万円入金した」という情報は即座に口座残高に反映されます。
これもCDCが取引の情報を元に以下の動作を行っています。
顧客向けのアプリ ➡ 口座残高のリアルタイム更新 内部分析システム ➡ リアルタイム分析 |
CDCツールを4つ紹介します。
オープンソースのCDCツールで、Kafkaと連携してリアルタイムのデータストリーミングを実現します。
機能と特徴:〇(オープンソースで協力な機能を持つが、設定に技術的な知識が必要
対応データソース:〇(主要なデータベースに対応)
使いやすさと導入の容易さ:△(技術的な知識が必要)
|
公式ページ:https://debezium.io/
クラウドベースのデータ統合プラットフォームで、CDC機能を提供し、データの自動同期をサポートします。
機能と特徴:◎(クラウドベースで自動化されたデータ統合を提供)
対応データソース:◎(150以上のデータソースに対応)
使いやすさと導入の容易さ:◎(セットアップが簡単でメンテナンスが少ない)
|
公式ページ:https://www.fivetran.com/
エンタープライズ向けの商用CDCツールで、ビジネスクリティカルなシステムで広く利用されています。
機能と特徴:◎(エンタープライズ向けで高性能)
対応データソース:◎(多様なデータベースとシステムに対応)
使いやすさと導入の容易さ:△(導入と設定に専門知識が必要)
|
公式ページ:https://www.oracle.com/jp/integration/goldengate/
ETL、リバースETL、CDC機能を備えたデータ統合プラットフォームで、ノーコードでのデータパイプライン作成が可能です。
機能と特徴:〇(多機能でノーコードのUIを提供)
対応データソース:◎(多様なデータソースに対応)
使いやすさと導入の容易さ:◎(ノーコードで初心者にも使いやすい)
|
公式ページ:https://www.integrate.io/
4つのCDCツールを3つの観点で比較したものが以下の表です。
機能と特徴 | 対応データソース | 使いやすさと導入の容易さ | |
Debezium | 〇 | 〇 | △ |
Fivetran | ◎ | ◎ | ◎ |
Oracle GoldenGate | ◎ | ◎ | △ |
Intergrate.io | 〇 | ◎ | ◎ |
いかがでしたか?本記事では、CDC(Change Data Capture)について概要と3つの方式を中心に紹介しました。
データを更新する度に、全データを送信、処理を行うのはとても大変です。ぜひ今回紹介したCDCを活用し、効率よく作業を進めましょう!