(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-10-06
(45)【発行日】2025-10-15
(54)【発明の名称】変更データキャプチャログ履歴、またはCDCログ履歴を追跡する方法、及びコンピュータプログラム(変更データキャプチャログ履歴の追跡)
(51)【国際特許分類】
G06F 16/23 20190101AFI20251007BHJP
【FI】
G06F16/23
(21)【出願番号】P 2021184089
(22)【出願日】2021-11-11
【審査請求日】2024-04-11
(32)【優先日】2020-11-13
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】フロース フロリアン ヘーマン
(72)【発明者】
【氏名】ガルセス エリチェ ルイス
(72)【発明者】
【氏名】バウアー ダニエル ニコラウス
(72)【発明者】
【氏名】ルーニー ジョン ジー.
【審査官】富岡 寛凱
(56)【参考文献】
【文献】米国特許出願公開第2018/0095952(US,A1)
【文献】特開2018-128881(JP,A)
【文献】国際公開第2012/090281(WO,A1)
【文献】米国特許出願公開第2020/0117680(US,A1)
【文献】米国特許出願公開第2018/0285201(US,A1)
【文献】伊藤 雅博, 株式会社日立製作所,Apache Kafkaの概要とアーキテクチャ,2019年01月30日,Internet<https://qiita.com/sigmalist/items/5a26ab519cbdf1e07af3>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
変更データキャプチ
ャ(CDC)ログ履歴を追跡する方法であって
、
プロセッサが、ソースシステムの第1のスナップショットを取得し、前記第1のスナップショットを反映するキーと値のペアのセットS
1を導き出す段階と
、
前記プロセッサが、前記第1のスナップショットによってキャプチャされた操作を複製することによって、前記ソースシステムのミラーオペレーションを実
行する段階であって、前記ミラーオペレーションは、前記ソースシステムに1または複数の結果をもたらす、段階と、
前記プロセッサが、前記ミラーオペレーションの前記1または複数の結果を反映するキーと値のペアのセットS
1に関して実行される変更を表すCDC変更オペレーションを取
得する段階であって、前記CDC変更オペレーションはキーと値のペアのセットS
Mとしてキャプチャされる、段階と
、
前記プロセッサが、第1のCDCログを、前記セットS
1および前記セットS
Mの前記キーと値のペアを含むキーと値のペアの第1のシーケンスS
Aとして取得する段階と
、
前記プロセッサが、前記ソースシステムの第2のスナップショットを取得し、前記第2のスナップショットを反映するキーと値のペアのセットS
2を導き出す段階と
、
前記プロセッサが、キーと値のペアの第1のシーケンスS
Aをキーと値のペアのセットS
2と比較し、キーと値のペアのセットS
3として修正CDCオペレーションを導き出し、前記修正CDCオペレーションは、キーと値のペアの前記第1のシーケンスS
Aに関して実行される修正を表す段階と
、
前記プロセッサが、前記第1のシーケンスS
Aおよび前記セットS
3の前記キーと値のペアを含むキーと値のペアの第2のシーケンスS
Bとして第2のCDCログを取得する段階であって、前記修正CDCオペレーションが、キーと値のペアの前記第2のシーケンスS
Bが全体として、キーと値のペアの前記セットS
2とコヒーレントであることを保証する、段階と、
を含む、方法。
【請求項2】
前記方法
は、前記プロセッサが、ターゲットシステムの現在の状態が、第2のスナップショットが取得される時刻におけるソースシステムの状態とコヒーレントなターゲット状態に達するように、ターゲットシステムの現在の状態を修正するようにキーと値のペアの第2のシーケンスを解釈す
る段階をさらに備える、
請求項1に記載の方法。
【請求項3】
キーと値のペアの前記第2のシーケンスS
Bは、順序付けられたシーケンスとして取得され、これにより、前記キーと値のペアの前記セットS
1は前記キーと値のペアの前記セットS
Mに先行し、前記キーと値のペアの前記セットS
M自体は前記キーと値のペアの前記セットS
3に先行する、
請求項1または2に記載の方法。
【請求項4】
変更データキャプチャログ履歴、またはCDCログ履歴を追跡する方法であって、
プロセッサが、ソースシステムの第1のスナップショットを取得し、前記第1のスナップショットを反映するキーと値のペアのセットS
1
を導き出す段階と、
前記プロセッサが、前記ソースシステムのミラーオペレーションを実行し、それに応じて、キーと値のペアのセットS
1
に関して実行される変更を表すCDC変更オペレーションを取得し、前記CDC変更オペレーションはキーと値のペアのセットS
M
としてキャプチャされる、段階と、
前記プロセッサが、第1のCDCログを、前記セットS
1
および前記セットS
M
の前記キーと値のペアを含むキーと値のペアの第1のシーケンスS
A
として取得する段階と、
前記プロセッサが、前記ソースシステムの第2のスナップショットを取得し、前記第2のスナップショットを反映するキーと値のペアのセットS
2
を導き出す段階と、
前記プロセッサが、キーと値のペアの第1のシーケンスS
A
をキーと値のペアのセットS
2
と比較し、キーと値のペアのセットS
3
として修正CDCオペレーションを導き出し、前記修正CDCオペレーションは、キーと値のペアの前記第1のシーケンスS
A
に関して実行される修正を表す段階と、
前記プロセッサが、前記第1のシーケンスS
A
および前記セットS
3
の前記キーと値のペアを含むキーと値のペアの第2のシーケンスS
B
として第2のCDCログを取得する段階であって、前記修正CDCオペレーションが、キーと値のペアの前記第2のシーケンスS
B
が全体として、キーと値のペアの前記セットS
2
とコヒーレントであることを保証する、段階と、
を含み、
キーと値のペアの前記第2のシーケンスS
B
は、順序付けられたシーケンスとして取得され、これにより、前記キーと値のペアの前記セットS
1
は前記キーと値のペアの前記セットS
M
に先行し、前記キーと値のペアの前記セットS
M
自体は前記キーと値のペアの前記セットS
3
に先行する、
方法。
【請求項5】
前記修正CDCオペレーションは、それぞれがキーと値のペアとしてキャプチャされる、1または複数のDELETEオペレーションを含む、
請求項1か
ら4のいずれか一項に記載の方法。
【請求項6】
前記修正CDCオペレーションは、それぞれがキーと値のペアとしてキャプチャされる、1または複数のINSERTオペレーションを含む、
請求項1か
ら5のいずれか一項に記載の方法。
【請求項7】
前記修正CDCオペレーションは、それぞれがキーと値のペアとしてキャプチャされる、1または複数のUPDATEオペレーションを含む、
請求項1か
ら6のいずれか一項に記載の方法。
【請求項8】
前記修正CDCオペレーションは、それぞれがキーと値のペアとしてキャプチャされる以下の動作、すなわち、DELETEオペレーション、INSERTオペレーション、およびUPDATEオペレーションのそれぞれの少なくとも1つを含む、
請求項1か
ら7のいずれか一項に記載の方法。
【請求項9】
前記キーと値のペアのすべての値が、前記ソースシステムのデータベース行に対応する、
請求項1か
ら8のいずれか一項に記載の方法。
【請求項10】
前記第1のCDCログにインデックスされた所与のデータベース行が、第2のスナップショットに反映されず、これにより、前記第1のシーケンスS
Aと前記セットS
2との比較は、前記所与のデータベース行に関するDELETEオペレーションとして前記修正CDCオペレーションの1つを導き出させる、
請求
項9に記載の方法。
【請求項11】
前記第1のCDCログにインデックスされた所与のデータベース行が前記第2のスナップショットに反映され、非キーフィールドが変わるにもかかわらず、これにより、前記第1のシーケンスS
Aと前記セットS
2との比較は、その非キーフィールドに関する対応するUPDATEオペレーションとして前記修正CDCオペレーションの1つを導き出させる、
請求
項9または10に記載の方法。
【請求項12】
前記第2のスナップショットにおいて反映される所与のデータベース行が前記第1のCDCログにおいてインデックスされず、これにより、前記第1のシーケンスS
Aと前記セットS
2との比較は、その所与の行に関する対応するINSERTオペレーションとして前記修正CDCオペレーションの1つを導き出させる、
請求
項9から11のいずれか一項に記載の方法。
【請求項13】
前記第1のCDCログにインデックスされた所与のデータベース行が前記第2のスナップショットにおいて同一に反映され、これにより、前記第1のシーケンスS
Aと前記セットS
2との比較は、所与の行に関する修正CDCオペレーションを全く導き出させない、
請求
項9から12のいずれか一項に記載の方法。
【請求項14】
前記方法は
、前記プロセッサが、前記第1のCDCログのソーティングされたコンパクト化を取得する段階をさらに備える、
請求項1か
ら13のいずれか一項に記載の方法。
【請求項15】
前記方法は、データを異なる区画に分割するよう構成されるCDCシステ
ムの前記プロセッサによって実行される、
請求項1か
ら14のいずれか一項に記載の方法。
【請求項16】
前記方法は
、前記プロセッサが、前記キーと値のペアに基づいて、前記CDCシステムの前記異なる区画に従って前記データベース行をマッピングする段階をさらに備える、
請求
項9から13のいずれか一項に従属する請求
項15に記載の方法。
【請求項17】
前記第1のシーケンスS
Aと前記セットS
2との比較は、前記第1のシーケンスS
Aと前記セットS
2との間の類似性の程度を評価することをさらに含み、これにより、前記修正CDCオペレーションが、評価された類似性の程度に従って選択されたアルゴリズムに基づいて導き出される、
請求項1か
ら16のいずれか一項に記載の方法。
【請求項18】
変更データキャプチャログ履歴、またはCDCログ履歴を追跡する方法であって、
プロセッサが、ソースシステムの第1のスナップショットを取得し、前記第1のスナップショットを反映するキーと値のペアのセットS
1
を導き出す段階と、
前記プロセッサが、前記ソースシステムのミラーオペレーションを実行し、それに応じて、キーと値のペアのセットS
1
に関して実行される変更を表すCDC変更オペレーションを取得し、前記CDC変更オペレーションはキーと値のペアのセットS
M
としてキャプチャされる、段階と、
前記プロセッサが、第1のCDCログを、前記セットS
1
および前記セットS
M
の前記キーと値のペアを含むキーと値のペアの第1のシーケンスS
A
として取得する段階と、
前記プロセッサが、前記ソースシステムの第2のスナップショットを取得し、前記第2のスナップショットを反映するキーと値のペアのセットS
2
を導き出す段階と、
前記プロセッサが、キーと値のペアの第1のシーケンスS
A
をキーと値のペアのセットS
2
と比較し、キーと値のペアのセットS
3
として修正CDCオペレーションを導き出し、前記修正CDCオペレーションは、キーと値のペアの前記第1のシーケンスS
A
に関して実行される修正を表す段階と、
前記プロセッサが、前記第1のシーケンスS
A
および前記セットS
3
の前記キーと値のペアを含むキーと値のペアの第2のシーケンスS
B
として第2のCDCログを取得する段階であって、前記修正CDCオペレーションが、キーと値のペアの前記第2のシーケンスS
B
が全体として、キーと値のペアの前記セットS
2
とコヒーレントであることを保証する、段階と、
を含み、
前記第1のシーケンスS
A
と前記セットS
2
との比較は、前記第1のシーケンスS
A
と前記セットS
2
との間の類似性の程度を評価することをさらに含み、これにより、前記修正CDCオペレーションが、評価された類似性の程度に従って選択されたアルゴリズムに基づいて導き出される、
方法。
【請求項19】
前記方法は
、前記プロセッサが、固有キーがソースシステムにおいて欠けている場合には、前記セットS
1、前記セットS
2、前記セットS
M、前記第1のシーケンスS
A、前記セットS
3、および前記第2のシーケンスS
Bのうち1または複数のキーと値のペアの1または複数のそれぞれに関するこの固有キーを生成する段階をさらに備える、
請求項1か
ら18のいずれか一項に記載の方法。
【請求項20】
変更データキャプチ
ャ(CDC)ログ履歴を追跡するコンピュータプログラムであって、
それに具現されるプログラム命令を備え、前記プログラム命令は、処理手段に、
ソースシステムの第1のスナップショットを取得し、前記第1のスナップショットを反映するキーと値のペアのセットS
1を導き出す手順と、
前記第1のスナップショットによってキャプチャされた操作を複製することによって、前記ソースシステムのミラーオペレーションを実
行する段階であって、前記ミラーオペレーションは、前記ソースシステムに1または複数の結果をもたらす、手順と、
前記ミラーオペレーションの前記1または複数の結果を反映するキーと値のペアのセットS
1に関して実行される変更を表すCDC変更オペレーションを取
得手順であって、前記CDC変更オペレーションはキーと値のペアのセットS
Mとしてキャプチャされる、手順と、
第1のCDCログを、前記セットS
1および前記セットS
Mの前記キーと値のペアを含むキーと値のペアの第1のシーケンスS
Aとして取得する手順と、
前記ソースシステムの第2のスナップショットを取得し、前記第2のスナップショットを反映するキーと値のペアのセットS
2を導き出す手順と、
キーと値のペアの第1のシーケンスS
Aをキーと値のペアのセットS
2と比較し、キーと値のペアのセットS
3として修正CDCオペレーションを導き出し、前記修正CDCオペレーションは、キーと値のペアの前記第1のシーケンスS
Aに関して実行される修正を表す手順と、
前記第1のシーケンスS
Aおよび前記セットS
3の前記キーと値のペアを含むキーと値のペアの第2のシーケンスS
Bとして第2のCDCログを取得する手順であって、前記修正CDCオペレーションが、キーと値のペアの前記第2のシーケンスS
Bが全体として、キーと値のペアの前記セットS
2とコヒーレントであることを保証する、手順と、
をさせるように、前記処理手段によって実行可能である、コンピュータプログラム。
【請求項21】
前記プログラム命令は、前記処理手段に、キーと値のペアの前記第2のシーケンスを解釈させる手順と、ターゲットシステムを、前記第2のスナップショットを反映する状態に達せさせる手順とをさらに行うように、前記処理手段によってさらに実行可能である、
請求
項20に記載のコンピュータプログラム。
【請求項22】
前記プログラム命令は、前記処理手段に、順序付けられたシーケンスとしてキーと値のペアの前記第2のシーケンスS
Bを取得させる手順であって、これにより、前記キーと値のペアの前記セットS
1が前記キーと値のペアの前記セットS
Mに先行し、前記キーと値のペアの前記セットS
M自体が前記キーと値のペアの前記セットS
3に先行する手順をさらに行うように、前記処理手段によってさらに実行可能である、
請求
項20または21に記載のコンピュータプログラム。
【請求項23】
変更データキャプチャログ履歴、またはCDCログ履歴を追跡するコンピュータプログラムであって、
それに具現されるプログラム命令を備え、前記プログラム命令は、処理手段に、
ソースシステムの第1のスナップショットを取得し、前記第1のスナップショットを反映するキーと値のペアのセットS
1
を導き出す手順と、
前記ソースシステムのミラーオペレーションを実行し、それに応じて、キーと値のペアのセットS
1
に関して実行される変更を表すCDC変更オペレーションを取得し、前記CDC変更オペレーションはキーと値のペアのセットS
M
としてキャプチャされる、手順と、
第1のCDCログを、前記セットS
1
および前記セットS
M
の前記キーと値のペアを含むキーと値のペアの第1のシーケンスS
A
として取得する手順と、
前記ソースシステムの第2のスナップショットを取得し、前記第2のスナップショットを反映するキーと値のペアのセットS
2
を導き出す手順と、
キーと値のペアの第1のシーケンスS
A
をキーと値のペアのセットS
2
と比較し、キーと値のペアのセットS
3
として修正CDCオペレーションを導き出し、前記修正CDCオペレーションは、キーと値のペアの前記第1のシーケンスS
A
に関して実行される修正を表す手順と、
前記第1のシーケンスS
A
および前記セットS
3
の前記キーと値のペアを含むキーと値のペアの第2のシーケンスS
B
として第2のCDCログを取得する手順であって、前記修正CDCオペレーションが、キーと値のペアの前記第2のシーケンスS
B
が全体として、キーと値のペアの前記セットS
2
とコヒーレントであることを保証する、手順と、
をさせるように、前記処理手段によって実行可能であり、
前記プログラム命令は、前記処理手段に、順序付けられたシーケンスとしてキーと値のペアの前記第2のシーケンスS
B
を取得させる手順であって、これにより、前記キーと値のペアの前記セットS
1
が前記キーと値のペアの前記セットS
M
に先行し、前記キーと値のペアの前記セットS
M
自体が前記キーと値のペアの前記セットS
3
に先行する手順をさらに行うように、前記処理手段によってさらに実行可能である、
コンピュータプログラム。
【請求項24】
変更データキャプチャログ履歴、またはCDCログ履歴を追跡するコンピュータプログラムであって、
それに具現されるプログラム命令を備え、前記プログラム命令は、処理手段に、
ソースシステムの第1のスナップショットを取得し、前記第1のスナップショットを反映するキーと値のペアのセットS
1
を導き出す手順と、
前記ソースシステムのミラーオペレーションを実行し、それに応じて、キーと値のペアのセットS
1
に関して実行される変更を表すCDC変更オペレーションを取得し、前記CDC変更オペレーションはキーと値のペアのセットS
M
としてキャプチャされる、手順と、
第1のCDCログを、前記セットS
1
および前記セットS
M
の前記キーと値のペアを含むキーと値のペアの第1のシーケンスS
A
として取得する手順と、
前記ソースシステムの第2のスナップショットを取得し、前記第2のスナップショットを反映するキーと値のペアのセットS
2
を導き出す手順と、
キーと値のペアの第1のシーケンスS
A
をキーと値のペアのセットS
2
と比較し、キーと値のペアのセットS
3
として修正CDCオペレーションを導き出し、前記修正CDCオペレーションは、キーと値のペアの前記第1のシーケンスS
A
に関して実行される修正を表す手順と、
前記第1のシーケンスS
A
および前記セットS
3
の前記キーと値のペアを含むキーと値のペアの第2のシーケンスS
B
として第2のCDCログを取得する手順であって、前記修正CDCオペレーションが、キーと値のペアの前記第2のシーケンスS
B
が全体として、キーと値のペアの前記セットS
2
とコヒーレントであることを保証する、手順と、
をさせるように、前記処理手段によって実行可能であり、
前記第1のシーケンスS
A
と前記セットS
2
との比較は、前記第1のシーケンスS
A
と前記セットS
2
との間の類似性の程度を評価することをさらに含み、これにより、前記修正CDCオペレーションが、評価された類似性の程度に従って選択されたアルゴリズムに基づいて導き出される、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、変更データキャプチャ(CDC)ログ履歴を追跡する、コンピュータ制御化された方法およびコンピュータプログラム製品に関する。特にそれは、一貫性のあるCDCログを生成する修正CDCオペレーションに依存する方法に向けられている。
【発明の概要】
【発明が解決しようとする課題】
【0002】
たいていの企業データは、関連データウェアハウスに格納され、そこでそれは通常、例えば企業の業務に関する活動可能な情報を生成するように、アップデートされ、処理され、クエリされる。データレイクは、追加の値がそのようなデータから抽出されることができるように、多くの異なるソースからのデータが組み合わせられることを可能にする。例えば、天候データおよびサプライチェーンデータの組み合わせは、それらのサプライチェーンの潜在的なリスクに関する予想につながることがある。それゆえ、複数の異なるソースから、理想的にはリアルタイムで、多くの異なるストレージおよび処理システムに関連データをコピーすることは興味深い。ハイブリッドクラウドにおいて、このようなシステムは、会社のプライベートクラウド上、および1または複数のクラウドベンダのパブリッククラウド上の両方で動作しているであろう。例えば、会社の売り上げデータは、会社の施設にあるトランザクションシステムに格納されてもよく、また、分析処理が売り上げ推薦を生成可能なパブリッククラウドへとコピーされてもよい。
【0003】
変更データキャプチャ(CDC)システムにおいては、実際に変更されたソースシステムにおけるデータのみが、ターゲットシステムにおいてアップデートされる。これらのシステムにおける重要な課題は、データセットのどの部分が変更されたかを識別することである。関連データベースシステムにおいて、これは、トランザクションログを検査することによって効率的に実現され得る。
【0004】
通常、CDCシステムによって、テーブルの最初のリフレッシュ/スナップショットが、まずKafkaトピック(またはMQキュー)などのメッセージシステムに実行され、次に、すべての後続の変更が、変更ログから読み出られ、トピックへと伝搬される。最初のリフレッシュを含むすべての変更は、個別のメッセージとして格納される。CDCシステムは、第1のリフレッシュが実行された操作を留意すること、および、そのリフレッシュの後に実行されるすべての操作が正確にキャプチャされることを保証することによって、これらの2つの独立した操作の間のコヒーレンスを保証し得る。このトピックを読み出すことは、次に、ソースデータベースのレプリカが、ターゲットシステムにおいて作成されることを許容する。ターゲットデータベースにおけるデータは、ターゲットシステムにおける状態がソースシステムのいくつかの有効な状態を表すとき、ソースデータベースのデータに関してコヒーレントであると定義される。すべてのデータベースに関する要求である一意性とは対照的に、コヒーレンスは、レプリカのデータベースに、より特別に関係する。
【課題を解決するための手段】
【0005】
第1の態様によれば、本発明は、変更データキャプチャログ履歴、またはCDCログ履歴を追跡する方法として具現化される。まず初めに、ソースシステムの第1のスナップショットが取得され、第1のスナップショットを反映するキーと値のペアのセットS1が導き出される。次に、ソースシステムのミラーオペレーションが実行され、それに応じて、CDC変更オペレーションを取得する。CDC変更オペレーションは、キーと値のペアのセットS1に関して実行される変更を表す。そのような動作は、キーと値のペアのセットSMとしてキャプチャされる。次に、第1のCDCログが、キーと値のペアの第1のシーケンスSAとして取得され、それらは、セットS1およびセットSMのキーと値のペアを含む。また、(第1のスナップショットを取得した後に)ソースシステムの第2のスナップショットが取得され、キーと値のペアのセットS2が導き出され、それは第2のスナップショットを反映する。キーと値のペアの第1のシーケンスSAは次に、キーと値のペアのセットS2と比較され、修正CDCオペレーションを導き出し、それはキーと値のペアのセットS3としてキャプチャされる。修正CDCオペレーションは、キーと値のペアの第1のシーケンスSAに関して実行される修正を表す。最後に、第2のCDCログがキーと値のペアの第2のシーケンスSBとして取得され、それはシーケンスSAおよびセットS3のキーと値のペアを含む。修正CDCオペレーションは、キーと値のペアの第2のシーケンスSBが全体として、キーと値のペアのセットS2とコヒーレントであることを保証する。
【0006】
好ましくは、方法はさらに、ターゲットシステムの現在の状態が、第2のスナップショットが取得される時刻におけるソースシステムの状態とコヒーレントなターゲット状態に達するように、ターゲットシステムの現在の状態を修正するようにキーと値のペアの第2のシーケンスを解釈することを備える。
【0007】
別の態様によれば、本発明はCDCログ履歴を追跡するコンピュータプログラム製品として具現化される。コンピュータプログラム製品は、それによって具現化されるプログラム命令を有するコンピュータ可読記憶媒体を含み、プログラム命令は、上記方法に係る段階を実行させるように、処理手段によって実行可能である。
【0008】
本発明を具現化する、コンピュータ制御化された方法、およびコンピュータプログラム製品が、ここで、限定的ではない例によって、および添付図面を参照して説明されるであろう。
【図面の簡単な説明】
【0009】
添付の図では、類似の参照符号は、個々の図の初めから終わりまで、同一の、または機能的に同様の要素を指し、以下の詳細な説明と一緒に、本明細書に組み込まれ、その一部を形成し、様々な実施形態をさらに示すように機能し、本開示による様々な原則およびすべての利点を説明する。
【0010】
【
図1】実施形態におけるような、ソースデータベースシステムおよびターゲットデータベースシステムの両者と相互作用するCDCシステムを概略的に示す。
【0011】
【
図2】従来の方法によって通常取得されるCDCログを示す図である。
【0012】
【
図3】コヒーレントなCDCログが、実施形態に従ってどのように生成され得るかを示す図である。
【0013】
【
図4A】実施形態におけるような、CDCログのソーティングされたコンパクト化と互換性のあるコヒーレントなCDCログを生成する方法を示す、追加の図である。
【
図4B】実施形態におけるような、CDCログのソーティングされたコンパクト化と互換性のあるコヒーレントなCDCログを生成する方法を示す、追加の図である。
【0014】
【
図5】実施形態による、CDCログ履歴を追跡する方法の高レベルのステップを示すフローチャートである。
【0015】
【
図6】本発明の実施形態に関連するような1または複数の方法のステップを実装するのに適した、汎用コンピュータ制御化されたシステムを概略的に表す図である。
【発明を実施するための形態】
【0016】
添付図面は、実施形態に関連するような、デバイスまたはそれらの一部の簡略化された表現を示す。図における、同様の、または機能的に同様の要素は、そうでないと明示されない限り、同じ参照符号を割り当てられている。発明の実施形態の詳細な説明
【0017】
トピックにおけるメッセージのシーケンスの最初の部分は、完全スナップショットに対応し(「リフレッシュ」または「ロード」と呼ばれることもある操作に対応する)、後続の操作の複製はミラーオペレーションと称される。CDCシステムは、スナップショット操作が完了した後にミラーリングが正しい操作で開始することを保証し、故に、そのような動作を、単一の統合された操作、すなわちスナップショットミラーオペレーションとみなし得る。
【0018】
スナップショットミラーオペレーションがテーブル上で2回目に実行されるとき、次に、書き込まれるトピックは空でなければならない。ミラーオペレーションはスナップショットが完了した後に開始することが保証されるが、複数回リフレッシュされたデータの間のコヒーレンスの保証はない。例えば、行が、2回目ではなく1回目のリフレッシュにおけるテーブルに存在する場合、それは依然としてKafkaトピックにおいて存在し、決して削除されないであろう。
【0019】
故に、得られた任意のターゲットテーブルは、ソーステーブルに関して非コヒーレントであろう。これは、関連性データベースにおけるデータが2つの方法によって、すなわち、操作を実行することによって、または、完全スナップショットを実行することによって、アップデートされ得るという事実の結論である。その一方で、Kafkaトピックなどのトピックは、依然として同様の方式でそのような動作を表すであろう。そのように行うことは、実務のシステムでは通常の慣行であることに留意されたい。例えば、アップグレード、メンテナンスなどのために、データベースは周期的に異なるマシン上にバックアップされ、回復される。上の問題は、したがって、単に理論的な問題ではなく、企業システムが説明すべき問題である。いくつかのデータベースシステム、例えば、Microsoft(登録商標) SQLは、キャプチャモードにあるテーブル上ではスナップショット操作を不可能にし、切り捨て操作などのいくつかの他の操作も同様である。
【0020】
この問題は、簡潔な例によって
図1に示される。スナップショットは、時間t
1において実行されると想定される。結果として、キー1およびキー2に対応する行(行A、行B)が追加される。時刻t
1とt
2の間にミラーリングが生じ、これにより、キー1の行の値が変更され、キー3に対応する新しい行が追加される。次に、時間t
3において新しいスナップショットが生じ、それはソースデータベースにおいて発見された任意のデータを、トピックに入力するようにさせる。この例において、これはキー3およびキー4を有し、すなわち、キー1およびキー2はもはやソース内に存在しない。しかしながら、トピックにおいて発見された値から作成された場合、ターゲットデータベースは、ソースデータベースに関してコヒーレントではないであろう。実際には、キー1およびキー2に対応する行は、システムから決して明示的に削除されなかったため、ログにおいてDELETEオペレーションはない。
【0021】
実質的に、テーブルの各スナップショットはそのテーブルの新しいバージョンを作成し、それはそのテーブルと、その表現から導き出されるターゲットデータベースにおいて作成された任意のテーブルと、の両者の(Kafka)表現に反映されなければならない。
【0022】
当技術分野で知られる1つの解決方法は、古いCDCログを単に削除して、再び開始することである。これは、簡潔という利点を有するが、ログを読み出す任意の下流システムが、
-古いCDCログが削除されたことを認識する、
-任意の下流システム、例えば、データベース、弾性的サーチインデックスを正確にアップデートする、
-新しいCDCログに切り替える、および
-データをすべて再読み出しする、
ことを要する。
【0023】
本発明者は、例えば、ソースおよびターゲットシステムがワイドエリアネットワーク(WAN、すなわち高レイテンシおよび低帯域幅のネットワーク)を介して分けられているとき、または、ターゲットシステムが、新たなデータが読み出られた後で新しいCDCログに切り替えるトランザクションの態様をサポートしない場合、最後の点が特に問題であると気づき、結論づけた。例えば、ソースシステムがオンプレミスシステム上にあるが、ターゲットシステムがパブリッククラウド上にあるとき、WANを介してテーブル全体を転送する必要がある。ここで、テーブルが非常に大きい場合、実際にはしばしばあることだが、これは非常に長くなることがある。
【0024】
記載されるように、当技術分野でしばしば用いられるアプローチは、ターゲットに関する古いCDCログを単に削除し、再び開始するものである。このアプローチは概念的に単純だが、ログを読み出す下流システムは、すべてのデータを再読み出しすることを特に要し、それはいくつかの場合には非常に長くなり得る。本発明は、新しいスナップショットおよび存在するCDCログからコヒーレントなCDCログを作成することによってこの問題を解消する。例えば、新しいスナップショットが、存在するトピック上で実行され、それはすでにミラーモードでありすでにデータを含んでおり、下に詳細に説明されるように、ターゲットにおけるデータを、ソースに関してコヒーレントなままにする。
【0025】
以下の説明は以下のような構造である。まず、一般的な実施形態および高度な変形例が説明される(セクション1)。次のセクションは、より具体的な実施形態および技術的実装の詳細に対処する(セクション2および3)。本方法およびその変形例は、まとめて「本方法」と称されることに留意する。すべての参照Sijは、
図5のフローチャートの方法の段階を指し、参照S
xはキーと値のペアのセットまたはシーケンスに関係し、参照符号はシステム1の物理的な一部または構成要素に関する。1。一般的な実施形態および高度な変形例
【0026】
図1、
図2、
図3および
図5を参照すると、本発明の態様がまず説明され、それはCDCログ履歴を追跡する方法に関係する。この方法は通常、ソースシステム10と相互作用することが許可された、場合によっては、後に説明される実施形態にあるように、ターゲットシステムをアップデートすべくターゲットシステム30とも相互作用することが許可された、CDCシステム20または任意のシステムによって実行され得る。また、このCDCシステムは、ソースシステム10またはターゲットシステム30の一部を形成し得る可能性がある。CDCシステムは、例えば、任意の物理または仮想マシン上で実行され得る。完全性のために、いくつかのターゲットシステムが含まれ得る可能性があるが、簡潔のために、
図1はそのようなターゲットシステム30をただ1つのみ示すことに留意したい。
【0027】
方法によれば、ソースシステム10の第1のスナップショットがステップS10において取得される。キーと値のペアのセットS
1が、
図3を参照して、次に導き出される。セットS
1は、取得された第1のスナップショットを反映する。ソースシステム10のミラーオペレーションが、次にステップS20において実行される。それに応じてCDC変更オペレーションが取得され、そのような動作は、ミラーオペレーションを考慮して、キーと値のペアのセットS
1に関して実行されるような変更を表す。セットS
1と同様に、CDC変更オペレーションがキーと値のペアのセットS
Mとしてキャプチャされる。それに応じて、第1のCDCログは、キーと値のペアの第1のシーケンスS
Aとして取得S30されることができ、キーと値のペアの第1のシーケンスS
Aは、セットS
1とセットS
Mの両方のキーと値のペアを含む。
【0028】
ソースシステム10の第2のスナップショットは、例えばロード操作として、ステップS40において取得される。それに応じて、キーと値のペアのセットS2は、セットS2が第2のスナップショットを反映するように導き出される。
【0029】
キーと値のペアの第1のシーケンスSAは次に、修正CDCオペレーションを導き出すように、キーと値のペアのセットS2と比較S50される。修正CDCオペレーションは、キーと値のペアのセットS3としてキャプチャされる。修正CDCオペレーションは、修正が、キーと値のペアの第1のシーケンスSAに関して実行されることを表す。
【0030】
最後に、第2のCDCログがキーと値のペアの第2のシーケンスSBとして取得S60され、キーと値のペアの第2のシーケンスSBはシーケンスSAとセットS3の双方のキーと値のペアを含む。キーと値のペアの第2のシーケンスSBが、キーと値のペアのセットS2と全体としてコヒーレントであることを保証するような態様で、修正CDCオペレーションが導き出される。
【0031】
上に称されるキーと値のペアの値は任意のデータまたはデータセットを備えてよく、それらは好ましくは構造化されたデータを備えることに留意したい。そのような値は通常、データベース行、すなわち、ソースシステム10の行に対応する。用語「キーと値のペア」は、この文献では広い意味で理解されるべきである。すなわち、それは対応する識別子(キー)を有するデータ(値)の任意の関連づけを指す。必要であれば、本方法はさらに、ソースシステム10において欠けている場合には、固有キーを生成させてよい。このようにして、適切なキーが常に、セットS1、S2、S3、シーケンスSAもしくはシーケンスSBまたはその組み合わせの各キーと値のペアに対して利用可能であることが保証される。このような固有キーは、例えば対応する値のコンテンツをハッシュすることによって、例えば生成され得る。
【0032】
例えば、第1のスナップショットは第1の時間t
1において取得され得、ミラーオペレーションは第1の時間t
1から第2の時間t
2にわたる時間の最中に実行され、
図3で想定されるように、第2の時間t
2は時間t
1の後にくる。第2のスナップショットは通常、t
2の後にくる、第3の時間t
3において取得されるであろう。本手法はまた、第2のスナップショットが、t
2の後にくる必要がなくt
1の後にくる時間t
3において取得される場合にも役に立つことに留意したい。すべての場合において、ターゲットシステム30は最終的には、時間t
3におけるソースシステム10の状態とコヒーレントであるターゲット状態に達し得る。
【0033】
ミラーオペレーションS20の後に、CDCシステムはミラー状態になり、後続のロード操作の準備に入る。しかしながら、後続のロード操作S40は、異なる状態に対応する状態、すなわち、ミラーオペレーションS20の後以降のソースシステムの状態と非コヒーレントな状態を、場合によってはCDCシステム20にロードさせ得る。例えば、ソースシステム10は、その間にバックアップ状態に戻ってしまうことがあり、それは、ミラーオペレーションS20のすぐ後のシステム10の状態と合致しないことがある。
【0034】
しかしながら、キーと値のペアS3としてキャプチャS50された修正的オペレーションのおかげで、キーと値のペアの第2のシーケンスSBは、キーと値のペアS2に対応する第2のスナップショットとコヒーレントである。すなわち、第2のシーケンスは、ターゲットシステム30が第2のスナップショットを反映する状態、すなわち、時間t3におけるソースシステム10の状態に対応する状態に達せさせるように解釈可能である。
【0035】
故に、本方法は、コヒーレントなCDCログSBが、一連の修正CDCオペレーションを生成することによって、新しいスナップショットS2および存在するCDCログS1から作成されることを可能にする。このような修正的オペレーションは、処理の後に、ターゲットシステム30を、新しいスナップショットS2を読み出したのとあたかも同じ状態にあるように導く。さらに、変更された値(例えば、行)に対応するCDCメッセージのみが追加されるので、新しいスナップショットS2と第1のCDCログS1との間の差が小さくなり(実際には最も頻繁なケースである)、コヒーレントなCDCログSBを解釈することによって処理されるべきデータの量は、ターゲットシステム30が従来のアプローチのように新しいスナップショットS2全体を読み出す必要があった場合よりも、ずっと小さくなる(数桁小さくなる可能性がある)。また、ターゲットシステム30は、ターゲットまたはスイッチトピックにおいて、ある特定の動作を取る必要があると認識する必要がない。
【0036】
提案された方法の別の利点は、一貫性のあるCDCログを生成することを依然可能にしながらも、異なるタイプの操作がインタリーブされることを可能にすることである。すなわち、データベーステーブルは、全体として2つの異なる態様で修正されることができる。それ自身知られているように、行操作(例えば、挿入、アップデートなど)と、テーブル操作(例えば、リフレッシュ、切り捨てなど)である。第1のタイプの操作を追跡する従来のCDCログは、データのコヒーレンス度が落ちるので、第2のタイプから行われた変更によって直接組み合わせることが、意味論的にできない。しかしながら、本方法は、一貫性のあるCDCログを依然として生成しながら、上で引き起こされた2つのタイプの操作がインタリーブされることを可能にする。これは、古いCDCログ状態を、好ましくは漸進的に実行されるので本文献では「モーフィング」とも称されるメカニズムである、コヒーレントなCDCログ状態に変更することによって実現される。
【0037】
さらに
図5のフローを参照すると、本方法はさらに、ターゲットシステム30の現在の状態を修正するように、キーと値のペアの第2のシーケンスを(例えば、CDCシステム20またはターゲットシステム30に)解釈S70させ得る。これは、次に、第2のシーケンスS
Bに含まれる修正的オペレーションのために、ターゲットシステム30が、第2のスナップショットが取得された時間において(すなわち、それ以降の)、ソースシステム10の状態とコヒーレントなターゲット状態に達することを可能にする。
【0038】
好ましくは、キーと値のペアの第2のシーケンスS
Bは、順序付けられたシーケンスとして取得S60され、キーと値のペアのセットS
1はキーと値のペアのセットS
Mに先行し、キーと値のペアのセットS
M自体は
図3に示されるように、キーと値のペアのセットS
3に先行する。同様に、キーと値のペアの第1のシーケンスS
Aは、第1のCDCログを形式S30するときに、順序付けられたシーケンスとして取得され得る。順序付けられたシーケンスは、比較が線形時間において実行されることを可能にする。
【0039】
実施形態において、修正CDCオペレーションは漸進的に取得S50され、すなわち、各操作は一度に1つの変更を反映する。故に、第2のCDCログは、DELETEオペレーション、INSERTオペレーション、およびUPDATEオペレーションのそれぞれ(または、いくつか)のうちの1または複数を、場合によっては含み得る。それらの操作のそれぞれは、キーと値のペアとしてキャプチャされる。実際には、しかしながら、上記修正CDCオペレーションは、複数のDELETE、INSERT、およびUPDATEオペレーションを通常は備えるであろう。
【0040】
記載されたように、上を引き起こすキーと値のペアのすべての値は、通常はソースシステム10のデータベース行に対応する。したがって、実施形態において、第1のCDCログにインデックスされた所与のデータベース行が、第2のスナップショットに反映されない場合、段階S50において(すなわち、第1のシーケンスSAとセットS2との間で)実行される比較は、所与のデータベース行に関するDELETEオペレーションとして修正CDCオペレーションを導き出させ得る。同様に、第1のCDCログにインデックスされた所与のデータベース行が第2のスナップショットにおいて反映されるが、その行の非キーフィールドが変わる場合、次に、比較S50は、この非キーフィールドをアップデートするように、対応するUPDATEオペレーションとして修正CDCオペレーションを導き出させ得る。また、(第2のスナップショットにおいて反映されたとして)所与のデータベース行が第1のCDCログにおいてインデックスされない場合にも、次に、比較S50は、その所与の行に関するINSERTオペレーションとして前記修正CDCオペレーションの1つを導き出させ得る。しかしながら、所与のデータベース行(第1のCDCログにおいてインデックスされた)が第2のスナップショットにおいて同一に反映される場合、次に、比較S50はその行に関していかなる修正CDCオペレーションも生成しない。
【0041】
任意の適切なアルゴリズムが、修正CDCオペレーションを導き出すS50と予期され得る。さらに、このアルゴリズムは、好ましくは、第1のシーケンスSAとセットS2の間の類似性の範囲に基づいて選択される。故に、実施形態において、修正CDCオペレーションを導き出す最も適切なアルゴリズムを選択するように、段階S50はさらに、SAとS2の間の類似性の程度を評価することを備える。
【0042】
興味深いことに、本手法は、セクション2において詳細に述べられた、CDCログのソーティングされたコンパクト化と互換性がある。加えて、本手法は依然として、異なる区画にデータを分割するよう構成されたCDCシステムによって実行され得る。その場合には、データベース行は、CDCシステムの前記異なる区画に従って、および、キーと値のペアに基づいてマッピングされる必要がある。
【0043】
次に、別の態様によれば、本発明はコンピュータプログラム製品として具現され得る。コンピュータプログラム製品は、それによって具現されるプログラム命令を有するコンピュータ可読記憶媒体を備える。このようなプログラム命令は、例えば、CDCシステム20の処理手段105によって、例えば実行され得る。それらは、変形例において、適切に接続された1または複数の物理マシン上で、または、例えば、必要であればクラウド環境にある仮想マシンによって、実行され得る。すべての場合において、このような命令は、処理手段に、上で説明されたものなどのステップを実行させる。コンピュータプログラム製品およびコンピュータ制御化されたシステムに関する追加の考察が、セクション3において提供される。
【0044】
上記実施形態は、添付図面を参照して簡潔に説明され、複数の変形例に対応し得る。上の特徴のいくつかの組み合わせが予期され得る。例が次のセクション2において与えられる。
具体的な実施形態
【0045】
このセクションは、処理の後に、ターゲットシステムを、新しいスナップショット全体を読み出したのとあたかも同じ状態にあるように導く、合成的な一連のCDC変更を生成することによって、新しいスナップショットおよび存在するCDCログに基づいて、コヒーレントなCDCログが作成されることを可能にする実施形態を説明する。
【0046】
このような実施形態は本質的に、変更された行に対応するCDCメッセージのみを追加することを伴う。故に、新しいスナップショットとCDCログとの間の差が小さいため、下流システムによって読み出されることを要するデータが小さい量のみとなり、ターゲットシステムが、ターゲットまたはスイッチトピックにおいて、ある特定の動作を取らなければならないと認識する必要がないことを可能にする。
【0047】
一般性が失われることなく、テーブルの各行(したがって、トピックの各メッセージ)が、固有キーによって識別され得ると想定し得る。前のセクションにおいて記載されるように、そのようなキーが存在しない場合、次に、例えば、行のコンテンツをハッシュすることによって、それをオンザフライで作成することができる。
【0048】
現実化され得るものとして、CDCログの、新しいスナップショットとの比較S50は、実際には、以下の場合のうち1つに至る。
行が、古いCDCログには存在するが、新しいスナップショットには存在しない。
行が、両者に存在し、同じものである。
行が、両者に存在するが、非キーフィールドがスナップショットにおいて変わっている。
行は、スナップショットにおいてのみ存在する。
【0049】
第1の場合において、合成的なDELETEメッセージが、その行に関するCDCログを作成し得る。第2の場合は、行がすでにCDCログに存在するので、いかなる動作も必要としない。第3の場合において、合成的なUPDATEメッセージが、CDCログにおいて作成され得る。第4の場合において、合成的なINSERTメッセージが、CDCログにおいて作成され得る。
【0050】
これは、実質的に、スナップショットを、ある数の操作に減少させる。すべての必要なオペレーションが、CDCログすべての必要なオペレーションに追加される。後者は、ターゲットシステムがスナップショット単独のみを読み出した場合、ターゲットシステムにおいて生成されたであろうものと同じ最終状態を生成する。
【0051】
CDCシステムは、例えば、CDCログにおけるキー順序で行を格納し得る。同様に、スナップショットは、キー順序で行によって作成され得る。これは、次に、CDCログおよびスナップショットの第1の部分が、線形時間と比較されることを可能にする。CDCログのミラー部分は、独立して処理され得る。
【0052】
Kafkaのようなシステムにおいて、データは複数の異なる区画にわたって分割される。この場合、特定の行に関係する操作は、常に同じ区画に格納される。これは、行を、キー値に基づいて区画にマッピングすることによって実現され得る。有利には、そのような解決方法は、スケーラビリティを保証するように、区画ごとの方式で並行化され得る。
【0053】
好ましくは、方法は、例えばアルゴリズム1および2において定義されるものの間で最も適切なアルゴリズムを選択するように、スナップショットと存在するCDCログとの間の類似性の程度を認識する。これは特に、ここでは「mirrorSet」と呼ばれる所与の構造においてミラーリング相の最中に追加される行のキーを保持し、次に、最も適切なアルゴリズムを選択するように、これと古いCDCログの長さとの率を使用することによって、行い得る。例えば、この率が小さく、キー順序で初期スナップショットを書き込む処理が取られるとき、合成操作の計算は、線形時間で計算されることが可能である。
【0054】
特に好まれる実施形態が、下の(疑似コード)アルゴリズム1に反映される。
アルゴリズム1。
所与のスナップショットに合致するように、存在するCDCログをモーフィングする。
function:MorphCDCLog(log,refreshSize、snapshot,mirrorKeys)
//ログをスナップショットと合致させるようにログをアペンドする
snapshotIndex←0
logIndex←0
toBeKept←emptySet
initialLogLength←log.length
while logIndex<refreshSize do
if(snapshotIndex=snapshot.length)then
break
end if
snapShotRecord←snapshot[snapshotIndex]
logRecord←log[logIndex]
if(snapShotRecord.key>logRecord.key)then
//logRecordはもはや存在しない。
log.append(DELETE(logRecord.key))
logIndex++
else
if(snapShotRecord=logRecord)then
//ミラーセットにない場合を無視
if(mirrorKeys.contains(snapShotRecord.key))then
log.append(Record(UPSERT,snapShotRecord))
toBeKept.add(snapShotRecord.key)
end if
else
//新しいスナップショット記録を追加。
log.append(Record(UPSERT,snapShotRecord))
toBeKept.add(snapShotRecord.key)
end if
snapshotIndex++
if(snapShotRecord.key=logRecord.key)then
logIndex++
end if
end if
end while
//アップデートを排除したログの残りを削除。
while(logIndex<initialLogLength)do
logRecord←log[logIndex++]
if!toBeKept.contains(logRecord.key)then
log.append(DELETE(logRecord.key))
end if
end while
//スナップショットに残るものを追加
while(snapshotIndex<snapshot.size)do
snapShotRecord←snapshot[snapshotIndex++]
log.append(snapShotRecord)
end while
end function
【0055】
追加の技術的詳細が記載され得る。mirrorSetが古いCDCログと比較して大きい場合、上のアルゴリズム1においてキャプチャされた実施形態のアルゴリズムは、非効率となる可能性がある。
【0056】
なぜなら、ログのスナップショット部分がソーティングされる間、ミラー部分はそうではないからである。その関係で、現在のログシステムは、新しいスナップショット部分が作成されるように、スナップショット部分およびミラー部分をコンパクトにする「コンパクト化」と呼ばれる方法が備えられている。コンパクト化と互換性がありながら、ソーティングされたスナップショットを可能にする方法(以後は、ソーティングされたコンパクト化方法)が、下のアルゴリズム2において説明される。
【0057】
コンパクト化の最中に、トピックの消費者は、コンパクト化のためにマークされたコンパクト化されたログまたはmirrorSetを読み出すことができない。アルゴリズムが新たなデータに関するオフセットを変更しない限り、新たな記録は依然としてトピックに追加され、そこから読み出される。
図4Aは、ソーティングされたコンパクト化方法のフローを説明し、
図4Bは、トピックの一例を示す。
図4Aの最後のコンパクト化ポイントは、ログがソーティングおよびコンパクト化されたポイントまでのログのオフセットを説明する。ミラーセットは、ソーティングされない複製キーエントリを含み得る。ソーティングされたコンパクト化の目的は、現在のソーティングされたコンパクト化されたログ(スナップショット)およびミラーセット(新しいアップデート)を、新しくソーティングされたコンパクト化されたログへとコンパクト化することである。これを行うべく、方法はまず、ミラーセットをソーティングし、重複解除する。重複は、同じキーによる複数の記録に関して、最も高いオフセットを有するものが取られるという態様で処理される。ソーティングおよび複製の後、ミラーセットは基本的に、オリジナルのスナップショットでマージされ得る別のソーティングされたコンパクト化されたログとなり、同じマージ法則は、2つの同じキーに関してより高いオフセットを有するものが取られることが適用され、それは常に、最後に加えられたもののようなミラーセットの値である。これは、マージソートアルゴリズムのマージ相と同様のである。アルゴリズム2において示されたアルゴリズムがスナップショットを実行し、ミラー定義が変更された後、新しいスナップショットは新しくソーティングされたコンパクト化されたログとなり、ミラーセットは、アルゴリズムが開始した後に追加された新しい変更となる。ソートコンパクト化のための複雑性は、mirrorSetをソーティングするためのO(m log m)と、それをcompactedLogとマージするためのO(m+n)である。
アルゴリズム2。
新しい、コンパクト化され、ソーティングされたCDCログを計算する。
function SORTEDCOMPACTION(compactedLog,mirrorSet)
//すでにコンパクト化されたログおよびmirrorSetから、新しい、ソーティングされ、コンパクト化されたCDCログを作成する
newLog←emptyFile
//mirrorSetをソーティングおよび重複解除する。重複解除はキーの最後の値をとる
sortedMirrorSet←deduplicate(sort(mirrorSet))
logIndex←0
mirrorIndex←0
cLength←compactedLog:length
while logIndex<cLength do
logKey←compactedLog[logIndex].key
if mirrorIndex>=sortedMirrorSet.size then
newLog.append(compactedLog[logIndex])
logIndex++
continue
end if
mirrorKey←sortedMirrorSet[mirrorIndex].key
if logKey<mirrorKey then
newLog.append(compactedLog[logIndex])
else
if sortedMirrorSet[mirrorIndex].value!=null then
newLog.append(sortedMirrorSet[mirrorIndex]))
else
//何もしない。
Compact out delete
end if
mirrorIndex++
if logkey>mirrorKey then
continue
end if
end if
logIndex++
end while
//mirrorSetからの記録の残りをnewLogに加える
while mirrorIndex++<sortedMirrorSet.length do
newLog.append(sortedMirrorSet[mirrorIndex]))
end while
end function
3.技術的実装の詳細
3.1 コンピュータ制御化されたシステムおよびデバイス
【0058】
コンピュータ制御化されたシステムおよびデバイスは、本明細書で説明されるような本発明の実施形態を実装するように適切に設計され得る。それに関して、本明細書で説明された方法は、大変に非相互作用的であり、自動的である。例示的な実施形態において、本明細書で説明された方法は、相互作用的な、部分的に相互作用的な、または非相互作用的なシステムのいずれかにおいて実装されてよい。本明細書で説明された方法は、ソフトウェア、ハードウェア、またはそれらの組み合わせとして実装されてよい。例示的な実施形態において、本明細書で説明された方法は、実行可能プログラムとして、ソフトウェアにおいて実装されてもよく、後者は好適なデジタル処理デバイスによって実行される。より一般的には、本発明の実施形態は、パーソナルコンピュータ、ワークステーションなどのような仮想マシンもしくは汎用デジタルコンピュータまたはその組み合わせを使用して実装されてもよい。
【0059】
例えば、
図6はコンピュータ制御化ユニット101(例えば、汎用または特定目的コンピュータ)を概略的に表し、それは、本方法に係るステップを実行することが可能であるように、他同様のユニットと、場合によっては相互作用し得る。
【0060】
例示的な実施形態において、ハードウェアアーキテクチャに関して、
図6に示されるように、各ユニット101は少なくとも1つのプロセッサ105と、メモリコントローラ115に結合されたメモリ110とを含む。いくつかのプロセッサ(CPUもしくはGPUまたはその組み合わせ)が、場合によっては各ユニット101に含まれ得る。この目的のために、各CPU/GPUは、それ自身知られるように、それぞれのメモリコントローラに割り当てられ得る。
【0061】
1または複数の入力もしくは出力またはその組み合わせ(I/O)デバイス145、150、155(または周辺機器)は、ローカル入出力コントローラ135を介して通信可能に結合される。入出力コントローラ135は、当技術分野で知られるように、1または複数のバスまたはシステムバス140と結合されるか、それを含み得る。入出力コントローラ135は、通信を可能にするコントローラ、バッファ(キャッシュ)、ドライバ、リピータ、および受信機などの追加要素を有し得、それらは簡潔のために省略される。さらに、ローカルインタフェースは、上記コンポーネントの間での適切な通信を可能にする、アドレス、制御、もしくはデータ接続、またはその組み合わせを含み得る。
【0062】
プロセッサ105は、ソフトウェア命令を実行するためのハードウェアデバイスである。プロセッサ105は、任意のカスタムメイドの、または商業的に利用可能なプロセッサであり得る。概して、それらは、任意のタイプの半導体ベースのマイクロプロセッサ(マイクロチップまたはチップセットの形式)、または、ソフトウェア命令を実行するための概して任意のデバイスを伴い得る。
【0063】
メモリ110は通常、揮発性メモリ素子(例えば、ランダムアクセスメモリ)を含み、さらに不揮発性メモリ素子を含み得る。また、メモリ110は、電子、磁気、光、もしくは他のタイプのストレージ媒体、またはその組み合わせを組み込み得る。追加のストレージは、ストレージ120を介して提供され得る。
【0064】
メモリ110におけるソフトウェアは、1または複数の個別のプログラムを含み得、そのそれぞれは、論理的機能を実装するための実行可能な命令を含む。
図6の例において、メモリ110にロードされた命令は、例示的な実施形態による本明細書で説明されたコンピュータ制御化された方法の実行から生じる命令を含み得る。メモリ110はさら、適切なオペレーティングシステム(OS)111をロードする。OS111は、他のコンピュータプログラムまたは命令の実行を本質的に制御し、スケジューリング、入力-出力制御、ファイルおよびデータ管理、メモリ管理、および通信制御および関連するサービスを提供し得る。
【0065】
場合によっては、従来のキーボードおよびマウスが、入出力コントローラ135に結合され得る。他のI/Oデバイス140-155が含まれ得る。コンピュータ制御化ユニット101はさらに、ディスプレイ130に結合されるディスプレイコントローラ125を含み得る。任意のコンピュータ制御化ユニット101は、ネットワークに連結し、次に、他の外部コンポーネント、例えば他のユニット101と/からのデータ通信を可能にするように、ネットワークインタフェースまたはトランシーバ160を通常含むであろう。
【0066】
ネットワークは、所与のユニット101と他のデバイス101の間でデータを送信および受信する。ネットワークは、場合によっては、例えば、Wifi、WiMaxなどのような、無線プロトコルおよびテクノロジを使用した、無線様式で実装され得る。ネットワークは特に、固定された無線ネットワーク、無線ローカルエリアネットワーク(LAN)、無線ワイドエリアネットワーク(WAN)、パーソナルエリアネットワーク(PAN)、バーチャルプライベートネットワーク(VPN)、インターネット、または他の適切なネットワークシステムであり得、信号を受信および送信する機器を含む。好ましくは、しかしながら、このネットワークはユニット間で非常に高速のメッセージ送信を許容すべきである。
【0067】
ネットワークはまた、所与のユニット101と任意の外部ユニットの間をブロードバンド接続を介して通信するための、IPベースネットワークでもあり得る。例示的な実施形態において、ネットワークは、サービスプロバイダによって運営される、管理されたIPネットワークであってもよい。また、ネットワークは、LAN、WAN、インターネットネットワーク、インターネットオブシングスネットワークなどのようなパケット交換ネットワークであり得る。3.2 コンピュータプログラム製品
【0068】
本発明は、方法もしくはコンピュータプログラム製品またはその組み合わせであってよい。コンピュータプログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体(または複数の媒体)を含み得る。
【0069】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持および格納できる有形のデバイスであり得る。コンピュータ可読記憶媒体は、例えばであって、限定されるものではないが、電子ストレージデバイス、磁気ストレージデバイス、光学ストレージデバイス、電磁ストレージデバイス、半導体ストレージデバイスまたは上述のものの任意の好適な組み合わせであり得る。コンピュータ可読記憶媒体のより具体的な例の網羅的な列挙は、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、消去可能プログラマブルリードオンリメモリ(EPROMまたはフラッシュメモリ)、スタティックランダムアクセスメモリ(SRAM)ポータブルコンパクトディスクリードオンリメモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピーディスク、パンチカードまたはそこに記録された命令を有する溝内の隆起構造などの機械的に暗号化されたデバイス、および、上述のものの任意の好適な組み合わせを含む。本明細書で使用されるコンピュータ可読記憶媒体は、無線波または他の自由に伝搬される電磁波、導波路または他の送信媒体(例えば、ファイバ光ケーブルを通して通過する光パルス)を通して伝搬される電磁波または配線を通して送信される電気信号などの、一時的信号それ自身として解釈されないものとする。
【0070】
本明細書において説明されるコンピュータ可読プログラム命令は、例えばインターネット、ローカルエリアネットワーク、ワイドエリアネットワークもしくは無線ネットワークまたはその組み合わせなどのネットワークを介して、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスへダウンロードされ得るか、または、外部コンピュータもしくは外部ストレージデバイスへダウンロードされ得る。当該ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータもしくはエッジサーバまたはその組み合わせを備え得る。各コンピューティング/処理デバイスにおけるネットワークアダプタカードまたはネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に格納するためのコンピュータ可読プログラム命令を転送する。
【0071】
本発明の操作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、または、1または複数のプログラミング言語の任意の組み合わせで書かれたソースコード若しくはオブジェクトコードのいずれかであってよい。1または複数のプログラミング言語は、Smalltalk(登録商標)、C++などのようなオブジェクト指向プログラミング言語と、「C」プログラミング言語または同様のプログラミング言語などのような手順型プログラミング言語とを含む。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体として実行され得るか、スタンドアロンのソフトウェアパッケージとして部分的にユーザのコンピュータ上で実行され得るか、部分的にユーザのコンピュータ上で、かつ、部分的にリモートコンピュータ上で実行され得るか、または、リモートコンピュータもしくはサーバ上で全体として実行され得る。後者のシナリオにおいて、リモートコンピュータは、ローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続されてもよく、接続は、外部コンピュータ(例えば、インターネットサービスプロバイダを使用するインターネットを通じて)行われてもよい。いくつかの実施形態において、例えばプログラマブルロジック回路、フィールドプログラマブルゲートアレイ(FPGA)、またはプログラマブルロジックアレイ(PLA)を含む電子回路が、本発明の態様を実行するべく、コンピュータ可読プログラム命令の状態情報を利用して電子回路を個人設定することにより、コンピュータ可読プログラム命令を実行してよい。
【0072】
本発明の態様は、発明の実施形態による方法、システムおよびコンピュータプログラム製品の、フローチャート図もしくはブロック図またはその組み合わせを参照して本明細書に説明される。フローチャート図若しくはブロック図又はその両方の各ブロック、および、フローチャート図若しくはブロック図又はその両方におけるブロックの組み合わせは、コンピュータ可読プログラム命令により実装され得ることを理解されたい。
【0073】
これらのコンピュータ可読プログラム命令は、コンピュータのプロセッサまたは他のプログラマブルデータ処理装置を介して実行する命令が、フローチャートもしくはブロック図のブロックまたは複数のブロックまたはその組み合わせにおいて特定される機能/動作を実装する手段を生成するように、汎用コンピュータ、特定用途コンピュータ、またはマシンを生じさせる他のプログラマブルデータ処理装置のプロセッサに提供され得る。また、これらのコンピュータ可読プログラム命令は、格納された命令を有するコンピュータ可読記憶媒体が、フローチャートもしくは図のブロックまたは複数のブロックまたはその組み合わせにおいて特定される機能/動作の態様を実装する命令を含む製品を備えるように、コンピュータ、プログラム可能なデータ処理装置、もしくは他のデバイスまたはその組み合わせが特定の方法で機能するように指示し得るコンピュータ可読記憶媒体に格納されてもよい。
【0074】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラマブルデータ処理装置または他のデバイスにロードされてもよく、一連の動作ステップをコンピュータ、他のプログラマブル装置または他のデバイス上で実行を生じさせて、コンピュータ実装処理を生成する。それにより、コンピュータ、他のプログラマブル装置または他のデバイス上で実行される命令は、フローチャートもしくはブロック図のブロック若しくはブロック内またはその組み合わせで特定された機能/動作を実装する。
【0075】
図面内のフローチャート及びブロック図は、本発明の様々な実施形態に係る、システム、方法、及び、コンピュータプログラム製品のあり得る実装のアーキテクチャ、機能、及び、操作を示す。これに関して、フローチャートまたはブロック図における各ブロックは、特定される(1または複数の)論理機能を実装するための1または複数の実行可能命令を含む命令のモジュール、セグメント、または部分を表す場合がある。いくつかの代替的な実装において、ブロックに記載された機能は、図に記載された順序から外れて生じてもよい。例えば、連続的に示される2つのブロックは、実際には、実質的に並行して実行されてよく、あるいは、これらブロックは、含まれる機能性に依存して、逆順序で実行されることもあってよい。また、ブロック図もしくはフローチャート図またはその組み合わせの各ブロック、ならびにブロック図もしくはフローチャート図またはその組み合わせにおけるブロックの組み合わせは、特定される機能もしくは行為を実行するまたは専用ハードウェアとコンピュータ命令との組み合わせを実行する専用ハードウェアベースのシステムによって実装され得ることに留意されたい。
3.3 クラウド
【0076】
本方法によって実行されるコンピュータ制御化は、場合によってはクラウドサービスとして提供されることがある。しかしながら、本明細書に記載される教示の実装は、クラウドコンピューティング環境に限定されるものではないことが、理解されるべきである。むしろ、本発明の実施形態は、現在知られるか後に開発される任意の他のタイプのコンピューティング環境と結合して実装されることが可能である。クラウドコンピューティングは、最小限の管理取り組みまたはサービスプロバイダとのやり取りで、迅速にプロビジョニングおよびリリース可能な構成可能なコンピューティングリソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシンおよびサービス)の共有プールへの便利なオンデマンドネットワークアクセスを可能にするサービス供給のモデルである。
【0077】
本発明は限られた数の実施形態、変形例、および添付図面を参照して説明されてきたが、本発明の範囲から逸脱することなく、様々な変更が行われ得、同等物が代替され得ることが、当業者には理解されるであろう。特に、所与の実施形態、変形例において記載されるか、図面において示される特徴(デバイスのような、または方法のような)は、本発明の範囲から逸脱することなく、別の実施形態、変形例、または図面における別の特徴と組み合わされるか、または置き換わり得る。それに応じて、上記実施形態または変形例の任意のものに関して説明された特徴の様々な組み合わせが予期され、それは添付の特許請求の範囲内にとどまる。また、本発明の範囲から逸脱することなく特定の状況または材料を本発明の複数の教示に適合させるべく、多数の軽微な変更が行われ得る。したがって、本発明は開示された複数の特定の実施形態に限定はされないが、本発明が添付の特許請求の範囲内に含まれるすべての実施形態を含むことが意図される。また、上記で明示的に触れたもの以外に多くの他の変形例が予期され得る。
[項目1]
変更データキャプチャログ履歴、またはCDCログ履歴を追跡する方法であって、
ソースシステムの第1のスナップショットを取得し、前記第1のスナップショットを反映するキーと値のペアのセットS
1
を導き出す段階と、
前記ソースシステムのミラーオペレーションを実行し、それに応じて、キーと値のペアのセットS
1
に関して実行される変更を表すCDC変更オペレーションを取得し、前記CDC変更オペレーションはキーと値のペアのセットS
M
としてキャプチャされる、段階と、
第1のCDCログを、前記セットS
1
および前記セットS
M
の前記キーと値のペアを含むキーと値のペアの第1のシーケンスS
A
として取得する段階と、
前記ソースシステムの第2のスナップショットを取得し、前記第2のスナップショットを反映するキーと値のペアのセットS
2
を導き出す段階と、
キーと値のペアの第1のシーケンスS
A
をキーと値のペアのセットS
2
と比較し、キーと値のペアのセットS
3
として修正CDCオペレーションを導き出し、前記修正CDCオペレーションは、キーと値のペアの前記第1のシーケンスS
A
に関して実行される修正を表す段階と、
前記第1のシーケンスS
A
および前記セットS
3
の前記キーと値のペアを含むキーと値のペアの第2のシーケンスS
B
として第2のCDCログを取得する段階であって、前記修正CDCオペレーションが、キーと値のペアの前記第2のシーケンスS
B
が全体として、キーと値のペアの前記セットS
2
とコヒーレントであることを保証する、段階と、
を含む、方法。
[項目2]
前記方法はさらに、ターゲットシステムの現在の状態が、第2のスナップショットが取得される時刻におけるソースシステムの状態とコヒーレントなターゲット状態に達するように、ターゲットシステムの現在の状態を修正するようにキーと値のペアの第2のシーケンスを解釈することを備える、
項目1に記載の方法。
[項目3]
キーと値のペアの前記第2のシーケンスS
B
は、順序付けられたシーケンスとして取得され、これにより、前記キーと値のペアの前記セットS
1
は前記キーと値のペアの前記セットS
M
に先行し、前記キーと値のペアの前記セットS
M
自体は前記キーと値のペアの前記セットS
3
に先行する、
項目1または2に記載の方法。
[項目4]
前記修正CDCオペレーションは、それぞれがキーと値のペアとしてキャプチャされる、1または複数のDELETEオペレーションを含む、
項目1から3のいずれか一項に記載の方法。
[項目5]
前記修正CDCオペレーションは、それぞれがキーと値のペアとしてキャプチャされる、1または複数のINSERTオペレーションを含む、
項目1から4のいずれか一項に記載の方法。
[項目6]
前記修正CDCオペレーションは、それぞれがキーと値のペアとしてキャプチャされる、1または複数のUPDATEオペレーションを含む、
項目1から5のいずれか一項に記載の方法。
[項目7]
前記修正CDCオペレーションは、それぞれがキーと値のペアとしてキャプチャされる以下の動作、すなわち、DELETEオペレーション、INSERTオペレーション、およびUPDATEオペレーションのそれぞれの少なくとも1つを含む、
項目1から6のいずれか一項に記載の方法。
[項目8]
前記キーと値のペアのすべての値が、前記ソースシステムのデータベース行に対応する、
項目1から7のいずれか一項に記載の方法。
[項目9]
前記第1のCDCログにインデックスされた所与のデータベース行が、第2のスナップショットに反映されず、これにより、前記第1のシーケンスS
A
と前記セットS
2
との比較は、前記所与のデータベース行に関するDELETEオペレーションとして前記修正CDCオペレーションの1つを導き出させる、
項目8に記載の方法。
[項目10]
前記第1のCDCログにインデックスされた所与のデータベース行が前記第2のスナップショットに反映され、非キーフィールドが変わるにもかかわらず、これにより、前記第1のシーケンスS
A
と前記セットS
2
との比較は、その非キーフィールドに関する対応するUPDATEオペレーションとして前記修正CDCオペレーションの1つを導き出させる、
項目8または9に記載の方法。
[項目11]
前記第2のスナップショットにおいて反映される所与のデータベース行が前記第1のCDCログにおいてインデックスされず、これにより、前記第1のシーケンスS
A
と前記セットS
2
との比較は、その所与の行に関する対応するINSERTオペレーションとして前記修正CDCオペレーションの1つを導き出させる、
項目8から10のいずれか一項に記載の方法。
[項目12]
前記第1のCDCログにインデックスされた所与のデータベース行が前記第2のスナップショットにおいて同一に反映され、これにより、前記第1のシーケンスS
A
と前記セットS
2
との比較は、所与の行に関する修正CDCオペレーションを全く導き出させない、
項目8から11のいずれか一項に記載の方法。
[項目13]
前記方法は、前記第1のCDCログのソーティングされたコンパクト化を取得する段階をさらに備える、
項目1から12のいずれか一項に記載の方法。
[項目14]
前記方法は、データを異なる区画に分割するよう構成されるCDCシステムによって実行される、
項目1から13のいずれか一項に記載の方法。
[項目15]
前記方法は、前記キーと値のペアに基づいて、前記CDCシステムの前記異なる区画に従って前記データベース行をマッピングする段階をさらに備える、
項目8から12のいずれか一項に従属する項目14に記載の方法。
[項目16]
前記第1のシーケンスS
A
と前記セットS
2
との比較は、前記第1のシーケンスS
A
と前記セットS
2
との間の類似性の程度を評価することをさらに含み、これにより、前記修正CDCオペレーションが、評価された類似性の程度に従って選択されたアルゴリズムに基づいて導き出される、
項目1から15のいずれか一項に記載の方法。
[項目17]
前記方法は、固有キーがソースシステムにおいて欠けている場合には、前記セットS
1
、前記セットS
2
、前記セットS
M
、前記第1のシーケンスS
A
、前記セットS
3
、および前記第2のシーケンスS
B
のうち1または複数のキーと値のペアの1または複数のそれぞれに関するこの固有キーを生成する段階をさらに備える、
項目1から16のいずれか一項に記載の方法。
[項目18]
変更データキャプチャログ履歴、またはCDCログ履歴を追跡するコンピュータプログラムであって、
それに具現されるプログラム命令を備え、前記プログラム命令は、処理手段に、
ソースシステムの第1のスナップショットを取得し、前記第1のスナップショットを反映するキーと値のペアのセットS
1
を導き出す手順と、
前記ソースシステムのミラーオペレーションを実行し、それに応じて、キーと値のペアのセットS
1
に関して実行される変更を表すCDC変更オペレーションを取得し、前記CDC変更オペレーションはキーと値のペアのセットS
M
としてキャプチャされる、手順と、
第1のCDCログを、前記セットS
1
および前記セットS
M
の前記キーと値のペアを含むキーと値のペアの第1のシーケンスS
A
として取得する手順と、
前記ソースシステムの第2のスナップショットを取得し、前記第2のスナップショットを反映するキーと値のペアのセットS
2
を導き出す手順と、
キーと値のペアの第1のシーケンスS
A
をキーと値のペアのセットS
2
と比較し、キーと値のペアのセットS
3
として修正CDCオペレーションを導き出し、前記修正CDCオペレーションは、キーと値のペアの前記第1のシーケンスS
A
に関して実行される修正を表す手順と、
前記第1のシーケンスS
A
および前記セットS
3
の前記キーと値のペアを含むキーと値のペアの第2のシーケンスS
B
として第2のCDCログを取得する手順であって、前記修正CDCオペレーションが、キーと値のペアの前記第2のシーケンスS
B
が全体として、キーと値のペアの前記セットS
2
とコヒーレントであることを保証する、手順と、
をさせるように、前記処理手段によって実行可能である、コンピュータプログラム。
[項目19]
前記プログラム命令は、前記処理手段に、キーと値のペアの前記第2のシーケンスを解釈させる手順と、ターゲットシステムを、前記第2のスナップショットを反映する状態に達せさせる手順とをさらに行うように、前記処理手段によってさらに実行可能である、
項目18に記載のコンピュータプログラム。
[項目20]
前記プログラム命令は、前記処理手段に、順序付けられたシーケンスとしてキーと値のペアの前記第2のシーケンスS
B
を取得させる手順であって、これにより、前記キーと値のペアの前記セットS
1
が前記キーと値のペアの前記セットS
M
に先行し、前記キーと値のペアの前記セットS
M
自体が前記キーと値のペアの前記セットS
3
に先行する手順をさらに行うように、前記処理手段によってさらに実行可能である、
項目18または19に記載のコンピュータプログラム。