(57)【要約】  データベースシステムが、分散ストレージに格納されたデータベースシステムのデータについての要求を処理するように構成された複数のノードの間で、データベースシステムの現在の状態を同期させることに関連する技術が開示される。上記において、複数のノードのうちの１つが現在アクティブであり、複数のノードのうちの他のノードが現在スタンバイノードである。様々な実施形態において、アクティブノードは、分散ストレージにデータをコミットすることを含む第１トランザクションを実行する要求を受け取る。要求を受け取ったことに応答して、いくつかの実施形態において、アクティブノードは、分散ストレージにデータをコミットして、データベースシステムの現在の状態を更新し、分散ストレージに格納されたトランザクションログにコミットの指示を提供する第１メタデータを格納させる。
2020529673.tif 000002
【特許請求の範囲】
【請求項１】
データベースシステムが、該データベースシステムの現在の状態を、分散ストレージに格納された前記データベースシステムのデータについての要求を処理するように構成される複数のノードの間で同期させるための方法であって、前記複数のノードのうちの１つが現在アクティブであり、前記複数のノードのうちの他のノードが現在スタンバイノードであり、当該方法は：
アクティブノードにおいて、前記分散ストレージにデータをコミットすることを含む第１トランザクションを実行する要求を受け取るステップと；
前記要求を受け取ったことに応答して、
前記アクティブノードによって、前記分散ストレージに前記データをコミットして、前記データベースシステムの前記現在の状態を更新するステップと；
前記アクティブノードによって、前記分散ストレージに格納されたトランザクションログに、コミットの指示を提供する第１メタデータを格納させるステップであって、前記トランザクションログは、前記スタンバイノードに対して、前記スタンバイノードが前記データベースシステムの前記現在の状態を知るための情報を識別する、ステップと；
を含む、方法。
【請求項２】
前記スタンバイノードのうちの１つのスタンバイノードによって、前記トランザクションログにコミットされた新たなトランザクションを識別する前記データベースシステムのカタログのモニタリングするステップであって、該カタログは、前記データベースシステムについてのデータベース・スキーマを格納する、ステップと；
前記トランザクションログを読み出す前に、前記１つのスタンバイノードが、前記分散ストレージにコミットされた新たなトランザクションを前記カタログが識別すると決定するステップと；
を更に含む、請求項１に記載の方法。
【請求項３】
前記スタンバイノードのうちの１つのスタンバイノードにおいて、前記トランザクションログが修正されたことの通知を受け取るステップと；
前記通知を受け取ったことに応答して、前記１つのスタンバイノードによって、該スタンバイノードで維持されている第２メタデータを更新してクライアントの要求に対応するステップであって、前記の更新は、前記トランザクションログに格納されている前記第１メタデータを読み出すことを含む、ステップと；
を更に含む、請求項１に記載の方法。
【請求項４】
前記１つのスタンバイノードによって、前記分散ストレージにも格納されているデータを維持しているエントリを含むキャッシュを維持するステップを更に含み、
前記第２メタデータを更新することは、前記第１メタデータが、前記エントリ内のデータが前記コミットされたデータで置き換えられたことを示すことに応答して、前記１つのスタンバイノードが前記キャッシュ内のエントリを無効にすることを含む、
請求項３に記載の方法。
【請求項５】
前記複数のノードの間で共有されるカタログを維持するステップであって、前記カタログは、前記分散ストレージに格納されたメタデータを識別し、前記分散ストレージに格納されている前記第１メタデータを見つけるために、前記１つのスタンバイノードによって使用可能である、ステップと；
前記第１メタデータを格納させることに応答して、前記アクティブノードが、前記第１メタデータを識別するよう前記カタログを更新することであって、該更新によって前記１つのスタンバイノードに前記通知を受け取らせる、ステップと；
を更に含む、請求項３に記載の方法。
【請求項６】
前記スタンバイノードのうちの１つのスタンバイノードは、前記分散ストレージのデータを格納するキャッシュを含み、当該方法は：
前記トランザクションログから、前記１つのスタンバイノードによって、前記第１トランザクションに関連付けられるキー値ペアのキーを取り出すステップと；
前記１つのスタンバイノードによって、前記キーに関連付けられる、前記キャッシュ内のエントリを識別するステップと；
前記キー値ペアの前記キーに対応する値で前記エントリを更新するステップと；
を更に含む、請求項１に記載の方法。
【請求項７】
前記のコミットすることは、前記データを前記分散ストレージ内の前記トランザクションログの外部に格納するステップを含む、
請求項１乃至６のいずれか一項に記載の方法。
【請求項８】
前記複数のノードは、前記スタンバイノードのうちの１つのスタンバイノードが新たなアクティブノードになることを可能にするように動作可能な高可用性（ＨＡ）アプリケーションを実行するように構成され、当該方法は：
前記１つのスタンバイノードが前記新たなアクティブノードになったことに応答して、
前記新たなアクティブノードによって、第２トランザクションのために、前記分散ストレージにデータをコミットするステップと；
前記新たなアクティブノードによって、前記トランザクションログに前記第２トランザクションの指示を提供するメタデータを格納させるステップと；
を更に含む、請求項１に記載の方法。
【請求項９】
前記分散ストレージによって、前記トランザクションログ内の複数のトランザクションについての指示を提供するメタデータのキーを、該指示を提供する第１メタデータが格納されている前記分散ストレージ内の物理的な位置に関連付けるマッピングを維持するステップ、
を更に含む、請求項１乃至８のいずれか一項に記載の方法。
【請求項１０】
データベースシステムであって、
データベースを実装するよう構成される複数のノードと；
前記複数のノードに対してアクセス可能であり、前記データベースのデータを格納するように構成される分散ストレージと；
を備え、前記複数のノードのうちの第１ノードは、
前記分散ストレージにデータをコミットすることを含む第１トランザクションを実行する要求を受け取り、
前記第１トランザクションについて、前記分散ストレージに第１データセットを格納し、
前記分散ストレージによって維持されるトランザクションログに前記第１トランザクションの第１レコードを格納することであって、前記トランザクションログは、前記データベースに関してトランザクションが実行される順序を定義する、
ように構成される、データベースシステム。
【請求項１１】
前記複数のノードのうちの第２ノードは、
前記分散ストレージから、前記第１レコードを含む前記トランザクションログを読み出し、
前記トランザクションログを読み出したことに基づいて、前記第２ノードによって維持されているメタデータを更新することであって、該メタデータは、前記データベースの現在の状態を示す、
ように構成される、請求項１０に記載のデータベースシステム。
【請求項１２】
前記トランザクションログは、前記トランザクションの複数のレコードを含み、当該データベースシステムは、
前記分散ストレージ内に前記複数のレコードを識別するカタログを維持するように構成されるメタデータサーバを更に備え、前記第１ノードは、前記第１レコードが格納されたことを前記メタデータサーバに通知するように構成される、
請求項１１に記載のデータベースシステム。
【請求項１３】
前記第２ノードは、
前記メタデータサーバによって維持される前記カタログにアクセスして、前記第１ノードによって前記トランザクションログに追加されたレコードを識別し、
前記分散ストレージから前記追加されたレコードを読み出し、
前記読み出したレコードに基づいて、前記維持されているメタデータを更新する、
ように構成される、請求項１２に記載のデータベースシステム。
【請求項１４】
前記第２ノードは、
第２データセットを書き込むことを含む第２トランザクションを実行する要求を受け取り、
該要求に応答して、
前記分散ストレージに第２データセットを格納し、
前記第２トランザクションの第２レコードを、前記分散ストレージによって維持される前記トランザクションログに格納する、
ように構成される、請求項１１に記載のデータベースシステム。
【請求項１５】
当該データベースシステムは、前記複数のノードのうちの１つのみを、所与の時点で、前記データベースシステムのアクティブノードとして動作するように選択するよう構成される、
請求項１０乃至１４のいずれか一項に記載のデータベースシステム。
【請求項１６】
前記複数のノードは、高可用性（ＨＡ）クラスタを実装するように構成され、前記分散ストレージは、ネットワークを介して前記複数のノードに結合される複数のストレージデバイスを含む、
請求項１０乃至１５のいずれか一項に記載のデータベースシステム。
【請求項１７】
請求項１乃至９のいずれか一項に記載の方法を実施するために１つ以上のプロセッサによって実行可能なプログラム命令を有する、非一時的なコンピュータ読取可能媒体。
【請求項１８】
データベースシステムの複数のデータベースノードのうちの第１データベースノードによって、前記複数のデータベースノードの間で共有される分散ストレージに格納されたデータのためのキャッシュを維持するステップであって、前記キャッシュは、第１キー値ペアのためのエントリを含む、ステップと；
前記第１データベースノードによって、トランザクションログを読み出すステップであって、前記トランザクションログは、前記データベースシステムのトランザクションが前記分散ストレージにコミットされる順序を識別する、ステップと；
前記読み出したことに基づいて、前記第１データベースノードが、前記第１キー値ペアの値を修正する第１トランザクションを前記複数のデータベースノードのうちの第２データベースノードが前記分散ストレージに対してコミットしたことを決定するステップと；
前記決定したことに応答して、前記第１データベースノードが、前記第１キー値ペアの前記修正された値に基づいて、前記キャッシュに含まれる前記エントリを更新するステップと；
を含む、方法。
【請求項１９】
動作が、
前記第１データベースノードによって、前記トランザクションログにコミットされた新たなトランザクションを識別する、前記データベースシステムのカタログをモニタリングするステップであって、前記カタログは、前記データベースシステムのデータベース・スキーマを格納するステップと；
前記トランザクションログを読み出す前に、前記第１データベースノードが、前記分散ストレージにコミットされた新たなトランザクションを前記カタログが識別することを決定するステップと；
を更に含む、請求項１８に記載の方法。
【請求項２０】
動作が、
前記第１データベースノードによって、クライアントデバイスから、前記分散ストレージ内の第２キー値ペアの値を修正することを含む第２トランザクションを実行する要求を受け取るステップと；
前記第１データベースノードによって、前記分散ストレージにおいて、前記第２キー値ペアの前記修正された値及び前記第２トランザクションのレコードを格納するステップであって、前記レコードは、前記第２キー値ペアの前記値に対する修正を指定する、ステップと；
前記第１データベースノードによって、前記第２トランザクションの前記レコードを識別するようにカタログを更新するステップと；
を更に含む、請求項１８又は１９に記載の方法。
【請求項２１】
前記更新するステップは、前記エントリ内の値を、前記第１キー値ペアの前記修正された値で置き換えることを含む、
請求項１８乃至２０のいずれか一項に記載の方法。
【請求項２２】
前記更新するステップは、前記キャッシュに含まれる前記エントリを無効にすることを含む、
請求項１８乃至２０のいずれか一項に記載の方法。
【請求項２３】
動作が、
前記第１データベースノードによって、特定のクライアントデバイスから、前記第１キー値ペアのキーに対応する値についての要求を受け取るステップと；
前記値が前記更新されたエントリによって格納されているという決定に応答して、前記第１データベースノードが、前記更新されたエントリからの前記値を前記特定のクライアントデバイスに提供するステップと；
を更に含む、請求項１８乃至２２のいずれか一項に記載の方法。
【請求項２４】
請求項１８乃至２３のいずれか一項に記載の方法を実施するために１つ以上のプロセッサによって実行可能なプログラム命令を有する、非一時的なコンピュータ読取可能媒体。
【請求項２５】
データベースシステムであって、
データベースを実装するように構成される複数のノードと；
前記複数のノードに対してアクセス可能であり、前記データベースのデータを格納するように構成される分散ストレージと；
を備え、前記複数のノードのうちの第１ノードは、請求項１８乃至２３のいずれか一項に記載の方法を実施するように構成される、データベースシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、高可用性システムに関し、より具体的には、クラスタデータベースシステムに関する。
【背景技術】
【０００２】
組織がユーザの情報を格納することを望むとき、その組織は、典型的に、効率的にアクセスされ得る組織化された方法で、この情報を格納するデータベースシステムを実装する。大規模企業システムのデータベースシステムは、コンピュータクラスタを実装するために複数のサーバに依拠することがある。コンピュータクラスタでは、個々のサーバが、データベースアプリケーションのインスタンスを実行するクラスタノードとして機能する。これらのノードは、データに対して操作するためにユーザからの要求に個別に対応（service）することがある。これらのノードは並列に動作することができるので、ノード間のデータコヒーレンスを維持するために情報を交換することができる。
【図面の簡単な説明】
【０００３】
【図１】いくつかの実施形態による、データベースを実装するデータベースシステムの例示的な要素を示すブロック図である。
【０００４】
【図２】いくつかの実施形態による、論理ドメイン及び物理ドメインにおけるトランザクションログの例示的な要素を示すブロック図である。
【０００５】
【図３】いくつかの実施形態による、一組のキーを維持するコンピュータシステムの例示的な要素を示すブロック図である。
【０００６】
【図４Ａ】いくつかの実施形態による、分散ストレージへのデータ書き込み要求に対応するアクティブノードの例示的な要素を示すブロック図である。
【０００７】
【図４Ｂ】いくつかの実施形態による、データに対する要求に対応するスタンバイノードの例示的な要素を示すブロック図である。
【０００８】
【図５】いくつかの実施形態による、ノードにまたがるデータコヒーレンスの維持に関する例示的な方法を示すフロー図である。
【図６】いくつかの実施形態による、ノードにまたがるデータコヒーレンスの維持に関する例示的な方法を示すフロー図である。
【図７】いくつかの実施形態による、ノードにまたがるデータコヒーレンスの維持に関する例示的な方法を示すフロー図である。
【０００９】
【図８】いくつかの実施形態による、例示的なコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【００１０】
本開示は、「一実施形態」又は「実施形態」への言及を含む。「一実施形態において」又は「実施形態において」というフレーズの出現は、必ずしも同じ実施形態を指しているわけではない。特定の特徴、構造又は特性は、本開示と矛盾しない任意の適切な方法で組み合わされてよい。
【００１１】
本開示においては、異なるエンティティ（「ユニット」、「回路」、他の構成要素等と様々に呼ばれることがある）は、１つ以上のタスク又はオペレーションを実行するように「構成された」として説明又は特許請求されることがある。この定式化、すなわち−［１つ以上のタスクを実行する］ように構成された［エンティティ］−という定式化は、本明細書において、構造（すなわち、電子回路のような何らかの物理的なもの）を指すように使用される。より具体的には、この定式化は、この構造が、オペレーション中に１つ以上のタスクを実行するように配置されていることを示すために使用される。構造は、該構造が現在操作されていない場合であっても、何らかのタスクを実行するように「構成された」ということができる。「データベース管理アプリケーションのインスタンスを実行するように構成されたノード」は、例えば問題となっている集積回路が現在使用されていない（例えば電源がそれに接続されていない）場合であっても、オペレーション中にこの機能を実行する回路を有するコンピュータシステムを網羅するように意図されている。したがって、何らかのタスクを実行する「ように構成された」として説明又は記載されるエンティティは、そのタスクを実装するために実行可能なプログラム命令を格納するデバイス、回路、メモリ等のような何か物理的なものを指す。このフレーズは、本明細書では、何か無形のものを指すためには使用されない。したがって、ここでは、「ように構成された」という構造は、アプリケーションプログラミングインタフェースのようなソフトウェアエンティティを指すためには使用されない。
【００１２】
「ように構成された（configured  to）」という用語は、「ように構成可能（configurable  to）」を意味するようには意図されない。例えばプログラムされていないＦＰＧＡは、特定の機能を実行する「ように構成された」とは見なされないが、その機能を実行する「ように構成可能」である可能性があり、プログラミング後にその機能を実行する「ように構成される」可能性がある。
【００１３】
本明細書中で使用されるとき、「第１」、「第２」という用語は、それらが先行する名詞のラベルとして使用され、具体的に記載されない限り、いかなる種類の順序付け（例えば空間的、時間的、論理的等）も暗示しない。例えば８つのノードを有するデータベースシステムでは、「第１」及び「第２」ノードという用語は、８つのノードのうちの任意の２つを参照するために使用されることがある。
【００１４】
本明細書中で使用されるとき、「に基づいて」という用語は、決定に影響する１つ以上のファクタを説明するのに使用される。この用語は、追加的なファクタが決定に影響し得る可能性を排除するものではない。すなわち、決定は、指定されたファクタのみに基づくことがあり、あるいは指定されたファクタだけでなく、他の指定されていないファクタにも基づくことがある。「Ｂに基づいてＡを決定する」というフレーズを考える。このフレーズは、Ｂが、Ａを決定するために使用されるファクタであること又はＡの決定に影響を及ぼすことを指定する。このフレーズは、Ａの決定が、Ｃのような何らかの他のファクタにも基づいてもよいことを排除しない。このフレーズは、Ａが、Ｂのみに基づいて決定される実施形態も包含するよう意図される。したがって、本明細書で使用されるとき、「に基づいて」というフレーズは、「に少なくとも部分的に基づいて」というフレーズと同義である。
【００１５】
詳細な説明
データベースノードにまたがってデータコヒーレンシーを維持するために、１つのアプローチは、ノードがデータベースにトランザクションをコミットするときに、他のノードに直接通知させることである。このようなアプローチでは、コミットされたトランザクションの通知は、同期的又は非同期的に伝達され得る。同期アプローチでは、所与のノードは、他のノードに各トランザクションが実行されていることを通知し、トランザクションがコミットされる前に、それらのノードの各々から受け取りの確認を待つ。しかしながら、このアプローチは、所与のノードが、確認を待つのにあまりに多くの時間を費やすため、高性能アプリケーションでは実用的ではない。また、いずれかのノードが確認の送信に失敗した場合（例えばクラッシュしたために）、所与のノードはもはやいかなるトランザクションもコミットすることができない。非同期アプローチでは、所与のノードは周期的なバッチで他のノードに通知するが、他のノードからの受け取り確認は待たない。しかしながら、このアプローチは、所与のノードが、他のノードに最後の通知以降に行われたコミットされたトランザクションの新たなセットに関して他のノードに通知する前にクラッシュした場合、崩壊する。
【００１６】
本開示は、従来のアプローチの欠点の一部を克服する方法で、ノードにまたがってメタデータのコヒーレンスを維持するための技術を説明する。以下で説明される様々な実施形態では、分散ストレージに書き込みを行うノードは、データベースシステムの現在の状態を他のノードに知らせるために、共有ストレージを介して間接的に他のノードにトランザクションメタデータを送信する。このような実施形態では、共有ストレージは、データベースシステムのノードによってコミットされたトランザクションを示し、かつトランザクションが実行される順序を示す、トランザクションログを格納する。したがって、トランザクションのための共有ストレージにデータを書き込むノードは、そのデータが書き込まれたことを示すレコードを付加することによって、トランザクションログを更新することができる。トランザクションログに格納されたレコードは、他のノードによってレビューされ、データベースシステムの現在の状態を反映するようにローカルバッファキャッシュを更新することができる。新たに格納されたレコードの追跡を可能にするために、一部の実施形態では、メタデータサーバは、共有ストレージに書き込まれた新たなトランザクションレコードを識別するために使用可能なカタログを維持することができる。したがって、ノードが新しいトランザクションについてのレコードをログに書き込むとき、そのノードは、新しいトランザクション及び分散ストレージ内の対応するレコードをメタデータサーバに通知することができる。その後、メタデータサーバはカタログにレコードの指示（indication）を格納することができる。他のノードが後でカタログをレビューするとき、格納された指示からレコードを学習し、トランザクションログからレコードを読み出して、どのデータが変更されたかを判断することができる。このようにしてトランザクションログ情報を同期させることは、上記の同期アプローチよりも有利であり得る。なぜなら、書き込みノードは、トランザクションログ情報の受け取りを確認するよう他のノードを待つ必要がないからである。このような方法でトランザクションログ情報を同期させることは、トランザクションが実行されているときにトランザクションレコードが記録され、したがって、他のノードにトランザクションを通知することなくノードがトランザクションを実行する可能性が少ないので、上記の非同期アプローチよりも有利である。
【００１７】
次に、図１に移ると、データベースシステム１０のブロック図が図示されている。図示される実施形態では、データベースシステム１０は、ネットワーク１５０を介して結合される、分散ストレージ１１０、メタデータサーバ１２０、アクティブノード１３０及びスタンバイノード１４０を含む。図示されるように、ストレージ１１０は、一緒にトランザクションログ１１２を形成するログレコード１１５を含み、メタデータサーバ１２０は、カタログ１２５を含む。図示されていないが、複数のクライアントデバイスが、データベーストランザクションを実行する要求を送信することによって、ノード１３０及び１４０と対話することができる。いくつかの実施形態では、データベースシステム１０は、図示されているものとは異なるように実装されてもよい。例えば図示の実施形態では単一のアクティブノード１３０が示されているが、いくつかの実施形態では、データベースシステム１０は複数のアクティブノード１３０を含む。いくつかの実施形態では、メタデータサーバ１２０は、カタログ１２５を格納する複数のサーバとして実装されてもよい。
【００１８】
データベースシステム１０は、様々な実施形態において、データベースクラスタとして動作し、分散ストレージ１１０に対するデータの読み出し及び／又は書き込みを含むトランザクション要求１３１及び１４１を処理するように構成される、ノード１３０及び１４０を介して実装される。したがって、ノードは、ユーザのパスワードを新しい値に更新するトランザクション要求１３１を受け取ることがあり、したがって、その値を分散ストレージ１１０に書き込んでよい。様々な実施形態では、データベースシステム１０は、アクティブノード１３０として示される１つ以上のノードが、他のノードの代わりに分散ストレージ１１０にデータを書き込むために選択される、アクティブ／スタンバイ・トポロジーを使用して高可用性（ＨＡ：high  availability）サービスを実装する。ＨＡサービスを実装すると、データベースシステム１０は、各ノード１３０又は１４０のヘルス状態（health）をモニタして、何らかの問題又は誤動作が発生しているかどうかを判断することができる。問題が検出されると、データベースシステム１０は、アクティブノード１３０のヘルス状態の低下に基づいて、データを書き込むために、新たなアクティブノード１３０を選ぶよう選出を行うことができる。例として、現在のアクティブノード１３０を冷却するファンが動作を停止することがあり、これはノードを過熱させ、直ちにシャットダウン（又はクラッシュ）させることがある。このような例では、データベースシステム１０は、現在のアクティブノード１３０が応答不能になったことを検出し、次いで、選出を通して、別のノードにアクティブノード１３０になるよう促すことができる。いくつかの実施形態では、システム１０は、任意の所与の時点でアクティブノード１３０として動作するために１つのノードのみを選択する。
【００１９】
分散ストレージ１１０は、いくつかの実施形態において、システム１０のユーザのためにデータを格納するように構成され、かつトランザクションがシステム１０においてコミットされる順序を指定する、システム１０のトランザクションログ１１２を維持するように構成される、共有ストレージである。トランザクションログ１１２は、各々がそれぞれのトランザクションについてのメタデータを指定する複数のログレコード１１５を含んでよく、トランザクションがコミットされる順序で配置されてよい。いくつかの実施形態では、一組のレコード１１５は、ストレージ１１０上のファイル（以下では、ログ範囲（log  extents）と呼ぶ）内に格納することができる。分散ストレージ１１０は、ネットワーク上で互いに接続され、かつデータ損失を防止するためにデータを冗長的に格納するように構成される、複数のストレージデバイスによって実装されてよい。様々な実施形態では、分散ストレージ１１０は、ノード１３０及び１４０にアクセス可能であり、これらのノードからの読み出し及び書き込み要求を処理するように構成される。トランザクションログ１１２の格納は、図２に関連して以下で更に詳細に説明される。
【００２０】
メタデータサーバ１２０は、様々な実施形態において、データベースシステム１０を実装するためにノード１３０及び１４０によって使用される様々なメタデータを維持するように構成される。例えば図示されるように、サーバ１２０は共有データベースカタログ１２５を維持することができ、共有データベースカタログ１２５は、種々のデータベース構造及びオブジェクトを定義するスキーマ、データベース内のデータをルックアップするためのインデックス、データベース情報にアクセスすることを許可されたユーザ等を指定することができる。様々な実施形態では、カタログ１２５は、アクティブノード１３０による新しいレコード１１５の割当てに関する情報を格納する。この情報は、その後、どのレコード１１５がアクティブノード１３０によって割り当てられて書き込まれたかを決定するために、ノード１４０によってカタログ１２５から読み出されてよい。これらの新しいレコード１１５を知ると、ノード１４０はレコード１１５を読み出し、これにより、データベースシステム１０の現在の状態を決定し、ローカルに維持されたメタデータを略更新する、例えば分散ストレージ１１０からキャッシュされたデータを有するローカルバッファキャッシュを更新することができる。様々な実施形態では、メタデータサーバ１２０は、ノード１３０によってストレージ１１０において最近格納されたレコード１１５に関する通知１３３をアクティブノード１３０から受け取る。いくつかの実施形態では、アクティブノード１３０は、レコード１１５がストレージ１１０に置かれる新しい範囲（new  extent）を割り当てることに応答して通知１３３を送信する。サーバ１２０は、図３に関連して以下で更に詳細に説明される。
【００２１】
アクティブノード１３０は、様々な実施形態において、分散ストレージ１１０に対するデータの読み出し及び書き込みの要求を処理するように構成される。したがって、アクティブノード１３０は、クライアントデバイスから、ノード１３０に、一組のデータをストレージ１１０に書き込ませる書き込みトランザクション要求１３１を受け取ることができる。このようなトランザクションの実行に応答して、ノード１３０は、ストレージ１１０内のトランザクションログ１１２に、トランザクションのための対応するログレコード１１５を格納する（ログレコード書き込み（write  log  record）１３２として示される）ことができる。上記のパスワードの例を続けると、要求１３１は、以前のパスワードを置き換える新しいパスワードを指定してよい。その結果、いくつかの実施形態では、アクティブノード１３０は、ユーザのパスワードフィールドについてのキー、以前のパスワード、新しいパスワード、タイムスタンプ等のようなトランザクションに関するメタデータを指定するトランザクションレコード１１５を書き込むことができる。上述のように、アクティブノード１３０は、この新たに作成されたレコード１１５に関連付けられるメタデータサーバ１２０に、通知１３３を送信してもよい。アクティブノード１３０は、図４Ａに関連して以下で更に詳細に説明される。
【００２２】
スタンバイノード１４０は、様々な実施形態において、分散ストレージ１１０に格納されたデータを提供するために要求を処理するように構成される（あるいは、是認される場合に、要求に対応する役割を引き継ぐように構成されるバックアップノードとして機能する）。様々な実施形態では、スタンバイノード１４０は各々、データを格納するローカルキャッシュを維持し、このデータは、分散ストレージ１１０によっても格納されてよく、データベースシステム１０の現在の状態を反映してもよい。このような実施形態では、スタンバイノード１４０は、クライアントデバイスから、ストレージ１１０に格納されたデータについてのトランザクション要求１４１を読み出す。これらの要求に応答して、スタンバイノード１４０は、データがキャッシュ内にすでに存在する場合には、要求されたデータを（ストレージ１１０とは対照的に）これらのローカルキャッシュから取り出すことができる。これらのローカルキャッシュがストレージ１１０内のデータと同時に存在することを確実にするために、様々な実施形態において、スタンバイノード１４０は、カタログ１２５を参照して、どの新しいレコード１１５がトランザクションログ１１２に追加されたかを識別することができる。次いで、これらのレコード１１５をストレージ１１０から読み出して、ストレージ１１０内のデータに対する修正であって、それらのローカルキャッシュ内のデータに影響を与える可能性がある修正を決定することができる。ローカルキャッシュ内のデータが影響を受ける場合（例えばキー値ペアの値が更新又は削除された場合）、スタンバイノード１４０は、ストレージ１１０内のデータの変更を反映するように（例えばキャッシュエントリを更新又は無効化することによって）キャッシュを更新することができる。これは、スタンバイノードが、データベースシステム１０の現在の状態を反映するキャッシュを維持することを可能にする。上記のように、スタンバイノード１４０のうちの１つが、アクティブノード１３０になるように選択されてよく、この時点で、そのノードは、書き込みトランザクション要求１３１に対応することができる。最新のバッファキャッシュを維持することにより、新たに選択されたノード１４０は、アクティブノード１３０の役割をより迅速に引き受けることができる。スタンバイノード１４０は、図４Ｂに関連して以下で更に詳細に説明される。
【００２３】
図２を参照すると、分散ストレージ１１０内のトランザクションログ１１２の一実施形態のブロック図が示されている。上述したように、様々な実施形態では、分散ストレージ１１０は、トランザクションログ１１２を構成する複数のログレコード１１５を含む、システム１０のためのデータを格納するように構成された複数のストレージデバイスを含む。図示された実施形態では、物理ドメイン２０４に対する論理ドメイン２０２のマッピングが示されている。（いくつかの実施形態では、分散ストレージ１１０は、図示されるものと異なって実装されてもよく、例えばマップ２１０は、メタデータサーバ１２０に配置されてもよい）。
【００２４】
上述のように、トランザクションログ１１２は、データベースシステム１０の現在の状態を維持することができ、トランザクションがアクティブノード１３０によって分散ストレージ１１０にコミットされる順序を指定することができる。図示される実施形態では、論理ドメイン２０２は、ログレコード１１５が経時的にログ１１２に追加されるときのログ１１２の構成を表す（これは、ノード１３０及び１４０のようなストレージ１１０の外部の構成要素によって認識される構成であり得る）。レコード１１５の格納を容易にするために、分散ストレージ１１０は、様々な実施形態において、最新の特定のレコード１１５が格納される場所と、アクティブノード１３０によるコミットされたトランザクションのために新しいレコード１１５をログ１１２に追加する場所を指定する、付加ポイント（append  point）２１２（「ヘッド（head）」とも呼ばれる）を維持する。例えばストレージ１１０は、ユーザのパスワードをＡＢＣからＤＥＦに更新する初期トランザクションのためのメタデータを指定する特定のログレコード１１５Ｃを含むことがある。ある時点で、アクティブノード１３０は、パスワードをＤＥＦからＧＨＩに更新するためのトランザクション要求１３１を受け取り、付加ポイント２１２において、追加のレコード１１５Ａをログ１１２に追加することができる。追加のトランザクションがストレージ１１０に格納されると、付加ポイント２１２はトランザクションログ１１２内の後続のレコード１１５に進む。いくつかの実施態様において、ストレージ１１０は、ストレージ１１０内で使用中の最も古いレコード１１５を識別するテール（tail）２１４マーカーを維持する。最も古いレコード１１５が最終的に消去されると、テール２１４は、使用中の次に最も古いレコード１１５に進んでよい。
【００２５】
特に、上述の例では、ログ１１２は、両方のトランザクションについてのレコード１１５を含む。このようにしてレコード１１５を格納することは、データベースシステム１０が、ログを「再生」することによって、例えばヘッド２１２で開始してテール２１４に向かって移動することによって、システム１０の特定の以前の状態に戻ることを可能にすることができる。また、このようにして格納することは、システム１０が特定の時点からどのように変化したかを（したがって、システム１０の現在の状態を）、付加ポイント２１２で開始して、その特定の時点に対応する最後の読み出しレコード１１５までログ１１２を再生すること（あるいは最後の読み出しレコード１１５で開始し、ヘッド２１２に向かって前に進むこと）によって、スタンバイノード１４０が知ることも可能にすることができる。上記の例を続けると、スタンバイノード１４０は、そのローカルキャッシュに、ユーザのパスワードについてのキー値ペアのコピーを格納することができ、この値は、読み出しレコード１１５Ｃに応答するＤＥＦである。スタンバイノード１４０がその後、カタログ１２５からレコード１１５Ａを知り、レコード１１５Ａからメタデータを読み出すと、スタンバイノード１４０は、ユーザのパスワードの値が現在ＧＨＩであるように、ローカルキャッシュ内のキー値ペアを更新することができ、したがって、ローカルキャッシュは、データベースシステム１０の現在の状態に一致するものとなった。
【００２６】
図示される実施形態では、物理ドメイン２０４は、ストレージ１１０の複数のストレージデバイス上のログ１１２の編成を表し、論理ドメイン２０２の編成とは別であってよい。例えば図示されるように、ログ１１２のレコード１１５Ａ〜Ｃは、それらが時間的に連続的に発生するので、論理ドメイン内では隣接し得るが、物理ドメイン２０４内ではストレージ１１０の異なる要素に格納されてよい。（上記のように、いくつかの実施形態では、レコード１１５のグループが同じログ範囲に配置されてもよく、したがって、レコード１１５Ａ及び１１５Ｂは同じ範囲内に併置されてもよいが、レコード１１５Ｃはストレージ１１０の他の場所に位置する別の範囲に含まれてもよい）、ストレージ１１０はまた、物理ドメイン２０４においてレコード１１５を見つけるために使用可能なマップ２１０も含んでよい。
【００２７】
マップ２１０は、様々な実施形態において、対応するキーを供給することによって、ストレージ１１０に格納された特定のレコード１１５を見つけるために使用され得るキー値ペアのマッピングを維持する。いくつかの実施形態では、レコード１１５を格納するとき（あるいは別の実施形態では、レコード１１５を格納するためにログ範囲を割り当てるとき）、ストレージ１１０（又はアクティブノード１３０）は、キーと物理的な場所でマップ２１０を更新するが、キーと物理的な場所は両方とも新たに割り当てられたレコード１１５に関連付けられる。あるスタンバイノード１４０が、カタログ１２５から新しく作成されたレコード１１５に関連するキーを知ると、スタンバイノード１４０は、レコード１１５に関連付けられるキーをストレージ１１０に提供することができ、ストレージ１１０は、マップ２１０を使用して、レコードがストレージ１１０内に置かれている物理アドレスを決定する。
【００２８】
様々な実施形態において、ログレコード１１５は、操作される実際のデータのコピーと同様に、トランザクションメタデータを含むが、データベースシステム１０は、別個のデータレコードにデータの別のコピーを格納してもよい。いくつかの実施形態では、これらのデータレコードは、ログレコード１１５と併置されてもよい。他の実施形態では、データレコードは、読み出しトランザクション要求１４１及び／又は書き込みトランザクション要求１３１に関連付けられるデータベースクエリに応答するデータの取り出しをより容易にするように、別個に配置されて編成されてもよい。
【００２９】
次に図３を参照すると、メタデータサーバ１２０の一実施形態のブロック図が示されている。上述のように、様々な実施形態において、メタデータサーバ１２０は、データベースクラスタ及びログレコード１１５に関するメタデータを維持し、カタログ１２５を維持するように構成される。したがって、図示の実施形態では、サーバ１２０は、メタデータ３２０と、レコードキー３１０を有するカタログ１２５を含む。上述のように、メタデータサーバ１２０は、互いに協働して動作する複数のサーバによって実装されてもよい。様々な実施形態において、サーバ１２０は、図示されたものとは異なるように実装されてもよく、例えば図２に関連して上述したように、例えばマップ２１０を含んでもよい。
【００３０】
カタログ１２５は、様々な実施形態において、上述した種々の情報のいずれかを含んでもよく、また、アクティブノード１３０によって割り当てられて書き込まれたレコード１１５を決定するために使用可能であってよい。したがって、カタログ１２５は、特定のレコード１１５を見つけるために使用可能なキー３１０を格納することができる。例えば関連するレコード１１５の物理アドレスを受け取るために、キー３１０をマップ２１０に供給してもよい。いくつかの実施形態では、キー３１０は、１つ以上のログレコード３１５を含むコンテナ（例えばログ範囲）を見つけるために使用可能であってよい。様々な実施形態では、サーバ１２０は、新たに割り当てられたレコード１１５に関する通知１３３をアクティブノード１３０から受け取ったことに応答して、カタログ１２５を新たなキー３１０で更新する。続いて、サーバ１２０は、カタログ１２５が更新されたことをスタンバイノード１４０に通知することができる。新たに割り当てられたレコード１１５を読み出すことを望むスタンバイノード１４０は、まず、キー３１０についてカタログ読み出し要求（read  catalog  request）３１２をメタデータサーバ１２０に発行することによって、カタログ１２５を調べる（consult）ことができる。要求３１２に応答して、サーバ１２０は、要求側のノードに１つ以上のキー３１０を提供することができる。場合によっては、要求３１２は、基準に基づくキー３１０の要求であってもよい。例えばスタンバイノード１４０は、しきい値を満たすタイムスタンプを有するレコード１１５の要求３１２を発行することによって、最新のトランザクションメタデータでそのキャッシュを更新しようと試みることができる。
【００３１】
図２に関連して上記したように、様々な実施形態において、メタデータサーバ１２０は、新たなレコード１１５の割り当てに応答して、ノード１３０から追加の情報を受け取ってよい。この情報は、付加ポイント２１２及びテール２１４マーカーを含んでよい。メタデータサーバ１２０は、この情報をメタデータ３３０に格納し、要求（図示せず）に応じて、ノード１３０及び１４０にそのような情報を提供してよい。一例として、アクティブになった後、アクティブノード１３０は、ログ１１２のヘッドを知る必要があり、したがって、サーバ１２０からのポイント２１２を要求することがある。様々な実施形態では、メタデータ３３０は、カタログ１２５の各エントリについてのタイムスタンプ（例えば作成、修正等）、各エントリについてのトランザクションＩＤ、データベース・スキーマ等を含む。サーバ１２０は、このメタデータを使用して、ノード１３０及び／又は１４０からの要求３１２を処理することができる。一例として、特定のスタンバイノード１４０は、特定のレコード１１５のキー３１０を要求してよく、したがって、メタデータサーバは、トランザクションＩＤを使用して、レコード１１５及びその後のキー３１０を決定してよい。
【００３２】
次に図４Ａを参照すると、アクティブノード１３０の一実施形態のブロック図が示されている。上述したように、様々な実施形態では、アクティブノード１３０は、ストレージ１１０に対してデータを読み書きするためにトランザクション要求１３１及び１４１に対応するように構成される。図示される実施形態では、アクティブノード１３０は、データベースアプリケーション４１０、キャッシュ４２０及びメタデータ４３０を含む。いくつかの実施形態では、アクティブノード１３０は、図示されているものとは異なるように実装される。
【００３３】
データベースアプリケーション４１０は、様々な実施形態において、高可用性（ＨＡ）データベースを実装するように構成される、ソフトウェアルーチン、ハードウェア又はそれらの組合せである。上述のように、ノード１３０及び１４０は、データベースクラスタ内で動作するように構成されてよく、したがって、アプリケーション４１０は、該アプリケーション４１０がデータベースレベルとローカルレベルの両方で動作するように、ノード１３０及び１４０にまたがって分散されてよい。様々な実施形態では、例えばノード１３０及び１４０は共同して、どのノードが次のアクティブノード１３０になるかを決定するための選出を行ってよい。アプリケーション４１０が、ノードのすべて及びそれらのヘルス状態のビューを有するデータベースレベルを動作させ得るので、そのような選出が起こり得る。ローカルでは、アクティブノード１３０は、アプリケーション４１０を実行して、クライアントデバイスからのトランザクション要求１３１及び１４１に対応してよい。このようなトランザクションを処理するために、一実施形態において、アプリケーション４１０は、データ及びメタデータを、それぞれキャッシュ４２０及びメタデータ４３０に格納することによって、データベースの現在の状態を維持する。メタデータ４３０は、付加ポイント２１２、テール２１４、現在格納されているデータに関連付けられるデータベース・スキーマ、付加ポイント２１２によって示される現在のログレコード１１５の残りの記憶容量、タイムスタンプ、処理されたトランザクション、処理されるべきトランザクション等を含んでよい。
【００３４】
キャッシュ４２０は、様々な実施形態において、読み出し要求に対応するために、かつ／又はデータがストレージ１１０に格納され得るまでトランザクションをコミットするためのデータをバッファするために、キャッシュラインにデータを格納するように構成される。いくつかの実施形態では、キャッシュ４２０は、キーと関連付けて値を格納するようにキャッシュ４２０が構成される、セットアソシエイティブ・キャッシュ方式を実装する。例えばキャッシュ４２０は、データをキー値ペアとして格納してもよく、この場合、キーはレコードのアドレス位置であってよく、値はレコードに格納された値であってよい。値の格納又は取り出し要求が受け取られると、キャッシュ４２０は、キーを使用して、値を格納するか又はそこから取り出すための特定のキャッシュライン／エントリを選択してよい。様々な実施形態では、アクティブノード１３０は、データを分散ストレージ１１０内のレコード１１５に書き込む前に、キャッシュ４２０でデータに対して動作する。
【００３５】
ノード１３０が書き込みトランザクション要求１３１を受け取ると、いくつかの実施形態では、アクティブノード１３０は、分散ストレージ１１０に新しいレコード１１５を割り当てるかどうかを決定する−例えば現在のログレコード１１５の残りの記憶容量に基づいて決定する。新しいレコード１１５を割り当てる必要があるとき、アクティブノード１３０は分散ストレージ１１０で新しいレコード１１５を割り当てることができる。レコード１１５が書き込みに利用可能になると、様々な実施形態では、アクティブノード１３０は、トランザクションをレコード１１５にコミットする／書き込む。場合によっては、トランザクションは、新しいデータ、以前のデータ及び識別されたレコードを含んでよく、他の場合には、この情報は、異なるファイルに含まれ得るが、トランザクションによって参照されてよい−例えば図２に関連して議論されるようなデータレコード及びログレコード１１５。新しいレコード１１５を割り当てた後、様々な実施形態では、アクティブノード１３０は、そのレコードをメタデータサーバ１２０に通知する。このような通知１３３は、新しいレコード１１５を見つけてアクセスするために使用可能なレコードキー３１０を含んでもよい。いくつかの実施形態では、アクティブノード１３０は、単一のレコード１１５の代わりに、レコード１１５のセットを割り当てる。例えばノード１３０は、１０個のレコードを割り当てる。
【００３６】
次に図４Ｂを参照すると、スタンバイノード１４０の一実施形態のブロック図が示されている。上述したように、様々な実施形態では、スタンバイノード１４０は、分散ストレージ１１０に格納されたデータを提供することによって、トランザクション要求１４１に対応するように構成されてもよい。図示される実施形態では、スタンバイノード１４０は、データベースアプリケーション４１０、キャッシュ４２０及びメタデータ４３０を含み、これらは、図４Ａに関して説明したものと同様の機能を実装することができる。様々な実施形態では、ノード１４０は、図示されているものとは異なるように実装されてもよい。
【００３７】
上述したように、スタンバイノード１４０は、様々な実施形態において、ストレージ１１０及びサーバ１２０からのデータをそれぞれキャッシュ４２０及びメタデータ４３０に格納することによって、データベースシステム１０の現在の状態を維持する。そうすることにより、スタンバイノード１４０がアクティブノード１３０になり、要求１４１に対応することが可能になる。システム１０の現在の状態を維持するために、様々な実施形態では、スタンバイノード１４０は、アクティブノード１３０によって割り当てられたすべての新しいレコード１１５のカタログ１２５をモニタする。例えばスタンバイノード１４０は、カタログ１２５によって示されるレコード１１５を、メタデータ４３０に含まれる処理されたレコード１１５（場合によってはログ範囲）のリストと比較することができる。他の場合には、スタンバイノード１４０は、カタログ１２５に追加されたいずれかの新しいレコード１１５を通知されることがある。新しいレコード１１５が存在すると決定した後、スタンバイノード１４０は、新しいレコード１１５（又はログ範囲）に対応するキー３１０についてのカタログ読み出し要求３１２をサーバ１２０に送信することができる。受け取ったキー３１０を使用して、スタンバイノード１４０は、キャッシュ４２０内にローカルに格納された値がノード１３０によって変更されたかどうかを決定するために、ログ１１２内の新しいレコード１１５を読み出すことができる。そのような決定は、キャッシュ４２０内の対応する値を索引付けるために使用されるキーに対応する新しいレコード１１５内のキーに基づいてもよい。スタンバイノード１４０は、古い値を格納するキャッシュ４２０のエントリを更新してもよい。いくつかの実施形態では、ノードは、修正された値で古い値を置き換えることによってエントリを更新してよく、他の実施形態では、ノード１４０はエントリを無効にして、ノード１４０に、例えば後続の要求１４１において、修正された値をストレージ１１０から取り出させることによってエントリを更新する。
【００３８】
次に、図５に移ると、方法５００のフロー図が図示されている。方法５００は、データベースシステム（例えばシステム１０）によって、該データベースシステムのノード（例えばノード１３０及び１４０）間のデータコヒーレンシーを維持するために実行される方法の一実施形態である。様々な実施形態において、方法５００は、追加のステップ、例えば所与の時間にシステムのアクティブノード（例えばノード１３０）として動作する複数のノードのうちの１つのみを選択するステップ、高可用性（ＨＡ）クラスタを実装するステップ等を含む。
【００３９】
方法５００は、ステップ５１０において開始し、第１ノード（例えばノード１３０）が、トランザクションのために、データのセットを分散ストレージ（例えばストレージ１１０）内に格納する。ステップ５２０において、第１ノードは、トランザクションのレコード（例えばレコード１１５）を、分散ストレージによって維持されるトランザクションログ（例えばログ１１２）内に格納する。様々な実施形態において、トランザクションログは、データベースに関してトランザクションが実行される順序を定義する。様々な実施形態において、データベースシステムのメタデータサーバ（例えばサーバ１２０）は、分散ストレージ内のレコードを識別するカタログ（例えばカタログ１２５）を維持する。第１ノードは、トランザクションのレコードが格納されたことをメタデータサーバに通知してよい。
【００４０】
ステップ５３０において、第２ノード（例えばノード１４０）は、分散ストレージから、レコードを含むトランザクションログを読み出す。ステップ５４０において、第２ノードは、トランザクションログの読み出しに基づいて、第２ノードによって維持されるメタデータ（例えばキャッシュ４２０及びメタデータ４３０）を更新する。メタデータは、データベースの現在の状態を示してよい。様々な実施形態では、第２ノードは、カタログにアクセスして、第１ノードによってトランザクションログに追加されたレコードを識別する。したがって、第２ノードは、追加されたレコードを分散ストレージから読み出し、読み出したレコードに基づいてそのメタデータを更新することができる。様々な実施形態では、第２ノードは、データのセットを書き込むことを含む別のトランザクションを実行する要求を受け取る。したがって、第２ノードは、トランザクションログ内のトランザクションのレコードとともに、分散ストレージにデータのセットを格納する。いくつかの実施形態では、第２ノードは、分散ストレージにも格納されるデータを維持するエントリを含むキャッシュ（例えば４２０）を維持する。場合によっては、第２ノードは、エントリ内のデータがデータのセットによって置き換えられたことをレコードが示すことに応答して、キャッシュ内のエントリを無効にすることによってメタデータを更新する。
【００４１】
次に図６を参照すると、方法６００のフロー図が示されている。方法６００は、データベースシステム（例えばデータベースシステム１０）によって、分散ストレージ（例えばストレージ１１０）に格納されたデータベースシステムのデータについての要求を処理するよう構成された複数のノード（例えばノード１３０及び１４０）の間でデータベースシステムの現在の状態を同期させるために実行される方法の一実施形態である。いくつかの実施形態では、複数のノードのうちの１つが現在アクティブであり、他のノードは現在スタンバイノードである。
【００４２】
方法６００は、ステップ６１０において開始し、アクティブノード（例えばノード１３０）が、分散ストレージにデータをコミットすることを含むトランザクションを実行するための要求（例えば要求１３１）を受け取る。要求を受け取ったことに応答して、ステップ６２０において、アクティブノードは、データベースシステムの状態を更新するためにデータを分散ストレージにコミットし、そのコミットメントの指示（例えばレコード１１５）を提供するメタデータを、分散ストレージ内のトランザクションログ（例えばログ１１２）に格納させる。いくつかの実施形態において、トランザクションログは、スタンバイノードに対して、該スタンバイノードがデータベースの現在の状態を知るための情報を識別する。様々な実施形態では、データベースシステムは、それらのノード間で共有されるカタログ（例えばカタログ１２５）を維持する。種々の実施形態において、カタログは、分散ストレージに格納されたメタデータを識別し、分散ストレージに格納されたメタデータを見つけるためにスタンバイノード（例えばノード１４０）によって使用可能である。メタデータを格納させることに応答して、アクティブノードは、メタデータを識別するようカタログを更新する。様々な実施形態において、アクティブノードは、分散ストレージ内のトランザクションログの外部に格納されるデータレコードにデータを書き込む。
【００４３】
いくつかの実施形態において、スタンバイノードは、トランザクションログが変更されたという通知を受け取る。スタンバイノードは、アクティブノードが、メタデータを識別するようカタログを更新したことに応答して、通知を受け取ってよい。通知の受け取りに応答して、いくつかの実施形態では、スタンバイノードは、クライアント要求（例えば要求１４１）を処理するために、スタンバイノードで維持されているメタデータ（例えばキャッシュ４２０及びメタデータ４３０）を更新する。いくつかの実施形態では、スタンバイノードは、トランザクションに関連付けられるメタデータの読み出しに基づいて、そのメタデータを更新する。スタンバイノードは、様々な実施形態において、分散ストレージのデータを格納するキャッシュを含む。したがって、スタンバイノードは、トランザクションログから、トランザクションに関連付けられるキー値ペアのキーを取り出すことができる。したがって、スタンバイノードは、キーに関連付けられるキャッシュ内のエントリを識別し、該エントリを、キー値ペアのキーに対応する更新することができる。いくつかの実施形態では、スタンバイノードが新たなアクティブノードになることに応答して、新たなアクティブノードは、別のトランザクションのためにデータを分散ストレージにコミットし、トランザクションログ内に、この別のトランザクションの指示を提供するメタデータを格納させる。
【００４４】
いくつかの実施形態では、方法６００は、追加のステップ、例えばスタンバイノード（例えばノード１４０）がアクティブノード（例えばノード１３０）になることを可能にするように動作可能な高可用性（ＨＡ）アプリケーション（例えばアプリケーション４１０）を実行するステップ、複数のノードのうちの１つのみをデータベースシステムのアクティブノードとして選択するステップ、トランザクションログ（例えばログ１１２）内の指示（例えばレコード１１５）のキーを、その指示が格納されている分散ストレージ内の物理的な場所に関連付けるマッピングを維持するステップ等を含む。
【００４５】
次に、図７を参照すると、方法７００のフロー図が示されている。方法７００は、データベースノード（例えばノード１４０）によって、他のデータベースノードとのデータコヒーレンシーを維持するために実行される方法の一実施形態である。
【００４６】
方法７００は、ステップ７１０において開始し、データベースノード（例えばノード１４０）が、複数のノード（例えばノード１３０及び１４０）間で共有される分散ストレージ（例えばストレージ１１０）に格納されるデータのためのキャッシュ（例えばキャッシュ４２０）を維持する。様々な実施形態では、キャッシュは、キー値ペアのためのエントリを含む。ステップ７２０において、データベースノードは、データベースシステム（例えばシステム１０）のトランザクションが分散ストレージにコミットされる順序を識別するトランザクションログ（例えばログ１１２）を読み出す。様々な実施形態では、データベースノードは、トランザクションログにコミットされた新たなトランザクションを識別するデータベースシステムのカタログをモニタする。カタログは、データベースシステムのデータベース・スキーマを格納することができる。トランザクションログを読み出す前に、いくつかの実施形態では、データベースノードは、新たなトランザクションがトランザクションログにコミットされたことをカタログが識別することを決定する。
【００４７】
読み出しに基づいて、ステップ７２０において、データベースノードは、別のノード（例えばノード１３０）が、キー値ペアの値を修正するトランザクションを、分散ストレージにコミットしたことを決定する。この決定に応答して、ステップ７３０において、データベースノードは、キー値ペアの修正された値に基づいて、キャッシュに含まれるエントリを更新する。いくつかの実施形態では、データベースノードは、エントリ内の値を、キー値ペアの修正された値で置き換え、他の実施形態では、ノードは、キャッシュに含まれるエントリを無効にする。分散ストレージにデータを書き込むための要求を処理するように指示された後、様々な実施形態では、データベースノードは、クライアントデバイスから、分散ストレージ内の別のキー値ペアに関連付けられる値を修正するための要求を受け取る。したがって、データベースノードは、要求に従って、値の修正を指定するトランザクションを分散ストレージに格納し、トランザクションを識別するようカタログを更新してよい。様々な実施形態では、方法７００は、追加のステップ、例えばキー値ペアのキーに対応する値の要求を受け取るステップ、その値をクライアントデバイスに提供するステップ等を含む。
【００４８】
例示のコンピュータシステム
次に図８に移ると、分散ストレージ１１０、メタデータサーバ１２０、アクティブノード１３０又はスタンバイノード１４０を実装することができる例示的なコンピュータシステム８００のブロック図が示されている。コンピュータシステム８００は、相互接続８６０（例えばシステムバス）を介してシステムメモリ８２０及びＩ／Ｏインタフェース８４０に結合されるプロセッサ・サブシステム８８０を含む。Ｉ／Ｏインタフェース８４０は、１つ以上のＩ／Ｏデバイス８５０に結合される。コンピュータシステム８００は、これらに限定されないが、サーバシステム、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ又はノートブックコンピュータ、メインフレームコンピュータシステム、タブレットコンピュータ、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、携帯電話や音楽プレーヤ又はパーソナルデータアシスタント（ＰＤＡ）等の消費者デバイスを含む、種々のタイプのデバイスのいずれかとすることができる。便宜上、図８には単一のコンピュータシステム８００が示されているが、システム８００は、同時に動作する２つ以上のコンピュータシステムとして実装されてもよい。
【００４９】
プロセッサ・サブシステム８８０は、１つ以上のプロセッサ又は処理ユニットを含んでもよい。コンピュータシステム８００の様々な実施形態において、プロセッサ・サブシステム８８０の複数のインスタンスが相互接続８６０に結合されてよい。様々な実施形態では、プロセッサ・サブシステム８８０（又は８８０内の各プロセッサユニット）は、キャッシュ又は他の形態のオンボードメモリを含んでもよい。
【００５０】
システムメモリ８２０は、プロセッサ・サブシステム８８０によって実行可能であり、システム８００に本明細書で説明される様々なオペレーションを実行させるプログラム命令を格納するために使用可能である。システムメモリ８２０は、ハードディスクストレージ、フロッピーディスクストレージ、取り外し可能ディスクストレージ、フラッシュメモリ、ランダムアクセスメモリ（ＲＡＭ−ＳＲＡＭ、ＥＤＯ  ＲＡＭ、ＳＤＲＡＭ、ＤＤＲ  ＳＤＲＡＭ、ＲＡＭＢＵＳ  ＲＡＭ等）、読み取り専用メモリ（ＰＲＯＭ、ＥＥＰＲＯＭ等）等のような異なる物理メモリ媒体を使用して実装されてよい。コンピュータシステム８００内のメモリは、メモリ８２０のような一次ストレージに限定されない。むしろ、コンピュータシステム８００は、プロセッサ・サブシステム８８０内のキャッシュメモリ及びＩ／Ｏデバイス８５０上の二次ストレージ（例えばハードドライブ、ストレージアレイ等）のような他の形態のストレージも含んでよい。いくつかの実施形態において、これらの他の形態のストレージはまた、プロセッサ・サブシステム８８０によって実行可能なプログラム命令も記憶してよい。いくつかの実施形態では、上記で説明されたキャッシュ４２０及びメタデータ４３０は、システムメモリ８２０を含み得る（又はその中に含まれ得る）。
【００５１】
Ｉ／Ｏインタフェース８４０は、様々な実施形態に従って、他のデバイスに結合されて他のデバイスと通信するように構成された様々なタイプのインタフェースのいずれかとすることができる。一実施形態において、Ｉ／Ｏインタフェース８４０は、フロントサイドから１つ以上のバックサイドバスへのブリッジチップ（例えばサウスブリッジ）である。Ｉ／Ｏインタフェース８４０は、１つ以上の対応するバス又は他のインタフェースを介して１つ以上のＩ／Ｏデバイス８５０に結合されてよい。Ｉ／Ｏデバイス８５０の例には、ストレージデバイス（ハードドライブ、光学ドライブ、取り外し可能フラッシュドライブ、ストレージアレイ、ＳＡＮ又はそれらの関連するコントローラ）、ネットワークインタフェースデバイス（例えばローカル又はワイドエリアネットワークへの）又は他のデバイス（例えばグラフィクス、ユーザインタフェースデバイス等）が含まれる。一実施形態では、コンピュータシステム８００は、（例えばＷｉ−Ｆｉ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）等を介して通信するように構成された）ネットワークインタフェースデバイス８５０を介してネットワークに結合される。
【００５２】
本出願の主題の実現は、以下の例１〜２０を含むが、これらに限定されない。
１．  データベースシステムが、該データベースシステムの現在の状態を、分散ストレージに格納された前記データベースシステムのデータについての要求を処理するように構成される複数のノードの間で同期させるための方法であって、前記複数のノードのうちの１つが現在アクティブであり、前記複数のノードのうちの他のノードが現在スタンバイノードであり、当該方法は：
アクティブノードにおいて、前記分散ストレージにデータをコミットすることを含む第１トランザクションを実行する要求を受け取るステップと；
前記要求を受け取ったことに応答して、
前記アクティブノードによって、前記分散ストレージに前記データをコミットして、前記データベースシステムの前記現在の状態を更新するステップと；
前記アクティブノードによって、前記分散ストレージに格納されたトランザクションログに、コミットの指示を提供する第１メタデータを格納させるステップであって、前記トランザクションログは、前記スタンバイノードに対して、前記スタンバイノードが前記データベースシステムの現在の状態を知るための情報を識別する、ステップと；
を含む、方法。
２．  前記スタンバイノードのうちの１つのスタンバイノードにおいて、前記トランザクションログが修正されたことの通知を受け取るステップと；
前記通知を受け取ったことに応答して、前記１つのスタンバイノードによって、該スタンバイノードで維持されている第２メタデータを更新してクライアントの要求に対応するステップであって、前記の更新は、前記トランザクションログに格納されている前記第１メタデータを読み出すことを含む、ステップと；
を更に含む、例１に記載の方法。
３．  前記複数のノードの間で共有されるカタログを維持するステップであって、前記カタログは、前記分散ストレージに格納されたメタデータを識別し、前記分散ストレージに格納されている前記第１メタデータを見つけるために、前記１つのスタンバイノードによって使用可能である、ステップと；
前記第１メタデータを格納させることに応答して、前記アクティブノードが、前記第１メタデータを識別するよう前記カタログを更新することであって、該更新によって前記１つのスタンバイノードに前記通知を受け取らせる、ステップと；
を更に含む、例２に記載の方法。
４．  前記スタンバイノードのうちの１つのスタンバイノードは、前記分散ストレージのデータを格納するキャッシュを含み、当該方法は：
前記トランザクションログから、前記１つのスタンバイノードによって、前記第１トランザクションに関連付けられるキー値ペアのキーを取り出すステップと；
前記１つのスタンバイノードによって、前記キーに関連付けられる、前記キャッシュ内のエントリを識別するステップと；
前記キー値ペアの前記キーに対応する値で前記エントリを更新するステップと；
を更に含む、例１に記載の方法。
５．  前記のコミットすることは、前記データを前記分散ストレージ内の前記トランザクションログの外部に格納するステップを含む、例１に記載の方法。
６．  前記複数のノードは、前記スタンバイノードのうちの１つのスタンバイノードが新たなアクティブノードになることを可能にするように動作可能な高可用性（ＨＡ）アプリケーションを実行するように構成され、当該方法は：
前記１つのスタンバイノードが前記新たなアクティブノードになったことに応答して、
前記新たなアクティブノードによって、第２トランザクションのために、前記分散ストレージにデータをコミットするステップと；
前記新たなアクティブノードによって、前記トランザクションログに前記第２トランザクションの指示を提供するメタデータを格納させるステップと；
を更に含む、例１に記載の方法。
７．  前記分散ストレージによって、前記トランザクションログ内の複数のトランザクションについての指示を提供するメタデータのキーを、該指示を提供する第１メタデータが格納されている前記分散ストレージ内の物理的な位置に関連付けるマッピングを維持するステップを更に含む、例１に記載の方法。
８．  データベースシステムであって、
データベースを実装するよう構成される複数のノードと；
前記複数のノードに対してアクセス可能であり、前記データベースのデータを格納するように構成される分散ストレージと；
を備え、前記複数のノードのうちの第１ノードは、
第１トランザクションについて、前記分散ストレージに第１データセットを格納し、
前記分散ストレージによって維持されるトランザクションログに前記第１トランザクションの第１レコードを格納することであって、前記トランザクションログは、前記データベースに関してトランザクションが実行される順序を定義する、
ように構成され、
前記複数のノードのうちの第２ノードは、
前記分散ストレージから、前記第１レコードを含む前記トランザクションログを読み出し、
前記トランザクションログを読み出したことに基づいて、前記第２ノードによって維持されているメタデータを更新することであって、該メタデータは、前記データベースの現在の状態を示す、
ように構成される、データベースシステム。
９．  前記トランザクションログは、前記トランザクションの複数のレコードを含み、当該データベースシステムは、
前記分散ストレージ内に前記複数のレコードを識別するカタログを維持するように構成されるメタデータサーバを更に備え、前記第１ノードは、前記第１レコードが格納されたことを前記メタデータサーバに通知するように構成される、例８に記載のデータベースシステム。
１０．  前記第２ノードは、
前記メタデータサーバによって維持される前記カタログにアクセスして、前記第１ノードによって前記トランザクションログに追加されたレコードを識別し、
前記分散ストレージから前記追加されたレコードを読み出し、
前記読み出したレコードに基づいて、前記維持されているメタデータを更新する、
ように構成される、例９に記載のデータベースシステム。
１１．  前記第２ノードは、
前記第２ノードにおいてキャッシュを維持するように構成され、前記キャッシュは、前記分散ストレージにも格納されているデータを維持するエントリを含み、
前記メタデータを更新することは、前記エントリ内のデータが前記第１データセットによって置き換えられたことを前記第１レコードが示していることに応答して、前記キャッシュ内のエントリを無効にすることを含む、
例８に記載のデータベースシステム。
１２．  前記第２ノードは、
第２データセットを書き込むことを含む第２トランザクションを実行する要求を受け取り、
該要求に応答して、
前記分散ストレージに第２データセットを格納し、
前記第２トランザクションの第２レコードを、前記分散ストレージによって維持される前記トランザクションログに格納する、
ように構成される、例８に記載のデータベースシステム。
１３．  当該データベースシステムは、前記複数のノードのうちの１つのみを、所与の時点で、前記データベースシステムのアクティブノードとして動作するように選択するよう構成される、
例８に記載のデータベースシステム。
１４．  前記複数のノードは、高可用性（ＨＡ）クラスタを実装するように構成され、前記分散ストレージは、ネットワークを介して前記複数のノードに結合される複数のストレージデバイスを含む、
例８に記載のデータベースシステム。
１５．  データベースシステムの複数のデータベースノードのうちの第１データベースノードに、
前記複数のデータベースノードの間で共有される分散ストレージに格納されたデータのためのキャッシュを維持することであって、前記キャッシュは、第１キー値ペアのためのエントリを含むことと；
トランザクションログを読み出すことであって、前記トランザクションログは、前記データベースシステムのトランザクションが前記分散ストレージにコミットされる順序を識別することと；
前記読み出しに基づいて、前記第１キー値ペアの値を修正する第１トランザクションを、前記複数のデータベースノードのうちの第２データベースノードが前記分散ストレージに対してコミットしたことを決定することと；
前記決定に応答して、前記第１キー値ペアの前記修正された値に基づいて、前記キャッシュに含まれる前記エントリを更新することと；
を含む動作を実行させることができるプログラム命令を有する、非一時的なコンピュータ読み取り可能媒体。
１６．  前記動作は、
前記トランザクションログにコミットされた新たなトランザクションを識別する、前記データベースシステムのカタログをモニタリングするステップであって、前記カタログは、前記データベースシステムのデータベース・スキーマを格納することと；
前記トランザクションログを読み出す前に、前記カタログが前記分散ストレージにコミットされた新たなトランザクションを識別することを決定することと；
を更に含む、例１５に記載のコンピュータ読み取り可能媒体。
１７．  前記動作は、
クライアントデバイスから、前記分散ストレージ内の第２キー値ペアの値を修正することを含む第２トランザクションを実行する要求を受け取ることと；
前記分散ストレージにおいて、前記第２キー値ペアの前記修正された値及び前記第２トランザクションのレコードを格納するステップであって、前記レコードは、前記第２キー値ペアの前記値に対する修正を指定することと；
前記第２トランザクションの前記レコードを識別するように前記カタログを更新することと；
を更に含む、例１６に記載のコンピュータ読み取り可能媒体。
１８．  前記更新することは、前記エントリ内の値を、前記第１キー値ペアの前記修正された値に置き換えることを含む、
例１５に記載のコンピュータ読み取り可能媒体。
１９．  前記更新することは、前記キャッシュに含まれる前記エントリを無効にすることを含む、
例１５に記載のコンピュータ読み取り可能媒体。
２０．  前記動作は、
クライアントデバイスから、前記第１キー値ペアのキーに対応する値についての要求を受け取ることと；
前記値が前記更新されたエントリによって格納されているという決定に応答して、前記更新されたエントリからの前記値を前記クライアントデバイスに提供することと；
をさらに含む、例１５に記載のコンピュータ読み取り可能媒体。
【００５３】
特定の実施形態が上記で説明されているが、これらの実施形態は、単一の実施形態が特定の特徴に関連して説明されている場合でも、本開示の範囲を制限するように意図されていない。本開示において提供される特徴の例は、別段の記載がない限り、限定的ではなく例示的であるように意図されている。上記の説明は、本開示の利益を享受する当業者には明らかであるような、そのような代替、修正及び等価物を網羅するように意図されている。
【００５４】
本開示の範囲は、本明細書で開示される問題の一部又は全部を緩和するか否かにかかわらず、本明細書で開示されている任意の特徴又は特徴の組み合わせ（明示的又は暗示的のいずれか）又はその任意の一般化を含む。したがって、新たな請求項が、本出願（又はその優先権を主張する出願）の手続において、そのような特徴の任意の組合せに対して形成されてもよい。特に、添付の特許請求の範囲に関連して、従属請求項の特徴は、独立請求項の特徴と組み合わされてよく、それぞれの独立請求項の特徴は、添付の特許請求の範囲に列挙された特定の組み合わせだけでなく、任意の適切な方法で組み合わされてよい。
【図１】
2020529673.tif 000003
【図２】
2020529673.tif 000004
【図３】
2020529673.tif 000005
【図４Ａ】
2020529673.tif 000006
【図４Ｂ】
2020529673.tif 000007
【図５】
2020529673.tif 000008
【図６】
2020529673.tif 000009
【図７】
2020529673.tif 000010
【図８】
2020529673.tif 000011
【国際調査報告】
2020529673.tif 000012
2020529673.tif 000013
2020529673.tif 000014
2020529673.tif 000015
2020529673.tif 000016