【誤訳訂正書】
【提出日】平成29年6月23日(2017.6.23)
【誤訳訂正１】
【訂正対象書類名】明細書
【訂正対象項目名】全文
【訂正方法】変更
【訂正の内容】
【発明の詳細な説明】
【発明の名称】索引更新パイプライン
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１３年５月２０日に出願された米国特許出願第１３，８９８，１５１号に対する利益を主張するものであり、その開示は、参照によりその全体が本明細書に組み込まれる。
【背景技術】
【０００２】
分散型データベース管理システム（「ＤＢＭＳ」）は、複数のコンピューティングデバイス間で分散されるデータの記憶および取り出しを可能にし得る。分散型ＤＢＭＳ中のデータはテーブルに構成され、これらのテーブルが次に、ときにパーティションとして説明される項目の集合を含み得る。システムの性能、信頼性、および利用可能性を改善するために、各パーティションは各々、それが格納する項目を記憶するおよび取り出す要求を処理する別個のコンピューティングノード上に格納され得る。分散型データベースはまた、システム障害があった場合に用いられ得る待機パーティションを維持するために複製を用い得る。
【０００３】
索引は、分散型ＤＢＭＳ中に記憶された項目を位置特定することを可能にするデータ構造として説明され得る。それらは、例えば、データの特定の範囲に入る項目が、パーティションのうちの１つ以上に記憶された項目の全てにわたって検索するのではなくて索引をスキャンすることによって位置特定されることを可能にする。分散型ＤＢＭＳは、ローカル索引およびグローバル索引を含み得る。ローカル索引は、１つのパーティション上に記憶された項目を指す索引として説明することが可能である。グローバル索引という用語は、テーブルによって維持されるデータの全てを指す索引を説明するために用いられ得る。複製のため、分散型ＤＢＭＳは、ローカル索引およびグローバル索引各々の複数のバージョンを含み得る。これらの索引のいくつかは、分散型ＤＢＭＳによって維持されるデータが追加、削除、または変更されたときに更新され得る。
【０００４】
本明細書に提供する図面は、例となる実施形態を例示するために描かれており、本開示の範囲を限定することを意図するものではない。
【図面の簡単な説明】
【０００５】
【図１Ａ】コンピューティングノードに対応するデータパーティションにアクセスするためにハッシュ関数および範囲キー関数を用いる、分散型ＤＢＭＳの実施形態を図示するブロック図である。
【図１Ｂ】クォーラムベースのトランザクションに関与するパーティションのセットに対して動作が実施される、分散型ＤＢＭＳの実施形態を図示するブロック図である。
【図２Ａ】関連付けられた複製パートナーおよび索引構造を持つパーティション化されたテーブルを図示するブロック図である。
【図２Ｂ】２つの関連付けられた索引パーティションを持つテーブルパーティションを図示するブロック図である。
【図３】索引付けられた値に対する変更の結果として生じる複数の索引更新の例示の実施例を図示する図である。
【図４】索引構造を更新する命令を含む複製ログの実施形態を図示する。
【図５】命令を記録して、１つのパーティションから１つ以上の影響されたパーティションに送信するための実施形態を図示するフローチャートである。
【図６】命令の伝送および索引構造に対する命令の実行のための送信バッファおよび受信バッファを構成するための実施形態を図示するブロック図である。
【図７Ａ】システム障害後に受信バッファの内容を回復するための実施形態を図示するフローチャートである。
【図７Ｂ】パーティションによって実行された最後の命令を記録するためのデータ構造の実施形態を図示する図である。
【図８】パーティションを分割するログされた命令を利用するための実施形態を図示するフローチャートである。
【図９】命令を処理する受信パーティションの容量に基づいて命令の伝送に対してフロー制御を適用するための実施形態を図示するフローチャートである。
【図１０】本開示の態様が実施され得るコンピューティング環境の実施形態を図示するブロック図である。
【発明を実施するための形態】
【０００６】
分散型ＤＢＭＳは、各々が項目の集合を含むテーブルによって構成されたデータを維持し得る。項目は各々が、名称と値の対のセット、列名称によって定義された値、または未定義値のセットを含み得る。様々な実施形態では、個々の項目は任意の特定のスキーマに適合し得ず、各々の項目は、したがって、各々が異なる倫理的な意味および種類を有し得る異なる数の値を含み得る。同一の名称または列によって識別されるものなどの、同一の論理的意味および種類を有する値は、利便性のため、列と呼ばれ得る。ＤＢＭＳの他の実施形態は、行および列の形式、一意性制約、一次キーと外部キーとの関係などの特定の構造要件を実施し得る。分散型ＤＢＭＳの例は、キー値データベース、リレーショナルデータベース、非構造化クエリ言語（「ＮｏＳＱＬ」）データベース、オブジェクト指向データベースなどを含む。
【０００７】
テーブル中の項目は、一次キー値によって識別され得る。各々の一次キー値は、全体として見ると、テーブル中に記憶された項目を一意に識別する。項目にアクセスするために、分散型ＤＢＭＳのクライアントは、その項目に対応する一次キー値を含む要求を発行し得る。実施形態はまた、テーブル中の１つの項目に必ずしも正確に対応し得ない二次キーを用いるアクセスをサポートし得る。
【０００８】
一次キーは、テーブルが作成されたときに定義され得る。一次キーの記述は、任意の必要な列、値に対する制約などを含み得るテーブルのスキーマの他の特徴とともに記憶され得る。一次キーの場合、スキーマは、長さの記述および一次キーの値を含み得る。例えば、一次キーは、２５６ビットのバイナリ値としてまたは可変長の文字ストリングとして定義され得る。
【０００９】
一次キーはまた、内部構造を有するものとして定義され得る。いくつかの実施形態では、一次キーの構造は、１つの値のみから成り得るが、実施形態は、一次キーが２つ以上の値の複合を含むことをサポートするか要求し得る。例えば、一次キーは、２つの部分、すなわち、ハッシュキーおよび範囲キーに分割され得る。一緒にすると、一次キーのこれらの部分は、項目の集合内の階層的関係を反映または定義し得る。ハッシュキーは階層内の項目の群を識別し得るが、範囲キーは群内の特定の項目を識別し得る。
【００１０】
一次キーはまた、分散型ＤＢＭＳ中でパーティション化と共に用いられ得る。大量のデータおよび高い作業負荷需要をサポートするために、分散型ＤＢＭＳは、いくつかのコンピューティングノードにわたるテーブル中のデータのパーティション化をサポートし得る。様々な形態のパーティション化がサポートされ得る。水平方向パーティション化では、各々のコンピューティングノードが、項目の集合のサブセットを維持し得る。垂直方向パーティション化では、データは列またはフィールドに基づいて分割され得、各々のコンピューティングノードが、テーブル上で定義された列のサブセットを含みこととなる。いくつかの分散型ＤＢＭＳは、２つの形態のパーティション化を組み合わせ得る。
【００１１】
本明細書で用いられる水平方向および垂直方向パーティション化という用語は、前述の段落と首尾一貫するデータセットの分割を指す。実施形態は、別個のコンピューティングノード上で各々の水平方向または垂直方向のパーティションをホストし得る。本明細書で用いられるパーティションという用語は、一般には、コンピューティングノード上でホストされる水平方向または垂直方向のパーティションのことであるが、この用語はまた、ただ１つのパーティションしか持たないテーブルを含み得る。本明細書で用いられるファンアウトパーティション、非投票メンバー、および複製パートナーは、パーティションのサブカテゴリを指す。
【００１２】
水平方向パーティション化の１つの方法には、様々なコンピューティングノード間でランダムにまたはセミランダムにデータを分散する方法を適用することを伴う。図１Ａに、そのような１つの方法を示す。一次キー１００は、ハッシュキー構成要素１０２および範囲キー構成要素１０４を含む。パーティション１０８、１１０、および１１２上でのデータのランダムにまたはセミランダムの分散は、分散型ＤＢＭＳ１１４の製造を向上させ得る。したがって、項目は、ハッシュキー構成要素１０２に対するハッシュ関数１０６の適用に基づいてパーティション１０８、１１０、および１１２のうちの１つ上に記憶され得る。
【００１３】
ハッシュ関数１０６は、一次キー値を、キー空間と記述され得るものの中で、整数などの別の値に変換するコンピュータコードであり得る。ハッシュ関数１０６は、入力された一次値を、キー空間中でセミランダムポイントに変換するように構成され得るが、所与の入力値は、関数が呼び出されるごとに、キー空間中の同一のポイントに変換される。所与のハッシュ関数は、入力値から、キー空間中のポイントの有限のセット、すなわち、バケットにマッピングし得る。様々な実施形態では、ハッシュ関数１０６は、あるポイントの周りのマッピングをクラスタ化し得る。いくつかのハッシュ関数の場合、これは、入力値が類似しているときに発生し得る。スキューイングは性能を劣化させ得るが、その理由は、それが結果として、特定のコンピューティングノード上に項目の不均一な分布を生じさせ得るからである。この問題を防ぐ１つの手法は、多数の離散的なポイントをキー空間内にマッピングするハッシュ関数を用いることである。すると、キー空間の領域が、コンピューティングノードに割り当てることが可能となる。代替例では、キー空間の領域を、コンピューティングノードを参照する中間データ構造に割り当てることが可能である。異なる領域が、同一のコンピューティングノードまたは中間データ構造にマッピングされ得る。
【００１４】
図１Ａに戻ると、一次キー１００のハッシュキー１０２が、ハッシュ関数１０６に対する入力値として供給され得る。ハッシュキー１０２の所与の値に対して、ハッシュ関数１０６の適用は、ハッシュキー１１６に対応する出力を生成する。ハッシュ関数１０６の出力は、所与の入力値に対して一定である。ハッシュ関数１０６に対する他の値の適用は、他の可能性のある出力１１８を生成し得るが、任意の入力値に対する結果は、首尾一貫している。首尾一貫した出力１１６は、一次キー１００に対応する項目を最初にどこに記憶するかを決定するために用いられ得る。加えて、ハッシュ関数１０６の出力は、所与の入力値に対して首尾一貫しているため、ハッシュキー１０２が、項目が直前にどこに記憶されたかを決定するために、ハッシュ関数１０６に適用され得る。
【００１５】
テーブルは複数の水平方向パーティションに分割することが可能であるが、各々の水平方向パーティションは、同一の項目が２つ以上のコンピューティングノード上に記憶されるように、または、ほぼ同一の水平方向パーティションが２つ以上のコンピューティングノード上でホストされるように、コンピューティングノード間で複製化され得る。これがシステムの利用可能性を向上させ得、その理由は、コンピューティングノードのうちの１つが、利用不可能になると、複製されたデータを有する別のコンピューティングノードが、割って入ってしかるべき地位を占めることが可能となり得るからである。複製化は、負荷を複数のコンピューティングノード間で共有することを可能にすることによってシステムのスケーラビリティを向上させ得る。
【００１６】
複製されたパーティション間の首尾一貫性は、複製されたパーティション間のクォーラムまたは合意を伴う技法を用いて維持され得る。実施形態は、現在アクティブなコンピューティングノード間のクォーラムしか必要とし得ず、これが利用可能性を向上させ得、その理由は、それが、コンピューティングノードの全てがオンラインであることを必要とはしないからである。
【００１７】
いくつかの実施形態では、クォーラムは、最小の数のコンピューティングノードが読み出し動作または書き込み動作に参加することを決定することを伴い得る。読み出し動作の場合、少なくとも最小数のコンピューティングノードが、項目を読み出す要求に応答しなければならない。データは必ずしも即座には複製されるわけではないため、２つの所与のコンピューティングノードが同一の項目に対して異なる値を有するわけである。そうであれば、いくつかの実施形態は、データの各々のバージョンを、バージョンを記述する情報と共に返送し得る。書き込み動作の場合、クォーラムは、最小の数のコンピューティングノードが、書き込み動作の成功に確認応答することを伴い得る。例えば、３つのコンピューティングノードが複製されたデータを共有する場合、３つのコンピューティングノードのうちの２つの書き込み動作が、必要とされなければならない。実施形態は、伴う動作の種類に基づいて異なるクォーラム要件を課し得る。例えば、書き込み動作は、クォーラムを達成するために、より高い閾値数のコンピューティングノードを伴い得る。
【００１８】
図１Ｂは、マスター１５４ならびにクォーラムパートナー１５２および１５６から成る分散型ＤＢＭＳ１５８の実施形態を図示する。これらの各々は、別個のコンピューティングノード上でホストされ得るし、また、別個のデータセンター内に位置付けされ得る。クライアントアプリケーション１５０は、データの読み出しまたは書き込みなどの様々な動作をマスターパーティションに対して実施する要求を発行し得る。いくつかの実施形態は、全ての動作に対して同一のマスターを用い得るが、他の実施形態は、コンピューティングノードの任意のものがマスターとして機能することを許容し得る。要求を受信すると、マスター１５４は、クォーラムパートナー１５２および１５６の関与を保証する。関与するクォーラムパートナーの数は、クォーラムにとって必要とされる数に依存し得る。代替例では、マスター１５４は、現在動作しているクォーラムパートナーの過半数の関与に基づいて、クォーラムが存在すると決定し得る。クォーラムにとって必要とされるように、いったん要求が十分な数のコンピューティングノード上で成功裏に処理されると、動作の結果がクライアントアプリケーション１５０に返送され得る。
【００１９】
分散型データベースは、広範囲の様々な動作をサポートし得る。非限定的な実施例は、項目を記憶するまたは更新することを伴うプット動作と、項目に対応する値を伴う読み出し動作を含む。両方の動作は、分散型ＤＢＭＳが項目を識別する際に用いる一次キー値を供給し得る。いくつかの実施形態によってサポートされ得る動作の別の実施例は、範囲クエリである。範囲クエリは、固定された基準の一部のセットに適合する項目の範囲を返送することを伴う。例えば、分散型ＤＢＭＳは、クライアントが特定のジップコードに対応する全ての項目を取り出すことを望むアドレス情報を含む項目のテーブルを含み得る。一次キーの先端部分を用いてデータをランダムに分散するためにハッシュ関数を用いる分散型ＤＢＭＳでは、範囲クエリは、一次キーの先端部分が固定されている場合には、効率的ではないことがあり得る。
【００２０】
データに対する様々な動作は、一次索引に加えて索引構造を用いることによってより効率的にされ得る。キー値データベースでは、二次索引が、潜在的に一意でないキー値によってアドレス指定可能である１つ以上のデータ構造を含む。一次キー値とは異なって、二次キー値は、必ずしも一意ではない。言い換えれば、１つの二次キー値は、二次索引中の１つ以上のエントリを参照し得る。
【００２１】
所与の項目に対して、二次索引キーは、項目を構成する値のうちの１つ以上を含み得る。様々な実施形態では、二次索引はまた、二次キー値によってアクセス可能であるそのエントリから項目の記憶位置へのマッピングを含み得る。しかしながら、いくつかの実施形態では、このマッピングは省略され得る。二次索引エントリは、項目ストアから全項目を取り出すために用いられ得る、一次キー値のコピーまたは一次索引への直接的参照を含み得る。ベーステーブルとも呼ばれ得る項目ストアは、記憶デバイス上で維持される項目の集合を含む。項目ストア中に記憶された項目は、項目に関連付けられた値または名称値対の全てを含み得る。項目ストア中のデータは、水平方向または垂直方向にパーティション化され、そうである場合には、項目ストアのサブセットは、２つ以上のコンピューティングデバイス上に存在し得る。
【００２２】
索引構造は２つ以上のパーティションにおよび得る。図２Ａは、テーブルの２つのパーティションを示し、第１のパーティション２００が、文字Ａから始まってＭまで及ぶキー値を持つデータを含み、第２のパーティション２０２がＮ〜Ｚを含む。各々のパーティションはまた、パーティション上に記憶された項目の索引を含み得る。パーティション２００上の索引２１２は、Ａ〜Ｍに対応するエントリを含み、パーティション２０２上の索引２１４は、Ｎ〜Ｚに対応するエントリを含む。一緒にすると、索引２１２および２１４はグローバル索引であるとみなされ得、その理由は、それらは一緒に、テーブル中の項目の全てを参照するからである。
【００２３】
図２Ａもまた、第１のパーティション２００が、複製パートナー２０４および２０６とペアリングされているところを示す。複製パートナー２０４および２０６はまた、第１のパーティション２００を持つクォーラムメンバーであり得る。同様に、第２のパーティション２０２は、複製パートナー２０８および２１０とペアリングされているところが示されている。
【００２４】
図示する実施例では、第１のパーティション２００または第２のパーティション２０２上のデータの更新は、他のパーティション上に記憶されているデータおよび作新に影響し得る。１つの実施例として、第１のパーティション２００上に記憶されている項目の更新は、複製パートナー２０４および２０６に複製され、同様に、索引２１６および２１８の更新を必要とし得る。別の実施例として、第１のパーティション２００上に記憶された項目が変更され、そのため、それが今度は、第２のパーティション２０２上に記憶されているはずであるような場合、パーティション２００および２０２、複製パートナー２０４、２０６、２０８、および２１０、ならびに索引２１２、２１４、２１６、２１８、２２０、および２２２が、第１のパーティション２００から除去され第２のパーティション２０２に追加されている項目を反映するように更新され得る。
【００２５】
図２Ｂは、テーブルパーティション２５０ならびに索引パーティション２５４および２５６の配列を示す例示の実施例である。索引パーティションは、索引構造、多分その一部分（すなわち、パーティション化された索引）をホストするコンピューティングノードを含み得る。図示する実施例では、第１の索引パーティション２５４は、Ａ〜Ｍの範囲内に入るテーブルパーティション２５０上に記憶された項目に対する索引エントリを含み、第２の索引パーティション２５６は、Ｎ〜Ｚの範囲の項目に対する索引を含む。
【００２６】
テーブルパーティション２５０上の項目の集合２５２内に記憶された項目の更新は、索引パーティション２５４上の第１の索引２５８と、索引パーティション２５６上の第２の索引２６０とに対する対応する変化を必要とし得る。これは、値が変化するときに発生し得るが、その値は、索引によって用いられるキーに対応する。例えば、そのような値がＮからＥに変化した場合、それに対応するエントリは、第１の索引２５８から削除されて、第２の索引２６０に追加される必要があるであろう。
【００２７】
図３は、索引付けられた値に対する変更の結果として生じる複数の索引更新を示す例示の実施例である。例示目的で、テーブルは、図２Ｂに示すように、第１の索引パーティション２５４および第２の索引パーティション２５６を含むものと想定される。図３は、項目の値のうちの１つに対する変更の前および後の、項目の集合および関連付けられた索引の状態を示す。例示目的で、図２Ｂに示すパーティション化方式が想定され得る。したがって、第１の索引３０８ａは、Ａ〜Ｍの範囲のキー値をマッピングし、第２の索引３１０ａは、Ｎ〜Ｚの範囲のキー値をマッピングする。項目３０６ａが変更される前では、Ｎというその値に対応するエントリは、第２の索引３１０ａ内の索引エントリ３１２中に見出される。
【００２８】
項目３０４ａのセットの項目３０６ａは、項目３０６ｂによって示されるように最初は、Ｎという値を有するが、次にＥに変更される。変更された値は、更新された項目３０４ｂに反映される。第１の索引３０８ｂもまた変更され、新たなエントリ３１４を有し、項目３０６ｂの新たな状態を反映する。同様に、索引エントリ３１２が、第２の索引３１０ｂから削除される。
【００２９】
直前で説明した変更は、いくつかの離散的な行為を含むものとして見なされ得る。第一に、値Ｎを含む項目の集合中の項目が、Ｅという新たな値を反映するように更新された。第二に、削除動作が索引に対して実施されて、古いＮ値に対応するエントリを除去した。第三に、エントリが索引に追加されて、新たなＥ値を反映した。本明細書に開示する様々な実施形態では、これらのような変更を表す命令が、更新パイプラインを介して分散型ＤＢＭＳの様々な構成要素に分散され得る。
【００３０】
分散型ＤＢＭＳでは、各々のパーティションは、そのパーティションに加えられた変更を記述する複製ログを有し得る。複製ログは、パーティション上に記憶された項目の追加、削除、または修正などの、そのパーティション上に記憶されたデータに加えられた変更を記述し得る。複製ログに追加された全ての変更は、パーティションが最初に作成されたときの１から始まり、連続的に増加するログの通し番号（「ＬＳＮ」）を含み得る。加えて、各々のパーティションは、パーティションを識別するパーティションＩＤ（「ＰＩＤ」）によって識別され得る。ＬＳＮとＰＩＤとの組み合わせを用いて、パーティションに加えられた変更を一意に識別し得る。
【００３１】
分散型ＤＢＭＳは、項目の値が変化したことを示すエントリを複製ログ中に記録し得る。変更のコンパクトな表現は、一次キー値と、変化した任意のさらなる値とを供給し得る。実施形態はまた、グローバルおよびローカルの二次索引に対して更新を実施することと組み合わせて、複製ログを用い得る。図２Ａを例として用いると、項目の更新は、エントリを索引２１２から削除して、エントリを索引２１４に追加することを伴い得る。第１のパーティション２００からの複製ログは、クォーラムメンバー２０４および２０６に送り出され得、第２のパーティション２０２からの複製ログは、クォーラムメンバー２０８および２１０に送り出され得る。
【００３２】
複製パートナーメンバー２０４は、複製ログの処理の１つの方法を解説するための実施例として用いられ得る。複製ログを受信すると、クォーラムメンバー２０４は、ログ中の各々のエントリを処理して、エントリがどの種類の変更を表すかを決定し得る。各々のエントリに対して、複製パートナー２０４は、その記憶ロケーション中の項目を更新することによって変更を適用し、どの索引構造を更新すべきかを決定し、次にこれらの変更を適用し得る。
【００３３】
第１のパーティション２００などのパーティションから取得された複製ログは、２０４および２０６などの複製パートナーに送り出され得る。分散型ＤＢＭＳの実施形態は、変更のコンパクトな表現を含む複製ログを送出し得る。そうであれば、複製パートナー２０４および２０６は、どの索引構造を更新する必要があるかを決定するなどのステップを実施することを含み、他の更新に対してと同様に、更新を処理し得る。
【００３４】
しかしながら、実施形態は、複製ログエントリが、更新中にマスターパーティションによって実施される動作に対応する命令のセットを含むように拡張される代替の手法を用い得る。この手法は、マスターパーティションが、どの索引構造が更新する必要があるかを決定することを可能にし、その情報を複製ログに含むことによって、性能を向上させ得る。実施例として再度複製パートナー２０４を用いると、それは、第１のパーティション２００から複製ログを受信し得る。ログ中の各々のエントリは、記憶されている項目と、影響された任意の索引構造とを更新するために実施することが可能な動作の順序を記述する情報を含み得る。
【００３５】
図４は、索引構造を更新する命令を含む複製ログの実施形態を図示する。ログエントリ４１８は、複製ログ中のエントリを表す。複製ログを記述する１つの方法は、行および列を持つテーブルという観点からのものである。ログエントリ４１８は、ＰＩＤ列４００、ログ通し番号（「ＬＳＮ」）列４０２、ＩＳＮ列４０４、および変更記述列４０６を含む。ＰＩＤ列４００は、要求を処理している送信パーティションを示し得る。この列からの値が、送信者を識別するために受信パーティションに送信され得る。
【００３６】
示されるログエントリ４１８の全てが、示されるログエントリ４１８の全てに対して同等である、パーティションｉｄ列４００およびログ通し番号列４０２の値によって示されるように、１つの変更に対応する。３つの命令が示される。項目更新４０８は、ディスク上に記憶されている項目の｛ＩＮＤＥＸ  ＫＥＹ＝“Ｅ”｝の新たな値への更新を表し、式中、ＩＮＤＥＸ  ＫＥＹは、これまた索引中で用いられるキーである項目中の値のことである。さらなる項目もまた、変更され得るが、図４には示されていない。索引削除４１０は、最新ではない値｛ＩＮＤＥＸ  ＫＥＹ＝“Ｎ”｝に対応するエントリを二次索引から除去する動作を表す。索引追加４１２は、新たな値｛ＩＮＤＥＸ  ＫＥＹ＝“Ｅ”｝に対応するエントリを二次索引に追加する動作を表す。実施形態は、各々の命令を、ＩＳＮ列４０４に示すようなものなどのＩＳＮ値に関連付け得る。ＩＳＮ値は、命令を実施すべき順序を示すために用いられ得る、または、命令を一意に識別するために用いられ得る。
【００３７】
様々な実施形態では、要求された修正を適用するパーティションは、ローカルデータ構造と遠隔データ構造との両方が、更新を完了するために変更する必要があることを決定し得る。したがって、ログエントリ４００は、動作４１４と対象４１６との両方を含み得る。図４では、項目更新４０８は、テーブルパーティション、すなわち、索引ではなく項目の集合を保持するパーティションと、命令を処理する同一のパーティションとを対象とするものと想定され得る。索引削除４１０および索引追加４１２は、各々が、索引データしか保持しないパーティションであり得る索引パーティションを対象とし得る。しかしながら、実施形態は、同一のパーティション上でホストされる索引および項目の集合と、様々な順列での異なるパーティションまたは複数のパーティションと、に関与し得る。ある実施形態では、対象指定は、パーティション識別子を含み得る。更新されていると特定の索引または他の構造の識別子などの他の要素もまた、含まれ得る。
【００３８】
変更を処理することは、結果として、２つ以上のパーティション上に位置付けされた構造に対する動作を生じ得るため、実施形態は、命令を他の影響されたパーティションに分配するための様々な機構を用い得る。このような１つの機構は、送信バッファおよび受信バッファに関与し得る。あるパーティション上では、送信バッファが、命令が送信され得る各々のパーティションに対して確立され得、受信バッファが、命令が受信され得る各々のパーティションに対して確立され得る。
【００３９】
様々な命令種類が、複製ログ中に含まれ得るおよび／または処理目的で他のパーティションに送信され得る。非限定的な実施例は、挿入、更新、および削除などの、項目または索引に対する様々な変更を含む。組み合わされた索引挿入および削除などの組み合わされた動作もまた、示され得る。命令もまた、動作のセットをアトミックなトランザクションとして実施すべきであるとの指示を含み得る。
【００４０】
図５は、命令を記録して、１つのパーティションから１つ以上の影響されたパーティションに送信するための実施形態を図示するフローチャートである。一連の動作のとして示されているが、当業者は、示される動作の少なくとも一部は、変更され、省略され、記録され、または並行して実施され得ることを理解するであろう。
【００４１】
動作５００は、変更要求を受信することを示す。変更要求は、新たな項目を追加すること、項目を成す１つ以上の既存の値を更新すること、さらなる値を追加すること、項目を削除することなどを含み得る。変更要求は、次に、何の構造が影響されるかを決定するおよび複製ログに書き込む命令の一覧を編成するために、動作５０２によって示されるように分析され得る。いくつかの実施形態では、命令は、例えば、索引および他の命令に対する修正を、それらが発生するに連れて補足して記録することによって、一覧を編成することと同時に並行して実施され得る。他の実施形態は、索引および他の構造を修正する前に、変更要求を分析し得る。例えば、クエリオプティマイザまたは他のデータベース構成要素が、命令の一覧が取得され得る要求のための実行プランを決定し得る。
【００４２】
命令の一覧は、動作５０４によって示されるように、複製ログファイルに書き込まれ得る。いったん書き込まれると、命令は、それらがシステム障害後でも依然として処理され得るため、持続するものとみなされ得る。ログファイルは、どのエントリがローカルで処理されたか、および、どのエントリが成功裏に他のパーティションに送信されたかの指示を含み得る。
【００４３】
命令は持続するものとみなされる得るため、変更要求は、動作５０５によって示されるように、変更要求のイニシエータに対して、変更要求は、最終的に首尾一貫しているものとして確認応答され得る。言い換えれば、変更された項目または索引エントリを対象とする次の読み出し動作は、それでも古い値を返し得るが、新たな状態を反映するように最終的に更新される。実施形態は、例えば、命令が５０４でログに書き込まれた後、ローカル命令が５０８で実施された後、全ての命令が５１０で確認応答されたときなどの様々なレベルの首尾一貫性に対して、確認応答を、変更要求のイニシエータに送信されることを可能とし得る。変更要求のイニシエータは、終局的または即座の首尾一貫性などのなんのレベルの首尾一貫性が望まれるかを示し得る。
【００４４】
動作５０６は、複製ログ中の命令を影響されたパーティションに伝送することを示す。実施形態は、命令を送信バッファに書き込むことに関与する技法を用い得、この送信バッファは、命令を、それらが影響されたパーティションに送信され、命令の受信が確認応答されるまで保持し得る。別個の送信バッファが、各々の宛先パーティションに対して用いられ得る。実施形態はまた、命令をそれらの対応する宛先パーティションに相関させる情報を含む１つの送信バッファを用い得る。
【００４５】
他のパーティションに送信される命令の一部または全ては、変更要求を受信したパーティションに適用可能であり得る。動作５０８は、変更要求を受信したパーティション上でこれらの命令を実施することを示す。加えて、動作５０８は、非ローカルな索引または他の命令を変更する命令を実施することに関与し得る。例えば、図２Ａでは、第１のパーティション２００は、遠隔に位置付けされたパーティションまたは他のコンピューティングノード上の索引構造を修正する命令を実施し得る。他の実施形態は、非ローカルな命令を、構造をホストしているパーティションに命令を送信することによって実施されるようにし得る。
【００４６】
動作５０８は、図５に示す順序で実施され得る、または、それは、変更要求の処理に応答して別の時間で実施され得る。例えば、図５に示す動作は、実行の１つのスレッド上で実施され得るが、動作５０８は例外であって、実行の別個のスレッド上で同時並行に実施され得る。実施形態は、５０８が開始された後でまたは５０８が完了される前として示されるステップを実施し得る。動作５０８で実施される命令が完了されたとき、それらは、変更要求を受信したパーティションに関してコミットされたものとして印付けられ得る。
【００４７】
命令を送信バッファに書き込んだ後のある時点で、パーティションは、命令がパーティションによって受信され、受信したパーティション上で持続性があると考えられ得るとの確認応答を、動作５１０に示すように、受信し得る。いくつかの実施形態では、命令は、確認応答が受信されたときには実施されていないことがあり得る。しかしながら、これらの実施形態の場合、確認応答は、宛先パーティションが、確認応答された命令を実施する責任を容認したことを確認する。これは、例えば、受信された命令を、宛先パーティションによって維持されるログファイルに書き込むことによって行われ得る。他の実施形態は、命令が処理されるまで、確認応答を遅延させ得る。確認応答は、送信パーティションに伝送されるメッセージに含まれて、最後に実行された命令のＬＳＮ値を含み得る。命令を順番に処理する実施形態の場合、これは、より低いＬＳＮ値を持つ命令もまた実行されたことを示すに十分である。
【００４８】
パーティションによって受信された確定応答は、命令が成功裏に実施された、命令が効果的に実施された（例えば、実施されたであろうが、冗長であった）、または、それらの処理中にエラーが発生した、という確認応答であり得る。本明細書で用いられる、実施されたまたは実施するという用語は、これらの状態の任意のものを含み得る。エラーの場合、実施形態は、たとえエラー状態が発生してもログファイルから命令をコミットまたは除去し得るが、その理由は、さもなければ、エラーを引き起こした命令が繰り返し再送され得るからである。実施形態は、受信された確認応答の種類に関するさらなる情報でログを更新し得るが、様々な報告が、技術要員がエラー状態を診断してデータの矛盾を補正するのを支援するために生成され得る。実施形態は、ログファイル中の命令をエラー有りもしくは無しで実施されたものとして印付けるまたは命令をログファイルから除去するなどのステップを実施し得る。
【００４９】
実施形態はまた、予期される期間を超えて確認応答されなかったまま残ったログファイル中の命令を検出する技法を用い得る。実施形態は、そのようなエントリをログファイルから除去するまたは、後の診断もしくはデータ矛盾の補正のために、ステータス情報でエントリを印付け得る。用いられ得る技法は、複製ログ中の命令をスキャンすること、命令が送信された時間を検討すること、および、確認応答されなかった命令を含む複製ログの領域を追跡することの様々な組み合わせである。
【００５０】
動作５１２で、確認応答された命令に対応するログファイル中の命令は、それらの宛先パーティションに関してコミットされたものとして印付けられ得る。動作５０８もまた完了された場合、命令は完全にコミットされたものとして印付けられ得る。障害およびマスターの再指定などの他の事象から回復すると、ログファイル中のエントリが再生される。再生プロセスは、コミットされていない命令を再送信するが、コミットされた命令をスキップし得る。
【００５１】
いくつかの実施形態は、ログファイル中の対応するエントリを更新することによって、コミットされたものとして得る。他の実施形態は、ログファイルを更新しない場合がある。例えば、いくつかの実施形態は、最後に実行された命令の記録に基づいて、ログファイルから命令を再生し得る。最後に実行された命令に続く命令はコミットされていないものとみなされ、一方、最後に実行された命令の前の命令は、最後に実行された命令を含んで、コミットされたとして印付けられているとみなされる。
【００５２】
図６は、送信バッファおよび受信バッファを構成するための実施形態を図示する。送信パーティション６００は、ログファイル６１２ならびに２つの送信バッファ６０８および６１０を含み、それらは揮発性メモリに記憶され得る。ログファイル６１８ならびに送信バッファ６１４および６１６を含む送信パーティション６０２は、送信パーティション６００と同様に構成され、類似した様式で動作する。
【００５３】
いくつかの実施形態では、パーティションは、全ての受信パーティションに対してそれぞれ１つの送信バッファを利用し得る。例示説明の目的で、送信パーティション６００および６０２は、各々が、変更要求を受信したものと想定する。さらに、各々の変更要求は、命令を受信パーティション６０４および６０６の各々に伝送することを暗示するものと想定する。これらの想定は、矢印付きの命令６３２および６３４によって図６に反映されている。
【００５４】
送信パーティション６００をより詳しく検討すると、前の段落で説明した例となる変更要求が受信されたときに、送信パーティションは、受信パーティション６０４および６０６に向けられた命令をログファイル６１２に書き込ませて、対応するメモリ内送信バッファ６０８および６１０中に配置させて、最終的に受信パーティション６０４および６０６に伝送されるようにし得る。送信バッファ中に配置された命令は、実施される命令の記述、命令が適用するデータ構造の指示、および送信パーティションのＬＳＮ、ＰＩＤなどの情報などを含み得る。この情報は、受信パーティション６０４および６０６などの受信パーティションが、要求の源を識別して、命令が処理されるべき順序を決定することを可能にし得る。情報はまた、図７に関連して本明細書に記載されるように、確認応答を送信し、どの命令が既に実施されているかを追跡するために用いられ得る。
【００５５】
命令６３２がログファイル６１２に書き込まれた後で、しかし、それらが成功裏に送信されて、受信パーティション６０４および６０６によって処理される前に、システムがクラッシュするということであり得る。そうであれば、システムが回復するとき、ログファイル６１２中のエントリが再生され、したがって、命令６３２は、再度送信バッファ６０８および６１０中に配置される。
【００５６】
受信パーティション６０４は、索引６２４を含み、それは解説目的で、命令６３２および６３４の対象のうちの１つとみなされ得る。受信パーティション６０４はまた、それが命令を受信し得る各々のパーティションに対して１つの受信バッファを含み得る。したがって、図６は、送信パーティション６００および６０２に対応する２つの受信バッファ６２０および６２２を示す。受信バッファ６２６および６２８ならびに索引６３０を含む受信パーティション６０６は、受信パーティション６０４と同様に構成され、類似した様式で動作する。
【００５７】
受信バッファ６２０および６２２は、揮発性メモリ中に保持され得るし、結果として、バッファ中に保持される命令は、システム障害の際に失われ得る。しかしながら、実施形態は、システムログエントリを再生することによってシステム障害を回復し得る。図６に示すシステムが故障した場合、回復すると、ログファイル６１２および６１８を再生することが可能であり、したがって、ログファイル１６２および６１８中の確認応答されていない命令は、再度、受信パーティション６０４に送信されて、バッファ６２０および６２２中に記憶され得る。
【００５８】
いったんバッファ６２０および６２２中に配置されると、命令は実行され得る。命令を実行することは、索引６２４中のエントリを挿入すること、更新すること、さもなければ修正することを伴い得る。いったん命令が実行されると、それは、受信バッファから除去され得る。実施形態は、アトミックなトランザクションの文脈で、命令を実行し、それを受信バッファから除去して、命令が失われるまたは重複されることを回避する支援となり得る。
【００５９】
図７Ａは、システム障害後に受信バッファの内容を回復する実施形態を図示する。一連の動作として示されているが、当業者は、示される動作のうちの少なくともいくつかは、変更され、省略され、順序が変えられ、または並行して実施され得ることを理解するであろう。
【００６０】
動作７００で、第１の命令は、送信パーティションから受け取られ、受信バッファ内に配置され得る。受信された命令は、ＰＩＤ、ＬＳＮなどの識別情報を伴い得る。実施形態はまた、グローバル一意識別子（「ＧＵＩＤ」）または類似した機構を用い得る。
【００６１】
受信後、命令は、動作７０２によって示されるように実行され得る。命令を実行することは、受信パーティション上の索引および他のデータ構造に対する様々な修正を実施することを含み得る。例えば、命令は、索引からエントリを削除すること、エントリを索引に挿入すること、索引中の値を更新すること、項目値を更新することなどを含み得る。本明細書で用いられる命令という用語は、複数のサブ命令を含み得る。実施形態は、アトミックなセットとして命令を実施し得るため、サブ命令の全てが完全に実行されるか、または、どれも発効することを許容されないかのどちらかである。
【００６２】
受信された命令の成功裏の実行後は、命令の成功裏の処理を反映する記録が、動作７０４によって示されるように更新され得る。図７Ｂは、実施形態がこの目的のために用い得る構造の１つの非限定的な実施例を示す。テーブル７５０は、ＰＩＤ列７５２およびＬＳＮ列７５４から成り得る。実施形態は、テーブルを表すため、Ｂツリー、配列などの様々なデータ構造を用い得る。図７Ｂに示す実施形態の場合、テーブルは、その内容がシステム障害の際に回復されるように、持続的にすべきである。
【００６３】
ＰＩＤ値とＬＳＮ値との組み合わせは、命令を一意に識別し得る。本明細書に記載されるように、ＰＩＤ値は送信パーティションを一意に識別するために用いられ、ＬＳＮ値は送信パーティションから発する命令の順序を示し得る。組み合わされたとき、２つの値は、命令を一意に識別する。
【００６４】
送信パーティションによって提供されたＬＳＮ値は、順次増加され得る。送信パーティションの実施形態は、宛先パーティションとは無関係にＬＳＮ値を増加させ得る。結果として、様々な実施形態では、所与のＰＩＤ値に対して、送信パーティションによって生成されたＬＳＮ値は順次増加し得るが、受信値によって見るＬＳＮ値は、単調に増加するものの、必ずしも順次ではない。
【００６５】
２つの送信パーティションを含む例示説明の実施形態の場合、テーブル７５０は、成功裏に実行された第１のパーティションからの最新の命令に対応する行７５６を含み得る。いくつかの実施形態は、いったん命令が持続的になると、命令が完全に実行されることを要求するのではなくて、行７５６を更新し得る。行７５８は行７５６に類似しているが、第２のパーティションに対応する。
【００６６】
図７Ａに戻ると、動作７０６は、送信パーティションから第２の命令を受信することを示す。しかしながら、実行する前に、システム障害７０８が発生し得、第２の命令が、実施される前に受信コンピューティングノードのメモリから消去される結果となる。
【００６７】
図７Ｂに示す記録されたＰＩＤおよびＬＳＮ値が、図７Ａに見るように、システム障害７０８から回復する際に用いられ得る。システム障害は、受信パーティションの再開始を必要とし得る様々な事象を含み得る。再開始すると、受信パーティションの受信バッファに直前に含まれた命令が、消去されている。
【００６８】
図７Ａの動作７１０は、回復プロセスの開始を示す。停電などのいくつかの場合では、回復は、いったん電力が回復して、パーティションをホストしているコンピューティングノードが再ブートすると、開始し得る。いくつかの場合、新たなマスターパーティションが選択されて得るが、この場合、複製ログが、回復を開始する前に、新たなマスターに移送され得る。
【００６９】
動作７１２で、受信パーティションは、実行されなかった命令を取得するために回復要求を伝送し得る。例えば、図７Ｂのテーブル７５０は、処理されていないかもしれない命令を有する２つの送信パーティションとの関連付けを示す。受信パーティションは、ＰＩＤを用いて送信パーティションを識別して、要求をそれに送信し得る。例えば、行７５６は、送信パーティションのインターネットプロトコル（「ＩＰ」）アドレスを決定するために用いられ得るＰＩＤ値を含む。テーブル７５０に示す値は例示説明であり、多くの異なる種類の値を含み得る。
【００７０】
要求もまた、ＬＳＮ値を含み得る。ＬＳＮ値は、各々のパーティションで発生し、例えば、各々の生成された命令によって１つだけ増加し得る。ＬＳＮ値は単調に増加するため、それらは、処理されなかった命令を識別するために用いられ得る。例えば、行７５６は、１２のＬＳＮ値を含む。送信パーティションが１２を超えるＬＳＮ値を持つ命令を有する場合、それは、それらの命令が受信パーティションによって実行されていないことを示し得る。したがって、送信パーティションは、要求に含まれる値を超えるＬＳＮ値を有する受信パーティションに対する命令を送信することによって、要求に応答し得る。命令は、送信パーティションに関連付けられたログファイル中に保持され得る。
【００７１】
図７Ａの動作７１４は、回復要求を発行した結果として受信された命令を受信することおよび実行することとを示す。プロセスは、受信パーティションに関連付けられた各々の送信パーティションに対して繰り返され得る。
【００７２】
実施形態は、命令が、それらが送信されたのと同一の順序で実行されることを保証するように機能し得る。いくつかの実施形態の場合、送信パーティションレベルで順序付けを課す、すなわち、命令が送信されたのと同一の順序で実行される、ことで十分であり得る。送信パーティションは、例えば、それが、より低いＬＳＮ値を持つ命令を送信した後で、より高いＬＳＮ値を持つ命令だけを送信し得る。
【００７３】
他の実施形態は、因果関係で関連する命令が順番に実行されることを保証するように機能し得る。例えば、図６に示す例となる実施形態を考慮する。受信パーティション６０４は、送信パーティション６００および送信パーティション６０２から命令を受信し得る。これらの事象に対する論理的順序付けが、これらの命令が同一の事象から起因した場合には、必要とされ得る。例えば、テーブル自身がまだ修正されていない場合には、テーブルの位置を参照する索引を更新することは可能ではあり得ない。実施形態は、したがって、ベクトルクロック、論理クロック、Ｌａｍｐｏｒｔ時間スタンプなどの技法を用い得る。
【００７４】
実施形態はまた、パーティションを分割するために本開示の態様を用い得る。図８は、そのような実施形態の１つの実施例である。一連の動作として示されているが、当業者は、示された動作の少なくとも一部を、変更、省略、順序が変えられ、または並行して実施され得ることを理解するであろう。
【００７５】
パーティションは、記憶要件または作業負荷をより良好に分散するために、２つ以上のパーティションに分割され得る。新たなパーティションは、各々が、元のパーティションによって保持されたデータの一部分を含み得る。実施形態は、データの重複しない範囲が各々のパーティション上に配置されるようにデータ内の分割点を識別し得る。例えば、文字「Ａ」〜「Ｍ」で始まる一次キー値を持つ項目は第１のパーティション上に記憶され、「Ｎ」〜「Ｚ」は第２のパーティション上に記憶され得る。パーティションはまた、２つのパーティション間にランダムにデータを分散し得る。例えば、実施形態は、どのパーティションが項目を記憶すべきであるかを決定するために、ハッシュ関数を一次キー値に適用し得る。
【００７６】
動作８００は、パーティションの定常動作中に複製ログを記憶することを示す。複製ログは、空のパーティションもしくは既知の開始点からのデータを事前投入されたパーティションから初めて、パーティションおよび関連付けられたデータ構造に加えられた変更の完全な記録を含み得る。動作８０２で、２つ以上の新たなパーティションが構成され得る。元のパーティションは、パーティションが分割されている間、動作可能のままであり得る。
【００７７】
いくつかの実施形態では、複製ログは、新たなパーティション上に再構成することが可能な開始点から加えられた変更の記録を含み得る。例えば、初期のデータセットを含むファイルは、記憶デバイスから新たなパーティションに転送され得る。複製ログは、次に、この開始点に次いで加えられた変更を反映するデータを含み得る。例えば、開始点においてデータで構成されたパーティションを有する仮想マシンスナップショットを用いる、最初にパーティションに投入する様々な他の手段もまた、用いられ得る。
【００７８】
複製ログは、動作８０４によって示されるように、ログ中に含まれる命令が新たなパーティションに送信されるように、再生され得る。実施形態は、新たなパーティションの各々に対して送信バッファを利用し得る。送信する必要がある命令の数を減少させるために、いくつかの実施形態は、同一の項目に適用可能な命令を併合し得る。例えば、複製ログは、特定の項目の値を修正する一連の命令を含み得る。項目の終了状態は、どの値が更新によって影響されるかと、更新が発生した順序とに基づいて決定され得る。別の実施例は、削除命令を伴う。複製ログは、項目に対するいくつかの更新およびそれに続く削除を含む一連の命令を含み得る。そのような場合、一連の命令全体がスキップされ得る、または、削除だけが送信され得る。
【００７９】
実施形態はまた、動作８０６で示すように、再生された命令を、新たな命令に対してルーティングまたは多重化し得る。命令をルーティングすることは、命令を受信する新たなパーティションのうちの１つを、それが関連する項目に基づいて選択することを伴う。例えば、パーティションが範囲に基づく場合、「Ａ」〜「Ｍ」で始まる一次キー値を持つ項目に関連する命令は、第１のパーティションの送信バッファ中に配置され得、一方で「Ｎ」〜「Ｚ」の項目は、第２のパーティションに伝送するために送信バッファ中に配置され得る。
【００８０】
多重化は、２つ以上の宛先パーティションへの伝送のための命令を重複させることを伴う。信頼性のために、パーティションは、パーティション上にデータのコピーを維持する１つ以上の複製パートナーと結合され得る。パーティションが分割されたとき、新たなパーティションは各々が、１つ以上の複製パートナーと結合され得る。新たなパーティションに送信された命令は、複製パートナーが同一のデータを新たなパーティションとして含むようにセットアップされるように多重化され得る。
【００８１】
動作８０８は、新たなパーティションが、それら各々が受信する命令を受信して実行するところを示す。実施形態は、特に、実施形態が上に説明したように要求を実施しない場合には、適用不可能な命令をフィルタリングし得る。元のパーティションの複製ログからの命令の全てが実行された後、新たなパーティションは、元のパーティションによって管理された同一のデータを群として含む。元のパーティションが、分割プロセスが実行中に動作可能のままであれば、それは、起動解除され、新たなパーティションが起動され得る。
【００８２】
図７Ａおよび７Ｂに関連して説明したフェイルオーバ回復の実施形態は、パーティションを分割している間に発生し得るフェイルオーバ事象から回復するために用いられ得る。入力する命令を処理している間に、新たなパーティションの各々は、最後に実行された命令の記録を維持し得る。システム障害のとき、最後に実行された命令を示す情報が、元のパーティションに伝送され得るが、それが、次の命令から初めて命令の再生を再開し得る。
【００８３】
分散型ＤＢＭＳへのアクセスは、ホスト企業の顧客のために、様々なクライアントアプリケーションに提供され得る。クライアントアプリケーションによって引き起こされた作業負荷を管理するために、および、それが、それが提供するサービスを適切に補償することを保証することを支援するために、ホスト企業は、固定したまたは制御された容量を各々の顧客に割り当て得る。プロビジョニングされた容量と呼ばれるこの容量は、テーブルまたはパーティションごとにさらに割り当てられ得る。実施形態は、例えば、トークン割り当ておよび消費技法を用いて、パーティション上での容量利用を制御し得る。トークンは、作業がパーティションに対して実施されたときに、ある時間単位にわたって、固定されたまたは可変の速度でパーティションに割り当てられて、差し引かれ得る。トークンが何も利用可能でない場合、パーティションに対して作業を実施する要求は拒絶または延期され得る。
【００８４】
実施形態は、通常動作、フェイルオーバ、およびパーティションの分割化中を含み、受信パーティションによって実施される作業に対して制限を課し得る。図９は、プロビジョニングされた容量制限を適用するための実施形態を図示する。一連の動作のとして示すが、当業者は、示す動作の少なくとも一部は、変更、省略、順序を変える、または並行して実施され得ることを理解するであろう。
【００８５】
図９の動作９００は、容量の決定を含む、受信された命令を実行するために準備することを示す。明瞭さのため、図９に示す動作の次の記述は、上で説明したトークン割り当ておよび消費方式という点での容量決定を説明する。しかしながら、多くの他の方法を用い得る。
【００８６】
動作９０２で、受信パーティションに関連付けられたトークンのプール中のトークンの数が決定され得る。少なくとも１つのトークンが利用可能であれば、命令は処理され、トークンがプールから差し引かれ得る。トークンが利用可能でない場合、他の動作が用いられ得る。
【００８７】
例えば、動作９０４は、送信パーティションと容量を共有することを示す。送信パーティションは、利用可能なトークンの大きいプールを有し得るが、受信パーティションには何も残っていない。１つ以上のトークンが、送信パーティションのトークンプールから受信パーティションのプールに転送され得る、または、より具体的には、トークンが、送信パーティションのトークンプールから差し引かれて、受信パーティションのプールに追加され得る。これは、予測的に実行され得る。送信パーティションは受信パーティションに送信される命令にアクセスするので、実施形態は、そのアクセスを用いて、要求を処理するために必要とされる容量の推定値を計算し得る。送信パーティションは、したがって、受信パーティションのトークンプールを拡大させ、それ自身のトークンプールを減少させ得る。他の実施形態では、受信パーティションは、送信パーティションから受信パーティションにトークンの転送を要求する送信パーティションにメッセージを送信し得る。
【００８８】
動作９０６は、フロー制御機構を利用することを示す。様々な実施形態が、送信バッファと受信バッファとの間での命令の伝送を制御するためにスライディングウインドウ技法を利用し得る。一般論として、スライディングウインドウ技法は、受信バッファが容認可能な待ち状態の命令の数に対する制限を伴う。これは、ウインドウサイズとして知られる。いったんウインドウがいっぱいになると、送信バッファは、命令が受信バッファから除去されるまたはウインドウサイズが増加するまで、命令を送信することを停止する。
【００８９】
ウインドウサイズは、様々な要因に基づき得る。実施形態は、初期のウインドウサイズを、可能性として、送信パーティションから借りることが可能な容量を含む、受信パーティションに割り当てられた容量に基づかせ得る。ウインドウサイズはまた、要求が処理され得る速度と、命令を処理することによって消費され得る容量の推定値とを考慮に入れ得る。他の実施形態は、最初にウインドウサイズを任意の値に設定し得る。
【００９０】
送信パーティションは、確認応答を受信することなく、ウインドウサイズに等しい命令の数を送信し得る。命令が処理されるに連れて、受信パーティションは、受信バッファからの１つ以上の命令が処理された後で、確認応答を送信し得る。受信パーティションはまた、ウインドウサイズが増加または減少されるべきであることを、その時点でそれに対して利用可能な容量、容量が用いられている速度、未処理の命令が受信バッファ中に累積されている速度などの要因に基づいて示し得る。ウインドウサイズを調整することを、動作９０８で示す。本明細書に記載されるフロー制御確認応答は、命令が処理されたという確認応答を含め、受信パーティションが送信パーティションに伝送する他のメッセージと組み合わされ得る。
【００９１】
様々な他のフロー制御機構が用いられ得る。実施形態は、例えば、受信バッファが、命令を実施する受信パーティションの容量に対して多数の命令を格納することを可能にし得る。容量ベースの抑圧が、次に受信パーティションによって制御され得る。受信パーティションまたは、容量のためまたは受信バッファがいっぱいであるためにそれが現在処理不可能である任意の命令を無視し得る。受信バッファは、成功裏に処理された最後の命令のＬＳＮ番号を含むメッセージを送信することによって回復し得る。
【００９２】
本開示の実施形態は、多くの種類のＤＢＭＳと共に用いられ得る。ＤＢＭＳは、構成されたデータの集合を維持するためのソフトウェアおよびハードウェアシステムである。ＤＢＭＳでは、データ、一般的には、キー値とさらなるデータとの間の関連付けによって構成される。関連付けの性質は、データの集合中に存在する実世界関係に基づき得る、または、それは任意であり得る。データ定義、クエリ、更新、および管理を含む様々な動作が、ＤＢＭＳによって実施され得る。一部のＤＢＭＳは、構造化クエリ言語（「ＳＱＬ」）などのクエリ言語を用いるデータベースとの相互作用を提供し、他のものは、プットおよびゲットなどの動作を含むＡＰＩを用いる。データベースとのやりとりはまた、ハイパーテキストマークアップ言語（「ＨＴＭＬ」）および拡張マークアップ言語（「ＸＭＬ」）などの様々なプロトコルまたは基準に基づき得る。ＤＢＭＳは、ソリッドステートドライブなどのまたは以上の記憶デバイス上にデータを記憶するように機能する記憶エンジンなどの様々なアーキテクチャ的構成要素を含み得る。
【００９３】
ＤＢＭＳは、テーブルまたは項目の集合などの集合を、パーティションに分割し得る。パーティションという用語は、テーブルまたは項目の集合のサブセットを指すために用いられ得る。しかしながら、パーティションは、コンピューティングノードと一対一で対応し得るため、パーティションという用語はまた、パーティションをホストするコンピューティングノードを指すために用いられ得る。
【００９４】
図１０は、本発明の態様が実施され得る分散型コンピューティング環境の実施例を図示するブロック図である。様々なユーザ１０００ａは、任意の種類のコンピューティングデバイス１００２ａ上で動作する様々なクライアントアプロケーションとやりとりして、データセンター１０２０内の様々なコンピューティングデバイス１０１０ａ、１０１０ｂ、および１０１０ｃ上で実行中のプロセスと、通信ネットワーク１００４上で通信し得る。代替例では、クライアントアプリケーション１００２ｂは、ユーザの介入なしで通信し得る。通信ネットワーク１００４は、インターネット、有線および無線のローカルエリアネットワーク、光ファイバネットワーク、衛星通信などを含む通信技術の任意の組み合わせを含み得る。任意の数のネットワークプロトコルが用いられ得る。
【００９５】
データセンター１０２０内で動作するコンピューティングノード１０１０ａ、１０１０ｂ、および１０１０ｃ上で実行中のプロセスとの通信は、ゲートウエイ１００６およびルータ１００８を介して提供され得る。多くの他のネットワーク構成もまた用いられ得る。図１０には明示的に示されていないが、様々な認証機構、ウェブサービス層、ビジネスオブジェクト、または他の中間層が、コンピューティングノード１０１０ａ、１０１０ｂ、および１０１０ｃ上で実行中のプロセスとの媒体通信に提供され得る。これらの中間層のうちのいくつかは、それら自身が、コンピューティングノードのうちの１つ以上の上で実行中のプロセスを含み得る。コンピューティングノード１０１０ａ、１０１０ｂ、および１０１０ｃならびにそれらの上で実行中のプロセスもまた、ルータ１００８を介して互と通信し得る。代替例では、別個の通信経路が用いられ得る。いくつかの実施形態では、データセンター１０２０は、さらなるデータセンターと通信するように構成され得、コンピューティングノードおよびそれらの上で実行中のプロセスは、他のデータセンター内で動作するコンピューティングノードおよびプロセスと通信し得ることとなる。
【００９６】
コンピューティングノード１０１０ａは、１つ以上のプロセッサ１０１６、１つ以上のメモリ１０１８、および１つ以上の記憶デバイス１０１４を含む物理的ハードウェア上に存在するものとして示される。コンピューティングノード１０１０ａ上のプロセスは、オペレーティングシステムと共に実行され得る、または代替的には、プロセッサ１０１６、メモリ１０１８、または記憶デバイス１０１４などの物理的リソースと直接にやりとりするベアメタルプロセスとして実行され得る。
【００９７】
コンピューティングノード１０１０ｂおよび１０１０ｃは、物理的プロセッサ、メモリ、および記憶デバイスなどの様々な物理的リソースに共有アクセスし得る仮想マシンホスト１０１２上で動作するものとして示される。任意の数の仮想化機構を、コンピューティングノードをホストするために用いられ得る。コンピューティングノード１０１０ｂおよび１０１０ｃは、仮想メモリ、仮想プロセッサ、および、コンピューティングリソースの他の仮想化された表現を含み得る。本開示の実施形態は、したがって、本明細書に開示する技法と首尾一貫した動作を実施するように構成された仮想プロセッサおよび仮想メモリを含み得る。
【００９８】
図１０に示す様々なコンピューティングノードは、ウェブサービス、データベース、管理システム、ビジネスオブジェクト、監視設備および診断設備などをホストするように構成され得る。コンピューティングノードとは、パソコン、サーバ、クラスタ化されたコンピューティングデバイスなどの様々な種類のコンピューティングリソースのことであり得る。ハードウェア形態で実装されたとき、コンピューティングノードは、一般に、コンピュータ可読命令を記憶するように構成された１つ以上のメモリおよび命令を読み出して実行するように構成された１つ以上のプロセッサに関連付けられる。ハードウェアベースのコンピューティングノードはまた、１つ以上の記憶デバイス、ネットワークインターフェース、通信バス、ユーザインターフェースデバイスなどを含み得る。コンピューティングノードはまた、ハイパーバイザ有りまたは無しで実装された仮想マシン、仮想化されたベアメタル環境などの仮想化されたコンピューティングリソースを範囲に収め得る。仮想化ベースのコンピューティングノードは、ハードウェアリソースに対する仮想化されたアクセスおよび仮想化されていないアクセスを有し得る。コンピューティングノードは、オペレーティングシステムおよび１つ以上のアプリケーションプログラムを実行するように構成され得る。いくつかの実施形態では、コンピューティングノードはまた、ベアメタルアプリケーションプログラムを含み得る。
【００９９】
先行する節で説明されたプロセス、方法、およびアルゴリズムの各々は、１つ以上のコンピュータまたはコンピュータプロセッサによって実行されるコードモジュール中に具現化され得る、および完全にもしくは部分的に自動化され得る。コードモジュールは、ハードドライブ、ソリッドステートメモリ、光メモリなどの任意の種類の非一時的コンピュータ可読媒体またはコンピュータ記憶デバイス上に記憶され得る。プロセスおよびアルゴリズムは、特定用途向け回路に部分的にまたは完全に実装され得る。開示されたプロセスおよびプロセスステップの結果が、持続的に、さもなければ、例えば、揮発性または不揮発性のストレージなどの任意の種類の非一時的コンピュータストレージ中に記憶され得る。
【０１００】
前記は、次の付記に鑑みればさらに理解され得る：
１．分散型データベース管理システムであって、
第１の１つ以上の記憶デバイスを含む第１のコンピューティングノードであって、前記第１の１つ以上の記憶デバイスが、ログファイルと、第１の索引に対応する第１の項目の集合とをその上に記憶した、第１のコンピューティングノードと、
メモリおよび第２の１つ以上の記憶デバイスを含む第２のコンピューティングノードであって、前記第２の１つ以上の記憶デバイスが、第２の索引をその上に記憶しており、前記第２の索引が、前記第１の集合の少なくともサブセットのバージョンに対応する、第２のコンピューティングノードと、
コンピュータ可読命令を上に記憶した１つ以上のメモリであって、実行されると、前記システムに、少なくとも、
前記第１の索引に対する第１の動作に対応する命令を前記ログファイルに書き込むことであって、前記第１の動作が前記第１の項目の集合を修正する第１の要求に対応する、書き込むことと、
前記第１のコンピューティングノードから受信され、前記第２のコンピューティングノードによって前記第２の索引に対して実施された最後の命令の記録に少なくとも部分的に基づいて、前記命令を前記ログファイルから前記第２のコンピューティングノードに送信することと、
前記第２のコンピューティングノードによって、第２の動作を前記第２の索引に対して実施することであって、前記第２の動作が前記命令に少なくとも部分的に基づく、実施することと、を行わせるコンピュータ可読命令を上に記憶した１つ以上のメモリと、
を備える、前記システム。
２．コンピュータ可読命令を上に記憶した１つ以上のメモリであって、実行されると、前記システムに、少なくとも、
前記第１のコンピューティングノードによって、前記第２のコンピューティングノードから確認応答を受信することであって、前記確認応答が、前記第２の動作を実行することに少なくとも部分的に基づく、受信すること、を行わせるコンピュータ可読命令を上に記憶した１つ以上のメモリをさらに備える、付記１に記載の前記システム。
３．コンピュータ可読命令を上に記憶した１つ以上のメモリであって、実行されると、前記システムに、少なくとも、
前記命令を前記第２のコンピューティングノードの前記メモリ中に記憶することと、
前記命令が実施されるときに、前記メモリから前記命令を除去することと、を行わせる、コンピュータ可読命令を上に記憶した１つ以上のメモリをさらに備える、付記１に記載の前記システム。
４．実施された前記最後の命令が、システム障害の前に実施されたものであり、コンピュータ可読命令を上に記憶した１つ以上のメモリであって、実行されると、前記システムに、少なくとも、
前記システム障害から回復すると、前記命令を、前記第２のコンピューティングノードに送信させることを行わせる、コンピュータ可読命令を上に記憶した１つ以上のメモリをさらに備える、付記１に記載の前記システム。
５．データを記憶するおよび取り出すためのコンピュータ実装方法であって、
第１の項目の集合の第１の索引に対する第１の動作に対応する命令を示す情報を、第１のコンピューティングノードのログファイル中に記録することであって、前記第１の動作が、前記第１の項目の集合を修正する第１の要求に対応する、記録することと、
前記第２のコンピューティングノードによって実施された最後の命令の記録に少なくとも部分的に基づいて、前記第１のコンピューティングノードによって、前記命令を示す前記情報を第２のコンピューティングノードに送信することと、
前記第２のコンピューティングノードによって、第２の索引に対して第２の動作を実施することであって、前記第２の索引が、前記第１の集合の少なくともサブセットのバージョンに対応し、前記第２の動作が、前記命令を示す前記情報に少なくとも部分的に基づく、実施することと、
を含む、前記方法。
６．前記第１のコンピューティングノードによって、前記第２のコンピューティングノードから確認応答を受信することをさらに含み、前記確認応答が、前記第２の動作を実施することに少なくとも部分的に基づく、付記５に記載の前記方法。
７．前記確認応答がエラー状態に対応する、付記６に記載の前記方法。
８．前記確認応答を受信すると、前記命令を示す前記情報を、前記第１のコンピューティングノードのメモリ中のデータ構造から除去すること、をさらに含む、付記６に記載の前記方法。
９．１つ以上の確認応答されていない命令を前記ログファイル中で位置特定することをさらに含む、付記５に記載の前記方法。
１０．前記命令を前記ログファイルから除去するステップ、前記命令を実施されたものとして印付けるステップ、および前記命令にエラー状態の指示を印付けるステップのうちの１つ以上を実施することをさらに含む、付記９に記載の前記方法。
１１．前記最後に実施された命令が、システム障害の前に実施されている、付記５に記載の前記方法。
１２．前記第１のコンピューティングノードから命令を受信する要求を、前記第２のコンピューティングノードによって送信することをさらに含み、前記命令受信要求が、前記第２のコンピューティングノードによって実施された最後の命令の前記記録を含む、付記５に記載の前記方法。
１３．前記命令を示す前記情報を前記第２のコンピューティングノードのメモリ中に記憶することをさらに含む、付記５に記載の前記方法。
１４．前記命令を実行すると、前記第２のコンピューティングノードの前記メモリから前記命令を示す前記情報を除去することをさらに含む、付記１３に記載の前記方法。
１５．確認応答を受信する前に、送信する命令の最大数を示す、前記第１のコンピューティングノードで受信することをさらに含む、付記５に記載の前記方法。
１６．命令を上に記憶した非一時的コンピュータ可読記憶媒体であって、コンピューティングデバイスによって実行されると、前記コンピューティングデバイスに、少なくとも、
命令を示す情報を第１のコンピューティングノードから受信することであって、前記命令が第１の索引に対する第１の動作に対応し、前記第１の動作が、第１の項目の集合を修正する第１の要求に対応する、受信することと、
第２の索引に対して第２の動作を実施することであって、前記第２の動作が、前記命令を示す前記情報に少なくとも部分的に基づき、第２の索引が、前記第１の項目の集合の少なくともサブセットのバージョンに対応する、実施することと、
前記コンピューティングデバイスに対して実施された最後の命令の記録を更新することであって、前記記録が、前記第１のコンピューティングノードの指示を含む、更新することと、を行わせる命令を上に記憶した、前記非一時的コンピュータ可読記憶媒体。
１７．前記コンピューティングデバイスによって実行されると、前記コンピューティングデバイスに、少なくとも、
前記第２の動作を実施することであって、前記動作を実施することが、前記第１のコンピューティングノードに関連付けられた第１の容量指示と、前記第２のコンピューティングノードに関連付けられた第２の容量指示と、に少なくとも部分的に基づく、実施すること、を行わせるさらなる命令を含む、付記１６に記載の前記コンピュータ可読記憶媒体。
１８．前記コンピューティングデバイスによって実行されると、前記コンピューティングデバイスに、少なくとも、
前記第２のコンピューティングノードによって受信することが可能な確認応答されなかった命令の最大数の指示を、前記第１の前記コンピューティングノードに送信すること、を行わせるさらなる命令を含む、付記１６に記載の前記コンピュータ可読記憶媒体。
１９．前記最大数が、プロビジョニングされた容量に少なくとも部分的に基づく、付記１８に記載の前記コンピュータ可読記憶媒体。
２０．実施された最後の命令の前記記録が、前記第１のコンピューティングノードが前記命令を送信したことを示す情報を含む、付記１６に記載の前記コンピュータ可読記憶媒体。
２１．前記第１の項目の集合の少なくとも前記サブセットの前記バージョンが、第１の項目の集合からの複製されたデータを含む、付記１６に記載の前記コンピュータ可読記憶媒体。
２２．データを記憶するおよび取り出すためのシステムであって、
第１のメモリおよび第１の１つ以上の記憶デバイスを含む第１のコンピューティングノードであって、前記第１の１つ以上の記憶デバイスが、第１の項目の集合に関連付けられた第１の索引を上に記憶した、第１のコンピューティングノードと、
第２のメモリおよび第２の１つ以上の記憶デバイスを含む第２のコンピューティングノードであって、前記第２の１つ以上の記憶デバイスが第２の索引を上に記憶した、第２のコンピューティングノードと、
前記第１の項目の集合中の項目を変更する要求を受信するように構成された１つ以上のプロセッサと、
１つ以上の命令を前記要求に少なくとも部分的に基づいて決定する１つ以上のプロセッサであって、前記１つ以上の命令が、前記第１の索引に対する１つ以上の動作を示す、１つ以上のプロセッサと、
前記第１のコンピューティングノード上の前記第１の索引を、前記１つ以上の命令に少なくとも部分的に基づいて更新するように構成された１つ以上のプロセッサと、
前記第２のコンピューティングノード上の前記第２の索引を、前記１つ以上の命令に少なくとも部分的に基づいて更新するように構成された１つ以上のプロセッサと、
を備える、前記システム。
２３．前記命令を示す前記情報を前記第２のコンピューティングノードに送信する前に、前記第１のメモリ中の前記命令を示す情報を記憶するように構成された１つ以上のプロセッサと、
前記第２のコンピューティングノード上の前記第２の索引を更新する前に、前記第２のメモリ中の前記命令を示す前記情報を記憶するように構成された１つ以上のプロセッサと、
更新されている前記第２の索引を示す確認応答を、前記第１のコンピューティングノードで受信するように構成された１つ以上のプロセッサと、
をさらに備える、付記２２に記載の前記システム。
２４．前記第１の索引が項目の集合に対応し、前記第２の索引が、前記項目の集合の少なくともサブセットのバージョンに対応する、付記２２に記載の前記システム。
２５．前記第１の索引が項目の集合の第１のサブセットに対応し、前記第２の索引が前記項目の集合の第２のサブセットに対応する、付記２２に記載の前記システム。
２６．前記１つ以上の命令をログファイル中に記憶するように構成された１つ以上のプロセッサと、
前記１つ以上の命令を前記ログファイルから除去するステップ、前記１つ以上の命令を完了されたものとして印付けるステップ、および前記１つ以上の命令に確認応答されていないものとして印付けるステップのうちの１つ以上を実施するように構成された１つ以上のプロセッサと、
を備える、付記２２に記載の前記システム。
【０１０１】
上に説明した様々な特性およびプロセスは、互いに独立に用いられ得る、または、様々な方法で組み合わされ得る。可能な全ての組み合わせおよびサブ組み合わせが、この開示の範囲内に入ることを意図するものである。加えて、ある方法またはプロセスブロックが、一部の実装例では省略され得る。本明細書に記載される方法およびプロセスはまた、いかなる特定の順序にも限定されず、それに関連するブロックまたは状態は、適切な他の順序で実施することが可能である。例えば、説明されたブロックまたは状態は、具体的に開示されたもの以外の順序で実施され得る、または、複数のブロックもしくは状態は、１つのブロックもしくは状態に組み合わされ得る。実施例のブロックまたは状態は、直列、並列、または一部の他の様式で実施され得る。ブロックまたは状態は、開示された例となる実施形態に追加またはこれから除去し得る。本明細書に記載される実施例のシステムおよび構成要素は、説明するものとは異なるように構成され得る。例えば、要素は、開示する例となる実施形態と比較して追加、これから除去、または再配列され得る。
【０１０２】
また、様々な項目が、メモリ中にまたはストレージ上に、使用中に記憶されるものと図示されており、また、これらの項目またはそれらの部分が、メモリ管理およびデータ保全の目的のために、メモリと他の記憶デバイスとの間で転送され得ることが理解されるであろう。そうする代わりに、他の実施形態では、ソフトウェアモジュールおよび／またはシステムの一部または全てが、別のデバイス上のメモリ中で実行されて、図示するコンピューティングシステムとコンピュータ間通信を介して通信し得る。さらにその上、いくつかの実施形態では、システムおよび／またはモジュールの一部または全てが、これに限られないが、例えば、１つ以上の特定用途向け集積回路（ＡＳＩＣ）、標準集積回路、コントローラ（例えば、適切な命令を実行することと、マイクロコントローラおよび／埋め込み式コントローラを含むことによる）、フィールドプログラム可能ゲートアレイ（ＦＰＧＡ）、複雑プログラム可能論理デバイス（ＣＰＬＤ）などを含む、ファームウェアおよび／またはハードウェア中に少なくとも部分的になど、他の方法で実装または提供され得る。モジュール、システム、およびデータ構造のいくつかまたは全部もまた、適切なドライブによってまたは適切な接続を介して読み出されるハードディスク、メモリ、ネットワーク、または携帯可能媒体品目などのコンピュータ可読媒体上に（例えば、ソフトウェア命令または構造化データとして）記憶され得る。システム、モジュール、およびデータ構造もまた、生成されたデータ信号として（例えば、搬送波または他のアナログもしくはデジタル式の伝播信号の一部として）無線ベースまたは有線／ケーブルベースの媒体を含む様々なコンピュータ可読伝送媒体上で伝送され得る、かつ、（例えば、単一もしくは多重化されたアナログ信号の一部として、または、複数の離散的なデジタルパケットもしくはフレームとして）様々な形態を取り得る。このようなコンピュータ製品はまた、他の実施形態では他の形態を取り得る。したがって、本発明は、他のコンピュータシステム構成で実施され得る。
【０１０３】
具体的にそうでないと述べられたまたは使用された文脈内でそうでないと理解される場合を除き、とりわけ、「ｃａｎ」、「ｃｏｕｌｄ」、「ｍｉｇｈｔ」、「ｍａｙ」などの、本明細書で用いられる条件付きの語は、一般に、ある実施形態はある特性、要素、および／またはステップを含むが、他の実施形態は含まないことを伝達することを意図するものである。したがって、そのような条件付きの語は、一般には、特性、要素、および／またはステップが１つ以上の実施形態によってなんらかの仕方で必要とされ得る、または、１つ以上の実施形態は、これらの特性、要素、および／またはステップが含まれるかまたは任意の特定の実施形態で実施されるかを、著者の入力または督促有りまたは無しで、判定するための論理を必然的に含むことを暗示することを意図するものではない。「ｃｏｍｐｒｉｓｉｎｇ」、「ｉｎｃｌｕｄｉｎｇ」、「ｈａｖｉｎｇ」などの用語は、同義語であり、包括的に、オープンエンド形式で用いられ、さらなる要素、特性、行為、動作などを排除しない。また、「ｏｒ」という用語は、その包括的な意味で用いられ（かつ、その排他的な意味では用いられず）、例えば、要素の一覧を接続するために、「ｏｒ」という用語は、一覧中の要素のうちの１つ、一部、または全てを意味する。
【０１０４】
ある特定の例となる実施形態を説明したが、これらの実施形態は、例として提示されたものにすぎず、本明細書に開示する本発明の範囲を限定する意図はない。したがって、上述の記載中でも、特定の特徴、特性、ステップ、モジュール、またはブロックが必要であるまたは不可欠であることを暗示することを意図するものではない。実際、本明細書に記載される新規の方法およびシステムは、様々な他の形態で具現化され得るが、さらにその上、本明細書に記載される方法およびシステムの形態の様々な省略、置き換え、および変更が、本明細書に記載される本発明の趣旨から逸脱することなく行われ得る。添付の特許請求の範囲およびそれらの均等物は、本明細書に開示する本発明のある特定のものの範囲および趣旨内に入るような形態または修正を網羅することが意図される。
【誤訳訂正２】
【訂正対象書類名】特許請求の範囲
【訂正対象項目名】全文
【訂正方法】変更
【訂正の内容】
【特許請求の範囲】
【請求項１】
分散型データベース管理システムであって、前記システムは、
１つ以上の第１の記憶デバイスを含む第１のコンピューティングノードであって、前記１つ以上の第１の記憶デバイスには、ログファイルと、第１の索引に対応する、第１の項目の集合とが記憶されている、第１のコンピューティングノードと、
メモリと、１つ以上の第２の記憶デバイスとを含む第２のコンピューティングノードであって、前記１つ以上の第２の記憶デバイスには、第２の索引が記憶され、前記第２の索引が、前記第１の集合の少なくともサブセットのバージョンに対応する、第２のコンピューティングノードと、
コンピュータ可読命令が記憶されている１つ以上のメモリと
を具え、
前記コンピュータ可読命令は、実行時に、前記システムに、少なくとも、
前記第１の索引に対する第１の動作に対応する命令を前記ログファイルに書き込むステップであって、前記第１の動作は、前記第１の項目の集合を修正する第１の要求に対応する、ステップと、
前記第１のコンピューティングノードから受信され、前記第２のコンピューティングノードによって前記第２の索引に対して実施された最後の命令の記録に少なくとも部分的に基づいて、前記第１の動作に対応する命令を前記ログファイルから前記第２のコンピューティングノードに送信するステップと、
前記第２のコンピューティングノードによって、前記第２の索引に対する第２の動作を実施するステップであって、前記第２の動作は、前記第１の動作に対応する命令に少なくとも部分的に基づく、ステップと、
を行わせる、
システム。
【請求項２】
前記コンピュータ可読命令は、実行時に、前記システムに、少なくとも、
前記第１のコンピューティングノードによって、前記第２のコンピューティングノードから、前記第２の動作を実施するステップに少なくとも部分的に基づく確認応答を受信するステップを行わせる、
請求項１に記載のシステム。
【請求項３】
前記コンピュータ可読命令は、実行時に、前記システムに、少なくとも、
前記第１の動作に対応する命令を前記第２のコンピューティングノードのメモリ中に記憶するステップと、
前記第１の動作に対応する命令が実施されるときに、前記第２のコンピューティングノードのメモリから前記第１の動作に対応する命令を除去するステップと、
を行わせる、
請求項１に記載のシステム。
【請求項４】
実施された前記最後の命令が、システム障害の前に実施されたものであり、
前記コンピュータ可読命令は、実行時に、前記システムに、少なくとも、
前記システム障害から回復すると、前記第１の動作に対応する命令を、前記第２のコンピューティングノードに送信するステップを行わせる、
請求項１に記載のシステム。
【請求項５】
データを記憶および取り出すためのコンピュータ実装方法であって、前記方法は、
第１の項目の集合の第１の索引に対する第１の動作に対応する命令を示す情報を、第１のコンピューティングノードのログファイル中に記録するステップであって、前記第１の動作は、前記第１の項目の集合を修正する第１の要求に対応する、ステップと、
前記第２のコンピューティングノードによって実施された最後の命令の記録に少なくとも部分的に基づいて、前記第１のコンピューティングノードによって、前記第１の動作に対応する命令を示す情報を第２のコンピューティングノードに送信するステップと、
前記第２のコンピューティングノードによって、前記第１の集合の少なくともサブセットのバージョンに対応する第２の索引に対して、前記第１の動作に対応する命令を示す情報に少なくとも部分的に基づく第２の動作を実施するステップと、
を含む方法。
【請求項６】
前記第１のコンピューティングノードによって、前記第２のコンピューティングノードから確認応答を受信するステップをさらに含み、前記確認応答が、前記第２の動作を実施することに少なくとも部分的に基づく、
請求項５に記載の方法。
【請求項７】
前記確認応答を受信するステップに応じて、前記第１の動作に対応する命令を示す情報を、前記第１のコンピューティングノードのメモリ中のデータ構造から除去するステップをさらに含む、
請求項６に記載の方法。
【請求項８】
１つ以上の確認応答されていない命令を前記ログファイル中で位置特定するステップをさらに含む、
請求項５に記載の方法。
【請求項９】
前記第１の動作に対応する命令を前記ログファイルから除去するステップと、
前記第１の動作に対応する命令を実施されたものとして印付けるステップと、
前記第１の動作に対応する命令にエラー状態の指示を印付けるステップと、
のうちの１つ以上を実施するステップをさらに含む、
請求項８に記載の方法。
【請求項１０】
前記第２のコンピューティングノードによって、前記第１のコンピューティングノードから命令を受信する要求を送信するステップをさらに含み、前記命令を受信する要求が、前記第２のコンピューティングノードによって実施された前記最後の命令の記録を含む、
請求項５に記載の方法。
【請求項１１】
前記第１の動作に対応する命令を実施するステップに応じて、前記第２のコンピューティングノードの前記メモリから前記第１の動作に対応する命令を示す情報を除去するステップをさらに含む、
請求項１０に記載の方法。
【請求項１２】
データを記憶および取り出すためのシステムであって、
第１のメモリと、１つ以上の第１の記憶デバイスとを含む第１のコンピューティングノードであって、前記１つ以上の第１の記憶デバイスには、第１の項目の集合に関連付けられた第１の索引が記憶されている、第１のコンピューティングノードと、
第２のメモリと、１つ以上の第２の記憶デバイスとを含む第２のコンピューティングノードであって、前記１つ以上の第２の記憶デバイスには、第２の索引が記憶されている、第２のコンピューティングノードと、
１つ以上のプロセッサと
を具え、
前記１つ以上のプロセッサは、
前記第１の項目の集合中の項目を変更する要求を受信し、
前記要求に少なくとも部分的に基づいて、前記第１の索引に対する１つ以上の動作を示す１つ以上の命令を決定し、
前記第１のコンピューティングノード上の前記第１の索引を、前記１つ以上の命令に少なくとも部分的に基づいて更新し、
前記第２のコンピューティングノード上の前記第２の索引を、前記１つ以上の命令に少なくとも部分的に基づいて更新する、
ように構成されている、システム。
【請求項１３】
前記１つ以上のプロセッサは、
前記命令を示す情報を前記第２のコンピューティングノードに送信する前に、前記第１のメモリ中に、前記命令を示す情報を記憶し、
前記第２のコンピューティングノード上の前記第２の索引を更新する前に、前記第２のメモリ中に、前記命令を示す情報を記憶し、
更新されている前記第２の索引を示す確認応答を、前記第１のコンピューティングノードで受信する、
ように構成されている、
請求項１２に記載のシステム。
【請求項１４】
前記第１の索引が項目の集合に対応し、前記第２の索引が前記項目の集合の少なくともサブセットのバージョンに対応する、
請求項１２に記載のシステム。
【請求項１５】
前記１つ以上のプロセッサは、
前記１つ以上の命令をログファイル中に記憶し、
前記１つ以上の命令を前記ログファイルから除去するステップと、前記１つ以上の命令を完了されたものとして印付けるステップと、前記１つ以上の命令に確認応答されていないものとして印付けるステップと、のうちの１つ以上を実施する、
ように構成されている、
請求項１２に記載のシステム。
【誤訳訂正３】
【訂正対象書類名】図面
【訂正対象項目名】図２Ｂ
【訂正方法】変更
【訂正の内容】
【図２Ｂ】
2016524750.tif 000001