Info2softは、ウェブサイトでより快適で適切な閲覧体験を提供するためにCookieを使用しています。 プライバシーポリシー
Loading...
変更データキャプチャ(CDC)は、ソースシステム(データベースなど)で発生したデータの変更を検知・取得し、ダウンストリームシステムへ送信するデータ連携技術です。データベースレプリケーション、データウェアハウス、リアルタイム分析などで広く活用されています。
CDCには複数の実装方式があり、それぞれパフォーマンス、複雑性、信頼性にトレードオフが存在します。適切な方式の選択は、使用するデータベースシステム、レイテンシ要件、運用上の制約に依存します。
最も広く採用されている方式で、ソースデータベースのトランザクションログ(PostgreSQL WAL、MySQL binlog、SQL Serverトランザクションログなど)を直接読み取ります。ログエントリを解析することで、変更前後の値やトランザクションIDといった完全なコンテキストを保持したままあらゆる変更を取得し、ソースデータベースの主要な業務処理に影響を与えません。
メリット:
デメリット
主な利用シーン
データベーストリガー(INSERT/UPDATE/DELETEトリガー)を利用し、リアルタイムで変更を捕捉する方式です。データの変更が発生するとトリガーが起動し、変更内容をシャドーテーブルまたはCDCログへ書き込み、送信先システムがそのデータを消費します。
メリット:
デメリット:
主な利用シーン:
仕組み:
データベーステーブル内のタイムスタンプ列(updated_at、created_atなど)を利用し、新規または更新されたレコードを特定する方式です。一定間隔でソースデータベースにクエリを実行し、前回確認時よりタイムスタンプが進んだ行を取得します。標準ではINSERTとUPDATEは捕捉できますがDELETEは取得できません。
メリット:
デメリット:
主な利用シーン:
CDC処理は単純で繰り返し可能なワークフローに従います。ソースシステム上のINSERT、UPDATE、DELETEを含むあらゆるデータ変更を追跡し、それらの変更をリアルタイムまたは準リアルタイムで1つまたは複数の送信先システムへレプリケートします。
1. ソースデータベース:データの発生源となるシステム(ECサイトのトランザクションデータベースなど)。
2. 変更の取得:CDCツールまたはエージェントが、トランザクションログの読み取り(最も一般的)、データベーストリガー、タイムスタンプ確認のいずれかの方法でソースデータベースの変更を監視します。
3. 変換(オプション):取得した変更データに対し、送信先システムのスキーマに合わせた軽微な加工(フォーマット変換、フィルタリング、データ付加など)を実行する場合があります。ELT(Extract, Load, Transform)アーキテクチャではこの手順を省略することもあります。
4. 送信先システムへストリーム配信:取得済みの変更データをデータウェアハウス(Snowflake、BigQuery)、データレイク(S3、ADLS)、マイクロサービス、リアルタイム分析ツール(Apache Kafka、Databricks)などの送信先へ送信します。
5.同期および検証:送信先システムが変更を適用しソースとの同期状態を維持します。CDCツールには多くの場合、データの損失や破損が発生していないか確認する検証機能が搭載されています。
このワークフローは非侵入型に設計されています。CDCの処理によって速度が低下することなく、ソースデータベースは本来の業務処理を継続できます。ダウンタイムやパフォーマンス低下が許容されない高負荷かつミッションクリティカルなシステムにおいて、この特徴は特に重要です。
現代のビジネスにおいてCDCの導入は必要不可欠です。CDCを実装する主な業務上・技術上のメリットを以下に記載します。
CDCの業務上のメリット:
CDCの有効化手順はデータベースごとに若干異なりますが、基本的な流れはデータベースレベルでCDCを有効化し、対象テーブルごとに設定を行い、取得動作を検証するという流れです。以下にSQL Serverを例に実用的なSQLサンプルを交えた手順を記載します。
まずデータベースレベルでCDCを有効化します。これにより変更内容とメタデータを追跡するシステムテーブル(cdc.captured_columns、cdc.change_tablesなど)が作成されます。
— 対象データベースでCDCを有効化(’YourDatabase’を実際のデータベース名に置き換え)
USE YourDatabase;
GO
EXEC sys.sp_cdc_enable_db;
GO
-- データベースのCDC有効状態を確認するクエリ
— データベース上でCDCが有効か確認
SELECT name, is_cdc_enabled
FROM sys.databases
WHERE name = 'YourDatabase';
GO
is_cdc_enabled = 1が返却されればCDCが有効化されています。
データベースでCDCを有効化した後、追跡対象のテーブルごとに設定を行います。この例ではトランザクションシステムで一般的なCustomersテーブルを対象にINSERT/UPDATE/DELETE変更を取得します。
— CustomersテーブルでCDCを有効化(’Customers’を実際のテーブル名に置き換え)
USE YourDatabase;
GO
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo', -- テーブルのスキーマ名
@source_name = N'Customers', -- 追跡対象テーブル名
@role_name = NULL, -- 特定ロール不要(公開アクセスの場合はNULLを指定)
@supports_net_changes = 1; -- 差分変更追跡を有効(オプション)
GO
主な留意点:
– @supports_net_changes = 1を指定すると各行の最新の変更のみをクエリで取得可能となり、重複データを削減するのに有用です。
– CDCは自動的に取得ジョブと古い変更データを管理するクリーンアップジョブを作成します。
テーブルでCDCを有効化した後、テーブルに対して変更を実行し、CDC変更ログを照会して動作を確認します。
— 1. Customersテーブルにテストレコードを挿入
INSERT INTO dbo.Customers (CustomerName, Email, Phone)
VALUES ('John Doe', 'john.doe@example.com', '123-456-7890');
GO
— 2. CDCログを照会し取得した変更を確認(’Customers’を実際のテーブル名に置き換え)
USE YourDatabase;
GO
SELECT *
FROM cdc.dbo_Customers_CT; -- CDCは cdc.[スキーマ_テーブル名_CT] 形式の変更テーブルを作成します
GO
cdc.dbo_Customers_CTテーブルにINSERT操作のレコードが表示され、変更種別(INSERTの場合は__$operation = 2)、タイムスタンプ、更新後のデータが確認できます。
手順4. CDCの無効化(必要な場合)
変更の追跡を停止する場合は、先にテーブルのCDCを無効化し、その後データベースのCDCを無効化します。
— CustomersテーブルのCDCを無効化
USE YourDatabase;
GO
EXEC sys.sp_cdc_disable_table
@source_schema = N'dbo',
@source_name = N'Customers',
@capture_instance = 'all';
GO
— データベースのCDCを無効化
USE YourDatabase;
GO
EXEC sys.sp_cdc_disable_db;
GO
高い整合性、データ損失ゼロ、異種データベース間のシームレスな同期を求めるエンタープライズにおいてCDCソリューションを選定する際、Info2Softのi2Streamは優れた選択肢となります。
i2Streamは同種・異種システム間での継続的なデータ集約と配信を実現します。データベースのセマンティックレベル(SQL)レプリケーション技術を活用し、同期処理における正確なデータ取得とデータ損失ゼロを保証します。
i2Streamの主な機能:
Q1:変更データキャプチャ(CDC)とは何か。現代のデータアーキテクチャにおいてなぜ重要なのか。
A:変更データキャプチャ(CDC)は、ソースデータベース上のINSERT、UPDATE、DELETE操作を追跡・取得し、ソースデータベースのパフォーマンスを妨げることなく増分変更を送信先システム(データウェアハウス、データレイク、マイクロサービスなど)へ配信するリアルタイムデータ連携技術です。従来のバッチETLによるデータ遅延やリソースオーバーヘッドを解消し、リアルタイムな意思決定、ダウンタイムゼロのクラウド移行、GDPR/HIPAA/SOXに対応したコンプライアンスの実現、市場変化への迅速な対応を可能にするため、データ駆動型企業にとって重要です。
Q2:CDCは従来のバッチETL/ELTとどう異なるか。自社業務にはどちらが適しているか。
A:主な違いはデータの鮮度とソースへの負荷です。バッチETLは一定間隔(夜間など)でデータセット全体を抽出するためデータが古くなり、テーブルのフルスキャンによりソースデータベースへ高い負荷をかけます。CDCはほぼリアルタイムで増分変更を取得し、ネットワーク・コンピュートコストを削減し最新のデータを確保します。リアルタイム分析、不正検知、シームレスなクラウド移行が必要な場合はCDCを選択してください。頻度が低く時間制約のないデータ同期(静的レポーティングなど)の場合のみバッチETLを検討してください。
変更のあったデータのみを取得するCDC技術はシステム負荷を低減し、データ整合性を高め、多様な環境における迅速な意思決定を支えます。
Info2Soft i2Streamのような最新のCDCソリューションは導入を簡素化し、異種・ハイブリッド環境に対応し、データ損失ゼロを実現するため、クラウド移行、リアルタイム分析、AIワークフローといった重要なシナリオに適しています。