(57)【特許請求の範囲】
【請求項１】
疎結合ノードによるマルチ・マスタ・データベースにおける単調トランザクションのための方法であって、
クライアント・デバイスが前記ノードのいずれかで書込みトランザクションを発行することと、
書込みトランザクションを発行するノードでローカルに書込みトランザクションを記録し、少なくとも１つの他のノードに前記書込みトランザクションを非同期で複製することと、
前記クライアント・デバイスに応答を返す前に前記ノードの少なくともクォーラムからの肯定応答の受信を待つことと、
を含む、書込みトランザクション・プロトコルを、プロセッサによって行うことを含み、ここで前記クォーラムが、リーダー・ノード（特別なノード）および少なくとも１つの非リーダ・ノード（他のノード）を含む前記ノードの任意の集合であり、
前記ノードのいずれかで読取りトランザクションを発行することと、
前記ノードの少なくともクォーラムによって複製されていると知られている行を返すことを試みることと、
前記特別なノードが非応答であることに基づく、少なくとも前記クォーラムのノードによって複製されていると知られている行を返すことを試みることのタイム・アウトに対して、
新たな特別なノードを選択することと、
前記ノードの少なくとも前記クォーラムによって複製されていると知られている行を返すことを試みることを繰り返すことと、
を含む、読取りトランザクション・プロトコルを、前記プロセッサによって行うことを含む、
方法。
【請求項２】
前記マルチ・マスタ・データベースから肯定応答を受信するのを待つ間にクライアント・デバイスがタイム・アウトしたと判定した上で、前記クライアント・デバイスが、少なくとも１つの読取りトランザクションを発行することによって前記書込みトランザクションの状況を得る、請求項１に記載の方法。
【請求項３】
特別なノードの選択が選挙を含む、請求項１に記載の方法。
【請求項４】
前記特別なノードが前記ノードのいずれかであり、前記選挙が、コンセンサス・プロトコルを使用して前記プロセッサによって行われる、請求項３に記載の方法。
【請求項５】
前記少なくとも１つの読取りトランザクションのタイム・アウトを判定した上で、前記クライアント・デバイスによって、前記少なくとも１つの読取りトランザクションを繰り返すことを更に含む、請求項２に記載の方法。
【請求項６】
前記新たな特別なノードの選択が、トランザクション失敗または前記特別なノードの非反応により前記プロセッサによって行われる、請求項１に記載の方法。
【請求項７】
前記クォーラムが、永続性要件に基づいて選択されるいくつかの他のノードを更に含む、請求項４に記載の方法。
【請求項８】
前記特別なノードを含む前記ノードに重みを割り当てることを更に含み、
前記特別なノードに割り当てられる重みが、残りのノードに割り当てられる重みを超え、クォーラム投票が、クォーラム閾値以上である投票ノード重みの合計に基づく、請求項１に記載の方法。
【請求項９】
請求項１〜８の何れか１項に記載の方法を、コンピュータに実行させる、コンピュータ・プログラム。
【請求項１０】
請求項９に記載の前記コンピュータ・プログラムを、コンピュータ可読ストレージ媒体に記録した、コンピュータ可読ストレージ媒体。
【請求項１１】
請求項１〜８の何れか１項に記載の方法を、コンピュータ・ハードウェアによる手段として構成した、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータベースに関し、特にマルチ・マスタ・データベースにおける単調トランザクションに関する。
【背景技術】
【０００２】
オンライン・トランザクション処理（ＯＬＴＰ）アプリケーションが、ＡＣＩＤ（高原子性、一貫性、独立性および永続性）一貫性特性を提供するデータベースのために使用されるが、一貫性保証が強くない疎結合「ＡＰ」（可用性、分断耐性（partition tolerance））設定でますます動作している。特に、トランザクションが行を挿入してコミットするとき、アプリケーションは３つの返答のうちの１つを予期する：ａ）トランザクション成功、ｂ）トランザクションがロール・バックする（例えば、制約違反）、ｃ）トランザクション状況不明（通常はドライバまたは接続エラーのためであり、アプリケーションが照会を発行して状況を確認することができる）。しかし、いずれの場合も、コミットの後、従来のＡＣＩＤデータベース管理システム（ＤＢＭＳ）では、以降の読取りは同じ回答ａに遭遇する（すなわち、単調挙動）。１つの照会が挿入された行に遭遇する場合、以降の照会もそれらの挿入された行に遭遇することになり、一貫して（返答ｃに対して）、アプリが読取りを発行して状況を見つけ出さなければならない。
【０００３】
ＡＰ環境（例えば、多くのＮｏＳＱＬ（非構造化照会言語）ＤＢＭＳを伴う）では、問題がある返答状態に関する、第４の返答がある：ｄ）トランザクション状況がまだ確定されていないことがある。これは、トランザクションを実行しているノード（ここでノードはクライアント・デバイス、サーバまたはピア・デバイスである）が他のレプリカに変更／挿入を（ログ・メッセージとして）送ったが、それらからの肯定応答（それらが変更を受信または受諾したことを示す）を聞いていないときに発生する。この状態では、以降の照会は予測不可能な挙動に遭遇する。最初の照会がそれらの行を見つけないかもしれないのは−−それらがまだ充分な数のレプリカに複製していない（クォーラム・ポリシーによる）からである。しかし、後の照会がそれらの行を見つけるかもしれない。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従って発明が解決しようとする課題は、疎結合ノードによるマルチ・マスタ・データベースにおける単調トランザクションのための方法、コンピュータ・プログラム、および装置を提供することである。
【課題を解決するための手段】
【０００５】
実施形態は、疎結合ノードによるマルチ・マスタ・データベースにおける複製のためのクォーラム処理に関する。一実施形態が、疎結合ノードによるマルチ・マスタ・データベースにおける単調トランザクションのための方法であって、クライアント・デバイスがノードのいずれかで書込みトランザクションを発行することと、書込みトランザクションを発行するノードでローカルに書込みトランザクションを記録し、少なくとも１つの他のノードに書込みトランザクションを非同期で複製することと、クライアント・デバイスに応答を返す前にノードの少なくともクォーラムからの肯定応答の受信を待つことと、を含む書込みトランザクション・プロトコルを、プロセッサによって行うことを含む、方法を提供する。クォーラムは、特別なノードおよび少なくとも１つの他のノードを含むノードの任意の集合である。
【０００６】
本発明のこれらおよび他の特徴、態様および利点は、以下の説明、添付の請求項および添付の図を参照しつつ理解されるようになるであろう。
【０００７】
本発明の実施形態がここで、添付の図面を参照しつつ、単に例として、記載されることになる。
【図面の簡単な説明】
【０００８】
【図１】実施形態による、クラウド・コンピューティング環境を描く図である。
【図２】実施形態による、一組の抽象化モデル層を描く図である。
【図３】実施形態による、可変長データ・オブジェクトの効率的な表現、アクセスおよび変更のためのネットワーク・アーキテクチャである。
【図４】実施形態による、図１のサーバもしくはクライアントまたはその両方と関連付けられることができる代表的なハードウェア環境を図示する図である。
【図５】一実施形態による、疎結合ノードによるマルチ・マスタ・データベースにおける複製のためのクォーラム処理のシステムを例示するブロック図である。
【図６】一実施形態による、疎結合ノードによるマルチ・マスタ・データベースにおける単調トランザクションのためのプロセスのためのブロック図である。
【発明を実施するための形態】
【０００９】
様々な実施形態の説明が例示の目的で提示されたが、網羅的であるとも、または開示される実施形態に限定されるとも意図されない。記載される実施形態の範囲および思想から逸脱することなく、多くの変更および変形が当業者にとって明らかであろう。本明細書で使用される技術用語は、実施形態の原理、実際的応用もしくは市場で見つかる技術に対する技術的改良を最もよく説明するように、または当業者が本明細書に開示される実施形態を理解することを可能にするように選ばれた。
【００１０】
本開示がクラウド・コンピューティングの詳細な説明を含むとはいえ、本明細書に詳述される教示の実装がクラウド・コンピューティング環境に限定されないことが事前に理解される。むしろ、本発明の実施形態は、現在公知であるまたは今後開発されるいかなる他の種類のコンピューティング環境とも併せて実装されることが可能である。
【００１１】
１つまたは複数の実施形態が、疎結合ノードによるマルチ・マスタ・データベースにおける複製のためのクォーラム処理に備える。一実施形態が、疎結合ノードによるマルチ・マスタ・データベースにおける単調トランザクションのための方法であって、クライアント・デバイスがノードのいずれかで書込みトランザクションを発行することと、書込みトランザクションを発行するノードでローカルに書込みトランザクションを記録し、少なくとも１つの他のノードに書込みトランザクションを非同期で複製することと、クライアント・デバイスに応答を返す前にノードの少なくともクォーラムからの肯定応答の受信を待つことと、を含む書込みトランザクション・プロトコルを、プロセッサによって行うことを含む、方法を提供する。クォーラムは、特別なノードおよび少なくとも１つの他のノードを含むノードの任意の集合である。
【００１２】
クラウド・コンピューティングは、最小の管理労力またはサービスの提供者との相互作用で迅速にプロビジョニングおよび解放されることができる構成可能なコンピューティング・リソース（例えばネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン（ＶＭ）およびサービス）の共有プールへの簡便でオン・デマンドのネットワーク・アクセスを可能にするためのサービス配布のモデルである。このクラウド・モデルは、少なくとも５つの特性、少なくとも３つのサービス・モデルおよび少なくとも４つの展開モデルを含んでもよい。
【００１３】
特性は次の通りである：
オン・デマンド・セルフ・サービス：クラウド消費者が、サービスの提供者との人間相互作用を必要とすることなく、必要に応じて自動的に、サーバ時間およびネットワーク・ストレージなどのコンピューティング機能を一方的にプロビジョニングすることができる。
広域ネットワーク・アクセス：機能がネットワークを通じて利用可能であり、そして異種シンまたはシック・クライアント・プラットフォーム（例えば、移動電話、ラップトップおよびＰＤＡ）による使用を促進する標準機構を通じてアクセスされる。
リソース・プーリング：提供者のコンピューティング・リソースがプールされて、マルチ・テナント・モデルを使用して複数の消費者に、需要に従って動的に割り当ておよび再割り当てされる異なる物理および仮想リソースを供給する。消費者が、提供されるリソースの正確な位置に対する制御または知識を一般に有しないが、より高い抽象化レベル（例えば、国、州またはデータ・センタ）で位置を特定することができ得るという点で、位置独立の感覚がある。
迅速な弾性：機能が迅速かつ弾性的に、場合により自動的に、プロビジョニングされて急速にスケール・アウトし、迅速に解放さて急速にスケール・インすることができる。消費者にとって、プロビジョニングに利用可能な機能は、しばしば無限であるように見えて、いつでもいかなる量でも購入されることができる。
実測サービス：クラウド・システムが、サービスの種類に適切な或る抽象化レベル（例えば、ストレージ、処理、帯域幅およびアクティブ消費者アカウント）で計測機能を活用することによってリソース使用を自動的に制御および最適化する。リソース使用状況が監視、制御および報告され、それによって、利用されるサービスの提供者にも消費者にも透明性を提供することができる。
【００１４】
サービス・モデルは次の通りである：
サービスとしてのソフトウェア（ＳａａＳ）：消費者に提供される機能は、クラウド・インフラストラクチャ上で動く提供者のアプリケーションを使用する能力である。アプリケーションは、ウェブ・ブラウザなどのシン・クライアント・インタフェースを通じて様々なクライアント・デバイスからアクセス可能である（例えば、ウェブベースの電子メール）。消費者は、限定された消費者固有のアプリケーション構成設定を場合により除いて、ネットワーク、サーバ、オペレーティング・システム、ストレージまたは個々のアプリケーション機能さえ含め、基礎となるクラウド・インフラストラクチャを管理または制御しない。
サービスとしてのプラットフォーム（ＰａａＳ）：消費者に提供される機能は、提供者によってサポートされるプログラミング言語およびツールを使用して作成された消費者作成または取得アプリケーションをクラウド・インフラストラクチャ上へ展開する能力である。消費者は、ネットワーク、サーバ、オペレーティング・システムまたはストレージを含め、基礎となるクラウド・インフラストラクチャを管理または制御しないが、展開されたアプリケーションおよび場合によりアプリケーション・ホスティング環境構成に対する制御を有する。
サービスとしてのインフラストラクチャ（ＩａａＳ）：消費者に提供される機能は、処理、ストレージ、ネットワーク、ならびに消費者が、オペレーティング・システムおよびアプリケーションを含むことができる任意のソフトウェアを展開して動かすことができる、他の基本的なコンピューティング・リソースをプロビジョニングする能力である。消費者は、基礎となるクラウド・インフラストラクチャを管理または制御しないが、オペレーティング・システム、ストレージ、展開されたアプリケーションに対する制御、および場合により、選択されたネットワーキング部品（例えば、ホスト・ファイアウォール）の限定された制御を有する。
【００１５】
展開モデルは次の通りである：
プライベート・クラウド：クラウド・インフラストラクチャは、専ら組織のために運営される。それは、同組織または第三者によって管理されてもよく、そして構内または構外に存在してもよい。
コミュニティ・クラウド：クラウド・インフラストラクチャは、いくつかの組織によって共有され、そして共有事項（例えば、使命、セキュリティ要件、方針およびコンプライアンス問題）を有する特定のコミュニティをサポートする。それは、同組織または第三者によって管理されてもよく、そして構内または構外に存在してもよい。
パブリック・クラウド：クラウド・インフラストラクチャは、一般大衆または大規模な業界団体に利用可能にされ、そしてクラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド：クラウド・インフラストラクチャは、一意のエンティティのままであるが、データおよびアプリケーション・ポータビリティを可能にする標準化または独自技術（例えば、クラウド間のロード・バランシングのためのクラウド・バースティング）によって結合される２つ以上のクラウド（プライベート、コミュニティまたはパブリック）の組合せである。
【００１６】
クラウド・コンピューティング環境は、ステートレス性、低結合、モジュール性および意味論的相互運用性に重点を置いたサービス指向である。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを備えるインフラストラクチャである。
【００１７】
ここで図１を参照すると、例示的なクラウド・コンピューティング環境５０が描かれる。図示されるように、クラウド・コンピューティング環境５０は、例えば、携帯情報端末（ＰＤＡ）もしくはセルラ電話５４Ａ、デスクトップ・コンピュータ５４Ｂ、ラップトップ・コンピュータ５４Ｃまたは自動車コンピュータ・システム５４Ｎあるいはその組合せなどの、クラウド消費者によって使用されるローカル・コンピューティング・デバイスが通信してもよい、１つまたは複数のクラウド・コンピューティング・ノード１０を備える。ノード１０は互いと通信してもよい。それらは、本明細書で上記したプライベート、コミュニティ、パブリックもしくはハイブリッド・クラウドまたはその組合せなどの、１つまたは複数のネットワークに物理的または仮想的にグループ化されてもよい（図示せず）。これは、クラウド・コンピューティング環境５０が、クラウド消費者がローカル・コンピューティング・デバイス上にリソースを維持する必要がないサービスとしてのインフラストラクチャ、プラットフォームもしくはソフトウェアまたはその組合せを提供するのを可能にする。図２に図示される種類のコンピューティング・デバイス５４Ａ〜Ｎが単に例示的であると意図されること、ならびにコンピューティング・ノード１０およびクラウド・コンピューティング環境５０が、いかなる種類のネットワークもしくはネットワーク・アドレス可能接続（例えば、ウェブ・ブラウザを使用して）またはその両方を通じても、いかなる種類のコンピュータ化デバイスとも通信することができることが理解される。
【００１８】
ここで図２を参照すると、クラウド・コンピューティング環境５０（図１）によって提供される一組の機能抽象化層が図示される。図２に図示される部品、層および機能が単に例示的であると意図され、そして本発明の実施形態がそれに限定されないことが事前に理解されるべきである。描かれるように、以下の層および対応する機能が提供される：
【００１９】
ハードウェアおよびソフトウェア層６０がハードウェアおよびソフトウェア部品を含む。ハードウェア部品の例としては：メインフレーム６１；ＲＩＳＣ（縮小命令セット・コンピュータ）アーキテクチャ・ベースのサーバ６２；サーバ６３；ブレード・サーバ６４；ストレージ・デバイス６５；ならびにネットワークおよびネットワーキング部品６６を含む。いくつかの実施形態において、ソフトウェア部品は、ネットワーク・アプリケーション・サーバ・ソフトウェア６７およびデータベース・ソフトウェア６８を含む。
【００２０】
仮想化層７０が、以下の例の仮想エンティティが提供されることができる抽象化層を提供する：仮想サーバ７１；仮想ストレージ７２；仮想プライベート・ネットワークを含む、仮想ネットワーク７３；仮想アプリケーションおよびオペレーティング・システム７４；ならびに仮想クライアント７５。
【００２１】
一例では、管理層８０が、下記される機能を提供してもよい。リソース・プロビジョニング８１が、コンピューティング・リソース、およびクラウド・コンピューティング環境内でタスクを行うために利用される他のリソースの動的調達を提供する。計測および価格決定８２が、クラウド・コンピューティング環境内でリソースが利用されるときに費用追跡を、およびこれらのリソースの消費に対する課金または代金請求を提供する。一例では、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含んでもよい。セキュリティが、クラウド消費者およびタスクに対する識別情報検証の他に、データおよび他のリソースに対する保護を提供する。ユーザ・ポータル８３が、消費者およびシステム管理者に対してクラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理８４が、必要とされるサービス・レベルが満たされるようにクラウド・コンピューティング・リソース割当ておよび管理を提供する。サービス・レベル合意（ＳＬＡ）計画および遂行８５が、ＳＬＡに従って将来の要求が予想されるクラウド・コンピューティング・リソースの事前手配および調達を提供する。
【００２２】
ワークロード層９０が、クラウド・コンピューティング環境が利用されることができる機能性の例を提供する。この層から提供されることができるワークロードおよび機能の例としては：マッピングおよびナビゲーション９１；ソフトウェア開発およびライフサイクル管理９２；仮想教室教育配信９３；データ解析処理９４；トランザクション処理９５；ならびに疎結合ノードによるマルチ・マスタ・データベースにおける複製のためのクォーラム処理９６。上述したように、図２に関して記載される上記の例の全てが単に例示的であり、そして本発明はこれらの例に限定されない。
【００２３】
本明細書に記載される１つまたは複数の実施形態の全ての機能が処理システム３００（図３）または、ハードウェア・プロセッサとしてかつプログラム・コードのモジュールと共に有形に具象化されることができる、自律クラウド環境４１０（図４）によって典型的に行われてもよいと理解される。しかしながら、これは、非リアル・タイム処理のための場合である必要はない。むしろ、非リアル・タイム処理に関しては、本明細書に詳述される機能性は、図２に図示される層６０、７０、８０および９０のいずれかによって実施／実装され得るもしくは可能にされ得るまたはその両方され得る。
【００２４】
本開示がクラウド・コンピューティングに関する詳細な説明を含むとはいえ、本明細書に詳述される教示の実装がクラウド・コンピューティング環境に限定されないことが繰り返される。むしろ、本発明の実施形態は、現在公知であるまたは今後開発されるいかなる種類のクラスタ化コンピューティング環境とも実装されてもよい。
【００２５】
図３は、一実施形態に従う、ネットワーク・アーキテクチャ３００を例示する。図３に図示されるように、第１の遠隔ネットワーク３０４および第２の遠隔ネットワーク３０６を含め、複数の遠隔ネットワーク３０２が設けられる。遠隔ネットワーク３０２と近接ネットワーク３０８との間にゲートウェイ３０１が結合されてもよい。本ネットワーク・アーキテクチャ３００の文脈では、ネットワーク３０４、３０６は各々、ＬＡＮ、インターネットなどのＷＡＮ、公衆電話交換網（ＰＳＴＮ）、構内電話網等を含むがこれらに限定されない、いかなる形態をとってもよい。
【００２６】
使用の際、ゲートウェイ３０１は、遠隔ネットワーク３０２から近接ネットワーク３０８への入口点の役目をする。そのため、ゲートウェイ３０１は、ゲートウェイ３０１に到達する所与のデータのパケットを誘導することが可能であるルータ、および所与のパケットに対するゲートウェイ３０１内外への実際の経路を供給するスイッチとして機能してもよい。
【００２７】
更に含まれるのは、近接ネットワーク３０８に結合される少なくとも１つのデータ・サーバ３１４であり、これはゲートウェイ３０１を介して遠隔ネットワーク３０２からアクセス可能である。データ・サーバ３１４がいかなる種類のコンピューティング・デバイス／グループウェアを含んでもよいことが留意されるべきである。各データ・サーバ３１４に結合されるのは、複数のユーザ・デバイス３１６である。そのようなユーザ・デバイス３１６は、デスクトップ・コンピュータ、ラップトップ・コンピュータ、ハンドヘルド・コンピュータ、プリンタもしくは任意の他の種類の論理含有デバイスまたはその組合せを含んでもよい。いくつかの実施形態において、ユーザ・デバイス３１１もネットワークのいずれかに直接結合されてもよいことが留意されるべきである。
【００２８】
周辺装置３２０または一連の周辺装置３２０、例えば、ファクシミリ装置、プリンタ、スキャナ、ハード・ディスク・ドライブ、ネットワークもしくはローカルまたはその両方のストレージ・ユニットまたはシステム等がネットワーク３０４、３０６、３０８の１つまたは複数に結合されてもよい。データベースもしくは追加部品またはその両方がネットワーク３０４、３０６、３０８に結合されるいかなる種類のネットワーク要素と共に利用されても、またはそれに組み込まれてもよいことが留意されるべきである。本説明の文脈では、ネットワーク要素は、ネットワークのいかなる部品を指してもよい。
【００２９】
いくつかの手法によれば、本明細書に記載される方法およびシステムは、仮想システムまたは、ＩＢＭ（Ｒ）ｚ／ＯＳ（Ｒ）環境をエミュレートするＵＮＩＸ（Ｒ）システム、ＭＩＣＲＯＳＯＦＴ（Ｒ）ＷＩＮＤＯＷＳ（Ｒ）環境を仮想的にホストするＵＮＩＸ（Ｒ）システム、ＩＢＭ（Ｒ）ｚ／ＯＳ（Ｒ）環境をエミュレートするＭＩＣＲＯＳＯＦＴ（Ｒ）ＷＩＮＤＯＷＳ（Ｒ）システム等などの、１つもしくは複数の他のシステムをエミュレートするシステム、あるいはその両方を用いて、またはその上で、あるいはその両方で実装されてもよい。この仮想化もしくはエミュレーションまたはその両方は、いくつかの実施形態においてＶＭＷＡＲＥ（Ｒ）ソフトウェアの使用を通じて実装されてもよい。
【００３０】
図４は、一実施形態に従う、図３のユーザ・デバイス３１６もしくはサーバ３１４またはその両方と関連付けられる代表的なハードウェア・システム４００環境を図示する。一例では、ハードウェア構成は、マイクロプロセッサなどの中央処理装置４１０、およびシステムバス４１２を介して相互接続されるいくつかの他のユニットを有するワークステーションを含む。図４に図示されるワークステーションは、ランダム・アクセス・メモリ（ＲＡＭ）４１４、リード・オンリ・メモリ（ＲＯＭ）４１６、ディスク・ストレージ・ユニット４２０などの周辺デバイスをバス４１２に接続するためのＩ／Ｏアダプタ４１８、キーボード４２４、マウス４２６、スピーカ４２８、マイクロホン４３２、もしくはタッチ・スクリーン、デジタル・カメラ（図示せず）等などの、他のユーザ・インタフェース・デバイス、またはその組合せをバス４１２に接続するためのユーザ・インタフェース・アダプタ４２２、ワークステーションを通信ネットワーク４３５（例えば、データ処理ネットワーク）に接続するための通信アダプタ４３４、バス４１２をディスプレイ・デバイス４３８に接続するためのディスプレイ・アダプタ４３６を含んでもよい。
【００３１】
一例では、ワークステーションは、その上に、ＭＩＣＲＯＳＯＦＴ（Ｒ）ＷＩＮＤＯＷＳ（Ｒ）オペレーティング・システム（ＯＳ）、ＭＡＣ（Ｒ）ＯＳ、ＵＮＩＸ（Ｒ）  ＯＳ等などのオペレーティング・システムを常駐させてもよい。一実施形態において、システム４００は、ＰＯＳＩＸ（Ｒ）ベースのファイルシステムを利用する。言及されたもの以外のプラットフォームおよびオペレーティング・システム上にも他の例が実装されてもよいことが認識されるであろう。そのような他の例は、オブジェクト指向プログラミング方法論と共に、ＪＡＶＡ（Ｒ）、ＸＭＬ、ＣもしくはＣ＋＋言語またはその組合せ、あるいは他のプログラミング言語を使用して書かれたオペレーティング・システムを含んでもよい。複雑なアプリケーションを開発するためにますます使用されるようになったオブジェクト指向プログラミング（ＯＯＰ）も使用されてもよい。
【００３２】
従来の複製データベースでは、データ・オブジェクトが、複数の位置に存在するコピーを有する。そのようなデータベースがアプリケーションに与える極めて重要な一貫性保証が単調読取りである。書込み操作（従来はトランザクションとしても知られている）がデータベース状態を原子的に変更し、全ての以降の読取り（照会）が操作の変更に遭遇する（この場合、操作は成功またはコミットしたと言われる）か操作の変更に遭遇しない（この場合、操作はロール・バックしたと言われる）かである。従来の複製データベースでは、この保証は、同期したブロッキング書込みを伴うクォーラム・ベースのレプリカ制御プロトコルを通じて達成される。詳細には、複製データ項目の各コピーは、票が割り当てられる。各操作は次に、データ項目を読み取るまたは書き込むために、それぞれ、読取りクォーラム（Ｔｒ）または書込みクォーラム（Ｔｗ）を得なければならない。所与のデータ項目が合計Ｔ票を有する場合、クォーラムは以下の規則に従わなければならない：
１．Ｔｒ＋Ｔｗ＞Ｔ
２．Ｔｗ＞Ｔ／２
【００３３】
書込み操作は、その書込みからの変更が書込みクォーラムのレプリカに複製するまで待たなければならず、そしてこれは、肯定応答を待つことによって検証されなければならない。更に、この待機プロセスが失敗またはタイム・アウトした場合、書込みはロール・バックされなければならない。これは、２相コミット・プロトコルで典型的に達成される。したがって、これらの規則は、２つの書込みクォーラムが常に共通ノードを有すること、およびいかなる読取りクォーラムもデータ項目の最新バージョンを持つ少なくとも１つのサイトを含むことを保証する。したがって、書込みが原子的に成功するかロール・バックするかし、全ての以降の読取りがデータベースの一貫したイメージに遭遇する。そのような一貫したシステムでは、第３の返答局面もあり得る：書込み操作状況不明。これは、例えば、データベースとアプリケーションとの間の接続が失敗した、またはアプリケーションがデータベースからの応答を待つ間にタイム・アウトしたときに発生する可能性がある。しかし、それでも、そのような局面でさえ、アプリケーションは、書込み操作の状況をデータベースに照会することができ−そしてその照会（全ての以降の照会）は一貫した回答に遭遇するであろう。この手法の不利点は、それが、ノードが利用可能でかつ応答する密接続システムを必要とするということである。例えば、一旦２相コミット・プロトコルが開始したならば、イニシエータ・ノードが無応答になると、システムは以降の読取りに利用不可能である。
【００３４】
３つの返答局面（すなわち、成功、失敗してロールバックおよび不明）を有する一貫したシステムと区別可能で、結果整合性システムでは、アプリケーションが結果的に単調読取りを得るが、書込みの完了の後に若干の時間があり、このときに読取りが一貫しない回答に遭遇することがある。データベース状態が書込み操作によって変更されると、返答状況は成功および不明である。最後の場合、以降の読取りは異なる回答を得る。変更が複製されたノードの１つに読取りが行く場合、読取りは変更に遭遇し、後の読取り（異なるノードに行く）は変更に遭遇しないかもしれず；次いで別の読取りが変更に遭遇する。しかし、結果整合性システムは高可用性を有する。書込みはいかなるノードでも発生することができ（「マルチ・マスタ」）；非同期で他のノードに複製され；そしてシステムはいくつかの数のノードの障害に耐えることができる。
【００３５】
マルチ・マスタ複製（またはピア・ツー・ピアｎ−ｗａｙ複製（n-way replication））は、データが一群のコンピュータによって記憶され、そして同グループのいずれかのメンバーによって更新されることに備えるデータベース複製の方法である。個々のマスタ・サイトになされる更新が全ての他のマスタ・サイトに伝播される。マルチ・マスタ複製は、全てのデータベース・テーブル・レプリカのデータの収束を提供し、かつグローバルなトランザクション一貫性およびデータ保全性を提供する。競合解消は、マスタ・ノードの各々で独立して扱われる。マルチ・マスタ複製は、マスタ・ノードの各々で各複製データベース・テーブルの完全なレプリカを提供する。全てのメンバーがクライアント・データ照会に応答する。マルチ・マスタ複製システムは、各メンバーによってなされるデータ変更をグループの残りに伝播し、異なるメンバーによってなされる並列変更間で起こり得るいかなる競合も解消する役割を果たす。マルチ・マスタ複製は、上昇した可用性およびより速いサーバ応答時間を提供する。
【００３６】
従来のＡＣＩＤ  ＤＢＭＳでは、原子性、一貫性、独立性および永続性の４つの状態が以下を提供する。原子性に関しては、データベース変更トランザクション（すなわち、アトミック・トランザクション）が「全か無か」の規則に従わなければならない。トランザクションの一部分が失敗した場合、トランザクション全体が失敗する。一貫性に関しては、有効データだけがデータベースに書き込まれることになる。データベースの一貫性規則に違反するトランザクションが実行される場合、トランザクション全体がロール・バックされることになり、そしてデータベースはそれらの規則と一貫した状態に復元されることになる。トランザクションが実行して成功すれば、それはデータベースを、規則と一貫している１つの状態から同じく規則と一貫している別の状態に移すことになる。独立性に関しては、同時に生じる複数のトランザクションが互いの実行に影響を与えない。データベースに対する２つの同時の発行されたトランザクションに関して、両トランザクションが独立した方式でデータベースに作用する。データベースは、１つのトランザクション全体を行った後にその他を実行するか、その逆かである。これは、１つのトランザクションが、結果的にデータベースにコミットされないであろうその他のトランザクションの一部の副作用として生成される中間データを読み取るのを防止する。独立性特性は、どのトランザクションが最初に実行することになるかを保証するのではなく、それらが互いと干渉しないことを保証する。永続性に関しては、データベースにコミットされたいかなるトランザクションも失われないであろう。永続性は、以降の失敗（例えば、ソフトウェアまたはハードウェア障害）に関係なくコミットされたトランザクションの復元を容易にするバックアップおよびトランザクション・ログを使用する。
【００３７】
図５は、一実施形態による、疎結合ノードによるマルチ・マスタ・データベースにおける複製のためのクォーラム処理のシステム５００を例示するブロック図である。一実施形態において、システム５００は、クライアント・デバイス５１０（例えば、モバイル・デバイス、スマート・デバイス、コンピューティング・システム等）、クラウドまたはリソース共有環境５２０、およびサーバ５３０を含む。一実施形態において、クライアント・デバイスは、クラウドまたはリソース共有環境５２０を通じてサーバ５３０からクラウド・サービスが提供される。一実施形態において、システム５００は、コンセンサス・プロトコルを使用して１つのノードが特別なノード（またはリーダ・ノード）として選ばれると規定するマルチ・マスタ・データベース・システムである。コンセンサスは、一群の参加者の中で１つの結果に同意するプロセスである。一実施形態において、システム５００では、書込みクォーラムに関して、特別なノードおよび少なくとも１つの非特別な（または非リーダ）ノードがいずれの書込みクォーラムでもその一部でなければならない。読取りクォーラムに関して、特別なノードおよび少なくとも１つの非特別なノードがいずれの読取りクォーラムでもその一部でなければならない。書込みクォーラムも読取りクォーラムも、永続性要件に応じて、追加ノードが参加者であるように要求してもよいことに留意されたい。コミット・トランザクションの後に、イニシエータ・ノードは、ＳＵＣＣＥＳＳ（成功）結果通知を返す前に、そのトランザクションのログが書込みクォーラムのノードに複製される（そして肯定応答（ａｃｋ）を受信する）のを待つ。イニシエータ・ノードは、ａｃｋを待つ間決してタイム・アウトしない。アプリケーションはタイム・アウトするかもしれず、その場合、返答状態はトランザクション状況ＵＮＫＮＯＷＮ（不明）である。
【００３８】
一実施形態において、システム５００では、書込み（トランザクション）はいかなるノードにも行くことができる。一実施形態において、システム５００は、読取りがクォーラムのノードで見えるデータだけに遭遇し、かつクォーラムが１組または複数組のノードであるクォーラム読取りクォーラム書込みプロトコルを採用する。一実施形態例において、クォーラムは、少なくとも大半のノードを持つ任意の集合である。システム５００は、選ばれた特別なノードを維持し、書込みプロトコルおよび書込みクォーラムを使用し、ここで：書込みは、それらに少なくとも書込みクォーラムのノードから（書込みが複製されたという）肯定応答が通知されるまで待ち、書込み操作は決してタイムアウトせず、そしていかなる読取りクォーラムもおよびいかなる書込みクォーラムも常に特別なノードおよび少なくとも１つの他のノードを含む。
【００３９】
１つまたは複数の実施形態において、特別なノードがいつでも故障するかもしれず、新たな特別なノードが選ばれなければならないかもしれないことが留意されるべきである。この理由で、特別だけのクォーラムは機能しない。新たな特別なノードが選ばれるとき、いずれの成功したトランザクション（コミットがＳＵＣＣＥＳＳ（成功）を返すか、それが状態、トランザクション状況ＵＮＫＮＯＷＮ（不明）を返し、かつ以降の照会がトランザクションの変更に遭遇したかの場合、トランザクションは成功である）も以前の特別なノードに加えて少なくとも１つの他のノードに伝播されたそれらのそれぞれの変更を有することが保証される。以前の特別なノードが目下無応答であっても、他のノードが、全ての成功したトランザクションを復元するために使用されてもよい。
【００４０】
一実施形態において、システム５００では、書込みプロトコルは、システム５００が：１）いずれかのノードで書込みを発行し；２）ローカルに（そのノードで）書込みを記録し、他のノードに非同期で複製され；３）受取りの肯定応答が少なくともクォーラムのノードから受信されるまで待ち；４）クライアント・デバイス５１０が３）の間にタイムアウトすることができる場合、読取りを発行することによって書込みの状況を見つけ出してもよい、ことを含む。
【００４１】
一実施形態において、システム５００では、読取りプロトコルは、システム５００が：１）いずれかのノードで読取りを発行してもよく；２）読取りが、少なくともクォーラムのノードによって複製されていると知られている行だけを返し；３）特別なノードが応答しないために２）での読取りがタイム・アウトした場合、システム５００は、コンセンサス・プロトコルを介して新たな特別なノードを選び、そして２）に続く、ことを含む。
【００４２】
一実施形態例において、システム５００は：１）ノードＡ（特別なノードとして選ばれる）で書込みを発行し、ここでシステム５００は他のノードＢ、Ｃ、ＤおよびＥを有し；２）クライアント・デバイス５１０がタイム・アウトし、いずれかのノード、例えばノードＣで読取りを発行する。この例では、システム５００では、読取りが、Ａおよび１つの他のノードで見える行だけを返す。１）でノードＣが書込みを受信した場合、読取りは同書込みに遭遇する。そうでなければ、ノードＣは、ノードＡ、Ｂ、ＤもしくはノードＥまたはその組合せから通知を受信するのを待つ。ノードＡならびにノードＢ、Ｃ、ＤおよびＥの少なくとも１つが書込みを受信したとノードＣが通知された場合、読取りは同書込みに遭遇する。プロセスがノードＡを待ってタイム・アウトし、かつノードＢ、Ｃ、ＤおよびＥのいずれも書込みをまだ受信していない場合、新たな特別なノードが選ばれる。当初の書込みは失われる。そうでなければ、書込みは常にこの読取りおよび以降の読取りに見える。
【００４３】
一実施形態において、システム５００によって次の通りに加重体系が実装されてもよい。３つのノードがあると仮定する。特別なノードは０．９の重みを有してもよい。その他の２つのノードは各々０．３の重みを有する。一実施形態において、クォーラムのための閾値は、重みの合計が≧１．２でなければならないことであり、これは特別なノードに加えて１つの他のノードである。それに応じて他の加重体系も使用されてもよいことが留意されるべきである。
【００４４】
１つまたは複数の実施形態が以下の利点を提供する：ネットワークが分断されるかもしれない、またはノードが故障するかもしれない疎結合環境でさえ、トランザクションがコミットすることができる；リーダ・ノードだけでなく、いかなるノードにもトランザクションが提出されることができる；トランザクションの返答状況が不明であるときでさえ、アプリケーションはまだ単調読取りを有する。読取りクォーラムが特別なノードを含むので、１つの読取りが挿入された行を逃し、以降の読取りがそれらを見つけることは決してあり得ない。
【００４５】
図６は、一実施形態による、疎結合ノードによるマルチ・マスタ・データベースにおける単調トランザクションのためのプロセス６００のためのブロック図を例示する。ブロック６１０で、プロセス６００は、プロセッサ（例えば、クラウド・コンピューティング環境５０、図１、システム３００、図３、システム４００、図４、システム５００、図５におけるプロセッサ）によって、書込みトランザクション・プロトコルを行う。ブロック６２０で、プロセス６００は引き続き：クライアント・デバイスがノードのいずれか（例えば、クライアント・デバイス５１０、サーバ５３０、またはクラウド・コンピューティング環境５０、システム３００、システム４００もしくはシステム５００における任意の他のピア・デバイス）で書込みトランザクションを発行することと、書込みトランザクションを発行するノードでローカルに書込みトランザクション（の変更）を記録し、少なくとも１つの他のノードに書込みトランザクションを非同期で複製することと、クライアント・デバイスに応答を返す前にノードの少なくともクォーラムからの肯定応答の受信を待つことと、を含む書込みトランザクション・プロトコルを行う。一実施形態において、クォーラムは、特別なノードおよび少なくとも１つの他のノード（および任意選択で他のノード）を含むノードの任意の集合である。
【００４６】
プロセス６００は：ノードのいずれかで読取りトランザクションを発行することと、ノードの少なくともクォーラムによって複製されていると知られている行を返すことを試みることと、特別なノードが非応答であることに基づく、ノードの少なくともクォーラムによって複製されていると知られている行を返すことを試みることのタイム・アウトに対して：新たな特別なノードを選択することと、ノードの少なくともクォーラムによって複製されていると知られている行を返すことを試みることを繰り返すこととを含む読取りトランザクション・プロトコルを、プロセッサによって行うことを更に含んでもよい。
【００４７】
一実施形態において、更にプロセス６００では、マルチ・マスタ・データベースから肯定応答を受信するのを待つ間にクライアント・デバイスがタイム・アウトしたと判定した上で、クライアント・デバイスは、少なくとも１つの読取りトランザクションを発行することによって書込みトランザクションの状況を得る。次いで、クライアント・デバイスは、この読取りトランザクションに対する応答を待ち；そしてこの待機がタイムアウト閾値を超えた上で、クライアント・デバイスは、繰り返し読取りトランザクションを再試行する。一実施形態において、プロセス６００では、特別なノードの選択は選挙を含む。
【００４８】
一実施形態において、プロセス６００は、特別なノードがノードのいずれかであり、そして選挙が、コンセンサス・プロトコルを使用してプロセッサによって行われることを含む。一実施形態において、プロセス６００では、少なくとも１つの読取りトランザクションのタイムアウトを判定した上で、クライアント・デバイスは、少なくとも１つの読取りトランザクションを繰り返す。
【００４９】
一実施形態において、プロセス６００に関して、新たな特別なノードの選択は、トランザクション失敗または特別なノードの非反応によりプロセッサによって行われる。
【００５０】
一実施形態において、プロセス６００は、クォーラムが永続性要件に基づいて選択されるいくつかの他のノードを更に含むことを含んでもよい。プロセス６００は、特別なノードを含むノードに重みを割り当てることを更に含んでもよい。プロセス６００に関して、特別なノードに割り当てられる重みが残りのノードに割り当てられる重みを超え、そしてクォーラム投票が、クォーラム閾値以上である投票ノード重みの合計に基づいてもよい。
【００５１】
１つまたは複数のコンピュータ可読ストレージ媒体の任意の組合せが利用されてもよい。コンピュータ可読ストレージ媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体であってもよい。コンピュータ可読記憶媒体は、例えば、電子、磁気、光学、電磁、赤外線もしくは半導体システム、装置もしくはデバイス、または上記の任意の適切な組合せであってもよいが、これに限定されない。コンピュータ可読記憶媒体のより具体的な例（非網羅的な列挙）としては以下を含むことができる：１つまたは複数の電線を有する電気接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ）、消去可能プログラマブル・リード・オンリ・メモリ（ＥＰＲＯＭもしくはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ（ＣＤ−ＲＯＭ）、光記憶デバイス、磁気記憶装置、または上記の任意の適切な組合せ。本文書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置またはデバイスによる使用のための、またはそれに関するプログラムを含むまたは記憶することができる任意の有形媒体であってもよい。
【００５２】
コンピュータ可読信号媒体は、コンピュータ可読プログラム・コードが、例えば、ベースバンドにまたは搬送波の一部として具象化される、伝播されるデータ信号を含んでもよい。そのような伝播信号は、電磁、光学またはその任意の適切な組合せを含むがこれに限定されない、各種の形態のいずれかをとってもよい。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体でなく、かつ命令実行システム、装置またはデバイスによる使用のための、またはそれに関するプログラムを通信、伝播または転送することができる任意のコンピュータ可読媒体であってもよい。
【００５３】
コンピュータ可読媒体に具象化されるプログラム・コードは、ワイヤレス、ワイヤライン、光ファイバ・ケーブル、ＲＦ等、または上記の任意の適切な組合せを含むがこれらに限定されない、任意の適当な媒体を使用して伝送されてもよい。
【００５４】
本発明の態様のための動作を実施するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などといったオブジェクト指向プログラミング言語および「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つまたは複数のプログラミング言語の任意の組合せで書かれてもよい。プログラム・コードは、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンド・アロン・ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上でかつ部分的にリモート・コンピュータ上で、または完全にリモート・コンピュータもしくはサーバ上で実行してもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）もしくはワイド・エリア・ネットワーク（ＷＡＮ）を含む、任意の種類のネットワークを通じてユーザのコンピュータに接続されてもよく、または外部コンピュータに接続がなされてもよい（例えば、インターネット・サービス・プロバイダを使用してインターネットを通じて）。
【００５５】
本発明の態様が、本発明の実施形態に係る方法、装置（システム）およびコンピュータ・プログラム製品のフローチャート例もしくはブロック図またはその両方を参照しつつ下記される。フローチャート例もしくはブロック図またはその両方の各ブロック、およびフローチャート例もしくはブロック図またはその両方におけるブロックの組合せが、コンピュータ・プログラム命令によって実装されることができることが理解されるであろう。これらのコンピュータ・プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行される命令が、フローチャートもしくはブロック図またはその両方の１つまたは複数のブロックに特定される機能／行為を実装するための手段を生じさせるように、汎用コンピュータ、専用コンピュータまたは他のプログラマブル・データ処理装置のプロセッサに提供されてマシンを生成するものであってよい。
【００５６】
これらのコンピュータ・プログラム命令はまた、コンピュータ可読媒体に記憶される命令が、フローチャートもしくはブロック図またはその両方の１つまたは複数のブロックに特定される機能／行為を実装する命令を含む製品を生成するように、コンピュータ可読媒体に記憶され、コンピュータ、他のプログラマブル・データ処理装置または他のデバイスに特定の方式で機能するように指図することができるものであってもよい。
【００５７】
コンピュータ・プログラム命令はまた、コンピュータまたは他のプログラマブル装置上で実行する命令が、フローチャートもしくはブロック図またはその両方の１つまたは複数のブロックに特定される機能／行為を実装するためのプロセスを提供するように、コンピュータ実装プロセスを生成させるべく、コンピュータ、他のプログラマブル・データ処理装置または他のデバイスへロードされ、コンピュータ、他のプログラマブル装置または他のデバイス上で一連の動作ステップを行わせるものであってもよい。
【００５８】
図におけるフローチャートおよびブロック図は、本発明の様々な実施形態に係るシステム、方法およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能性および動作を例示する。この点で、フローチャートまたはブロック図における各ブロックは、モジュール、セグメントまたは命令の一部分を表現してもよく、それは特定された論理機能を実装するための１つまたは複数の実行可能命令を備える。いくつかの代替実装では、ブロックに示される機能は、図に示される順序と異なって起こってもよい。例えば、連続して図示される２つのブロックが、実際には、実質的に並行して実行されてもよく、またはブロックは、時に逆順に実行されてもよく、関与する機能性次第である。ブロック図もしくはフローチャート例またはその両方の各ブロック、およびブロック図もしくはフローチャート例またはその両方におけるブロックの組合せが、特定された機能もしくは行為を行うまたは専用ハードウェアおよびコンピュータ命令の組合せを実施する専用ハードウェア・ベースのシステムによって実装されることができることも留意されるであろう。
【００５９】
単数の要素への請求項における言及は、明言されない限り、「１つであり唯一」ではなく、むしろ「１つまたは複数」を意味すると意図される。現在当業者に公知であるまたは今後公知になる上記の例証的な実施形態の要素の全ての構造および機能的等価物が本請求項によって包含されると意図される。本出願の請求項要素は、要素が成句「ための手段」または「ためのステップ」を使用して明白に詳述されない限り、米国特許法第１１２条第６項の規定により解釈されるものでない。
【００６０】
本明細書で使用される技術用語は単に特定の実施形態を記載する目的であり、本発明を限定しているとは意図されない。本明細書で使用される場合、単数形「或る１つ（a）」、「或る１つ（an）」および「その１つ（the）」は、文脈が別途明示しない限り、複数形も含むと意図される。用語「備える（comprises）」もしくは「備え（comprising）」またはその両方は、本明細書で使用されるとき、明言された特徴、完全体、ステップ、動作、要素もしくは部品またはその組合せの存在を特定するが、１つもしくは複数の他の特徴、完全体、ステップ、動作、要素、部品もしくはその群またはその組合せの存在または追加を排除しないことが更に理解されるであろう。
【００６１】
添付の請求項における全てのミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、行為および等価物は、詳細に特許請求される他の特許請求要素と組み合わせて機能を行うための任意の構造、材料または行為を含むと意図される。本発明の説明は例示および説明の目的で提示されたが、網羅的であるとも、または開示された形態の本発明に限定されるとも意図されない。本発明の範囲および思想から逸脱することなく、多くの変更および変形が当業者にとって明らかであろう。実施形態は、本発明の原理、実際的応用を最もよく説明するため、および企図された特定の使用に適した様々な変更を伴う様々な実施形態に関して当業者が本発明を理解することを可能にするために選ばれて説明された。
【図１】
0006979079.tif 000002
【図２】
0006979079.tif 000003
【図３】
0006979079.tif 000004
【図４】
0006979079.tif 000005
【図５】
0006979079.tif 000006
【図６】
0006979079.tif 000007