Certains contenus de cette application ne sont pas disponibles pour le moment.
Si cette situation persiste, veuillez nous contacter àObservations et contact
1. (JP2016517124) 効率的な読み取り用レプリカ
Document

Description

Title of Invention 効率的な読み取り用レプリカ US 13/873,467 20130430 20181017 G06F 12/00 米国特許第07653668(US,B1) 米国特許出願公開第2008/0235291(US,A1) 米国特許出願公開第2011/0178984(US,A1) 特開2013−008291(JP,A) 米国特許第08176012(US,B1) 米国特許出願公開第2011/0145193(US,A1) 米国特許出願公開第2005/0256972(US,A1) US2014036257 20140430 WO2014179504 20141106 2016517124 20160609 20151120 小林 哲雄

Background Art

0001   0002   0003  

Brief Description of Drawings

0004  

Description of Embodiments

0005   0006   0007   0008   0009   0010   0011   0012   0013   0014   0015   0016   0017   0018   0019   0020   0021   0022   0023   0024   0025   0026   0027   0028   0029   0030   0031   0032   0033   0034   0035   0036   0037   0038   0039   0040   0041   0042   0043   0044   0045   0046   0047   0048   0049   0050   0051   0052   0053   0054   0055   0056   0057   0058   0059   0060   0061   0062   0063   0064   0065   0066   0067   0068   0069   0070   0071   0072   0073   0074   0075   0076   0077   0078   0079   0080   0081   0082   0083   0084   0085   0086   0087   0088   0089   0090   0091   0092   0093   0094   0095   0096   0097   0098   0099   0100   0101   0102   0103   0104   0105   0106   0107   0108   0109   0110   0111   0112   0113  

Claims

1   2   3   4   5   6   7   8   9   10   11   12   13   14   15  

Drawings

1   2   3   4   5   6   7   8   9   10    

Description

効率的な読み取り用レプリカ

US 13/873,467 20130430 20181017 G06F 12/00 patcit 1 : 米国特許第07653668(US,B1)
patcit 2 : 米国特許出願公開第2008/0235291(US,A1)
patcit 3 : 米国特許出願公開第2011/0178984(US,A1)
patcit 4 : 特開2013−008291(JP,A)
patcit 5 : 米国特許第08176012(US,B1)
patcit 6 : 米国特許出願公開第2011/0145193(US,A1)
patcit 7 : 米国特許出願公開第2005/0256972(US,A1)
US2014036257 20140430 WO2014179504 20141106 2016517124 20160609 20151120 小林 哲雄

Background Art

[0001]
ソフトウェアスタックの様々な構成要素の分散は、いくつかの場合において、フォルトトレランス(例えば、複製により)、より高い耐久性、及び安価なソリューション(例えば、より少数の大規模の高価な構成要素ではなく、多数のより小規模の安価な構成要素を使用することにより)を提供する(またはサポートする)。しかしながら、データベースは、これまで、分散に対して最も融通性がないソフトウェアスタックの構成要素のうちの1つであった。例えば、提供することが期待されている、いわゆるACID特性(例えば、不可分性、一貫性、独立性、及び永続性)を確保したままで、データベースを分散することが困難であり得る。
[0002]
ほとんどの既存のリレーショナルデータベースは分散されていないが、いくつかの既存のデータベースは、2つの一般的なモデル、「無共有」モデル及び「共有ディスク」モデル、のうちの1つを使用し、「スケールアウト」される(単により大きいモノリシックシステムを用いることによって「スケールアップ」されることとは対照的である)。一般的に、「無共有」モデルでは、受け取ったクエリは、データベース断片(各々がクエリの構成要素を含む)に分解され、これらの断片は、クエリ処理のための異なる計算ノードに送られ、結果は、それらが戻される前に収集されて集約される。概して、「共有ディスク」モデルでは、クラスタ内の全ての計算ノードは、同じ基礎となるデータへのアクセスを有する。このモデルを用いるシステムでは、キャッシュコヒーレンシを管理するために細心の注意を払う必要がある。これらのモデルの両方において、大きいモノリシックデータベースは、複数のノード(スタンドアロンデータベースインスタンスの機能の全てを含む)に複製され、「グルー」ロジックは、それらを接続するために追加される。例えば、「無共有」モデルでは、クエリを細分化し、それらを複数の計算ノートに送り、その後結果を組み合わせるディスパッチャの機能を、グルーロジックが提供することができる。共有ディスクモデルでは、グルーロジックは、複数のノードのキャッシュを共に融合するように働くことができる(例えば、キャッシング層でコヒーレンシを管理するために)。これらの「無共有」及び「共有ディスク」データベースシステムは、配備にコストがかかり、維持が複雑である場合もあり、多くのデータベースのユースケースに過剰に働く可能性がある。
[0003]
第3のモデルは、読み取り処理をスケールアウトするために使用される読み取り用レプリカである。典型的な読み取り用レプリカモデルによれば、データベースの構造に対して変更が行われると、SQL記録は、次に全てのレプリカに伝播することができる論理的複製ログに作成することができる。各々のレプリカは、次にデータベースの独自のバージョンでローカルにこれらのSQLステートメントを実行する。ログは非同期で送り出されるので、読み取り用レプリカは、プライマリデータベースから幾分遅れて動作し、読み取り用レプリカをプライマリに昇格させる必要がある場合、データの一部の損失が存在する。

Brief Description of Drawings

[0004]
[fig. 1] 一実施形態に従うデータベースソフトウェアスタックの様々な構成要素を示すブロック図である。
[fig. 2] いくつかの実施形態に従う開示された読み取り用レプリカを使用するように構成されたウェブサービスベースのデータベースサービスを実装するように構成することができるサービスシステムアーキテクチャを示すブロック図である。
[fig. 3] 一実施形態に従う開示された読み取り用レプリカを使用するように構成されたデータベースシステムの様々な構成要素を示すブロック図である。
[fig. 4] 一実施形態に従う開示された読み取り用レプリカを使用するように構成された分散データベース最適化ストレージシステムを示すブロック図である。
[fig. 5] 一実施形態に従う開示された読み取り用レプリカを使用するように構成されたデータベースシステム内の分離した分散データベース最適化ストレージシステムの使用を示すブロック図である。
[fig. 6] ウェブサービスベースのデータベースサービスの読み取り用レプリカ内のキャッシュ無効化のための方法の一実施形態を示すフロー図である。
[fig. 7] ウェブサービスベースのデータベースサービス内の開示された読み取り用レプリカを使用する読み取りを行うための方法の一実施形態を示すフロー図である。
[fig. 8] ウェブサービスベースのデータベースサービス内の読み取り用レプリカのキャッシュを更新するための方法の一実施形態を示すフロー図である。
[fig. 9] ウェブサービスベースのデータベースサービス内の主ノードに読み取り用レプリカを転換するための方法の一実施形態を示すフロー図である。
[fig. 10] 様々な実施形態に従う効率的な読み取り用レプリカを実装するように構成されたコンピュータシステムを示すブロック図である。

Description of Embodiments

[0005]
実施形態は、いくつかの実施形態及び例示的な図面のための実施例として本明細書に記載されているが、当業者であれば、実施形態が記載された実施形態または図面に限定されるものではないことを認識するであろう。その図面及び詳細な説明は、実施形態を開示された特定の形態に限定することを意図せず、逆に、その意図は、添付の特許請求の範囲によって定義される趣旨及び範囲内に入る全ての変更、均等物、及び代替物に及ぶことが可能であることを理解されたい。本明細書で使用される見出しは、構成上の目的のみのためであり、本明細書または特許請求の範囲の範囲を限定するために使用されるものではない。本出願を通じて使用されているように、「できる」の単語は、必須の意味(すなわち、絶対に必要であることを意味する)ではなく、許容の意味(すなわち、可能性を有することを意味する)で使用される。「含む(include)」、「含み」、及び「含む(includes)」の単語は、制限のない関係を示し、したがって、含んでいるが限定するものではない、ことを意味する。同様に、「有する(have)」、「有し」、及び「有する(has)」もまた、制限のない関係を示し、したがって、有しているが限定するものではない、ことを意味する。本明細書で使用される「第1」、「第2」、「第3」などの用語は、先行する名詞に対するラベルとして使用され、そのような順序は、明示的に示されない限り、いずれのタイプの順序(例えば、空間的、時間的、論理的など)を意味しない。
[0006]
様々な構成要素は、タスクまたはタスク(複数)を行う「ように構成されている」ものとして説明することができる。このような文脈では、「ように構成されている」は、動作中にタスクまたはタスク(複数)を行う「構造を有する」ことを概して意味する広義の限定である。このように、構成要素は、構成要素がタスクを現在行っていないときでも、タスクを行うように構成することができる(例えば、コンピュータシステムは、操作が現在行われていないときでも、操作を行うように構成することができる)。いくつかの文脈では、「ように構成されている」は、動作中にタスクまたはタスク(複数)を行う「回路を有する」ことを概して意味する構造の広義の記述であることができる。このように、構成要素は、構成要素が現在行われていないときでも、タスクを行うように構成することができる。概して、「ように構成されている」に対応する構造を形成する回路は、ハードウェア回路を含むことができる。
[0007]
様々な構成要素は、説明の便宜上、タスクまたはタスク(複数)を行うものとして説明することができる。このような記述は、「ように構成されている」の語句を含むものとして解釈されるべきである。1つ以上のタスクを行うように構成されている構成要素を記述することは、35U.S.C.§112、6節、その構成要素の解釈、を発動しないことを明白に意図する。
[0008]
「に基づく」。本明細書で使用される場合、この用語は、決定に影響を与える1つ以上の因子を説明するために使用される。この用語は、決定に影響を与えることができる追加の因子を除外しない。すなわち、決定は、まったくそれらの因子に基づく、またはそれらの因子に少なくとも部分的に基づく、ことができる。「Bに基づいてAを決定する」の語句を考える。BはAの決定に影響を与える因子であることができるが、このような語句は、Cに基づくことにもよるAの決定を除外しない。他の事例では、Aは、Bにのみ基づいて決定することができる。
[0009]
本開示の範囲は、本明細書で開示された(明示的または暗黙的のいずれでも)いずれかの特徴若しくは特徴の組み合わせ、またはそのいずれかの一般化を含み、それが本明細書で対処される問題のいずれかまたは全てを緩和するか否かを問わない。したがって、新規の特許請求を、任意のそのような特徴の組み合わせに対して本出願(またはそれに対する優先権を主張する出願)の手続き中に形式化することができる。具体的には、添付の特許請求の範囲を参照し、従属請求項からの特徴は独立請求項のものと組み合わせることができ、それぞれの独立請求項からの特徴は、任意の適切な方法で、かつ添付の特許請求の範囲に列挙された特定の組み合わせだけではなく、組み合わせることができる。
[0010]
読み取り用レプリカの様々な実施形態を開示する。本実施形態の様々なものは、データベースサービスのクライアントから、データベースサービスによって格納された記録に対して行われる変更を指定する書き込み要求を受け取るデータベースサービスの主ノードを含むことができる。本実施形態の様々なものはまた、記録のバージョンを格納する分散ストレージサービスのサーバーノードに行われる変更を表すやり直しログ記録を送ることを含む。本実施形態の様々なものは、1つ以上の読み取り用レプリカのそれぞれのキャッシュ内に格納されたデータ記録のいずれのキャッシュされたバージョンが古くなっていることの指示(例えば、通知、実際の赤色ログ記録など)を、1つ以上の読み取り用レプリカに送ることを更に含むことができる。読み取り用レプリカによって受け取られたそのデータ記録の後続の読み取りのために、読み取り用レプリカは、キャッシュからの代わりに、分散ストレージサービスからデータ記録の現在のバージョンを取り出すことができる。いくつかの実施形態では、読み取り用レプリカを、データを損失することなく、主ノードに(例えば、主ノードの障害の後に)転換する(例えば、フェイルオーバーする)ように構成することができる。
[0011]
本明細書は、開示された読み取り用レプリカを含む例となるウェブサービスベースデータベースサービスを最初に説明する。例となるウェブサービスベースデータベースサービスの説明には、データベースエンジン、読み取り用レプリカ、及び分離した分散データベースストレージサービスのような例となるウェブサービスベースデータベースサービスの様々な態様が含まれる。本明細書は、次に読み取り用レプリカを主ノードに転換することを含めて、読み取り用レプリカを維持し、使用するための方法の様々な実施形態のフローチャートを説明する。次に、本明細書は、開示された技術を実装することができる例となるシステムを説明する。様々な実施例は、本明細書を通じて提供される。
[0012]
本明細書に記載のシステムは、いくつかの実施形態では、クライアント(例えば、加入者)がデータストレージシステムをクラウドコンピューティング環境で操作することを可能にするウェブサービスを実装することができる。いくつかの実施形態では、データストレージシステムは、高度にスケーラブルであり、拡張可能であるエンタープライズクラスデータベースシステムであることができる。いくつかの実施形態では、クエリは、複数の物理的リソースにわたって分散されたデータベースストレージに向けることができ、データベースシステムは、必要に応じて、スケールアップまたはダウンすることができる。データベースシステムは、異なる実施形態において、様々なタイプ及び/または組織のデータベーススキーマと共に有効に機能することができる。いくつかの実施形態では、クライアント/加入者は、複数の方法で、例えばデータベースシステムへのSQLインターフェースを介してインタラクティブに、クエリを提出することができる。他の実施形態では、外部のアプリケーション及びプログラムは、データベースシステムへのオープンデータベース接続性(ODBC)及び/またはJavaデータベース接続性(JDBC)ドライバインターフェースを使用して、クエリを提出することができる。
[0013]
より具体的には、本明細書に記載のシステムは、いくつかの実施形態では、単一のデータベースシステムの様々な機能構成要素が本質的に分散されたサービス指向データベースアーキテクチャを実装することができる。例えば、複数の完全なデータベースインスタンス及びモノリシックデータベースインスタンス(各々が、アプリケーションサーバー、検索機能、またはデータベースのコア機能を提供するために必要とされるもの以上の他の機能のような外来の機能を含むことができる)を共に固定するのではなく、これらのシステムは、データベースの基本操作(例えば、クエリ処理、トランザクション管理、キャッシング及びストレージ)を、個別に独立してスケーラブルであることが可能である層に編成することができる。例えば、いくつかの実施形態では、本明細書に記載のシステムの各々のデータベースインスタンスは、データベース層(単一の主ノード及びクライアント側ストレージシステムドライバを含むことができる)、及び分離した分散ストレージシステム(既存のシステムのデータベース層で従来行われた操作のいくつかを集合的に行う複数のストレージノードを含むことができる)を含むことができる。
[0014]
本明細書でより詳細に説明されるように、いくつかの実施形態では、データベースの最低レベルの操作(例えば、バックアップ、復元、スナップショット、リカバリ、及び/または様々なスペース管理操作)のいくつかは、データベースエンジンからストレージ層にオフロードし、複数のノード及びストレージデバイスにわたって分散することができる。例えば、いくつかの実施形態では、データベースエンジンがデータベーステーブル(またはそのデータページ)へ変更を適用し、次に変更されたデータページをストレージ層に送るのではなく、格納されたデータベーステーブル(及びそのデータページ)への変更の適用は、ストレージ層自体の責任であることができる。そのような実施形態では、変更されたデータページではなく、やり直しログ記録をストレージ層に送ることができ、その後やり直し処理(例えば、やり直しログ記録の適用)を多少緩慢に、かつ分散方法で行うことができる(例えば、バックグランドプロセスによって)。いくつかの実施形態では、クラッシュリカバリ(例えば、格納されたやり直しログ記録からのデータページの再構築)もまた、ストレージ層によって行うことができ、また分散された(かつ、いくつかの場合では、緩慢である)バックグランドプロセスによって行うこともできる。
[0015]
いくつかの実施形態では、変更されたデータページではなくやり直しログがストレージ層に送られるので、データベース層とストレージ層との間には、既存のデータベースシステムよりもはるかに少ないネットワークトラフィックが存在することができる。いくつかの実施形態では、各々のやり直しログは、それが変更を指定する対応するデータページの10分の1程度であることができる。データベース層及び分散ストレージシステムから送られる要求は非同期であってもよいこと、及び複数のそのような要求は同時に実行中途であってもよいこと、に留意されたい。更に、データベース層の主ノードからデータベース層の読み取り用レプリカに送られる通信(例えば、キャッシュ無効化要求)は、同様に非同期であってもよい。
[0016]
前述のように、典型的な大規模なデータベースシステムでは、システムの障害の後にデータベースシステムを再起動させる前に、データセット全体を復元する必要がある。これらのデータベースシステムでは、クラッシュの後に、システムは、データページの全てがディスクにフラッシュされたことが既知である最後の時点(例えば、チェックポイント)を決定する必要があり、かつその時点以降からのいかなる変更ログを再生する必要がある。例えば、データベースがクライアントプロセスからの着信クエリを処理するために利用可能とすることができる前に、システムプロセスは、決定されたチェックポイントの後に変更されたデータページの全てを読み込み、かつそれらのデータページにまだ適用されていない該当する変更ログ記録の各々を適用する必要がある。
[0017]
いくつかの実施形態では、本明細書に記載のデータベースシステムは、データベースのクラッシュのほぼ直後に、データセット全体が復元されるのを待つことなく、障害に続いてデータベースエンジンを再起動させる(例えば、データベースがクエリを受け入れて処理するために利用できるようにする)ことを可能にすることができる。代わりに、クラッシュリカバリが、1つ以上のバックグランドスレッドによって緩慢に行われている間に、クエリを受け取り、処理することができる。例えば、クラッシュに続いて、複数のバックグランドスレッドが、異なるストレージノードで並列に動作し、対応するやり直しログからデータページを再構築することができる。その間に、着信クエリがまだ再構築されていないデータページをターゲットとする場合、ストレージ層は、データページを適切なやり直しログから即座に再作成するように構成することができる。
[0018]
概して、データの一部が与えられた後、データベースの主要な要件は、それが最終的にそのデータの一部を戻すことが可能なことである。このために、データベースは、いくつかの異なる構成要素(または層)を含むことができ、それらの各々は異なる機能を行う。例えば、従来のデータベースは、3つの層、すなわち、クエリの解析、最適化、及び実行を行う第1の層、トランザクション機能、リカバリ、及び永続性を提供する第2の層、並びにローカル接続ディスクまたはネットワーク接続ストレージのいずれかで、ストレージを提供する第3の層、を有すると考えることができる。上記のように、従来のデータベースをスケーリングする以前の試みは、典型的には、データベースの全ての3つの層を複製すること、及びそれらの複製されたデータベースインスタンスを複数のマシンにわたって分配すること、を伴った。
[0019]
いくつかの実施形態では、本明細書に記載のシステムは、従来のデータベースとは異なってデータベースシステムの機能を分けることができ、スケーリングを実装するために、機能的構成要素のサブセットのみ(完全なデータベースインスタンスではなく)を、複数のマシンにわたって分散することができる。例えば、いくつかの実施形態では、クライアント対応層は、データを格納するまたは取り出す方法ではなく、どのデータを格納するまたは取り出すべきかを指定する要求を受け取るように構成することができる。この層は、要求の解析及び/または最適化(例えば、SQLの解析及び最適化)を行うことができ、一方別の層は、クエリの実行を担当することができる。いくつかの実施形態では、第3の層は、トランザクション機能及び結果の一貫性を提供することを担当することができる。例えば、この層は、いわゆるACID特性、具体的にはデータベースをターゲットとするトランザクションの不可分性のいくつかを実施するように構成することができ、データベース内の一貫性を維持し、かつデータベースをターゲットとするトランザクション間の絶縁を確保する。いくつかの実施形態では、第4の層が、次に様々な種類の障害の存在下で、格納されたデータの永続性を提供することを担当することができる。例えば、この層は、変更のロギング、データベースクラッシュからのリカバリ、基盤となるストレージボリュームへのアクセスの管理、及び/または基盤となるストレージボリュームのスペース管理を担当することができる。
[0020]
図1〜5に例示され、記載されたストレージサービスは、単なる実施例であることに留意されたい。データベースエンジン及び読み取り用レプリカに結合された他のストレージサービスもまた、様々な実施形態で使用することができる。
[0021]
図1は、一実施形態に従うデータベースソフトウェアスタックの様々な構成要素を例示するブロック図である。この実施例で例示されるように、データベースインスタンスは、複数の機能的構成要素(または層)それらの各々は、データベースインスタンスの機能の一部を提供する。この実施例では、データベースインスタンス100は、クエリ解析及びクエリ最適化層(110として示される)、クエリ実行層(120として示される)、トランザクション機能及び一貫性管理層(130として示される)、及び永続性及びスペース管理層(140として示される)を含む。上記のように、いくつかの既存のデータベースシステムでは、データベースインスタンスをスケーリングすることは、データベースインスタンス全体を1回以上(図1に例示された層の全てを含む)複製すること、及びその後にグルーロジックを追加してそれらを共に接続すること、を伴うことができる。いくつかの実施形態では、本明細書に記載のシステムは、代わりに、永続性及びスペース管理層140の機能を、データベース層から別個のストレージ層にオフロードすることができ、かつその機能をストレージ層内の複数のストレージノードにわたって分散することができる。
[0022]
いくつかの実施形態では、本明細書に記載のデータベースシステムは、図1に例示されたデータベースインスタンスの上半分の構造の多くを保持することができるが、バックアップ、復元、スナップショット、リカバリ、及び/または様々なスペース管理操作の少なくとも一部についての責任を、ストレージ層に再分散することができる。この方法で機能を再分散すること及びデータベース層とストレージ層との間でログ処理を緊密に結合することは、スケラーブルデータベースを提供する以前の手法と比較すると、性能を改善し、可用性を向上させ、かつコストを削減することができる。例えば、やり直しログ記録(これは実際のデータページよりもサイズがかなり小さい)のみがノード間に送られ、または書き込み操作のレイテンシパス内に留め置かれるので、ネットワーク及び入力/出力帯域幅要件は、低減することができる。更に、データページの生成は、着信する書き込み操作を阻止することなく、各々のストレージノードのバックグランドで独立して行うことができる(フォアグランド処理が許す限り)。いくつかの実施形態では、ログ構造化非上書きストレージの使用は、例えば、データページの移動またはコピーではなく、メタデータ操作のみを使用することにより、バックアップ、復元、スナップショット、ポイントインタイムリカバリ、及びボリューム増加操作をより効率的に行うことを可能にすることができる。いくつかの実施形態では、ストレージ層はまた、クライアントのために複数のストレージノードにわたって格納されたデータ(及び/またはやり直しログ記録などのそのデータに関連するメタデータ)の複製についての責任を負うことができる。例えば、データ(及び/またはメタデータ)は、ローカル(例えば、ストレージノードの集まりが独自の物理的に異なる独立したインフラストラクチャで実行される単一の「アベイラビリティゾーン」内)で、及び/または単一のリージョン若しくは異なるリージョン内のアベイラビリティゾーンで複製することができる。
[0023]
様々な実施形態では、本明細書に記載のデータベースシステムは、様々なデータベース操作のための標準またはカスタムのアプリケーションプログラミングインターフェース(API)をサポートすることができる。例えば、APIは、データベースを作成すること、テーブルを作成すること、テーブルを変更すること、ユーザーを作成すること、ユーザーを削除すること、1つ以上の行をテーブルに挿入すること、値をコピーすること、テーブル内からデータを選択すること(例えば、テーブルをクエリすること)、クエリをキャンセルすることまたは中止することのための操作、及び/または他の操作をサポートすることができる。
[0024]
いくつかの実施形態では、データベースインスタンスのデータベース層は、読み取り及び/または書き込み要求を様々なクライアントプログラム(例えば、アプリケーション)及び/または加入者(ユーザー)から受け取り、次にそれらを解析し、関連するデータベース操作(複数可)を遂行するための実行プランを作成する主ノードサーバー(本明細書ではデータベースエンジンヘッドノードサーバーと呼ぶこともできる)を含むことができる。例えば、データベースエンジンヘッドノードは、複雑なクエリ及び結合の結果を取得するために必要な一連のステップを作成することができる。いくつかの実施形態では、データベースヘッドノードは、データベースシステムのデータベース層とクライアント/加入者との間の通信、並びにデータベース層と別個の分散データベース最適化ストレージシステムとの間の通信を管理することができる。
[0025]
いくつかの実施形態では、データベースエンジンヘッドノードは、JDBCまたはODBCインターフェースを介してエンドクライアントからSQL要求を受け取ることと、SQL処理及びトランザクション管理(ロッキングを含む)をローカルで行うことと、を担当することができる。しかしながら、データページをローカルで生成するのではなく、データベースエンジンヘッドノード(またはその構成要素)が、やり直しログ記録を生成してもよく、かつそれらを別個の分散ストレージシステムの適切なノードに送ってもよい。いくつかの実施形態では、分散ストレージシステムのクライアント側ドライバは、データベースエンジンヘッドノードでホストすることができ、かつそれらのやり直しログ記録が向けられるセグメント(またはそのデータページ)を格納するストレージシステムノード(または複数可)にやり直しログ記録をルーティングすることを担当することができる。例えば、いくつかの実施形態では、各々のセグメントは、保護グループを形成する複数のストレージシステムノードにミラーリングする(または他の方法で永続的にする)ことができる。そのような実施形態では、クライアント側ドライバは、各々のセグメントが格納されたノードを追跡することができ、かつクライアント要求を受け取ると、やり直しログを、セグメントが格納されたノードの全てにルーティングすることができる(例えば、実質的に同時に、非同期かつ並列で)。クライアント側ドライバは、保護グループ内のストレージノードの書き込みクォーラムから戻される肯定応答(やり直しログ記録がストレージノードに書き込まれたことを示すことができる)を受け取ると直ぐに、それは、要求された変更の肯定応答をデータベース層に(例えば、データベースエンジンヘッドノードに)送ることができる。例えば、データが保護グループの使用によって永続的にされる実施形態では、データベースエンジンヘッドノードは、クライアント側ドライバが書き込みクォーラムを構成するために十分なストレージノードインスタンスから応答を受け取るまで及びそうでない限り、トランザクションをコミットすることができないことがある。同様に、特定のセグメントに向けられた読み取り要求の場合、クライアント側ドライバは、読み取り要求をセグメントが格納されたノードの全てにルーティングすることができる(例えば、実質的に同時に、非同期かつ並列で)。クライアント側ドライバは、要求されたデータを保護グループ内のストレージノードの読み取りクォーラムから受け取ると直ぐに、それは、要求されたデータをデータベース層に(例えば、データベースエンジンヘッドノードに)に返すことができる。
[0026]
いくつかの実施形態では、データベース層(またはより具体的には、データベースエンジンヘッドノード)は、最近アクセスされたデータページが一時的に保持されるキャッシュを含むことができる。そのような実施形態では、そのようなキャッシュに保持されたデータページをターゲットとする書き込み要求を、対応するやり直しログ記録をストレージ層に送ることに加えて、受け取る場合、データベースエンジンは、そのキャッシュに保持されたデータページのコピーに変更を適用することができる。しかしながら、他のデータベースシステムとは異なり、このキャッシュに保持されたデータページは、決してストレージ層にフラッシュされることがなく、それは、任意の時点で破棄することができる(例えば、キャッシュされたコピーに最も直近で適用された書き込み要求についてのやり直しログ記録が、ストレージ層に送られ、肯定応答された後の任意の時点)。キャッシュは、異なる実施形態では、一度に多くても1つのライター(または複数のリーダー)によるキャッシュへのアクセスを制御するために様々なロック機構のいずれかを実装することができる。
[0027]
いくつかの実施形態では、データベース層は、システム内の同期または非同期の読み取り用レプリカ、例えば、読み取り要求をルーティングすることができるデータベース層の異なるノードのデータの読み取り専用コピー、の使用をサポートすることができる。そのような実施形態では、所与のデータベーステーブルのためのデータベースエンジンヘッドノードが特定のデータページに向けられた読み取り要求を受け取る場合、それは、読み取り専用のコピーのいずれか1つ(または特定の1つ)に要求をルーティングすることができる。あるいは、いくつかの実施形態では、クライアント読み取り要求は、データベースエンジンヘッドノードを最初に経由せずに、読み取り用レプリカによって(クライアントから)直接受け取ることができる。いくつかの実施形態では、データベースエンジンヘッドノードのクライアント側ドライバは、キャッシュされたデータページに対する更新及び/または無効化について、これらの他の読み取り用レプリカノードに(例えば、それらの他のノードのクライアント側ドライバへ)通知するように構成することができる。これに応答して、読み取り用レプリカは、それらのキャッシュ(例えば、キャッシュの特定のページ若しくは記録またはキャッシュ全体)を無効化するように構成することができる。無効化キャッシュデータに向けられた後続の読み取り用レプリカの場合、読み取り用レプリカは、更新されたデータページ(またはキャッシュに適用するためのそれらのページに対する変更のログ記録)の更新されたコピーをストレージ層から取り出すように構成することができる。いくつかの実施形態では、読み取り用レプリカは、読み取り及び書き込み側でホットであるページを含むことができるデータベースエンジンヘッドノードのキャッシュに格納されたデータページの指示(例えば、マニフェスト)を受け取るように構成することができる。読み取り用レプリカは、(例えば、ヘッドノードに障害が発生した場合)読み取り用レプリカノードをヘッドノードに転換できるように準備することに役立つホットなページを、ストレージ層から取り出せるように構成することができる。更に、読み取り用レプリカは、ヘッドノードに障害が発生した時点で、どのやり直し及び取り消し記録が実行中途であったか(例えば、読み取り用レプリカによって受け取られていない、または認知されていない)を決定するためにインメモリ構造(例えば、トランザクションテーブル)を更新するように構成することができる。その結果、転換された読み取り用レプリカは、既にウォームキャッシュ(例えば、キャッシュは最初から再構築しなくてもよい)を転換プロセスの一部として有することができる。
[0028]
いくつかの実施形態では、データベースエンジンヘッドノード及び/または読み取り用レプリカで実行されるクライアント側ドライバ(複数可)は、プライベートインターフェースをストレージ層に公開することができる。いくつかの実施形態では、それはまた、従来のiSCSIインターフェースを1つ以上の他の構成要素(例えば、他のデータベースエンジンまたは仮想コンピューティングサービス構成要素)に公開することができる。いくつかの実施形態では、ストレージ層内のデータベースインスタンスのためのストレージは、無制限でサイズを増大することができ、かつそれに関連付けられた無制限の数のIOPSを有することができる単一のボリュームとしてモデル化することができる。ボリュームが作成されるとき、それは、特定のサイズで、特定の可用性/永続性特性で(例えば、それが複製される方法を指定する)、及び/またはそれに関連付けられたIOPSレートで(例えば、ピーク時及び持続時の両方)、作成することができる。例えば、いくつかの実施形態では、様々な異なる永続性モデルをサポートすることができ、ユーザー/加入者は、それらのデータベーステーブルについて、複数の複製コピー、ゾーン、若しくはリージョン、並びに/または複製がそれらの永続性、性能及びコスト目標に基づいて同期若しくは非同期であるかどうか、を指定できることが可能である。
[0029]
いくつかの実施形態では、(ヘッドノード及び/または読み取り用レプリカの)クライアント側ドライバ(複数可)は、ボリュームに関するメタデータを保持することができ、かつ非同期要求を、ストレージノード間の追加のホップを必要としないで読み取り要求及び書き込み要求を満たすために必要なストレージノードのそれぞれに、直接送ることができる。例えば、いくつかの実施形態では、データベーステーブルに対して変更を行う要求に応じて、クライアント側ドライバは、ターゲットとなるデータページのためのストレージを実装する1つ以上のノードを決定するように、かつその変更を指定するやり直しログ記録(複数可)をそれらのストレージノードにルーティングするように、構成することができる。ストレージノードは、次にやり直しログ記録で指定された変更を、それ以後のある時点でターゲットとなるデータページに適用することを担当することができる。書き込みの肯定応答がクライアント側ドライバに返されると、クライアント側ドライバは、ボリュームが永続的である時点を進めることができ、かつコミットの肯定応答をデータベース層に返すことができる。前述のように、いくつかの実施形態では、クライアント側ドライバは、データページをストレージノードサーバーに決して送らないことができる。これは、ネットワークトラフィックを縮小することができるだけでなく、以前のデータベースシステムでフォアグランド処理スループットを制限しているチェックポイントまたはバックグランドライタースレッドの必要性も除去することができる。
[0030]
いくつかの実施形態では、多くの読み取り要求は、データベースエンジンヘッドノードキャッシュによって、及び/または特定の読み取り用レプリカのキャッシュによって、対応することができる。しかしながら、大規模の障害事象は、インメモリ複製のみを可能にするには、あまりにも普通のことであり、書き込み要求は永続性を要求することがある。したがって、本明細書に記載のシステムは、ストレージ層内にデータストレージを2つのリージョン、すなわち、やり直しログ記録が、それらがデータベース層から受け取られるときに、書き込まれる小さい追加専用ログ構造化リージョン、及びログ記録がバックグランドで一緒に合体されてデータページの新規のバージョンが作成されるより大きいリージョン、として実装することにより、フォアグランドレイテンシパス内に存在するやり直しログ記録書き込み操作のコストを最小限にするように構成することができる。いくつかの実施形態では、インスタンス化されたデータブロックが参照されるまで、そのページについての最後のやり直しログ記録に向けるインメモリ構造(逆方向チェイニングログ記録)を、各々のデータページについて維持することができる。この手法は、読み取りが主にキャッシュされるアプリケーションを含めて、読み取り書き込み混合ワークロードに対して良好な成績を提供することができる。
[0031]
いくつかの実施形態では、やり直しログ記録のためのログ構造化データストレージへのアクセスは、一連の逐次入力/出力操作(無作為の入力/出力操作ではなく)から成り立つことができるので、行われた変更は、一緒に緊密にまとめることができる。データページへの各々の変更が永続的なデータストレージへ2つの入力/出力操作をもたらす(やり直しログのための1つ及び変更されたデータページ自体のための1つ)既存のシステムとは対照的に、いくつかの実施形態では、本明細書に記載のシステムは、やり直しログ記録の受け取りに基づいて、分散ストレージシステムのストレージノードでデータページを合体することにより、この「書き込み増幅」を回避することができることも留意されたい。
[0032]
前述のように、いくつかの実施形態では、データベースシステムのストレージ層は、データベースのスナップショットを取ることを担当することができる。しかしながら、ストレージ層はログ構造化ストレージを実装するので、データページ(例えば、データブロック)のスナップショットを取ることは、データページ/ブロックに最も直近で適用されたやり直しログ記録に関連付けられたタイムスタンプ(または、複数のやり直しログ記録を合体してデータページ/ブロックの新規のバージョンを作成するために最も直近の操作に関連付けられたタイムスタンプ)を記録すること、及びページ/ブロックの以前のバージョン及び記録された時点までのいかなる後続のログエントリのガベージコレクションを防ぐこと、を含むことができる。例えば、データベースのスナップショットを取ることは、オフボリュームバックアップ戦略を用いるときに必要されるような、データブロックを読み取ること、コピーすること、または書き込むことを必要としないことが可能である。いくつかの実施形態では、ユーザー/加入者は、アクティブデータセットに加えて、どのくらいの追加のスペースをオンボリュームスナップショットのために維持したいかを選択することができるが、変更されたデータのみが追加のスペースを要求するので、スナップショットについてのスペース要件は最小限であることができる。異なる実施形態では、スナップショットは、離散的(例えば、各々のスナップショットは、特定の時点のものとしてデータページ内のデータの全てへのアクセスを提供することができる)または連続的(例えば、各々スナップショットは、2つの時点の間のデータページ内に存在するデータの全てのバージョンへのアクセスを提供することができる)であることができる。いくつかの実施形態では、以前のスナップショットに復帰することは、そのスナップショット以降の全てのやり直しログ記録及びデータページが、無効であり、かつガベージコレクション可能であることを示すログ記録を記録すること、及びそのスナップショット時点後に全てのデータベースキャッシュエントリを破棄すること、を含むことができる。そのような実施形態では、ストレージシステムは、要求された通りにかつ全てのノードにわたってバックグランドで、通常のフォワード読み取り/書き込み処理で行うのとまったく同様に、ブロック単位で、やり直しログ記録をデータブロックに適用するので、一切のロールフォワードを必要としないことが可能である。クラッシュリカバリは、それにより並列に行われ、ノードにわたって分散することが可能である。
[0033]
ウェブサービスベースデータベースサービスを実装するように構成することができるサービスシステムアーキテクチャの一実施形態は、図2に例示される。例示された実施形態では、複数のクライアント(データベースクライアント250a〜250nとして示される)は、ネットワーク260を介してウェブサービスプラットフォーム200と対話するように構成することができる。ウェブサービスプラットフォーム200は、データベースサービス210の1つ以上のインスタンス(インスタンスは、ヘッドノード及び複数の読み取り用レプリカを含むことができる)、分散データベース最適化ストレージサービス220、及び/または1つ以上の他の仮想コンピューティングサービス230と対話するように構成することができる。所与の構成要素の1つ以上のインスタンスが存在することができる場合、本明細書でのその構成要素への参照は、単数または複数のいずれかで行うことができるということに留意されたい。しかしながら、いずれかの形態の使用は、他を排除することを意図しない。
[0034]
様々な実施形態では、図2に例示された構成要素は、コンピュータハードウェア(例えば、マイクロプロセッサまたはコンピュータシステム)によって直接的にまたは間接的に実行可能である命令として、またはそれらの技術の組み合わせを使用して、コンピュータハードウェア内で直接実装することができる。例えば、図2の構成要素は、各々が図10に例示され、以下で説明されるコンピュータシステムの実施形態と同様であることができる複数のコンピューティングノード(または単に、ノード)を含むシステムによって実装することができる。様々な実施形態では、所与のサービスシステム構成要素(例えば、データベースサービスの構成要素、またはストレージサービスの構成要素)の機能は、特定のノードによって実装することができ、またはいくつかのノードにわたって分散することができる。いくつかの実施形態では、所与のノードは、1つのサービスシステム構成要素よりも多く(例えば、1つのデータベースサービスシステム構成要素よりも多く)の機能を実装することができる。
[0035]
概して、クライアント250は、データベースサービスに対する要求を含めて、ネットワーク260を介してウェブサービスプラットフォーム200へのウェブサービス要求を提出するように構成可能である任意のタイプのクライアントを包含することができる。例えば、所与のクライアント250は、ウェブブラウザの適切なバージョンを含むことができ、またはウェブブラウザによって提供される実行環境への拡張として若しくはその中で実行するように構成されたプラグインモジュール若しくは他のタイプのコードモジュールを含むことができる。あるいは、クライアント250(例えば、データベースサービスクライアント)は、データベースアプリケーション(若しくはそのユーザーインターフェース)、メディアアプリケーション、オフィスアプリケーション、または永続的ストレージリソースを使用して1つ以上のデータベーステーブルを格納し、及び/またはそれにアクセスすることができる任意の他のアプリケーションのようなアプリケーションを包含することができる。いくつかの実施形態では、そのようなアプリケーションは、全てのタイプのウェブベースデータのためのフルブラウザサポートを必ずしも実装することなく、ウェブサービス要求を生成し、処理するための十分なプロトコルサポート(例えば、ハイパーテキスト転送プロトコル(HTTP)の適切なバージョンのための)を含むことができる。すなわち、クライアント250は、ウェブサービスプラットフォーム200と直接対話するように構成されたアプリケーションであることができる。いくつかの実施形態では、クライアント250は、Representational State Transfer(REST)スタイルウェブサービスアーキテクチャ、ドキュメント若しくはメッセージベースウェブサービスアーキテクチャ、または別の適切なウェブサービスアーキテクチャに従って、ウェブサービス要求を生成するように構成することができる。
[0036]
いくつかの実施形態では、クライアント250(例えば、データベースサービスクライアント)は、データベーステーブルのウェブサービスベースストレージへのアクセスを、他のアプリケーションにそれらのアプリケーションに対して透明である方法で提供するように構成することができる。例えば、クライアント250は、オペレーティングシステムまたはファイルシステムと統合し、本明細書に記載のストレージモデルの適切な変形に従ってストレージを提供するように構成することができる。しかしながら、オペレーティングシステムまたはファイルシステムは、ファイル、ディレクトリ、及び/またはフォルダの従来のファイルシステム階層のようなアプリケーションへの異なるストレージインターフェースを提示することができる。そのような実施形態では、アプリケーションは、図1のストレージシステムサービスモデルを使用するために、変更する必要がなくてもよい。代わりに、ウェブサービスプラットフォーム200へのインターフェースの詳細は、オペレーティングシステム環境内で実行されるアプリケーションに代わってクライアント250及びオペレーティングシステムまたはファイルシステムによって、調整することができる。
[0037]
クライアント250は、ネットワーク260を介してウェブサービスプラットフォーム200にウェブサービス要求を搬送し、またそこから応答を受け取ることができる。様々な実施形態では、ネットワーク260は、クライアント250とプラットフォーム200との間にウェブベース通信を確立するために必要なネットワーキングハードウェア及びプロトコルの任意の適切な組み合わせを包含することができる。例えば、ネットワーク260は、概して、集合的にインターネットを実装する様々な電気通信ネットワーク及びサービスプロバイダを包含することができる。ネットワーク260はまた、ローカルエリアネットワーク(LAN)のようなプライベートネットワークまたはワイドエリアネットワーク(WAN)並びにパブリックまたはプライベート無線ネットワークを含むことができる。例えば、所与のクライアント250及びウェブサービスプラットフォーム200の両方は、独自の内部ネットワークを有する企業内でそれぞれプロビジョニングすることができる。そのような実施形態では、ネットワーク260は、所与のクライアント250とインターネットとの間に、並びにインターネットとウェブサービスプラットフォーム200との間に、ネットワーキングリンクを確立するために必要なハードウェア(例えば、モデム、ルーター、スイッチ、ロードバランサ、プロキシサーバーなど)及びソフトウェア(例えば、プロトコルスタック、アカウンティングソフトウェア、ファイアウォール/セキュリティソフトウェアなど)を含むことができる。いくつかの実施形態では、クライアント250は、パブリックのインターネットではなく、プライベートネットワークを使用してウェブサービスプラットフォーム200と通信することができることに留意されたい。例えば、クライアント250は、データベースサービスシステムと同じ企業内でプロビジョニングすることができる(例えば、データベースサービス210及び/または分散データベース最適化ストレージサービス220を実装するシステム)。そのような場合、クライアント250は、完全にプライベートネットワーク260を介してプラットフォーム200と通信することができる(例えば、インターネットベース通信プロトコルを使用することができるが、パブリックにアクセス可能でないLANまたはWAN)。
[0038]
概して、ウェブサービスプラットフォーム200は、データページ(またはその記録)にアクセスする要求のようなウェブサービス要求を受け取り、また処理するように構成された1つ以上のサービスエンドポイントを実装するように構成することができる。例えば、ウェブサービスプラットフォーム200は、特定のエンドポイントを実装するように構成されたハードウェア及び/またはソフトウェアを含むことができ、それによってそのエンドポイントに向けられたHTTPベースウェブサービス要求は、適切に受け取られ、処理される。一実施形態では、ウェブサービスプラットフォーム200は、ウェブサービス要求をクライアント250から受け取るように、かつそれらを処理のためにデータベースサービス210、分散データベース最適化ストレージサービス220、及び/または別の仮想コンピューティングサービス230を実装するシステムの構成要素に転送するように、構成されたサーバーシステムとして実装することができる。他の実施形態では、ウェブサービスプラットフォーム200は、大規模のウェブサービス要求処理負荷を動的に管理するように構成された負荷分散及び他の要求管理機能を実装する複数の異なるシステム(例えば、クラスタのトポロジで)として構成することができる。様々な実施形態では、ウェブサービスプラットフォーム200は、RESTスタイルまたはドキュメントベース(例えばSOAPベース)タイプのウェブサービス要求をサポートするように構成することができる。
[0039]
クライアントのウェブサービス要求のアドレス可能なエンドポイントとして機能することに加えて、いくつかの実施形態では、ウェブサービスプラットフォーム200は、様々なクライアント管理機能を実装することができる。例えば、プラットフォーム200は、要求するクライアント250の識別、クライアントの要求の数及び/または頻度、クライアント250のために格納されたまたは取り出されたデータテーブル(またはその記録)のサイズ、クライアント250によって使用される全体的なストレージ帯域幅、クライアント250によって要求されたストレージのクラス、または任意の他の計量可能なクライアントの使用状況パラメータを追跡することなどにより、ストレージリソースを含めて、ウェブサービスのクライアントの使用状況の計量及び会計処理を調整することができる。プラットフォーム200はまた、財務会計処理及び課金システムを実装することができ、またはクライアントの使用状況活動の報告及び課金のための外部システムによって、照会され、処理することができる使用状況データのデータベースを維持することができる。ある実施形態では、プラットフォーム200は、クライアント250から受け取る要求の割合及びタイプ、そのような要求によって利用される帯域幅、そのような要求についてのシステム処理レイテンシ、システム構成要素の利用率(例えば、ストレージサービスシステム内のネットワーク帯域幅及び/またはストレージ利用率)、要求に起因するエラーの割合及びタイプ、格納された及び要求されたデータページ若しくはその記録の特性(例えば、サイズ、データのタイプなど)、を反映するメトリック、または任意の他の適切なメトリックのような様々なストレージサービスシステム動作メトリックを収集し、監視し、及び/または集約するように構成することができる。いくつかの実施形態では、そのようなメトリックは、システム構成要素を調整し、維持するためにシステム管理者によって使用されることもでき、一方他の実施形態では、そのようなメトリック(または、そのようなメトリックの関連部分)は、クライアント250に公開することができ、そのようなクライアントが、データベースサービス210、分散データベース最適化ストレージサービス220、及び/または別の仮想コンピューティングサービス230(またはそれらのサービスを実装する基盤となるシステム)の使用状況を監視することを可能にする。
[0040]
いくつかの実施形態では、プラットフォーム200はまた、ユーザー認証及びアクセス制御手順を実装することができる。例えば、特定のデータベーステーブルにアクセスするための所与のウェブサービス要求の場合、プラットフォーム200は、要求に関連するクライアント250が特定のデータベーステーブルにアクセスすることを認証されたかどうかを確認するように構成することができる。プラットフォーム200は、例えば、特定のデータベーステーブルに関連する資格情報に対して識別、パスワード、または他の資格情報を評価することによって、または特定のデータベーステーブルのアクセス制御リストに対して特定のデータベーステーブルへの要求されたアクセスを評価することによって、そのような認証を決定することができる。例えば、クライアント250が、特定のデータベーステーブルにアクセスするために十分な資格情報を有していない場合、プラットフォーム200は、例えば、要求するクライアント250にエラー状況を示す応答を返すことによって、対応するウェブサービス要求を拒否することができる。様々な制御ポリシーは、データベースサービス210、分散データベース最適化ストレージサービス220、及び/または他の仮想コンピューティングサービス230によって、アクセス制御情報の記録またはリストとして格納することができる。
[0041]
ウェブサービスプラットフォーム200は、データベースサービス210を実装するデータベースシステムの機能にクライアント250がアクセスするための主要インターフェースに相応することができるが、そのような機能への唯一のインターフェースに相応する必要はないことに留意されたい。例えば、ウェブサービスインターフェースとは異なることができる代替のAPIは、データベースシステムを提供する企業の内部のクライアントがウェブサービスプラットフォーム200をバイパスすることを可能にするために使用することができる。本明細書に記載の実施例の多くにおいて、分散データベース最適化ストレージサービス220は、データベースサービスをクライアント250に提供するコンピューティングシステムまたは企業システムに対して内部であることができ、外部のクライアント(例えば、ユーザーまたはクライアントアプリケーション)に対して公開されないことに留意されたい。そのような実施形態では、内部の「クライアント」(例えば、データベースサービス210)は、分散データベース最適化ストレージサービス220とデータベースサービス210との間の実線として示されているローカルまたはプライベートネットワークを介して分散データベース最適化ストレージサービス220にアクセスすることができる(例えば、これらのサービスを実装するシステム間で直接APIを介して)。そのような実施形態では、クライアント250に代わってデータベーステーブルを格納する際に分散データベース最適化ストレージサービス220を使用することは、それらのクライアントに対して透明であることができる。他の実施形態では、分散データベース最適化ストレージサービス220は、ウェブサービスプラットフォーム200を介してクライアント250に公開され、データベース管理のためにデータベースサービス210に依存するもの以外に、アプリケーションのためにデータベーステーブルまたは他の情報のストレージを提供することができる。これは、ウェブサービスプラットフォーム200と分散データベース最適化ストレージサービス220との間の破線によって、図2に例示される。そのような実施形態では、分散データベース最適化ストレージサービス220のクライアントは、ネットワーク260を介して(例えば、インターネットを介して)分散データベース最適化ストレージサービス220にアクセスすることができる。いくつかの実施形態では、仮想コンピューティングサービス230は、分散データベース最適化ストレージサービス220からストレージサービスを受け取り(例えば、仮想コンピューティングサービス230と分散データベース最適化ストレージサービス220との間で直接APIを介して)、クライアント250に代わってコンピューティングサービス230を行う際に使用されるオブジェクトを格納するように構成することができる。これは、仮想コンピューティングサービス230と分散データベース最適化ストレージサービス220との間の破線によって、図2に例示される。いくつかの場合では、プラットフォーム200の会計処理及び/または資格認定サービスは、管理クライアント、または同じ企業内のサービス構成要素間のような内部のクライアントには不要であってもよい。
[0042]
様々な実施形態では、異なるストレージポリシーは、データベースサービス210及び/または分散データベース最適化ストレージサービス220によって、実装することができることに留意されたい。そのようなストレージポリシーの実施例は、永続性ポリシー(例えば、格納されるデータベーステーブル(またはそのデータページ)のインスタンスの数及びそれらが格納される異なるノードの数を示すポリシー)、及び/または負荷分散ポリシー(データベーステーブル、またはそのデータページを、要求トラフィックを均等化する試みで、異なるノード、ボリューム、及び/またはディスクにわたって分散することができる)を、含むことができる。更に、異なるストレージポリシーは、サービスのうちの様々な1つによって、異なるタイプの格納されたアイテムに適用することができる。例えば、いくつかの実施形態では、分散データベース最適化ストレージサービス220は、データページに対してよりもやり直しログ記録に対して、より高い永続性を実装することができる。
[0043]
図3は、一実施形態に従って、データベースエンジン、読み取り用レプリカ、及び別個の分散データベースストレージサービスを含むデータベースシステムの様々な構成要素を示すブロック図である。この実施例では、データベースシステム300は、いくつかのデータベーステーブル及び分散データベース最適化ストレージサービス310の各々について、それぞれのデータベースエンジンヘッドノード320並びに複数の読み取り用レプリカ322a、322b、及び322cを含むことができる(データベースクライアント350a〜350nとして示されるデータベースシステムのクライアントに可視であってもなくてもよい)。この実施例で例示されるように、データベースクライアント350a〜350nのうちの1つ以上は、データベースヘッドノード320(例えば、ヘッドノード320a、ヘッドノード320b、またはヘッドノード320c、それらの各々は、それぞれのデータベースインスタンスの構成要素である)及び/または読み取り用レプリカ(例えば、読み取り用レプリカ322a、322b、または322c)にネットワーク360を介してアクセスすることができる(例えば、これらの構成要素は、データベースクライアント350a〜350nに対してネットワークアドレス指定可能かつアクセス可能であることができる)。任意の数の読み取り用レプリカを特定のデータベースインスタンスに関連付けることができるが、図示及び説明を簡単にするために、図3には3つの読み取り用レプリカが示されていることに留意されたい。分散データベース最適化ストレージサービス310は、データベースクライアント350a〜350nに代わって、1つ以上のデータベーステーブルのデータページ(及びやり直しログ記録及び/またはそれらに関連する他のメタデータ)を格納するために、かつ本明細書に記載のようなデータベースシステムの他の機能を行うために、データベースシステムによって用いることができるが、異なる実施形態では、ストレージクライアント350a〜350nに対してネットワークアドレス指定可能かつアクセス可能であってもなくてもよい。例えば、いくつかの実施形態では、分散データベース最適化ストレージサービス310は、様々なストレージ、アクセス、変更のロギング、リカバリ、及び/またはスペース管理操作を、ストレージクライアント350a〜350nに対して不可視である方法で行うことができる。
[0044]
前述のように、各々のデータベースインスタンスは、様々なクライアントプログラム(例えば、アプリケーション)及び/または加入者(ユーザー)から要求を受け取り、次にそれらを解析し、それらを最適化し、かつ実行計画を作成して関連するデータベース操作(複数可)を遂行する単一のデータベースエンジンヘッドノード320を含むことができる。更に前述のように、各々の読み取り用レプリカは、読み取り要求を受け取り(例えば、様々なクライアントプログラム、加入者から、及び/またはデータベースエンジンヘッドノードから)、同様にそのような要求を解析し、それらを最適化し、かつ実行計画を作成して読み取り(例えば、選択)を遂行することができる。図3に例示の実施例では、データベースエンジンヘッドノード320aのクエリ解析、最適化、及び実行構成要素305は、データベースクライアント350aから受け取り、かつデータベースエンジンヘッドノード320aが構成要素となっているデータベースインスタンスをターゲットにするクエリのためのこれらの機能を行うことができる。いくつかの実施形態では、クエリ解析、最適化、及び実行構成要素305は、書き込み肯定応答、要求されたデータページ(またはその部分)、エラーメッセージ、及び他の応答を必要に応じて含むことができるクエリ応答を、データベースクライアント350aに返すことができる。この実施例で例示されるように、データベースエンジンヘッドノード320aはまた、クライアント側ストレージサービスドライバ325を含むことができ、これは、読み取り要求及び/またはやり直しログ記録を分散データベース最適化ストレージサービス310内の読み取り用レプリカ及び/または様々なストレージノードにルーティングし、書き込み肯定応答を分散データベース最適化ストレージサービス310から受け取り、要求されたデータページを分散データベース最適化ストレージサービス310から受け取り、かつ/またはデータページ、エラーメッセージ、若しくは他の応答をクエリ解析、最適化、及び実行構成要素305(今度は、それらをデータベースクライアント350aに返すことができる)に返すことができる。
[0045]
この実施例では、データベースエンジンヘッドノード320aは、最近アクセスされた(読み取り及び/または書き込み)データページを一時的に保持することができるデータページキャッシュ335を含む。図3に例示されるように、データベースエンジンヘッドノード320aはまた、データベースエンジンヘッドノード320aが構成要素となっているデータベースインスタンスでトランザクション機能及び一貫性を提供することを担当することができるトランザクション及び一貫性管理構成要素330を含む。例えば、この構成要素は、データベースインスタンス及びデータベースインスタンスに向けられたトランザクションの不可分性、一貫性、及び独立性の特性を確保することを担当することができる。図3に例示されるように、データベースエンジンヘッドノード320aはまた、様々なトランザクションの状態を追跡してコミットしていないトランザクションのローカルでキャッシュされた全ての結果をロールバックするために、トランザクション及び一貫性管理構成要素330によって用いることができるトランザクションログ340及び取り消しログ345を含むことができる。
[0046]
図3に例示の他のデータベースエンジンヘッドノード320の各々(例えば、320b及び320c)は、同様の構成要素を含むことができ、またデータベースクライアント350a〜350nの1つ以上によって受け取られ、かつそれが構成要素となっているそれぞれのデータベースインスタンスに向けられるクエリに同様の機能を行うことができることに留意されたい。
[0047]
様々な実施形態では、読み取り用レプリカ322a、322b、及び322cの各々はまた、データベースエンジンヘッドノードのものと同様な構成要素を含むことができ、かつ/またはそのような構成要素を含むように構成することができる(例えば、古いヘッドノードを交換するために、データベースエンジンヘッドノードへの読み取り用レプリカの転換時に)。示されるように、各々の読み取り用レプリカは、キャッシュ326a及びクライアント側ドライバ324aを含むことができる。クライアント側ドライバ324aは、データベースエンジンヘッドノードのクライアント側ストレージサービスドライバ325と同様であることができる。更に、ヘッドノードと読み取り用レプリカとの間の通信は、クライアント側ドライバ324aとクライアント側ストレージサービスドライバ325との間の通信であることができる。キャッシュ326aは、最近アクセスされたデータページを格納するように構成することができるという点でデータページキャッシュ335と同様であることができる。1つの読み取り用レプリカのキャッシュに格納されたデータページは、別の読み取り用レプリカのキャッシュに格納されたデータページとは異なることができ、更にデータページキャッシュ335に格納されたデータページとも異なることができることに留意されたい。更に、1つの読み取り用レプリカのキャッシュ内のデータページについて格納された実際のデータは、別の読み取り用レプリカのキャッシュ内の同じデータページについて格納された実際のデータ、及び/またはデータページキャッシュ335内に格納された同じデータページについての実際のデータ、とは異なることができる。
[0048]
いくつかの実施形態では、やり直しログ(または、取り消しログ)をストレージ層に送ると、クライアント側ストレージサービスドライバ325はまた、キャッシュ無効化指示(非同期であってもよい)を読み取り用レプリカに送るように構成することができる。キャッシュ無効化指示は、やり直しログに対応するキャッシュ記録が古くなっていることを示すことができ(読み取り用レプリカがやり直しログに対応するキャッシュ記録を格納している場合)、及び/またはそれが実際にやり直しログ記録であることができる。古いキャッシュされたデータに対応するデータを読み取るために、次に(クライアントから)受け取られる読み取り要求の場合、読み取り用レプリカは、分散データベース最適化ストレージサービス310からのデータの更新されたバージョン(例えば、1つ以上のやり直し/取り消しログ記録、合体されたログ記録、または実際のデータページの形態で)を要求し、主ノードから受け取ったログ記録を適用してデータの現在のバージョンを作成し、読み取りを要求するクライアントに現在のバージョンを返すことができる。いくつかの実施形態では、読み取り用レプリカは、次にそのキャッシュをデータ記録の現在のバージョンで更新し、そのデータに関する無効化指示を除去/リセットすることができる。いくつかの実施形態では、無効化指示は、実際のやり直しログ(または取り消しログ)であることができ、読み取り用レプリカは、分散ストレージサービスからのログ記録及び/または1つ以上のログ記録を、データ記録の古いキャッシュされたバージョンに適用し、それによってそれがもはや古くないようにそれを更新するように構成することができる。
[0049]
様々な実施形態では、読み取り用レプリカ322a、322b、または322cのうちの1つは、新規のデータベースエンジンヘッドノードに転換することができる(例えば、ヘッドノードに障害が発生した場合)。このような転換の準備を支援するために、読み取り用レプリカの1つ以上は、ヘッドノードのキャッシュに格納されたデータページの指示を、データベースエンジンヘッドノード(まだアクティブである間に)から受け取るように構成することができる。この指示は、読み取り及び書き込み側でホットであるデータページのマニフェストであることができる。読み取り用レプリカは、次にそれらのデータページのバージョンを、例えば分散データベース最適化ストレージサービス310から取り出すことができ、それらの取り出したデータページをキャッシュに格納することができる。マニフェスト/指示は、周期的に(例えば、毎時、毎日など)またはある事象の際に(例えば、読み取り/書き込み毎に、10回の読み取り/書き込み毎に、可能性のあるヘッドノードのフェイルオーバーを示すある内部ヘッドノードロジックの際などに)送ることができる。このように、読み取り用レプリカのキャッシュは、ヘッドノードへの転換の際に比較的ウォームキャッシュであることができる。一実施形態では、ウェブサービスプラットフォーム200は、ヘッドノードに障害が発生したことを決定し、どの読み取り用レプリカを転換するかを選択することができる。他の実施形態では、ヘッドノードの障害を検出する第1の読み取り用レプリカが、それがヘッドノードに転換すべきであることを決定することができ、または読み取り用レプリカは、どの読み取り用レプリカを転換するかについて支持することができる。更に別の実施形態では、読み取り用レプリカの所与の1つを、以前のヘッドノードに障害が発生した場合に、ヘッドノードに転換するための第1の選択肢として事前に選択することができる。どの読み取り用レプリカを転換するかを決定するための他の方法もまた、存在する。いくつかの実施形態では、読み取り用レプリカは、主ノードによって書き込まれたのと同じデータストレージに接続され、それによりそのデータの全てへのアクセスを有するので、転換プロセスの際にデータの損失が発生しないことが可能である。これは、読み取り用レプリカが主ノードによって書き込まれたものとは別個である異なるデータストレージを利用するシステムに対して対照的である。異なるデータストレージを使用するこのようなシステムでは、複製が非同期で行われた場合にデータ損失が発生することがあり、または複製が同期で行われた場合に性能の低下が発生することがある。
[0050]
更に、以前のヘッドノードから読み取り用レプリカに対して実行中途であって、読み取り用レプリカに対して未知である(例えば、示されていない、受け取られていない)が、分散データベース最適化ストレージサービス310によって受け取られたトランザクションに対応するログ記録(例えば、やり直し及び/または取り消し)が存在することができる。したがって、マニフェストが、読み取り用レプリカのそれぞれのキャッシュを多少最新に維持するのに役立つ場合でも、それらは、それにもかかわらず、いくつかの点でまだ古くなっている可能性がある。したがって、一実施形態では、新規のヘッドノードに転換される読み取り用レプリカは、読み取り用レプリカが認識していた最後のログ記録(例えば、ログシーケンス番号(LSN)のような単調に増加する識別子によって識別される)がどれであったかを決定するように(転換の前後に)構成することができる。読み取り用レプリカは、次に、最後のログ記録よりも後の対応するログ記録を有するどのデータ記録が変更したかを要求し、キャッシュ内のそれらを無効化するように構成することができる。読み取り用レプリカはまた、それ自体のキャッシュを更新してそれがもはや無効でない/古くないようにするために、実際のログ記録及び/またはデータ記録を要求するように構成することができる。更に、読み取り用レプリカは、実行中途のトランザクションのトランザクションテーブルを維持するように構成することができる。読み取り用レプリカは、実行中途のトランザクションを読み取り用レプリカに送るように分散データベース最適化ストレージサービス310に要求し、次に実行中途のトランザクションに従ってインメモリ構造(例えば、トランザクションテーブル)を更新するように構成することができる。転換された読み取り用レプリカは、実行中途のトランザクションの特定のトランザクションが、ヘッドノードの障害に関連していた(例えば、それをクラッシュさせた)ことを決定し、そのトランザクションの変更をロールバックするように構成することができる(例えば、それをそれ自体のキャッシュに適用せず、かつ/またはストレージ層にあるそのアプリケーションを削除することをストレージ層に命令する)。
[0051]
いくつかの実施形態では、本明細書に記載の分散データベース最適化ストレージシステムは、1つ以上のストレージノードでのストレージ用に様々な論理的ボリューム、セグメント、及びページで、データを編成することができる。例えば、いくつかの実施形態では、各々のデータベースは、論理的ボリュームによって表され、各々の論理的ボリュームは、ストレージノードの集合にわたってセグメント化される。各々のセグメントは、ストレージノードの特定の1つに存在し、連続的なブロックアドレスのセットを含む。いくつかの実施形態では、各々データページはセグメントに格納され、その結果各々のセグメントは、1つ以上のデータページ及びそれが格納する各々のデータページについての変更ログ(やり直しログとも呼ばれる)の集合を格納する。本明細書で詳述されるように、ストレージノードは、やり直しログ記録(本明細書ではULRと呼ぶこともできる)を受け取り、それらを合体して対応するデータページの新規のバージョン及び/または追加の若しくは代替のログ記録を作成するように構成することができる(例えば、緩慢に及び/またはデータページに対する要求若しくはデータベースのクラッシュに応じて)。いくつかの実施形態では、データページ及び/または変更ログは、可変構成(クライアントであって、それに代わってデータベーステーブルは、データベースシステム内に維持されている、クライアントによって指定することができる)に従って、複数のストレージノードにわたってミラーリングすることができる。例えば、異なる実施形態では、データまたは変更ログの1つ、2つ、または3つのコピーは、デフォルトの構成、アプリケーション固有永続性選好、またはクライアント指定永続性選好に従って、1つ、2つ、または3つの異なるアベイラビリティゾーン若しくはリージョンの各々に格納することができる。
[0052]
本明細書で使用される場合、以下の用語は、様々な実施形態に従って、分散データベース最適化ストレージシステムによるデータの編成を説明するために使用することができる。
[0053]
ボリューム。ボリュームは、ストレージシステムのユーザー/クライアント/アプリケーションが理解するストレージの高度に耐久的であるユニットを表す論理的概念である。より具体的には、ボリュームは、データベーステーブルの様々なユーザーページに対する書き込み操作の単一の一貫性のある順序付けられたログとしてユーザー/クライアント/アプリケーションに表示される分散ストアである。各々の書き込み操作は、ボリューム内の単一のユーザーページのコンテンツに対する論理的な順序付けられた変化を表すユーザーログ記録(ULR)で符号化することができる。前述のように、ULRはまた、本明細書ではやり直しログ記録と呼ぶこともできる。各々のULRは、順序付けを示すために単調に増加する値を使用する識別子であることができる独特のLSNまたはログシーケンス番号を含むことができる。例えば、LSN1は、LSN6よりも前であるLSN3よりも前である。順序通りの各々の番号を使用する必要がないことに留意されたい。例えば、いくつかの実施形態では、LSN5を除いてLSN1、2、3、4、及び6が存在することができる。各々のULRは、保護グループ(PG)を形成する分散ストア内の1つ以上の同期セグメントに対して永続化され、ULRに高い永続性及び可用性を提供することができる。ボリュームは、可変サイズ連続範囲のバイトのためのLSN型読み取り/書き込みインターフェースを提供することができる。
[0054]
いくつかの実施形態では、ボリュームは、保護グループを介して各々が永続的に作られた複数のエクステントから成り立つことができる。このような実施形態では、ボリュームは、ボリュームエクステントの変更可能な連続的な配列から成るストレージのユニットを表すことができる。ボリュームに向けられる読み取り及び書き込みは、要素となるボリュームエクステントへの対応する読み取り及び書き込みにマッピングすることができる。いくつかの実施形態では、ボリュームのサイズは、ボリュームの終わりからボリュームエクステントを追加または除去することにより、変更することができる。
[0055]
セグメント。セグメントは、単一のストレージノードに割り当てられたストレージの制限された永続性ユニットである。より具体的には、セグメントは、データの特定の固定サイズバイト範囲に対して制限されたベストエフォート型永続性を提供する(例えば、ストレージノードである障害が発生した永続的だが非冗長のシングルポイント)。このデータは、いくつかの場合では、ユーザーアドレス可能なデータのミラーであることができ、またはそれは、様々な実施形態では、ボリュームメタデータまたは消去符号化ビットのような他のデータであることができる。所与のセグメントは、ちょうど1つのストレージノードに存在することができる。ストレージノード内では、複数のセグメントは各々のSSDに存在することができ、各々のセグメントは、1つのSSDに制限することができる(例えば、セグメントは、複数のSSDにわたることができない)。いくつかの実施形態では、セグメントは、SSDの連続するリージョンを占有するように要求されなくてもよく、むしろ、セグメントの各々によって所有される領域を記述する割り当てマップが各々のSSD内に存在することができる。上述のように、保護グループは、複数のストレージノードにわたって広がった複数のセグメントから成り立つことができる。いくつかの実施形態では、セグメントは、固定サイズ連続範囲のバイトのためのLSN型読み取り/書き込みインターフェースを提供することができる(作成時にサイズが定義されている場合)。いくつかの実施形態では、各々セグメントは、セグメントUUID(例えば、セグメントの汎用一意識別子)によって識別することができる。
[0056]
ストレージページ。ストレージページは、概して固定サイズのメモリブロックである。いくつかの実施形態では、各々ページは、オペレーティングシステムによって定義されたサイズのメモリの(例えば、仮想メモリ、ディスク、または他の物理的メモリの)ブロックであり、本明細書では用語の「データブロック」によって言及されることもある。より具体的には、ストレージページは、連続するセクタのセットであることができる。それは、SSD内の割り当てのユニットとして、並びにヘッダ及びメタデータが存在するログページ内のユニットとして、機能することができる。いくつかの実施形態では、本明細書に記載のデータベースシステムとの関連では、用語の「ページ」または「ストレージページ」は、4096、8192、16384、または32768バイトのような典型的には2の倍数であることができるデータベース構成によって定義されたサイズの同様なブロックを指すことができる。
[0057]
ログページ。ログページは、ログ記録(例えば、やり直しログ記録または取り消しログ記録)を格納するために使用されるストレージページの1つのタイプである。いくつかの実施形態では、ログページは、ストレージページとサイズが同一であることができる。各々ログページは、そのログページに関するメタデータ、例えばそれが属するセグメントを識別するメタデータ、を含むヘッダを含むことができる。ログページは、編成のユニットであり、必ずしも書き込み操作に含まれるデータのユニットでなくてもよいことに留意されたい。例えば、いくつかの実施形態では、通常の転送処理の間、書き込み操作は、一度に1つのセクタをログの末尾に書き込むことができる。
[0058]
ログ記録。ログ記録(例えば、ログページの個々の要素)は、いくつかの異なるクラスであることができる。例えば、ユーザーログ記録(ULR)は、ストレージシステムのユーザー/クライアント/アプリケーションによって作成され、また理解され、ボリューム内のユーザーデータに対する変更を示すために使用することができる。制御ログ記録(CLR)は、ストレージシステムによって生成され、現在の無条件ボリューム永続的LSN(VDL)のようなメタデータを追跡するために使用される制御情報を含むことができる。ヌルログ記録(NLR)は、いくつかの実施形態では、ログセクタまたはログページ内の未使用スペースを満たすためにパディングとして使用することができる。いくつかの実施形態では、これらのクラスの各々内に様々なタイプのログ記録が存在することができ、ログ記録のタイプは、ログ記録を解釈するために起動される必要がある機能に対応することができる。例えば、1つのタイプは、特定の圧縮フォーマットを使用する圧縮フォーマットでユーザーページの全てのデータを表すことができ、第2のタイプは、ユーザーページ内のバイト範囲についての新しい値を表すことができ、第3のタイプは、整数として解釈されたバイトの配列に対するインクリメント操作を表すことができ、第4のタイプは、1バイト範囲をページ内の別の場所にコピーすることを表すことができる。いくつかの実施形態では、ログ記録タイプは、特にULRについてバージョン管理及び開発を簡素化することができるGUIDによって(整数または列挙によってではなく)識別することができる。
[0059]
ペイロード。ログ記録のペイロードは、特定のタイプのログ記録またはログ記録(複数)に固有であるデータまたはパラメータ値である。例えば、いくつかの実施形態では、ほとんど(または全て)のログ記録が含み、かつストレージシステム自体が理解するパラメータまたは属性のセットが存在することができる。これらの属性は、セクタサイズと比較して相対的に小さくてもよい共通のログ記録ヘッダ/構造の一部であることができる。更に、ほとんどのログ記録は、そのログ記録タイプに固有の追加のパラメータまたはデータを含むことができ、この追加の情報は、そのログ記録のペイロードと見なすことができる。いくつかの実施形態では、特定のULRのためのペイロードがユーザーページのサイズよりも大きい場合、それは、ペイロードがユーザーページについての全てのデータを含む絶対ULR(AULR)によって交換することができる。これは、ストレージシステムがユーザーページのサイズに等しいULRのペイロードのサイズに上限を実施することを、可能にすることができる。
[0060]
セグメントログ内にログ記録を格納するとき、いくつかの実施形態では、ペイロードはログヘッダと共に格納できることに留意されたい。他の実施形態では、ペイロードは、別個の場所に格納することができ、ペイロードが格納された場所へのポインタは、ログヘッダと共に格納することができる。更に他の実施形態では、ペイロードの一部は、ヘッダに格納することができ、ペイロードの残りは、別個の場所に格納することができる。ペイロード全体がログヘッダと共に格納される場合、これはインバンドストレージと呼ぶことができ、そうでない場合、ストレージはアウトオブバンドであると呼ぶことができる。いくつかの実施形態では、ほとんどの大きいAULRのペイロードは、ログのコールドゾーン内にアウトオブバンドで格納することができる(後述する)。
[0061]
ユーザーページ。ユーザーページは、(固定サイズの)バイト範囲及びストレージシステムのユーザー/クライアントに対して可視である特定のボリュームについてのそれらのアライメントである。ユーザーページは、論理的概念であり、特定のユーザーページ内のバイトは、現状のまま任意のストレージページ内に格納してもしなくてもよい。特定のボリュームについてのユーザーページのサイズは、そのボリュームについてのストレージページのサイズとは無関係であってもよい。いくつかの実施形態では、ユーザーページのサイズは、ボリューム毎に構成可能であってもよく、ストレージノードの異なるセグメントは、異なるユーザーページのサイズを有することができる。いくつかの実施形態では、ユーザーページサイズは、セクタのサイズ(例えば、4KB)の倍数に制約することができ、上限(例えば、64KB)を有することができる。ストレージページのサイズは、他方では、ストレージノード全体について固定することができ、基盤となるハードウェアへの変更がない限り、変更することができない。
[0062]
データページ。データページは、ユーザーページのデータを圧縮形態で格納するために使用されるストレージページの1つのタイプである。いくつかの実施形態では、データページに格納されたデータの全ての部分は、ログ記録に関連付けられ、各々のログ記録は、データページ内のセクタ(データセクタとも呼ばれる)へのポインタを含むことができる。いくつかの実施形態では、データページは、各々のセクタによって提供されるもの以外の一切の埋め込まれたメタデータを含まなくてもよい。データページのセクタ間の関係が存在しなくてもよい。代わりに、ページへの編成は、セグメントに対するデータの割り当ての粒度の表現としてのみ存在することができる。
[0063]
ストレージノード。ストレージノードは、ストレージノードサーバーコードが展開される単一の仮想マシンである。各々ストレージノードは、複数のローカルで付属のSSDを含むことができ、1つ以上のセグメントへのアクセスのためのネットワークAPIを提供することができる。いくつかの実施形態では、様々なノードは、アクティブリストに、または劣化リストに(例えば、それらが、応答が遅いまたはそれ以外に損なわれているが、完全に使用不能ではない場合)載ることができる。いくつかの実施形態では、クライアント側ドライバは、観測された性能に基づいて、それらを交換すべきかの可否及びその時期を決定するために、かつ/またはデータを様々なノード間に再分配する時期及びその方法を決定するために、ノードをアクティブであるまたは劣化したものとして分類することを補助する(または、担当する)ことができる。
[0064]
SSD。本明細書で言及される場合、用語の「SSD」は、ストレージノードによって見られるようなローカルのブロックストレージボリュームを指すことができ、そのストレージボリュームによって用いられるストレージのタイプ、例えば、ディスク、ソリッドステートドライブ、バッテリバックアップRAM、NVMRAMデバイス(例えば、1つ以上のNVDIMM)、または永続的ストレージデバイスの別のタイプ、にかかわらない。SSDは、必ずしもハードウェアに直接マッピングされない。例えば、単一のソリッドステートストレージデバイスは、各々のボリュームが複数のセグメントに分割され、またそれらにわたってストライピングされる複数のローカルのボリュームに分けることができ、及び/または単一のドライバは、異なる実施形態では、単に管理を容易にするために複数のボリュームに分けることができる。いくつかの実施形態では、各々SSDは、単一の固定場所に割り当てマップを格納することができる。このマップは、どのストレージページが特定のセグメントによって所有されているか、またそれらのページのうちのどれがログページ(データページとは対照的である)であるか、を示すことができる。いくつかの実施形態では、ストレージページは、各々のセグメントに事前に割り当てることができ、その結果、転送処理は割り当てを待つ必要がなくてもよい。割り当てマップへの全ての変更は、新規に割り当てられたストレージページがセグメントによって使用される前に、永続的にすることが必要になる場合もある。
[0065]
分散データベース最適化ストレージシステムの一実施形態は、図4のブロック図によって例示される。この実施例では、データベースシステム400は、相互接続460を介して、データベースエンジンヘッドノード420、読み取り用レプリカ422a、及び読み取り用レプリカ422b(図示/説明を容易にするために、2つだけの読み取り用レプリカが示されている)と通信する分散データベース最適化ストレージシステム410を含む。図3に例示された実施例のように、データベースエンジンヘッドノード420は、クライアント側ストレージサービスドライバ425を含むことができ、読み取り用レプリカ422a及び422bは、各々クライアント側ドライバ424a及び424bをそれぞれ含むことができる。この実施例では、分散型データベース最適化ストレージシステム410は、複数のストレージシステムサーバーノード(430、440、及び450として示されたものを含む)を含み、それらの各々は、それが格納するセグメント(複数可)についてのデータページ及びやり直しログのためのストレージ、及び様々なセグメント管理機能を行うためのハードウェア及び/またはソフトウェアを含む。例えば、各々のストレージシステムサーバーノードは、複製(ローカルで、例えば、ストレージノード内で)、やり直しログを合体してデータページを生成すること、クラッシュリカバリ、及び/またはスペース管理(例えば、セグメントのための)、以上の操作のいずれかまたは全てのうちの少なくとも一部を行うように構成されたハードウェア及び/またはソフトウェアを含むことができる。各々のストレージシステムサーバーノードはまた、クライアント(例えば、ユーザー、クライアントアプリケーション、及び/またはデータベースサービス加入者)に代わって、データブロックを格納することができる複数の付属のストレージデバイス(例えば、SSD)を有することができる。
[0066]
図4に例示された実施例では、ストレージシステムサーバーノード430は、データページ(複数可)433、セグメントやり直しログ(複数可)435、セグメント管理機能437、及び付属のSSD471〜478を含む。ラベルの「SSD」は、ソリッドステートドライブを指してもしなくてもよいが、より一般的には、その基盤となるハードウェアに関係なく、ローカルのブロックストレージボリュームを指すことができることに再度留意されたい。同様に、ストレージシステムサーバーノード440は、データページ(複数可)443、セグメントやり直しログ(複数可)445、セグメント管理機能447、及び付属のSSD481〜488を含み、ストレージシステムサーバーノード450は、データページ(複数可)453、セグメントやり直しログ(複数可)455、セグメント管理機能457、及び付属のSSD491〜498を含む。
[0067]
前述のように、いくつかの実施形態では、セクタはSSDのアライメントのユニットであり、書き込みが部分的にしか完了しないリスクを伴わずに書き込むことができるSSDの最大サイズであることができる。例えば、様々なソリッドステートドライブ及び回転メディアのセクタサイズは、4KBであることができる。本明細書に記載の分散データベース最適化ストレージシステムのいくつかの実施形態では、各々及び全てのセクタは、セクタが一部であるより高いレベルのエンティティに関係なく、セクタの先頭に64ビット(8バイト)のCRCを有することができる。そのような実施形態では、このCRC(セクタがSSDから読み取られる度に検証することができる)は、破損の検出に使用することができる。いくつかの実施形態では、各々及び全てのセクタはまた、値がセクタをログセクタ、データセクタ、または未初期化セクタとして識別する「セクタタイプ」バイトを含むことができる。例えば、いくつかの実施形態では、0のバイト値のセクタタイプは、セクタが未初期化であることを示すことができる。
[0068]
図5は、一実施形態に従って、データベースシステムにおける別個の分散データベース最適化ストレージシステムの使用を例示するブロック図である。この実施例では、1つ以上のクライアントプロセス510は、データベースエンジン520及び分散データベース最適化ストレージシステム530を含むデータベースシステムによって維持された1つ以上のデータベーステーブルに、データを格納することができる。図5に例示された実施例では、データベースエンジン520は、データベース層構成要素560及びクライアント側ドライバ540(分散データベース最適化ストレージシステム530と、データベース層構成要素560と、読み取り用レプリカ522との間でインターフェースとして機能する)を含む。いくつかの実施形態では、データベース層構成要素560は、図3のクエリ解析、最適化、及び実行構成要素305、並びにトランザクション及び一貫性管理構成要素330によって行われるもののような機能を行うことができ、かつ/またはデータページ、トランザクションログ、及び/または取り消しログ(図3のデータページキャッシュ335、トランザクションログ340、及び取り消しログ345によって格納されるもののような)を格納することができる。
[0069]
この実施例では、1つ以上のクライアントプロセス510は、データベースクエリ要求515(ストレージノード535a〜535nのうちの1つ以上に格納されたデータをターゲットにする読み取り及び/または書き込み要求を含むことができる)を、データベース層構成要素560に送ることができ、またデータベースクエリ応答517(例えば、書き込み肯定応答及び/または要求されたデータを含む応答)をデータベース層構成要素560から受け取ることができる。データページに書き込むための要求を含む各々のデータベースクエリ要求515は、解析され、最適化されて、1つ以上の書き込み記録要求541を生成することができ、それは、分散データベース最適化ストレージシステム530への後続のルーティングのために、クライアント側ドライバ540に送ることができる。この実施例では、クライアント側ドライバ540は、各々の書き込み記録要求541に対応する1つ以上のやり直しログ記録531を生成することができ、それらを分散データベース最適化ストレージシステム530のストレージノード535のうちの特定の1つに送ることができる。いくつかの実施形態では、書き込み要求の場合、クライアント側ドライバ540は、キャッシュ無効化指示546(例えば、通知及び/または1つ以上のやり直しログ記録531)を読み取り用レプリカ522のクライアント側ドライバ524に送ることができる。分散データベース最適化ストレージシステム530は、各々のやり直しログ記録531についての対応する書き込み肯定応答532をデータベースエンジン520に(具体的には、クライアント側ドライバ540に)返すことができる。クライアント側ドライバ540は、これらの書き込み肯定応答をデータベース層構成要素560に(書き込み応答542として)渡すことができ、次にそれは、対応する応答(例えば、書き込み肯定応答)を1つ以上のクライアントプロセス510にデータベースクエリ応答517の1つとして送ることができる。
[0070]
この実施例では、データページを読み取る要求を含む各々のデータベースクエリ要求515は、解析され、最適化されて、1つ以上の読み取り記録要求543を生成することができ、それは、分散データベース最適化ストレージシステム530への後続のルーティングのためにクライアント側ドライバ540に送ることができる。この実施例では、クライアント側ドライバ540は、これらの応答を分散データベース最適化ストレージシステム530のストレージノード535のうちの特定の1つに送ることができ、分散データベース最適化ストレージシステム530は、要求されたデータページ533をデータベースエンジン520に(具体的には、クライアント側ドライバ540に)返すことができる。クライアント側ドライバ540は、返されたデータページをデータベース層構成要素560に返信データ記録544として送ることができ、データベース層構成要素560は、次にデータページを1つ以上のクライアントプロセス510にデータベースクエリ応答517として送ることができる。ある読み取り及び書き込み要求は、分散データベース最適化ストレージシステム530に行われることに加えて、またはその代わりに、データベースエンジンのキャッシュ(例えば、データページキャッシュ335)に行うことができることに留意されたい。解析された最適化するある読み取り要求の一部として、読み取りクエリ計画の一部または全部は、読み取りを実行するために読み取り用レプリカ522に渡すことができる。
[0071]
いくつかの実施形態では、様々なエラー及び/またはデータ損失メッセージ534は、分散データベース最適化ストレージシステム530からデータベースエンジン520に(具体的には、クライアント側ドライバ540に)に送ることができる。これらのメッセージは、エラー及び/または損失報告メッセージ545としてクライアント側ドライバ540からデータベース層構成要素560に、次にデータベースクエリ応答517と共に(またはその代わりに)1つ以上のクライアントプロセス510に、渡すことができる。
[0072]
本明細書に記載のように、様々な実施形態では、書き込み要求の場合、クライアント側ドライバ540は、キャッシュ無効化指示546(例えば、通知及び/または1つ以上のやり直しログ記録531)を、読み取り用レプリカ522のクライアント側ドライバ524に送ることができる。キャッシュ無効化指示546は、キャッシュ526内の1つ以上のキャッシュされたデータ記録が古いことを示すことができる。一実施形態では、キャッシュ無効化指示546は、読み取り用レプリカ522のキャッシュ526が書き込み要求に従って変更されたデータを格納するかどうかに関係なく、読み取り用レプリカ522に送ることができる。別の実施形態では、データベースエンジン520は、存在する場合、どの読み取り用レプリカ(複数可)が書き込み要求によって変更されたデータに対応するデータを格納しているかを決定し、それらの読み取り用レプリカ(複数可)にキャッシュ無効化指示546を選択的に送ることができる。
[0073]
いくつかの実施形態では、クライアントプロセス(複数可)510は、データベース読み取り要求572を読み取り用レプリカ522に直接提出し、データベースを照会することができる。古くないキャッシュされたデータに対する要求の場合、読み取り用レプリカは、要求されたデータをキャッシュ526から取り出し、それをクライアントプロセス(複数可)にデータベース読み取り応答576として返すことができる。古いデータとしてキャッシュ526内に存在するデータ記録に対する、またはキャッシュ526内に存在しないデータ記録に対する、要求の場合、クライアント側ドライバ524は、ページ要求(複数可)573を分散データベース最適化ストレージシステム530に送ることができ、要求されたデータページ(複数可)574は、データベース読み取り応答576として、読み取り用レプリカ522に返され、次にクライアントプロセス(複数可)510に提供することができる。一実施形態では、データページ(複数可)574は、読み取り用レプリカ522のクライアント側ドライバ524を介してルーティングすることができ、データページ(複数可)は、キャッシュ526内に格納され、古いキャッシュされたデータを交換する、またはコールドデータ(例えば、他のキャッシュされたデータよりアクセスされる頻度が低い)として決定されたある他のデータを交換する、ことができる。
[0074]
様々な実施形態では、読み取り用レプリカ522は、主ノード/データベースエンジンに転換することができる。そうすることで、転換された読み取り用レプリカは、データベースエンジン520に示された構成要素、及び図5に示されていない他のもの(例えば、データページキャッシュ335、トランザクション及び一貫性管理330など)の全てを含むように構成することができる。そのような転換の準備を支援するために、データベースエンジン520(まだ主ノードである間)は、データベースエンジンのキャッシュ(例えば、データページキャッシュ335)に格納されたデータページの指示(図5に示されていないが、クライアント側ドライバ540からクライアント側ドライバ524に送ることができる)を、読み取り用レプリカ522に送ることができる。本明細書に記載のように、指示は、読み取り及び書き込み側でホットである(例えば、最も活発に読み取られ、かつ書き込まれる)データページのマニフェストであることができる。読み取り用レプリカ522は、次にそれらのデータページのバージョンを、例えば、分散データベース最適化ストレージサービス530から取り出すことができ、それらの取り出したデータページをキャッシュに格納することができる。マニフェスト/指示は、周期的に(例えば、毎時、毎日など)、またはある事象の際に(例えば、読み取り/書き込み毎に、10回の読み取り/書き込み毎に、可能性のある主ノードのフェイルオーバーを示すある内部主ノードロジックの際に)送ることができる。このように、読み取り用レプリカ522のキャッシュ526は、以前より比較的ウォームであることができ、これは、より迅速なリカバリ及び障害が発生した際の主ノードへの転換を促進することができる。
[0075]
様々な実施形態では、本明細書で記載のように、以前の主ノードのデータベースエンジン520から読み取り用レプリカ522に対して実行中途であって、読み取り用レプリカ522に対して未知である(例えば、示されていない、受け取られていない)が、分散データベース最適化ストレージサービス530によって受け取られたトランザクション(例えば、書き込み)に対応するログ記録(例えば、やり直し及び/または取り消し)が存在することができる。したがって、マニフェストがキャッシュ526を多少最新に維持するのに役立つ場合でも、キャッシュ526は、それにもかかわらず、まだいくつかの古いエントリを含む場合がある。したがって、一実施形態では、新規の主ノードに転換される読み取り用レプリカ522は、読み取り用レプリカ522が受け取った最後のログ記録(例えば、LSNのような単調に増加する識別子によって識別される)がどれであったかを(転換の前後に)決定することができる。読み取り用レプリカ522は、次に、決定された変更した最後のログ記録よりも後のそれぞれの識別子を有するログ記録に対応するキャッシュ526内のデータを無効化することができる。読み取り用レプリカは、実際のログ記録及び/またはデータ記録を(例えば、分散データベース最適化ストレージデバイス530に)要求し、キャッシュ526をもはや古くないように更新することができる。更にまたはあるいは、読み取り用レプリカ522は、実行中途のトランザクションのインメモリ構造(例えば、トランザクションテーブル)を維持することができる。読み取り用レプリカは、実行中途のトランザクションを分散データベース最適化ストレージサービス530に要求し、次にインメモリ構造を実行中途のトランザクションで更新することができる。一実施形態では、転換された読み取り用レプリカは、実行中途のトランザクションの特定のトランザクションが主ノードの障害に関連していた(例えば、それをクラッシュさせた)ことを決定し、そのトランザクションの変更をロールバックする(例えば、それを適用しない)ことができる。分散データベース最適化ストレージサービス530のようなログ構造化ストレージシステムでは、分散データベース最適化ストレージサービス530によって提供される実行中途のトランザクションは、各々の実行中途のトランザクションを含まなくてもよいということに留意されたい。例えば、実行中途のトランザクションが、データ記録Xを値「1」から値「2」に変更したLSN1によって識別されるやり直しログ、次にデータ記録Xを値「4」に変更したLSN2によって識別されるやり直しログを含み、LSN2に関連する変更を取り消したLSN3によって識別される取り消しログが続いた場合には、分散データベース最適化ストレージサービス530は、LSN1によって識別されたやり直しログ(LSN2及び3に関連するログではない)を読み取り用レプリカに提供するだけでもよい。
[0076]
様々な実施形態では、図5において、データベースエンジン520と分散データベース最適化ストレージシステム530との間のAPI呼出し及び応答(例えば、API531〜534)、並びに/またはクライアント側ドライバ540とデータベース層構成要素560との間のAPI呼出し及び応答(例えば、API541〜545)、並びに/または読み取り用レプリカ522と分散データベース最適化ストレージシステム530との間のAPI呼出し及び応答(例えば、API573、574)、並びに/またはクライアント側ドライバ524とキャッシュ526との間のAPI呼出し及び応答(例えば、API575及び547)は、安全なプロキシ接続(例えば、ゲートウェイ制御プレーンによって管理される1つ)を介して実行することができ、またはパブリックネットワークを介して若しくは、あるいは、仮想プライベートネットワーク(VPN)接続のようなプライベートチャネルを介して、行うことができることに留意されたい。本明細書の記載のデータベースシステムの構成要素に対する及び/またはそれらの間のこれら及び他のAPIは、限定するものではないが、シンプルオブジェクトアクセスプロトコル(SOAP)技術及びRepresentational State Transfer(REST)技術を含めて、異なる技術に従って実装することができる。例えば、これらのAPIは、必ずしもではないが、SOAP APIまたはRESTful APIとして実装することができる。SOAPは、ウェブベースサービスの状況で情報を交換するためのプロトコルである。RESTは、分散ハイパーメディアシステムに適するアーキテクチャスタイルである。RESTful API(RESTfulウェブサービスとも呼ぶことができる)は、HTTP及びREST技術を使用して実装されるウェブサービスAPIである。本明細書に記載のAPIは、いくつかの実施形態では、データベースエンジン520及び/または分散データベース最適化ストレージシステム530との統合をサポートするために、限定するものではないが、C、C++、Java、C♯、及びPerlを含む様々な言語のクライアントライブラリでラップすることができる。
[0077]
上述のように、いくつかの実施形態では、データベースシステムの機能的構成要素は、データベースエンジンによって行われるものと別個の分散データベース最適化ストレージシステムで行われるものとの間に分配することができる。1つの特定の実施例では、クライアントプロセス(またはそのスレッド)から何かをデータベーステーブルに挿入する(例えば、記録をデータブロックに加えることによって単一のデータブロックを更新するために)要求を受け取ることに応じて、主ノードの1つ以上の構成要素は、クエリ解析、最適化、及び実行を行うことができ、クエリの各々の部分をトランザクション及び一貫性管理構成要素に送ることができる。トランザクション及び一貫性管理要素は、他のクライアントプロセス(またはそのスレッド)が同じ行を同時に変更することを試みてないことを保証することができる。例えば、トランザクション及び一貫性管理構成要素は、この変更がデータベース内で不可分的に、一貫して、永続的に、かつ独立した方法で行われるのを保証することを担当することができる。例えば、トランザクション及び一貫性管理構成要素は、主ノードのクライアント側ストレージサービスドライバと共に動作し、分散データベース最適化ストレージサービス内のノードの1つに送られるやり直しログ記録を生成し、かつそれを分散データベース最適化サービスに(他のクライアント要求に応じて生成された他のやり直しログと一緒に)ACID特性がこのトランザクションに適合することを保証する順番及び/またはタイミングで送ることができる。やり直しログ記録(ストレージサービスによって「更新記録」と見なすことができる)を受け取ると、対応するストレージノードは、データブロックを更新することができ、データブロックについてのやり直しログ(例えば、データブロックに向けられた全ての変更の記録)を更新することができる。いくつかの実施形態では、データベースエンジンは、この変更についての取り消しログを生成することを担当することができ、更に取り消しログについてのやり直しログ記録を生成することを担当することができ、それらの両方は、トランザクション機能を保証するためにローカルで(データベース層内で)使用することができる。しかしながら、従来のデータベースシステムとは異なり、本明細書に記載のシステムは、変更をデータブロックに適用するための責任をストレージシステムにシフトすることができる(データベース層でそれらを適用し、変更されたデータブロックをストレージシステムに送るのではなく)。
[0078]
図6を参照すると、様々な実施形態では、データベースシステム300は、データベース書き込みに応じて、読み取り用レプリカ内のキャッシュエントリを無効化するように構成することができる。図6の方法は、図3〜5の主ノード、読み取り用レプリカ、または読み取り用レプリカ及び/若しくは主ノードのクライアント側ドライバのような分散データベースシステムの様々な構成要素(例えばノード)によって行われるものとして説明できるが、この方法は、いくつかの場合では、いずれかの特定の構成要素によって行われる必要がない。例えば、いくつかの場合では、図6の方法は、いくつかの実施形態に従って、ある他の構成要素またはコンピュータシステムによって行うことができる。または、いくつかの場合では、データベースシステム300の構成要素は、図3〜5の実施例に示されるものとは異なる方法で組み合わせられる、または存在することができる。様々な実施形態では、図6の方法は、分散データベースシステムの1つ以上のノードによって行うことができ、それらのうちの1つは、図10のコンピュータシステムとして示される。図6の方法は、データベース書き込みに応じて、読み取り用レプリカ内のキャッシュエントリを無効化するための方法の一実施例の実現形態として示される。他の実現形態では、図6の方法は、追加のまたは示されているものよりも少ないブロックを含むことができる。例えば、図6の方法は、図7、8、及び/または9の方法の1つ以上のブロックと組み合わせて使用することができる。
[0079]
610では、データベースサービスによって格納されたデータ記録に対する変更を指定する書き込み要求を受け取ることができる。例えば、書き込み要求(例えば、挿入、更新、削除など)は、主ノードによってデータベースサービスのクライアントから受け取ることができる。書き込み要求は、データベーステーブルに格納された所与のデータ記録に行われる変更を指定することができる。簡単な実施例として、書き込み要求は、データ記録Aを値「2」に変更することを指定することができる。
[0080]
620に示されるように、データ記録に行われる変更を表すログ記録を生成することができる。一実施形態では、主ノード(クライアント側ドライバ)は、データ記録への変更を示すことができるログ記録を生成することができる(例えば、全データページ自体を含まず、値を「2」に変更することになるデータ記録Aに対する変更)。そのような実施形態では、ログ記録は、データ記録自体を含む変更されたデータページ全体でなくてもよい。
[0081]
630に示されるように、ログ記録は、所与のデータ記録を含むデータページのバージョンを格納する分散ストレージサービスの特定のサーバーノード(または複数のサーバーノード)へ送ることができる(例えば、主ノードのクライアント側ドライバによって)。サーバーノードは、次にログ記録からの変更をサーバーノードによって格納された実際のデータページに適用することができる。
[0082]
640に示されるように、読み取り用レプリカのキャッシュ内に格納された所与のデータ記録のキャッシュされたバージョンが古いことを示すキャッシュ無効化指示は、読み取り用レプリカに(または、複数の読み取り用レプリカに)送ることができる。本明細書に記載のように、様々な実施形態では、キャッシュ無効化指示は、対応するキャッシュされたデータが古くなっている所与のデータ記録を識別する単純な通知であることができ、それは、次に読み取り用レプリカによって格納することができ、かつ/またはそれはまた、ストレージサービスに送られた実際のログ記録を含むことができる(例えば、データ記録のキャッシュされたバージョンに対する読み取り用レプリカによる適用のために)。通知は、読み取り用レプリカによって維持されるデータ構造内に格納することができ、それによって古いデータに対応するデータに対する後続の要求では、読み取り用レプリカは、データが古いことを周知であり、それをそのキャッシュからではなくストレージサービスから取り出す。キャッシュ無効化指示が実際のログ記録を含む実施形態では、読み取り用レプリカは、ログ記録によって指定された変更をそのキャッシュに適用することができる。そうした後、そのキャッシュエントリ(及びデータ記録)は、もはや古いものとして示されなくてもよい。例えば、そのキャッシュを更新した後、クライアント側ドライバまたは読み取り用レプリカのある他の構成要素は、その特定のデータ記録について古くなっているキャッシュの指示を削除することができる(例えば、古くなっているキャッシュのエントリのリストを維持するデータ構造から)。いくつかの実施形態では、システムは非同期であることができ、読み取り用レプリカのキャッシュは古くなっている場合もあるので、それは、ストレージサービスによって格納されたもの及び主ノードからのログ記録で示されたものに基づいて、そのキャッシュを更新することができることに留意されたい。図7は、そのようなシナリオを以下でより詳細に説明する。
[0083]
図7を参照すると、様々な実施形態において、読み取り用レプリカは、読み取り要求を受け取り、それに応答するように構成することができる。図7の方法は、図3〜5の読み取り用レプリカまたは読み取り用レプリカのクライアント側ドライバのような分散データベースシステムの様々な構成要素(例えば、ノード)によって行われるものとして説明することができるが、この方法は、いくつかの場合では、いずれかの特定の構成要素によって行われる必要がない。例えば、いくつかの場合では、図7の方法は、いくつかの実施形態に従って、ある他の構成要素またはコンピュータシステムによって行うことができる。または、いくつかの場合では、データベースシステム300の構成要素は、図3〜5の実施例に示されるものとは異なる方法で組み合わせる、または存在することができる。様々な実施形態では、図7の方法は、分散データベースシステムの1つ以上のノードで行うことができ、それらのうちの1つは、図10のコンピュータシステムとして示される。図7の方法は、読み取り要求を受け取り、かつそれに応答する読み取り用レプリカのための方法の一実施例の実現形態として示される。他の実現形態では、図7の方法は、追加のまたは示されたものよりも少ないブロックを含むことができる。例えば、図7の方法は、図6、8、及び/または9の方法の1つ以上のブロックと組み合わせて使用することができる。
[0084]
710に例示されているように、読み取り用レプリカは、データ記録(古くなっているエントリに対応する)を読み取る要求を(例えば、クライアントから)受け取ることができる。データ記録を読み取る要求は、ブロック610〜640が行われた後のある時に起こることができる。例えば、多くの読み取り及び/または書き込みは、ブロック710で、古くなっているエントリに対応するデータ記録に対する要求を受け取る前に、他のデータ記録に対して起こることができる。または、そのデータ記録が特別にホットである場合には、それは、データベース層によって受け取られる次の要求であってもよい。
[0085]
読み取り用レプリカはまた、他のデータ記録に対する要求を受け取ることができる(例えば、キャッシュ内で古くなっていないもの、キャッシュにまったく格納されていないもの)ことに留意されたい。キャッシュ内で古くなっていないデータ記録に対する要求の場合、読み取り用レプリカは、単に要求されたデータをそのキャッシュからクライアントに返すことができる。読み取り用レプリカのキャッシュに格納されていないデータ記録に対する要求の場合、読み取り用レプリカは、データを分散ストレージサービスに要求し、そのデータをストレージ層から受け取り、そのデータをキャッシュ内に格納し、そのデータを要求するクライアントに提供することができる。
[0086]
720では、読み取り用レプリカのキャッシュ内のデータ記録のキャッシュされたバージョンが古くなっていることを決定することができる。例えば、一実施形態では、そのような決定は、キャッシュ無効化指示がその特定のデータ記録に対して存在する/アクティブであるかどうかの決定に基づくことができる。例えば、一実施形態では、読み取り用レプリカは、どのデータ記録(複数可)に関連するかを含むそのような指示を格納することができる(例えば、データ構造内に)。一実施形態では、古くなっているキャッシュデータの場合、読み取り用レプリカは、要求するクライアントに古くなっているデータを返さなくてもよい。別の実施例では、システムは非同期であることができるので、読み取り用レプリカは、5の値を有する時間的識別子(例えば、LSN)が付けられた最新性であるデータ記録のバージョンをそのキャッシュ内に格納することができる。主ノードによってストレージサービスに及び読み取り用レプリカに送られたログ記録は、10のLSNを有することができる。また、ストレージサービスによって格納されたデータのバージョンは、LSN9の時点で最新性であることができる。そのような実施例では、読み取り用レプリカは、そのバージョンが、それが主ノードから受け取るログ記録から更に離れて古くなっていることを決定することができる。本明細書に記載のように、このような実施例では、読み取り用レプリカは、そのキャッシュを主ノードからのログ記録で更に更新する前に、ストレージサービスにログ記録を要求し、そのキャッシュを更新することができる。
[0087]
730に示されるように、読み取り用レプリカは、分散ストレージサービスにデータ記録の現在のバージョンを要求することができる。一実施形態では、分散ストレージサービスは、読み取り用レプリカからの要求に応じて、要求されたデータ記録の現在のバージョン(または、キャッシュされたバージョンを更新するための1つ以上のログ記録)を読み取り用レプリカに返すことができる。上記の実施例を続けると、読み取り用レプリカは、5のLSNの時点で最新性であるデータのバージョンを格納することができ、ストレージサービスは、LSN9の時点で最新性のバージョンを格納することができ、主ノードによって送られるログ記録は、LSN10に関連付けることができる。このような実施例では、読み取り用レプリカは、ストレージサービスから、LSN9の時点のデータ記録または5〜9の間のLSNに関連付けられた1つ以上のログ記録を要求して取り出し、それらのログ記録をそれ自体で適用することができる。この時点で、読み取り用レプリカのそのデータ記録についてのキャッシュエントリは、LSN9の時点で最新性であることができる。次に、読み取り用レプリカは、LSN9の時点で最新性であるそのキャッシュされたバージョンを、主ノードからのログ記録で更に更新し、LSN10の時点のデータ記録の現在のバージョンを作成することができる。次に、読み取り用レプリカは、古くなっているキャッシュされたデータを、分散ストレージサービスからのデータ記録の現在のバージョンと交換することができ、740で示されるように、次に、読み取り用レプリカは、要求するクライアントにデータ記録の現在のバージョンを送ることができる。
[0088]
いくつかの実施形態では、ブロック720及び730は、ブロック710で特定のデータ記録に対する要求を必要とせずに、主ノードからログ記録を受け取ると、行うことができる。同様のシナリオは、図8のブロック830で後述する。更に、読み取り用レプリカのキャッシュの更新は、主ノードからの無効化指示(例えば、ログ記録)を受け取ることに応じる以外の時点で行うことができることに更に留意されたい。例えば、読み取り用レプリカは、ストレージサービスによって格納されたデータ記録のバージョンがより最新である(例えば、より後のLSNに関連付けられる)ことを決定し、最新のデータ記録またはログ記録を要求して受け取り、それ自体のキャッシュに適用することができる。
[0089]
図8を参照すると、様々な実施形態では、データベースシステム300は、読み取り用レプリカのキャッシュを更新する(ウォームを維持する)ように構成することができる。図8の方法は、図3〜5の読み取り用レプリカまたは読み取り用レプリカのクライアント側ドライバのような分散データベースシステムの様々な構成要素(例えば、ノード)によって行われるものとして説明することができるが、この方法は、いくつかの場合では、いずれかの特定の構成要素によって行われることを必要としない。例えば、いくつかの場合では、図8の方法は、いくつかの実施形態に従って、ある他の構成要素またはコンピュータシステムによって行うことができる。または、いくつかの場合では、データベースシステム300の構成要素は、図3〜5の実施例に示されるものとは異なる方法で組み合わせるまたは存在することができる。様々な実施形態では、図8の方法は、分散データベースシステムの1つ以上のノードによって行うことができ、それらのうちの1つは、図10のコンピュータシステムとして示される。図8の方法は、読み取り用レプリカのキャッシュを更新するための方法の一実施例の実現形態として示される。他の実現形態では、図8の方法は、追加のまたは示されたものよりも少ないブロックを含むことができる。例えば、図8の方法は、図6、7、及び/または9の方法の1つ以上のブロックと組み合わせて使用することができる。
[0090]
810に示されるように、どのデータページが主ノードのキャッシュ内に格納されているかの指示は、例えば、主ノードから読み取り用レプリカによって受け取ることができる。一実施形態では、この指示は、読み取り及び書き込み側でホットであるページに対応することができる主ノードのキャッシュに存在するデータページのマニフェストであることができる。マニフェスト/指示は、周期的に(例えば、毎時、毎日など)、またはある事象の際に(例えば、読み取り/書き込み毎に、10回の読み取り/書き込み毎に、可能性のある主ノードのフェイルオーバーを示すある内部主ノードロジックの際に)送ることができる。
[0091]
820では、読み取り用レプリカのキャッシュは、主ノードのキャッシュ内に格納されたデータページのバージョンで更新することができる。例えば、読み取り用レプリカは、例えば分散データベース最適化ストレージサービスからのマニフェストから、データページのバージョンを要求する/取り出すことができる。読み取り用レプリカは、次にそれらの取り出したデータページをそれらのそれぞれのキャッシュ内に保存することができる。このように、読み取り用レプリカのキャッシュは、ウォームであることができ、それによって、主ノードへの転換/フェイルオーバーの発生時により迅速な転換/起動を可能にすることができる。
[0092]
830に例示されるように、読み取り用レプリカのキャッシュは、実行中途のトランザクションで更新することができる。一実施形態では、以前の主ノードから読み取り用レプリカに対して実行中途であって、読み取り用レプリカに対して未知である(例えば、示されていない、受け取られていない)が、分散ストレージサービスによって受け取られたトランザクションに対応するログ記録(例えば、やり直し及び/または取り消し)が存在することができる。したがって、マニフェストが読み取り用レプリカのそれぞれのキャッシュを多少最新に維持するのに役立つ場合でも、キャッシュは、それにもかかわらず、まだいくつかの古いエントリを含む場合がある。したがって、一実施形態では、新規の主ノードに転換される読み取り用レプリカ及び/または多くの読み取り用レプリカは、読み取り用レプリカが認識している最後のログ記録(例えば、LSNのような単調に増加する識別子によって識別される)がどれであったかを(転換の前後に)決定することができる。読み取り用レプリカは、次に、分散ストレージサービスに、どのデータ記録が読み取り用レプリカが認識している最後のログ記録よりも後のログ記録に関連付けられているかを要求することができる。その情報から、読み取り用レプリカは、どのデータが古くなっているか(読み取り用レプリカが認識していなかったログ記録に関連付けられた記録)を決定し、それをそのように示すことができる。一実施形態では、読み取り用レプリカは、次に、それ自体のキャッシュを更新してそれがもはや無効でない/古くないようにするために、実際のログ記録及び/またはデータ記録を要求することができる。
[0093]
一実施形態では、読み取り用レプリカは、実行中途のトランザクションのトランザクションテーブルを維持することができる。実行中途のトランザクションは、本明細書では、分散ストレージサービスが主ノードから受け取ったが読み取り用レプリカのいずれによっても知られていない/受け取られていないデータ、に対するトランザクションを説明するために使用される。読み取り用レプリカは、分散ストレージサービスが実行中途のトランザクションを読み取り用レプリカに送るように要求し、次にインメモリ構造(例えば、トランザクションテーブル)を実行中途のトランザクションで更新することができる。転換された読み取り用レプリカは、実行中途のトランザクションの特定のトランザクションが主ノードの障害に関連していた(例えば、それをクラッシュさせた)ことを決定し、そのトランザクションの変更をロールバックする(例えば、それを適用しない)ことができる。
[0094]
図9を参照すると、様々な実施形態では、データベースシステム300は、読み取り用レプリカを新規の主ノードに転換する(例えば、フェイルオーバーする)ように構成することができる。図9の方法は、図3〜5の読み取り用レプリカまたは読み取り用レプリカのクライアント側ドライバのような分散データベースシステムの様々な構成要素(例えば、ノード)によって行われるものとして説明することができるが、この方法は、いくつかの場合では、いずれかの特定の構成要素によって行われることを必要としない。例えば、いくつかの場合では、図9の方法は、いくつかの実施形態に従って、ある他の構成要素またはコンピュータシステムによって行うことができる。または、いくつかの場合では、データベースシステム300の構成要素は、図3〜5の実施例に示されるものとは異なる方法で組み合わせるまたは存在することができる。様々な実施形態では、図9の方法は、分散データベースシステムの1つ以上のノードによって行うことができ、それらのうちの1つは、図10のコンピュータシステムとして示される。図9の方法は、読み取り用レプリカを主ノードに転換する/フェイルオーバーするための方法の一実施例の実現形態として示される。他の実現形態では、図9の方法は、追加のまたは示されたものよりも少ないブロックを含むことができる。例えば、図9の方法は、図6、7、及び/または8の方法の1つ以上のブロックと組み合わせて使用することができる。
[0095]
910では、データベース主ノードの障害事象を検出することができる。主ノードの障害は、電力の損失、使用可能なメモリ無し、システム不具合などのように主ノードが機能を継続できないシステムの障害の全てのタイプであることができる。検出は、様々な方法で起こることができる。例えば、特定の読み取り用レプリカのクライアント側ドライバは、障害が発生した主ノードと通信できなくなることがある。別の実施例では、障害が発生した主ノードは、主ノードの差し迫った障害を示す困窮の指示を読み取り用レプリカの1つ以上に配信することができる。障害を検出する他の実施例もまた、存在する。
[0096]
920に例示されるように、読み取り用レプリカは、主ノードに転換され、以前の主ノードを交換することができる。このような転換は、障害が発生した主ノードを交換するためのフェールオーバープロセスの一部であることができる。どの読み取り用レプリカを主ノードに転換するかは、本明細書に記載のように、様々な方法に従って決定することができる(例えば、事前に選択される、支持される、最初に検出したもの、ウェブサービスプラットフォームによって選択される、など)。一実施形態では、転換された読み取り用レプリカは、ストレージ層並びに他の読み取り用レプリカとの確立された接続を既に有することができる。そうでない場合、920での転換はまた、そのような接続を確立することを含むことができる。実行中途のトランザクションが、転換された読み取り用レプリカのキャッシュが完全に最新でない状態で、存在する場合、図8の方法の1つ以上のブロックは、キャッシュを更に更新するように行うことができる。本明細書に記載のように、読み取り用レプリカは、主ノードによって書き込まれるものと同じデータストレージに付属するので、読み取り用レプリカ用と主ノード用に別個のストレージを使用するシステムとは対照的に、読み取り用レプリカを主ノードに転換する際にデータの損失が起こらないことが可能である。
[0097]
930に示されるように、新規の主ノードは、例えば、他の読み取り用レプリカによる、クライアントによる、及び/またはストレージサービスによる、アクセスに使用可能にすることができる。例えば、一実施形態では、新規の主ノードは、読み取り用レプリカ及び/またはストレージサービス(及び/または、存在する場合、アクティブなクライアント)と通信することができ、それが新規の主ノードであることを示し、かつそれが準備完了状態にあることを示すことができる。
[0098]
開示された読み取り用レプリカは、データブロックレベルで(永続的なストレージへの)物理的複製を必要としないことにより、及び/またはディスクの両方のセットに実行される更新で2つのデータベース全体を必要としないことにより、効率を向上することができる。代わりに、主ノード及び読み取り用レプリカは、同じストレージに付属することができる。更に、キャッシュは、同期に(またはほぼ同期に)維持することができるので、それは、読み取り用レプリカ間のロッキングまたは一貫性を必要としない能力を向上することができる。キャッシュを同期に維持することはまた、新規の主ノードにウォームのキャッシュを既に備えさせることにより、主ノードへの読み取り用レプリカのフェイルオーバー/転換を促進することができ、それによって障害リカバリ時間全体を効果的に減少することができる。
[0099]
本明細書に記載の方法(例えば、図6〜9)は、様々な実施形態では、ハードウェア及びソフトウェアの任意の組み合わせによって実装することができる。例えば、一実施形態では、方法は、プロセッサに結合されたコンピュータ可読ストレージ媒体に格納されたプログラム命令を実行する1つ以上のプロセッサを含むコンピュータシステム(例えば、図10のようなコンピュータシステム)によって実装することができる。プログラム命令は、本明細書に記載の機能を実装するように構成することができる(例えば、本明細書に記載のデータベースサービス/システム及び/またはストレージサービス/システムを実装する様々なサーバー及び他の構成要素の機能)。
[0100]
図10は、様々な実施形態に従って、本明細書に記載のデータベースシステムの少なくとも一部を実装するように構成されたコンピュータシステムを示すブロック図である。例えば、コンピュータシステム1000は、様々な実施形態では、データベース層の主ノード、読み取り用レプリカ、またはデータベース層のクライアントに代わってデータベーステーブル及び関連するメタデータを格納する別個の分散データベース最適化ストレージシステムの複数のストレージノードのうちの1つ、を実装するように構成することができる。コンピュータシステム1000は、限定するものではないが、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップまたはノートブックコンピュータ、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、コンシューマデバイス、アプリケーションサーバー、ストレージデバイス、電話、携帯電話、またはコンピューティングデバイスの一般的な任意のタイプ、を含む様々なタイプのデバイスのいずれかであることができる。
[0101]
コンピュータシステム1000は、入力/出力(I/O)インターフェース1030を介してシステムメモリ1020に結合された1つ以上のプロセッサ1010(それらのいずれもシングルまたはマルチスレッドであってよい複数のコアを含むことができる)。コンピュータシステム1000は、I/Oインターフェース1030に結合されたネットワークインターフェース1040を更に含む。様々な実施形態では、コンピュータシステム1000は、1つのプロセッサ1010を含むユニプロセッサシステム、またはいくつかのプロセッサ1010(例えば、2つ、4つ、8つ、または別の適切な数)を含むマルチプロセッサシステムであってよい。プロセッサ1010は、命令を実行することができる任意の適切なプロセッサであってよい。例えば、様々な実施形態では、プロセッサ1010は、x86、PowerPC、SPARC、またはMIPS ISA、または任意の他の適切なISAのような様々なインストラクションセットアーキテクチャ(ISA)のいずれかを実装する汎用または組み込み型プロセッサであってよい。マルチプロセッサシステムでは、プロセッサ1010の各々は、必ずしもではないが、同じISAを共通に実装することができる。コンピュータシステム1000はまた、通信ネットワーク(例えば、インターネット、LANなど)を介して他のシステム及び/または構成要素と通信するための1つ以上のネットワーク通信デバイス(例えば、ネットワークインターフェース1040)を含む。例えば、システム1000で実行されるクライアントアプリケーションは、ネットワークインターフェース1040を使用し、本明細書に記載のデータベースシステムの構成要素の1つ以上を実装するシングルサーバーまたはサーバーのクラスタで実行されるサーバーアプリケーションと通信することができる。別の実施例では、コンピュータシステム1000で実行されるサーバーアプリケーションのインスタンスは、ネットワークインターフェース1040を使用し、他のコンピュータシステム(例えば、コンピュータシステム1090)に実装することができるサーバーアプリケーションの他のインスタンス(または、別のサーバーアプリケーション)と通信することができる。
[0102]
例示された実施形態では、コンピュータシステム1000はまた、1つ以上の永続的ストレージデバイス1060及び/または1つ以上のI/Oデバイス1080を含む。様々な実施形態では、永続的ストレージデバイス1060は、ディスクドライブ、テープドライブ、ソリッドステートメモリ、他のマスストレージデバイス、または任意の他の永続的ストレージデバイスに対応することができる。コンピュータシステム1000(または分散アプリケーションまたはそこで動作するオペレーティングシステム)は、命令及び/またはデータを永続的なストレージデバイス1060に所望に格納することができ、必要に応じて格納された命令及び/またはデータを取り出すことができる。例えば、いくつかの実施形態では、コンピュータシステム1000は、ストレージシステムサーバーノードをホストすることができ、永続的ストレージ1060は、そのサーバーノードに付属するSSDを含むことができる。
[0103]
コンピュータシステム1000は、プロセッサ(複数可)1010によってアクセス可能な命令及びデータを格納するように構成された1つ以上のシステムメモリ1020を含む。様々な実施形態では、システムメモリ1020は、任意の適切なメモリ技術を使用して実装することができる(例えば、キャッシュ、スタティックランダムアクセスメモリ(SRAM)、DRAM、RDRAM、EDORAM、DDR10RAM、同期ダイナミックRAM(SDRAM)、ランバスRAM、EEPROM、不揮発性/フラッシュ型メモリ、または任意の他のタイプメモリのうちの1つ以上)。システムメモリ1020は、本明細書に記載の方法及び技術を実装するために、プロセッサ(複数可)1010によって実行可能であるプログラム命令1025を含むことができる。様々な実施形態では、プログラム命令1025は、プラットフォーム固有バイナリ、Java(商標)バイトコードのような任意のインタプリタ言語、またはC/C++、Java(商標)などのような任意の他の言語、またはそれらの任意の組み合わせで、符号化することができる。例えば、例示された実施形態では、プログラム命令1025は、様々な実施形態では、データベース層の主ノード、複数の読み取り用レプリカのうちの1つ、またはデータベース層のクライアントに代わってデータベーステーブル及び関連のメタデータを格納する別個の分散データベース最適化ストレージシステムの複数のストレージノードのうちの1つ、の機能を実装するように実行可能であるプログラム命令を含む。いくつかの実施形態では、プログラム命令1025は、複数の別個のクライアント、サーバーノード、及び/または他の構成要素を実装することができる。
[0104]
いくつかの実施形態では、プログラム命令1025は、UNIX(登録商標)、LINUX(登録商標)、Solaris(商標)、MacOS(商標)、Windows(商標)などのような様々なオペレーティングシステムのいずれかであることができるオペレーティングシステム(図示せず)を実装するように実行可能な命令を含むことができる。プログラム命令1025のいずれかまたは全ては、様々な実施形態に従ってプロセスを行うためにコンピュータシステム(または、他の電子デバイス)をプログラムするために使用することができる命令を格納した非一時的コンピュータ可読ストレージ媒体を含むことができるコンピュータプログラム製品、またはソフトウェアとして提供することができる。非一時的コンピュータ可読ストレージ媒体は、マシン(例えば、コンピュータ」によって可読である形態(例えば、ソフトウェア、処理アプリケーション)で情報を格納するための任意の機構を含むことができる。概して、非一時的コンピュータアクセス可能媒体は、例えば、I/Oインターフェース1030を介してコンピュータシステム1000に結合されたディスクまたはDVD/CD−ROMなどの、磁気または光媒体のようなコンピュータ可読ストレージ媒体またはメモリ媒体、を含むことができる。非一時的コンピュータ可読ストレージ媒体はまた、システムメモリ1020または別のタイプのメモリとしてコンピュータシステム1000のいくつかの実施形態に含むことができるRAM(例えば、SDRAM、DDR、SDRAM、RDRAM、SRAMなど)、ROMなどのような任意の揮発性または不揮発性媒体を含むことができる。他の実施形態では、プログラム命令は、ネットワークインターフェース1040を介して実装することができるような、ネットワーク及び/または無線リンクなどの通信媒体を介して搬送される伝播信号(例えば、搬送波、赤外線信号、デジタル信号など)の光、音響、または他の形態を使用して通信することができる。
[0105]
いくつかの実施形態では、システムメモリ1020は、本明細書に記載のように構成することができるデータストア1045を含むことができる。例えば、トランザクションログ、取り消しログ、キャッシュされたページデータ、または本明細書に記載のデータベース層の機能を行う際に使用される他の情報のようなデータベース層(例えば、主ノードに)によって格納されているものとして本明細書に記載の情報は、異なる時点及び様々な実施形態では、1つ以上のノード上のシステムメモリ1020のデータストア1045内にまたは別の部分内に、永続的ストレージ1060内に、及び/または1つ以上の遠隔のストレージデバイス1070上に、格納することができる。同じように、読み取り用レプリカのキャッシュ、インメモリデータ構造、マニフェストデータ構造内に格納された様々なデータ記録のような読み取り用レプリカによって格納されているものとして本明細書に記載の情報、及び/または本明細書に記載の読み取り用レプリカの機能を行う際に使用される他の情報は、異なる時点及び様々な実施形態では、1つ以上のノード上のシステムメモリ1020のデータストア1045内にまたは別の部分内に、永続的ストレージ1060内に、及び/または1つ以上の遠隔のストレージデバイス1070上に、格納することができる。同様に、ストレージ層によって格納されているものとして本明細書に記載の情報(例えば、やり直しログ記録、データページ、データ記録、及び/または本明細書に記載の分散ストレージシステムの機能を行う際に使用される他の情報)は、異なる時点及び様々な実施形態では、1つ以上のノード上のシステムメモリ1020のデータストア1045内にまたは別の部分内に、永続的ストレージ1060内に、及び/または1つ以上の遠隔のストレージデバイス1070上に、格納することができる。概して、システムメモリ1020(例えば、システムメモリ1020内のデータストア1045)、永続的ストレージ1060、及び/または遠隔のストレージ1070は、データブロック、データブロックのレプリカ、データブロック及び/若しくはそれらの状態に関連するメタデータ、データベース構成情報、及び/または本明細書に記載の方法及び技術を実装する際に使用される任意の他の情報、を格納することができる。
[0106]
一実施形態では、I/Oインターフェース1030は、ネットワークインターフェース1040または他の周辺インターフェースを介することを含めて、プロセッサ1010とシステムメモリ1020とシステム内の任意の周辺デバイスとの間のI/Oトラフィックを調整するように構成することができる。いくつかの実施形態では、I/Oインターフェース1030は、1つの構成要素(例えば、システムメモリ1020)からのデータ信号を別の構成要素(例えば、プロセッサ1010)による使用に適するフォーマットに転換するために任意の必要なプロトコル、タイミング、または他のデータ変換を行うことができる。いくつかの実施形態では、I/Oインターフェース1030は、例えば、周辺機器相互接続(PCI)バス規格またはユニバーサルシリアルバス(USB)規格の変形のような周辺バスの様々なタイプを介して付属するデバイスに対するサポートを含むことができる。いくつかの実施形態では、I/Oインターフェース1030の機能は、例えばノースブリッジ及びサウスブリッジのような2つ以上の別個の構成要素に分割することができる。更に、いくつかの実施形態では、システムメモリ1020へのインターフェースのようなI/Oインターフェース1030の機能の一部または全部は、プロセッサ1010に直接組み込むことができる。
[0107]
ネットワークインターフェース1040は、コンピュータシステム1000と他のコンピュータシステム1090(1つ以上のストレージシステムサーバーノード、主ノード、読み取り用レプリカノード、及び/または本明細書に記載のデータベースシステムのクライアントを実装することができる)のようなネットワークに付属する他のデバイスとの間でデータの交換を可能にするように構成することができる。更に、ネットワークインターフェース1040は、コンピュータシステム1000と様々なI/Oデバイス1050及び/または遠隔のストレージ1070との間の通信を可能にするように構成することができる。入力/出力デバイス1050は、いくつかの実施形態では、1つ以上の表示端末、キーボード、キーパッド、タッチパッド、走査デバイス、音声若しくは光認識デバイス、または1つ以上のコンピュータシステム1000によるデータの入力若しくは取り出しに適する任意の他のデバイスを含むことができる。複数の入力/出力デバイス1050は、コンピュータシステム1000内に存在することができ、またはコンピュータシステム1000を含む分散システムの様々なノードに分散することができる。いくつかの実施形態では、同様の入力/出力デバイスは、コンピュータシステム1000から分離することができ、ネットワークインターフェース1040などを介して、有線または無線接続により、コンピュータシステム1000を含む分散システムの1つ以上のノードと対話することができる。ネットワークインターフェース1040は、1つ以上の無線ネットワーキングプロトコル(例えば、Wi−Fi/IEEE802.11、または別の無線ネットワーキング規格)を共通にサポートすることができる。しかしながら、様々な実施形態では、ネットワークインターフェース1040は、例えば、イーサネット(登録商標)ネットワークの他のタイプなどの任意の適切な有線または無線汎用データネットワークを介する通信をサポートすることができる。更に、ネットワークインターフェース1040は、アナログ音声ネットワーク若しくはデジタルファイバー通信ネットワークのような電気通信/電話網を介する、Fibre Channel SANのようなストレージエリアネットワークを介する、または任意の他の適切なタイプのネットワーク若しくはプロトコルを介する、通信をサポートすることができる。様々な実施形態では、コンピュータシステム1000は、図10に例示されたものに対してより多い、より少ない、または異なる構成要素を含むことができる(例えば、表示器、ビデオカード、オーディオカード、周辺デバイス、ATMインターフェース、イーサネットインターフェース、フレームリレーインターフェースなどのような他のネットワークインターフェース)。
[0108]
本明細書に記載の分散システム実施形態のいずれも、またはそれらの構成要素のいずれも、1つ以上のウェブサービスとして実装することができる。例えば、データベースシステムのデータベース層内の主ノード及び/または読み取り用レプリカノードは、データベースサービス及び/または本明細書に記載の分散ストレージシステムを用いる他のタイプのデータストレージサービスを、クライアントにウェブサービスとして提示することができる。いくつかの実施形態では、ウェブサービスは、ネットワークを介する相互運用可能なマシンツーマシン対話をサポートするように設計されたソフトウェア及び/またはハードウェアシステムによって、実装することができる。ウェブサービスは、ウェブサービス記述言語(WSDL)のような機械処理可能なフォーマットで記述されるインターフェースを有することができる。他のシステムは、ウェブサービスのインターフェースの記述によって定められた方法で、ウェブサービスと対話することができる。例えば、ウェブサービスは、他のシステムが呼び出すことができる様々な操作を定義し、かつ他のシステムが、様々な操作を要求するとき、適合することを期待することができる特定のアプリケーションプログラミングインターフェース(API)を定義することができる。
[0109]
様々な実施形態では、ウェブサービスは、ウェブサービス要求に関連するパラメータ及び/またはデータを含むメッセージの使用により、要求されるまたは呼び出されることができる。そのようなメッセージは、拡張マークアップ言語(XML)のような特定のマークアップ言語に従ってフォーマットすることができ、かつ/またはシンプルオブジェクトアクセスプロトコル(SOAP)のようなプロトコルを使用してカプセル化することができる。ウェブサービス要求を行うために、ウェブサービスクライアントは、要求を含むメッセージを組み立て、ハイパーテキスト転送プロトコル(HTTP)のようなインターネットベースアプリケーション層転送プロトコルを使用し、メッセージをウェブサービスに対応するアドレス可能なエンドポイント(例えば、ユニフォームリソースロケータ(URL))に搬送することができる。
[0110]
いくつかの実施形態では、ウェブサービスは、メッセージベース技術ではなく、Representational State Transfer(「RESTful」)技術を使用して実装することができる。例えば、RESTful技術に従って実装されたウェブサービスは、SOAPメッセージ内にカプセル化されるのではなく、PUT、GET、またはDELETEのようなHTTP方法内に含まれるパラメータによって、呼び出すことができる。
[0111]
上記は、以下の付記の観点からより良く理解することができる。
1.主ノード、各々がキャッシュを有する複数の読み取り用レプリカ、及び分散ストレージサービスを含むデータベースサービスの複数のノードによって、
データベースサービスのクライアントから、データベーステーブル内の所与のデータ記録に向けられた書き込み要求であって、所与のデータ記録に対して行われる変更を指定する書き込み要求を受け取ることと、
所与のデータ記録に対して行われる変更を表すやり直しログ記録を生成することと、
所与のデータ記録を含むデータページのバージョンを格納する分散ストレージサービスの特定のサーバーノードにやり直しログ記録を送ることと、
やり直しログ記録であって、複数の読み取り用レプリカのそれぞれのキャッシュに格納された所与のデータ記録のキャッシュされたバージョンが古くなっていることを示すやり直しログ記録を複数の読み取り用レプリカに送ることと、を行うことを含み、
複数の読み取り用レプリカのうちの1つの読み取り用レプリカによって受け取られた所与のデータ記録の後続の要求が、分散ストレージサービスからの所与のデータ記録の現在のバージョンを要求する読み取り用レプリカを含む、方法。
2.データベースサービスのクライアントからの読み取り用レプリカによって、所与のデータ記録を読み取る要求を受け取ることと、
読み取り用レプリカのキャッシュに格納された所与のデータ記録のキャッシュされたバージョンが古くなっていることを決定することと、
分散ストレージサービスに、所与のデータ記録の現在のバージョンを要求することと、
所与のデータ記録の現在のバージョンをクライアントに送ることと、を更に含む、付記1に記載の方法。
3.どのデータページが主ノードのキャッシュに格納されているかについての指示を、複数の読み取り用レプリカに送ることと、
複数の読み取り用レプリカのそれぞれのキャッシュを、主ノードのキャッシュに格納されたデータページのバージョンで更新することと、を更に含む、付記1に記載の方法。
4.複数の読み取り用レプリカのうちの1つを、転換時に1つの読み取り用レプリカのキャッシュ内の反映されていない更新からデータを損失することなく、新規の主ノードに転換して主ノードを交換することを更に含む、付記1に記載の方法。
5.1つ以上のコンピューティングノードを備え、それらの各々が少なくとも1つのプロセッサ及びメモリを備え、1つ以上のコンピューティングノードが、データベースサービスを集合的に実装するように構成され、データベースサービスが、主ノード、キャッシュを有する読み取り用レプリカ、及び分散ストレージサービスを備え、
主ノードが、
データベースサービスによって格納された特定のデータ記録に対して行われる変更を指定する書き込み要求を受け取り、
特定のデータ記録に対して行われる変更を表すやり直しログ記録を、特定のデータ記録を含むデータページのバージョンを格納する分散ストレージサービスのサーバーノードに送り、かつ
読み取り用レプリカのキャッシュ内の特定のデータ記録のキャッシュされたバージョンが古くなっていることを示す指示を読み取り用レプリカに送るように構成される、システム。
6.指示がキャッシュ無効化通知である、付記5に記載のシステム。
7.指示がやり直しログ記録であり、読み取り用レプリカが、やり直しログ記録を、読み取り用レプリカのキャッシュに格納された特定のデータ記録のキャッシュされたバージョンに適用するように構成される、付記5に記載のシステム。
8.やり直しログ記録が時間的識別子に関連付けられ、読み取り用レプリカが、
分散サーバーノードから、特定のデータ記録のキャッシュされたバージョンに関連付けられた以前の時間的識別子よりも後の時点を表すそれぞれの時間的識別子を有する1つ以上のログ記録を受け取り、かつ
1つ以上のログ記録及びやり直しログ記録を、特定のデータ記録のキャッシュされたバージョンに適用するように構成される、付記7に記載のシステム。
9.読み取り用レプリカが、
データベースサービスのクライアントから、特定のデータ記録を含むデータページを読み取る要求を受け取り、かつ
読み取り用レプリカのキャッシュ内の特定のデータ記録のキャッシュされたバージョンが古くなっているという指示を受け取ることに応じて、データページの現在のバージョンの要求を、分散ストレージサービスに送るように構成される、付記5に記載のシステム。
10.読み取り用レプリカが、
分散ストレージサービスからデータページの現在のバージョンを受け取り、
特定のデータ記録のキャッシュされたバージョンを、データページの現在のバージョンからの特定のデータ記録の現在のバージョンと交換し、かつ
データページの現在のバージョンを、データベースサービスのクライアントに提供するように更に構成される、付記9に記載のシステム。
11.読み取り用レプリカが、
データベースサービスのクライアントから、データベースサービスによって格納された異なるデータ記録であって、そのキャッシュされたバージョンが古くなっているものとして示されていない異なるデータ記録を読み取る要求を受け取り、かつ
異なるデータ記録のキャッシュされたバージョンを、データベースサービスのクライアントに提供するように構成される、付記5に記載のシステム。
12.読み取り用レプリカが、
主ノードから、主ノードのキャッシュに格納された複数のデータページの指示を受け取り、
分散ストレージサービスから複数のデータページのバージョンを取り出し、かつ
複数のデータページの取り出したバージョンを、読み取り用レプリカのキャッシュに格納するように構成される、付記5に記載のシステム。
13.読み取り用レプリカが、
主ノードの障害に応じて、転換時に読み取り用レプリカのキャッシュ内の反映されていない更新からデータを損失することなく、新規の主ノードに転換するように構成される、付記5に記載のシステム。
14.読み取り用レプリカが、
分散ストレージサービスから、読み取り用レプリカのキャッシュ内のどのデータが古くなっているかを決定し、かつ
決定された古いデータを古いものとして示すように構成される、付記13に記載のシステム。
15.読み取り用レプリカが、
分散ストレージサービスから、分散ストレージサービスが主ノードから受け取ったが、読み取り用レプリカによって以前に受け取られてなかったデータに対する1つ以上のトランザクションを受け取り、かつ
新規の主ノードのトランザクションテーブルを1つ以上のトランザクションで更新するように構成される、付記13に記載のシステム。
16.読み取り用レプリカが、
1つ以上のトランザクションの特定のトランザクションが主ノードの障害に関連していたことを決定し、かつ
特定のトランザクションの変更をロールバックするように構成される、付記15に記載のシステム。
17.データベースサービスの読み取り用レプリカを実装するようにコンピュータ実行可能であるプログラム命令を格納し、読み取り用レプリカが、
主ノードから、読み取り用レプリカのキャッシュ内の特定のデータのキャッシュされたバージョンが古くなっていることを示すログ記録であって、データベースサービスによって格納された特定のデータに対する更新を示すログ記録を受け取り、
データベースサービスのクライアントから、特定のデータを読み取る要求を受け取り、かつ
特定のデータの現在のバージョンに対する要求をデータベースサービスの分散ストレージサービスに送るように構成される、非一時的コンピュータ可読ストレージ媒体。
18.ログ記録がログシーケンス番号に関連付けられ、読み取り用レプリカが、
分散ストレージサービスから、特定のデータのキャッシュされたバージョンのログシーケンス番号より後の時点を示すそれぞれのログシーケンス番号を有する1つ以上のログ記録を受け取り、
分散ストレージサービスからの1つ以上のログ記録及び主ノードからのログ記録を特定のデータのキャッシュされたバージョンに適用し、特定のデータの現在のバージョンを作成し、かつ
特定のデータの現在のバージョンを、データベースサービスのクライアントに提供するように更に構成される、付記17に記載の非一時的コンピュータ可読ストレージ媒体。
19.読み取り用レプリカが、
転換時に読み取り用レプリカのキャッシュ内の反映されていない更新からデータを損失することなく、主ノードの障害の後に新規の主ノードに転換するように更に構成される、付記17に記載の非一時的コンピュータ可読ストレージ媒体。
20.読み取り用レプリカが、
分散ストレージサービスから、読み取り用レプリカのキャッシュ内のどのデータが古くなっているかを決定するように更に構成される、付記17に記載の非一時的コンピュータ可読ストレージ媒体。
21.読み取り用レプリカが、
読み取り用レプリカのトランザクションテーブルを、分散ストレージサービスから受け取った1つ以上のトランザクションであって、読み取り用レプリカによって以前に受け取られていなかった1つ以上のトランザクションで更新するように更に構成される、付記17に記載の非一時的コンピュータ可読ストレージ媒体。
[0112]
図に例示されて本明細書に記載された様々な方法は、方法の例となる実施形態を表す。方法は、手動で、ソフトウェアで、ハードウェアで、またはそれらの組み合わせで実装することができる。いずれの方法の順序は、変更することができ、様々な要素は、追加、並べ替え、組み合わせ、省略、変更等することができる。
[0113]
上記の実施形態はかなり詳細に説明したが、上記の開示が完全に理解されれば、当業者には明らかとなるように、多数の変形及び変更を行うことができる。以下の特許請求の範囲は、そのような変更及び改変の全てを包含し、したがって、上記の説明は限定的ではなく例示的であると見なされるように解釈されることを意図する。

Claims

[1]
主ノード、各々がキャッシュを有する複数の読み取り用レプリカ、及び分散ストレージサービスを含むデータベースサービス における複数ノードによって行われる方法であって、
前記主ノードによって、
前記データベースサービスのクライアントから、データベーステーブル内の所与のデータ記録に向けられた書き込み要求であって、前記所与のデータ記録に対して行われる変更を指定する前記書き込み要求を受け取ることと、
前記主ノードにおいて、前記所与のデータ記録に対して行われる前記変更を表すやり直しログ記録を生成することと、
前記主ノードから前記分散ストレージサービスへのネットワーク接続におけるネットワークを介して、前記所与のデータ記録を含むデータページのバージョンを格納する前記分散ストレージサービスの特定のサーバーノードに前記やり直しログ記録を送ることと、
前記主ノードから前記複数の読み取り用レプリカへのネットワーク接続を介して、前記やり直しログ記録であって、前記複数の読み取り用レプリカのそれぞれのキャッシュに格納された前記所与のデータ記録のキャッシュされたバージョンが古くなっていることを示す前記やり直しログ記録を前記複数の読み取り用レプリカに送ることと、を含み、
前記所与のデータ記録の前記キャッシュされたバージョンが古くなっていることを示す前記やり直しログ記録を受信したことに続いて、前記複数の読み取り用レプリカのうちの1つの読み取り用レプリカによって、前記所与のデータ記録 の要求を受け取り、
前記読み取り用レプリカによって、前記所与のデータ記録の前 記要求を受け取ることに応じて、 前記ネットワークを介して、前記データベースサービスの前記複数のノードから分離された前記分散ストレージサービスから 前記所与のデータ記録の現在のバージョンを得 ること、を含む、
方法。
[2]
前記データベースサービスのクライアントから 前記読み取り用レプリカによって、前記所与のデータ記録を読み取る要求を受け取ることと、
前記読み取り用レプリカの前記キャッシュに格納された前記所与のデータ記録の前記キャッシュされたバージョンが古くなっていることを決定することと、
前記分散ストレージサービスに、前記所与のデータ記録の前記現在のバージョンを要求することと、
前記所与のデータ記録の前記現在のバージョンを前記クライアントに送ることと、を更に含む、請求項1に記載の前記方法。
[3]
どのデータページが前記主ノードのキャッシュに格納されているかについての指示を、前記複数の読み取り用レプリカに送ることと、
前記複数の読み取り用レプリカの前記それぞれのキャッシュを、前記主ノードの前記キャッシュに格納された前記データページのバージョンで更新することと、を更に含む、請求項1に記載の前記方法。
[4]
前記複数の読み取り用レプリカのうちの1つを、転換時に前記1つの読み取り用レプリカの前記キャッシュ内に反映されていない更新からデータを損失することなく、新規の主ノードへ転換して前記主ノードを交換することを更に含む、請求項1に記載の前記方法。
[5]
1つ以上のコンピューティングノードを備え、それらの各々が少なくとも1つのプロセッサ及びメモリを備え、前記1つ以上のコンピューティングノードが、データベースサービスを集合的に実装するように構成され、前記データベースサービスが、主ノード、キャッシュを有する読み取り用レプリカ、及び分散ストレージサービスを備え、
前記主ノードが、
前記データベースサービスによって格納された特定のデータ記録に対して行われる変更を指定する書き込み要求を受け取り、
前記分散ストレージサービスに、ネットワーク接続を介して、前記特定のデータ記録に対して行われる前記変更を表すやり直しログ記録を 送信し前記分散ストレージサービスは、前記データベースサービスから分離され、前記特定のデータ記録を含むデータページのバージョンを格納 、かつ
前記読み取り用レプリカに、別のネットワーク接続を介して、前記読み取り用レプリカの前記キャッシュ内 に保存された前記特定のデータ記録のキャッシュされたバージョンが古くなっていることを示す 前記読み取り用レプリカへの指示 を送るように構成され、
前記読み取り用レプリカは、
前記所与のデータ記録の前記キャッシュされたバージョンが古くなっていることを示す前記やり直しログ記録を受信したことに続いて、前記特定のデータ記録 の要求を受け取り、
前記特定のデータ記録の前記後続の要求を受け取ることに応じて、前記分散ストレージサービスからの前記特定のデータ記録の現在のバージョンを得るための要求を、 第3のネットワーク接続を介して、前記分散ストレージサービスに送信するように構成される、
システム。
[6]
前記指示がキャッシュ無効化通知である、請求項5に記載の前記システム。
[7]
前記指示が前記やり直しログ記録であり、前記読み取り用レプリカが、前記やり直しログ記録を、前記読み取り用レプリカの前記キャッシュに格納された前記特定のデータ記録の前記キャッシュされたバージョンに適用するように構成される、請求項5に記載の前記システム。
[8]
前記やり直しログ記録が、時間的識別子に関連付けられ、前記読み取り用レプリカが、
前記分散 ストレージサービスのサーバーノードから、前記特定のデータ記録の前記キャッシュされたバージョンに関連付けられた以前の時間的識別子よりも後の時点を表すそれぞれの時間的識別子を有する1つ以上のログ記録を受け取り、かつ
前記1つ以上のログ記録及び前記やり直しログ記録を、前記特定のデータ記録の前記キャッシュされたバージョンに適用するように構成される、請求項7に記載の前記システム。
[9]
前記読み取り用レプリカが、
前記データベースサービスのクライアントから、前記特定のデータ記録を含む前記データページを読み取る要求を受け取り、かつ
前記読み取り用レプリカの前記キャッシュ内の前記特定のデータ記録の前記キャッシュされたバージョンが古くなっているという前記指示を受け取ることに応じて、前記データページの現在のバージョンの要求を、前記分散ストレージサービスに送るように構成される、請求項5に記載の前記システム。
[10]
前記読み取り用レプリカが、
前記データベースサービスのクライアントから、前記データベースサービスによって格納された異なるデータ記録であって、そのキャッシュされたバージョンが古くなっているものとして示されていない、前記異なるデータ記録を読み取る要求を受け取り、かつ
前記異なるデータ記録の前記キャッシュされたバージョンを、前記データベースサービスの前記クライアントに提供するように構成される、請求項5に記載の前記システム。
[11]
前記読み取り用レプリカが、
前記主ノードから、前記主ノードのキャッシュに格納された複数のデータページの指示を受け取り、かつ
前記複数のデータページのバージョンを前記分散ストレージサービスから取り出し、前記複数のデータページの前記取り出したバージョンを前記読み取り用レプリカの前記キャッシュ内に格納するように構成される、請求項5に記載の前記システム。
[12]
前記読み取り用レプリカが、
前記主ノードの障害に応じて、転換時に前記読み取り用レプリカの前記キャッシュ内の反映されていない更新からデータを損失することなく、新規の主ノードに転換するように構成される、請求項5に記載の前記システム。
[13]
前記読み取り用レプリカが、
前記分散ストレージサービスから、前記読み取り用レプリカの前記キャッシュ内のどのデータが古くなっているかを決定し、かつ
決定された古くなっているデータを古くなっているものとして示すように構成される、請求項12に記載の前記システム。
[14]
1つ以上のプロセッサと、
1つ以上のメモリと、を備え、前記1つ以上のメモリが、プログラム命令を格納し、前記プログラム命令が、データベースサービスの読み取り用レプリカを実装するようにコンピュータ実行可能であり、前記読み取り用レプリカが、
主ノードから、前記読み取り用レプリカのキャッシュ内 に保存された特定のデータのキャッシュされたバージョンが古くなっていることを示すログ記録であって、前記データベースサービスによって格納された前記特定のデータに対する更新を示す前記ログ記録、を受け取り、
前記ログ記録を受信したことに続いて、前記データベースサービスのクライアントから、前記特定のデータを読み取る要求を受け取り、かつ
前記特定のデータを読み取る前記要求を受け取ることに応じて、ネットワーク接続を介して、前記特定のデータの現在のバージョンの要求を前記データベースサービスの分散ストレージサービスに送るように構成される、
システム。
[15]
前記ログ記録が、ログシーケンス番号に関連付けられ、前記読み取り用レプリカが、
前記分散ストレージサービスから、前記特定のデータの前記キャッシュされたバージョンのログシーケンス番号よりも後の時点を示すそれぞれのログシーケンス番号を有する1つ以上のログ記録を受け取り、
前記分散ストレージサービスからの前記1つ以上のログ記録及び前記主ノードからの前記ログ記録を、前記特定のデータの前記キャッシュされたバージョンに適用し、前記特定のデータの現在のバージョンを作成し、かつ
前記特定のデータの前記現在のバージョンを、前記データベースサービスの前記クライアントに提供するように更に構成される、請求項14に記載の前記システム。

Drawings

[ Fig. 1]

[ Fig. 2]

[ Fig. 3]

[ Fig. 4]

[ Fig. 5]

[ Fig. 6]

[ Fig. 7]

[ Fig. 8]

[ Fig. 9]

[ Fig. 10]