(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-04-14
(45)【発行日】2023-04-24
(54)【発明の名称】分散ストアによる高可用性データベース
(51)【国際特許分類】
G06F 16/27 20190101AFI20230417BHJP
【FI】
G06F16/27
(21)【出願番号】P 2020505357
(86)(22)【出願日】2018-08-01
(86)【国際出願番号】 US2018044787
(87)【国際公開番号】W WO2019028130
(87)【国際公開日】2019-02-07
【審査請求日】2021-07-20
(32)【優先日】2017-08-01
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】506332063
【氏名又は名称】セールスフォース インコーポレイテッド
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100091214
【氏名又は名称】大貫 進介
(72)【発明者】
【氏名】ジュッジュリ,ヴェンカテスワララオ
(72)【発明者】
【氏名】ワイアット,ナサニエル
【審査官】三橋 竜太郎
(56)【参考文献】
【文献】特表2016-517124(JP,A)
【文献】特表2014-525066(JP,A)
【文献】国際公開第2004/055674(WO,A1)
【文献】特開2012-008934(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
(57)【特許請求の範囲】
【請求項1】
データベースシステムが、該データベースシステムの現在の状態を、分散ストレージに格納された前記データベースシステムのデータについての要求を処理するように構成される複数のデータベースノードの間で同期させるための方法であって、前記複数のデータベースノードのうちの1つが現在アクティブであり、前記複数のデータベースノードのうちの他のデータベースノードが現在のスタンバイデータベースノードであり、当該方法は、
アクティブデータベースノードにおいて、前記分散ストレージにデータをコミットすることを含む第1トランザクションを実行する要求を受け取るステップと、
前記要求を受け取ったことに応答して、
前記アクティブデータベースノードによって、前記分散ストレージに前記データをコミットして、前記データベースシステムの前記現在の状態を更新するステップと、
前記アクティブデータベースノードによって、トランザクションログに、コミットの指示を提供する第1メタデータを格納させることにより、前記分散ストレージに格納されたトランザクションログを修正するステップであり、前記トランザクションログは、前記スタンバイデータベースノードに対して、前記スタンバイデータベースノードが前記データベースシステムの前記現在の状態を知るための情報を識別する、ステップと、
前記第1メタデータを格納させることに応じて、前記アクティブデータベースノードによって、前記第1メタデータを識別するために、前記データベースシステムのメタデータサーバによって維持されているカタログを更新するステップであり、前記カタログは、前記第1メタデータを見つけるためにスタンバイデータベースノードによって使用可能であり、前記メタデータサーバは、前記カタログが更新されことを前記スタンバイデータベースノードに通知するように動作可能である、ステップと、
を含む、方法。
【請求項2】
前記スタンバイデータベースノードのうちの1つにおいて、前記トランザクションログが修正されたことの通知を受け取るステップと、
前記通知を受け取ったことに応答して、前記1つのスタンバイデータベースノードによって、該スタンバイデータベースノードで維持されている第2メタデータを更新してクライアントの要求に対応するステップであって、前記の更新は、前記トランザクションログに格納されている前記第1メタデータを読み出すことを含む、ステップと、
を更に含む、請求項1に記載の方法。
【請求項3】
前記1つのスタンバイデータベースノードによって、前記分散ストレージにも格納されているデータを維持しているエントリを含むキャッシュを維持するステップを更に含み、
前記第2メタデータを更新することは、前記第1メタデータが、前記エントリ内のデータが前記コミットされたデータで置き換えられたことを示すことに応答して、前記1つのスタンバイデータベースノードが前記キャッシュ内のエントリを無効にすることを含む、
請求項2に記載の方法。
【請求項4】
前記スタンバイデータベースノードのうちの1つは、前記分散ストレージのデータを格納するキャッシュを含み、当該方法は、
前記トランザクションログから、前記1つのスタンバイデータベースノードによって、前記第1トランザクションに関連付けられるキー値ペアのキーを取り出すステップと、
前記1つのスタンバイデータベースノードによって、前記キーに関連付けられる、前記キャッシュ内のエントリを識別するステップと、
前記キー値ペアの前記キーに対応する値で前記エントリを更新するステップと、
を更に含む、請求項1に記載の方法。
【請求項5】
前記のコミットすることは、前記データを前記分散ストレージ内の前記トランザクションログの外部
に格納されるデータレコードに格納するステップを含む、
請求項1乃至4のいずれか一項に記載の方法。
【請求項6】
前記複数のデータベースノードは、前記スタンバイデータベースノードのうちの1つが新たなアクティブデータベースノードになることを可能にするように動作可能な高可用性(HA)アプリケーションを実行するように構成され、当該方法は:
前記1つのスタンバイデータベースノードが前記新たなアクティブデータベースノードになったことに応答して、
前記新たなアクティブデータベースノードによって、第2トランザクションのために、前記分散ストレージにデータをコミットするステップと;
前記新たなアクティブデータベースノードによって、前記トランザクションログに前記第2トランザクションの指示を提供するメタデータを格納させるステップと;
を更に含む、請求項1に記載の方法。
【請求項7】
前記分散ストレージによって、前記トランザクションログ内の複数のトランザクションについての指示を提供するメタデータのキーを、該指示を提供する第1メタデータが格納されている前記分散ストレージ内の物理的な位置に関連付けるマッピングを維持するステップ、
を更に含む、請求項1乃至6のいずれか一項に記載の方法。
【請求項8】
データベースシステムであって、
データベースを実装するよう構成される複数のデータベースノードと、
前記複数のデータベースノードに対してアクセス可能であり、前記データベースのデータを格納するように構成される分散ストレージと、
前記複数のデータベースノードのスタンバイノードによってアクセス可能であり、かつ、前記分散ストレージに書き込まれたメタデータを識別するために使用可能であるカタログを維持するように構成されるメタデータサーバと、
を備え、前記複数のデータベースノードのうちの第1データベースノードは、現在アクティブなノードであり、
前記分散ストレージにデータをコミットすることを含む第1トランザクションを実行する要求を受け取り、
前記第1トランザクションについて、前記分散ストレージに第1データセットを格納し、
前記分散ストレージによって維持されるトランザクションログに前記第1トランザクションの第1レコードを格納し、前記トランザクションログは、前記データベースに関してトランザクションが実行される順序を定義し、かつ、
前記第1トランザクションを識別するための前記カタログを更新させる、
ように構成されており、
前記メタデータサーバは、前記カタログが更新されことを前記スタンバイノードに通知するように動作可能である、
データベースシステム。
【請求項9】
前記複数のデータベースノードのうちの第2データベースノードは、
前記分散ストレージから、前記第1レコードを含む前記トランザクションログを読み出し、
前記トランザクションログを読み出したことに基づいて、前記第2データベースノードによって維持されているメタデータを更新することであって、該メタデータは、前記データベースの現在の状態を示す、
ように構成される、請求項8に記載のデータベースシステム。
【請求項10】
前記第2データベースノードは、
前記メタデータサーバによって維持される前記カタログにアクセスして、前記第1データベースノードによって前記トランザクションログに追加されたレコードを識別し、
前記分散ストレージから前記追加されたレコードを読み出し、
前記読み出したレコードに基づいて、前記維持されているメタデータを更新する、
ように構成される、請求
項9に記載のデータベースシステム。
【請求項11】
前記第2データベースノードは、
第2データセットを書き込むことを含む第2トランザクションを実行する要求を受け取り、
該要求に応答して、
前記分散ストレージに第2データセットを格納し、
前記第2トランザクションの第2レコードを、前記分散ストレージによって維持される前記トランザクションログに格納する、
ように構成される、請求
項9に記載のデータベースシステム。
【請求項12】
当該データベースシステムは、前記複数のデータベースノードのうちの1つのみを、所与の時点で、前記データベースシステムのアクティブデータベースノードとして動作するように選択するよう構成される、
請求項8乃至11のいずれか一項に記載のデータベースシステム。
【請求項13】
前記複数のデータベースノードは、高可用性(HA)クラスタを実装するように構成され、前記分散ストレージは、ネットワークを介して前記複数のデータベースノードに結合される複数のストレージデバイスを含む、
請求項8乃至12のいずれか一項に記載のデータベースシステム。
【請求項14】
請求項1乃至7のいずれか一項に記載の方法を実施するために1つ以上のプロセッサによって実行可能なプログラム命令を有する、非一時的なコンピュータ読取可能媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般に、高可用性システムに関し、より具体的には、クラスタデータベースシステムに関する。
【背景技術】
【0002】
組織がユーザの情報を格納することを望むとき、その組織は、典型的に、効率的にアクセスされ得る組織化された方法で、この情報を格納するデータベースシステムを実装する。大規模企業システムのデータベースシステムは、コンピュータクラスタを実装するために複数のサーバに依拠することがある。コンピュータクラスタでは、個々のサーバが、データベースアプリケーションのインスタンスを実行するクラスタノードとして機能する。これらのノードは、データに対して操作するためにユーザからの要求に個別に対応(service)することがある。これらのノードは並列に動作することができるので、ノード間のデータコヒーレンスを維持するために情報を交換することができる。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、データベースを実装するデータベースシステムの例示的な要素を示すブロック図である。
【0004】
【
図2】いくつかの実施形態による、論理ドメイン及び物理ドメインにおけるトランザクションログの例示的な要素を示すブロック図である。
【0005】
【
図3】いくつかの実施形態による、一組のキーを維持するコンピュータシステムの例示的な要素を示すブロック図である。
【0006】
【
図4A】いくつかの実施形態による、分散ストレージへのデータ書き込み要求に対応するアクティブノードの例示的な要素を示すブロック図である。
【0007】
【
図4B】いくつかの実施形態による、データに対する要求に対応するスタンバイノードの例示的な要素を示すブロック図である。
【0008】
【
図5】いくつかの実施形態による、ノードにまたがるデータコヒーレンスの維持に関する例示的な方法を示すフロー図である。
【
図6】いくつかの実施形態による、ノードにまたがるデータコヒーレンスの維持に関する例示的な方法を示すフロー図である。
【
図7】いくつかの実施形態による、ノードにまたがるデータコヒーレンスの維持に関する例示的な方法を示すフロー図である。
【0009】
【
図8】いくつかの実施形態による、例示的なコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【0010】
本開示は、「一実施形態」又は「実施形態」への言及を含む。「一実施形態において」又は「実施形態において」というフレーズの出現は、必ずしも同じ実施形態を指しているわけではない。特定の特徴、構造又は特性は、本開示と矛盾しない任意の適切な方法で組み合わされてよい。
【0011】
本開示においては、異なるエンティティ(「ユニット」、「回路」、他の構成要素等と様々に呼ばれることがある)は、1つ以上のタスク又はオペレーションを実行するように「構成された」として説明又は特許請求されることがある。この定式化、すなわち-[1つ以上のタスクを実行する]ように構成された[エンティティ]-という定式化は、本明細書において、構造(すなわち、電子回路のような何らかの物理的なもの)を指すように使用される。より具体的には、この定式化は、この構造が、オペレーション中に1つ以上のタスクを実行するように配置されていることを示すために使用される。構造は、該構造が現在操作されていない場合であっても、何らかのタスクを実行するように「構成された」ということができる。「データベース管理アプリケーションのインスタンスを実行するように構成されたノード」は、例えば問題となっている集積回路が現在使用されていない(例えば電源がそれに接続されていない)場合であっても、オペレーション中にこの機能を実行する回路を有するコンピュータシステムを網羅するように意図されている。したがって、何らかのタスクを実行する「ように構成された」として説明又は記載されるエンティティは、そのタスクを実装するために実行可能なプログラム命令を格納するデバイス、回路、メモリ等のような何か物理的なものを指す。このフレーズは、本明細書では、何か無形のものを指すためには使用されない。したがって、ここでは、「ように構成された」という構造は、アプリケーションプログラミングインタフェースのようなソフトウェアエンティティを指すためには使用されない。
【0012】
「ように構成された(configured to)」という用語は、「ように構成可能(configurable to)」を意味するようには意図されない。例えばプログラムされていないFPGAは、特定の機能を実行する「ように構成された」とは見なされないが、その機能を実行する「ように構成可能」である可能性があり、プログラミング後にその機能を実行する「ように構成される」可能性がある。
【0013】
本明細書中で使用されるとき、「第1」、「第2」という用語は、それらが先行する名詞のラベルとして使用され、具体的に記載されない限り、いかなる種類の順序付け(例えば空間的、時間的、論理的等)も暗示しない。例えば8つのノードを有するデータベースシステムでは、「第1」及び「第2」ノードという用語は、8つのノードのうちの任意の2つを参照するために使用されることがある。
【0014】
本明細書中で使用されるとき、「に基づいて」という用語は、決定に影響する1つ以上のファクタを説明するのに使用される。この用語は、追加的なファクタが決定に影響し得る可能性を排除するものではない。すなわち、決定は、指定されたファクタのみに基づくことがあり、あるいは指定されたファクタだけでなく、他の指定されていないファクタにも基づくことがある。「Bに基づいてAを決定する」というフレーズを考える。このフレーズは、Bが、Aを決定するために使用されるファクタであること又はAの決定に影響を及ぼすことを指定する。このフレーズは、Aの決定が、Cのような何らかの他のファクタにも基づいてもよいことを排除しない。このフレーズは、Aが、Bのみに基づいて決定される実施形態も包含するよう意図される。したがって、本明細書で使用されるとき、「に基づいて」というフレーズは、「に少なくとも部分的に基づいて」というフレーズと同義である。
【0015】
詳細な説明
データベースノードにまたがってデータコヒーレンシーを維持するために、1つのアプローチは、ノードがデータベースにトランザクションをコミットするときに、他のノードに直接通知させることである。このようなアプローチでは、コミットされたトランザクションの通知は、同期的又は非同期的に伝達され得る。同期アプローチでは、所与のノードは、他のノードに各トランザクションが実行されていることを通知し、トランザクションがコミットされる前に、それらのノードの各々から受け取りの確認を待つ。しかしながら、このアプローチは、所与のノードが、確認を待つのにあまりに多くの時間を費やすため、高性能アプリケーションでは実用的ではない。また、いずれかのノードが確認の送信に失敗した場合(例えばクラッシュしたために)、所与のノードはもはやいかなるトランザクションもコミットすることができない。非同期アプローチでは、所与のノードは周期的なバッチで他のノードに通知するが、他のノードからの受け取り確認は待たない。しかしながら、このアプローチは、所与のノードが、他のノードに最後の通知以降に行われたコミットされたトランザクションの新たなセットに関して他のノードに通知する前にクラッシュした場合、崩壊する。
【0016】
本開示は、従来のアプローチの欠点の一部を克服する方法で、ノードにまたがってメタデータのコヒーレンスを維持するための技術を説明する。以下で説明される様々な実施形態では、分散ストレージに書き込みを行うノードは、データベースシステムの現在の状態を他のノードに知らせるために、共有ストレージを介して間接的に他のノードにトランザクションメタデータを送信する。このような実施形態では、共有ストレージは、データベースシステムのノードによってコミットされたトランザクションを示し、かつトランザクションが実行される順序を示す、トランザクションログを格納する。したがって、トランザクションのための共有ストレージにデータを書き込むノードは、そのデータが書き込まれたことを示すレコードを付加することによって、トランザクションログを更新することができる。トランザクションログに格納されたレコードは、他のノードによってレビューされ、データベースシステムの現在の状態を反映するようにローカルバッファキャッシュを更新することができる。新たに格納されたレコードの追跡を可能にするために、一部の実施形態では、メタデータサーバは、共有ストレージに書き込まれた新たなトランザクションレコードを識別するために使用可能なカタログを維持することができる。したがって、ノードが新しいトランザクションについてのレコードをログに書き込むとき、そのノードは、新しいトランザクション及び分散ストレージ内の対応するレコードをメタデータサーバに通知することができる。その後、メタデータサーバはカタログにレコードの指示(indication)を格納することができる。他のノードが後でカタログをレビューするとき、格納された指示からレコードを学習し、トランザクションログからレコードを読み出して、どのデータが変更されたかを判断することができる。このようにしてトランザクションログ情報を同期させることは、上記の同期アプローチよりも有利であり得る。なぜなら、書き込みノードは、トランザクションログ情報の受け取りを確認するよう他のノードを待つ必要がないからである。このような方法でトランザクションログ情報を同期させることは、トランザクションが実行されているときにトランザクションレコードが記録され、したがって、他のノードにトランザクションを通知することなくノードがトランザクションを実行する可能性が少ないので、上記の非同期アプローチよりも有利である。
【0017】
次に、
図1に移ると、データベースシステム10のブロック図が図示されている。図示される実施形態では、データベースシステム10は、ネットワーク150を介して結合される、分散ストレージ110、メタデータサーバ120、アクティブノード130及びスタンバイノード140を含む。図示されるように、ストレージ110は、一緒にトランザクションログ112を形成するログレコード115を含み、メタデータサーバ120は、カタログ125を含む。図示されていないが、複数のクライアントデバイスが、データベーストランザクションを実行する要求を送信することによって、ノード130及び140と対話することができる。いくつかの実施形態では、データベースシステム10は、図示されているものとは異なるように実装されてもよい。例えば図示の実施形態では単一のアクティブノード130が示されているが、いくつかの実施形態では、データベースシステム10は複数のアクティブノード130を含む。いくつかの実施形態では、メタデータサーバ120は、カタログ125を格納する複数のサーバとして実装されてもよい。
【0018】
データベースシステム10は、様々な実施形態において、データベースクラスタとして動作し、分散ストレージ110に対するデータの読み出し及び/又は書き込みを含むトランザクション要求131及び141を処理するように構成される、ノード130及び140を介して実装される。したがって、ノードは、ユーザのパスワードを新しい値に更新するトランザクション要求131を受け取ることがあり、したがって、その値を分散ストレージ110に書き込んでよい。様々な実施形態では、データベースシステム10は、アクティブノード130として示される1つ以上のノードが、他のノードの代わりに分散ストレージ110にデータを書き込むために選択される、アクティブ/スタンバイ・トポロジーを使用して高可用性(HA:high availability)サービスを実装する。HAサービスを実装すると、データベースシステム10は、各ノード130又は140のヘルス状態(health)をモニタして、何らかの問題又は誤動作が発生しているかどうかを判断することができる。問題が検出されると、データベースシステム10は、アクティブノード130のヘルス状態の低下に基づいて、データを書き込むために、新たなアクティブノード130を選ぶよう選出を行うことができる。例として、現在のアクティブノード130を冷却するファンが動作を停止することがあり、これはノードを過熱させ、直ちにシャットダウン(又はクラッシュ)させることがある。このような例では、データベースシステム10は、現在のアクティブノード130が応答不能になったことを検出し、次いで、選出を通して、別のノードにアクティブノード130になるよう促すことができる。いくつかの実施形態では、システム10は、任意の所与の時点でアクティブノード130として動作するために1つのノードのみを選択する。
【0019】
分散ストレージ110は、いくつかの実施形態において、システム10のユーザのためにデータを格納するように構成され、かつトランザクションがシステム10においてコミットされる順序を指定する、システム10のトランザクションログ112を維持するように構成される、共有ストレージである。トランザクションログ112は、各々がそれぞれのトランザクションについてのメタデータを指定する複数のログレコード115を含んでよく、トランザクションがコミットされる順序で配置されてよい。いくつかの実施形態では、一組のレコード115は、ストレージ110上のファイル(以下では、ログ範囲(log extents)と呼ぶ)内に格納することができる。分散ストレージ110は、ネットワーク上で互いに接続され、かつデータ損失を防止するためにデータを冗長的に格納するように構成される、複数のストレージデバイスによって実装されてよい。様々な実施形態では、分散ストレージ110は、ノード130及び140にアクセス可能であり、これらのノードからの読み出し及び書き込み要求を処理するように構成される。トランザクションログ112の格納は、
図2に関連して以下で更に詳細に説明される。
【0020】
メタデータサーバ120は、様々な実施形態において、データベースシステム10を実装するためにノード130及び140によって使用される様々なメタデータを維持するように構成される。例えば図示されるように、サーバ120は共有データベースカタログ125を維持することができ、共有データベースカタログ125は、種々のデータベース構造及びオブジェクトを定義するスキーマ、データベース内のデータをルックアップするためのインデックス、データベース情報にアクセスすることを許可されたユーザ等を指定することができる。様々な実施形態では、カタログ125は、アクティブノード130による新しいレコード115の割当てに関する情報を格納する。この情報は、その後、どのレコード115がアクティブノード130によって割り当てられて書き込まれたかを決定するために、ノード140によってカタログ125から読み出されてよい。これらの新しいレコード115を知ると、ノード140はレコード115を読み出し、これにより、データベースシステム10の現在の状態を決定し、ローカルに維持されたメタデータを略更新する、例えば分散ストレージ110からキャッシュされたデータを有するローカルバッファキャッシュを更新することができる。様々な実施形態では、メタデータサーバ120は、ノード130によってストレージ110において最近格納されたレコード115に関する通知133をアクティブノード130から受け取る。いくつかの実施形態では、アクティブノード130は、レコード115がストレージ110に置かれる新しい範囲(new extent)を割り当てることに応答して通知133を送信する。サーバ120は、
図3に関連して以下で更に詳細に説明される。
【0021】
アクティブノード130は、様々な実施形態において、分散ストレージ110に対するデータの読み出し及び書き込みの要求を処理するように構成される。したがって、アクティブノード130は、クライアントデバイスから、ノード130に、一組のデータをストレージ110に書き込ませる書き込みトランザクション要求131を受け取ることができる。このようなトランザクションの実行に応答して、ノード130は、ストレージ110内のトランザクションログ112に、トランザクションのための対応するログレコード115を格納する(ログレコード書き込み(write log record)132として示される)ことができる。上記のパスワードの例を続けると、要求131は、以前のパスワードを置き換える新しいパスワードを指定してよい。その結果、いくつかの実施形態では、アクティブノード130は、ユーザのパスワードフィールドについてのキー、以前のパスワード、新しいパスワード、タイムスタンプ等のようなトランザクションに関するメタデータを指定するトランザクションレコード115を書き込むことができる。上述のように、アクティブノード130は、この新たに作成されたレコード115に関連付けられるメタデータサーバ120に、通知133を送信してもよい。アクティブノード130は、
図4Aに関連して以下で更に詳細に説明される。
【0022】
スタンバイノード140は、様々な実施形態において、分散ストレージ110に格納されたデータを提供するために要求を処理するように構成される(あるいは、是認される場合に、要求に対応する役割を引き継ぐように構成されるバックアップノードとして機能する)。様々な実施形態では、スタンバイノード140は各々、データを格納するローカルキャッシュを維持し、このデータは、分散ストレージ110によっても格納されてよく、データベースシステム10の現在の状態を反映してもよい。このような実施形態では、スタンバイノード140は、クライアントデバイスから、ストレージ110に格納されたデータについてのトランザクション要求141を読み出す。これらの要求に応答して、スタンバイノード140は、データがキャッシュ内にすでに存在する場合には、要求されたデータを(ストレージ110とは対照的に)これらのローカルキャッシュから取り出すことができる。これらのローカルキャッシュがストレージ110内のデータと同時に存在することを確実にするために、様々な実施形態において、スタンバイノード140は、カタログ125を参照して、どの新しいレコード115がトランザクションログ112に追加されたかを識別することができる。次いで、これらのレコード115をストレージ110から読み出して、ストレージ110内のデータに対する修正であって、それらのローカルキャッシュ内のデータに影響を与える可能性がある修正を決定することができる。ローカルキャッシュ内のデータが影響を受ける場合(例えばキー値ペアの値が更新又は削除された場合)、スタンバイノード140は、ストレージ110内のデータの変更を反映するように(例えばキャッシュエントリを更新又は無効化することによって)キャッシュを更新することができる。これは、スタンバイノードが、データベースシステム10の現在の状態を反映するキャッシュを維持することを可能にする。上記のように、スタンバイノード140のうちの1つが、アクティブノード130になるように選択されてよく、この時点で、そのノードは、書き込みトランザクション要求131に対応することができる。最新のバッファキャッシュを維持することにより、新たに選択されたノード140は、アクティブノード130の役割をより迅速に引き受けることができる。スタンバイノード140は、
図4Bに関連して以下で更に詳細に説明される。
【0023】
図2を参照すると、分散ストレージ110内のトランザクションログ112の一実施形態のブロック図が示されている。上述したように、様々な実施形態では、分散ストレージ110は、トランザクションログ112を構成する複数のログレコード115を含む、システム10のためのデータを格納するように構成された複数のストレージデバイスを含む。図示された実施形態では、物理ドメイン204に対する論理ドメイン202のマッピングが示されている。(いくつかの実施形態では、分散ストレージ110は、図示されるものと異なって実装されてもよく、例えばマップ210は、メタデータサーバ120に配置されてもよい)。
【0024】
上述のように、トランザクションログ112は、データベースシステム10の現在の状態を維持することができ、トランザクションがアクティブノード130によって分散ストレージ110にコミットされる順序を指定することができる。図示される実施形態では、論理ドメイン202は、ログレコード115が経時的にログ112に追加されるときのログ112の構成を表す(これは、ノード130及び140のようなストレージ110の外部の構成要素によって認識される構成であり得る)。レコード115の格納を容易にするために、分散ストレージ110は、様々な実施形態において、最新の特定のレコード115が格納される場所と、アクティブノード130によるコミットされたトランザクションのために新しいレコード115をログ112に追加する場所を指定する、付加ポイント(append point)212(「ヘッド(head)」とも呼ばれる)を維持する。例えばストレージ110は、ユーザのパスワードをABCからDEFに更新する初期トランザクションのためのメタデータを指定する特定のログレコード115Cを含むことがある。ある時点で、アクティブノード130は、パスワードをDEFからGHIに更新するためのトランザクション要求131を受け取り、付加ポイント212において、追加のレコード115Aをログ112に追加することができる。追加のトランザクションがストレージ110に格納されると、付加ポイント212はトランザクションログ112内の後続のレコード115に進む。いくつかの実施態様において、ストレージ110は、ストレージ110内で使用中の最も古いレコード115を識別するテール(tail)214マーカーを維持する。最も古いレコード115が最終的に消去されると、テール214は、使用中の次に最も古いレコード115に進んでよい。
【0025】
特に、上述の例では、ログ112は、両方のトランザクションについてのレコード115を含む。このようにしてレコード115を格納することは、データベースシステム10が、ログを「再生」することによって、例えばヘッド212で開始してテール214に向かって移動することによって、システム10の特定の以前の状態に戻ることを可能にすることができる。また、このようにして格納することは、システム10が特定の時点からどのように変化したかを(したがって、システム10の現在の状態を)、付加ポイント212で開始して、その特定の時点に対応する最後の読み出しレコード115までログ112を再生すること(あるいは最後の読み出しレコード115で開始し、ヘッド212に向かって前に進むこと)によって、スタンバイノード140が知ることも可能にすることができる。上記の例を続けると、スタンバイノード140は、そのローカルキャッシュに、ユーザのパスワードについてのキー値ペアのコピーを格納することができ、この値は、読み出しレコード115Cに応答するDEFである。スタンバイノード140がその後、カタログ125からレコード115Aを知り、レコード115Aからメタデータを読み出すと、スタンバイノード140は、ユーザのパスワードの値が現在GHIであるように、ローカルキャッシュ内のキー値ペアを更新することができ、したがって、ローカルキャッシュは、データベースシステム10の現在の状態に一致するものとなった。
【0026】
図示される実施形態では、物理ドメイン204は、ストレージ110の複数のストレージデバイス上のログ112の編成を表し、論理ドメイン202の編成とは別であってよい。例えば図示されるように、ログ112のレコード115A~Cは、それらが時間的に連続的に発生するので、論理ドメイン内では隣接し得るが、物理ドメイン204内ではストレージ110の異なる要素に格納されてよい。(上記のように、いくつかの実施形態では、レコード115のグループが同じログ範囲に配置されてもよく、したがって、レコード115A及び115Bは同じ範囲内に併置されてもよいが、レコード115Cはストレージ110の他の場所に位置する別の範囲に含まれてもよい)、ストレージ110はまた、物理ドメイン204においてレコード115を見つけるために使用可能なマップ210も含んでよい。
【0027】
マップ210は、様々な実施形態において、対応するキーを供給することによって、ストレージ110に格納された特定のレコード115を見つけるために使用され得るキー値ペアのマッピングを維持する。いくつかの実施形態では、レコード115を格納するとき(あるいは別の実施形態では、レコード115を格納するためにログ範囲を割り当てるとき)、ストレージ110(又はアクティブノード130)は、キーと物理的な場所でマップ210を更新するが、キーと物理的な場所は両方とも新たに割り当てられたレコード115に関連付けられる。あるスタンバイノード140が、カタログ125から新しく作成されたレコード115に関連するキーを知ると、スタンバイノード140は、レコード115に関連付けられるキーをストレージ110に提供することができ、ストレージ110は、マップ210を使用して、レコードがストレージ110内に置かれている物理アドレスを決定する。
【0028】
様々な実施形態において、ログレコード115は、操作される実際のデータのコピーと同様に、トランザクションメタデータを含むが、データベースシステム10は、別個のデータレコードにデータの別のコピーを格納してもよい。いくつかの実施形態では、これらのデータレコードは、ログレコード115と併置されてもよい。他の実施形態では、データレコードは、読み出しトランザクション要求141及び/又は書き込みトランザクション要求131に関連付けられるデータベースクエリに応答するデータの取り出しをより容易にするように、別個に配置されて編成されてもよい。
【0029】
次に
図3を参照すると、メタデータサーバ120の一実施形態のブロック図が示されている。上述のように、様々な実施形態において、メタデータサーバ120は、データベースクラスタ及びログレコード115に関するメタデータを維持し、カタログ125を維持するように構成される。したがって、図示の実施形態では、サーバ120は、メタデータ320と、レコードキー310を有するカタログ125を含む。上述のように、メタデータサーバ120は、互いに協働して動作する複数のサーバによって実装されてもよい。様々な実施形態において、サーバ120は、図示されたものとは異なるように実装されてもよく、例えば
図2に関連して上述したように、例えばマップ210を含んでもよい。
【0030】
カタログ125は、様々な実施形態において、上述した種々の情報のいずれかを含んでもよく、また、アクティブノード130によって割り当てられて書き込まれたレコード115を決定するために使用可能であってよい。したがって、カタログ125は、特定のレコード115を見つけるために使用可能なキー310を格納することができる。例えば関連するレコード115の物理アドレスを受け取るために、キー310をマップ210に供給してもよい。いくつかの実施形態では、キー310は、1つ以上のログレコード315を含むコンテナ(例えばログ範囲)を見つけるために使用可能であってよい。様々な実施形態では、サーバ120は、新たに割り当てられたレコード115に関する通知133をアクティブノード130から受け取ったことに応答して、カタログ125を新たなキー310で更新する。続いて、サーバ120は、カタログ125が更新されたことをスタンバイノード140に通知することができる。新たに割り当てられたレコード115を読み出すことを望むスタンバイノード140は、まず、キー310についてカタログ読み出し要求(read catalog request)312をメタデータサーバ120に発行することによって、カタログ125を調べる(consult)ことができる。要求312に応答して、サーバ120は、要求側のノードに1つ以上のキー310を提供することができる。場合によっては、要求312は、基準に基づくキー310の要求であってもよい。例えばスタンバイノード140は、しきい値を満たすタイムスタンプを有するレコード115の要求312を発行することによって、最新のトランザクションメタデータでそのキャッシュを更新しようと試みることができる。
【0031】
図2に関連して上記したように、様々な実施形態において、メタデータサーバ120は、新たなレコード115の割り当てに応答して、ノード130から追加の情報を受け取ってよい。この情報は、付加ポイント212及びテール214マーカーを含んでよい。メタデータサーバ120は、この情報をメタデータ330に格納し、要求(図示せず)に応じて、ノード130及び140にそのような情報を提供してよい。一例として、アクティブになった後、アクティブノード130は、ログ112のヘッドを知る必要があり、したがって、サーバ120からのポイント212を要求することがある。様々な実施形態では、メタデータ330は、カタログ125の各エントリについてのタイムスタンプ(例えば作成、修正等)、各エントリについてのトランザクションID、データベース・スキーマ等を含む。サーバ120は、このメタデータを使用して、ノード130及び/又は140からの要求312を処理することができる。一例として、特定のスタンバイノード140は、特定のレコード115のキー310を要求してよく、したがって、メタデータサーバは、トランザクションIDを使用して、レコード115及びその後のキー310を決定してよい。
【0032】
次に
図4Aを参照すると、アクティブノード130の一実施形態のブロック図が示されている。上述したように、様々な実施形態では、アクティブノード130は、ストレージ110に対してデータを読み書きするためにトランザクション要求131及び141に対応するように構成される。図示される実施形態では、アクティブノード130は、データベースアプリケーション410、キャッシュ420及びメタデータ430を含む。いくつかの実施形態では、アクティブノード130は、図示されているものとは異なるように実装される。
【0033】
データベースアプリケーション410は、様々な実施形態において、高可用性(HA)データベースを実装するように構成される、ソフトウェアルーチン、ハードウェア又はそれらの組合せである。上述のように、ノード130及び140は、データベースクラスタ内で動作するように構成されてよく、したがって、アプリケーション410は、該アプリケーション410がデータベースレベルとローカルレベルの両方で動作するように、ノード130及び140にまたがって分散されてよい。様々な実施形態では、例えばノード130及び140は共同して、どのノードが次のアクティブノード130になるかを決定するための選出を行ってよい。アプリケーション410が、ノードのすべて及びそれらのヘルス状態のビューを有するデータベースレベルを動作させ得るので、そのような選出が起こり得る。ローカルでは、アクティブノード130は、アプリケーション410を実行して、クライアントデバイスからのトランザクション要求131及び141に対応してよい。このようなトランザクションを処理するために、一実施形態において、アプリケーション410は、データ及びメタデータを、それぞれキャッシュ420及びメタデータ430に格納することによって、データベースの現在の状態を維持する。メタデータ430は、付加ポイント212、テール214、現在格納されているデータに関連付けられるデータベース・スキーマ、付加ポイント212によって示される現在のログレコード115の残りの記憶容量、タイムスタンプ、処理されたトランザクション、処理されるべきトランザクション等を含んでよい。
【0034】
キャッシュ420は、様々な実施形態において、読み出し要求に対応するために、かつ/又はデータがストレージ110に格納され得るまでトランザクションをコミットするためのデータをバッファするために、キャッシュラインにデータを格納するように構成される。いくつかの実施形態では、キャッシュ420は、キーと関連付けて値を格納するようにキャッシュ420が構成される、セットアソシエイティブ・キャッシュ方式を実装する。例えばキャッシュ420は、データをキー値ペアとして格納してもよく、この場合、キーはレコードのアドレス位置であってよく、値はレコードに格納された値であってよい。値の格納又は取り出し要求が受け取られると、キャッシュ420は、キーを使用して、値を格納するか又はそこから取り出すための特定のキャッシュライン/エントリを選択してよい。様々な実施形態では、アクティブノード130は、データを分散ストレージ110内のレコード115に書き込む前に、キャッシュ420でデータに対して動作する。
【0035】
ノード130が書き込みトランザクション要求131を受け取ると、いくつかの実施形態では、アクティブノード130は、分散ストレージ110に新しいレコード115を割り当てるかどうかを決定する-例えば現在のログレコード115の残りの記憶容量に基づいて決定する。新しいレコード115を割り当てる必要があるとき、アクティブノード130は分散ストレージ110で新しいレコード115を割り当てることができる。レコード115が書き込みに利用可能になると、様々な実施形態では、アクティブノード130は、トランザクションをレコード115にコミットする/書き込む。場合によっては、トランザクションは、新しいデータ、以前のデータ及び識別されたレコードを含んでよく、他の場合には、この情報は、異なるファイルに含まれ得るが、トランザクションによって参照されてよい-例えば
図2に関連して議論されるようなデータレコード及びログレコード115。新しいレコード115を割り当てた後、様々な実施形態では、アクティブノード130は、そのレコードをメタデータサーバ120に通知する。このような通知133は、新しいレコード115を見つけてアクセスするために使用可能なレコードキー310を含んでもよい。いくつかの実施形態では、アクティブノード130は、単一のレコード115の代わりに、レコード115のセットを割り当てる。例えばノード130は、10個のレコードを割り当てる。
【0036】
次に
図4Bを参照すると、スタンバイノード140の一実施形態のブロック図が示されている。上述したように、様々な実施形態では、スタンバイノード140は、分散ストレージ110に格納されたデータを提供することによって、トランザクション要求141に対応するように構成されてもよい。図示される実施形態では、スタンバイノード140は、データベースアプリケーション410、キャッシュ420及びメタデータ430を含み、これらは、
図4Aに関して説明したものと同様の機能を実装することができる。様々な実施形態では、ノード140は、図示されているものとは異なるように実装されてもよい。
【0037】
上述したように、スタンバイノード140は、様々な実施形態において、ストレージ110及びサーバ120からのデータをそれぞれキャッシュ420及びメタデータ430に格納することによって、データベースシステム10の現在の状態を維持する。そうすることにより、スタンバイノード140がアクティブノード130になり、要求141に対応することが可能になる。システム10の現在の状態を維持するために、様々な実施形態では、スタンバイノード140は、アクティブノード130によって割り当てられたすべての新しいレコード115のカタログ125をモニタする。例えばスタンバイノード140は、カタログ125によって示されるレコード115を、メタデータ430に含まれる処理されたレコード115(場合によってはログ範囲)のリストと比較することができる。他の場合には、スタンバイノード140は、カタログ125に追加されたいずれかの新しいレコード115を通知されることがある。新しいレコード115が存在すると決定した後、スタンバイノード140は、新しいレコード115(又はログ範囲)に対応するキー310についてのカタログ読み出し要求312をサーバ120に送信することができる。受け取ったキー310を使用して、スタンバイノード140は、キャッシュ420内にローカルに格納された値がノード130によって変更されたかどうかを決定するために、ログ112内の新しいレコード115を読み出すことができる。そのような決定は、キャッシュ420内の対応する値を索引付けるために使用されるキーに対応する新しいレコード115内のキーに基づいてもよい。スタンバイノード140は、古い値を格納するキャッシュ420のエントリを更新してもよい。いくつかの実施形態では、ノードは、修正された値で古い値を置き換えることによってエントリを更新してよく、他の実施形態では、ノード140はエントリを無効にして、ノード140に、例えば後続の要求141において、修正された値をストレージ110から取り出させることによってエントリを更新する。
【0038】
次に、
図5に移ると、方法500のフロー図が図示されている。方法500は、データベースシステム(例えばシステム10)によって、該データベースシステムのノード(例えばノード130及び140)間のデータコヒーレンシーを維持するために実行される方法の一実施形態である。様々な実施形態において、方法500は、追加のステップ、例えば所与の時間にシステムのアクティブノード(例えばノード130)として動作する複数のノードのうちの1つのみを選択するステップ、高可用性(HA)クラスタを実装するステップ等を含む。
【0039】
方法500は、ステップ510において開始し、第1ノード(例えばノード130)が、トランザクションのために、データのセットを分散ストレージ(例えばストレージ110)内に格納する。ステップ520において、第1ノードは、トランザクションのレコード(例えばレコード115)を、分散ストレージによって維持されるトランザクションログ(例えばログ112)内に格納する。様々な実施形態において、トランザクションログは、データベースに関してトランザクションが実行される順序を定義する。様々な実施形態において、データベースシステムのメタデータサーバ(例えばサーバ120)は、分散ストレージ内のレコードを識別するカタログ(例えばカタログ125)を維持する。第1ノードは、トランザクションのレコードが格納されたことをメタデータサーバに通知してよい。
【0040】
ステップ530において、第2ノード(例えばノード140)は、分散ストレージから、レコードを含むトランザクションログを読み出す。ステップ540において、第2ノードは、トランザクションログの読み出しに基づいて、第2ノードによって維持されるメタデータ(例えばキャッシュ420及びメタデータ430)を更新する。メタデータは、データベースの現在の状態を示してよい。様々な実施形態では、第2ノードは、カタログにアクセスして、第1ノードによってトランザクションログに追加されたレコードを識別する。したがって、第2ノードは、追加されたレコードを分散ストレージから読み出し、読み出したレコードに基づいてそのメタデータを更新することができる。様々な実施形態では、第2ノードは、データのセットを書き込むことを含む別のトランザクションを実行する要求を受け取る。したがって、第2ノードは、トランザクションログ内のトランザクションのレコードとともに、分散ストレージにデータのセットを格納する。いくつかの実施形態では、第2ノードは、分散ストレージにも格納されるデータを維持するエントリを含むキャッシュ(例えば420)を維持する。場合によっては、第2ノードは、エントリ内のデータがデータのセットによって置き換えられたことをレコードが示すことに応答して、キャッシュ内のエントリを無効にすることによってメタデータを更新する。
【0041】
次に
図6を参照すると、方法600のフロー図が示されている。方法600は、データベースシステム(例えばデータベースシステム10)によって、分散ストレージ(例えばストレージ110)に格納されたデータベースシステムのデータについての要求を処理するよう構成された複数のノード(例えばノード130及び140)の間でデータベースシステムの現在の状態を同期させるために実行される方法の一実施形態である。いくつかの実施形態では、複数のノードのうちの1つが現在アクティブであり、他のノードは現在スタンバイノードである。
【0042】
方法600は、ステップ610において開始し、アクティブノード(例えばノード130)が、分散ストレージにデータをコミットすることを含むトランザクションを実行するための要求(例えば要求131)を受け取る。要求を受け取ったことに応答して、ステップ620において、アクティブノードは、データベースシステムの状態を更新するためにデータを分散ストレージにコミットし、そのコミットメントの指示(例えばレコード115)を提供するメタデータを、分散ストレージ内のトランザクションログ(例えばログ112)に格納させる。いくつかの実施形態において、トランザクションログは、スタンバイノードに対して、該スタンバイノードがデータベースの現在の状態を知るための情報を識別する。様々な実施形態では、データベースシステムは、それらのノード間で共有されるカタログ(例えばカタログ125)を維持する。種々の実施形態において、カタログは、分散ストレージに格納されたメタデータを識別し、分散ストレージに格納されたメタデータを見つけるためにスタンバイノード(例えばノード140)によって使用可能である。メタデータを格納させることに応答して、アクティブノードは、メタデータを識別するようカタログを更新する。様々な実施形態において、アクティブノードは、分散ストレージ内のトランザクションログの外部に格納されるデータレコードにデータを書き込む。
【0043】
いくつかの実施形態において、スタンバイノードは、トランザクションログが変更されたという通知を受け取る。スタンバイノードは、アクティブノードが、メタデータを識別するようカタログを更新したことに応答して、通知を受け取ってよい。通知の受け取りに応答して、いくつかの実施形態では、スタンバイノードは、クライアント要求(例えば要求141)を処理するために、スタンバイノードで維持されているメタデータ(例えばキャッシュ420及びメタデータ430)を更新する。いくつかの実施形態では、スタンバイノードは、トランザクションに関連付けられるメタデータの読み出しに基づいて、そのメタデータを更新する。スタンバイノードは、様々な実施形態において、分散ストレージのデータを格納するキャッシュを含む。したがって、スタンバイノードは、トランザクションログから、トランザクションに関連付けられるキー値ペアのキーを取り出すことができる。したがって、スタンバイノードは、キーに関連付けられるキャッシュ内のエントリを識別し、該エントリを、キー値ペアのキーに対応する更新することができる。いくつかの実施形態では、スタンバイノードが新たなアクティブノードになることに応答して、新たなアクティブノードは、別のトランザクションのためにデータを分散ストレージにコミットし、トランザクションログ内に、この別のトランザクションの指示を提供するメタデータを格納させる。
【0044】
いくつかの実施形態では、方法600は、追加のステップ、例えばスタンバイノード(例えばノード140)がアクティブノード(例えばノード130)になることを可能にするように動作可能な高可用性(HA)アプリケーション(例えばアプリケーション410)を実行するステップ、複数のノードのうちの1つのみをデータベースシステムのアクティブノードとして選択するステップ、トランザクションログ(例えばログ112)内の指示(例えばレコード115)のキーを、その指示が格納されている分散ストレージ内の物理的な場所に関連付けるマッピングを維持するステップ等を含む。
【0045】
次に、
図7を参照すると、方法700のフロー図が示されている。方法700は、データベースノード(例えばノード140)によって、他のデータベースノードとのデータコヒーレンシーを維持するために実行される方法の一実施形態である。
【0046】
方法700は、ステップ710において開始し、データベースノード(例えばノード140)が、複数のノード(例えばノード130及び140)間で共有される分散ストレージ(例えばストレージ110)に格納されるデータのためのキャッシュ(例えばキャッシュ420)を維持する。様々な実施形態では、キャッシュは、キー値ペアのためのエントリを含む。ステップ720において、データベースノードは、データベースシステム(例えばシステム10)のトランザクションが分散ストレージにコミットされる順序を識別するトランザクションログ(例えばログ112)を読み出す。様々な実施形態では、データベースノードは、トランザクションログにコミットされた新たなトランザクションを識別するデータベースシステムのカタログをモニタする。カタログは、データベースシステムのデータベース・スキーマを格納することができる。トランザクションログを読み出す前に、いくつかの実施形態では、データベースノードは、新たなトランザクションがトランザクションログにコミットされたことをカタログが識別することを決定する。
【0047】
読み出しに基づいて、ステップ720において、データベースノードは、別のノード(例えばノード130)が、キー値ペアの値を修正するトランザクションを、分散ストレージにコミットしたことを決定する。この決定に応答して、ステップ730において、データベースノードは、キー値ペアの修正された値に基づいて、キャッシュに含まれるエントリを更新する。いくつかの実施形態では、データベースノードは、エントリ内の値を、キー値ペアの修正された値で置き換え、他の実施形態では、ノードは、キャッシュに含まれるエントリを無効にする。分散ストレージにデータを書き込むための要求を処理するように指示された後、様々な実施形態では、データベースノードは、クライアントデバイスから、分散ストレージ内の別のキー値ペアに関連付けられる値を修正するための要求を受け取る。したがって、データベースノードは、要求に従って、値の修正を指定するトランザクションを分散ストレージに格納し、トランザクションを識別するようカタログを更新してよい。様々な実施形態では、方法700は、追加のステップ、例えばキー値ペアのキーに対応する値の要求を受け取るステップ、その値をクライアントデバイスに提供するステップ等を含む。
【0048】
例示のコンピュータシステム
次に
図8に移ると、分散ストレージ110、メタデータサーバ120、アクティブノード130又はスタンバイノード140を実装することができる例示的なコンピュータシステム800のブロック図が示されている。コンピュータシステム800は、相互接続860(例えばシステムバス)を介してシステムメモリ820及びI/Oインタフェース840に結合されるプロセッサ・サブシステム880を含む。I/Oインタフェース840は、1つ以上のI/Oデバイス850に結合される。コンピュータシステム800は、これらに限定されないが、サーバシステム、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ又はノートブックコンピュータ、メインフレームコンピュータシステム、タブレットコンピュータ、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、携帯電話や音楽プレーヤ又はパーソナルデータアシスタント(PDA)等の消費者デバイスを含む、種々のタイプのデバイスのいずれかとすることができる。便宜上、
図8には単一のコンピュータシステム800が示されているが、システム800は、同時に動作する2つ以上のコンピュータシステムとして実装されてもよい。
【0049】
プロセッサ・サブシステム880は、1つ以上のプロセッサ又は処理ユニットを含んでもよい。コンピュータシステム800の様々な実施形態において、プロセッサ・サブシステム880の複数のインスタンスが相互接続860に結合されてよい。様々な実施形態では、プロセッサ・サブシステム880(又は880内の各プロセッサユニット)は、キャッシュ又は他の形態のオンボードメモリを含んでもよい。
【0050】
システムメモリ820は、プロセッサ・サブシステム880によって実行可能であり、システム800に本明細書で説明される様々なオペレーションを実行させるプログラム命令を格納するために使用可能である。システムメモリ820は、ハードディスクストレージ、フロッピーディスクストレージ、取り外し可能ディスクストレージ、フラッシュメモリ、ランダムアクセスメモリ(RAM-SRAM、EDO RAM、SDRAM、DDR SDRAM、RAMBUS RAM等)、読み取り専用メモリ(PROM、EEPROM等)等のような異なる物理メモリ媒体を使用して実装されてよい。コンピュータシステム800内のメモリは、メモリ820のような一次ストレージに限定されない。むしろ、コンピュータシステム800は、プロセッサ・サブシステム880内のキャッシュメモリ及びI/Oデバイス850上の二次ストレージ(例えばハードドライブ、ストレージアレイ等)のような他の形態のストレージも含んでよい。いくつかの実施形態において、これらの他の形態のストレージはまた、プロセッサ・サブシステム880によって実行可能なプログラム命令も記憶してよい。いくつかの実施形態では、上記で説明されたキャッシュ420及びメタデータ430は、システムメモリ820を含み得る(又はその中に含まれ得る)。
【0051】
I/Oインタフェース840は、様々な実施形態に従って、他のデバイスに結合されて他のデバイスと通信するように構成された様々なタイプのインタフェースのいずれかとすることができる。一実施形態において、I/Oインタフェース840は、フロントサイドから1つ以上のバックサイドバスへのブリッジチップ(例えばサウスブリッジ)である。I/Oインタフェース840は、1つ以上の対応するバス又は他のインタフェースを介して1つ以上のI/Oデバイス850に結合されてよい。I/Oデバイス850の例には、ストレージデバイス(ハードドライブ、光学ドライブ、取り外し可能フラッシュドライブ、ストレージアレイ、SAN又はそれらの関連するコントローラ)、ネットワークインタフェースデバイス(例えばローカル又はワイドエリアネットワークへの)又は他のデバイス(例えばグラフィクス、ユーザインタフェースデバイス等)が含まれる。一実施形態では、コンピュータシステム800は、(例えばWi-Fi、Bluetooth(登録商標)、Ethernet(登録商標)等を介して通信するように構成された)ネットワークインタフェースデバイス850を介してネットワークに結合される。
【0052】
本出願の主題の実現は、以下の例1~20を含むが、これらに限定されない。
1. データベースシステムが、該データベースシステムの現在の状態を、分散ストレージに格納された前記データベースシステムのデータについての要求を処理するように構成される複数のノードの間で同期させるための方法であって、前記複数のノードのうちの1つが現在アクティブであり、前記複数のノードのうちの他のノードが現在スタンバイノードであり、当該方法は:
アクティブノードにおいて、前記分散ストレージにデータをコミットすることを含む第1トランザクションを実行する要求を受け取るステップと;
前記要求を受け取ったことに応答して、
前記アクティブノードによって、前記分散ストレージに前記データをコミットして、前記データベースシステムの前記現在の状態を更新するステップと;
前記アクティブノードによって、前記分散ストレージに格納されたトランザクションログに、コミットの指示を提供する第1メタデータを格納させるステップであって、前記トランザクションログは、前記スタンバイノードに対して、前記スタンバイノードが前記データベースシステムの現在の状態を知るための情報を識別する、ステップと;
を含む、方法。
2. 前記スタンバイノードのうちの1つのスタンバイノードにおいて、前記トランザクションログが修正されたことの通知を受け取るステップと;
前記通知を受け取ったことに応答して、前記1つのスタンバイノードによって、該スタンバイノードで維持されている第2メタデータを更新してクライアントの要求に対応するステップであって、前記の更新は、前記トランザクションログに格納されている前記第1メタデータを読み出すことを含む、ステップと;
を更に含む、例1に記載の方法。
3. 前記複数のノードの間で共有されるカタログを維持するステップであって、前記カタログは、前記分散ストレージに格納されたメタデータを識別し、前記分散ストレージに格納されている前記第1メタデータを見つけるために、前記1つのスタンバイノードによって使用可能である、ステップと;
前記第1メタデータを格納させることに応答して、前記アクティブノードが、前記第1メタデータを識別するよう前記カタログを更新することであって、該更新によって前記1つのスタンバイノードに前記通知を受け取らせる、ステップと;
を更に含む、例2に記載の方法。
4. 前記スタンバイノードのうちの1つのスタンバイノードは、前記分散ストレージのデータを格納するキャッシュを含み、当該方法は:
前記トランザクションログから、前記1つのスタンバイノードによって、前記第1トランザクションに関連付けられるキー値ペアのキーを取り出すステップと;
前記1つのスタンバイノードによって、前記キーに関連付けられる、前記キャッシュ内のエントリを識別するステップと;
前記キー値ペアの前記キーに対応する値で前記エントリを更新するステップと;
を更に含む、例1に記載の方法。
5. 前記のコミットすることは、前記データを前記分散ストレージ内の前記トランザクションログの外部に格納するステップを含む、例1に記載の方法。
6. 前記複数のノードは、前記スタンバイノードのうちの1つのスタンバイノードが新たなアクティブノードになることを可能にするように動作可能な高可用性(HA)アプリケーションを実行するように構成され、当該方法は:
前記1つのスタンバイノードが前記新たなアクティブノードになったことに応答して、
前記新たなアクティブノードによって、第2トランザクションのために、前記分散ストレージにデータをコミットするステップと;
前記新たなアクティブノードによって、前記トランザクションログに前記第2トランザクションの指示を提供するメタデータを格納させるステップと;
を更に含む、例1に記載の方法。
7. 前記分散ストレージによって、前記トランザクションログ内の複数のトランザクションについての指示を提供するメタデータのキーを、該指示を提供する第1メタデータが格納されている前記分散ストレージ内の物理的な位置に関連付けるマッピングを維持するステップを更に含む、例1に記載の方法。
8. データベースシステムであって、
データベースを実装するよう構成される複数のノードと;
前記複数のノードに対してアクセス可能であり、前記データベースのデータを格納するように構成される分散ストレージと;
を備え、前記複数のノードのうちの第1ノードは、
第1トランザクションについて、前記分散ストレージに第1データセットを格納し、
前記分散ストレージによって維持されるトランザクションログに前記第1トランザクションの第1レコードを格納することであって、前記トランザクションログは、前記データベースに関してトランザクションが実行される順序を定義する、
ように構成され、
前記複数のノードのうちの第2ノードは、
前記分散ストレージから、前記第1レコードを含む前記トランザクションログを読み出し、
前記トランザクションログを読み出したことに基づいて、前記第2ノードによって維持されているメタデータを更新することであって、該メタデータは、前記データベースの現在の状態を示す、
ように構成される、データベースシステム。
9. 前記トランザクションログは、前記トランザクションの複数のレコードを含み、当該データベースシステムは、
前記分散ストレージ内に前記複数のレコードを識別するカタログを維持するように構成されるメタデータサーバを更に備え、前記第1ノードは、前記第1レコードが格納されたことを前記メタデータサーバに通知するように構成される、例8に記載のデータベースシステム。
10. 前記第2ノードは、
前記メタデータサーバによって維持される前記カタログにアクセスして、前記第1ノードによって前記トランザクションログに追加されたレコードを識別し、
前記分散ストレージから前記追加されたレコードを読み出し、
前記読み出したレコードに基づいて、前記維持されているメタデータを更新する、
ように構成される、例9に記載のデータベースシステム。
11. 前記第2ノードは、
前記第2ノードにおいてキャッシュを維持するように構成され、前記キャッシュは、前記分散ストレージにも格納されているデータを維持するエントリを含み、
前記メタデータを更新することは、前記エントリ内のデータが前記第1データセットによって置き換えられたことを前記第1レコードが示していることに応答して、前記キャッシュ内のエントリを無効にすることを含む、
例8に記載のデータベースシステム。
12. 前記第2ノードは、
第2データセットを書き込むことを含む第2トランザクションを実行する要求を受け取り、
該要求に応答して、
前記分散ストレージに第2データセットを格納し、
前記第2トランザクションの第2レコードを、前記分散ストレージによって維持される前記トランザクションログに格納する、
ように構成される、例8に記載のデータベースシステム。
13. 当該データベースシステムは、前記複数のノードのうちの1つのみを、所与の時点で、前記データベースシステムのアクティブノードとして動作するように選択するよう構成される、
例8に記載のデータベースシステム。
14. 前記複数のノードは、高可用性(HA)クラスタを実装するように構成され、前記分散ストレージは、ネットワークを介して前記複数のノードに結合される複数のストレージデバイスを含む、
例8に記載のデータベースシステム。
15. データベースシステムの複数のデータベースノードのうちの第1データベースノードに、
前記複数のデータベースノードの間で共有される分散ストレージに格納されたデータのためのキャッシュを維持することであって、前記キャッシュは、第1キー値ペアのためのエントリを含むことと;
トランザクションログを読み出すことであって、前記トランザクションログは、前記データベースシステムのトランザクションが前記分散ストレージにコミットされる順序を識別することと;
前記読み出しに基づいて、前記第1キー値ペアの値を修正する第1トランザクションを、前記複数のデータベースノードのうちの第2データベースノードが前記分散ストレージに対してコミットしたことを決定することと;
前記決定に応答して、前記第1キー値ペアの前記修正された値に基づいて、前記キャッシュに含まれる前記エントリを更新することと;
を含む動作を実行させることができるプログラム命令を有する、非一時的なコンピュータ読み取り可能媒体。
16. 前記動作は、
前記トランザクションログにコミットされた新たなトランザクションを識別する、前記データベースシステムのカタログをモニタリングするステップであって、前記カタログは、前記データベースシステムのデータベース・スキーマを格納することと;
前記トランザクションログを読み出す前に、前記カタログが前記分散ストレージにコミットされた新たなトランザクションを識別することを決定することと;
を更に含む、例15に記載のコンピュータ読み取り可能媒体。
17. 前記動作は、
クライアントデバイスから、前記分散ストレージ内の第2キー値ペアの値を修正することを含む第2トランザクションを実行する要求を受け取ることと;
前記分散ストレージにおいて、前記第2キー値ペアの前記修正された値及び前記第2トランザクションのレコードを格納するステップであって、前記レコードは、前記第2キー値ペアの前記値に対する修正を指定することと;
前記第2トランザクションの前記レコードを識別するように前記カタログを更新することと;
を更に含む、例16に記載のコンピュータ読み取り可能媒体。
18. 前記更新することは、前記エントリ内の値を、前記第1キー値ペアの前記修正された値に置き換えることを含む、
例15に記載のコンピュータ読み取り可能媒体。
19. 前記更新することは、前記キャッシュに含まれる前記エントリを無効にすることを含む、
例15に記載のコンピュータ読み取り可能媒体。
20. 前記動作は、
クライアントデバイスから、前記第1キー値ペアのキーに対応する値についての要求を受け取ることと;
前記値が前記更新されたエントリによって格納されているという決定に応答して、前記更新されたエントリからの前記値を前記クライアントデバイスに提供することと;
をさらに含む、例15に記載のコンピュータ読み取り可能媒体。
【0053】
特定の実施形態が上記で説明されているが、これらの実施形態は、単一の実施形態が特定の特徴に関連して説明されている場合でも、本開示の範囲を制限するように意図されていない。本開示において提供される特徴の例は、別段の記載がない限り、限定的ではなく例示的であるように意図されている。上記の説明は、本開示の利益を享受する当業者には明らかであるような、そのような代替、修正及び等価物を網羅するように意図されている。
【0054】
本開示の範囲は、本明細書で開示される問題の一部又は全部を緩和するか否かにかかわらず、本明細書で開示されている任意の特徴又は特徴の組み合わせ(明示的又は暗示的のいずれか)又はその任意の一般化を含む。したがって、新たな請求項が、本出願(又はその優先権を主張する出願)の手続において、そのような特徴の任意の組合せに対して形成されてもよい。特に、添付の特許請求の範囲に関連して、従属請求項の特徴は、独立請求項の特徴と組み合わされてよく、それぞれの独立請求項の特徴は、添付の特許請求の範囲に列挙された特定の組み合わせだけでなく、任意の適切な方法で組み合わされてよい。