(57)【特許請求の範囲】
【請求項１】
分散記憶環境でデータを遠隔地間で同期複製(synchronously geo-replicating)するための、
プロセッサーおよびメモリーを利用する、前記分散記憶環境におけるコンピューター実施方法(computer-implemented method)であって、
クライアント(1002)からデータを一次データ記憶装置(1004)で受け取るステップ(1008)と、
前記データを前記一次データ記憶装置のログに書き込むステップであって、
前記一次データ記憶装置におけるデータが、当該データが、前記一次データ記憶装置の（i）１つ又は複数のログ、(ii)メモリテーブル、の双方、又は、一方に、コミットされるまで、前記クライアントからアクセス可能でないものと、
前記ログに書き込まれた前記データに記録を使用して注釈を付ける(annotating)ステップであって、前記記録は、二次データ記憶装置(secondary data store)(1006)での前記データの再生を可能にする、ステップであって、前記記録が固有の識別子を含むものと、
前記データが前記二次データ記憶装置でログに書き込まれたという肯定応答(acknowledgement)(1016)を前記二次データ記憶装置から受け取るステップと、
前記二次データ記憶装置から前記肯定応答を受け取ると、前記データを前記一次データ記憶装置にコミットする(committing)(1020)ステップと、
前記一次データ記憶装置における前記データのコミットメントの肯定応答(1032)を前記クライアントに送るステップと、
前記一次データ記憶装置から前記二次データ記憶装置へコミットＩＤ(500)を送るステップであって、当該コミットＩＤが、複製中に、データの順次コミットを確実にするために利用される識別子であるものと、
を含む方法。
【請求項２】
前記データを前記一次データ記憶装置の前記ログに書き込むステップが、前記データを二次側に送るステップと同時に(in parallel with)生じ、前記一次データ記憶装置からの前記データのアクセスを前記クライアントに許容しない、請求項１に記載の方法。
【請求項３】
前記データが前記二次データ記憶装置で前記ログに書き込まれたという肯定応答を受け取った後にのみ、前記データが前記一次データ記憶装置でコミットされる、請求項１に記載の方法。
【請求項４】
前記コミットＩＤが、前記二次データ記憶装置から受け取った最大連続メッセージＩＤのためのエポック番号（epoch ＃）およびシーケンス番号(sequence ＃)からなる、請求項１に記載の方法。
【請求項５】
前記コミットＩＤが、前記二次データ記憶装置の前記ログに同じく(also)書き込まれた、前記一次データ記憶装置でコミットされる最大連続(consecutive)メッセージＩＤを識別する(identifies)、請求項１に記載の方法。
【請求項６】
プロセッサーおよびメモリーを有する計算システムによって実行されると、前記計算システムに、分散記憶環境におけるデータの遠隔地間での同期複製のための手段を実装させるコンピューター実行可能命令が実装された１つまたは複数のコンピューター記憶媒体であって、
前記手段が、
クライアント(1002)からデータを一次データ記憶装置(1004)で受け取る手段と、
前記一次(primary)データ記憶装置で、前記データに関連する(associated with)オブジェクトをロックする手段(1010)であって、当該オブジェクトをロックすることが、前記クライアントが、当該オブジェクトにアクセスすることを防ぐことを含むものと、
前記データを記録(record)と共に前記一次データ記憶装置から二次(secondary)データ記憶装置(1006)に送る手段と、
前記データが前記二次データ記憶装置でログに書き込まれたという第１の肯定応答(1016)を前記二次データ記憶装置から受け取る手段と、
前記二次データ記憶装置から前記第１の肯定応答を受け取ると、前記データを前記一次データ記憶装置にコミットする手段(1020)と、
前記データをコミットする命令を前記一次データ記憶装置から前記二次データ記憶装置に送る手段と、
前記二次データ記憶装置から第２の肯定応答(1028)を受け取る手段であって、前記第２の肯定応答が、前記二次データ記憶装置で前記データがコミットされたことを知らせる、手段と、
前記第２の肯定応答を前記一次データ記憶装置で受け取ると、前記データに関連するオブジェクトのロックを解除する(unlocking)手段(1030)と、
前記一次データ記憶装置における前記データのコミットメントの肯定応答(1032)を前記クライアントに送る手段とを含む、
媒体。
【請求項７】
前記オブジェクトをロックする手段により、前記オブジェクトに関連するデータの書込みが防止される、請求項６に記載の媒体。
【請求項８】
前記第１の肯定応答(acknowledgement)が、前記二次データ記憶装置が前記データに関連する前記オブジェクトの読取りおよび前記オブジェクトへの書込みを阻止する(blocking)結果として受け取られる、請求項６に記載の媒体。
【請求項９】
コミットメントの前記肯定応答が、前記データが前記一次データ記憶装置および前記二次データ記憶装置の両方でコミットされた後に前記クライアントに送られる、請求項６に記載の媒体。
【請求項１０】
分散記憶環境におけるデータの遠隔地間での同期複製のための、プロセッサーおよびメモリーを有する計算システムであって、
クライアントからデータを一次データ記憶装置で受け取る手段と、
データの同期コミットメントを容易にするために、前記データ、および分散計算環境内で生成される前記データの識別子を二次データ記憶装置に送る手段であって、前記一次データ記憶装置および前記二次データ記憶装置が異なる地理領域(geographic regions)に存在している、手段と、
前記データを前記二次データ記憶装置で受け取る手段と、
前記データを前記二次データ記憶装置でログに書き込む手段と、
前記データを前記ログに書き込んだという肯定応答を前記二次データ記憶装置から前記一次データ記憶装置に送る手段であって、前記肯定応答が前記識別子の少なくとも一部を含む、手段と、
前記データを前記ログに書き込んだという前記肯定応答を受け取ると、それに応答して、前記一次データ記憶装置で前記データをコミットする手段と、
前記二次データ記憶装置で前記データをコミットする命令を送る手段であって、前記命令が少なくとも部分的に前記識別子の一部を含む、手段と、
前記二次データ記憶装置で前記データをコミットする手段とを含む、
計算システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明の一実施例は、例えば、分散記憶環境における同期複製に関する。
【背景技術】
【０００２】
[0001]分散計算環境は、ネットワークによって接続することができる地理的に離れた構成要素に依拠してデータの記憶および操作を実施する。分散計算環境のユーザーは、自分のアカウントのうちの１つまたは複数のためのデータが特定の地理位置に維持されていることを希望することがある。例えば、ある顧客は、政治的な理由で、自分のデータを特定の国に置かれたファシリティに格納しないことを希望することがある。同様に、顧客は、自然災害をめぐる潜在的な可用性の問題を小さくするために、互いに離れた複数の地理位置に自分のデータを格納することを希望することがある。したがって、顧客は、アカウントベースで、データを様々な地理位置で維持し、かつ／または様々な地理位置で複製することを決定することができる。本発明では以下、離れた位置でデータを維持し、かつ、そのデータが首尾よく書き込まれたという肯定応答を提供するための方法が提供される。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本願発明の一実施例は、例えば、分散記憶環境における同期複製に関する。
【課題を解決するための手段】
【０００４】
[0002]本発明の実施形態は、分散計算環境におけるデータの同期複製のためのシステム、方法およびコンピューター記憶媒体に関する。同期複製を達成するために、結果整合性手法および強力な整合性手法の両方が企図されている。データは、クライアントから一次データ記憶装置で受け取られる。データは、次に、最終的にコミットするために一次データ記憶装置のログに書き込むことができる。次に、二次データ記憶装置でのデータの再生を容易にする固有識別子などの記録を使用してデータに注釈が付けられる。注釈が付けられたデータは、一次データ記憶装置から二次データ記憶装置に送られ、二次データ記憶装置のログに書き込まれる。一次データ記憶装置は、二次データ記憶装置がデータをログに書き込んだという肯定応答を受け取ると、データをコミットし、かつ、成功の肯定応答をクライアントに送り返すことができる。強力な整合性手法では、一次データ記憶装置は、二次側がデータを書き込んだだけではなく、データをコミットしたという肯定応答を一次データ記憶装置が受け取るまで、クライアントへの成功の肯定応答の送信を待機することができる。
【０００５】
[0003]この「発明の概要」は、以下で、「発明を実施するための形態」でさらに説明される概念の選択を簡易形態で紹介するために提供されたものである。この「発明の概要」には、特許請求される主題の重要な特徴または本質的な特徴を識別することも、あるいは特許請求される主題の範囲を決定する際の補助として使用されることも意図されていない。
【０００６】
[0004]以下、本発明の実例実施形態について、参照により本明細書に組み込まれている添付の図面を参照して詳細に説明する。
【図面の簡単な説明】
【０００７】
【図１】[0005]本発明の実施形態を実施するのに適した一例示的計算デバイスを示す図である。
【図２】[0006]本発明の実施形態による、分散計算環境内の一例示的地理領域を示すブロック図である。
【図３】[0007]本発明の実施形態による、一例示的記憶スタンプのブロック図である。
【図４】[0008]本発明の実施形態による、データのジオ複製のための一例示的システムのブロック図である。
【図５】[0009]本発明の実施形態による、コミット識別（コミットＩＤ）のブロック図である。
【図６】[0010]本発明の態様による、コミットＩＤに対する特定のメッセージを取り扱う方法を決定するための方法を示す流れ図である。
【図７】[0011]本発明の実施形態による、一次データ記憶装置から二次データ記憶装置へデータを引き渡すための一例示的システムのブロック図である。
【図８】[0012]本発明の態様による、一例示的非同期ジオ複製のための時間的な流れを示すブロック図である。
【図９】[0013]本発明の態様による、結果整合性方法を有する一例示的同期複製のための時間的な流れを示すブロック図である。
【図１０】[0014]本発明の態様による、強力な整合性方法を有する一例示的同期複製のための時間的な流れを示すブロック図である。
【図１１】[0015]本発明の実施形態による、一次データ記憶装置の観点からの結果整合性を有する同期複製方法を示す流れ図である。
【図１２】[0016]本発明の実施形態による、一次データ記憶装置の観点からの強力な整合性を有する同期複製方法を示す流れ図である。
【図１３】[0017]本発明の実施形態による、一次データ記憶装置および二次データ記憶装置の両方を有する分散計算システムの観点からの同期複製方法を示す流れ図である。
【発明を実施するための形態】
【０００８】
[0018]本発明の実施形態の主題は、本明細書においては、法定要求事項に合致するための特殊性で説明されている。しかしながら説明自体には本特許の範囲を制限することは意図されていない。それどころか、本発明者らは、特許請求される主題は、他の既存の技術または将来の技術と共に、本文書に記載されているステップとは異なるステップを含み、あるいは本文書に記載されているステップと同様のステップの組合せを含むために、他の方法で具体化することも可能であることを企図している。
【０００９】
[0019]本発明の実施形態は、分散計算環境におけるデータの同期複製のためのシステム、方法およびコンピューター記憶媒体に関する。同期複製を達成するために、フェールオーバーに対する結果整合性手法および強力な整合性手法の両方が企図されている。データは、クライアントから一次データ記憶で受け取られる。データは、次に、最終的にコミットするために一次データ記憶装置のログに書き込むことができる。次に、二次データ記憶装置でのデータの再生を容易にする固有識別子などの記録を使用してデータに注釈が付けられる。注釈が付けられたデータは、一次データ記憶装置から二次データ記憶装置に送られ、二次データ記憶装置のログに書き込まれる。一次データ記憶装置は、二次データ記憶装置がデータをログに書き込んだという肯定応答を受け取ると、データをコミットし、かつ、成功の肯定応答をクライアントに送り返すことができる。強力な整合性手法では、一次データ記憶装置は、二次がデータを書き込んだだけではなく、データをコミットしたという肯定応答を一次データ記憶装置が受け取るまで、クライアントへの成功の肯定応答の送信を待機することができる。
【００１０】
[0020]したがって一態様では、本発明により、分散計算環境でデータを同期ジオ複製するための、プロセッサーおよびメモリーを利用する、分散計算環境におけるコンピューター実施方法が提供される。この方法は、クライアントからデータを一次データ記憶装置で受け取るステップを含む。また、上記方法は、データを一次データ記憶装置のログに書き込むステップを含む。さらに、上記方法は、ログに書き込まれるデータに、二次データ記憶装置でのデータの再生を可能にする記録を使用して注釈を付けるステップを含む。さらに、上記方法は、データが二次データ記憶装置でログに書き込まれたという肯定応答を二次データ記憶装置から受け取るステップを含む。さらに、上記方法は、二次データ記憶装置から肯定応答を受け取ると、データを一次データ記憶装置にコミットするステップを含む。また、上記方法は、一次データ記憶装置におけるデータのコミットメントの肯定応答をクライアントに送るステップを含む。さらに、上記方法は、一次データ記憶装置から二次データ記憶装置へコミットＩＤを送るステップを含む。
【００１１】
[0021]他の態様では、本発明により、プロセッサーおよびメモリーを有する計算システムによって実行されると、計算システムに、分散計算環境におけるデータの同期ジオ複製のための方法を実行させるコンピューター実行可能命令が実装されたコンピューター記憶媒体が提供される。上記方法は、クライアントからデータを一次データ記憶装置で受け取るステップを含む。さらに、上記方法は、一次データ記憶装置で、データに関連するオブジェクトをロックするステップを含む。さらに、上記方法は、データを記録と共に一次データ記憶装置から二次データ記憶装置に送るステップを含む。さらに、上記方法は、データが二次データ記憶装置でログに書き込まれたという第１の肯定応答を二次データ記憶装置から受け取るステップを含む。上記方法は、二次データ記憶装置から第１の肯定応答を受け取ると、データを一次データ記憶装置にコミットするステップを実行する。さらに、上記方法は、データをコミットする命令を一次データ記憶装置から二次データ記憶装置に送るステップを含む。また、上記方法は、二次データ記憶装置から第２の肯定応答を受け取るステップを含む。第２の肯定応答は、二次データ記憶装置でデータがコミットされたことを知らせる。上記方法は、第２の肯定応答を一次データ記憶装置で受け取ると、データに関連するオブジェクトのロックを解除するステップを実行する。さらに、上記方法は、一次データ記憶装置におけるデータのコミットメントの肯定応答をクライアントに送るステップを実行する。
【００１２】
[0022]本発明の第３の態様によれば、プロセッサーおよびメモリーを有する計算システムによって実行されると、計算システムに、分散計算環境におけるデータの同期ジオ複製のための方法を実行させるコンピューター実行可能命令が実装されたコンピューター記憶媒体が提供される。上記方法は、クライアントからデータを一次データ記憶装置で受け取るステップからなっている。上記方法は、データの同期コミットメントを容易にするために、分散計算環境内で生成されるデータおよびデータの識別子を二次データ記憶装置に送るステップをさらに含む。一次データ記憶装置および二次データ記憶装置は、異なる地理領域に存在している。また、上記方法は、データを二次データ記憶装置で受け取るステップを実行する。さらに、上記方法は、データを二次データ記憶装置でログに書き込むステップからなる。さらに、上記方法は、データをログに書き込んだという肯定応答を二次データ記憶装置から一次データ記憶装置に送るステップを含む。肯定応答は、識別子の少なくとも一部を含む。上記方法は、データをログに書き込んだという肯定応答を受け取ると、それに応答して、一次データ記憶装置でデータをコミットするステップを実行する。さらに、上記方法は、二次データ記憶装置でデータをコミットする命令を送るステップを実行する。命令は、少なくとも部分的に識別子の一部を含む。また、上記方法は、二次データ記憶装置でデータをコミットするステップを実行する。
【００１３】
[0023]以上、本発明の実施形態の概要を簡単に説明したが、以下、これらの実施形態を実施するのに適した一例示的動作環境について説明する。
[0024]図面全体を参照し、また、最初にとりわけ図１を参照すると、本発明の実施形態を実施するのに適した一例示的動作環境が示されており、一括して計算デバイス１００で示されている。計算デバイス１００は、適切な計算環境の一例にすぎず、本発明の使用法または機能の範囲に対する何らかの制限を提案することは意図されていない。また、図に示されているモジュール／構成要素のいずれか１つまたは組合せに関連する何らかの依存性または要求事項を有するものとしてこの計算デバイス１００を解釈してはならない。
【００１４】
[0025]実施形態は、コンピューターまたはパーソナルデータアシスタントなどの他の機械、あるいは他のハンドヘルドデバイスによって実行される、プログラムモジュールなどのコンピューター実行可能命令を含むコンピューターコードまたは機械使用可能命令の概括的な文脈で説明することができる。概して、ルーチン、プログラム、オブジェクト、モジュール、データ構造、等々を含んだプログラムモジュールは、特定のタスクを実行し、あるいは特定の抽象データタイプを実施するコードを意味している。実施形態は、ハンドヘルドデバイス、消費者電子工学、汎用コンピューター、専用計算デバイス、サーバー、ルーティングデバイス、分散計算デバイス、等々を含んだ様々なシステム構成で実践することができる。また、実施形態は、複数のタスクが通信ネットワークを介してリンクされる遠隔処理デバイスによって実行される分散計算環境で実践することも可能である。
【００１５】
[0026]引き続いて図１を参照すると、計算デバイス１００は、メモリー１１２、１つまたは複数のプロセッサー１１４、１つまたは複数のプレゼンテーションモジュール１１６、入力／出力（Ｉ／Ｏ）ポート１１８、Ｉ／Ｏモジュール１２０および例証電源１２２などのデバイスを直接または間接的に結合するバス１１０を含む。バス１１０は、１つまたは複数のバス（アドレスバス、データバスまたはそれらの組合せなど）であってもよいバスを代表している。図１の様々なブロックは、簡潔にするために線で示されているが、実際は、様々なモジュールを正確に描写することはそれほど簡潔ではない。例えば表示デバイスなどのプレゼンテーションモジュールはＩ／Ｏモジュールと見なすことができる。また、プロセッサーはメモリーを有している。本発明の本発明者らは、このようなことは当分野の性質であることを認識しており、もう一度繰り返すが、図１の線図は、１つまたは複数の実施形態に関連して使用することができる一例示的計算デバイスの単なる実例にすぎない。すべて図１の範囲内であることが企図されており、「コンピューター」または「計算デバイス」で参照されているため、このようなカテゴリー間を「ワークステーション」、「サーバー」、「ラップトップ」、「ハンドヘルドデバイス」、「サーバー」、「データ記憶装置」、等々として区別することはなされていない。
【００１６】
[0027]計算デバイス１００は、通常、様々なコンピューター可読媒体を含む。非制限の一例として、コンピューター可読媒体は、非一時的コンピューター記憶媒体、ランダムアクセスメモリー（ＲＡＭ）、リードオンリーメモリー（ＲＯＭ）、電子的消去可能プログラマブルリードオンリーメモリー（ＥＥＰＲＯＭ）、フラッシュメモリーまたは他のメモリー技術、ＣＤＲＯＭ、ディジタル汎用ディスク（ＤＶＤ）または他の光媒体あるいはホログラフィック媒体、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶デバイス、または所望の情報を符号化するために使用することができ、かつ、計算デバイス１００によってアクセスすることができる任意の他の媒体を備えることができる。一例示的実施形態では、コンピューター可読媒体は非一時的媒体である。
【００１７】
[0028]メモリー１１２は、揮発性および／または不揮発性メモリーの形態のコンピューター記憶媒体を含む。メモリーは、取外し可能メモリー、非取外し可能メモリーまたはそれらの組合せであってもよい。例示的ハードウェアデバイスは、固体記憶装置、ハードドライバー、光ディスクドライバー、等々を含む。計算デバイス１００は、メモリー１１２またはＩ／Ｏモジュール１２０などの様々な実体からデータを読み取る１つまたは複数のプロセッサーを含む。１つまたは複数のプレゼンテーションモジュール１１６は、ユーザーまたは他のデバイスにデータ指示を提供する。例示的プレゼンテーションモジュールは、表示デバイス、スピーカー、印刷モジュール、振動モジュール、等々を含む。Ｉ／Ｏポート１１８は、Ｉ／Ｏモジュール１２０を含む他のデバイスへの計算デバイス１００の論理結合を可能にし、それらのいくつかは内蔵することができる。例証モジュールは、マイクロホン、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナー、プリンター、無線デバイス、等々を含む。計算デバイス１００は形で表すことができることを理解されたい。例えば計算デバイス１００の一部は、第１の地理位置に物理的に配置することができ、一方、他の部分は、異なる地理位置に物理的に配置することができる。したがって様々なデバイス、サービス、アプリケーションおよび層を様々な位置に分散させることができ、かつ、計算デバイス１００に因襲的に適用することができる所望の結果を依然として達成することができることが企図されている。
【００１８】
[0029]図２を参照すると、本発明の実施形態による一例示的地理領域（「ジオ領域」）２００を示すブロック図が提供されている。一般に、ジオ領域は、政治的および／または統治的境界によって１つにまとめてグループ化された地理位置の集合である。例えばジオ領域はアメリカ合衆国を含むことができ、第２のジオ領域は欧州を含むことができ、また、第３のジオ領域はアジア太平洋領域を含むことができる。
【００１９】
[0030]以下でより詳細に説明するように、クライアントは、特定のジオ領域内の、但しそのジオ領域内の異なる地理位置でデータを複製することを希望することができる。例えばクライアントは、クライアントのすべてのデータを、アメリカ合衆国を統制している法律にさらされるアメリカ合衆国内に維持することを希望することができる（異なるジオ領域におけるデータ複製の場合とは異なり）。しかしながら事業連続性計画（災害復旧計画）のため、クライアントは、アメリカ合衆国内の異なる地理位置（「ジオ位置」）におけるデータの複製を要求することができる（以下で説明する）。したがって第１の地理位置に存在していてもよいジオ位置Ａ２０２を介してデータにアクセスすることができる。次に、ジオ位置Ａ２０６とは地理的に異なっている第２のジオ位置Ｂ２０４内でデータを複製することも可能である。
【００２０】
[0031]ジオ位置は、１つまたは複数の記憶スタンプを保持している地理位置である（以下で説明する）。ジオ位置の例には、Ｓｅａｔｔｌｅ、Ｗａｓｈｉｎｇｔｏｎ、第１のジオ位置としての記憶スタンプのＵＳＡベースのグループ化およびＤｅｓ  Ｍｏｉｎｅｓ、Ｉｏｗａ、第２のジオ位置としての記憶スタンプのＵＳＡベースのグループ化がある。ＳｅａｔｔｌｅとＤｅｓ  Ｍｏｉｎｅｓの間の実質的な物理距離のため、自然災害または他の事業妨害活動がＳｅａｔｔｌｅで生じても、Ｄｅｓ  Ｍｏｉｎｅｓは、その活動の影響から隔離することができる。
【００２１】
[0032]記憶スタンプ（本明細書においては「データ記憶装置」とも呼ばれている）は、１つまたは複数のプロセッサーに結合することができる物理的なドライバーまたは他のコンピューター可読メモリーの集合である。例えば記憶スタンプは、２ないし２０ペタバイトの記憶を維持する１０〜２０ラックの記憶装置のクラスターからなっていてもよい。記憶スタンプは、もっと多い記憶容量、あるいはもっと少ない記憶容量を有することが企図されている。共通のジオ位置と結合した記憶スタンプは、地理的に近接させることができる（例えば共通データセンター内）。互いに比較的近接する結果、概して、共通ジオ位置の記憶スタンプ間に高水準の接続性が存在する。しかしながら記憶スタンプは、概して、共通ジオ位置では互いに近接しているため、１つの記憶スタンプの接続性を失わせることになる出来事（例えば自然災害）は、その同じジオ位置内の他の記憶スタンプに影響を及ぼす可能性がある。
【００２２】
[0033]したがって本発明の一態様によれば、地理的に互いに離れていてもよい複数の記憶スタンプ間でデータを複製することができる。したがって第２のジオ位置および第１のジオ位置が十分な距離（例えば１６０．９ｋｍ（１００マイル）、１，６０９ｋｍ（１，０００マイル）、１６，０９３ｋｍ（１０，０００マイル）、２０，１１７ｋｍ（１２，５００マイル）、等々）だけ地理的に離れるよう、第１のジオ位置の第１の記憶スタンプに維持されているデータが第２のジオ位置の第２の記憶スタンプに複製されることが企図されている。第２の記憶スタンプは、第１の記憶スタンプと同じジオ領域に存在することが企図されている。一方、第２の記憶スタンプは、第１の記憶スタンプとは異なるジオ位置に存在することも同じく企図されている。
【００２３】
[0034]図２に戻ると、ジオ位置Ａ２０２およびジオ位置Ｂ２０４は、共通ジオ領域２００に位置している（この非制限例では）。ジオ位置Ａ２０２は、記憶スタンプ２０６および記憶スタンプ２０８からなっている。同様に、第２のジオ位置Ｂ２０４は、記憶スタンプＣ２１０および記憶スタンプＤ２１２からなっている。既に示したように、ジオ位置は、任意のサイズの任意の数の記憶スタンプを有することができることが企図されている。
【００２４】
[0035]本発明の実施形態は、データが所与のアカウントまたはアカウントの一部のために記憶される一次ジオ位置および二次ジオ位置を有することを企図している。アカウントと結合した顧客は、一例示的実施形態では、一次ジオ位置（例えばジオ位置Ａ２０２）を選択することができる。さらに、二次ジオ位置（例えばジオ位置Ｂ２０４）は、顧客によって提供されたものであれ、あるいは信頼性尺度、冗長性尺度および／または可用性尺度に基づくものであれ、多数の基準に基づいて顧客のために選択されることが企図されている。しかしながら、一次ジオ位置および／または二次ジオ位置のいずれかが顧客によって選択され、あるいは顧客のために選択されることも企図されている。
【００２５】
[0036]図３を参照すると、本発明の実施形態による一例示的記憶スタンプ３００のブロック図が示されている。記憶スタンプ３００は、一例示的実施形態では、上で説明した図２のジオ位置Ａ２０２に配置することができる。記憶スタンプは多数のパーティションからなっていてもよい。パーティションは、所与の記憶スタンプのための記憶容量の部分集合である。したがって記憶スタンプに記憶されたデータは、少なくとも部分的に、そのデータを記憶しているパーティションのパーティション識別子に基づいて識別することができる。一例示的実施形態では、パーティションを利用して、記憶スタンプを利用している１つまたは複数のアカウントを管理することができる。しかしながら、アカウントは複数のパーティションを利用することができることが企図されている（以下で説明するように）。
【００２６】
[0037]記憶スタンプ３００は、パーティションＡ３０２、パーティションＢ３０４およびパーティションＣ３０６を有するものとして示されている。パーティションＡ３０２は、この例では、アカウントＡ３０６およびアカウントＢ３０８に関連するデータを維持している。パーティションＢ３０４は、アカウントＣ３１０に関連するデータを維持している。パーティションＣ３０５は、同じくアカウントＡ３０６を含む。一例示的実施形態では、アカウントＡ３０６は、パーティションＡ３０２およびパーティションＣ３０５などの複数のパーティションにわたって展開している。上記の例では、任意の数のアカウントおよび任意の数のパーティションを提供することができ、図解は、説明を目的として提供されたものであることを理解されたい。
【００２７】
[0038]データのジオ複製は、分散計算環境内の多数の異なるレベルで生じることが企図されている。例えば所与の記憶スタンプ上で記憶されたデータは、他の記憶スタンプにジオ複製されることが企図されている。同様に、特定のアカウントに関連するデータもジオ複製されることが企図されている。さらに、特定のパーティションに維持されているデータもジオ複製されることが企図されている。したがってジオ複製は、システム内の任意のレベルの細分性で実施することができることが企図されている。
【００２８】
[0039]一例示的実施形態では、ジオ複製は、アカウントが一次ジオ位置および該一次ジオ位置に割り当てられた１つまたは複数の二次ジオ位置を有するよう、アカウントレベルで生じることが企図されている。アカウントレベルにおけるジオ複製は、あるジオ位置から他のジオ位置への移動を希望する特定の記憶アカウントに対するジオフェールオーバーを許容するためには場合によっては重要である。さらに、アカウントレベルにおけるジオ複製は、資源（例えば空間、金）を節約するために、特定のアカウントに対するジオ複製の顧客によるターンオンまたはターンオフを許容することができる。さらに、アカウントに関連するデータの一部に対する複製（例えばジオ複製）をターンオンまたはターンオフすることができることが企図されている。
【００２９】
[0040]図４を参照すると、本発明の実施形態による、データをジオ複製するための一例示的システム４００のブロック図が示されている。システム４００は、一次データ記憶装置４０２および二次データ記憶装置４０４からなっている。一次記憶スタンプは、パーティションサーバーＡ４０８およびパーティションサーバーＢ４１０などの複数のパーティションからなっている。パーティションサーバーＡ４０８は、この例では、メモリーテーブル４１２およびログ４１４からなっている。
【００３０】
[0041]一例示的実施形態では、パーティションサーバーは、複数のメモリーテーブルおよび／または複数のログからなっていてもよい。例えばパーティションは、更新ログ、ブロックログ、ページログおよび／またはジオメッセージログからなっていてもよい。一例示的実施形態では、ログは、ログがアペンドのみである離散データストリームであるよう、分散計算環境のストリーム層内に配置される。
【００３１】
[0042]ログストリームは、記憶スタンプの一部（例えば記憶ノード）の故障に引き続く記憶スタンプのデータ再確立に利用することができる。例えば特定のパーティションの記憶スタンプにデータをコミットすることができるが、パーティションの故障に引き続いて、そのパーティションに関連する１つまたは複数のログを再生することにより、パーティションの状態が少なくとも部分的に再生成される。データは、そのデータが記憶スタンプの１つまたは複数のログに再生される（例えば書き込まれる）まで、特定の記憶スタンプに「コミット」することはできない。一例示的実施形態では、データスタンプに単に記憶される、つまり書き込まれるだけのデータと、データスタンプにコミットされるデータとの間に区別が存在している。例えば記憶スタンプのログにデータを書き込むことができるが、クライアントは、そのデータが記憶スタンプにコミットされるまでそのデータにアクセスすることはできない。ログからのデータのコミットメントは、一例示的実施形態では、ログからのデータを順を追って再現する（つまり再生する）ことによって生じさせることができ、この再現は、厳密に連続してなくてもよく、単に順を追っているだけでもよい。
【００３２】
[0043]以下でより詳細に説明するように、データは非逐次方式で受け取ることができる。しかしながら、場合によっては逐次方式でデータをコミットすることが望ましいこともある。一例示的実施形態では、場合によっては、データの一部を逐次方式で記憶スタンプにコミットすることができるようになるまでの間、非逐次方式で受け取ったデータをログに維持することが望ましい。
【００３３】
[0044]図４に戻ると、システム４００はネットワーク４０６からなっている。システム４００の様々な構成要素は、このネットワーク４０６を介して互いに通信することができ、ネットワーク４０６は、それらに限定されないが、１つまたは複数のローカルエリアネットワーク（ＬＡＮ）および／または広域ネットワーク（ＷＡＮ）を含むことができる。このようなネットワーク化環境は、オフィスコンピューターネットワーク、企業規模コンピューターネットワーク、イントラネットおよびインターネットでは当たり前である。例えば分散計算環境では、ネットワークを介して全く異なる構成要素の通信を許容することはごく一般的である。したがってネットワーク４０６については、本明細書においてはより詳細な説明は省略する。
【００３４】
[0045]二次データ記憶装置４０４は、ＸＦＥ４２４（フロントエンドとも呼ばれている）、パーティションサーバーＣ４２０およびパーティションサーバーＤ４２２からなっている。パーティションサーバーＣ４２０は、この例では、ＧＭＬ４２８（ジオメッセージログとも呼ばれている）、メモリーテーブル４３２およびログ４３４からなっている。パーティションサーバーＡ４０８に関連して上で説明したように、１つまたは複数のメモリーテーブルおよび／または１つまたは複数のログは、所与のパーティション内で利用することができることが企図されている。
【００３５】
[0046]ＸＦＥ４２４は、所与のスタンプのためのフロントエンドサービスである。ＸＦＥは、様々な機能を取り扱うように構成されているが、とりわけ、ジオ複製のためにある記憶スタンプから他の記憶スタンプへ引き渡されるメッセージである入力ジオメッセージを処理し、それによりＸＦＥによって受け取られるデータは、関連する記憶スタンプにコミットされるべく意図されていることを保証する。また、ＸＦＥは、ジオメッセージに存在しているトランザクションを検査して、データをコミットすべき記憶スタンプ内の特定のパーティションを識別することも可能である。また、ＸＦＥは、ジオメッセージを適切なパーティションおよび／またはログに転送し、データの記憶／コミットメントの肯定応答を受け取り、および／またはデータの状態についての肯定応答をデータの１つまたは複数の送信側に提供する役割を果たすことも可能である。
【００３６】
[0047]ＧＭＬ４２８はジオメッセージログである。一例示的実施形態では、ジオメッセージは、二次データスタンプで受け取られると、ほぼ直ちにＧＭＬに書き込まれる。ジオメッセージをほぼ直ちに書き込むことにより、二次データ記憶装置は、データが二次データ記憶装置で永続的に書き込まれたこと（但し、未だコミットされていなくてもよい）を知らせる肯定応答を供給側一次データ記憶装置に送り返すことができる。この例では、一次側は、首尾よくカムバックするために、いくつかのジオトランザクション（例えばジオメッセージの一部）の再実行を二次データ記憶装置上で待機する必要はない。したがってジオメッセージはＧＭＬに書き込まれ、後で再生される。
【００３７】
[0048]二次データ記憶装置上でのジオメッセージの再生に遅延が存在している場合、一次データ記憶装置は、ジオメッセージのその送信を阻止する必要はないため、ＧＭＬを利用するこのプロセスは、一次データ記憶装置を二次データ記憶装置から切り離すことができる。一例示的実施形態では、一次側が阻止されると、一次側はバックアップを開始することができるため、この切離しは場合によっては重要である。しかしながら、二次データ記憶装置が一次データ記憶装置についていける場合、ジオメッセージは、使用する必要なく、あるいは少なくともＧＭＬからリードバックすることなく、メモリーから直接再生することができる。
【００３８】
[0049]一例示的実施形態では、ＧＭＬを完全にバイパスすることができることが企図されている。ＧＭＬの代わりに、パーティションへのデータのコミット化（またはチェックポイント化プロセス）を直接サポートしているパーティションの１つまたは複数のログに入力ジオメッセージを直接書き込むことができる。
【００３９】
[0050]図４にはジオ複製されるデータの一例示的流れが示されている。例えばデータ４１６は、一次データ記憶装置４０２で受け取られる。この例ではデータ４１６はクライアントからのデータであってもよい（例えばアプリケーション、サービス、プログラム、等々）。データ４１６が、この例では、非同期方法、結果整合性との同期方法、または強力な整合性との同期方法を必要とするアカウントに関連しているかどうかに応じて流れを変えることができる。しかしながら、一般的な説明のために、図４には非同期方法が示されている。他のタイプまたは構成のジオ複製に対しては、データの流れを変えることができることを理解されたい。
【００４０】
[0051]アカウント制御ユニット（「ＡＣＵ」）は、アカウントおよびアカウント内の情報のうち、ジオ複製されることが意図されているアカウントおよび情報を識別し、また、その意図されているジオ複製方法を識別するように構成することができる。例えばＡＣＵは、データ４１６を一次データ記憶装置４０２で検査し、そのデータ４１６が非同期ジオ複製（例えば）を必要とするアカウントと結合していることを決定することができる。個々のデータスタンプは、そのスタンプでアカウントを制御するためのＡＣＵを有することができる。例えば一次側４０２はＡＣＵ  Ｐ４０９を有しており、一方、二次側はＡＣＵ  Ｓ４２１を有している。
【００４１】
[0052]一例示的実施形態では、ＡＣＵは個々のスタンプで走るサービスである。ＡＣＵは、複製プロセスを実施するために個々の記憶スタンプで一連の操作を実行する役割を果たすことができる。例えばＡＣＵは、関連する記憶スタンプにおけるアカウントの複製をターンオンおよびターンオフする役割を果たすことができる。以下で説明するように、ロケーションサービス４０３は、様々な複製プロセスのための高レベル指示文を発行するためにＡＣＵと通信することができる。例えばＡＣＵは、パーティション分割化、併合化および複製化などの様々な操作を実行するためにテーブルマスターと通信することができる。また、ＡＣＵは、移動初期化コマンド、ブートストラップコマンドまたは他の複製指向コマンドなどの他のコマンドをロケーションサービスから受け取ることも可能である。また、ＡＣＵは、アカウント上で実施されている個々のコマンドの進行を追跡することも可能である。ロケーションサービスは、次に、様々なスタンプのそれらのコマンドの進行の様子に関する更新をＡＣＵから検索し、あるいは受け取ることができる。
【００４２】
[0053]ロケーションサービス４０３は、上で示したように、複製の高レベルの機能を制御する役割を果たすことができる。例えばロケーションサービスは、複製および移動割当て（例えばどのスタンプが所与のアカウントのための一次側であり、また、どのスタンプが所与のアカウントのための二次側であるか）を維持することができる。また、ロケーションサービスは、アカウント複製の制御における最も高い権威として働くことも可能である。計算デバイスであっても、あるいは計算環境内で走る一組のプロセスであってもよいロケーションサービスは、複製を追加し、また、スタンプ間で複製中／移動中である記憶アカウントのための移動状態を追加する役割を果たすことができる。
【００４３】
[0054]一例示的実施形態では、ロケーションサービス４０３は、所与のアカウントのための一次側および／または二次側であるすべての記憶スタンプのためのすべての記憶アカウント生成トランザクション、削除トランザクションおよび更新トランザクションを実施する。この例では、ロケーションサービス４０３は、記憶アカウントのための異なるスタンプ全体にわたって整合的な記憶アカウント情報を維持することができ、この記憶アカウント情報は、生成／削除アカウント、変更アカウント許可、およびアカウントのドメイン名を変更するためのアカウントキーの更新を含むことができる。さらに、ロケーションサービスは、複製プロセスのための１つまたは複数のスタンプの動作を制御し、かつ、監視するために、スタンプでフロントエンド（例えばＸＦＥ４２４）および／またはＡＣＵ（例えばＡＣＵ  Ｓ４２１）と通信することができる。したがってロケーションサービス４０３は、複製のプロセス全体を管理する役割を果たすことができ、一方、個々のスタンプにおけるＡＣＵは、ロケーションサービスと通信し、かつ、特定のスタンプにおける所望の動作の性能を監視する役割を果たすことができる。
【００４４】
[0055]以下で説明するように、二次データスタンプでのデータの再生を容易にするための１つまたは複数の記録を使用してデータ４１６に注釈を付けることができる（後述する、ジオメッセージ注釈付き記録の説明を参照されたい）。注釈が付けられたデータは、この例では、ネットワーク４０６によって一次データ記憶装置４０２から二次データ記憶装置４０４に送られるデータ４１８である。二次データ記憶装置４０４のＸＦＥ４２４は、ジオメッセージの形態であってもよいデータ４１８を受け取る。ＸＦＥ４２４は、次に、パーティションサーバーＣ４２０のＧＭＬ４２８に書き込むべきトランザクション（例えばデータ４１８内の部分）を識別することができる。例えばデータ４１８に関連するアカウントをパーティションサーバーＣ４２０にコミットすることができる。
【００４５】
[0056]ＸＦＥ４２４からＧＭＬ４２８に送られるデータの部分はデータ４２６である。このデータ４２６は、次に、後のパーティションサーバーＣ４２０へのコミットメントのためにＧＭＬ４２８に書き込む（例えば維持する）ことができる。この例示的非同期地理的複製モデルでは、パーティションサーバーＣ４２０にコミットされるＧＭＬから再生されたデータはデータ４３０である。データ４３０はデータ４２６の一部であってもよく、あるいはデータ４３０は、メモリーテーブル４３２および／またはログ４３４へのデータ４３０のエントリーを介したパーティションサーバーＣ４２０へのコミットメントのために順を追って（例えば連続的に）再生される、既に受け取った複数のデータの組合せであってもよい。さらに、順序不同で再生されたトランザクションが互いに依存していない場合、トランザクション（例えばデータ）を順序不同で再生することができることが企図されている。この順序不同再生によれば、より高速で再生を生じさせることができる。しかしながら、バッチトランザクションは、一例示的実施形態では、バッチ全体を再生する必要があること、あるいはバッチを全く再生しなくてもよいことが同じく企図されている。
【００４６】
[0057]ＧＭＬ４２８に戻ると、ＧＭＬ４２８から（あるいはＧＭＬ４２８の代わりにサービスまたは制御ユニットによって）ＸＦＥ４２４に、データ４２６がＧＭＬ４２８に書き込まれたことを示す肯定応答４３６を送ることができる。したがってＸＦＥ４２４は（あるいはＸＦＥ４２４の代わりにサービスまたは制御ユニットによって）、データ４１６（またはデータ４１８あるいはデータ４３０）の持続性の肯定応答４３８を二次データ記憶装置４０４に送る。以下で説明するように、肯定応答４３８を受け取ると、一次データスタンプからコミットＩＤを更新し、生成し、および／または送ることができる。
【００４７】
[0058]一例示的実施形態では、一次データ記憶装置４０２から二次データ記憶装置４０４に送られるデータは、バッチ化されたジオメッセージの形態をしている。バッチ化されたジオメッセージは、異なるパーティションのために予定することができる多数のトランザクションを含む。ＸＦＥ４２４は、この例では、バッチ化されたジオメッセージ内の様々なトランザクションを識別し、かつ、適切なトランザクションを適切なパーティションに転送することができる。引き続いてこの例について説明すると、ＸＦＥ４２４がジオメッセージからトランザクションを送ったすべてのパーティションから成功の知らせをＸＦＥ４２４が受け取ると、ＸＦＥ４２４は、一次データ記憶装置４０２（またはジオメッセージの発信元であった特定の一次側）に肯定応答４３８を送ることができる。この例では、この時点では二次データ記憶装置４０４のデータは、未だＧＭＬ４２８から１つまたは複数の他のログ（例えば更新ログ、ブロブログ）に再生されていなくてもよく、後で非同期で再生することができる。一次データ記憶装置４０２（または一次データ記憶装置４０２の送信元パーティション）は、一組のエポック＃および／またはシーケンス＃’に対して受け取り返した肯定応答を維持することができる（以下で説明する）。受け取ったこれらの肯定応答に基づいて、一次データ記憶装置４０２は、将来のジオメッセージと共に包含するためにコミットＩＤを進めることができるかどうかを決定する。
【００４８】
[0059]以上の例は、以下でより詳細に説明する概念を紹介するために提供されたものである。
[0060]図４に示されている構造および本明細書において説明されている他の構造は、単なる例として示されたものであることを理解されたい。示されている構造に加えて、あるいは示されている構造の代わりに、他の構造および要素（例えば機械、インタフェース、機能、順序および機能のグループ化、等々）を使用することができ、また、いくつかの要素は全く省略することができる。さらに、本明細書において説明されている要素の多くは、離散すなわち分散構成要素として実施することができ、あるいは他の構成要素と共に実施することができ、また、任意の適切な組合せおよび位置で実施することができる機能実体である。本明細書において、１つまたは複数の実体によって実施されるものとして説明されている様々な機能は、ハードウェア、ファームウェアおよび／またはソフトウェアによって実施することができる。例えば様々な機能は、メモリーに記憶されたプロセッサー実行命令によって実施することができる。
【００４９】
[0061]図４に示されている構成要素の各々は、例えば図１を参照して説明した計算デバイス１００などの任意のタイプの計算デバイスであってもよい。本発明の範囲内で、任意の数のデータ記憶装置、パーティションサーバー、フロントエンド、ログ、ネットワークおよび／またはメモリーテーブルをシステム４００内に使用することができることを理解されたい。さらに、図には示されていない他の構成要素をシステム４００内に包含することも可能である。
【００５０】
[0062]したがって任意の数の構成要素を使用して、本発明の実施形態の範囲内で所望の機能を達成することができる。図４の様々な構成要素は、簡潔にするために線で示されているが、実際は、様々な構成要素を正確に描写することはそれほど簡潔ではない。さらに、図４のいくつかの構成要素は単一のブロックとして描写されているが、これらの描写の性質および数は例示的なものであり、本発明を制限するものとして解釈してはならない。
【００５１】
[0063]図５を参照すると、本発明の実施形態によるコミット識別（「コミットＩＤ」）５００のブロック図が示されている。コミットＩＤは、複製中におけるデータの連続コミットメントを保証するために利用される識別である。本発明の実施形態はデータの連続通信（つまりデータの受信）が不要であるため、コミットＩＤを利用して、記憶スタンプ内におけるデータの連続コミットメントが保証される。コミットＩＤは、宛先パーティションがその記憶スタンプおよびパーティション範囲に対してジオメッセージ／トランザクション（データ）をいかに遠くへコミットすることができるかを特定することができる。コミットＩＤは、（図５に示されているように）スタンプＩＤ５０２、パーティション番号（＃）５０３、パーティション範囲５０４、エポック番号（＃）５０６および／またはシーケンス番号（＃）５０８を含むことができる。コミットＩＤは、情報のもっと多くの部分またはもっと少ない部分を含むことができることを理解されたい。しかしながら、一例示的実施形態では、コミットＩＤは、少なくともエポック＃およびシーケンス＃を含む。
【００５２】
[0064]結果整合性を有する同期複製方法では、コミットＩＤは別様に構成することができる。例えば結果整合性を有する同期複製モデルでは、二次データ記憶装置に送られるコミットＩＤは、二次データ記憶装置でコミットされるエポック＃およびシーケンス＃の作表からなっていてもよい。したがってコミットＩＤが二次データ記憶装置でＧＭＬに記録されたという肯定応答を一次データ記憶装置が受け取ると、一次データ記憶装置におけるコミットＩＤを、二次データ記憶装置でログに書き込まれたエポック＃およびシーケンス番号まで進めることができる。別の言い方をすると、二次データ記憶装置に送られるコミットＩＤは、同じく１つまたは複数のエポック＃およびシーケンス＃からなっていてもよく、それらを介して二次側がその前のコミットＩＤからコミットしなければならないポイントが識別される。
【００５３】
[0065]パーティションをロードする場合、最新のコミットＩＤを識別することができ、また、未だコミットされていないすべてのトランザクションエポック＃およびシーケンス＃が同じく識別される。識別されたこれらのエポック＃およびシーケンス＃は、コミットＩＤが上で説明したように進められるとコミットされる。
【００５４】
[0066]しかしながら、結果整合性を有する同期複製モデルにおける一次データ記憶装置で記憶されるコミットＩＤの構造は、非同期モデルに使用されるコミットＩＤの構造と類似していてもよいことが企図されている。例えばコミットＩＤは、二次データ記憶装置のログ（例えばＧＭＬ）に書き込まれたエポック＃およびシーケンス＃を介して表すことができる。
【００５５】
[0067]スタンプＩＤ５０２は送信元スタンプの識別子である。例えばスタンプＩＤは、データを二次データスタンプに供給する一次記憶スタンプを独自に識別することができる。パーティション範囲５０４は、一例示的実施形態では、コミット進行を適用すべき送信元キー範囲を表している。しかしながら、パーティションが親の領域でコミットしており、かつ、その領域からトランザクションを送っている場合、パーティション範囲は、送信元パーティションのキー範囲とは異なっていてもよく、あるいはメッセージＩＤ内のパーティション範囲とは異なっていてもよい。
【００５６】
[0068]エポック＃およびシーケンス＃は増加する連続値である。例えばエポック＃は、概念的には章番号と考えることができ、また、シーケンス＃は、個々の新しい章で新たに開始される章のページ番号と考えることができる。したがってエポック＃およびシーケンス＃を利用して特定のトランザクションまたは特定のパーティションを識別することができる。エポック＃５０６は、コミットがやって来る（あるいは関連している）パーティションの例を表している。
【００５７】
[0069]シーケンス＃５０８（ｓｅｑ＃）は、コミットすべき最新の連続トランザクションを表している。これは、二次記憶スタンプに、そのエポック＃およびｓｅｑ＃までのすべてのトランザクションを二次記憶スタンプ上でコミットすることができる、と言っている。エポック＃は、パーティションの分割または併合あるいはパーティションリロードが存在する毎に変化する。ジオメッセージ（例えばデータ）を順序不同および同時に同じ二次データスタンプに送ることができるようにするために、所与のトランザクション（トランザクションＸ）のためのコミットＩＤは、そのジオメッセージに対する肯定応答の後、一次側から二次側に送られ、トランザクションは二次側から受け取り返され、また、トランザクションＸより早いトランザクションを有する他のすべてのジオメッセージに対する肯定応答は二次側から受け取られる。
【００５８】
[0070]コミットＩＤは、一次データスタンプから二次データスタンプに送られるデータを従えることができる。例えば一次側（データスタンプ／記憶装置）から二次側（データスタンプ／記憶装置）に送られる個々のジオメッセージは、一次側からのコミットＩＤを含むことができる。したがって一次側は、二次側でコミットされる所与のコミットＩＤを介してデータを許可する識別子を所与の通信上にピギーバックすることができる。一例示的実施形態では、コミットＩＤは、二次側でＧＭＬに書き込まれた最大の連続トランザクションを表し、一次側は、このトランザクションに対して、ＧＭＬへのトランザクションの書込みに関する肯定応答を受け取り返している。肯定応答は二次側から受け取り返されているため、一次側は、少なくともコミットＩＤを介してデータが二次側の少なくともＧＭＬに維持されることを保証することができる（未だ二次側でコミットされていなくても）。
【００５９】
[0071]しかしながら、二次側によるデータのコミット化の進行を許容するために、コミットＩＤは、コミットＩＤ通信における不活動状態の定義済み時間間隔または定義済み周期で送られることも同じく企図されている。これにより、一次側の送信元パーティションのための最新のコミットＩＤがその送信元パーティションのデータの一部を含むことができる所与の二次側上のすべてのパーティションに送られることが保証される。したがって宛先のパーティションは、ＧＭＬからの再生を待機している懸案トランザクションのコミット化を進行させることができる。図６の例示的ブロック図は、二次側がデータの連続コミットメントのためのコミットＩＤを利用することができる方法の一例を示したものであり、本発明の態様による、コミットＩＤに対する特定のトランザクションの取扱い方法を決定する方法６００が示されている。この例では、ジオメッセージは二次側のＧＭＬに書き込まれ、また、コミットＩＤは、受け取られた後、ＧＭＬから二次側にコミットすべきジオメッセージを決定するために評価されることが仮定されている。
【００６０】
[0072]ブロック６０２で、ジオメッセージのパーティション番号が現在のコミットＩＤより大きいかどうか決定される。例えばジオメッセージは、ジオメッセージの送信元を識別するパーティション＃からなるメッセージＩＤを含むことができる。同様に、ジオメッセージ内のトランザクションは、エポック＃および該エポック＃に関連するシーケンス＃を有することができる。ジオメッセージのパーティション番号がコミットＩＤのパーティション番号より大きい場合、ブロック６０４で示されているようにそのジオメッセージを無視することができる。ここで使用されているように、ジオメッセージの「無視」は、そのジオメッセージがコミットすべき状態ではないことを単に意味しているにすぎない場合がある（先行する連続ジオメッセージが不足している）。一例示的実施形態では、パーティション＃は、二次データ記憶装置が再生のための複製トランザクションを無視することができるよう、パーティションがリロードされる際に使用される。パーティションが一次データ記憶装置にリロードされると、パーティションはそのパーティション＃をインクリメントし、かつ、最後のコミットＩＤからのメッセージの送信を再開する。すべてのジオメッセージは、この例では、そのジオメッセージと共に送られるパーティション＃を有している。また、コミットＩＤも、コミットＩＤを送る時点における現行パーティション＃であるパーティション＃を同じく有している。
【００６１】
[0073]コミットＩＤは、一例示的実施形態では、データを再生する二次データ記憶装置と結合したエンジンである二次再生エンジンに、少なくとも以下を実施するように言っている。（１）より小さいパーティション＃を有するすべてのジオメッセージに対しては、コミットＩＤのエポック＃およびシーケンス＃までのトランザクションのみを再生し、（２）より小さいパーティション＃からのすべての他のトランザクションがより大きいエポック＃／シーケンス＃を有している場合、それらは複製であり、また、一次パーティションから再送されることになるため、これらのトランザクションを無視する。
【００６２】
[0074]しかしながら、ブロック６０２で、ジオメッセージのパーティション番号が現在のコミットＩＤより大きくないことが決定されると、解析はブロック６０６へ進行する。ブロック６０６で、ジオメッセージ内の個々のトランザクションのエポック＃が現在のコミットＩＤより大きいかどうか決定される。トランザクションのエポック＃が現在のコミットＩＤより大きい場合、ブロック６０８で示されているようにこれらのトランザクションを無視することができる。
【００６３】
[0075]しかしながら、ブロック６０６で、トランザクションのエポック＃が現在のコミットＩＤより大きくないことが決定されると、ブロック６１０で、トランザクションのエポック＃がコミットＩＤに等しいかどうか決定される。エポック＃は、パーティションが分割されるか、あるいは併合されると、それに伴って変更することができるため、より小さいエポック＃は、すべてのジオメッセージトランザクションがより大きいエポック番号に先行し、二次側のログ（例えばＧＭＬ）に維持されていることを示している。したがってブロック６１４で示されているように、二次側で維持されている、コミットＩＤのエポック＃より小さいエポック＃を有するすべてのジオメッセージトランザクションが二次側にコミットされる。
【００６４】
[0076]しかしながら、ジオメッセージのエポック番号がコミットＩＤのエポック＃に等しい場合、ブロック６１２で示されているように、個々のトランザクションのシーケンス＃が現在のコミットＩＤのシーケンス＃より大きいかどうか決定される。シーケンス番号がコミットＩＤより大きい場合、そのジオメッセージを無視することができる。しかしながら、ジオメッセージ内のトランザクションのシーケンス＃が現在のコミットＩＤより大きくない場合、同じくブロック６１２で示されているようにトランザクションをコミットすることができる。ブロック６１４で示されているように、コミットＩＤの現在のエポック番号の最大シーケンス＃までのすべてのトランザクションが二次側にコミットされる。
【００６５】
[0077]上記方法は、その性質が例示的なものであるが、結果整合性手法を有する同期複製のための他の方法が企図されている。以下の例示的プロセスは、その性質が図６で説明したプロセスより単純である。この単純性は、一部には、二次側でコミットされるトランザクションをコミットＩＤの作表で示されるトランザクションに限定することによるものである。例えばこの例示的方法では、コミットＩＤの中で示されるエポック＃およびシーケンス＃を有するトランザクションのみが二次データ記憶装置のＧＭＬにコミットされる。
【００６６】
[0078]追加例示的シナリオは、依然としてＧＭＬ内に存在しているトランザクションに関して、「突然のフェールオーバー」時にどうするか、を含む。非同期手法では、一次データ記憶装置から二次データ記憶装置への災害による突然のフェールオーバー時に、ジオメッセージが並列に送られると、それらのすべてを二次側で受け取ることができなかった可能性があり、欠落（不連続番号化）が存在することがある。すべてのジオメッセージが所与のバケット範囲から順を追って受け取られると、フェールオーバーの間、二次データ記憶装置でＧＭＬをフラッシングしている間、現在のコミットＩＤの後から、所与のキー範囲のジオメッセージＩＤ内の欠落まで、これらのジオメッセージをコミットすることができる。これは、ジオメッセージを所与の一次パーティションから並列に送る場合に適用される。顧客は、異なるオブジェクトにわたってトランザクション順序整合性を有するために、ジオメッセージ内の欠落で停止することを希望することができる。単一オブジェクトの場合、一例示的実施形態では、単一オブジェクトに対する更新は、一次側から二次側まで直列化され、かつ、バッチアップ化されているため、ＧＭＬ内のデータには欠落は絶対に生じないことに留意されたい。その場合でも、顧客の中には、オブジェクト全体にわたるこのトランザクション順序に対して注意を払わない顧客も存在している可能性があり、これらの顧客は、災害によって増加する更新の損失を可能な限り回避するために、突然のフェールオーバー時にはＧＭＬからのすべてを再生することのみを希望することができる。
【００６７】
[0079]ここで、結果整合性手法を有する同期複製の場合、トランザクションはコミットされず、一例示的実施形態では、更新がＧＭＬに書き込まれるまで顧客に戻される。これは、突然のフェールオーバー時には、最後のコミットＩＤでコミットを開始し、そのコミットＩＤの後、二次側上のＧＭＬ内に存在しているすべてのトランザクションをコミットすることができることを意味している。これにより、この手法は、災害によるフェールオーバーで二次側が新しい一次側になると、強力な整合性を提供することができる。
【００６８】
[0080]メッセージＩＤおよびコミットＩＤは、上で説明したようにエポック＃およびシーケンス＃を含むことができる。一次データ記憶装置からのパーティションなどの原子パーティションは、エポック＃値およびシーケンス＃値との以下の相互作用を有することができる。一例示的実施形態では、パーティションがロード、分割または併合される毎に、それによって得られるパーティションのために使用されるエポック＃は、親パーティションのための先行するエポック＃より大きくなるように設定される。しかしながら、パーティションが依然としてロードされる場合、パーティションのためのエポック＃を変更しなくてもよいことが企図されている。この例では、エポック番号が変更されると（例えば大きくなると）、必ずシーケンス番号が初期値（例えば０）にリセットされる。さらに、一例示的実施形態では、一次データ記憶装置の更新ログ、ブロックログおよび／またはブロブログに書き込まれるすべてのトランザクションは、エポック＃およびシーケンス＃を含むことができる。次に、順を追った再生を可能にするために、トランザクションに関連するこれらの同じ番号が宛先パーティションで利用される。一次側に必要なことは、二次側に送られる最後のコミットＩＤを追跡し続けることのみであり、これは、メタデータストリーム／ログ内で維持し、あるいは更新／コミットログ内で維持することができる。二次側に送られる最後のコミットＩＤを維持し、かつ、二次側に送られる注釈付きデータを維持することによってのみ、プロセスは、第２のコミットメッセージを二次側に送る必要を防止する。さらに、一次フェールオーバーの場合、一次は、一次側で維持されていた最後のコミットＩＤで始まるジオトランザクションを送ることによって開始することができる。二次データ記憶装置は、パーティション＃によって、より大きいエポック＃を有するトランザクション、及びより大きいシーケンス＃を有する等しいエポック＃を有するトランザクションを除くコミットＩＤまでのすべてを二次データ記憶装置がコミットしなければならないことを示す同じコミットＩＤを新しいパーティション＃と共に送ることができるため、複製トランザクションを無視することができる。これらのトランザクションは、この例ではそれらがリセットされることになるため、無視することができる。
【００６９】
[0081]以上の説明は、一次側がエポック＃およびシーケンス＃を取り扱う方法に的が絞られているが、以下は、一例示的二次側がエポック＃およびシーケンス＃を取り扱うことができる方法に的が絞られている。
【００７０】
[0082]個々の二次パーティションは、一例示的実施形態では、宛先パーティションの範囲内の個々のスタンプＩＤのためのコミットＩＤを表すバケットのリストを維持する（例えば更新ログ、ブロックログ、ページログおよび／またはメタデータストリーム内に維持される）。バケットのこのセットは、この例では、一次スタンプＩＤ毎の、コミットされたパーティション範囲の最も新しい作表、最も新しいコミットＩＤのエポック＃およびシーケンス＃を表している。したがって、個々の宛先パーティションは複数の送信元パーティションから要求を受け取ることができるため、個々のパーティションは、これらのバケットにより、そのパーティションのためのエポック＃およびシーケンス＃を維持することができる（図７に関連して以下で説明するように）。ジオメッセージと共に引き渡すことができるパーティション＃を使用して、送信元パーティションから再送信された可能性のある（例えば送信元パーティションのフェールオーバーによって）ジオメッセージの一部（またはジオメッセージ全体）を無視することができる。二次側によるパーティション＃、エポック＃およびシーケンス＃の追加使用については、図８に関連して以下で説明する。
【００７１】
[0083]図７を参照すると、本発明の実施形態による、一次側７０２から二次側７０４にデータを引き渡すための一例示的システム７００のブロック図が示されている。図７に示されているように、二次側７０４のパーティションは、単一のパーティショまたは複数のパーティションからデータを受け取ることができる。
【００７２】
[0084]一次側７０２は、パーティション１  ７０６およびパーティション２  ７０８からなっている。パーティション１  ７０６は、キー範囲ＡからＭに及ぶデータを含む。パーティション２  ７０８は、ＮからＺまでのキー範囲に及ぶデータを含む。しかしながら、二次側７０４は、キー範囲ＡからＺまでのデータを維持することが意図された３つのパーティションからなっており、したがってこの例では一次側７０２と二次側７０４の間に非並列関係が得られる。二次側は、パーティション３  ７１０、パーティション４  ７１２およびパーティション５  ７１４からなっている。
【００７３】
[0085]パーティション３  ７１０は、ＡからＣまでのキー範囲からのデータを維持することが意図されている。パーティション４  ７１２は、ＤからＰまでのキー範囲のデータを維持することが意図されている。パーティション５  ７１４は、ＱからＺまでのキー範囲のデータを維持することが意図されている。複数の送信元からのデータをコミットするタスクを達成するためにバケット範囲を維持することができる。別の言い方をすると、二次側は、異なる送信元パーティションからの異なるコミットＩＤを追跡し続ける範囲バケットを維持することができる。次に、二次側は、二次側のログ（例えばＧＭＬ）からデータを再生する際に、この範囲バケットを利用してデータを連続的にコミットすることができる。
【００７４】
[0086]範囲バケット化の利用率は、アカウントによって利用されるパーティションの数を少なくするための最適化として使用することができる。例えばアカウントが一次側上の５つのパーティションを利用しており、但しデータを２つのパーティションにコミットすることが可能である場合、二次側は、複製中、２つのパーティション内のアカウントのデータを二次側でコミットすることができる。さらに、範囲バケット化の概念は、二次側のＧＭＬが送信元についていけない状況で実施することができる。この状況では、二次側の宛先パーティションが、個々の二次側における後の再生を容易にするために、範囲バケット化を利用して、複数のパーティション間のデータを代わって分割することができる。この例では、使用される二次パーティションの各々は、それぞれ独自のＧＭＬを有することができ、単一ＧＭＬの負担が軽減される。
【００７５】
[0087]例えば二次データ記憶装置が過剰な負荷を有している場合、パーティションの分割を決定しなければならない。この決定には、一次データ記憶装置から受け取った範囲を適切な分割位置に関するインディケータとして利用することができる。
【００７６】
[0088]図８を参照すると、本発明の態様による非同期ジオ複製のプロセスフロー８００のブロック図が示されている。プロセスフロー８００は、この例では、クライアント８０２、一次データスタンプ（一次側）８０４および二次データスタンプ（二次側）８０６の間で生じる。追加実体、機械、構成要素、アプリケーション、サービス、等々をプロセスフローに組み込んで非同期地理的複製を実現することができることを理解されたい。
【００７７】
[0089]クライアント８０２は一次側８０４にデータ８０８を送る。既に説明したように、クライアント８０２は、データをコミットするための一次ジオ位置として一次側８０４を利用するために割り当てられているアカウント、あるいはデータをコミットするための一次ジオ位置として利用するために選択したアカウントに結合することができる。一次８０４は、ＸＦＥを利用して、データ８０８が一次側８０４のために意図されていることを検証することができる。一次側８１０は、データ８０８を受け取ると、そのデータ８０８をログ（またはストリーム）に書き込むことができる。一次側８０４は、別法（または追加）として、データ８０８を一次側８０４にコミットすることも可能である。データ８０８のコミットメントは、一次側８０４のメモリーテーブル８１０およびログ８１２（順序は任意）へのデータ８０８の維持を含むことができる。
【００７８】
[0090]一例示的実施形態では、データが一次側８０４のログまたは他のデータストリームに書き込まれると、成功の肯定応答８１４をクライアント８０２に戻すことができる。一追加例示的実施形態では、データ８０８が一次側８０４にコミットされると、肯定応答８１４がクライアント８０２に提供される。
【００７９】
[0091]二次ジオ位置へのデータの実際のコミットメントに先立って成功肯定応答をクライアント８０２に提供することにより、データがクライアントから送られてから成功の確認を受け取るまでの間の経過時間を短縮することができる。しかしながら、以下でより詳細に説明するように、データが一次側および二次側の両方に少なくとも書き込まれてから（全コミットメントの場合とは異なり）成功肯定応答をクライアントに送り返す同期ジオ複製方法を実施することも可能である。同期ジオ複製には、場合によっては、データがクライアントから送られてから成功の肯定応答を一次側（または二次側）から受け取るまで間のより長い待ち時間が必要である。
【００８０】
[0092]図８に戻ると、一次側８０４は、成功肯定応答８１４を提供すると、ジオメッセージ８１６を二次側８０６に送る。一例示的実施形態では、ジオメッセージは、ジオ注釈付き記録（「ＧＡＲ」）などの記録を使用して注釈が付けられたデータ８０８である。他の例示的実施形態では、ジオメッセージは、特定のジオ位置、スタンプおよび／またはパーティションのためのジオメッセージを形成するためにバッチされたトランザクションの集合（送られるデータのグループ化の集合）である。ジオメッセージは、そのジオメッセージを独自に識別するメッセージＩＤを含むことができる（例えばエポック＃およびシーケンス＃）。さらに、ジオメッセージは、一次側８０４からのコミットＩＤを含むために他の注釈を付けることも可能である。
【００８１】
[0093]一例示的実施形態では、ＧＡＲは、二次スタンプのパーティション上でログを再生／実行するために使用されることになるトランザクションログと共に記憶された追加情報である。トランザクション毎に記憶された１つのＧＡＲを存在させることができる。トランザクションのための最終コミットログエントリーと共に、トランザクションを構築している多くのログエントリーを存在させることができる。その場合、トランザクションのためのＧＡＲは、最終コミットログエントリーと共に記憶することができる。この情報は、（ａ）元のトランザクションが何であったか（例えばＰｕｔ  Ｂｌｏｃｋ、Ｐｕｔ  Ｂｌｏｃｋ  Ｌｉｓｔ、等々）であって、トランザクションを適切に再生する方法を決定し、かつ、事柄を宛先に結合するために使用される、および（ｂ）宛先でトランザクションを再実行するための追加情報（例えばブロックがコミットされたリストからきたものであるか、あるいはコミットされていないリストからきたものであるかを示す最終ブロックリストであるＰｕｔ  Ｂｌｏｃｋ  ＬｉｓｔのためのＬａｓｔ  Ｍｏｄｉｆｉｅｄ  Ｔｉｍｅ）が含まれていることを示すことができる。ＧＡＲは、その最も基本的な形態では、一次側上で実施すべきすべての入力トランザクションを含むことができるが、二次側上でそのトランザクションを完全に、かつ、決定論的に再生するためには十分な情報が含まれていなければならず、そのためにはトランザクションのタイプに応じて、ＧＡＲのためのより多くの情報が記憶されていなければならない。例えばこの情報は、トランザクションを実行している間に計算される、タイムスタンプおよびＥＴａｇなどの結果を含むことができる。さらに、ＧＡＲは、一次ログに書き込まれ、かつ、すべてのジオトランザクションと共に二次側に送られるトランザクションキー記録を含むことも可能である。この記録は、トランザクションのキーおよびジオトランザクションｉｄ（例えば一次側からのエポック＃およびｓｅｑ＃）を含むことができる。
【００８２】
[0094]パーティションサーバー上で実行されるトランザクションは、３つの例示的ログストリーム（例えば更新ログ、ブロックログおよびページログ）のうちの１つに書き込まれた１つまたは複数の記録を有している。パーティションが負荷平衡化あるいはノード故障のために他のノード（例えばデータ記憶装置）にリロードされると、ログを使用してトランザクションを再生し、それによりメモリーテーブルを再生成することができる。したがってジオ複製には、場合によっては、パーティションをジオ複製の送信元にさせるための追加ログストリームはパーティションに不要である。これは、一部には、生ジオ複製（およびブートストラップジオ複製のためのＦｉｌｅ  Ｔａｂｌｅ）のために、ジオトランザクションをＵｐｄａｔｅ／Ｂｌｏｃｋ／Ｐａｇｅログからパッケージすることができることによるものである。
【００８３】
[0095]ジオ複製の場合、ＧＡＲは、既存のログストリーム内のトランザクションに追加することができる。このＧＡＲは、そのログに既に書き込まれている内容と共に、ジオ複製のために二次記憶スタンプ上でのトランザクションの再実行／再生に必要な追加情報を含むことができる。しかしながら、ＧＡＲは、一次側でログを再生するための手段を有していなくてもよい。その代わりに、ＧＡＲは、それらを二次記憶スタンプに引き渡し、それにより二次スタンプでトランザクションを再実行／再生する方法を特定することができるようにそこに存在している。さらに、ＧＡＲの一部は、それをログに記憶する代わりに、ログに既に存在している情報から動的に生成することも可能である。その場合、ＧＡＲは、必要な条件および特殊な値と共に生成され、また、それを二次側に送る前にジオメッセージに加えられる。
【００８４】
[0096]ジオメッセージは、一例示的実施形態では、１）メッセージフォーマットバージョン、２）そのメッセージが圧縮されているか否かを示すための欄、３）メッセージアカウント部分（これは、ジオメッセージが表している記憶アカウント名称のリストであってもよい）を含むことができる。これらのアカウント名称は、ＸＦＥによってその妥当性を検証し、これらのアカウントが、そのメッセージが届いたスタンプで二次側としてマークされることを保証することができる。また、ジオメッセージは、４）テーブル名称、５）テーブルバージョン（テーブルのスキーマ名称）、６）ログ記録バージョン（メッセージ内のトランザクションログ記録のバージョン番号）、７）そのメッセージがファンアウトのために意図されたものであるか否かを示すための欄を同じく含むことができ、ファンアウトは、送信元パーティションによって表されたパーティション範囲に対して、このメッセージを二次側上のすべての目標パーティションに送ることを意味している。ファンアウトが明記されていない場合、ジオメッセージに明記されている記憶アカウントと共に、二次側上の目標のみにそのジオメッセージを送ることができる。
【００８５】
[0097]また、ジオメッセージは、８）メッセージＩＤ（これは、このパーティションから所与の記憶スタンプへ向かうジオトランザクションのグループを表している）からなっていてもよい。メッセージＩＤは、ａ）スタンプＩＤ（送信元スタンプ）、ｂ）パーティション＃（これは、パーティションの所与の実行インスタンスから送られるすべてのメッセージを識別するために使用される）を含むことができる。これは、とりわけ、パーティションリロードの問題を取り扱い、また、新しいジオトランザクションは、別様にパッケージして二次パーティションに再送することができるという事実、およびパーティション＃を使用して、これが可能性としていつ発生するかが二次側で決定されるという事実を取り扱うために使用される。また、メッセージＩＤは、ｃ）パーティション範囲（メッセージ内のトランザクションのためのパーティションキー範囲）からなっていてもよい。
【００８６】
[0098]また、ジオメッセージは、９）コミットＩＤ（既に説明したように、これは、送信元パーティションからどのエポック＃およびｓｅｑ＃までを二次側でのコミットメントのためと見なすことができるかを表す情報を含むことができる）からなっていてもよい。
【００８７】
[0099]また、ジオメッセージは、１０）個々の全く異なるパーティションキーのためのバッチからなっていてもよい。これは、トランザクションのバッチセットをこのジオメッセージの一部として表すことができる。一組のジオトランザクションをまとめて実施しなければならない場合、それらを同じバッチ内にすることができる。それは、すべてのバッチをジオメッセージのための宛先テーブルサーバーの各々に送る必要がない場合に（範囲に基づいて）、ＸＦＥが複数の異なるテーブルサーバーにわたってジオメッセージを分割することができるバッチのレベルである。個々のバッチは、ａ）パーティションキー、ｂ）このパーティションキーのための記録バッファー内の記録オフセットおよびサイズ、およびｃ）ジオトランザクションＩＤのリスト、およびトランザクションを再生するために使用され、また、それらをいつ二次側上でコミットすることができるかを示すために使用されるそれらのキー情報であって、１．パーティション範囲（バッチのためのパーティション範囲）、２．エポック＃（バッチ内のすべてのジオトランザクションは同じエポック＃を有していなければならない）、３．Ｓｅｑ＃（このバッチ内のジオトランザクション毎にＳｅｑ＃が存在している）を含むことができる。さらに、ジオメッセージは、１１）メッセージ内のトランザクションのためのデータログ記録からなっていてもよい。
【００８８】
[00100]図８に戻ると、ジオメッセージ８１６が二次側８０６に送られる。二次側８０６の宛先パーティションは、順序不同（不連続で）で送られてくるジオメッセージを見ることができる。しかしながら、ジオトランザクションを二次側８０６のＧＭＬから再生する際に、宛先パーティションで順序正しいコミットを強制することができる。ジオトランザクションのためのメッセージＩＤ内に提供されるエポック＃およびｓｅｑ＃は、順序正しいコミットを提供するために使用される。さらに、宛先パーティションは、欠落のあるシーケンス番号を受け取ることがあり、いつコミットするかを知る必要がある。欠落は、送信元パーティションがＮ個の異なる宛先パーティションにトランザクションを送る場合に生じることがあり、したがってすべての宛先パーティションがすべてのトランザクションを所与の送信元から受け取らない。Ｃｏｍｍｉｔ  ＩＤと共に含まれるＳｔａｍｐ  ＩＤ／Ｐａｒｔｉｔｉｏｎ  Ｒａｎｇｅ／Ｅｐｏｃｈ＃／Ｓｅｑ＃は、宛先パーティションがその二次側およびパーティション範囲に対してジオメッセージ／トランザクションをいかに遠くへコミットすることができるかを特定する。
【００８９】
[00101]二次側８０６は、次に、ジオメッセージ８１６のデータをログ８１８に書き込むことができる。一例示的実施形態では、ログは、二次側８０６のパーティションのためのＧＭＬである。パーティションに入力されるすべてのジオメッセージは、パーティションのジオメッセージログに記憶される。新しいジオメッセージが二次側８０６に到着すると、そのジオメッセージがＧＭＬに記憶され、この例では成功が二次側８０６のＸＦＥに戻される。ジオメッセージは、ジオトランザクションのコミット化を進めることができるか否かを示すＣｏｍｍｉｔ  ＩＤを含むことができる。Ｃｏｍｍｉｔ  ＩＤのシーケンス番号より小さいシーケンス番号を有するジオメッセージはコミットすることができ、また、これらのメッセージは、既に説明した注釈情報を使用して二次側８０６上で再生される。二次側８０６上での再生中、この例では、更新する必要のあるすべての値と共に、対応するログ記録がＵｐｄａｔｅ  Ｌｏｇ、Ｂｌｏｃｋ  Ｌｏｇおよび／またはＰａｇｅ  Ｌｏｇのいずれかに記憶される。
【００９０】
[00102]引き続いてこの例について説明すると、トランザクションがＧＭＬから再生される場合、トランザクションは、適切に更新された欄（例えばＴＢＬポインターおよびＣＢＬポインター）と共に対応するＵｐｄａｔｅ／Ｂｌｏｃｋ／Ｐａｇｅログに再生される。個別のＧＭＬを使用して開始する（既存のログを使用する場合とは異なり）利点は、すべてのジオメッセージ情報がＧＭＬ内に厳密に含まれることである。次に、データのジオ再生が宛先パーティションで実施されると、すべてがトランザクションのためのＵｐｄａｔｅ／Ｂｌｏｃｋ／ＰａｇｅログおよびＭｅｍｏｒｙ  Ｔａｂｌｅに存在し、また、これらのログまたはその情報の再生を取り扱うために論理を修正する必要はない。したがって、とりわけパーティション再生ログは、パーティションが二次位置でリロードされる際に高速パーティション負荷時間を有するよう、小さい状態を維持することができるため、ＧＭＬからのジオメッセージの再生と、そのログからのパーティション再生ログ論理との分離が維持される。
【００９１】
[00103]この例では、ＧＭＬからＵｐｄａｔｅ／Ｂｌｏｃｋ／ＰａｇｅログおよびＭｅｍｏｒｙ  Ｔａｂｌｅへの再生により、更新が生成されてＧＭＬのための「消費済み」記録が進行する前に、データがパーティションの生状態にコミットされる。したがってパーティションを二次側８０６にリロードする際に（例えば故障時に）、ＧＭＬからの再生開始点を決定しなければならない。再生開始点は、それらを再生している間にＵｐｄａｔｅ／Ｂｌｏｃｋ／Ｐａｇｅログに記憶されるジオトランザクションと共に「Ｃｏｎｓｕｍｅｄ  ＩＤ」を記憶することによって決定される。このＣｏｎｓｕｍｅｄ  ＩＤは、ＧＭＬから再生された最後のジオトランザクションのＳｔａｍｐ／ＰａｒｔｉｔｉｏｎＫｅｙＲａｎｇｅ／Ｅｐｏｃｈ／Ｓｅｑｕｅｎｃｅ＃を含むことができる。しかしながら、トランザクション記録は適切なキーを識別することができるため、パーティションキー範囲は記憶しなくてもよいことが企図されている。さらに、チェックポイントが実施される毎にＧＭＬに潜在的に記憶されるパーティションのキー範囲の所与の部分のための最大Ｃｏｎｓｕｍｅｄ  ＩＤを維持することも可能である。チェックポイント記録に対するポインターは、メタデータストリームに記憶することができる。ＧＭＬ内の最後のポイントからの再生成は、チェックポイントに記憶されている、また、Ｕｐｄａｔｅ／Ｂｌｏｃｋ／Ｐａｇｅログからの再生時に見出されるＣｏｎｓｕｍｅｄ  ＩＤから最大Ｃｏｎｓｕｍｅｄ  ＩＤを取ることによって達成することができる。
【００９２】
[00104]図８に戻ると、データがログ８１８に書き込まれると、二次側８０６（例えばＸＦＥによって）は、データが書き込まれたこと（あるいはコミットされたこと）を知らせる肯定応答８２０を一次側８０４に送ることができる。肯定応答８２０は、どのエポック＃およびｓｅｑ＃が二次側８０６に書き込まれたのかを識別するために、ジオメッセージ８１６に関連するメッセージＩＤを含むことができる。一次側は、次に、コミットＩＤ８２２を更新することができる。最終的には、後続するジオメッセージの一部として、あるいはファンアウトタイプのメッセージの結果として、更新済みコミットＩＤ８２２を二次側８０６に送り、それによりＧＭＬに維持されているより大量のデータを二次側８０６でコミットすることができる。
【００９３】
[00105]図９を参照すると、本発明の態様による、結果整合性方法を有する同期複製のための時間的な流れを示すブロック図９００が示されている。図８に関連して説明した構成要素と同様、線図９００は、クライアント９０２、一次側９０４および二次側９０６からなっている。
【００９４】
[00106]図８に関連して説明した例示的非同期方法とは対照的に、同期ジオ複製は、データが二次側９０６および一次側に少なくとも書き込まれると、肯定応答のみをクライアント９０４に送り返す。これは、図１０の一例示的方法で説明する、データが二次側にコミットされた後に肯定応答をクライアントに提供する強力な整合性を使用した同期複製とはさらに対照的である。
【００９５】
[00107]クライアント９０２はデータ９０８を一次側９０４に送る。一次側９０４は、データ９０８を受け取ると、受け取ったデータを後のコミットメントのために１つまたは複数のログに書き込むことができる（図示されていない）。さらに、既に説明したように、一次側９０４は、１つまたは複数の記録、情報および／または識別子を使用してデータ９０８に注釈を付けることができる。例えばデータ９０８は、ジオ複製プロセス（例えば二次側９０６における再生）のために使用することができるメッセージＩＤ、コミットＩＤ、ＧＡＲおよび／または追加情報を含むことができる。
【００９６】
[00108]一次側９０４はジオメッセージ９１０を二次側９０６に送る。ジオメッセージはデータ９０８からなっていてもよい。また、ジオメッセージは、離散トランザクションなどのデータの１つまたは複数の追加部分からなっていてもよい。さらに、ジオメッセージ９１０は、ジオメッセージ９１０に関連するメッセージＩＤ、エポック＃およびシーケンス＃を識別するコミットＩＤから同じくなることが企図されており、二次側９０６は、コミットＩＤを介してコミットすることができる。
【００９７】
[00109]二次側９０６は、ジオメッセージ９１０を受け取ると、ジオメッセージ９１０の関連するデータを適切なログ９１２に書き込む。例えば二次側９０６のＸＦＥは、二次側９０６内の、ジオメッセージのデータを書き込むべき特定のパーティションを識別することができる。二次側９０６の特定のパーティションが決定されると、次に、ジオメッセージのデータ関連部分を二次側９０６のその識別されたパーティションのＧＭＬに書き込むことができる。
【００９８】
[00110]さらに、二次側９０６は、ジオメッセージ９１０と共に受け取られたコミットＩＤを検査することができる（図示せず）。コミットＩＤは、この例では、一次側は、ジオメッセージ９１０が二次側９０６でログに書き込まれたという肯定応答をまだ受け取らなければならないため、ジオメッセージ９１０に特化されたエポック＃およびシーケンス＃を含んでいない。したがってジオメッセージ９１０と共に受け取ることができるコミットＩＤは、ジオメッセージ９１０に関連する個々の値より小さいエポック＃および／またはシーケンス＃を有することになる。
【００９９】
[00111]図に示されている例示的方法に戻ると、二次側９０６は、ジオメッセージ９１０のデータが二次側９０６の１つまたは複数ログに首尾よく書き込まれたことを示す肯定応答９１４を送る。一例示的実施形態では、二次側９０６のＧＭＬは、データが首尾よく書き込まれたことを示す指示をＸＦＥに提供する。二次側９０６のＸＦＥは、次に、肯定応答を一次側９０４に提供する役割を果たすことができる（図４に関連して上で説明した例示的方法と同様）。
【０１００】
[00112]一次側９０４は、肯定応答９１４を受け取ると、一次側でデータをコミット９１６する。既に説明したように、データのコミット化には、一次側９０４のログへのデータの書込み、ならびに関連するエントリーを使用したメモリーテーブルの埋込みの許容を含むことができ、メモリーテーブルを埋め込むことにより、要求側クライアントはデータをアクセスすることができる。一例示的実施形態では、ログに書き込まれたデータは、要求側クライアントが直接アクセスすることができるコミットされたデータとは異なり、要求側クライアントが直接アクセスすることはできない。
【０１０１】
[00113]一次側９０４は、データが一次側９０４でコミットされたことを確認すると、成功の肯定応答９１８をクライアント９０２に送り返す。肯定応答９１８は、この例では、データ９０８が一次側９０４にコミットされ、また、少なくともデータ９０８が二次側９０６のログに書き込まれたことを示している。肯定応答９１８は、このような情報を明確に、あるいは暗に示すことができる。
【０１０２】
[00114]一次側は、それと同時に、肯定応答９１８の通信に先立って、あるいは通信した後に、コミットＩＤ９２０を二次側９０６に送ることができる。コミットＩＤ９２０は、二次側から肯定応答９１４を受け取った結果として更新された更新済みコミットＩＤであってもよい。既に説明したように、コミットＩＤ９２０などのコミットＩＤは、ジオメッセージと共に二次側に送ることができ、あるいはコミットＩＤは、ファンアウトタイプのメッセージの結果としてであってもよい（例えば定義済み時間継続期間の満了）。
【０１０３】
[00115]二次側９０６は、コミットＩＤまでの連続メッセージＩＤを有する、ＧＭＬなどのログに維持されているデータをコミットする。既に説明したように、二次側は、関連するメッセージＩＤに基づいてデータを順次コミットすることができる。したがってコミットＩＤまでのログに維持されているメッセージＩＤ間にギャップが存在する場合、連続メッセージＩＤ内のギャップまでであるメッセージＩＤに関連するデータのみがコミットされる。
【０１０４】
[00116]結果整合性手法を有する同期複製の一例示的実施形態は以下の通りである。結果整合性手法によれば、一次データ記憶装置は強力な整合性を提供することができる。したがって二次データ記憶装置が災害復旧のためにのみ使用される場合、それは、一次側が生きている限り、二次データ記憶装置から読み取られることはないことを意味しており、この手法は、災害復旧フェールオーバー後、強力な整合性を提供するために使用することができる。二次データ記憶装置に対するフェールオーバーの場合、この例では、二次データ記憶装置上での読取りが許容されるまでには、強力な整合性を保証することができる。これは、この例示的実施形態では、フェールオーバーの後、最終フラッシュが二次側上に生じるまでの間、二次側上のデータのアクセスを許容しないことによって実施される。他の例示的実施形態によれば、一次側が依然として生きている間、二次データ記憶装置を読み取ることができる。一次データ記憶装置が生きている間、二次データ記憶装置の読取りが許容されるアプリケーションは、これらのアプリケーションが結果整合性を獲得することができる二次データ記憶装置にそれらがいつアクセスするかを知る。しかしながら、一次データ記憶装置は、常に強力な整合性でアクセスされる。フェールオーバーの後、古い二次側は新しい一次側になり、古い一次側との整合性を強力にするために残りのトランザクションのフラッシュがＧＭＬから二次側で生じているため、強力な整合性が維持される。
【０１０５】
[00117]図１０を参照すると、本発明の態様による、強力な整合性方法を有する一例示的同期複製のブロック図１０００が示されている。この場合も線図１０００は、クライアント１００２、一次側１００４および二次側１００６を含む。
【０１０６】
[00118]クライアント１００２はデータ１００８を一次側１００４に送る。一次側１００４はそのデータを解析し、一次側１００４内に維持されているそのデータに関連するオブジェクトを決定する。一次側１００４は、データ１００８に関連する１つまたは複数のオブジェクトを決定すると、その関連するオブジェクト１０１０を一次側１００４内にロックする。オブジェクト１０１０のロックは、クライアントによるそのオブジェクトのアクセスの防止、そのオブジェクトへの書込みの防止（後に書き込まれるデータ１００８とは異なる）、オブジェクトの読取りの防止、等々を含むことができる。別法としては、オブジェクトのロックは、単にトランザクションがそのオブジェクトと共に未決定のままであることを識別しているにすぎない。
【０１０７】
[00119]一次側１００４は、オブジェクト１０１０をロックすると、ジオメッセージ１０１２を二次側１００６に送る。ジオメッセージ１０１２は、様々な情報の中でもとりわけデータ１００８を含むことができる。既に説明したようにジオメッセージ１０１２は、データ１００８、メッセージＩＤ、コミットＩＤ、ＧＡＲおよびジオ複製を容易にする他の情報からなっていてもよい。
【０１０８】
[00120]二次側１００６は、データ１００８に関連するオブジェクトの読取りおよびオブジェクトへの書込みを阻止する。二次側は、データ１００８に関連する１つまたは複数のオブジェクトを自由に識別することができ（一次側１００４によって実施されるプロセスと同様）、あるいは二次側は、一次側１００４からのジオメッセージ１０１２の一部として、データ１００８に関連する１つまたは複数のオブジェクトに関する指示を受け取ることができる。二次側１００６は、オブジェクト１０１４の読取りを阻止すると、肯定応答１０１６を一次側１００４に送る。肯定応答１０１６は、ログへのデータ１００８の書込みに成功したこと、オブジェクト１０１４の読取り／オブジェクト１０１４への書込みの阻止に成功したこと、および／またはジオメッセージ１０１２のためのメッセージＩＤの指示を含むことができる。
【０１０９】
[00121]この例示的方法では、以下で説明するように、一次側は、二次側がデータの同様の部分をコミットする前に、データの所与の部分をコミットする。しかしながら、二次側は、一次側に先立ってデータをコミットすることができ、それにより一次側と二次側の間で送られる１つまたは複数の肯定応答を少なくするか、あるいは少なくとも変更することができることを理解されたい。一例示的実施形態では、一次側は、クライアントによって要求されるデータの第１の送信元であるため、二次側でのデータのコミットに先立って一次側でデータをコミットすることが有利であり、したがって関連するオブジェクトをロック（または阻止）することができる間に、データを最初に一次側にコミットすることにより、最も新しい情報を都合の良いときに一次側で確実に利用することができる。本明細書においては合理的な追加が企図されている。
【０１１０】
[00122]図１０に戻ると、一次側は、肯定応答１０１６を受け取ると、データ１００８に関連するオブジェクトの読取りを阻止１０１８する。一次側１００４は、オブジェクトの読取りを阻止すると、データ１００８を一次側１００４にコミット１０２０する。一次側１００４は、データ１００８をコミット１０２０すると、ジオメッセージ１０１２に関連するデータをコミットするための命令１０２２を二次側１００６に送る。命令１０２２は、その前にジオメッセージ１０１２に関連していたメッセージＩＤを含むことができる。この例示的方法では、データは強力な整合性でコミットされているため、コミットＩＤを利用することができず、その前のトランザクションの成功を受け取るまでは、オブジェクトに対する後続する更新を実行することができないことを意味している。
【０１１１】
[00123]二次側１００６は、データをコミットする命令１０２２を受け取ると、データをコミット１０２４する。二次側１００６は、次に、阻止を解除し、要求側クライアントによるオブジェクトの読取りを許容１０２６する。オブジェクトの阻止が解除されると、二次側１００６は、オブジェクトが読取り可能になったこと（したがってデータがコミットされたこと）を示す肯定応答１０２８を一次側１００４に送る。また、一次側１００４は、肯定応答１０２８を受け取ると、要求側クライアントによるオブジェクトの読取りを許容１０３０する状態にオブジェクトが置かれるよう、オブジェクトの阻止を同じく解除する。一次側１００４および二次側１００６がデータ１００８に関連するオブジェクトの読取りを許容すると、一次側１００４は、データ１００８がコミットされ、かつ、ジオ複製されたこと（強力な整合性で）を示す肯定応答１０３２をクライアント１００２に送る。
【０１１２】
[00124]非同期複製のため、および同期複製のための例示的実施形態についての一般的な概要を紹介した以上は、以下が提供される。一例示的実施形態では、非同期複製は、修正されると一次データ記憶装置で「コミットされる」データを考慮し、データがコミットされると肯定応答をクライアントに送ることができる。一次データ記憶装置で修正されるこのデータは、次に、記憶アカウントの二次ジオ位置に背景の中で緩慢に複製することができる。この例では、複製は、環境内における待ち時間を短くするために、一次側が書き込むクリティカルパス外で生じる。しかしながら、災害が発生し、一次データ記憶装置が失われると、一次側における記憶アカウントに対する新しい更新も同じく失われることになる。より高いレベルの信用を提供するために、同期複製は、クライアントに肯定応答を提供する前にデータが一次データ記憶装置および二次データ記憶装置に書き込まれることを保証する。したがって災害によって一次データ記憶装置が影響を受けても、依然としてデータにアクセスすることができるが、同期複製の代償としてより長い待ち時間を伴う。
【０１１３】
[00125]一次側９０４はジオメッセージ９１０を二次側９０６に送る。ジオメッセージはデータ９０８からなっていてもよい。また、ジオメッセージは、離散トランザクションなどのデータの１つまたは複数の追加部分からなっていてもよい。さらに、ジオメッセージ９１０は、ジオメッセージ９１０に関連するメッセージＩＤ、エポック＃およびシーケンス＃を識別するコミットＩＤから同じくなることが企図されており、二次側９０６は、コミットＩＤを介してコミットすることができ、かつ、トランザクションエポック＃およびシーケンス＃の正確なリストをコミットＩＤの最後の変化からコミットすることができる。
【０１１４】
[00126]二次側９０６は、ジオメッセージ９１０を受け取ると、ジオメッセージ９１０の関連するデータを適切なログ９１２に書き込む。例えば二次側９０６のＸＦＥは、二次側９０６内の、ジオメッセージのデータを書き込むべき特定のパーティションを識別することができる。二次側９０６の特定のパーティションが決定されると、次に、ジオメッセージのデータ関連部分を二次側９０６のその識別されたパーティションのＧＭＬに書き込むことができる。
【０１１５】
[00127]さらに、二次側９０６は、ジオメッセージ９１０と共に受け取られたコミットＩＤを検査することができる（図示せず）。コミットＩＤは、この例では、一次側は、ジオメッセージ９１０が二次側９０６でログに書き込まれたという肯定応答をまだ受け取らなければならないため、ジオメッセージ９１０に特化されたエポック＃およびシーケンス＃を含んでいない。したがってジオメッセージ９１０と共に受け取ることができるコミットＩＤは、ジオメッセージ９１０に関連する個々の値より小さいエポック＃および／またはシーケンス＃を有することになる。
【０１１６】
[00128]図に示されている例示的方法に戻ると、二次側９０６は、ジオメッセージ９１０のデータが二次側９０６の１つまたは複数ログに首尾よく書き込まれたことを示す肯定応答９１４を送る。一例示的実施形態では、二次側９０６のＧＭＬは、データが首尾よく書き込まれたことを示す指示をＸＦＥに提供する。二次側９０６のＸＦＥは、次に、肯定応答を一次側９０４に提供する役割を果たすことができる（図４に関連して上で説明した例示的方法と同様）。
【０１１７】
[00129]一次側９０４は、肯定応答９１４を受け取ると、一次側でデータをコミット９１６する。既に説明したように、データのコミット化には、一次側９０４の１つまたは複数の追加ログへのデータの書込み、ならびに関連するエントリーを使用したメモリーテーブルの埋込みの許容を含むことができ、メモリーテーブルを埋め込むことにより、要求側クライアントはデータをアクセスすることができる。一例示的実施形態では、ログに書き込まれたデータは、要求側クライアントが直接アクセスすることができるコミットされたデータとは異なり、要求側クライアントが直接アクセスすることはできない。
【０１１８】
[00130]一次側９０４は、データが一次側９０４でコミットされたことを確認すると、成功の肯定応答９１８をクライアント９０２に送り返す。肯定応答９１８は、この例では、データ９０８が一次側９０４にコミットされ、また、少なくともデータ９０８が二次側９０６のログに書き込まれたことを示している。肯定応答９１８は、このような情報を明確に、あるいは暗に示すことができる。
【０１１９】
[00131]一次側は、それと同時に、肯定応答９１８の通信に先立って、あるいは通信した後に、コミットＩＤ９２０を二次側９０６に送ることができる。コミットＩＤ９２０は、二次側から肯定応答９１４を受け取った結果として更新された更新済みコミットＩＤであってもよい。既に説明したように、コミットＩＤ９２０などのコミットＩＤは、ジオメッセージと共に二次側に送ることができ、あるいはコミットＩＤは、ファンアウトタイプのメッセージの結果としてであってもよい（例えば定義済み時間継続期間の満了）。
【０１２０】
[00132]二次側９０６は、ＧＭＬなどのログに維持されているデータをコミットする。一次側から送られるコミットＩＤは、ＧＭＬからコミットするために、コミットＩＤが最後に変化した後のトランザクションのリストを含むことができる。コミットＩＤは、既に説明したように、コミットＩＤのための上側の閾値エポック＃およびシーケンス＃を含み、また、コミットＩＤは、コミットされるトランザクション毎にそのエポック＃およびシーケンス＃を同じく含む。これにより、ＧＭＬからの再生は、再生／コミットする正確なトランザクションおよび無視するトランザクションを知ることができる。図９に関連して説明した手法の場合、トランザクションは、それらが一次側上でコミットされる前に、最初に二次側ＧＭＬに書き込まれるため、これは重要である。これは、二次側ＧＭＬが、一次側がジオメッセージを二次側に送った後の一次パーティションの故障のために、一次側上では決してコミットされないそのジオメッセージの一部として書き込まれるトランザクションを有することができることを意味している。最後のコミットＩＤからコミットするために、コミットＩＤが進む毎に正確なトランザクションを二次パーティションに同じく送るのはそのためである。
【０１２１】
[00133]図１０を参照すると、本発明の態様による、強力な整合性方法を有する一例示的同期複製のブロック図１０００が示されている。この場合も線図１０００は、クライアント１００２、一次側１００４および二次側１００６を含む。
【０１２２】
[00134]クライアント１００２はデータ１００８を一次側１００４に送る。一次側１００４はそのデータを解析し、一次側１００４内に維持されているそのデータに関連するオブジェクトを決定する。一次側１００４は、データ１００８に関連する１つまたは複数のオブジェクトを決定すると、その関連するオブジェクト１０１０を一次側１００４内にロックする。オブジェクト１０１０のロックは、クライアントによるそのオブジェクトのアクセスの防止、そのオブジェクトへの書込みの防止（後に書き込まれるデータ１００８とは異なる）、オブジェクトの読取りの防止、等々を含むことができる。別法としては、オブジェクトのロックは、単にトランザクションがそのオブジェクトと共に未決定のままであることを識別しているにすぎない。
【０１２３】
[00135]一次側１００４は、オブジェクト１０１０をロックすると、ジオメッセージ１０１２を二次側１００６に送る。ジオメッセージ１０１２は、様々な情報の中でもとりわけデータ１００８を含むことができる。既に説明したようにジオメッセージ１０１２は、データ１００８、メッセージＩＤ、ＧＡＲおよびジオ複製を容易にする他の情報からなっていてもよい。
【０１２４】
[00136]二次側１００６は、データ１００８に関連するオブジェクトの読取りを阻止する（この例示的実施形態では、二次側１００６は読取り専用データ記憶装置であるため）。二次側は、データ１００８に関連する１つまたは複数のオブジェクトを自由に識別することができ（一次側１００４によって実施されるプロセスと同様）、あるいは二次側は、一次側１００４からのジオメッセージ１０１２の一部として、データ１００８に関連する１つまたは複数のオブジェクトに関する指示を受け取ることができる。二次側１００６は、オブジェクト１０１４の読取り／オブジェクト１０１４への書込みを阻止すると、肯定応答１０１６を一次側１００４に送る。肯定応答１０１６は、ログへのデータ１００８の書込みに成功したこと、オブジェクト１０１４の読取り／オブジェクト１０１４への書込みの阻止に成功したこと、および／またはジオメッセージ１０１２のためのメッセージＩＤの指示を含むことができる。
【０１２５】
[00137]この例示的方法では、以下で説明するように、一次側は、二次側がデータの同様の部分をコミットする前に、データの所与の部分をコミットする。しかしながら、二次側は、一次側に先立ってデータをコミットすることができ、それにより一次側と二次側の間で送られる１つまたは複数の肯定応答を少なくするか、あるいは少なくとも変更することができることを理解されたい。一例示的実施形態では、一次側は、クライアントによって要求されるデータの第１の送信元であるため、二次側でのデータのコミットに先立って一次側でデータをコミットすることが有利であり、したがって関連するオブジェクトをロック（または阻止）することができる間に、データを最初に一次側にコミットすることにより、最も新しい情報を都合の良いときに一次側で確実に利用することができる。本明細書においては合理的な追加が企図されている。
【０１２６】
[00138]図１０に戻ると、一次側は、肯定応答１０１６を受け取ると、データ１００８に関連するオブジェクトの読取りを阻止１０１８する。一次側１００４は、オブジェクトの読取りを阻止すると、データ１００８を一次側１００４にコミット１０２０する。一次側１００４は、データ１００８をコミット１０２０すると、ジオメッセージ１０１２に関連するデータをコミットするための命令１０２２を二次側１００６に送る。命令１０２２は、その前にジオメッセージ１０１２に関連していたメッセージＩＤを含むことができる。この例示的方法では、データは強力な整合性でコミットされているため、コミットＩＤを利用することができず、その前のトランザクションの成功を受け取るまでは、オブジェクトに対する後続する更新を実行することができないことを意味している。
【０１２７】
[00139]二次側１００６は、データをコミットする命令１０２２を受け取ると、データをコミット１０２４する。二次側１００６は、次に、阻止を解除し、要求側クライアントによるオブジェクトの読取りを許容１０２６する。オブジェクトの阻止が解除されると、二次側１００６は、オブジェクトが読取り可能になったこと（したがってデータがコミットされたこと）を示す肯定応答１０２８を一次側１００４に送る。また、一次側１００４は、肯定応答１０２８を受け取ると、要求側クライアントによるオブジェクトの読取り／書込みを許容１０３０する状態にオブジェクトが置かれるよう、オブジェクトの阻止を同じく解除する。一次側１００４および二次側１００６がデータ１００８に関連するオブジェクトの読取り／書込みを許容すると、一次側１００４は、データ１００８がコミットされ、かつ、ジオ複製されたこと（強力な整合性で）を示す肯定応答１０３２をクライアント１００２に送る。
【０１２８】
[00140]非同期複製のため、および同期複製のための例示的実施形態についての一般的な概要を紹介した以上は、以下が提供される。一例示的実施形態では、非同期複製は、修正されると一次データ記憶装置で「コミットされる」データを考慮し、データがコミットされると肯定応答をクライアントに送ることができる。一次データ記憶装置で修正されるこのデータは、次に、記憶アカウントの二次ジオ位置に背景の中で緩慢に複製することができる。この例では、複製は、環境内における待ち時間を短くするために、一次側が書き込むクリティカルパス外で生じる。しかしながら、災害が発生し、一次データ記憶装置が失われると、一次側における記憶アカウントに対する新しい更新も同じく失われることになる。より高いレベルの信用を提供するために、同期複製は、クライアントに肯定応答を提供する前にデータが一次データ記憶装置および二次データ記憶装置に書き込まれることを保証する。したがって災害によって一次データ記憶装置が影響を受けても、依然としてデータにアクセスすることができるが、同期複製の代償としてより長い待ち時間を伴う。
【０１２９】
[00141]図１１を参照すると、本発明の実施形態による、一次データ記憶装置の観点からの結果整合性を有する同期複製方法１１００が示されている。ブロック１１０２で、一次データ記憶装置（例えば記憶スタンプ）はクライアントからデータを受け取る。この例示的実施形態では、データは、クライアントによって利用される、１つまたは複数のサービスを提供するためのオブジェクトを更新するために使用することができる。
【０１３０】
[00142]ブロック１１０４で、受け取られたデータが一次データ記憶装置のログに書き込まれる。例えばＸＦＥは、入力データを検査して、一次データ記憶装置が入力データを維持するための適切なデータ記憶装置であることを決定することができる。また、ＸＦＥは、この例では、データを維持するための適切なパーティションを識別することも可能である。適切なパーティションは、受け取ったデータに関連するオブジェクトを現在維持しているパーティションを含むことができる。別法としては、データは、分散計算システムのプロセスによるデータのコミットメントのために、一次側の１つまたは複数のログ（例えば更新、ブロックおよび／またはページ）に書き込まれることが企図されている。一例示的実施形態では、一次側のログに書き込まれるデータは、そのデータが一次データ記憶装置の１つまたは複数のログおよび／またはメモリーテーブルにコミットされるまでの間、クライアント（または他の要求側実体）はアクセスすることができない。
【０１３１】
[00143]ブロック１１０６で、受け取られたデータに記録を使用して注釈が付けられる。一例示的実施形態では、記録はＧＡＲ（既に説明した）である。また、注釈が付けられる記録は、メッセージＩＤ、等々を含むか、あるいはメッセージＩＤ、等々であることが同じく企図されている。例えばデータに注釈が付けられる記録は、二次データ記憶装置におけるコミットメントのために、二次データ記憶装置でのそのデータの再生を可能にすることができる。
【０１３２】
[00144]本発明の一例示的実施形態では、図１１には示されていないが、一次データ記憶装置は、データ（または注釈付きデータ）を二次データ記憶装置に送る。二次データ記憶装置は、データを受け取ると、受け取ったデータをＧＭＬなどのログに書き込む。既に説明したように、ＸＦＥなどのフロントエンドサービスは、データが首尾よくログに書き込まれたという肯定応答を一次データ記憶装置に提供することができる。ブロック１１０４は、データを二次側に送り、かつ、ブロック１１０８で肯定応答を送り返す操作と同時に実施することができる。
【０１３３】
[00145]ブロック１１０８で、一次データ記憶装置は、データが二次データ記憶装置でログに書き込まれたという肯定応答を受け取る。肯定応答は、一例示的実施形態では、二次データ記憶装置でログに書き込まれるデータにその前に関連していたメッセージＩＤからなっている。
【０１３４】
[00146]さらに、１つまたは複数のステップを異なる順序で、さらには連続的に実施することができることが企図されている。例えばブロック１１０４は、ブロック１１０８と同時に実施することができる。あるいは、追加例では、ブロック１１０４は、単にメモリーにバッファーしておくことも可能であり、したがってブロック１１１０における一次側上でのコミットまで、ログへの書込みは存在しない。
【０１３５】
[00147]一例示的実施形態では、ブロック１１０８は、ブロック１１０８の実施を完了するためにブロック１１０４を待機しなくてもよい。これは、ブロック１１０８が最も長い待ち時間操作であり、また、トランザクションがブロック１１０８でＧＭＬに書き込まれると、それで十分であり、一次側（例えば一次キャッシュ）には決して記録されないことによるものであってもよい。この場合、一次側は、パーティションをリロードする際に、新しいエポック＃と、そのトランザクションであって、（ａ）一次側が生き続けている場合はコミットされることはなく、それを通り越してコミットＩＤを進めること、あるいは（ｂ）災害のために一次側が永久的に失われた場合に、元の要求のクライアントがタイムアウトし、トランザクションがコミットされたこと、あるいはコミットされていないことを知らない可能性があるため、フェールオーバーの間、トランザクションをコミットすることで十分であることのいずれかを一次側が知らない二次側上のＧＭＬに行き当たるトランザクションとを得ることができる。
【０１３６】
[00148]ブロック１１１０で、一次データ記憶装置は、該一次データ記憶装置でデータをコミットする。一例示的実施形態では、データは、二次データ記憶装置によって肯定応答が返されても、同じ（または注釈が付けられた同様のデータ）が二次データ記憶装置のログに少なくとも書き込まれるまでは、一次データ記憶装置にコミットされない。一例示的実施形態では、近頃、一次側でデータがコミットされたことを反映するためにコミットＩＤが更新される。この例では、コミットＩＤは、上で説明した例のコミットＩＤとは若干異なっていてもよい。コミットＩＤは、この例では、正確なトランザクションを送り、このトランザクションを介してコミットＩＤはコミットを許可する。これは、一部には、二次データ記憶装置が一次データ記憶装置にコミットされなかった可能性のあるデータを潜在的に受け取り、かつ、ＧＭＬに書き込むことによるものである。したがって二次側は、首尾よく二次データ記憶装置に到達した、一次側に決してコミットされなかったトランザクションを無視することができる。二次側は、２通りの方法で使用することができることに留意されたい。顧客クライアントが一次側からの読取り／一次側への書込みを実施している間に、二次側からの読取りを許容されると、クライアントは、クライアントが一次側からの強力な整合性のデータを見ている間に、二次側からの結果整合性のデータを見ることになる。災害が発生し、システムが突然に一次側から二次側へフェールオーバーすると、今度は二次側が新しい一次側になる。災害による突然のフェールオーバーの場合、二次側は、送られた最後のコミットＩＤの後から、そのＧＭＬ内の残りのすべてのトランザクションをコミット／再生することができる。したがって二次側は、フェールオーバー後、完全に一次側に追いつき、かつ、一次側との強力な整合性を維持することができる。それにより結果整合性複製手法を有する同期複製は、災害によって生じるフェールオーバーを復旧する際に、強力な整合性を提供することができる。したがって、一実施形態では、データのための一次側であると見なされているものが、フェールオーバーの後であっても、データの観点からすると強力な整合性を常に提供することができる。
【０１３７】
[00149]ブロック１１１２で、一次データ記憶装置は、ブロック１１０２で受け取られたデータが、二次データ記憶装置で、結果整合性で一次データ記憶装置にコミットされるという肯定応答をクライアントに送る。
【０１３８】
[00150]有利には、一例示的実施形態では、二次データ記憶装置がタイムアウトするか、あるいは一次側上で時間切れになると、一次データ記憶装置はデータをコミットしない（例えば二次側からの肯定応答の欠乏のため）。一次データ記憶装置がデータのコミットに失敗すると、クライアントは、そのデータに対する肯定応答を決して受け取ることはなく、したがって情報の再送を試行することができる。したがってクライアントは、その更新が記憶されたか否かを知ることはない。これにより、フェールオーバー時に、二次側が、この例示的実施形態ではクライアントに、いつデータがコミットされたか、さらにはいつデータが書き込まれたかを報告するためにしなければならない通信が防止される。さらに、一次側がトラフィックを読み取って／書き込んでいる間に二次データ記憶装置からのオブジェクトの読取りが許容されると、データを一次データ記憶装置にコミットすることができる場合であっても、二次データ記憶装置がデータをコミットするまでの間は古い値が戻される。
【０１３９】
[00151]図１２を参照すると、本発明の実施形態による、一次データ記憶装置および二次データ記憶装置からの同時読取りの観点からの強力な整合性を有する同期複製方法１２００が示されている。ブロック１２０２で、一次データ記憶装置はクライアントからデータを受け取る。この例示的実施形態では、データは、クライアントによって利用される、１つまたは複数のサービスを提供するためのオブジェクトを更新するために使用することができる。
【０１４０】
[00152]ブロック１２０４で、受け取ったデータに関連するオブジェクトがロックされる。一例示的実施形態では、オブジェクトをロックしてもデータの読取りを妨害しないが、その代わりにオブジェクトのためのトランザクションの開始を識別し、書込みを妨害する。データに関連する１つまたは複数のオブジェクトを一次側または分散構成要素で決定することがさらに企図されている。この決定は、データと共に含まれている情報、命名構造およびテーブル探索、等々に基づいて完了することができる。さらに、データに関連しているオブジェクトが識別されると、二次データ記憶装置が使用するためのデータを使用してその関連に注釈が付けられることが企図されている。
【０１４１】
[00153]ブロック１２０６で、受け取ったデータが一次データ記憶装置から二次データ記憶装置に送られる。送られたデータは記録を含む。既に説明したように、記録は、メッセージＩＤ、ＧＡＲおよび／または等々からなっていてもよい。データは二次データ記憶装置で受け取ることができ、次に、二次データ記憶装置が適切であるかどうか、また、どのパーティションがデータを受け取るべきかを決定するためにフロントエンドサービスによって検査される。
【０１４２】
[00154]ブロック１２０８で、一次データ記憶装置は、二次データ記憶装置から第１の肯定応答を受け取る。第１の肯定応答は、一例示的実施形態では、二次データ記憶装置のログに書き込まれるデータのためのメッセージＩＤを含む。第１の肯定応答は、二次データ記憶装置がデータをログに書き込んだこと、但しまだデータをコミットしなければならないことを示すことができる。
【０１４３】
[00155]ブロック１２１０で、一次データ記憶装置はデータをコミットし、オブジェクトの読取りおよびアクセスを防止する。一例示的実施形態では、一次データ記憶装置は、受け取った、ログへのデータの書込みが成功したという肯定応答の中で識別されたデータのみをコミットする。したがって一次データ記憶装置は、そのデータが二次データ記憶装置のログに書き込まれるまでデータをコミットしないことが企図されている。さらに、一例示的実施形態では、一次データ記憶装置は、データが二次データ記憶装置のログに書き込まれ、かつ、二次データ記憶装置がデータ（例えばオブジェクト）のアクセスを阻止するまでデータをコミットしない。
【０１４４】
[00156]ブロック１２１２で、一次データ記憶装置は、二次データ記憶装置でデータをコミットする命令を送る。データをコミットする命令は、ＧＭＬなどのログから適切なデータを検索し、かつ、コミットするために二次データ記憶装置が使用することができるメッセージＩＤを含むことができる。
【０１４５】
[00157]ブロック１２１４で、一次データ記憶装置は、データが二次データ記憶装置にコミットされるという第２の肯定応答を二次データ記憶装置から受け取る。一次データ記憶装置は、第２の肯定応答を受け取ると、それに応答して、ブロック１２１６で示されているように、データに関連するオブジェクトのロックを解除することができる（つまり読取りおよび書込みの阻止を解除することができる）。したがってクライアントは、コミットされたデータによって提供される新しい値を使用してオブジェクトにアクセスすることができる。この例では強力な整合性方法が利用されているため、二次データ記憶装置でのデータのアクセスを必要とするフェールオーバーが生じても、クライアントは、オブジェクトのための更新されたデータ値を受け取ることができる。この手法によれば一次側または二次側から読み取ることができ、したがって一次側および二次側の両方が生きている場合であっても共通のデータが得られる。しかしながら、強力な整合性は、実際、クライアントのトランザクションのクリティカルパス上の２相コミットを利用する。
【０１４６】
[00158]ブロック１２１８で、一次データ記憶装置は、データが一次データ記憶装置および二次データ記憶装置で複製されたことを示す肯定応答をクライアントに送る。この指示は、明確な指示または暗示的な指示のいずれであってもよい。
【０１４７】
[00159]図１３を参照すると、本発明の実施形態による、一次データ記憶装置および二次データ記憶装置の両方を有する分散計算システムの観点からの同期複製方法１３００が示されている。ブロック１３０２で、一次データ記憶装置はクライアントからデータを受け取る。この例示的実施形態では、このデータは、クライアントによって利用される、１つまたは複数のサービスを提供するためのオブジェクトを更新するために使用することができる。
【０１４８】
[00160]ブロック１３０４で、一次データ記憶装置は、受け取ったデータおよびそのデータの識別子を二次データ記憶装置に送る。例えば、そのデータが一次側で記憶されている（あるいは記憶されることになる）位置または他のトポロジー構造に基づいてそのデータを独自に識別するメッセージＩＤなどの追加情報を使用してそのデータに注釈を付けることができる。さらに、固有の識別子は、一次データ記憶装置から特定の二次データ記憶装置、さらには二次データ記憶装置の特定のパーティションに送られるメッセージ／データの連続カウンターを維持するための手段を単に提供することも可能である。
【０１４９】
[00161]ブロック１３０６で、二次データ記憶装置は、一次データ記憶装置から入力データおよび識別子を受け取る。一例示的実施形態では、二次データ記憶装置は、入力データを検査し、受け取ったデータが二次データ記憶装置のため消費済みＩＤ（コミットされた部分）より大きいことを識別子が示していることを保証することができる。さらに、二次データ記憶装置は、受け取ったデータが二次データ記憶装置のために意図されていること、および／または受け取るデータ記憶装置がそのデータの適切な受信者であることを確認することができることが企図されている。
【０１５０】
[00162]ブロック１３０８で、二次データ記憶装置はデータをログに書き込む。ログは、ＧＭＬログなどの複製を可能にするための特定のログであってもよい。さらに、ログは、分散計算環境で従来から実施されている、ブロックログ、ページログまたは更新ログなどの多くのログのうちの１つであることが企図されている。データがログに書き込まれると、ログ（または関連するプロセス）は、フロントエンドサービスに肯定応答を送り返すことができる。
【０１５１】
[00163]ブロック１３１０で、二次データ記憶装置は、データがログに書き込まれたという肯定応答を、そのデータが送られた一次データ記憶装置に送り返す。一例示的実施形態では、データが書き込まれたログから肯定応答を受け取ったフロントエンドサービスは、肯定応答を一次データ記憶装置に提供することができる。さらに、肯定応答は、データがパッケージされたジオメッセージにその前に関連していたメッセージＩＤなどのデータの識別子を含むことができることが企図されている。
【０１５２】
[00164]ブロック１３１２で、一次データ記憶装置はデータをコミットする。一例示的実施形態では、一次データ記憶装置でコミットされると、結果整合性方法を利用して、データのコミットメントの肯定応答をクライアントに送ることができる。これは、一部には、この例ではまだデータをコミットしなければならない二次データ記憶装置が、最終的にデータをコミットするためにそのデータが書き込まれるログを再生することができることによるものである。追加例示的実施形態では、一次データ記憶装置および二次データ記憶装置の両方がデータをコミットし、それにより強力な整合性方法が提供されるまで、一次データ記憶装置からクライアントに肯定応答は送られない。
【０１５３】
[00165]ブロック１３１４で、一次データ記憶装置は、データをコミットする命令を二次データ記憶装置に送る。この命令は、実施される整合性方法に応じて、コミットされるデータを包含するコミットＩＤのみを含むことができる。別法としては、この命令は、特定のトランザクションがコミットされることを命令が示すよう、とりわけ、データに関連する１つまたは複数のトランザクションを識別することができる。
【０１５４】
[00166]ブロック１３１６で、二次データ記憶装置はデータをコミットする。一例示的実施形態では、データのコミットメントの肯定応答が二次データ記憶装置から一次データ記憶装置に送り返される。さらに、二次データ記憶装置は、ログから二次データ記憶装置にコミットされたデータの範囲を示すために、消費済みＩＤを更新することが企図されている。この消費済みＩＤは、メモリーテーブルにチェックポイントからデータをリロードし、かつ、ログを再生する必要があるパーティションが故障すると使用することができる。
【０１５５】
[00167]本発明の精神および範囲を逸脱することなく、図に示されている様々な構成要素ならびに図に示されていない構成要素の多くの異なる配置が可能である。本発明の実施形態は、本発明を制限するためではなく、本発明を実例で示すことを目的として説明されている。当業者には、本発明の範囲を逸脱しない代替実施形態が明らかになるであろう。当業者は、本発明の範囲を逸脱することなく、上で言及した改善を実施する代替手段を開発することができる。特定の方法が特定のシーケンスで説明されているが、これらのアクティビティーは、様々な順序およびシーケンスで実施することができることが企図されている。
【０１５６】
[00168]特定の特徴および副組合せは、ユーティリティの特徴および副組合せであり、また、他の特徴および副組合せを参照することなく使用することができ、また、特許請求の範囲内であることが企図されていることは理解されよう。様々な図でリストに挙げられているすべてのステップを、説明されている特定の順序で実行しなければならないわけではない。
【図１】
0006039655.tif 000002
【図２】
0006039655.tif 000003
【図３】
0006039655.tif 000004
【図４】
0006039655.tif 000005
【図５】
0006039655.tif 000006
【図６】
0006039655.tif 000007
【図７】
0006039655.tif 000008
【図８】
0006039655.tif 000009
【図９】
0006039655.tif 000010
【図１０】
0006039655.tif 000011
【図１１】
0006039655.tif 000012
【図１２】
0006039655.tif 000013
【図１３】
0006039655.tif 000014