(57)【特許請求の範囲】
【請求項１】
主ノード、各々がキャッシュを有する複数の読み取り用レプリカ、及び分散ストレージサービスを含むデータベースサービスにおける複数ノードによって行われる方法であって、
前記主ノードによって、
前記データベースサービスのクライアントから、データベーステーブル内の所与のデータ記録に向けられた書き込み要求であって、前記所与のデータ記録に対して行われる変更を指定する前記書き込み要求を受け取ることと、
前記主ノードにおいて、前記所与のデータ記録に対して行われる前記変更を表すやり直しログ記録を生成することと、
前記主ノードから前記分散ストレージサービスへのネットワーク接続におけるネットワークを介して、前記所与のデータ記録を含むデータページのバージョンを格納する前記分散ストレージサービスの特定のサーバーノードに前記やり直しログ記録を送ることと、
前記主ノードから前記複数の読み取り用レプリカへのネットワーク接続を介して、前記やり直しログ記録であって、前記複数の読み取り用レプリカのそれぞれのキャッシュに格納された前記所与のデータ記録のキャッシュされたバージョンが古くなっていることを示す前記やり直しログ記録を前記複数の読み取り用レプリカに送ることと、を含み、
前記所与のデータ記録の前記キャッシュされたバージョンが古くなっていることを示す前記やり直しログ記録を受信したことに続いて、前記複数の読み取り用レプリカのうちの１つの読み取り用レプリカによって、前記所与のデータ記録の要求を受け取り、
前記読み取り用レプリカによって、前記所与のデータ記録の前記要求を受け取ることに応じて、前記ネットワークを介して、前記データベースサービスの前記複数のノードから分離された前記分散ストレージサービスから、前記所与のデータ記録の現在のバージョンを得ること、を含む、
方法。
【請求項２】
前記データベースサービスのクライアントから、前記読み取り用レプリカによって、前記所与のデータ記録を読み取る要求を受け取ることと、
前記読み取り用レプリカの前記キャッシュに格納された前記所与のデータ記録の前記キャッシュされたバージョンが古くなっていることを決定することと、
前記分散ストレージサービスに、前記所与のデータ記録の前記現在のバージョンを要求することと、
前記所与のデータ記録の前記現在のバージョンを前記クライアントに送ることと、を更に含む、請求項１に記載の前記方法。
【請求項３】
どのデータページが前記主ノードのキャッシュに格納されているかについての指示を、前記複数の読み取り用レプリカに送ることと、
前記複数の読み取り用レプリカの前記それぞれのキャッシュを、前記主ノードの前記キャッシュに格納された前記データページのバージョンで更新することと、を更に含む、請求項１に記載の前記方法。
【請求項４】
前記複数の読み取り用レプリカのうちの１つを、転換時に前記１つの読み取り用レプリカの前記キャッシュ内に反映されていない更新からデータを損失することなく、新規の主ノードへ転換して前記主ノードを交換することを更に含む、請求項１に記載の前記方法。
【請求項５】
１つ以上のコンピューティングノードを備え、それらの各々が少なくとも１つのプロセッサ及びメモリを備え、前記１つ以上のコンピューティングノードが、データベースサービスを集合的に実装するように構成され、前記データベースサービスが、主ノード、キャッシュを有する読み取り用レプリカ、及び分散ストレージサービスを備え、
前記主ノードが、
前記データベースサービスによって格納された特定のデータ記録に対して行われる変更を指定する書き込み要求を受け取り、
前記分散ストレージサービスに、ネットワーク接続を介して、前記特定のデータ記録に対して行われる前記変更を表すやり直しログ記録を送信し、前記分散ストレージサービスは、前記データベースサービスから分離され、前記特定のデータ記録を含むデータページのバージョンを格納し、かつ
前記読み取り用レプリカに、別のネットワーク接続を介して、前記読み取り用レプリカの前記キャッシュ内に保存された前記特定のデータ記録のキャッシュされたバージョンが古くなっていることを示す前記読み取り用レプリカへの指示を送るように構成され、
前記読み取り用レプリカは、
前記所与のデータ記録の前記キャッシュされたバージョンが古くなっていることを示す前記やり直しログ記録を受信したことに続いて、前記特定のデータ記録の要求を受け取り、
前記特定のデータ記録の前記後続の要求を受け取ることに応じて、前記分散ストレージサービスからの前記特定のデータ記録の現在のバージョンを得るための要求を、第３のネットワーク接続を介して、前記分散ストレージサービスに送信するように構成される、
システム。
【請求項６】
前記指示がキャッシュ無効化通知である、請求項５に記載の前記システム。
【請求項７】
前記指示が前記やり直しログ記録であり、前記読み取り用レプリカが、前記やり直しログ記録を、前記読み取り用レプリカの前記キャッシュに格納された前記特定のデータ記録の前記キャッシュされたバージョンに適用するように構成される、請求項５に記載の前記システム。
【請求項８】
前記やり直しログ記録が、時間的識別子に関連付けられ、前記読み取り用レプリカが、
前記分散ストレージサービスのサーバーノードから、前記特定のデータ記録の前記キャッシュされたバージョンに関連付けられた以前の時間的識別子よりも後の時点を表すそれぞれの時間的識別子を有する１つ以上のログ記録を受け取り、かつ
前記１つ以上のログ記録及び前記やり直しログ記録を、前記特定のデータ記録の前記キャッシュされたバージョンに適用するように構成される、請求項７に記載の前記システム。
【請求項９】
前記読み取り用レプリカが、
前記データベースサービスのクライアントから、前記特定のデータ記録を含む前記データページを読み取る要求を受け取り、かつ
前記読み取り用レプリカの前記キャッシュ内の前記特定のデータ記録の前記キャッシュされたバージョンが古くなっているという前記指示を受け取ることに応じて、前記データページの現在のバージョンの要求を、前記分散ストレージサービスに送るように構成される、請求項５に記載の前記システム。
【請求項１０】
前記読み取り用レプリカが、
前記データベースサービスのクライアントから、前記データベースサービスによって格納された異なるデータ記録であって、そのキャッシュされたバージョンが古くなっているものとして示されていない、前記異なるデータ記録を読み取る要求を受け取り、かつ
前記異なるデータ記録の前記キャッシュされたバージョンを、前記データベースサービスの前記クライアントに提供するように構成される、請求項５に記載の前記システム。
【請求項１１】
前記読み取り用レプリカが、
前記主ノードから、前記主ノードのキャッシュに格納された複数のデータページの指示を受け取り、かつ
前記複数のデータページのバージョンを前記分散ストレージサービスから取り出し、前記複数のデータページの前記取り出したバージョンを前記読み取り用レプリカの前記キャッシュ内に格納するように構成される、請求項５に記載の前記システム。
【請求項１２】
前記読み取り用レプリカが、
前記主ノードの障害に応じて、転換時に前記読み取り用レプリカの前記キャッシュ内の反映されていない更新からデータを損失することなく、新規の主ノードに転換するように構成される、請求項５に記載の前記システム。
【請求項１３】
前記読み取り用レプリカが、
前記分散ストレージサービスから、前記読み取り用レプリカの前記キャッシュ内のどのデータが古くなっているかを決定し、かつ
決定された古くなっているデータを古くなっているものとして示すように構成される、請求項１２に記載の前記システム。
【請求項１４】
１つ以上のプロセッサと、
１つ以上のメモリと、を備え、前記１つ以上のメモリが、プログラム命令を格納し、前記プログラム命令が、データベースサービスの読み取り用レプリカを実装するようにコンピュータ実行可能であり、前記読み取り用レプリカが、
主ノードから、前記読み取り用レプリカのキャッシュ内に保存された特定のデータのキャッシュされたバージョンが古くなっていることを示すログ記録であって、前記データベースサービスによって格納された前記特定のデータに対する更新を示す前記ログ記録、を受け取り、
前記ログ記録を受信したことに続いて、前記データベースサービスのクライアントから、前記特定のデータを読み取る要求を受け取り、かつ
前記特定のデータを読み取る前記要求を受け取ることに応じて、ネットワーク接続を介して、前記特定のデータの現在のバージョンの要求を前記データベースサービスの分散ストレージサービスに送るように構成される、
システム。
【請求項１５】
前記ログ記録が、ログシーケンス番号に関連付けられ、前記読み取り用レプリカが、
前記分散ストレージサービスから、前記特定のデータの前記キャッシュされたバージョンのログシーケンス番号よりも後の時点を示すそれぞれのログシーケンス番号を有する１つ以上のログ記録を受け取り、
前記分散ストレージサービスからの前記１つ以上のログ記録及び前記主ノードからの前記ログ記録を、前記特定のデータの前記キャッシュされたバージョンに適用し、前記特定のデータの現在のバージョンを作成し、かつ
前記特定のデータの前記現在のバージョンを、前記データベースサービスの前記クライアントに提供するように更に構成される、請求項１４に記載の前記システム。
【発明の詳細な説明】
【背景技術】
【０００１】
ソフトウェアスタックの様々な構成要素の分散は、いくつかの場合において、フォルトトレランス（例えば、複製により）、より高い耐久性、及び安価なソリューション（例えば、より少数の大規模の高価な構成要素ではなく、多数のより小規模の安価な構成要素を使用することにより）を提供する（またはサポートする）。しかしながら、データベースは、これまで、分散に対して最も融通性がないソフトウェアスタックの構成要素のうちの１つであった。例えば、提供することが期待されている、いわゆるＡＣＩＤ特性（例えば、不可分性、一貫性、独立性、及び永続性）を確保したままで、データベースを分散することが困難であり得る。
【０００２】
ほとんどの既存のリレーショナルデータベースは分散されていないが、いくつかの既存のデータベースは、２つの一般的なモデル、「無共有」モデル及び「共有ディスク」モデル、のうちの１つを使用し、「スケールアウト」される（単により大きいモノリシックシステムを用いることによって「スケールアップ」されることとは対照的である）。一般的に、「無共有」モデルでは、受け取ったクエリは、データベース断片（各々がクエリの構成要素を含む）に分解され、これらの断片は、クエリ処理のための異なる計算ノードに送られ、結果は、それらが戻される前に収集されて集約される。概して、「共有ディスク」モデルでは、クラスタ内の全ての計算ノードは、同じ基礎となるデータへのアクセスを有する。このモデルを用いるシステムでは、キャッシュコヒーレンシを管理するために細心の注意を払う必要がある。これらのモデルの両方において、大きいモノリシックデータベースは、複数のノード（スタンドアロンデータベースインスタンスの機能の全てを含む）に複製され、「グルー」ロジックは、それらを接続するために追加される。例えば、「無共有」モデルでは、クエリを細分化し、それらを複数の計算ノートに送り、その後結果を組み合わせるディスパッチャの機能を、グルーロジックが提供することができる。共有ディスクモデルでは、グルーロジックは、複数のノードのキャッシュを共に融合するように働くことができる（例えば、キャッシング層でコヒーレンシを管理するために）。これらの「無共有」及び「共有ディスク」データベースシステムは、配備にコストがかかり、維持が複雑である場合もあり、多くのデータベースのユースケースに過剰に働く可能性がある。
【０００３】
第３のモデルは、読み取り処理をスケールアウトするために使用される読み取り用レプリカである。典型的な読み取り用レプリカモデルによれば、データベースの構造に対して変更が行われると、ＳＱＬ記録は、次に全てのレプリカに伝播することができる論理的複製ログに作成することができる。各々のレプリカは、次にデータベースの独自のバージョンでローカルにこれらのＳＱＬステートメントを実行する。ログは非同期で送り出されるので、読み取り用レプリカは、プライマリデータベースから幾分遅れて動作し、読み取り用レプリカをプライマリに昇格させる必要がある場合、データの一部の損失が存在する。
【図面の簡単な説明】
【０００４】
【図１】一実施形態に従うデータベースソフトウェアスタックの様々な構成要素を示すブロック図である。
【図２】いくつかの実施形態に従う開示された読み取り用レプリカを使用するように構成されたウェブサービスベースのデータベースサービスを実装するように構成することができるサービスシステムアーキテクチャを示すブロック図である。
【図３】一実施形態に従う開示された読み取り用レプリカを使用するように構成されたデータベースシステムの様々な構成要素を示すブロック図である。
【図４】一実施形態に従う開示された読み取り用レプリカを使用するように構成された分散データベース最適化ストレージシステムを示すブロック図である。
【図５】一実施形態に従う開示された読み取り用レプリカを使用するように構成されたデータベースシステム内の分離した分散データベース最適化ストレージシステムの使用を示すブロック図である。
【図６】ウェブサービスベースのデータベースサービスの読み取り用レプリカ内のキャッシュ無効化のための方法の一実施形態を示すフロー図である。
【図７】ウェブサービスベースのデータベースサービス内の開示された読み取り用レプリカを使用する読み取りを行うための方法の一実施形態を示すフロー図である。
【図８】ウェブサービスベースのデータベースサービス内の読み取り用レプリカのキャッシュを更新するための方法の一実施形態を示すフロー図である。
【図９】ウェブサービスベースのデータベースサービス内の主ノードに読み取り用レプリカを転換するための方法の一実施形態を示すフロー図である。
【図１０】様々な実施形態に従う効率的な読み取り用レプリカを実装するように構成されたコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【０００５】
実施形態は、いくつかの実施形態及び例示的な図面のための実施例として本明細書に記載されているが、当業者であれば、実施形態が記載された実施形態または図面に限定されるものではないことを認識するであろう。その図面及び詳細な説明は、実施形態を開示された特定の形態に限定することを意図せず、逆に、その意図は、添付の特許請求の範囲によって定義される趣旨及び範囲内に入る全ての変更、均等物、及び代替物に及ぶことが可能であることを理解されたい。本明細書で使用される見出しは、構成上の目的のみのためであり、本明細書または特許請求の範囲の範囲を限定するために使用されるものではない。本出願を通じて使用されているように、「できる」の単語は、必須の意味（すなわち、絶対に必要であることを意味する）ではなく、許容の意味（すなわち、可能性を有することを意味する）で使用される。「含む（ｉｎｃｌｕｄｅ）」、「含み」、及び「含む（ｉｎｃｌｕｄｅｓ）」の単語は、制限のない関係を示し、したがって、含んでいるが限定するものではない、ことを意味する。同様に、「有する（ｈａｖｅ）」、「有し」、及び「有する（ｈａｓ）」もまた、制限のない関係を示し、したがって、有しているが限定するものではない、ことを意味する。本明細書で使用される「第１」、「第２」、「第３」などの用語は、先行する名詞に対するラベルとして使用され、そのような順序は、明示的に示されない限り、いずれのタイプの順序（例えば、空間的、時間的、論理的など）を意味しない。
【０００６】
様々な構成要素は、タスクまたはタスク（複数）を行う「ように構成されている」ものとして説明することができる。このような文脈では、「ように構成されている」は、動作中にタスクまたはタスク（複数）を行う「構造を有する」ことを概して意味する広義の限定である。このように、構成要素は、構成要素がタスクを現在行っていないときでも、タスクを行うように構成することができる（例えば、コンピュータシステムは、操作が現在行われていないときでも、操作を行うように構成することができる）。いくつかの文脈では、「ように構成されている」は、動作中にタスクまたはタスク（複数）を行う「回路を有する」ことを概して意味する構造の広義の記述であることができる。このように、構成要素は、構成要素が現在行われていないときでも、タスクを行うように構成することができる。概して、「ように構成されている」に対応する構造を形成する回路は、ハードウェア回路を含むことができる。
【０００７】
様々な構成要素は、説明の便宜上、タスクまたはタスク（複数）を行うものとして説明することができる。このような記述は、「ように構成されている」の語句を含むものとして解釈されるべきである。１つ以上のタスクを行うように構成されている構成要素を記述することは、３５Ｕ．Ｓ．Ｃ．§１１２、６節、その構成要素の解釈、を発動しないことを明白に意図する。
【０００８】
「に基づく」。本明細書で使用される場合、この用語は、決定に影響を与える１つ以上の因子を説明するために使用される。この用語は、決定に影響を与えることができる追加の因子を除外しない。すなわち、決定は、まったくそれらの因子に基づく、またはそれらの因子に少なくとも部分的に基づく、ことができる。「Ｂに基づいてＡを決定する」の語句を考える。ＢはＡの決定に影響を与える因子であることができるが、このような語句は、Ｃに基づくことにもよるＡの決定を除外しない。他の事例では、Ａは、Ｂにのみ基づいて決定することができる。
【０００９】
本開示の範囲は、本明細書で開示された（明示的または暗黙的のいずれでも）いずれかの特徴若しくは特徴の組み合わせ、またはそのいずれかの一般化を含み、それが本明細書で対処される問題のいずれかまたは全てを緩和するか否かを問わない。したがって、新規の特許請求を、任意のそのような特徴の組み合わせに対して本出願（またはそれに対する優先権を主張する出願）の手続き中に形式化することができる。具体的には、添付の特許請求の範囲を参照し、従属請求項からの特徴は独立請求項のものと組み合わせることができ、それぞれの独立請求項からの特徴は、任意の適切な方法で、かつ添付の特許請求の範囲に列挙された特定の組み合わせだけではなく、組み合わせることができる。
【００１０】
読み取り用レプリカの様々な実施形態を開示する。本実施形態の様々なものは、データベースサービスのクライアントから、データベースサービスによって格納された記録に対して行われる変更を指定する書き込み要求を受け取るデータベースサービスの主ノードを含むことができる。本実施形態の様々なものはまた、記録のバージョンを格納する分散ストレージサービスのサーバーノードに行われる変更を表すやり直しログ記録を送ることを含む。本実施形態の様々なものは、１つ以上の読み取り用レプリカのそれぞれのキャッシュ内に格納されたデータ記録のいずれのキャッシュされたバージョンが古くなっていることの指示（例えば、通知、実際の赤色ログ記録など）を、１つ以上の読み取り用レプリカに送ることを更に含むことができる。読み取り用レプリカによって受け取られたそのデータ記録の後続の読み取りのために、読み取り用レプリカは、キャッシュからの代わりに、分散ストレージサービスからデータ記録の現在のバージョンを取り出すことができる。いくつかの実施形態では、読み取り用レプリカを、データを損失することなく、主ノードに（例えば、主ノードの障害の後に）転換する（例えば、フェイルオーバーする）ように構成することができる。
【００１１】
本明細書は、開示された読み取り用レプリカを含む例となるウェブサービスベースデータベースサービスを最初に説明する。例となるウェブサービスベースデータベースサービスの説明には、データベースエンジン、読み取り用レプリカ、及び分離した分散データベースストレージサービスのような例となるウェブサービスベースデータベースサービスの様々な態様が含まれる。本明細書は、次に読み取り用レプリカを主ノードに転換することを含めて、読み取り用レプリカを維持し、使用するための方法の様々な実施形態のフローチャートを説明する。次に、本明細書は、開示された技術を実装することができる例となるシステムを説明する。様々な実施例は、本明細書を通じて提供される。
【００１２】
本明細書に記載のシステムは、いくつかの実施形態では、クライアント（例えば、加入者）がデータストレージシステムをクラウドコンピューティング環境で操作することを可能にするウェブサービスを実装することができる。いくつかの実施形態では、データストレージシステムは、高度にスケーラブルであり、拡張可能であるエンタープライズクラスデータベースシステムであることができる。いくつかの実施形態では、クエリは、複数の物理的リソースにわたって分散されたデータベースストレージに向けることができ、データベースシステムは、必要に応じて、スケールアップまたはダウンすることができる。データベースシステムは、異なる実施形態において、様々なタイプ及び／または組織のデータベーススキーマと共に有効に機能することができる。いくつかの実施形態では、クライアント／加入者は、複数の方法で、例えばデータベースシステムへのＳＱＬインターフェースを介してインタラクティブに、クエリを提出することができる。他の実施形態では、外部のアプリケーション及びプログラムは、データベースシステムへのオープンデータベース接続性（ＯＤＢＣ）及び／またはＪａｖａデータベース接続性（ＪＤＢＣ）ドライバインターフェースを使用して、クエリを提出することができる。
【００１３】
より具体的には、本明細書に記載のシステムは、いくつかの実施形態では、単一のデータベースシステムの様々な機能構成要素が本質的に分散されたサービス指向データベースアーキテクチャを実装することができる。例えば、複数の完全なデータベースインスタンス及びモノリシックデータベースインスタンス（各々が、アプリケーションサーバー、検索機能、またはデータベースのコア機能を提供するために必要とされるもの以上の他の機能のような外来の機能を含むことができる）を共に固定するのではなく、これらのシステムは、データベースの基本操作（例えば、クエリ処理、トランザクション管理、キャッシング及びストレージ）を、個別に独立してスケーラブルであることが可能である層に編成することができる。例えば、いくつかの実施形態では、本明細書に記載のシステムの各々のデータベースインスタンスは、データベース層（単一の主ノード及びクライアント側ストレージシステムドライバを含むことができる）、及び分離した分散ストレージシステム（既存のシステムのデータベース層で従来行われた操作のいくつかを集合的に行う複数のストレージノードを含むことができる）を含むことができる。
【００１４】
本明細書でより詳細に説明されるように、いくつかの実施形態では、データベースの最低レベルの操作（例えば、バックアップ、復元、スナップショット、リカバリ、及び／または様々なスペース管理操作）のいくつかは、データベースエンジンからストレージ層にオフロードし、複数のノード及びストレージデバイスにわたって分散することができる。例えば、いくつかの実施形態では、データベースエンジンがデータベーステーブル（またはそのデータページ）へ変更を適用し、次に変更されたデータページをストレージ層に送るのではなく、格納されたデータベーステーブル（及びそのデータページ）への変更の適用は、ストレージ層自体の責任であることができる。そのような実施形態では、変更されたデータページではなく、やり直しログ記録をストレージ層に送ることができ、その後やり直し処理（例えば、やり直しログ記録の適用）を多少緩慢に、かつ分散方法で行うことができる（例えば、バックグランドプロセスによって）。いくつかの実施形態では、クラッシュリカバリ（例えば、格納されたやり直しログ記録からのデータページの再構築）もまた、ストレージ層によって行うことができ、また分散された（かつ、いくつかの場合では、緩慢である）バックグランドプロセスによって行うこともできる。
【００１５】
いくつかの実施形態では、変更されたデータページではなくやり直しログがストレージ層に送られるので、データベース層とストレージ層との間には、既存のデータベースシステムよりもはるかに少ないネットワークトラフィックが存在することができる。いくつかの実施形態では、各々のやり直しログは、それが変更を指定する対応するデータページの１０分の１程度であることができる。データベース層及び分散ストレージシステムから送られる要求は非同期であってもよいこと、及び複数のそのような要求は同時に実行中途であってもよいこと、に留意されたい。更に、データベース層の主ノードからデータベース層の読み取り用レプリカに送られる通信（例えば、キャッシュ無効化要求）は、同様に非同期であってもよい。
【００１６】
前述のように、典型的な大規模なデータベースシステムでは、システムの障害の後にデータベースシステムを再起動させる前に、データセット全体を復元する必要がある。これらのデータベースシステムでは、クラッシュの後に、システムは、データページの全てがディスクにフラッシュされたことが既知である最後の時点（例えば、チェックポイント）を決定する必要があり、かつその時点以降からのいかなる変更ログを再生する必要がある。例えば、データベースがクライアントプロセスからの着信クエリを処理するために利用可能とすることができる前に、システムプロセスは、決定されたチェックポイントの後に変更されたデータページの全てを読み込み、かつそれらのデータページにまだ適用されていない該当する変更ログ記録の各々を適用する必要がある。
【００１７】
いくつかの実施形態では、本明細書に記載のデータベースシステムは、データベースのクラッシュのほぼ直後に、データセット全体が復元されるのを待つことなく、障害に続いてデータベースエンジンを再起動させる（例えば、データベースがクエリを受け入れて処理するために利用できるようにする）ことを可能にすることができる。代わりに、クラッシュリカバリが、１つ以上のバックグランドスレッドによって緩慢に行われている間に、クエリを受け取り、処理することができる。例えば、クラッシュに続いて、複数のバックグランドスレッドが、異なるストレージノードで並列に動作し、対応するやり直しログからデータページを再構築することができる。その間に、着信クエリがまだ再構築されていないデータページをターゲットとする場合、ストレージ層は、データページを適切なやり直しログから即座に再作成するように構成することができる。
【００１８】
概して、データの一部が与えられた後、データベースの主要な要件は、それが最終的にそのデータの一部を戻すことが可能なことである。このために、データベースは、いくつかの異なる構成要素（または層）を含むことができ、それらの各々は異なる機能を行う。例えば、従来のデータベースは、３つの層、すなわち、クエリの解析、最適化、及び実行を行う第１の層、トランザクション機能、リカバリ、及び永続性を提供する第２の層、並びにローカル接続ディスクまたはネットワーク接続ストレージのいずれかで、ストレージを提供する第３の層、を有すると考えることができる。上記のように、従来のデータベースをスケーリングする以前の試みは、典型的には、データベースの全ての３つの層を複製すること、及びそれらの複製されたデータベースインスタンスを複数のマシンにわたって分配すること、を伴った。
【００１９】
いくつかの実施形態では、本明細書に記載のシステムは、従来のデータベースとは異なってデータベースシステムの機能を分けることができ、スケーリングを実装するために、機能的構成要素のサブセットのみ（完全なデータベースインスタンスではなく）を、複数のマシンにわたって分散することができる。例えば、いくつかの実施形態では、クライアント対応層は、データを格納するまたは取り出す方法ではなく、どのデータを格納するまたは取り出すべきかを指定する要求を受け取るように構成することができる。この層は、要求の解析及び／または最適化（例えば、ＳＱＬの解析及び最適化）を行うことができ、一方別の層は、クエリの実行を担当することができる。いくつかの実施形態では、第３の層は、トランザクション機能及び結果の一貫性を提供することを担当することができる。例えば、この層は、いわゆるＡＣＩＤ特性、具体的にはデータベースをターゲットとするトランザクションの不可分性のいくつかを実施するように構成することができ、データベース内の一貫性を維持し、かつデータベースをターゲットとするトランザクション間の絶縁を確保する。いくつかの実施形態では、第４の層が、次に様々な種類の障害の存在下で、格納されたデータの永続性を提供することを担当することができる。例えば、この層は、変更のロギング、データベースクラッシュからのリカバリ、基盤となるストレージボリュームへのアクセスの管理、及び／または基盤となるストレージボリュームのスペース管理を担当することができる。
【００２０】
図１〜５に例示され、記載されたストレージサービスは、単なる実施例であることに留意されたい。データベースエンジン及び読み取り用レプリカに結合された他のストレージサービスもまた、様々な実施形態で使用することができる。
【００２１】
図１は、一実施形態に従うデータベースソフトウェアスタックの様々な構成要素を例示するブロック図である。この実施例で例示されるように、データベースインスタンスは、複数の機能的構成要素（または層）それらの各々は、データベースインスタンスの機能の一部を提供する。この実施例では、データベースインスタンス１００は、クエリ解析及びクエリ最適化層（１１０として示される）、クエリ実行層（１２０として示される）、トランザクション機能及び一貫性管理層（１３０として示される）、及び永続性及びスペース管理層（１４０として示される）を含む。上記のように、いくつかの既存のデータベースシステムでは、データベースインスタンスをスケーリングすることは、データベースインスタンス全体を１回以上（図１に例示された層の全てを含む）複製すること、及びその後にグルーロジックを追加してそれらを共に接続すること、を伴うことができる。いくつかの実施形態では、本明細書に記載のシステムは、代わりに、永続性及びスペース管理層１４０の機能を、データベース層から別個のストレージ層にオフロードすることができ、かつその機能をストレージ層内の複数のストレージノードにわたって分散することができる。
【００２２】
いくつかの実施形態では、本明細書に記載のデータベースシステムは、図１に例示されたデータベースインスタンスの上半分の構造の多くを保持することができるが、バックアップ、復元、スナップショット、リカバリ、及び／または様々なスペース管理操作の少なくとも一部についての責任を、ストレージ層に再分散することができる。この方法で機能を再分散すること及びデータベース層とストレージ層との間でログ処理を緊密に結合することは、スケラーブルデータベースを提供する以前の手法と比較すると、性能を改善し、可用性を向上させ、かつコストを削減することができる。例えば、やり直しログ記録（これは実際のデータページよりもサイズがかなり小さい）のみがノード間に送られ、または書き込み操作のレイテンシパス内に留め置かれるので、ネットワーク及び入力／出力帯域幅要件は、低減することができる。更に、データページの生成は、着信する書き込み操作を阻止することなく、各々のストレージノードのバックグランドで独立して行うことができる（フォアグランド処理が許す限り）。いくつかの実施形態では、ログ構造化非上書きストレージの使用は、例えば、データページの移動またはコピーではなく、メタデータ操作のみを使用することにより、バックアップ、復元、スナップショット、ポイントインタイムリカバリ、及びボリューム増加操作をより効率的に行うことを可能にすることができる。いくつかの実施形態では、ストレージ層はまた、クライアントのために複数のストレージノードにわたって格納されたデータ（及び／またはやり直しログ記録などのそのデータに関連するメタデータ）の複製についての責任を負うことができる。例えば、データ（及び／またはメタデータ）は、ローカル（例えば、ストレージノードの集まりが独自の物理的に異なる独立したインフラストラクチャで実行される単一の「アベイラビリティゾーン」内）で、及び／または単一のリージョン若しくは異なるリージョン内のアベイラビリティゾーンで複製することができる。
【００２３】
様々な実施形態では、本明細書に記載のデータベースシステムは、様々なデータベース操作のための標準またはカスタムのアプリケーションプログラミングインターフェース（ＡＰＩ）をサポートすることができる。例えば、ＡＰＩは、データベースを作成すること、テーブルを作成すること、テーブルを変更すること、ユーザーを作成すること、ユーザーを削除すること、１つ以上の行をテーブルに挿入すること、値をコピーすること、テーブル内からデータを選択すること（例えば、テーブルをクエリすること）、クエリをキャンセルすることまたは中止することのための操作、及び／または他の操作をサポートすることができる。
【００２４】
いくつかの実施形態では、データベースインスタンスのデータベース層は、読み取り及び／または書き込み要求を様々なクライアントプログラム（例えば、アプリケーション）及び／または加入者（ユーザー）から受け取り、次にそれらを解析し、関連するデータベース操作（複数可）を遂行するための実行プランを作成する主ノードサーバー（本明細書ではデータベースエンジンヘッドノードサーバーと呼ぶこともできる）を含むことができる。例えば、データベースエンジンヘッドノードは、複雑なクエリ及び結合の結果を取得するために必要な一連のステップを作成することができる。いくつかの実施形態では、データベースヘッドノードは、データベースシステムのデータベース層とクライアント／加入者との間の通信、並びにデータベース層と別個の分散データベース最適化ストレージシステムとの間の通信を管理することができる。
【００２５】
いくつかの実施形態では、データベースエンジンヘッドノードは、ＪＤＢＣまたはＯＤＢＣインターフェースを介してエンドクライアントからＳＱＬ要求を受け取ることと、ＳＱＬ処理及びトランザクション管理（ロッキングを含む）をローカルで行うことと、を担当することができる。しかしながら、データページをローカルで生成するのではなく、データベースエンジンヘッドノード（またはその構成要素）が、やり直しログ記録を生成してもよく、かつそれらを別個の分散ストレージシステムの適切なノードに送ってもよい。いくつかの実施形態では、分散ストレージシステムのクライアント側ドライバは、データベースエンジンヘッドノードでホストすることができ、かつそれらのやり直しログ記録が向けられるセグメント（またはそのデータページ）を格納するストレージシステムノード（または複数可）にやり直しログ記録をルーティングすることを担当することができる。例えば、いくつかの実施形態では、各々のセグメントは、保護グループを形成する複数のストレージシステムノードにミラーリングする（または他の方法で永続的にする）ことができる。そのような実施形態では、クライアント側ドライバは、各々のセグメントが格納されたノードを追跡することができ、かつクライアント要求を受け取ると、やり直しログを、セグメントが格納されたノードの全てにルーティングすることができる（例えば、実質的に同時に、非同期かつ並列で）。クライアント側ドライバは、保護グループ内のストレージノードの書き込みクォーラムから戻される肯定応答（やり直しログ記録がストレージノードに書き込まれたことを示すことができる）を受け取ると直ぐに、それは、要求された変更の肯定応答をデータベース層に（例えば、データベースエンジンヘッドノードに）送ることができる。例えば、データが保護グループの使用によって永続的にされる実施形態では、データベースエンジンヘッドノードは、クライアント側ドライバが書き込みクォーラムを構成するために十分なストレージノードインスタンスから応答を受け取るまで及びそうでない限り、トランザクションをコミットすることができないことがある。同様に、特定のセグメントに向けられた読み取り要求の場合、クライアント側ドライバは、読み取り要求をセグメントが格納されたノードの全てにルーティングすることができる（例えば、実質的に同時に、非同期かつ並列で）。クライアント側ドライバは、要求されたデータを保護グループ内のストレージノードの読み取りクォーラムから受け取ると直ぐに、それは、要求されたデータをデータベース層に（例えば、データベースエンジンヘッドノードに）に返すことができる。
【００２６】
いくつかの実施形態では、データベース層（またはより具体的には、データベースエンジンヘッドノード）は、最近アクセスされたデータページが一時的に保持されるキャッシュを含むことができる。そのような実施形態では、そのようなキャッシュに保持されたデータページをターゲットとする書き込み要求を、対応するやり直しログ記録をストレージ層に送ることに加えて、受け取る場合、データベースエンジンは、そのキャッシュに保持されたデータページのコピーに変更を適用することができる。しかしながら、他のデータベースシステムとは異なり、このキャッシュに保持されたデータページは、決してストレージ層にフラッシュされることがなく、それは、任意の時点で破棄することができる（例えば、キャッシュされたコピーに最も直近で適用された書き込み要求についてのやり直しログ記録が、ストレージ層に送られ、肯定応答された後の任意の時点）。キャッシュは、異なる実施形態では、一度に多くても１つのライター（または複数のリーダー）によるキャッシュへのアクセスを制御するために様々なロック機構のいずれかを実装することができる。
【００２７】
いくつかの実施形態では、データベース層は、システム内の同期または非同期の読み取り用レプリカ、例えば、読み取り要求をルーティングすることができるデータベース層の異なるノードのデータの読み取り専用コピー、の使用をサポートすることができる。そのような実施形態では、所与のデータベーステーブルのためのデータベースエンジンヘッドノードが特定のデータページに向けられた読み取り要求を受け取る場合、それは、読み取り専用のコピーのいずれか１つ（または特定の１つ）に要求をルーティングすることができる。あるいは、いくつかの実施形態では、クライアント読み取り要求は、データベースエンジンヘッドノードを最初に経由せずに、読み取り用レプリカによって（クライアントから）直接受け取ることができる。いくつかの実施形態では、データベースエンジンヘッドノードのクライアント側ドライバは、キャッシュされたデータページに対する更新及び／または無効化について、これらの他の読み取り用レプリカノードに（例えば、それらの他のノードのクライアント側ドライバへ）通知するように構成することができる。これに応答して、読み取り用レプリカは、それらのキャッシュ（例えば、キャッシュの特定のページ若しくは記録またはキャッシュ全体）を無効化するように構成することができる。無効化キャッシュデータに向けられた後続の読み取り用レプリカの場合、読み取り用レプリカは、更新されたデータページ（またはキャッシュに適用するためのそれらのページに対する変更のログ記録）の更新されたコピーをストレージ層から取り出すように構成することができる。いくつかの実施形態では、読み取り用レプリカは、読み取り及び書き込み側でホットであるページを含むことができるデータベースエンジンヘッドノードのキャッシュに格納されたデータページの指示（例えば、マニフェスト）を受け取るように構成することができる。読み取り用レプリカは、（例えば、ヘッドノードに障害が発生した場合）読み取り用レプリカノードをヘッドノードに転換できるように準備することに役立つホットなページを、ストレージ層から取り出せるように構成することができる。更に、読み取り用レプリカは、ヘッドノードに障害が発生した時点で、どのやり直し及び取り消し記録が実行中途であったか（例えば、読み取り用レプリカによって受け取られていない、または認知されていない）を決定するためにインメモリ構造（例えば、トランザクションテーブル）を更新するように構成することができる。その結果、転換された読み取り用レプリカは、既にウォームキャッシュ（例えば、キャッシュは最初から再構築しなくてもよい）を転換プロセスの一部として有することができる。
【００２８】
いくつかの実施形態では、データベースエンジンヘッドノード及び／または読み取り用レプリカで実行されるクライアント側ドライバ（複数可）は、プライベートインターフェースをストレージ層に公開することができる。いくつかの実施形態では、それはまた、従来のｉＳＣＳＩインターフェースを１つ以上の他の構成要素（例えば、他のデータベースエンジンまたは仮想コンピューティングサービス構成要素）に公開することができる。いくつかの実施形態では、ストレージ層内のデータベースインスタンスのためのストレージは、無制限でサイズを増大することができ、かつそれに関連付けられた無制限の数のＩＯＰＳを有することができる単一のボリュームとしてモデル化することができる。ボリュームが作成されるとき、それは、特定のサイズで、特定の可用性／永続性特性で（例えば、それが複製される方法を指定する）、及び／またはそれに関連付けられたＩＯＰＳレートで（例えば、ピーク時及び持続時の両方）、作成することができる。例えば、いくつかの実施形態では、様々な異なる永続性モデルをサポートすることができ、ユーザー／加入者は、それらのデータベーステーブルについて、複数の複製コピー、ゾーン、若しくはリージョン、並びに／または複製がそれらの永続性、性能及びコスト目標に基づいて同期若しくは非同期であるかどうか、を指定できることが可能である。
【００２９】
いくつかの実施形態では、（ヘッドノード及び／または読み取り用レプリカの）クライアント側ドライバ（複数可）は、ボリュームに関するメタデータを保持することができ、かつ非同期要求を、ストレージノード間の追加のホップを必要としないで読み取り要求及び書き込み要求を満たすために必要なストレージノードのそれぞれに、直接送ることができる。例えば、いくつかの実施形態では、データベーステーブルに対して変更を行う要求に応じて、クライアント側ドライバは、ターゲットとなるデータページのためのストレージを実装する１つ以上のノードを決定するように、かつその変更を指定するやり直しログ記録（複数可）をそれらのストレージノードにルーティングするように、構成することができる。ストレージノードは、次にやり直しログ記録で指定された変更を、それ以後のある時点でターゲットとなるデータページに適用することを担当することができる。書き込みの肯定応答がクライアント側ドライバに返されると、クライアント側ドライバは、ボリュームが永続的である時点を進めることができ、かつコミットの肯定応答をデータベース層に返すことができる。前述のように、いくつかの実施形態では、クライアント側ドライバは、データページをストレージノードサーバーに決して送らないことができる。これは、ネットワークトラフィックを縮小することができるだけでなく、以前のデータベースシステムでフォアグランド処理スループットを制限しているチェックポイントまたはバックグランドライタースレッドの必要性も除去することができる。
【００３０】
いくつかの実施形態では、多くの読み取り要求は、データベースエンジンヘッドノードキャッシュによって、及び／または特定の読み取り用レプリカのキャッシュによって、対応することができる。しかしながら、大規模の障害事象は、インメモリ複製のみを可能にするには、あまりにも普通のことであり、書き込み要求は永続性を要求することがある。したがって、本明細書に記載のシステムは、ストレージ層内にデータストレージを２つのリージョン、すなわち、やり直しログ記録が、それらがデータベース層から受け取られるときに、書き込まれる小さい追加専用ログ構造化リージョン、及びログ記録がバックグランドで一緒に合体されてデータページの新規のバージョンが作成されるより大きいリージョン、として実装することにより、フォアグランドレイテンシパス内に存在するやり直しログ記録書き込み操作のコストを最小限にするように構成することができる。いくつかの実施形態では、インスタンス化されたデータブロックが参照されるまで、そのページについての最後のやり直しログ記録に向けるインメモリ構造（逆方向チェイニングログ記録）を、各々のデータページについて維持することができる。この手法は、読み取りが主にキャッシュされるアプリケーションを含めて、読み取り書き込み混合ワークロードに対して良好な成績を提供することができる。
【００３１】
いくつかの実施形態では、やり直しログ記録のためのログ構造化データストレージへのアクセスは、一連の逐次入力／出力操作（無作為の入力／出力操作ではなく）から成り立つことができるので、行われた変更は、一緒に緊密にまとめることができる。データページへの各々の変更が永続的なデータストレージへ２つの入力／出力操作をもたらす（やり直しログのための１つ及び変更されたデータページ自体のための１つ）既存のシステムとは対照的に、いくつかの実施形態では、本明細書に記載のシステムは、やり直しログ記録の受け取りに基づいて、分散ストレージシステムのストレージノードでデータページを合体することにより、この「書き込み増幅」を回避することができることも留意されたい。
【００３２】
前述のように、いくつかの実施形態では、データベースシステムのストレージ層は、データベースのスナップショットを取ることを担当することができる。しかしながら、ストレージ層はログ構造化ストレージを実装するので、データページ（例えば、データブロック）のスナップショットを取ることは、データページ／ブロックに最も直近で適用されたやり直しログ記録に関連付けられたタイムスタンプ（または、複数のやり直しログ記録を合体してデータページ／ブロックの新規のバージョンを作成するために最も直近の操作に関連付けられたタイムスタンプ）を記録すること、及びページ／ブロックの以前のバージョン及び記録された時点までのいかなる後続のログエントリのガベージコレクションを防ぐこと、を含むことができる。例えば、データベースのスナップショットを取ることは、オフボリュームバックアップ戦略を用いるときに必要されるような、データブロックを読み取ること、コピーすること、または書き込むことを必要としないことが可能である。いくつかの実施形態では、ユーザー／加入者は、アクティブデータセットに加えて、どのくらいの追加のスペースをオンボリュームスナップショットのために維持したいかを選択することができるが、変更されたデータのみが追加のスペースを要求するので、スナップショットについてのスペース要件は最小限であることができる。異なる実施形態では、スナップショットは、離散的（例えば、各々のスナップショットは、特定の時点のものとしてデータページ内のデータの全てへのアクセスを提供することができる）または連続的（例えば、各々スナップショットは、２つの時点の間のデータページ内に存在するデータの全てのバージョンへのアクセスを提供することができる）であることができる。いくつかの実施形態では、以前のスナップショットに復帰することは、そのスナップショット以降の全てのやり直しログ記録及びデータページが、無効であり、かつガベージコレクション可能であることを示すログ記録を記録すること、及びそのスナップショット時点後に全てのデータベースキャッシュエントリを破棄すること、を含むことができる。そのような実施形態では、ストレージシステムは、要求された通りにかつ全てのノードにわたってバックグランドで、通常のフォワード読み取り／書き込み処理で行うのとまったく同様に、ブロック単位で、やり直しログ記録をデータブロックに適用するので、一切のロールフォワードを必要としないことが可能である。クラッシュリカバリは、それにより並列に行われ、ノードにわたって分散することが可能である。
【００３３】
ウェブサービスベースデータベースサービスを実装するように構成することができるサービスシステムアーキテクチャの一実施形態は、図２に例示される。例示された実施形態では、複数のクライアント（データベースクライアント２５０ａ〜２５０ｎとして示される）は、ネットワーク２６０を介してウェブサービスプラットフォーム２００と対話するように構成することができる。ウェブサービスプラットフォーム２００は、データベースサービス２１０の１つ以上のインスタンス（インスタンスは、ヘッドノード及び複数の読み取り用レプリカを含むことができる）、分散データベース最適化ストレージサービス２２０、及び／または１つ以上の他の仮想コンピューティングサービス２３０と対話するように構成することができる。所与の構成要素の１つ以上のインスタンスが存在することができる場合、本明細書でのその構成要素への参照は、単数または複数のいずれかで行うことができるということに留意されたい。しかしながら、いずれかの形態の使用は、他を排除することを意図しない。
【００３４】
様々な実施形態では、図２に例示された構成要素は、コンピュータハードウェア（例えば、マイクロプロセッサまたはコンピュータシステム）によって直接的にまたは間接的に実行可能である命令として、またはそれらの技術の組み合わせを使用して、コンピュータハードウェア内で直接実装することができる。例えば、図２の構成要素は、各々が図１０に例示され、以下で説明されるコンピュータシステムの実施形態と同様であることができる複数のコンピューティングノード（または単に、ノード）を含むシステムによって実装することができる。様々な実施形態では、所与のサービスシステム構成要素（例えば、データベースサービスの構成要素、またはストレージサービスの構成要素）の機能は、特定のノードによって実装することができ、またはいくつかのノードにわたって分散することができる。いくつかの実施形態では、所与のノードは、１つのサービスシステム構成要素よりも多く（例えば、１つのデータベースサービスシステム構成要素よりも多く）の機能を実装することができる。
【００３５】
概して、クライアント２５０は、データベースサービスに対する要求を含めて、ネットワーク２６０を介してウェブサービスプラットフォーム２００へのウェブサービス要求を提出するように構成可能である任意のタイプのクライアントを包含することができる。例えば、所与のクライアント２５０は、ウェブブラウザの適切なバージョンを含むことができ、またはウェブブラウザによって提供される実行環境への拡張として若しくはその中で実行するように構成されたプラグインモジュール若しくは他のタイプのコードモジュールを含むことができる。あるいは、クライアント２５０（例えば、データベースサービスクライアント）は、データベースアプリケーション（若しくはそのユーザーインターフェース）、メディアアプリケーション、オフィスアプリケーション、または永続的ストレージリソースを使用して１つ以上のデータベーステーブルを格納し、及び／またはそれにアクセスすることができる任意の他のアプリケーションのようなアプリケーションを包含することができる。いくつかの実施形態では、そのようなアプリケーションは、全てのタイプのウェブベースデータのためのフルブラウザサポートを必ずしも実装することなく、ウェブサービス要求を生成し、処理するための十分なプロトコルサポート（例えば、ハイパーテキスト転送プロトコル（ＨＴＴＰ）の適切なバージョンのための）を含むことができる。すなわち、クライアント２５０は、ウェブサービスプラットフォーム２００と直接対話するように構成されたアプリケーションであることができる。いくつかの実施形態では、クライアント２５０は、Ｒｅｐｒｅｓｅｎｔａｔｉｏｎａｌ  Ｓｔａｔｅ  Ｔｒａｎｓｆｅｒ（ＲＥＳＴ）スタイルウェブサービスアーキテクチャ、ドキュメント若しくはメッセージベースウェブサービスアーキテクチャ、または別の適切なウェブサービスアーキテクチャに従って、ウェブサービス要求を生成するように構成することができる。
【００３６】
いくつかの実施形態では、クライアント２５０（例えば、データベースサービスクライアント）は、データベーステーブルのウェブサービスベースストレージへのアクセスを、他のアプリケーションにそれらのアプリケーションに対して透明である方法で提供するように構成することができる。例えば、クライアント２５０は、オペレーティングシステムまたはファイルシステムと統合し、本明細書に記載のストレージモデルの適切な変形に従ってストレージを提供するように構成することができる。しかしながら、オペレーティングシステムまたはファイルシステムは、ファイル、ディレクトリ、及び／またはフォルダの従来のファイルシステム階層のようなアプリケーションへの異なるストレージインターフェースを提示することができる。そのような実施形態では、アプリケーションは、図１のストレージシステムサービスモデルを使用するために、変更する必要がなくてもよい。代わりに、ウェブサービスプラットフォーム２００へのインターフェースの詳細は、オペレーティングシステム環境内で実行されるアプリケーションに代わってクライアント２５０及びオペレーティングシステムまたはファイルシステムによって、調整することができる。
【００３７】
クライアント２５０は、ネットワーク２６０を介してウェブサービスプラットフォーム２００にウェブサービス要求を搬送し、またそこから応答を受け取ることができる。様々な実施形態では、ネットワーク２６０は、クライアント２５０とプラットフォーム２００との間にウェブベース通信を確立するために必要なネットワーキングハードウェア及びプロトコルの任意の適切な組み合わせを包含することができる。例えば、ネットワーク２６０は、概して、集合的にインターネットを実装する様々な電気通信ネットワーク及びサービスプロバイダを包含することができる。ネットワーク２６０はまた、ローカルエリアネットワーク（ＬＡＮ）のようなプライベートネットワークまたはワイドエリアネットワーク（ＷＡＮ）並びにパブリックまたはプライベート無線ネットワークを含むことができる。例えば、所与のクライアント２５０及びウェブサービスプラットフォーム２００の両方は、独自の内部ネットワークを有する企業内でそれぞれプロビジョニングすることができる。そのような実施形態では、ネットワーク２６０は、所与のクライアント２５０とインターネットとの間に、並びにインターネットとウェブサービスプラットフォーム２００との間に、ネットワーキングリンクを確立するために必要なハードウェア（例えば、モデム、ルーター、スイッチ、ロードバランサ、プロキシサーバーなど）及びソフトウェア（例えば、プロトコルスタック、アカウンティングソフトウェア、ファイアウォール／セキュリティソフトウェアなど）を含むことができる。いくつかの実施形態では、クライアント２５０は、パブリックのインターネットではなく、プライベートネットワークを使用してウェブサービスプラットフォーム２００と通信することができることに留意されたい。例えば、クライアント２５０は、データベースサービスシステムと同じ企業内でプロビジョニングすることができる（例えば、データベースサービス２１０及び／または分散データベース最適化ストレージサービス２２０を実装するシステム）。そのような場合、クライアント２５０は、完全にプライベートネットワーク２６０を介してプラットフォーム２００と通信することができる（例えば、インターネットベース通信プロトコルを使用することができるが、パブリックにアクセス可能でないＬＡＮまたはＷＡＮ）。
【００３８】
概して、ウェブサービスプラットフォーム２００は、データページ（またはその記録）にアクセスする要求のようなウェブサービス要求を受け取り、また処理するように構成された１つ以上のサービスエンドポイントを実装するように構成することができる。例えば、ウェブサービスプラットフォーム２００は、特定のエンドポイントを実装するように構成されたハードウェア及び／またはソフトウェアを含むことができ、それによってそのエンドポイントに向けられたＨＴＴＰベースウェブサービス要求は、適切に受け取られ、処理される。一実施形態では、ウェブサービスプラットフォーム２００は、ウェブサービス要求をクライアント２５０から受け取るように、かつそれらを処理のためにデータベースサービス２１０、分散データベース最適化ストレージサービス２２０、及び／または別の仮想コンピューティングサービス２３０を実装するシステムの構成要素に転送するように、構成されたサーバーシステムとして実装することができる。他の実施形態では、ウェブサービスプラットフォーム２００は、大規模のウェブサービス要求処理負荷を動的に管理するように構成された負荷分散及び他の要求管理機能を実装する複数の異なるシステム（例えば、クラスタのトポロジで）として構成することができる。様々な実施形態では、ウェブサービスプラットフォーム２００は、ＲＥＳＴスタイルまたはドキュメントベース（例えばＳＯＡＰベース）タイプのウェブサービス要求をサポートするように構成することができる。
【００３９】
クライアントのウェブサービス要求のアドレス可能なエンドポイントとして機能することに加えて、いくつかの実施形態では、ウェブサービスプラットフォーム２００は、様々なクライアント管理機能を実装することができる。例えば、プラットフォーム２００は、要求するクライアント２５０の識別、クライアントの要求の数及び／または頻度、クライアント２５０のために格納されたまたは取り出されたデータテーブル（またはその記録）のサイズ、クライアント２５０によって使用される全体的なストレージ帯域幅、クライアント２５０によって要求されたストレージのクラス、または任意の他の計量可能なクライアントの使用状況パラメータを追跡することなどにより、ストレージリソースを含めて、ウェブサービスのクライアントの使用状況の計量及び会計処理を調整することができる。プラットフォーム２００はまた、財務会計処理及び課金システムを実装することができ、またはクライアントの使用状況活動の報告及び課金のための外部システムによって、照会され、処理することができる使用状況データのデータベースを維持することができる。ある実施形態では、プラットフォーム２００は、クライアント２５０から受け取る要求の割合及びタイプ、そのような要求によって利用される帯域幅、そのような要求についてのシステム処理レイテンシ、システム構成要素の利用率（例えば、ストレージサービスシステム内のネットワーク帯域幅及び／またはストレージ利用率）、要求に起因するエラーの割合及びタイプ、格納された及び要求されたデータページ若しくはその記録の特性（例えば、サイズ、データのタイプなど）、を反映するメトリック、または任意の他の適切なメトリックのような様々なストレージサービスシステム動作メトリックを収集し、監視し、及び／または集約するように構成することができる。いくつかの実施形態では、そのようなメトリックは、システム構成要素を調整し、維持するためにシステム管理者によって使用されることもでき、一方他の実施形態では、そのようなメトリック（または、そのようなメトリックの関連部分）は、クライアント２５０に公開することができ、そのようなクライアントが、データベースサービス２１０、分散データベース最適化ストレージサービス２２０、及び／または別の仮想コンピューティングサービス２３０（またはそれらのサービスを実装する基盤となるシステム）の使用状況を監視することを可能にする。
【００４０】
いくつかの実施形態では、プラットフォーム２００はまた、ユーザー認証及びアクセス制御手順を実装することができる。例えば、特定のデータベーステーブルにアクセスするための所与のウェブサービス要求の場合、プラットフォーム２００は、要求に関連するクライアント２５０が特定のデータベーステーブルにアクセスすることを認証されたかどうかを確認するように構成することができる。プラットフォーム２００は、例えば、特定のデータベーステーブルに関連する資格情報に対して識別、パスワード、または他の資格情報を評価することによって、または特定のデータベーステーブルのアクセス制御リストに対して特定のデータベーステーブルへの要求されたアクセスを評価することによって、そのような認証を決定することができる。例えば、クライアント２５０が、特定のデータベーステーブルにアクセスするために十分な資格情報を有していない場合、プラットフォーム２００は、例えば、要求するクライアント２５０にエラー状況を示す応答を返すことによって、対応するウェブサービス要求を拒否することができる。様々な制御ポリシーは、データベースサービス２１０、分散データベース最適化ストレージサービス２２０、及び／または他の仮想コンピューティングサービス２３０によって、アクセス制御情報の記録またはリストとして格納することができる。
【００４１】
ウェブサービスプラットフォーム２００は、データベースサービス２１０を実装するデータベースシステムの機能にクライアント２５０がアクセスするための主要インターフェースに相応することができるが、そのような機能への唯一のインターフェースに相応する必要はないことに留意されたい。例えば、ウェブサービスインターフェースとは異なることができる代替のＡＰＩは、データベースシステムを提供する企業の内部のクライアントがウェブサービスプラットフォーム２００をバイパスすることを可能にするために使用することができる。本明細書に記載の実施例の多くにおいて、分散データベース最適化ストレージサービス２２０は、データベースサービスをクライアント２５０に提供するコンピューティングシステムまたは企業システムに対して内部であることができ、外部のクライアント（例えば、ユーザーまたはクライアントアプリケーション）に対して公開されないことに留意されたい。そのような実施形態では、内部の「クライアント」（例えば、データベースサービス２１０）は、分散データベース最適化ストレージサービス２２０とデータベースサービス２１０との間の実線として示されているローカルまたはプライベートネットワークを介して分散データベース最適化ストレージサービス２２０にアクセスすることができる（例えば、これらのサービスを実装するシステム間で直接ＡＰＩを介して）。そのような実施形態では、クライアント２５０に代わってデータベーステーブルを格納する際に分散データベース最適化ストレージサービス２２０を使用することは、それらのクライアントに対して透明であることができる。他の実施形態では、分散データベース最適化ストレージサービス２２０は、ウェブサービスプラットフォーム２００を介してクライアント２５０に公開され、データベース管理のためにデータベースサービス２１０に依存するもの以外に、アプリケーションのためにデータベーステーブルまたは他の情報のストレージを提供することができる。これは、ウェブサービスプラットフォーム２００と分散データベース最適化ストレージサービス２２０との間の破線によって、図２に例示される。そのような実施形態では、分散データベース最適化ストレージサービス２２０のクライアントは、ネットワーク２６０を介して（例えば、インターネットを介して）分散データベース最適化ストレージサービス２２０にアクセスすることができる。いくつかの実施形態では、仮想コンピューティングサービス２３０は、分散データベース最適化ストレージサービス２２０からストレージサービスを受け取り（例えば、仮想コンピューティングサービス２３０と分散データベース最適化ストレージサービス２２０との間で直接ＡＰＩを介して）、クライアント２５０に代わってコンピューティングサービス２３０を行う際に使用されるオブジェクトを格納するように構成することができる。これは、仮想コンピューティングサービス２３０と分散データベース最適化ストレージサービス２２０との間の破線によって、図２に例示される。いくつかの場合では、プラットフォーム２００の会計処理及び／または資格認定サービスは、管理クライアント、または同じ企業内のサービス構成要素間のような内部のクライアントには不要であってもよい。
【００４２】
様々な実施形態では、異なるストレージポリシーは、データベースサービス２１０及び／または分散データベース最適化ストレージサービス２２０によって、実装することができることに留意されたい。そのようなストレージポリシーの実施例は、永続性ポリシー（例えば、格納されるデータベーステーブル（またはそのデータページ）のインスタンスの数及びそれらが格納される異なるノードの数を示すポリシー）、及び／または負荷分散ポリシー（データベーステーブル、またはそのデータページを、要求トラフィックを均等化する試みで、異なるノード、ボリューム、及び／またはディスクにわたって分散することができる）を、含むことができる。更に、異なるストレージポリシーは、サービスのうちの様々な１つによって、異なるタイプの格納されたアイテムに適用することができる。例えば、いくつかの実施形態では、分散データベース最適化ストレージサービス２２０は、データページに対してよりもやり直しログ記録に対して、より高い永続性を実装することができる。
【００４３】
図３は、一実施形態に従って、データベースエンジン、読み取り用レプリカ、及び別個の分散データベースストレージサービスを含むデータベースシステムの様々な構成要素を示すブロック図である。この実施例では、データベースシステム３００は、いくつかのデータベーステーブル及び分散データベース最適化ストレージサービス３１０の各々について、それぞれのデータベースエンジンヘッドノード３２０並びに複数の読み取り用レプリカ３２２ａ、３２２ｂ、及び３２２ｃを含むことができる（データベースクライアント３５０ａ〜３５０ｎとして示されるデータベースシステムのクライアントに可視であってもなくてもよい）。この実施例で例示されるように、データベースクライアント３５０ａ〜３５０ｎのうちの１つ以上は、データベースヘッドノード３２０（例えば、ヘッドノード３２０ａ、ヘッドノード３２０ｂ、またはヘッドノード３２０ｃ、それらの各々は、それぞれのデータベースインスタンスの構成要素である）及び／または読み取り用レプリカ（例えば、読み取り用レプリカ３２２ａ、３２２ｂ、または３２２ｃ）にネットワーク３６０を介してアクセスすることができる（例えば、これらの構成要素は、データベースクライアント３５０ａ〜３５０ｎに対してネットワークアドレス指定可能かつアクセス可能であることができる）。任意の数の読み取り用レプリカを特定のデータベースインスタンスに関連付けることができるが、図示及び説明を簡単にするために、図３には３つの読み取り用レプリカが示されていることに留意されたい。分散データベース最適化ストレージサービス３１０は、データベースクライアント３５０ａ〜３５０ｎに代わって、１つ以上のデータベーステーブルのデータページ（及びやり直しログ記録及び／またはそれらに関連する他のメタデータ）を格納するために、かつ本明細書に記載のようなデータベースシステムの他の機能を行うために、データベースシステムによって用いることができるが、異なる実施形態では、ストレージクライアント３５０ａ〜３５０ｎに対してネットワークアドレス指定可能かつアクセス可能であってもなくてもよい。例えば、いくつかの実施形態では、分散データベース最適化ストレージサービス３１０は、様々なストレージ、アクセス、変更のロギング、リカバリ、及び／またはスペース管理操作を、ストレージクライアント３５０ａ〜３５０ｎに対して不可視である方法で行うことができる。
【００４４】
前述のように、各々のデータベースインスタンスは、様々なクライアントプログラム（例えば、アプリケーション）及び／または加入者（ユーザー）から要求を受け取り、次にそれらを解析し、それらを最適化し、かつ実行計画を作成して関連するデータベース操作（複数可）を遂行する単一のデータベースエンジンヘッドノード３２０を含むことができる。更に前述のように、各々の読み取り用レプリカは、読み取り要求を受け取り（例えば、様々なクライアントプログラム、加入者から、及び／またはデータベースエンジンヘッドノードから）、同様にそのような要求を解析し、それらを最適化し、かつ実行計画を作成して読み取り（例えば、選択）を遂行することができる。図３に例示の実施例では、データベースエンジンヘッドノード３２０ａのクエリ解析、最適化、及び実行構成要素３０５は、データベースクライアント３５０ａから受け取り、かつデータベースエンジンヘッドノード３２０ａが構成要素となっているデータベースインスタンスをターゲットにするクエリのためのこれらの機能を行うことができる。いくつかの実施形態では、クエリ解析、最適化、及び実行構成要素３０５は、書き込み肯定応答、要求されたデータページ（またはその部分）、エラーメッセージ、及び他の応答を必要に応じて含むことができるクエリ応答を、データベースクライアント３５０ａに返すことができる。この実施例で例示されるように、データベースエンジンヘッドノード３２０ａはまた、クライアント側ストレージサービスドライバ３２５を含むことができ、これは、読み取り要求及び／またはやり直しログ記録を分散データベース最適化ストレージサービス３１０内の読み取り用レプリカ及び／または様々なストレージノードにルーティングし、書き込み肯定応答を分散データベース最適化ストレージサービス３１０から受け取り、要求されたデータページを分散データベース最適化ストレージサービス３１０から受け取り、かつ／またはデータページ、エラーメッセージ、若しくは他の応答をクエリ解析、最適化、及び実行構成要素３０５（今度は、それらをデータベースクライアント３５０ａに返すことができる）に返すことができる。
【００４５】
この実施例では、データベースエンジンヘッドノード３２０ａは、最近アクセスされた（読み取り及び／または書き込み）データページを一時的に保持することができるデータページキャッシュ３３５を含む。図３に例示されるように、データベースエンジンヘッドノード３２０ａはまた、データベースエンジンヘッドノード３２０ａが構成要素となっているデータベースインスタンスでトランザクション機能及び一貫性を提供することを担当することができるトランザクション及び一貫性管理構成要素３３０を含む。例えば、この構成要素は、データベースインスタンス及びデータベースインスタンスに向けられたトランザクションの不可分性、一貫性、及び独立性の特性を確保することを担当することができる。図３に例示されるように、データベースエンジンヘッドノード３２０ａはまた、様々なトランザクションの状態を追跡してコミットしていないトランザクションのローカルでキャッシュされた全ての結果をロールバックするために、トランザクション及び一貫性管理構成要素３３０によって用いることができるトランザクションログ３４０及び取り消しログ３４５を含むことができる。
【００４６】
図３に例示の他のデータベースエンジンヘッドノード３２０の各々（例えば、３２０ｂ及び３２０ｃ）は、同様の構成要素を含むことができ、またデータベースクライアント３５０ａ〜３５０ｎの１つ以上によって受け取られ、かつそれが構成要素となっているそれぞれのデータベースインスタンスに向けられるクエリに同様の機能を行うことができることに留意されたい。
【００４７】
様々な実施形態では、読み取り用レプリカ３２２ａ、３２２ｂ、及び３２２ｃの各々はまた、データベースエンジンヘッドノードのものと同様な構成要素を含むことができ、かつ／またはそのような構成要素を含むように構成することができる（例えば、古いヘッドノードを交換するために、データベースエンジンヘッドノードへの読み取り用レプリカの転換時に）。示されるように、各々の読み取り用レプリカは、キャッシュ３２６ａ及びクライアント側ドライバ３２４ａを含むことができる。クライアント側ドライバ３２４ａは、データベースエンジンヘッドノードのクライアント側ストレージサービスドライバ３２５と同様であることができる。更に、ヘッドノードと読み取り用レプリカとの間の通信は、クライアント側ドライバ３２４ａとクライアント側ストレージサービスドライバ３２５との間の通信であることができる。キャッシュ３２６ａは、最近アクセスされたデータページを格納するように構成することができるという点でデータページキャッシュ３３５と同様であることができる。１つの読み取り用レプリカのキャッシュに格納されたデータページは、別の読み取り用レプリカのキャッシュに格納されたデータページとは異なることができ、更にデータページキャッシュ３３５に格納されたデータページとも異なることができることに留意されたい。更に、１つの読み取り用レプリカのキャッシュ内のデータページについて格納された実際のデータは、別の読み取り用レプリカのキャッシュ内の同じデータページについて格納された実際のデータ、及び／またはデータページキャッシュ３３５内に格納された同じデータページについての実際のデータ、とは異なることができる。
【００４８】
いくつかの実施形態では、やり直しログ（または、取り消しログ）をストレージ層に送ると、クライアント側ストレージサービスドライバ３２５はまた、キャッシュ無効化指示（非同期であってもよい）を読み取り用レプリカに送るように構成することができる。キャッシュ無効化指示は、やり直しログに対応するキャッシュ記録が古くなっていることを示すことができ（読み取り用レプリカがやり直しログに対応するキャッシュ記録を格納している場合）、及び／またはそれが実際にやり直しログ記録であることができる。古いキャッシュされたデータに対応するデータを読み取るために、次に（クライアントから）受け取られる読み取り要求の場合、読み取り用レプリカは、分散データベース最適化ストレージサービス３１０からのデータの更新されたバージョン（例えば、１つ以上のやり直し／取り消しログ記録、合体されたログ記録、または実際のデータページの形態で）を要求し、主ノードから受け取ったログ記録を適用してデータの現在のバージョンを作成し、読み取りを要求するクライアントに現在のバージョンを返すことができる。いくつかの実施形態では、読み取り用レプリカは、次にそのキャッシュをデータ記録の現在のバージョンで更新し、そのデータに関する無効化指示を除去／リセットすることができる。いくつかの実施形態では、無効化指示は、実際のやり直しログ（または取り消しログ）であることができ、読み取り用レプリカは、分散ストレージサービスからのログ記録及び／または１つ以上のログ記録を、データ記録の古いキャッシュされたバージョンに適用し、それによってそれがもはや古くないようにそれを更新するように構成することができる。
【００４９】
様々な実施形態では、読み取り用レプリカ３２２ａ、３２２ｂ、または３２２ｃのうちの１つは、新規のデータベースエンジンヘッドノードに転換することができる（例えば、ヘッドノードに障害が発生した場合）。このような転換の準備を支援するために、読み取り用レプリカの１つ以上は、ヘッドノードのキャッシュに格納されたデータページの指示を、データベースエンジンヘッドノード（まだアクティブである間に）から受け取るように構成することができる。この指示は、読み取り及び書き込み側でホットであるデータページのマニフェストであることができる。読み取り用レプリカは、次にそれらのデータページのバージョンを、例えば分散データベース最適化ストレージサービス３１０から取り出すことができ、それらの取り出したデータページをキャッシュに格納することができる。マニフェスト／指示は、周期的に（例えば、毎時、毎日など）またはある事象の際に（例えば、読み取り／書き込み毎に、１０回の読み取り／書き込み毎に、可能性のあるヘッドノードのフェイルオーバーを示すある内部ヘッドノードロジックの際などに）送ることができる。このように、読み取り用レプリカのキャッシュは、ヘッドノードへの転換の際に比較的ウォームキャッシュであることができる。一実施形態では、ウェブサービスプラットフォーム２００は、ヘッドノードに障害が発生したことを決定し、どの読み取り用レプリカを転換するかを選択することができる。他の実施形態では、ヘッドノードの障害を検出する第１の読み取り用レプリカが、それがヘッドノードに転換すべきであることを決定することができ、または読み取り用レプリカは、どの読み取り用レプリカを転換するかについて支持することができる。更に別の実施形態では、読み取り用レプリカの所与の１つを、以前のヘッドノードに障害が発生した場合に、ヘッドノードに転換するための第１の選択肢として事前に選択することができる。どの読み取り用レプリカを転換するかを決定するための他の方法もまた、存在する。いくつかの実施形態では、読み取り用レプリカは、主ノードによって書き込まれたのと同じデータストレージに接続され、それによりそのデータの全てへのアクセスを有するので、転換プロセスの際にデータの損失が発生しないことが可能である。これは、読み取り用レプリカが主ノードによって書き込まれたものとは別個である異なるデータストレージを利用するシステムに対して対照的である。異なるデータストレージを使用するこのようなシステムでは、複製が非同期で行われた場合にデータ損失が発生することがあり、または複製が同期で行われた場合に性能の低下が発生することがある。
【００５０】
更に、以前のヘッドノードから読み取り用レプリカに対して実行中途であって、読み取り用レプリカに対して未知である（例えば、示されていない、受け取られていない）が、分散データベース最適化ストレージサービス３１０によって受け取られたトランザクションに対応するログ記録（例えば、やり直し及び／または取り消し）が存在することができる。したがって、マニフェストが、読み取り用レプリカのそれぞれのキャッシュを多少最新に維持するのに役立つ場合でも、それらは、それにもかかわらず、いくつかの点でまだ古くなっている可能性がある。したがって、一実施形態では、新規のヘッドノードに転換される読み取り用レプリカは、読み取り用レプリカが認識していた最後のログ記録（例えば、ログシーケンス番号（ＬＳＮ）のような単調に増加する識別子によって識別される）がどれであったかを決定するように（転換の前後に）構成することができる。読み取り用レプリカは、次に、最後のログ記録よりも後の対応するログ記録を有するどのデータ記録が変更したかを要求し、キャッシュ内のそれらを無効化するように構成することができる。読み取り用レプリカはまた、それ自体のキャッシュを更新してそれがもはや無効でない／古くないようにするために、実際のログ記録及び／またはデータ記録を要求するように構成することができる。更に、読み取り用レプリカは、実行中途のトランザクションのトランザクションテーブルを維持するように構成することができる。読み取り用レプリカは、実行中途のトランザクションを読み取り用レプリカに送るように分散データベース最適化ストレージサービス３１０に要求し、次に実行中途のトランザクションに従ってインメモリ構造（例えば、トランザクションテーブル）を更新するように構成することができる。転換された読み取り用レプリカは、実行中途のトランザクションの特定のトランザクションが、ヘッドノードの障害に関連していた（例えば、それをクラッシュさせた）ことを決定し、そのトランザクションの変更をロールバックするように構成することができる（例えば、それをそれ自体のキャッシュに適用せず、かつ／またはストレージ層にあるそのアプリケーションを削除することをストレージ層に命令する）。
【００５１】
いくつかの実施形態では、本明細書に記載の分散データベース最適化ストレージシステムは、１つ以上のストレージノードでのストレージ用に様々な論理的ボリューム、セグメント、及びページで、データを編成することができる。例えば、いくつかの実施形態では、各々のデータベースは、論理的ボリュームによって表され、各々の論理的ボリュームは、ストレージノードの集合にわたってセグメント化される。各々のセグメントは、ストレージノードの特定の１つに存在し、連続的なブロックアドレスのセットを含む。いくつかの実施形態では、各々データページはセグメントに格納され、その結果各々のセグメントは、１つ以上のデータページ及びそれが格納する各々のデータページについての変更ログ（やり直しログとも呼ばれる）の集合を格納する。本明細書で詳述されるように、ストレージノードは、やり直しログ記録（本明細書ではＵＬＲと呼ぶこともできる）を受け取り、それらを合体して対応するデータページの新規のバージョン及び／または追加の若しくは代替のログ記録を作成するように構成することができる（例えば、緩慢に及び／またはデータページに対する要求若しくはデータベースのクラッシュに応じて）。いくつかの実施形態では、データページ及び／または変更ログは、可変構成（クライアントであって、それに代わってデータベーステーブルは、データベースシステム内に維持されている、クライアントによって指定することができる）に従って、複数のストレージノードにわたってミラーリングすることができる。例えば、異なる実施形態では、データまたは変更ログの１つ、２つ、または３つのコピーは、デフォルトの構成、アプリケーション固有永続性選好、またはクライアント指定永続性選好に従って、１つ、２つ、または３つの異なるアベイラビリティゾーン若しくはリージョンの各々に格納することができる。
【００５２】
本明細書で使用される場合、以下の用語は、様々な実施形態に従って、分散データベース最適化ストレージシステムによるデータの編成を説明するために使用することができる。
【００５３】
ボリューム。ボリュームは、ストレージシステムのユーザー／クライアント／アプリケーションが理解するストレージの高度に耐久的であるユニットを表す論理的概念である。より具体的には、ボリュームは、データベーステーブルの様々なユーザーページに対する書き込み操作の単一の一貫性のある順序付けられたログとしてユーザー／クライアント／アプリケーションに表示される分散ストアである。各々の書き込み操作は、ボリューム内の単一のユーザーページのコンテンツに対する論理的な順序付けられた変化を表すユーザーログ記録（ＵＬＲ）で符号化することができる。前述のように、ＵＬＲはまた、本明細書ではやり直しログ記録と呼ぶこともできる。各々のＵＬＲは、順序付けを示すために単調に増加する値を使用する識別子であることができる独特のＬＳＮまたはログシーケンス番号を含むことができる。例えば、ＬＳＮ１は、ＬＳＮ６よりも前であるＬＳＮ３よりも前である。順序通りの各々の番号を使用する必要がないことに留意されたい。例えば、いくつかの実施形態では、ＬＳＮ５を除いてＬＳＮ１、２、３、４、及び６が存在することができる。各々のＵＬＲは、保護グループ（ＰＧ）を形成する分散ストア内の１つ以上の同期セグメントに対して永続化され、ＵＬＲに高い永続性及び可用性を提供することができる。ボリュームは、可変サイズ連続範囲のバイトのためのＬＳＮ型読み取り／書き込みインターフェースを提供することができる。
【００５４】
いくつかの実施形態では、ボリュームは、保護グループを介して各々が永続的に作られた複数のエクステントから成り立つことができる。このような実施形態では、ボリュームは、ボリュームエクステントの変更可能な連続的な配列から成るストレージのユニットを表すことができる。ボリュームに向けられる読み取り及び書き込みは、要素となるボリュームエクステントへの対応する読み取り及び書き込みにマッピングすることができる。いくつかの実施形態では、ボリュームのサイズは、ボリュームの終わりからボリュームエクステントを追加または除去することにより、変更することができる。
【００５５】
セグメント。セグメントは、単一のストレージノードに割り当てられたストレージの制限された永続性ユニットである。より具体的には、セグメントは、データの特定の固定サイズバイト範囲に対して制限されたベストエフォート型永続性を提供する（例えば、ストレージノードである障害が発生した永続的だが非冗長のシングルポイント）。このデータは、いくつかの場合では、ユーザーアドレス可能なデータのミラーであることができ、またはそれは、様々な実施形態では、ボリュームメタデータまたは消去符号化ビットのような他のデータであることができる。所与のセグメントは、ちょうど１つのストレージノードに存在することができる。ストレージノード内では、複数のセグメントは各々のＳＳＤに存在することができ、各々のセグメントは、１つのＳＳＤに制限することができる（例えば、セグメントは、複数のＳＳＤにわたることができない）。いくつかの実施形態では、セグメントは、ＳＳＤの連続するリージョンを占有するように要求されなくてもよく、むしろ、セグメントの各々によって所有される領域を記述する割り当てマップが各々のＳＳＤ内に存在することができる。上述のように、保護グループは、複数のストレージノードにわたって広がった複数のセグメントから成り立つことができる。いくつかの実施形態では、セグメントは、固定サイズ連続範囲のバイトのためのＬＳＮ型読み取り／書き込みインターフェースを提供することができる（作成時にサイズが定義されている場合）。いくつかの実施形態では、各々セグメントは、セグメントＵＵＩＤ（例えば、セグメントの汎用一意識別子）によって識別することができる。
【００５６】
ストレージページ。ストレージページは、概して固定サイズのメモリブロックである。いくつかの実施形態では、各々ページは、オペレーティングシステムによって定義されたサイズのメモリの（例えば、仮想メモリ、ディスク、または他の物理的メモリの）ブロックであり、本明細書では用語の「データブロック」によって言及されることもある。より具体的には、ストレージページは、連続するセクタのセットであることができる。それは、ＳＳＤ内の割り当てのユニットとして、並びにヘッダ及びメタデータが存在するログページ内のユニットとして、機能することができる。いくつかの実施形態では、本明細書に記載のデータベースシステムとの関連では、用語の「ページ」または「ストレージページ」は、４０９６、８１９２、１６３８４、または３２７６８バイトのような典型的には２の倍数であることができるデータベース構成によって定義されたサイズの同様なブロックを指すことができる。
【００５７】
ログページ。ログページは、ログ記録（例えば、やり直しログ記録または取り消しログ記録）を格納するために使用されるストレージページの１つのタイプである。いくつかの実施形態では、ログページは、ストレージページとサイズが同一であることができる。各々ログページは、そのログページに関するメタデータ、例えばそれが属するセグメントを識別するメタデータ、を含むヘッダを含むことができる。ログページは、編成のユニットであり、必ずしも書き込み操作に含まれるデータのユニットでなくてもよいことに留意されたい。例えば、いくつかの実施形態では、通常の転送処理の間、書き込み操作は、一度に１つのセクタをログの末尾に書き込むことができる。
【００５８】
ログ記録。ログ記録（例えば、ログページの個々の要素）は、いくつかの異なるクラスであることができる。例えば、ユーザーログ記録（ＵＬＲ）は、ストレージシステムのユーザー／クライアント／アプリケーションによって作成され、また理解され、ボリューム内のユーザーデータに対する変更を示すために使用することができる。制御ログ記録（ＣＬＲ）は、ストレージシステムによって生成され、現在の無条件ボリューム永続的ＬＳＮ（ＶＤＬ）のようなメタデータを追跡するために使用される制御情報を含むことができる。ヌルログ記録（ＮＬＲ）は、いくつかの実施形態では、ログセクタまたはログページ内の未使用スペースを満たすためにパディングとして使用することができる。いくつかの実施形態では、これらのクラスの各々内に様々なタイプのログ記録が存在することができ、ログ記録のタイプは、ログ記録を解釈するために起動される必要がある機能に対応することができる。例えば、１つのタイプは、特定の圧縮フォーマットを使用する圧縮フォーマットでユーザーページの全てのデータを表すことができ、第２のタイプは、ユーザーページ内のバイト範囲についての新しい値を表すことができ、第３のタイプは、整数として解釈されたバイトの配列に対するインクリメント操作を表すことができ、第４のタイプは、１バイト範囲をページ内の別の場所にコピーすることを表すことができる。いくつかの実施形態では、ログ記録タイプは、特にＵＬＲについてバージョン管理及び開発を簡素化することができるＧＵＩＤによって（整数または列挙によってではなく）識別することができる。
【００５９】
ペイロード。ログ記録のペイロードは、特定のタイプのログ記録またはログ記録（複数）に固有であるデータまたはパラメータ値である。例えば、いくつかの実施形態では、ほとんど（または全て）のログ記録が含み、かつストレージシステム自体が理解するパラメータまたは属性のセットが存在することができる。これらの属性は、セクタサイズと比較して相対的に小さくてもよい共通のログ記録ヘッダ／構造の一部であることができる。更に、ほとんどのログ記録は、そのログ記録タイプに固有の追加のパラメータまたはデータを含むことができ、この追加の情報は、そのログ記録のペイロードと見なすことができる。いくつかの実施形態では、特定のＵＬＲのためのペイロードがユーザーページのサイズよりも大きい場合、それは、ペイロードがユーザーページについての全てのデータを含む絶対ＵＬＲ（ＡＵＬＲ）によって交換することができる。これは、ストレージシステムがユーザーページのサイズに等しいＵＬＲのペイロードのサイズに上限を実施することを、可能にすることができる。
【００６０】
セグメントログ内にログ記録を格納するとき、いくつかの実施形態では、ペイロードはログヘッダと共に格納できることに留意されたい。他の実施形態では、ペイロードは、別個の場所に格納することができ、ペイロードが格納された場所へのポインタは、ログヘッダと共に格納することができる。更に他の実施形態では、ペイロードの一部は、ヘッダに格納することができ、ペイロードの残りは、別個の場所に格納することができる。ペイロード全体がログヘッダと共に格納される場合、これはインバンドストレージと呼ぶことができ、そうでない場合、ストレージはアウトオブバンドであると呼ぶことができる。いくつかの実施形態では、ほとんどの大きいＡＵＬＲのペイロードは、ログのコールドゾーン内にアウトオブバンドで格納することができる（後述する）。
【００６１】
ユーザーページ。ユーザーページは、（固定サイズの）バイト範囲及びストレージシステムのユーザー／クライアントに対して可視である特定のボリュームについてのそれらのアライメントである。ユーザーページは、論理的概念であり、特定のユーザーページ内のバイトは、現状のまま任意のストレージページ内に格納してもしなくてもよい。特定のボリュームについてのユーザーページのサイズは、そのボリュームについてのストレージページのサイズとは無関係であってもよい。いくつかの実施形態では、ユーザーページのサイズは、ボリューム毎に構成可能であってもよく、ストレージノードの異なるセグメントは、異なるユーザーページのサイズを有することができる。いくつかの実施形態では、ユーザーページサイズは、セクタのサイズ（例えば、４ＫＢ）の倍数に制約することができ、上限（例えば、６４ＫＢ）を有することができる。ストレージページのサイズは、他方では、ストレージノード全体について固定することができ、基盤となるハードウェアへの変更がない限り、変更することができない。
【００６２】
データページ。データページは、ユーザーページのデータを圧縮形態で格納するために使用されるストレージページの１つのタイプである。いくつかの実施形態では、データページに格納されたデータの全ての部分は、ログ記録に関連付けられ、各々のログ記録は、データページ内のセクタ（データセクタとも呼ばれる）へのポインタを含むことができる。いくつかの実施形態では、データページは、各々のセクタによって提供されるもの以外の一切の埋め込まれたメタデータを含まなくてもよい。データページのセクタ間の関係が存在しなくてもよい。代わりに、ページへの編成は、セグメントに対するデータの割り当ての粒度の表現としてのみ存在することができる。
【００６３】
ストレージノード。ストレージノードは、ストレージノードサーバーコードが展開される単一の仮想マシンである。各々ストレージノードは、複数のローカルで付属のＳＳＤを含むことができ、１つ以上のセグメントへのアクセスのためのネットワークＡＰＩを提供することができる。いくつかの実施形態では、様々なノードは、アクティブリストに、または劣化リストに（例えば、それらが、応答が遅いまたはそれ以外に損なわれているが、完全に使用不能ではない場合）載ることができる。いくつかの実施形態では、クライアント側ドライバは、観測された性能に基づいて、それらを交換すべきかの可否及びその時期を決定するために、かつ／またはデータを様々なノード間に再分配する時期及びその方法を決定するために、ノードをアクティブであるまたは劣化したものとして分類することを補助する（または、担当する）ことができる。
【００６４】
ＳＳＤ。本明細書で言及される場合、用語の「ＳＳＤ」は、ストレージノードによって見られるようなローカルのブロックストレージボリュームを指すことができ、そのストレージボリュームによって用いられるストレージのタイプ、例えば、ディスク、ソリッドステートドライブ、バッテリバックアップＲＡＭ、ＮＶＭＲＡＭデバイス（例えば、１つ以上のＮＶＤＩＭＭ）、または永続的ストレージデバイスの別のタイプ、にかかわらない。ＳＳＤは、必ずしもハードウェアに直接マッピングされない。例えば、単一のソリッドステートストレージデバイスは、各々のボリュームが複数のセグメントに分割され、またそれらにわたってストライピングされる複数のローカルのボリュームに分けることができ、及び／または単一のドライバは、異なる実施形態では、単に管理を容易にするために複数のボリュームに分けることができる。いくつかの実施形態では、各々ＳＳＤは、単一の固定場所に割り当てマップを格納することができる。このマップは、どのストレージページが特定のセグメントによって所有されているか、またそれらのページのうちのどれがログページ（データページとは対照的である）であるか、を示すことができる。いくつかの実施形態では、ストレージページは、各々のセグメントに事前に割り当てることができ、その結果、転送処理は割り当てを待つ必要がなくてもよい。割り当てマップへの全ての変更は、新規に割り当てられたストレージページがセグメントによって使用される前に、永続的にすることが必要になる場合もある。
【００６５】
分散データベース最適化ストレージシステムの一実施形態は、図４のブロック図によって例示される。この実施例では、データベースシステム４００は、相互接続４６０を介して、データベースエンジンヘッドノード４２０、読み取り用レプリカ４２２ａ、及び読み取り用レプリカ４２２ｂ（図示／説明を容易にするために、２つだけの読み取り用レプリカが示されている）と通信する分散データベース最適化ストレージシステム４１０を含む。図３に例示された実施例のように、データベースエンジンヘッドノード４２０は、クライアント側ストレージサービスドライバ４２５を含むことができ、読み取り用レプリカ４２２ａ及び４２２ｂは、各々クライアント側ドライバ４２４ａ及び４２４ｂをそれぞれ含むことができる。この実施例では、分散型データベース最適化ストレージシステム４１０は、複数のストレージシステムサーバーノード（４３０、４４０、及び４５０として示されたものを含む）を含み、それらの各々は、それが格納するセグメント（複数可）についてのデータページ及びやり直しログのためのストレージ、及び様々なセグメント管理機能を行うためのハードウェア及び／またはソフトウェアを含む。例えば、各々のストレージシステムサーバーノードは、複製（ローカルで、例えば、ストレージノード内で）、やり直しログを合体してデータページを生成すること、クラッシュリカバリ、及び／またはスペース管理（例えば、セグメントのための）、以上の操作のいずれかまたは全てのうちの少なくとも一部を行うように構成されたハードウェア及び／またはソフトウェアを含むことができる。各々のストレージシステムサーバーノードはまた、クライアント（例えば、ユーザー、クライアントアプリケーション、及び／またはデータベースサービス加入者）に代わって、データブロックを格納することができる複数の付属のストレージデバイス（例えば、ＳＳＤ）を有することができる。
【００６６】
図４に例示された実施例では、ストレージシステムサーバーノード４３０は、データページ（複数可）４３３、セグメントやり直しログ（複数可）４３５、セグメント管理機能４３７、及び付属のＳＳＤ４７１〜４７８を含む。ラベルの「ＳＳＤ」は、ソリッドステートドライブを指してもしなくてもよいが、より一般的には、その基盤となるハードウェアに関係なく、ローカルのブロックストレージボリュームを指すことができることに再度留意されたい。同様に、ストレージシステムサーバーノード４４０は、データページ（複数可）４４３、セグメントやり直しログ（複数可）４４５、セグメント管理機能４４７、及び付属のＳＳＤ４８１〜４８８を含み、ストレージシステムサーバーノード４５０は、データページ（複数可）４５３、セグメントやり直しログ（複数可）４５５、セグメント管理機能４５７、及び付属のＳＳＤ４９１〜４９８を含む。
【００６７】
前述のように、いくつかの実施形態では、セクタはＳＳＤのアライメントのユニットであり、書き込みが部分的にしか完了しないリスクを伴わずに書き込むことができるＳＳＤの最大サイズであることができる。例えば、様々なソリッドステートドライブ及び回転メディアのセクタサイズは、４ＫＢであることができる。本明細書に記載の分散データベース最適化ストレージシステムのいくつかの実施形態では、各々及び全てのセクタは、セクタが一部であるより高いレベルのエンティティに関係なく、セクタの先頭に６４ビット（８バイト）のＣＲＣを有することができる。そのような実施形態では、このＣＲＣ（セクタがＳＳＤから読み取られる度に検証することができる）は、破損の検出に使用することができる。いくつかの実施形態では、各々及び全てのセクタはまた、値がセクタをログセクタ、データセクタ、または未初期化セクタとして識別する「セクタタイプ」バイトを含むことができる。例えば、いくつかの実施形態では、０のバイト値のセクタタイプは、セクタが未初期化であることを示すことができる。
【００６８】
図５は、一実施形態に従って、データベースシステムにおける別個の分散データベース最適化ストレージシステムの使用を例示するブロック図である。この実施例では、１つ以上のクライアントプロセス５１０は、データベースエンジン５２０及び分散データベース最適化ストレージシステム５３０を含むデータベースシステムによって維持された１つ以上のデータベーステーブルに、データを格納することができる。図５に例示された実施例では、データベースエンジン５２０は、データベース層構成要素５６０及びクライアント側ドライバ５４０（分散データベース最適化ストレージシステム５３０と、データベース層構成要素５６０と、読み取り用レプリカ５２２との間でインターフェースとして機能する）を含む。いくつかの実施形態では、データベース層構成要素５６０は、図３のクエリ解析、最適化、及び実行構成要素３０５、並びにトランザクション及び一貫性管理構成要素３３０によって行われるもののような機能を行うことができ、かつ／またはデータページ、トランザクションログ、及び／または取り消しログ（図３のデータページキャッシュ３３５、トランザクションログ３４０、及び取り消しログ３４５によって格納されるもののような）を格納することができる。
【００６９】
この実施例では、１つ以上のクライアントプロセス５１０は、データベースクエリ要求５１５（ストレージノード５３５ａ〜５３５ｎのうちの１つ以上に格納されたデータをターゲットにする読み取り及び／または書き込み要求を含むことができる）を、データベース層構成要素５６０に送ることができ、またデータベースクエリ応答５１７（例えば、書き込み肯定応答及び／または要求されたデータを含む応答）をデータベース層構成要素５６０から受け取ることができる。データページに書き込むための要求を含む各々のデータベースクエリ要求５１５は、解析され、最適化されて、１つ以上の書き込み記録要求５４１を生成することができ、それは、分散データベース最適化ストレージシステム５３０への後続のルーティングのために、クライアント側ドライバ５４０に送ることができる。この実施例では、クライアント側ドライバ５４０は、各々の書き込み記録要求５４１に対応する１つ以上のやり直しログ記録５３１を生成することができ、それらを分散データベース最適化ストレージシステム５３０のストレージノード５３５のうちの特定の１つに送ることができる。いくつかの実施形態では、書き込み要求の場合、クライアント側ドライバ５４０は、キャッシュ無効化指示５４６（例えば、通知及び／または１つ以上のやり直しログ記録５３１）を読み取り用レプリカ５２２のクライアント側ドライバ５２４に送ることができる。分散データベース最適化ストレージシステム５３０は、各々のやり直しログ記録５３１についての対応する書き込み肯定応答５３２をデータベースエンジン５２０に（具体的には、クライアント側ドライバ５４０に）返すことができる。クライアント側ドライバ５４０は、これらの書き込み肯定応答をデータベース層構成要素５６０に（書き込み応答５４２として）渡すことができ、次にそれは、対応する応答（例えば、書き込み肯定応答）を１つ以上のクライアントプロセス５１０にデータベースクエリ応答５１７の１つとして送ることができる。
【００７０】
この実施例では、データページを読み取る要求を含む各々のデータベースクエリ要求５１５は、解析され、最適化されて、１つ以上の読み取り記録要求５４３を生成することができ、それは、分散データベース最適化ストレージシステム５３０への後続のルーティングのためにクライアント側ドライバ５４０に送ることができる。この実施例では、クライアント側ドライバ５４０は、これらの応答を分散データベース最適化ストレージシステム５３０のストレージノード５３５のうちの特定の１つに送ることができ、分散データベース最適化ストレージシステム５３０は、要求されたデータページ５３３をデータベースエンジン５２０に（具体的には、クライアント側ドライバ５４０に）返すことができる。クライアント側ドライバ５４０は、返されたデータページをデータベース層構成要素５６０に返信データ記録５４４として送ることができ、データベース層構成要素５６０は、次にデータページを１つ以上のクライアントプロセス５１０にデータベースクエリ応答５１７として送ることができる。ある読み取り及び書き込み要求は、分散データベース最適化ストレージシステム５３０に行われることに加えて、またはその代わりに、データベースエンジンのキャッシュ（例えば、データページキャッシュ３３５）に行うことができることに留意されたい。解析された最適化するある読み取り要求の一部として、読み取りクエリ計画の一部または全部は、読み取りを実行するために読み取り用レプリカ５２２に渡すことができる。
【００７１】
いくつかの実施形態では、様々なエラー及び／またはデータ損失メッセージ５３４は、分散データベース最適化ストレージシステム５３０からデータベースエンジン５２０に（具体的には、クライアント側ドライバ５４０に）に送ることができる。これらのメッセージは、エラー及び／または損失報告メッセージ５４５としてクライアント側ドライバ５４０からデータベース層構成要素５６０に、次にデータベースクエリ応答５１７と共に（またはその代わりに）１つ以上のクライアントプロセス５１０に、渡すことができる。
【００７２】
本明細書に記載のように、様々な実施形態では、書き込み要求の場合、クライアント側ドライバ５４０は、キャッシュ無効化指示５４６（例えば、通知及び／または１つ以上のやり直しログ記録５３１）を、読み取り用レプリカ５２２のクライアント側ドライバ５２４に送ることができる。キャッシュ無効化指示５４６は、キャッシュ５２６内の１つ以上のキャッシュされたデータ記録が古いことを示すことができる。一実施形態では、キャッシュ無効化指示５４６は、読み取り用レプリカ５２２のキャッシュ５２６が書き込み要求に従って変更されたデータを格納するかどうかに関係なく、読み取り用レプリカ５２２に送ることができる。別の実施形態では、データベースエンジン５２０は、存在する場合、どの読み取り用レプリカ（複数可）が書き込み要求によって変更されたデータに対応するデータを格納しているかを決定し、それらの読み取り用レプリカ（複数可）にキャッシュ無効化指示５４６を選択的に送ることができる。
【００７３】
いくつかの実施形態では、クライアントプロセス（複数可）５１０は、データベース読み取り要求５７２を読み取り用レプリカ５２２に直接提出し、データベースを照会することができる。古くないキャッシュされたデータに対する要求の場合、読み取り用レプリカは、要求されたデータをキャッシュ５２６から取り出し、それをクライアントプロセス（複数可）にデータベース読み取り応答５７６として返すことができる。古いデータとしてキャッシュ５２６内に存在するデータ記録に対する、またはキャッシュ５２６内に存在しないデータ記録に対する、要求の場合、クライアント側ドライバ５２４は、ページ要求（複数可）５７３を分散データベース最適化ストレージシステム５３０に送ることができ、要求されたデータページ（複数可）５７４は、データベース読み取り応答５７６として、読み取り用レプリカ５２２に返され、次にクライアントプロセス（複数可）５１０に提供することができる。一実施形態では、データページ（複数可）５７４は、読み取り用レプリカ５２２のクライアント側ドライバ５２４を介してルーティングすることができ、データページ（複数可）は、キャッシュ５２６内に格納され、古いキャッシュされたデータを交換する、またはコールドデータ（例えば、他のキャッシュされたデータよりアクセスされる頻度が低い）として決定されたある他のデータを交換する、ことができる。
【００７４】
様々な実施形態では、読み取り用レプリカ５２２は、主ノード／データベースエンジンに転換することができる。そうすることで、転換された読み取り用レプリカは、データベースエンジン５２０に示された構成要素、及び図５に示されていない他のもの（例えば、データページキャッシュ３３５、トランザクション及び一貫性管理３３０など）の全てを含むように構成することができる。そのような転換の準備を支援するために、データベースエンジン５２０（まだ主ノードである間）は、データベースエンジンのキャッシュ（例えば、データページキャッシュ３３５）に格納されたデータページの指示（図５に示されていないが、クライアント側ドライバ５４０からクライアント側ドライバ５２４に送ることができる）を、読み取り用レプリカ５２２に送ることができる。本明細書に記載のように、指示は、読み取り及び書き込み側でホットである（例えば、最も活発に読み取られ、かつ書き込まれる）データページのマニフェストであることができる。読み取り用レプリカ５２２は、次にそれらのデータページのバージョンを、例えば、分散データベース最適化ストレージサービス５３０から取り出すことができ、それらの取り出したデータページをキャッシュに格納することができる。マニフェスト／指示は、周期的に（例えば、毎時、毎日など）、またはある事象の際に（例えば、読み取り／書き込み毎に、１０回の読み取り／書き込み毎に、可能性のある主ノードのフェイルオーバーを示すある内部主ノードロジックの際に）送ることができる。このように、読み取り用レプリカ５２２のキャッシュ５２６は、以前より比較的ウォームであることができ、これは、より迅速なリカバリ及び障害が発生した際の主ノードへの転換を促進することができる。
【００７５】
様々な実施形態では、本明細書で記載のように、以前の主ノードのデータベースエンジン５２０から読み取り用レプリカ５２２に対して実行中途であって、読み取り用レプリカ５２２に対して未知である（例えば、示されていない、受け取られていない）が、分散データベース最適化ストレージサービス５３０によって受け取られたトランザクション（例えば、書き込み）に対応するログ記録（例えば、やり直し及び／または取り消し）が存在することができる。したがって、マニフェストがキャッシュ５２６を多少最新に維持するのに役立つ場合でも、キャッシュ５２６は、それにもかかわらず、まだいくつかの古いエントリを含む場合がある。したがって、一実施形態では、新規の主ノードに転換される読み取り用レプリカ５２２は、読み取り用レプリカ５２２が受け取った最後のログ記録（例えば、ＬＳＮのような単調に増加する識別子によって識別される）がどれであったかを（転換の前後に）決定することができる。読み取り用レプリカ５２２は、次に、決定された変更した最後のログ記録よりも後のそれぞれの識別子を有するログ記録に対応するキャッシュ５２６内のデータを無効化することができる。読み取り用レプリカは、実際のログ記録及び／またはデータ記録を（例えば、分散データベース最適化ストレージデバイス５３０に）要求し、キャッシュ５２６をもはや古くないように更新することができる。更にまたはあるいは、読み取り用レプリカ５２２は、実行中途のトランザクションのインメモリ構造（例えば、トランザクションテーブル）を維持することができる。読み取り用レプリカは、実行中途のトランザクションを分散データベース最適化ストレージサービス５３０に要求し、次にインメモリ構造を実行中途のトランザクションで更新することができる。一実施形態では、転換された読み取り用レプリカは、実行中途のトランザクションの特定のトランザクションが主ノードの障害に関連していた（例えば、それをクラッシュさせた）ことを決定し、そのトランザクションの変更をロールバックする（例えば、それを適用しない）ことができる。分散データベース最適化ストレージサービス５３０のようなログ構造化ストレージシステムでは、分散データベース最適化ストレージサービス５３０によって提供される実行中途のトランザクションは、各々の実行中途のトランザクションを含まなくてもよいということに留意されたい。例えば、実行中途のトランザクションが、データ記録Ｘを値「１」から値「２」に変更したＬＳＮ１によって識別されるやり直しログ、次にデータ記録Ｘを値「４」に変更したＬＳＮ２によって識別されるやり直しログを含み、ＬＳＮ２に関連する変更を取り消したＬＳＮ３によって識別される取り消しログが続いた場合には、分散データベース最適化ストレージサービス５３０は、ＬＳＮ１によって識別されたやり直しログ（ＬＳＮ２及び３に関連するログではない）を読み取り用レプリカに提供するだけでもよい。
【００７６】
様々な実施形態では、図５において、データベースエンジン５２０と分散データベース最適化ストレージシステム５３０との間のＡＰＩ呼出し及び応答（例えば、ＡＰＩ５３１〜５３４）、並びに／またはクライアント側ドライバ５４０とデータベース層構成要素５６０との間のＡＰＩ呼出し及び応答（例えば、ＡＰＩ５４１〜５４５）、並びに／または読み取り用レプリカ５２２と分散データベース最適化ストレージシステム５３０との間のＡＰＩ呼出し及び応答（例えば、ＡＰＩ５７３、５７４）、並びに／またはクライアント側ドライバ５２４とキャッシュ５２６との間のＡＰＩ呼出し及び応答（例えば、ＡＰＩ５７５及び５４７）は、安全なプロキシ接続（例えば、ゲートウェイ制御プレーンによって管理される１つ）を介して実行することができ、またはパブリックネットワークを介して若しくは、あるいは、仮想プライベートネットワーク（ＶＰＮ）接続のようなプライベートチャネルを介して、行うことができることに留意されたい。本明細書の記載のデータベースシステムの構成要素に対する及び／またはそれらの間のこれら及び他のＡＰＩは、限定するものではないが、シンプルオブジェクトアクセスプロトコル（ＳＯＡＰ）技術及びＲｅｐｒｅｓｅｎｔａｔｉｏｎａｌ  Ｓｔａｔｅ  Ｔｒａｎｓｆｅｒ（ＲＥＳＴ）技術を含めて、異なる技術に従って実装することができる。例えば、これらのＡＰＩは、必ずしもではないが、ＳＯＡＰ  ＡＰＩまたはＲＥＳＴｆｕｌ  ＡＰＩとして実装することができる。ＳＯＡＰは、ウェブベースサービスの状況で情報を交換するためのプロトコルである。ＲＥＳＴは、分散ハイパーメディアシステムに適するアーキテクチャスタイルである。ＲＥＳＴｆｕｌ  ＡＰＩ（ＲＥＳＴｆｕｌウェブサービスとも呼ぶことができる）は、ＨＴＴＰ及びＲＥＳＴ技術を使用して実装されるウェブサービスＡＰＩである。本明細書に記載のＡＰＩは、いくつかの実施形態では、データベースエンジン５２０及び／または分散データベース最適化ストレージシステム５３０との統合をサポートするために、限定するものではないが、Ｃ、Ｃ＋＋、Ｊａｖａ、Ｃ♯、及びＰｅｒｌを含む様々な言語のクライアントライブラリでラップすることができる。
【００７７】
上述のように、いくつかの実施形態では、データベースシステムの機能的構成要素は、データベースエンジンによって行われるものと別個の分散データベース最適化ストレージシステムで行われるものとの間に分配することができる。１つの特定の実施例では、クライアントプロセス（またはそのスレッド）から何かをデータベーステーブルに挿入する（例えば、記録をデータブロックに加えることによって単一のデータブロックを更新するために）要求を受け取ることに応じて、主ノードの１つ以上の構成要素は、クエリ解析、最適化、及び実行を行うことができ、クエリの各々の部分をトランザクション及び一貫性管理構成要素に送ることができる。トランザクション及び一貫性管理要素は、他のクライアントプロセス（またはそのスレッド）が同じ行を同時に変更することを試みてないことを保証することができる。例えば、トランザクション及び一貫性管理構成要素は、この変更がデータベース内で不可分的に、一貫して、永続的に、かつ独立した方法で行われるのを保証することを担当することができる。例えば、トランザクション及び一貫性管理構成要素は、主ノードのクライアント側ストレージサービスドライバと共に動作し、分散データベース最適化ストレージサービス内のノードの１つに送られるやり直しログ記録を生成し、かつそれを分散データベース最適化サービスに（他のクライアント要求に応じて生成された他のやり直しログと一緒に）ＡＣＩＤ特性がこのトランザクションに適合することを保証する順番及び／またはタイミングで送ることができる。やり直しログ記録（ストレージサービスによって「更新記録」と見なすことができる）を受け取ると、対応するストレージノードは、データブロックを更新することができ、データブロックについてのやり直しログ（例えば、データブロックに向けられた全ての変更の記録）を更新することができる。いくつかの実施形態では、データベースエンジンは、この変更についての取り消しログを生成することを担当することができ、更に取り消しログについてのやり直しログ記録を生成することを担当することができ、それらの両方は、トランザクション機能を保証するためにローカルで（データベース層内で）使用することができる。しかしながら、従来のデータベースシステムとは異なり、本明細書に記載のシステムは、変更をデータブロックに適用するための責任をストレージシステムにシフトすることができる（データベース層でそれらを適用し、変更されたデータブロックをストレージシステムに送るのではなく）。
【００７８】
図６を参照すると、様々な実施形態では、データベースシステム３００は、データベース書き込みに応じて、読み取り用レプリカ内のキャッシュエントリを無効化するように構成することができる。図６の方法は、図３〜５の主ノード、読み取り用レプリカ、または読み取り用レプリカ及び／若しくは主ノードのクライアント側ドライバのような分散データベースシステムの様々な構成要素（例えばノード）によって行われるものとして説明できるが、この方法は、いくつかの場合では、いずれかの特定の構成要素によって行われる必要がない。例えば、いくつかの場合では、図６の方法は、いくつかの実施形態に従って、ある他の構成要素またはコンピュータシステムによって行うことができる。または、いくつかの場合では、データベースシステム３００の構成要素は、図３〜５の実施例に示されるものとは異なる方法で組み合わせられる、または存在することができる。様々な実施形態では、図６の方法は、分散データベースシステムの１つ以上のノードによって行うことができ、それらのうちの１つは、図１０のコンピュータシステムとして示される。図６の方法は、データベース書き込みに応じて、読み取り用レプリカ内のキャッシュエントリを無効化するための方法の一実施例の実現形態として示される。他の実現形態では、図６の方法は、追加のまたは示されているものよりも少ないブロックを含むことができる。例えば、図６の方法は、図７、８、及び／または９の方法の１つ以上のブロックと組み合わせて使用することができる。
【００７９】
６１０では、データベースサービスによって格納されたデータ記録に対する変更を指定する書き込み要求を受け取ることができる。例えば、書き込み要求（例えば、挿入、更新、削除など）は、主ノードによってデータベースサービスのクライアントから受け取ることができる。書き込み要求は、データベーステーブルに格納された所与のデータ記録に行われる変更を指定することができる。簡単な実施例として、書き込み要求は、データ記録Ａを値「２」に変更することを指定することができる。
【００８０】
６２０に示されるように、データ記録に行われる変更を表すログ記録を生成することができる。一実施形態では、主ノード（クライアント側ドライバ）は、データ記録への変更を示すことができるログ記録を生成することができる（例えば、全データページ自体を含まず、値を「２」に変更することになるデータ記録Ａに対する変更）。そのような実施形態では、ログ記録は、データ記録自体を含む変更されたデータページ全体でなくてもよい。
【００８１】
６３０に示されるように、ログ記録は、所与のデータ記録を含むデータページのバージョンを格納する分散ストレージサービスの特定のサーバーノード（または複数のサーバーノード）へ送ることができる（例えば、主ノードのクライアント側ドライバによって）。サーバーノードは、次にログ記録からの変更をサーバーノードによって格納された実際のデータページに適用することができる。
【００８２】
６４０に示されるように、読み取り用レプリカのキャッシュ内に格納された所与のデータ記録のキャッシュされたバージョンが古いことを示すキャッシュ無効化指示は、読み取り用レプリカに（または、複数の読み取り用レプリカに）送ることができる。本明細書に記載のように、様々な実施形態では、キャッシュ無効化指示は、対応するキャッシュされたデータが古くなっている所与のデータ記録を識別する単純な通知であることができ、それは、次に読み取り用レプリカによって格納することができ、かつ／またはそれはまた、ストレージサービスに送られた実際のログ記録を含むことができる（例えば、データ記録のキャッシュされたバージョンに対する読み取り用レプリカによる適用のために）。通知は、読み取り用レプリカによって維持されるデータ構造内に格納することができ、それによって古いデータに対応するデータに対する後続の要求では、読み取り用レプリカは、データが古いことを周知であり、それをそのキャッシュからではなくストレージサービスから取り出す。キャッシュ無効化指示が実際のログ記録を含む実施形態では、読み取り用レプリカは、ログ記録によって指定された変更をそのキャッシュに適用することができる。そうした後、そのキャッシュエントリ（及びデータ記録）は、もはや古いものとして示されなくてもよい。例えば、そのキャッシュを更新した後、クライアント側ドライバまたは読み取り用レプリカのある他の構成要素は、その特定のデータ記録について古くなっているキャッシュの指示を削除することができる（例えば、古くなっているキャッシュのエントリのリストを維持するデータ構造から）。いくつかの実施形態では、システムは非同期であることができ、読み取り用レプリカのキャッシュは古くなっている場合もあるので、それは、ストレージサービスによって格納されたもの及び主ノードからのログ記録で示されたものに基づいて、そのキャッシュを更新することができることに留意されたい。図７は、そのようなシナリオを以下でより詳細に説明する。
【００８３】
図７を参照すると、様々な実施形態において、読み取り用レプリカは、読み取り要求を受け取り、それに応答するように構成することができる。図７の方法は、図３〜５の読み取り用レプリカまたは読み取り用レプリカのクライアント側ドライバのような分散データベースシステムの様々な構成要素（例えば、ノード）によって行われるものとして説明することができるが、この方法は、いくつかの場合では、いずれかの特定の構成要素によって行われる必要がない。例えば、いくつかの場合では、図７の方法は、いくつかの実施形態に従って、ある他の構成要素またはコンピュータシステムによって行うことができる。または、いくつかの場合では、データベースシステム３００の構成要素は、図３〜５の実施例に示されるものとは異なる方法で組み合わせる、または存在することができる。様々な実施形態では、図７の方法は、分散データベースシステムの１つ以上のノードで行うことができ、それらのうちの１つは、図１０のコンピュータシステムとして示される。図７の方法は、読み取り要求を受け取り、かつそれに応答する読み取り用レプリカのための方法の一実施例の実現形態として示される。他の実現形態では、図７の方法は、追加のまたは示されたものよりも少ないブロックを含むことができる。例えば、図７の方法は、図６、８、及び／または９の方法の１つ以上のブロックと組み合わせて使用することができる。
【００８４】
７１０に例示されているように、読み取り用レプリカは、データ記録（古くなっているエントリに対応する）を読み取る要求を（例えば、クライアントから）受け取ることができる。データ記録を読み取る要求は、ブロック６１０〜６４０が行われた後のある時に起こることができる。例えば、多くの読み取り及び／または書き込みは、ブロック７１０で、古くなっているエントリに対応するデータ記録に対する要求を受け取る前に、他のデータ記録に対して起こることができる。または、そのデータ記録が特別にホットである場合には、それは、データベース層によって受け取られる次の要求であってもよい。
【００８５】
読み取り用レプリカはまた、他のデータ記録に対する要求を受け取ることができる（例えば、キャッシュ内で古くなっていないもの、キャッシュにまったく格納されていないもの）ことに留意されたい。キャッシュ内で古くなっていないデータ記録に対する要求の場合、読み取り用レプリカは、単に要求されたデータをそのキャッシュからクライアントに返すことができる。読み取り用レプリカのキャッシュに格納されていないデータ記録に対する要求の場合、読み取り用レプリカは、データを分散ストレージサービスに要求し、そのデータをストレージ層から受け取り、そのデータをキャッシュ内に格納し、そのデータを要求するクライアントに提供することができる。
【００８６】
７２０では、読み取り用レプリカのキャッシュ内のデータ記録のキャッシュされたバージョンが古くなっていることを決定することができる。例えば、一実施形態では、そのような決定は、キャッシュ無効化指示がその特定のデータ記録に対して存在する／アクティブであるかどうかの決定に基づくことができる。例えば、一実施形態では、読み取り用レプリカは、どのデータ記録（複数可）に関連するかを含むそのような指示を格納することができる（例えば、データ構造内に）。一実施形態では、古くなっているキャッシュデータの場合、読み取り用レプリカは、要求するクライアントに古くなっているデータを返さなくてもよい。別の実施例では、システムは非同期であることができるので、読み取り用レプリカは、５の値を有する時間的識別子（例えば、ＬＳＮ）が付けられた最新性であるデータ記録のバージョンをそのキャッシュ内に格納することができる。主ノードによってストレージサービスに及び読み取り用レプリカに送られたログ記録は、１０のＬＳＮを有することができる。また、ストレージサービスによって格納されたデータのバージョンは、ＬＳＮ９の時点で最新性であることができる。そのような実施例では、読み取り用レプリカは、そのバージョンが、それが主ノードから受け取るログ記録から更に離れて古くなっていることを決定することができる。本明細書に記載のように、このような実施例では、読み取り用レプリカは、そのキャッシュを主ノードからのログ記録で更に更新する前に、ストレージサービスにログ記録を要求し、そのキャッシュを更新することができる。
【００８７】
７３０に示されるように、読み取り用レプリカは、分散ストレージサービスにデータ記録の現在のバージョンを要求することができる。一実施形態では、分散ストレージサービスは、読み取り用レプリカからの要求に応じて、要求されたデータ記録の現在のバージョン（または、キャッシュされたバージョンを更新するための１つ以上のログ記録）を読み取り用レプリカに返すことができる。上記の実施例を続けると、読み取り用レプリカは、５のＬＳＮの時点で最新性であるデータのバージョンを格納することができ、ストレージサービスは、ＬＳＮ９の時点で最新性のバージョンを格納することができ、主ノードによって送られるログ記録は、ＬＳＮ１０に関連付けることができる。このような実施例では、読み取り用レプリカは、ストレージサービスから、ＬＳＮ９の時点のデータ記録または５〜９の間のＬＳＮに関連付けられた１つ以上のログ記録を要求して取り出し、それらのログ記録をそれ自体で適用することができる。この時点で、読み取り用レプリカのそのデータ記録についてのキャッシュエントリは、ＬＳＮ９の時点で最新性であることができる。次に、読み取り用レプリカは、ＬＳＮ９の時点で最新性であるそのキャッシュされたバージョンを、主ノードからのログ記録で更に更新し、ＬＳＮ１０の時点のデータ記録の現在のバージョンを作成することができる。次に、読み取り用レプリカは、古くなっているキャッシュされたデータを、分散ストレージサービスからのデータ記録の現在のバージョンと交換することができ、７４０で示されるように、次に、読み取り用レプリカは、要求するクライアントにデータ記録の現在のバージョンを送ることができる。
【００８８】
いくつかの実施形態では、ブロック７２０及び７３０は、ブロック７１０で特定のデータ記録に対する要求を必要とせずに、主ノードからログ記録を受け取ると、行うことができる。同様のシナリオは、図８のブロック８３０で後述する。更に、読み取り用レプリカのキャッシュの更新は、主ノードからの無効化指示（例えば、ログ記録）を受け取ることに応じる以外の時点で行うことができることに更に留意されたい。例えば、読み取り用レプリカは、ストレージサービスによって格納されたデータ記録のバージョンがより最新である（例えば、より後のＬＳＮに関連付けられる）ことを決定し、最新のデータ記録またはログ記録を要求して受け取り、それ自体のキャッシュに適用することができる。
【００８９】
図８を参照すると、様々な実施形態では、データベースシステム３００は、読み取り用レプリカのキャッシュを更新する（ウォームを維持する）ように構成することができる。図８の方法は、図３〜５の読み取り用レプリカまたは読み取り用レプリカのクライアント側ドライバのような分散データベースシステムの様々な構成要素（例えば、ノード）によって行われるものとして説明することができるが、この方法は、いくつかの場合では、いずれかの特定の構成要素によって行われることを必要としない。例えば、いくつかの場合では、図８の方法は、いくつかの実施形態に従って、ある他の構成要素またはコンピュータシステムによって行うことができる。または、いくつかの場合では、データベースシステム３００の構成要素は、図３〜５の実施例に示されるものとは異なる方法で組み合わせるまたは存在することができる。様々な実施形態では、図８の方法は、分散データベースシステムの１つ以上のノードによって行うことができ、それらのうちの１つは、図１０のコンピュータシステムとして示される。図８の方法は、読み取り用レプリカのキャッシュを更新するための方法の一実施例の実現形態として示される。他の実現形態では、図８の方法は、追加のまたは示されたものよりも少ないブロックを含むことができる。例えば、図８の方法は、図６、７、及び／または９の方法の１つ以上のブロックと組み合わせて使用することができる。
【００９０】
８１０に示されるように、どのデータページが主ノードのキャッシュ内に格納されているかの指示は、例えば、主ノードから読み取り用レプリカによって受け取ることができる。一実施形態では、この指示は、読み取り及び書き込み側でホットであるページに対応することができる主ノードのキャッシュに存在するデータページのマニフェストであることができる。マニフェスト／指示は、周期的に（例えば、毎時、毎日など）、またはある事象の際に（例えば、読み取り／書き込み毎に、１０回の読み取り／書き込み毎に、可能性のある主ノードのフェイルオーバーを示すある内部主ノードロジックの際に）送ることができる。
【００９１】
８２０では、読み取り用レプリカのキャッシュは、主ノードのキャッシュ内に格納されたデータページのバージョンで更新することができる。例えば、読み取り用レプリカは、例えば分散データベース最適化ストレージサービスからのマニフェストから、データページのバージョンを要求する／取り出すことができる。読み取り用レプリカは、次にそれらの取り出したデータページをそれらのそれぞれのキャッシュ内に保存することができる。このように、読み取り用レプリカのキャッシュは、ウォームであることができ、それによって、主ノードへの転換／フェイルオーバーの発生時により迅速な転換／起動を可能にすることができる。
【００９２】
８３０に例示されるように、読み取り用レプリカのキャッシュは、実行中途のトランザクションで更新することができる。一実施形態では、以前の主ノードから読み取り用レプリカに対して実行中途であって、読み取り用レプリカに対して未知である（例えば、示されていない、受け取られていない）が、分散ストレージサービスによって受け取られたトランザクションに対応するログ記録（例えば、やり直し及び／または取り消し）が存在することができる。したがって、マニフェストが読み取り用レプリカのそれぞれのキャッシュを多少最新に維持するのに役立つ場合でも、キャッシュは、それにもかかわらず、まだいくつかの古いエントリを含む場合がある。したがって、一実施形態では、新規の主ノードに転換される読み取り用レプリカ及び／または多くの読み取り用レプリカは、読み取り用レプリカが認識している最後のログ記録（例えば、ＬＳＮのような単調に増加する識別子によって識別される）がどれであったかを（転換の前後に）決定することができる。読み取り用レプリカは、次に、分散ストレージサービスに、どのデータ記録が読み取り用レプリカが認識している最後のログ記録よりも後のログ記録に関連付けられているかを要求することができる。その情報から、読み取り用レプリカは、どのデータが古くなっているか（読み取り用レプリカが認識していなかったログ記録に関連付けられた記録）を決定し、それをそのように示すことができる。一実施形態では、読み取り用レプリカは、次に、それ自体のキャッシュを更新してそれがもはや無効でない／古くないようにするために、実際のログ記録及び／またはデータ記録を要求することができる。
【００９３】
一実施形態では、読み取り用レプリカは、実行中途のトランザクションのトランザクションテーブルを維持することができる。実行中途のトランザクションは、本明細書では、分散ストレージサービスが主ノードから受け取ったが読み取り用レプリカのいずれによっても知られていない／受け取られていないデータ、に対するトランザクションを説明するために使用される。読み取り用レプリカは、分散ストレージサービスが実行中途のトランザクションを読み取り用レプリカに送るように要求し、次にインメモリ構造（例えば、トランザクションテーブル）を実行中途のトランザクションで更新することができる。転換された読み取り用レプリカは、実行中途のトランザクションの特定のトランザクションが主ノードの障害に関連していた（例えば、それをクラッシュさせた）ことを決定し、そのトランザクションの変更をロールバックする（例えば、それを適用しない）ことができる。
【００９４】
図９を参照すると、様々な実施形態では、データベースシステム３００は、読み取り用レプリカを新規の主ノードに転換する（例えば、フェイルオーバーする）ように構成することができる。図９の方法は、図３〜５の読み取り用レプリカまたは読み取り用レプリカのクライアント側ドライバのような分散データベースシステムの様々な構成要素（例えば、ノード）によって行われるものとして説明することができるが、この方法は、いくつかの場合では、いずれかの特定の構成要素によって行われることを必要としない。例えば、いくつかの場合では、図９の方法は、いくつかの実施形態に従って、ある他の構成要素またはコンピュータシステムによって行うことができる。または、いくつかの場合では、データベースシステム３００の構成要素は、図３〜５の実施例に示されるものとは異なる方法で組み合わせるまたは存在することができる。様々な実施形態では、図９の方法は、分散データベースシステムの１つ以上のノードによって行うことができ、それらのうちの１つは、図１０のコンピュータシステムとして示される。図９の方法は、読み取り用レプリカを主ノードに転換する／フェイルオーバーするための方法の一実施例の実現形態として示される。他の実現形態では、図９の方法は、追加のまたは示されたものよりも少ないブロックを含むことができる。例えば、図９の方法は、図６、７、及び／または８の方法の１つ以上のブロックと組み合わせて使用することができる。
【００９５】
９１０では、データベース主ノードの障害事象を検出することができる。主ノードの障害は、電力の損失、使用可能なメモリ無し、システム不具合などのように主ノードが機能を継続できないシステムの障害の全てのタイプであることができる。検出は、様々な方法で起こることができる。例えば、特定の読み取り用レプリカのクライアント側ドライバは、障害が発生した主ノードと通信できなくなることがある。別の実施例では、障害が発生した主ノードは、主ノードの差し迫った障害を示す困窮の指示を読み取り用レプリカの１つ以上に配信することができる。障害を検出する他の実施例もまた、存在する。
【００９６】
９２０に例示されるように、読み取り用レプリカは、主ノードに転換され、以前の主ノードを交換することができる。このような転換は、障害が発生した主ノードを交換するためのフェールオーバープロセスの一部であることができる。どの読み取り用レプリカを主ノードに転換するかは、本明細書に記載のように、様々な方法に従って決定することができる（例えば、事前に選択される、支持される、最初に検出したもの、ウェブサービスプラットフォームによって選択される、など）。一実施形態では、転換された読み取り用レプリカは、ストレージ層並びに他の読み取り用レプリカとの確立された接続を既に有することができる。そうでない場合、９２０での転換はまた、そのような接続を確立することを含むことができる。実行中途のトランザクションが、転換された読み取り用レプリカのキャッシュが完全に最新でない状態で、存在する場合、図８の方法の１つ以上のブロックは、キャッシュを更に更新するように行うことができる。本明細書に記載のように、読み取り用レプリカは、主ノードによって書き込まれるものと同じデータストレージに付属するので、読み取り用レプリカ用と主ノード用に別個のストレージを使用するシステムとは対照的に、読み取り用レプリカを主ノードに転換する際にデータの損失が起こらないことが可能である。
【００９７】
９３０に示されるように、新規の主ノードは、例えば、他の読み取り用レプリカによる、クライアントによる、及び／またはストレージサービスによる、アクセスに使用可能にすることができる。例えば、一実施形態では、新規の主ノードは、読み取り用レプリカ及び／またはストレージサービス（及び／または、存在する場合、アクティブなクライアント）と通信することができ、それが新規の主ノードであることを示し、かつそれが準備完了状態にあることを示すことができる。
【００９８】
開示された読み取り用レプリカは、データブロックレベルで（永続的なストレージへの）物理的複製を必要としないことにより、及び／またはディスクの両方のセットに実行される更新で２つのデータベース全体を必要としないことにより、効率を向上することができる。代わりに、主ノード及び読み取り用レプリカは、同じストレージに付属することができる。更に、キャッシュは、同期に（またはほぼ同期に）維持することができるので、それは、読み取り用レプリカ間のロッキングまたは一貫性を必要としない能力を向上することができる。キャッシュを同期に維持することはまた、新規の主ノードにウォームのキャッシュを既に備えさせることにより、主ノードへの読み取り用レプリカのフェイルオーバー／転換を促進することができ、それによって障害リカバリ時間全体を効果的に減少することができる。
【００９９】
本明細書に記載の方法（例えば、図６〜９）は、様々な実施形態では、ハードウェア及びソフトウェアの任意の組み合わせによって実装することができる。例えば、一実施形態では、方法は、プロセッサに結合されたコンピュータ可読ストレージ媒体に格納されたプログラム命令を実行する１つ以上のプロセッサを含むコンピュータシステム（例えば、図１０のようなコンピュータシステム）によって実装することができる。プログラム命令は、本明細書に記載の機能を実装するように構成することができる（例えば、本明細書に記載のデータベースサービス／システム及び／またはストレージサービス／システムを実装する様々なサーバー及び他の構成要素の機能）。
【０１００】
図１０は、様々な実施形態に従って、本明細書に記載のデータベースシステムの少なくとも一部を実装するように構成されたコンピュータシステムを示すブロック図である。例えば、コンピュータシステム１０００は、様々な実施形態では、データベース層の主ノード、読み取り用レプリカ、またはデータベース層のクライアントに代わってデータベーステーブル及び関連するメタデータを格納する別個の分散データベース最適化ストレージシステムの複数のストレージノードのうちの１つ、を実装するように構成することができる。コンピュータシステム１０００は、限定するものではないが、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップまたはノートブックコンピュータ、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、コンシューマデバイス、アプリケーションサーバー、ストレージデバイス、電話、携帯電話、またはコンピューティングデバイスの一般的な任意のタイプ、を含む様々なタイプのデバイスのいずれかであることができる。
【０１０１】
コンピュータシステム１０００は、入力／出力（Ｉ／Ｏ）インターフェース１０３０を介してシステムメモリ１０２０に結合された１つ以上のプロセッサ１０１０（それらのいずれもシングルまたはマルチスレッドであってよい複数のコアを含むことができる）。コンピュータシステム１０００は、Ｉ／Ｏインターフェース１０３０に結合されたネットワークインターフェース１０４０を更に含む。様々な実施形態では、コンピュータシステム１０００は、１つのプロセッサ１０１０を含むユニプロセッサシステム、またはいくつかのプロセッサ１０１０（例えば、２つ、４つ、８つ、または別の適切な数）を含むマルチプロセッサシステムであってよい。プロセッサ１０１０は、命令を実行することができる任意の適切なプロセッサであってよい。例えば、様々な実施形態では、プロセッサ１０１０は、ｘ８６、ＰｏｗｅｒＰＣ、ＳＰＡＲＣ、またはＭＩＰＳ  ＩＳＡ、または任意の他の適切なＩＳＡのような様々なインストラクションセットアーキテクチャ（ＩＳＡ）のいずれかを実装する汎用または組み込み型プロセッサであってよい。マルチプロセッサシステムでは、プロセッサ１０１０の各々は、必ずしもではないが、同じＩＳＡを共通に実装することができる。コンピュータシステム１０００はまた、通信ネットワーク（例えば、インターネット、ＬＡＮなど）を介して他のシステム及び／または構成要素と通信するための１つ以上のネットワーク通信デバイス（例えば、ネットワークインターフェース１０４０）を含む。例えば、システム１０００で実行されるクライアントアプリケーションは、ネットワークインターフェース１０４０を使用し、本明細書に記載のデータベースシステムの構成要素の１つ以上を実装するシングルサーバーまたはサーバーのクラスタで実行されるサーバーアプリケーションと通信することができる。別の実施例では、コンピュータシステム１０００で実行されるサーバーアプリケーションのインスタンスは、ネットワークインターフェース１０４０を使用し、他のコンピュータシステム（例えば、コンピュータシステム１０９０）に実装することができるサーバーアプリケーションの他のインスタンス（または、別のサーバーアプリケーション）と通信することができる。
【０１０２】
例示された実施形態では、コンピュータシステム１０００はまた、１つ以上の永続的ストレージデバイス１０６０及び／または１つ以上のＩ／Ｏデバイス１０８０を含む。様々な実施形態では、永続的ストレージデバイス１０６０は、ディスクドライブ、テープドライブ、ソリッドステートメモリ、他のマスストレージデバイス、または任意の他の永続的ストレージデバイスに対応することができる。コンピュータシステム１０００（または分散アプリケーションまたはそこで動作するオペレーティングシステム）は、命令及び／またはデータを永続的なストレージデバイス１０６０に所望に格納することができ、必要に応じて格納された命令及び／またはデータを取り出すことができる。例えば、いくつかの実施形態では、コンピュータシステム１０００は、ストレージシステムサーバーノードをホストすることができ、永続的ストレージ１０６０は、そのサーバーノードに付属するＳＳＤを含むことができる。
【０１０３】
コンピュータシステム１０００は、プロセッサ（複数可）１０１０によってアクセス可能な命令及びデータを格納するように構成された１つ以上のシステムメモリ１０２０を含む。様々な実施形態では、システムメモリ１０２０は、任意の適切なメモリ技術を使用して実装することができる（例えば、キャッシュ、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＤＲＡＭ、ＲＤＲＡＭ、ＥＤＯＲＡＭ、ＤＤＲ１０ＲＡＭ、同期ダイナミックＲＡＭ（ＳＤＲＡＭ）、ランバスＲＡＭ、ＥＥＰＲＯＭ、不揮発性／フラッシュ型メモリ、または任意の他のタイプメモリのうちの１つ以上）。システムメモリ１０２０は、本明細書に記載の方法及び技術を実装するために、プロセッサ（複数可）１０１０によって実行可能であるプログラム命令１０２５を含むことができる。様々な実施形態では、プログラム命令１０２５は、プラットフォーム固有バイナリ、Ｊａｖａ（商標）バイトコードのような任意のインタプリタ言語、またはＣ／Ｃ＋＋、Ｊａｖａ（商標）などのような任意の他の言語、またはそれらの任意の組み合わせで、符号化することができる。例えば、例示された実施形態では、プログラム命令１０２５は、様々な実施形態では、データベース層の主ノード、複数の読み取り用レプリカのうちの１つ、またはデータベース層のクライアントに代わってデータベーステーブル及び関連のメタデータを格納する別個の分散データベース最適化ストレージシステムの複数のストレージノードのうちの１つ、の機能を実装するように実行可能であるプログラム命令を含む。いくつかの実施形態では、プログラム命令１０２５は、複数の別個のクライアント、サーバーノード、及び／または他の構成要素を実装することができる。
【０１０４】
いくつかの実施形態では、プログラム命令１０２５は、ＵＮＩＸ（登録商標）、ＬＩＮＵＸ（登録商標）、Ｓｏｌａｒｉｓ（商標）、ＭａｃＯＳ（商標）、Ｗｉｎｄｏｗｓ（商標）などのような様々なオペレーティングシステムのいずれかであることができるオペレーティングシステム（図示せず）を実装するように実行可能な命令を含むことができる。プログラム命令１０２５のいずれかまたは全ては、様々な実施形態に従ってプロセスを行うためにコンピュータシステム（または、他の電子デバイス）をプログラムするために使用することができる命令を格納した非一時的コンピュータ可読ストレージ媒体を含むことができるコンピュータプログラム製品、またはソフトウェアとして提供することができる。非一時的コンピュータ可読ストレージ媒体は、マシン（例えば、コンピュータ」によって可読である形態（例えば、ソフトウェア、処理アプリケーション）で情報を格納するための任意の機構を含むことができる。概して、非一時的コンピュータアクセス可能媒体は、例えば、Ｉ／Ｏインターフェース１０３０を介してコンピュータシステム１０００に結合されたディスクまたはＤＶＤ／ＣＤ−ＲＯＭなどの、磁気または光媒体のようなコンピュータ可読ストレージ媒体またはメモリ媒体、を含むことができる。非一時的コンピュータ可読ストレージ媒体はまた、システムメモリ１０２０または別のタイプのメモリとしてコンピュータシステム１０００のいくつかの実施形態に含むことができるＲＡＭ（例えば、ＳＤＲＡＭ、ＤＤＲ、ＳＤＲＡＭ、ＲＤＲＡＭ、ＳＲＡＭなど）、ＲＯＭなどのような任意の揮発性または不揮発性媒体を含むことができる。他の実施形態では、プログラム命令は、ネットワークインターフェース１０４０を介して実装することができるような、ネットワーク及び／または無線リンクなどの通信媒体を介して搬送される伝播信号（例えば、搬送波、赤外線信号、デジタル信号など）の光、音響、または他の形態を使用して通信することができる。
【０１０５】
いくつかの実施形態では、システムメモリ１０２０は、本明細書に記載のように構成することができるデータストア１０４５を含むことができる。例えば、トランザクションログ、取り消しログ、キャッシュされたページデータ、または本明細書に記載のデータベース層の機能を行う際に使用される他の情報のようなデータベース層（例えば、主ノードに）によって格納されているものとして本明細書に記載の情報は、異なる時点及び様々な実施形態では、１つ以上のノード上のシステムメモリ１０２０のデータストア１０４５内にまたは別の部分内に、永続的ストレージ１０６０内に、及び／または１つ以上の遠隔のストレージデバイス１０７０上に、格納することができる。同じように、読み取り用レプリカのキャッシュ、インメモリデータ構造、マニフェストデータ構造内に格納された様々なデータ記録のような読み取り用レプリカによって格納されているものとして本明細書に記載の情報、及び／または本明細書に記載の読み取り用レプリカの機能を行う際に使用される他の情報は、異なる時点及び様々な実施形態では、１つ以上のノード上のシステムメモリ１０２０のデータストア１０４５内にまたは別の部分内に、永続的ストレージ１０６０内に、及び／または１つ以上の遠隔のストレージデバイス１０７０上に、格納することができる。同様に、ストレージ層によって格納されているものとして本明細書に記載の情報（例えば、やり直しログ記録、データページ、データ記録、及び／または本明細書に記載の分散ストレージシステムの機能を行う際に使用される他の情報）は、異なる時点及び様々な実施形態では、１つ以上のノード上のシステムメモリ１０２０のデータストア１０４５内にまたは別の部分内に、永続的ストレージ１０６０内に、及び／または１つ以上の遠隔のストレージデバイス１０７０上に、格納することができる。概して、システムメモリ１０２０（例えば、システムメモリ１０２０内のデータストア１０４５）、永続的ストレージ１０６０、及び／または遠隔のストレージ１０７０は、データブロック、データブロックのレプリカ、データブロック及び／若しくはそれらの状態に関連するメタデータ、データベース構成情報、及び／または本明細書に記載の方法及び技術を実装する際に使用される任意の他の情報、を格納することができる。
【０１０６】
一実施形態では、Ｉ／Ｏインターフェース１０３０は、ネットワークインターフェース１０４０または他の周辺インターフェースを介することを含めて、プロセッサ１０１０とシステムメモリ１０２０とシステム内の任意の周辺デバイスとの間のＩ／Ｏトラフィックを調整するように構成することができる。いくつかの実施形態では、Ｉ／Ｏインターフェース１０３０は、１つの構成要素（例えば、システムメモリ１０２０）からのデータ信号を別の構成要素（例えば、プロセッサ１０１０）による使用に適するフォーマットに転換するために任意の必要なプロトコル、タイミング、または他のデータ変換を行うことができる。いくつかの実施形態では、Ｉ／Ｏインターフェース１０３０は、例えば、周辺機器相互接続（ＰＣＩ）バス規格またはユニバーサルシリアルバス（ＵＳＢ）規格の変形のような周辺バスの様々なタイプを介して付属するデバイスに対するサポートを含むことができる。いくつかの実施形態では、Ｉ／Ｏインターフェース１０３０の機能は、例えばノースブリッジ及びサウスブリッジのような２つ以上の別個の構成要素に分割することができる。更に、いくつかの実施形態では、システムメモリ１０２０へのインターフェースのようなＩ／Ｏインターフェース１０３０の機能の一部または全部は、プロセッサ１０１０に直接組み込むことができる。
【０１０７】
ネットワークインターフェース１０４０は、コンピュータシステム１０００と他のコンピュータシステム１０９０（１つ以上のストレージシステムサーバーノード、主ノード、読み取り用レプリカノード、及び／または本明細書に記載のデータベースシステムのクライアントを実装することができる）のようなネットワークに付属する他のデバイスとの間でデータの交換を可能にするように構成することができる。更に、ネットワークインターフェース１０４０は、コンピュータシステム１０００と様々なＩ／Ｏデバイス１０５０及び／または遠隔のストレージ１０７０との間の通信を可能にするように構成することができる。入力／出力デバイス１０５０は、いくつかの実施形態では、１つ以上の表示端末、キーボード、キーパッド、タッチパッド、走査デバイス、音声若しくは光認識デバイス、または１つ以上のコンピュータシステム１０００によるデータの入力若しくは取り出しに適する任意の他のデバイスを含むことができる。複数の入力／出力デバイス１０５０は、コンピュータシステム１０００内に存在することができ、またはコンピュータシステム１０００を含む分散システムの様々なノードに分散することができる。いくつかの実施形態では、同様の入力／出力デバイスは、コンピュータシステム１０００から分離することができ、ネットワークインターフェース１０４０などを介して、有線または無線接続により、コンピュータシステム１０００を含む分散システムの１つ以上のノードと対話することができる。ネットワークインターフェース１０４０は、１つ以上の無線ネットワーキングプロトコル（例えば、Ｗｉ−Ｆｉ／ＩＥＥＥ８０２．１１、または別の無線ネットワーキング規格）を共通にサポートすることができる。しかしながら、様々な実施形態では、ネットワークインターフェース１０４０は、例えば、イーサネット（登録商標）ネットワークの他のタイプなどの任意の適切な有線または無線汎用データネットワークを介する通信をサポートすることができる。更に、ネットワークインターフェース１０４０は、アナログ音声ネットワーク若しくはデジタルファイバー通信ネットワークのような電気通信／電話網を介する、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  ＳＡＮのようなストレージエリアネットワークを介する、または任意の他の適切なタイプのネットワーク若しくはプロトコルを介する、通信をサポートすることができる。様々な実施形態では、コンピュータシステム１０００は、図１０に例示されたものに対してより多い、より少ない、または異なる構成要素を含むことができる（例えば、表示器、ビデオカード、オーディオカード、周辺デバイス、ＡＴＭインターフェース、イーサネットインターフェース、フレームリレーインターフェースなどのような他のネットワークインターフェース）。
【０１０８】
本明細書に記載の分散システム実施形態のいずれも、またはそれらの構成要素のいずれも、１つ以上のウェブサービスとして実装することができる。例えば、データベースシステムのデータベース層内の主ノード及び／または読み取り用レプリカノードは、データベースサービス及び／または本明細書に記載の分散ストレージシステムを用いる他のタイプのデータストレージサービスを、クライアントにウェブサービスとして提示することができる。いくつかの実施形態では、ウェブサービスは、ネットワークを介する相互運用可能なマシンツーマシン対話をサポートするように設計されたソフトウェア及び／またはハードウェアシステムによって、実装することができる。ウェブサービスは、ウェブサービス記述言語（ＷＳＤＬ）のような機械処理可能なフォーマットで記述されるインターフェースを有することができる。他のシステムは、ウェブサービスのインターフェースの記述によって定められた方法で、ウェブサービスと対話することができる。例えば、ウェブサービスは、他のシステムが呼び出すことができる様々な操作を定義し、かつ他のシステムが、様々な操作を要求するとき、適合することを期待することができる特定のアプリケーションプログラミングインターフェース（ＡＰＩ）を定義することができる。
【０１０９】
様々な実施形態では、ウェブサービスは、ウェブサービス要求に関連するパラメータ及び／またはデータを含むメッセージの使用により、要求されるまたは呼び出されることができる。そのようなメッセージは、拡張マークアップ言語（ＸＭＬ）のような特定のマークアップ言語に従ってフォーマットすることができ、かつ／またはシンプルオブジェクトアクセスプロトコル（ＳＯＡＰ）のようなプロトコルを使用してカプセル化することができる。ウェブサービス要求を行うために、ウェブサービスクライアントは、要求を含むメッセージを組み立て、ハイパーテキスト転送プロトコル（ＨＴＴＰ）のようなインターネットベースアプリケーション層転送プロトコルを使用し、メッセージをウェブサービスに対応するアドレス可能なエンドポイント（例えば、ユニフォームリソースロケータ（ＵＲＬ））に搬送することができる。
【０１１０】
いくつかの実施形態では、ウェブサービスは、メッセージベース技術ではなく、Ｒｅｐｒｅｓｅｎｔａｔｉｏｎａｌ  Ｓｔａｔｅ  Ｔｒａｎｓｆｅｒ（「ＲＥＳＴｆｕｌ」）技術を使用して実装することができる。例えば、ＲＥＳＴｆｕｌ技術に従って実装されたウェブサービスは、ＳＯＡＰメッセージ内にカプセル化されるのではなく、ＰＵＴ、ＧＥＴ、またはＤＥＬＥＴＥのようなＨＴＴＰ方法内に含まれるパラメータによって、呼び出すことができる。
【０１１１】
上記は、以下の付記の観点からより良く理解することができる。
１．主ノード、各々がキャッシュを有する複数の読み取り用レプリカ、及び分散ストレージサービスを含むデータベースサービスの複数のノードによって、
データベースサービスのクライアントから、データベーステーブル内の所与のデータ記録に向けられた書き込み要求であって、所与のデータ記録に対して行われる変更を指定する書き込み要求を受け取ることと、
所与のデータ記録に対して行われる変更を表すやり直しログ記録を生成することと、
所与のデータ記録を含むデータページのバージョンを格納する分散ストレージサービスの特定のサーバーノードにやり直しログ記録を送ることと、
やり直しログ記録であって、複数の読み取り用レプリカのそれぞれのキャッシュに格納された所与のデータ記録のキャッシュされたバージョンが古くなっていることを示すやり直しログ記録を複数の読み取り用レプリカに送ることと、を行うことを含み、
複数の読み取り用レプリカのうちの１つの読み取り用レプリカによって受け取られた所与のデータ記録の後続の要求が、分散ストレージサービスからの所与のデータ記録の現在のバージョンを要求する読み取り用レプリカを含む、方法。
２．データベースサービスのクライアントからの読み取り用レプリカによって、所与のデータ記録を読み取る要求を受け取ることと、
読み取り用レプリカのキャッシュに格納された所与のデータ記録のキャッシュされたバージョンが古くなっていることを決定することと、
分散ストレージサービスに、所与のデータ記録の現在のバージョンを要求することと、
所与のデータ記録の現在のバージョンをクライアントに送ることと、を更に含む、付記１に記載の方法。
３．どのデータページが主ノードのキャッシュに格納されているかについての指示を、複数の読み取り用レプリカに送ることと、
複数の読み取り用レプリカのそれぞれのキャッシュを、主ノードのキャッシュに格納されたデータページのバージョンで更新することと、を更に含む、付記１に記載の方法。
４．複数の読み取り用レプリカのうちの１つを、転換時に１つの読み取り用レプリカのキャッシュ内の反映されていない更新からデータを損失することなく、新規の主ノードに転換して主ノードを交換することを更に含む、付記１に記載の方法。
５．１つ以上のコンピューティングノードを備え、それらの各々が少なくとも１つのプロセッサ及びメモリを備え、１つ以上のコンピューティングノードが、データベースサービスを集合的に実装するように構成され、データベースサービスが、主ノード、キャッシュを有する読み取り用レプリカ、及び分散ストレージサービスを備え、
主ノードが、
データベースサービスによって格納された特定のデータ記録に対して行われる変更を指定する書き込み要求を受け取り、
特定のデータ記録に対して行われる変更を表すやり直しログ記録を、特定のデータ記録を含むデータページのバージョンを格納する分散ストレージサービスのサーバーノードに送り、かつ
読み取り用レプリカのキャッシュ内の特定のデータ記録のキャッシュされたバージョンが古くなっていることを示す指示を読み取り用レプリカに送るように構成される、システム。
６．指示がキャッシュ無効化通知である、付記５に記載のシステム。
７．指示がやり直しログ記録であり、読み取り用レプリカが、やり直しログ記録を、読み取り用レプリカのキャッシュに格納された特定のデータ記録のキャッシュされたバージョンに適用するように構成される、付記５に記載のシステム。
８．やり直しログ記録が時間的識別子に関連付けられ、読み取り用レプリカが、
分散サーバーノードから、特定のデータ記録のキャッシュされたバージョンに関連付けられた以前の時間的識別子よりも後の時点を表すそれぞれの時間的識別子を有する１つ以上のログ記録を受け取り、かつ
１つ以上のログ記録及びやり直しログ記録を、特定のデータ記録のキャッシュされたバージョンに適用するように構成される、付記７に記載のシステム。
９．読み取り用レプリカが、
データベースサービスのクライアントから、特定のデータ記録を含むデータページを読み取る要求を受け取り、かつ
読み取り用レプリカのキャッシュ内の特定のデータ記録のキャッシュされたバージョンが古くなっているという指示を受け取ることに応じて、データページの現在のバージョンの要求を、分散ストレージサービスに送るように構成される、付記５に記載のシステム。
１０．読み取り用レプリカが、
分散ストレージサービスからデータページの現在のバージョンを受け取り、
特定のデータ記録のキャッシュされたバージョンを、データページの現在のバージョンからの特定のデータ記録の現在のバージョンと交換し、かつ
データページの現在のバージョンを、データベースサービスのクライアントに提供するように更に構成される、付記９に記載のシステム。
１１．読み取り用レプリカが、
データベースサービスのクライアントから、データベースサービスによって格納された異なるデータ記録であって、そのキャッシュされたバージョンが古くなっているものとして示されていない異なるデータ記録を読み取る要求を受け取り、かつ
異なるデータ記録のキャッシュされたバージョンを、データベースサービスのクライアントに提供するように構成される、付記５に記載のシステム。
１２．読み取り用レプリカが、
主ノードから、主ノードのキャッシュに格納された複数のデータページの指示を受け取り、
分散ストレージサービスから複数のデータページのバージョンを取り出し、かつ
複数のデータページの取り出したバージョンを、読み取り用レプリカのキャッシュに格納するように構成される、付記５に記載のシステム。
１３．読み取り用レプリカが、
主ノードの障害に応じて、転換時に読み取り用レプリカのキャッシュ内の反映されていない更新からデータを損失することなく、新規の主ノードに転換するように構成される、付記５に記載のシステム。
１４．読み取り用レプリカが、
分散ストレージサービスから、読み取り用レプリカのキャッシュ内のどのデータが古くなっているかを決定し、かつ
決定された古いデータを古いものとして示すように構成される、付記１３に記載のシステム。
１５．読み取り用レプリカが、
分散ストレージサービスから、分散ストレージサービスが主ノードから受け取ったが、読み取り用レプリカによって以前に受け取られてなかったデータに対する１つ以上のトランザクションを受け取り、かつ
新規の主ノードのトランザクションテーブルを１つ以上のトランザクションで更新するように構成される、付記１３に記載のシステム。
１６．読み取り用レプリカが、
１つ以上のトランザクションの特定のトランザクションが主ノードの障害に関連していたことを決定し、かつ
特定のトランザクションの変更をロールバックするように構成される、付記１５に記載のシステム。
１７．データベースサービスの読み取り用レプリカを実装するようにコンピュータ実行可能であるプログラム命令を格納し、読み取り用レプリカが、
主ノードから、読み取り用レプリカのキャッシュ内の特定のデータのキャッシュされたバージョンが古くなっていることを示すログ記録であって、データベースサービスによって格納された特定のデータに対する更新を示すログ記録を受け取り、
データベースサービスのクライアントから、特定のデータを読み取る要求を受け取り、かつ
特定のデータの現在のバージョンに対する要求をデータベースサービスの分散ストレージサービスに送るように構成される、非一時的コンピュータ可読ストレージ媒体。
１８．ログ記録がログシーケンス番号に関連付けられ、読み取り用レプリカが、
分散ストレージサービスから、特定のデータのキャッシュされたバージョンのログシーケンス番号より後の時点を示すそれぞれのログシーケンス番号を有する１つ以上のログ記録を受け取り、
分散ストレージサービスからの１つ以上のログ記録及び主ノードからのログ記録を特定のデータのキャッシュされたバージョンに適用し、特定のデータの現在のバージョンを作成し、かつ
特定のデータの現在のバージョンを、データベースサービスのクライアントに提供するように更に構成される、付記１７に記載の非一時的コンピュータ可読ストレージ媒体。
１９．読み取り用レプリカが、
転換時に読み取り用レプリカのキャッシュ内の反映されていない更新からデータを損失することなく、主ノードの障害の後に新規の主ノードに転換するように更に構成される、付記１７に記載の非一時的コンピュータ可読ストレージ媒体。
２０．読み取り用レプリカが、
分散ストレージサービスから、読み取り用レプリカのキャッシュ内のどのデータが古くなっているかを決定するように更に構成される、付記１７に記載の非一時的コンピュータ可読ストレージ媒体。
２１．読み取り用レプリカが、
読み取り用レプリカのトランザクションテーブルを、分散ストレージサービスから受け取った１つ以上のトランザクションであって、読み取り用レプリカによって以前に受け取られていなかった１つ以上のトランザクションで更新するように更に構成される、付記１７に記載の非一時的コンピュータ可読ストレージ媒体。
【０１１２】
図に例示されて本明細書に記載された様々な方法は、方法の例となる実施形態を表す。方法は、手動で、ソフトウェアで、ハードウェアで、またはそれらの組み合わせで実装することができる。いずれの方法の順序は、変更することができ、様々な要素は、追加、並べ替え、組み合わせ、省略、変更等することができる。
【０１１３】
上記の実施形態はかなり詳細に説明したが、上記の開示が完全に理解されれば、当業者には明らかとなるように、多数の変形及び変更を行うことができる。以下の特許請求の範囲は、そのような変更及び改変の全てを包含し、したがって、上記の説明は限定的ではなく例示的であると見なされるように解釈されることを意図する。
【図１】
0006404907.tif 000002
【図２】
0006404907.tif 000003
【図３】
0006404907.tif 000004
【図４】
0006404907.tif 000005
【図５】
0006404907.tif 000006
【図６】
0006404907.tif 000007
【図７】
0006404907.tif 000008
【図８】
0006404907.tif 000009
【図９】
0006404907.tif 000010
【図１０】
0006404907.tif 000011