スナップショット生成の多様な実施形態が開示される。本実施形態の内の多様な実施形態は、複数のログレコードを維持するデータベースサービスの分散型ストレージシステムを含んでよい。ログレコードは、データベースサービスによって記憶されるデータに対するそれぞれの変更と関連付けられてよい。本実施形態の内の多様な実施形態は、スナップショットに対応する状態の時点のデータを読み取るために使用できるスナップショットを生成する分散型ストレージシステムを含んでよい。スナップショットを生成することは、ログレコードの内の特定のログレコードの特定のログ識別子(例えば、ログシーケンス番号、タイムスタンプ等)を示すメタデータを生成することを含んでよい。いくつかの実施形態では、メタデータはスナップショット識別子を示してもよい。開示されているスナップショット生成技法は、スナップショット生成の一部としてデータページを読み取る、コピーする、または書き込むことなしに実行されてよい。
ログレコード操作の多様な実施形態も開示される。本実施形態の内の多様な実施形態は、複数のログレコードを受信するデータベースサービスの分散型ストレージシステムを含んでよい。また、本実施形態の内の多様な実施形態は、分散型ストレージシステムの複数のストレージノードの中で複数のログレコードを記憶する分散型ストレージシステムを含んでもよい。本実施形態の内の多様な実施形態は、複数のログレコードを変形させる分散型ストレージシステムをさらに含んでよい。変形は、他の変形の中で、レコードをトリミングすること、切り取ること、削減すること、融合させること、及び/またはそれ以外の場合、削除すること、マージすること、もしくは追加することを含んでよい。
明細書は、まず、開示されているスナップショット動作(例えば、作成、削除、使用、操作等)及びログレコード操作技法を実装するように構成される例のウェブサービスベースのデータベースサービスを説明する。例のウェブサービスベースのデータベースサービスの説明に含まれているのは、データベースエンジン及び別個の分散型データベースストレージサービス等の、例のウェブサービスベースのデータベースサービスの多様な態様である。明細書は、次いでスナップショット動作及びログレコード操作のための方法の多様な実施形態のフローチャートを説明する。次に、明細書は、開示されている技法を実装してよい例のシステムを説明する。明細書を通して多様な例が提供される。
本明細書に説明されるシステムは、いくつかの実施形態では、クライアント(例えば、加入者)がクラウドコンピューティング環境でデータストレージシステムを操作できるようにするウェブサービスを実装してよい。いくつかの実施形態では、データストレージシステムは、高度にスケーラブル且つ拡張可能である企業クラスのデータベースシステムであってよい。いくつかの実施形態では、クエリーは複数の物理リソース全体で分散されるデータベースストレージに向けられてよく、データベースシステムは必要に応じてスケールアップ、またはスケールダウンされてよい。データベースシステムは、異なる実施形態で、多様なタイプ及び/または編成のデータベーススキーマと効果的に機能してよい。いくつかの実施形態では、クライアント/加入者は、例えばSQLインタフェースを介してデータベースシステムに対話的に等、いくつかの方法でクエリーを提出してよい。他の実施形態では、外部アプリケーション及びプログラムは、データベースシステムにオープンデータベースコネクティビティ(ODBC)ドライバインタフェース及び/またはJavaデータベースコネクティビティ(JDBC)ドライバインタフェースを使用してクエリーを提出してよい。
すなわち、本明細書に説明されるシステムは、いくつかの実施形態では、単一のデータベースシステムの多様な機能構成要素が本質的に分散されるサービス指向型データベースアーキテクチャを実装してよい。これらのシステムは、例えば、(それぞれが、アプリケーションサーバ、サーチ機能性、またはデータベースのコア機能を提供するために必要とされる機能性を超える他の機能性等の外来の機能性を含んでよい)複数の完全でモノリシックなデータベースインスタンスを束ねるよりむしろ、データベースの基本的な動作(例えば、クエリー処理、トランザクション管理、キャッシング、及び記憶)を、個々に且つ無関係にスケーラブルであってよい階層に編成してよい。例えば、いくつかの実施形態では、本明細書に説明されるシステムの各データベースインスタンスは、(単一のデータベースエンジンヘッドノード及びクライアント側ストレージシステムドライバを含んでよい)データベース階層、及び(既存のシステムのデータベース階層で従来実行される動作のいくつかを集合的に実行する複数のストレージノードを含んでよい)別個の分散されたストレージシステムを含んでよい。
本明細書により詳細に説明されるように、いくつかの実施形態では、データベースの最低レベルの動作(例えば、バックアップ動作、復元動作、スナップショット動作、回復動作、ログレコード操作動作、及び/または多様なスペース管理動作)のいくつかは、データベースエンジンからストレージ層にオフロードされ、複数のノード及びストレージデバイス全体で分散されてよい。例えば、いくつかの実施形態では、データベースエンジンがデータベーステーブル(またはデータベーステーブルのデータページ)に変更を適用し、次いで修正されたデータページをストレージ層に送信するよりむしろ、記憶されているデータベーステーブル(及びデータベーステーブルのデータページ)に対する変更の適用は、ストレージ層自体の責任であってよい。係る実施形態では、修正されたデータページよりむしろ、リドゥログレコードがストレージ層に送信されてよく、その後リドゥ処理(例えば、リドゥログレコードの適用)はいくぶんゆったりと且つ(例えば、バックグラウンドプロセスによって等)分散された方法で実行されてよい。いくつかの実施形態では、クラッシュ回復(例えば、記憶されているリドゥログレコードからのデータページの再構築)は、ストレージ層によって実行されてもよく、分散された(及び、いくつかの場合、ゆったりとした)バックグラウンドプロセスによって実行されてもよい。
いくつかの実施形態では、リドゥログだけ(及び修正されたデータページではない)がストレージ層に送信されるため、データベース階層とストレージ層との間にあるネットワークトラフィックは、既存のデータベースシステムにおいてよりもはるかに少なくてよい。いくつかの実施形態では、各リドゥログは、各リドゥログが変更を指定する対応するデータページのサイズのほぼ10分の1であってよい。データベース階層及び分散型ストレージシステムから送信される要求が非同期であってよいこと、及び複数の係る要求が一度に送信中であってよいことに留意されたい。
一般的に、1個のデータを与えられた後、データベースの主要な要件は、最終的のその1個のデータを返すことができることである。これを行うために、データベースはそれぞれが異なる機能を実行するいくつかの異なる構成要素(または階層)含んでよい。例えば、従来のデータベースは3つの階層、つまりクエリーパーシング、最適化、及び実行を実行するための第1の階層、トランザクション性(transactionality)、回復、及び耐久性を提供するための第2の階層、及びローカルでアタッチされたディスクでまたはネットワークでアタッチされたストレージのどちらかでストレージを提供する第3の階層を有すると見なされてよい。上述されたように、従来のデータベースをスケーリングしようとする以前の試みは、通常、データベースの3つすべての階層を複製し、それらの複製されたデータベースインスタンスを複数のマシン全体で分散することを伴っていた。
いくつかの実施形態では、本明細書に説明されるシステムは、従来のデータベースにおいてとは異なってデータベースシステムの機能性を仕切ってよく、スケーリングを実装するために複数のマシン全体で(完全なデータベースインスタンスよりもむしろ)機能構成要素のサブセットだけを分散してよい。例えば、いくつかの実施形態では、クライアントが面する階層は、どのデータが記憶されるべきなのか、または取り出されるべきなのかを指定するが、どのようにしてデータを記憶するのか、または取り出すのかは指定しない要求を受信するように構成されてよい。この階層は、要求のパーシング及び/または最適化(例えば、SQLのパーシング及び要求)を実行してよい。一方、別の階層が、クエリーの実行に責任を負ってよい。いくつかの実施形態では、第3の階層が結果のトランザクション性及び一貫性を提供することに責任を負ってよい。例えば、この階層は、いわゆるACIDプロパティのいくらか、特にデータベースをターゲットとするトランザクションの原子性を強化するよう構成されてよく、データベースの中で一貫性を維持し、データベースをターゲットとするトランザクション間で独立性を保証する。いくつかの実施形態では、第4の階層が次いで多様な種類の障害が存在する場合に記憶されているデータの耐久性を提供することに責任を負ってよい。例えば、この階層は、ロギングの変更、データベースクラッシュからの回復、基礎的な記憶ボリュームに対するアクセスの管理、及び/または基礎的な記憶ボリュームにおけるスペース管理に責任を負ってよい。
ここで図を参照すると、図1は、一実施形態に係る、データベースソフトウェアスタックの多様な構成要素を示すブロック図である。この例に示されるように、データベースインスタンスは、それぞれがデータベースインスタンスの機能性の一部を提供する、複数の機能構成要素(または層)を含んでよい。この例では、データベースインスタンス100は、(110として示される)クエリーパーシング及びクエリー最適化層、(120として示される)クエリー実行層、(130として示される)トランザクション性及び一貫性管理層、並びに(140として示される)耐久性及びスペース管理層を含む。上述されたように、いくつかの既存のデータベースシステムでは、データベースインスタンスのスケーリングは、(図1に示される層のすべてを含んだ)データベースインスタンス全体を1回または複数回複製して、次いで層を互いに縫い合わせるためにグルーロジックを追加することを含んでよい。いくつかの実施形態では、本明細書に説明されるシステムは、代わりにデータベース階層から別個のストレージ層に耐久性及びスペース管理層140の機能性をオフロードしてよく、その機能性をストレージ層の複数のストレージノード全体で分散してよい。
いくつかの実施形態では、本明細書に説明されるデータベースシステムは、図1に示されるデータベースインスタンスの上半分の構造の多くを保持してよいが、バックアップ動作、復元動作、スナップショット動作、回復動作、及び/または多様なスペース管理動作の少なくとも部分に対する責任を記憶階層に再配分してよい。このようにして機能性を再配分し、データベース階層と記憶階層との間でログ処理をしっかりと結合することは、スケーラブルデータベースを提供する以前の手法と比較されるときに性能を改善し、可用性を高め、コストを削減してよい。例えば、(実際のデータページよりもサイズがはるかに小さい)リドゥログレコードだけがノード全体で送り出される、または書込み動作のレーテンシパスの中で持続してよいので、ネットワーク及び入出力帯域幅の要件が削減されてよい。さらに、データページの生成は、入信書込み動作を遮ることなく、(フォアグラウンド処理が許すので)各ストレージノードでバックグラウンドで独立して実行できる。いくつかの実施形態では、ログ構造化された非上書きストレージの使用が、例えばデータページの移動またはコピーよりむしろメタデータ操作を使用することによって、バックアップ動作、復元動作、スナップショット動作、ポイントインタイムリカバリ動作、及びボリューム増大動作をより効率的に実行できるようにしてよい。いくつかの実施形態では、ストレージ層は、複数のストレージノード全体でクライアントの代わりに記憶されたデータの複製(及び/またはリドゥログレコード等の、そのデータと関連付けられたメタデータ)に対する責任を負ってもよい。例えば、データ(及び/またはメタデータ)は、(例えば、ストレージノードの集合体が独自の物理的に別個の独立したインフラストラクチャで実行する単一の「可用性ゾーン」の中で等)ローカルに、及び/または単一の領域のもしくは異なる領域の可用性ゾーン全体で複製されてよい。
多様な実施形態では、本明細書に説明されるデータベースシステムは、さまざまなデータベース動作のために標準的なまたはカスタムのアプリケーションプログラミングインタフェース(API)をサポートしてよい。例えば、APIは、データベースの作成、テーブルの作成、テーブルの改変、ユーザーの作成、ユーザーの削除、テーブルでの1行または複数行の挿入、値のコピー、テーブルの中からのデータの選択(例えば、テーブルの問合せ)、クエリーの取消しまたはアボート、スナップショットの作成のための動作、及び/または他の動作をサポートしてよい。
いくつかの実施形態では、データベースインスタンスのデータベース階層は、多様なクライアントプログラム(例えば、アプリケーション)及び/または加入者(ユーザー)からの読取り要求及び/または書込み要求を受信し、次いで要求をパースし、関連付けられたデータベース動作(複数の場合がある)実施するための実行計画を作成するデータベースエンジンヘッドノードサーバを含んでよい。例えば、データベースエンジンヘッドノードは、複雑なクエリー及び接合の結果を得るために必要な一連のステップを作成してよい。いくつかの実施形態では、データベースエンジンヘッドノードは、データベース階層と別個の分散型データベース最適化ストレージシステムとの間の通信だけではなく、データベースシステムのデータベース階層とクライアント/加入者との間の通信も管理してよい。
いくつかの実施形態では、データベースエンジンヘッドノードは、JDBCインタフェースまたはODBCインタフェースを通してエンドクライアントからSQL要求を受信すること、及びローカルでSQL処理及び(ロッキングを含んでよい)トランザクション管理を実行することに責任を負ってよい。ただし、データベースエンジンヘッドノード(またはデータベースエンジンヘッドノードの多様な構成要素)は、データページをローカルで生成するよりむしろ、リドゥログレコードを生成してよく、リドゥログレコードを別個の分散型ストレージシステムの適切なノードに送り出してよい。いくつかの実施形態では、分散型ストレージシステムのためのクライアント側ドライバは、データベースエンジンヘッドノードでホストされてよく、それらのリドゥログレコードが向けられるセグメント(またはセグメントのデータページ)を記憶する1つのストレージシステムノード(または複数のストレージシステムノード)にリドゥログレコードを送ることに責任を負ってよい。例えば、いくつかの実施形態では、各セグメントは保護グループを形成する複数のストレージシステムノードでミラーリングされてよい(またはそれ以外の場合、耐久的にされてよい)。係る実施形態では、クライアント側ドライバは、各セグメントが記憶されるノードを追跡調査してよく、クライアント要求が受信されるときに(例えば非同期で、及び実質的にほぼ同時に並列で)セグメントが記憶されるノードのすべてにリドゥログを送ってよい。クライアント側ドライバが(リドゥログレコードがストレージノードに書き込まれていることを示すことがある)保護グループのストレージノードの書込み選抜グループ(quorum)から肯定応答を受信するとすぐに、クライアント側ドライバはデータベース階層に(例えば、データベースエンジンヘッドノードに)要求された変更の肯定応答を送信してよい。例えば、データが保護グループを使用することによって耐久的にされる実施形態では、データベースエンジンヘッドノードは、クライアント側ドライバが書込み選抜グループを構成するために十分なストレージノードインスタンスから回答を受信するまで及び受信しない限り、トランザクションをコミットできないことがある。同様に、特定のセグメントに向けられる読取り要求の場合、クライアント側ドライバは、(例えば非同期で、及び実質的に同時に並列で)セグメントが記憶されるノードのすべてに読取り要求を送ってよい。クライアント側ドライバは保護グループのストレージノードの読取り選抜グループから要求されたデータを受信するとすぐに、クライアント側ドライバはデータベース階層に(例えば、データベースエンジンヘッドノードに)要求されたデータを返してよい。
いくつかの実施形態では、データベース階層(またはより詳細には、データベースエンジンヘッドノード)は、最近アクセスされたデータページが一時的に保持されるキャッシュを含んでよい。係る実施形態では、係るキャッシュに保持されるデータページをターゲットとする書込み要求が受信されると、対応するリドゥログレコードをストレージ層に送り出すことに加えて、データベースエンジンはそのキャッシュに保持されているデータページのコピーに変更を適用してよい。ただし、他のデータベースシステムにおいてとは異なり、このキャッシュに保持されるデータページはストレージ層にフラッシュされることはなく、該データページはいつでも(例えば、キャッシュに入れられたコピーに最も最近に適用された書込み要求のリドゥログレコードがストレージ層に送信され、肯定応答された後のいつでも)廃棄されてよい。キャッシュは、異なる実施形態で、一度に多くても一人の書込み者(または複数の読取り者)によるキャッシュへのアクセスを制御するための多様なロッキング機構のいずれかを実装してよい。ただし、係るキャッシュを含む実施形態では、キャッシュは複数のノード全体で分散れるのではなく、所与のデータベースインスタンスのためにデータベースエンジンヘッドノードだけに存在してよいことに留意されたい。したがって、管理するキャッシュコヒーレンシーまたは一貫性問題がないことがある。
いくつかの実施形態では、データベース階層は、例えば、読取り要求を送ることができるデータベース階層の異なるノードでのデータの読取り専用コピー等、システムでの同期または非同期の読取りレプリカの使用をサポートしてよい。係る実施形態では、所与のデータベーステーブルのデータベースエンジンヘッドノードが特定のデータページに向けられる読取り要求を受信すると、データベースエンジンヘッドノードはこれらの読取り専用コピーの内のいずれか1つ(または特定の1つ)に要求を送ってよい。いくつかの実施形態では、データベースエンジンヘッドノードのクライアント側ドライバは、(例えば、これらの他のノードにそのキャッシュを無効にするように促すために)キャッシュに入れられたデータページに対する更新及び/または失効についてこれらの他のノードに通知するように構成されてよい(その後これらの他のノードはストレージ層から更新されたデータページの更新済みのコピーを要求してよい)。
いくつかの実施形態では、データベースエンジンヘッドノードで実行中のクライアント側ドライバは、記憶階層にプライベートインタフェースを曝露してよい。いくつかの実施形態では、クライアント側ドライバは従来のiSCSIインタフェースを1つまたは複数の他の構成要素(例えば、他のデータベースエンジンまたは仮想コンピューティングサービス構成要素)に曝露してもよい。いくつかの実施形態では、記憶階層でのデータベースインスタンスのためのストレージは、制限なくサイズを増大することがあり、それと関連付けられた、制限されない数のIOPSを有することがある単一のボリュームとしてモデル化されてよい。ボリュームが作成されるとき、ボリュームは特定のサイズで、(例えば、ボリュームがどのように複製されるのかを指定する)特定の可用性/耐久性特徴で、及び/またはボリュームと関連付けられたIOPSレートで(例えば、ピークと持続の両方)作成されてよい。例えば、いくつかの実施形態では、さまざまな異なる耐久性モデルがサポートされてよく、ユーザー/加入者は自らのデータベーステーブルのために、複製コピー、ゾーン、もしくは領域の数、及び/またはその耐久性、性能、及びコストの目的に基づいて複製が同期であるのか、それとも非同期であるのかを指定できてよい。
いくつかの実施形態では、クライアント側ドライバはボリュームについてのメタデータを維持してよく、ストレージノード間で追加のホップを必要とすることなく、読取り要求及び書込み要求を実行するために必要なストレージノードのそれぞれに非同期要求を直接的に送信してよい。例えば、いくつかの実施形態で、データベーステーブルに対する変更を行う要求に応えて、クライアント側ドライバは、ターゲットとされたデータページのストレージを実装している1つまたは複数のノードを決定し、それらのストレージノードに対するその変更を指定するリドゥログレコード(複数の場合がある)を送るように構成されてよい。ストレージノードは、次いで、リドゥログレコードに指定される変更を将来のある時点でターゲットとされたデータページに適用することに責任を負ってよい。書込みはクライアント側ドライバに肯定応答されるので、クライアント側ドライバは、ボリュームが耐久的となる点を先に進めてよく、データベース階層に対してコミットを肯定応答してよい。上述されたように、いくつかの実施形態では、クライアント側ドライバはストレージノードサーバにデータページを絶対に送信しないことがある。これは、ネットワークトラフィックを削減するだけではなく、チェックポイントまたは以前のデータベースシステムでのフォアグラウンド処理スループットを制約するバックグラウンド書込み者スレッドの必要性を削除してもよい。
いくつかの実施形態では、多くの読取り要求がデータベースエンジンヘッドノードキャッシュによって提供されてよい。ただし、大規模故障イベントは一般的すぎて、メモリ内複製だけを許可できないので、書込み要求は耐久性を必要としてよい。したがって、本明細書に説明されるシステムは、記憶階層内のデータストレージを2つの領域、つまりリドゥログレコードがデータベース階層から受信されるときにリドゥログレコードが書き込まれる小さなアペンド専用ログ構造化領域、及びバックグラウンドでデータページの新しいバージョンを作成するために、ログレコードがともに合体するより大きな領域として実装することによって、フォアグラウンドレーテンシパス内にあるリドゥログレコード書込み動作のコストを最小限に抑えるように構成されてよい。いくつかの実施形態では、メモリ内構造は、インスタンス化されたデータブロックが参照されるまで連鎖ログレコード後方へ、データページの前回のリドゥログレコードを指すデータページごとに維持される。この手法は、読取りがおもにキャッシュに入れられるアプリケーション内を含んで、混合した読取り‐書込みワークロードに優れた性能を提供してよい。
いくつかの実施形態では、リドゥログレコードのためのログ構造化データストレージへのアクセスは、(ランダム入出力動作よりむしろ)一連の順次入出力動作から構成されてよいため、行われている変更は互いに密接にパックされてよい。データページに変更するたびに、永続データストレージに対する2つの入出力動作(リドゥログのための動作及び修正されたデータページ自体のための動作)が生じる既存のシステムとは対照的に、いくつかの実施形態では、本明細書に説明されるシステムはリドゥログレコードの受信に基づいて分散型ストレージシステムのストレージノードでデータページを合体させることによってこの「書込み増幅」を回避してよい。
上述されたように、いくつかの実施形態では、データベースシステムの記憶階層はデータベーススナップショットを撮ることに責任を負ってよい。ただし、記憶階層はログ構造化ストレージを実装するため、データページ(例えば、データブロック)のスナップショットを撮ることはデータページ/ブロックに最も最近適用されたリドゥログレコードと関連付けられたタイムスタンプ(またはデータページ/ブロックの新しいバージョンを作成するために複数のリドゥログレコードを合体させるための最も最近の動作と関連付けられたタイムスタンプ)を記録すること、並びにページ/ブロックの以前のバージョン及び時間内に記録された点までのあらゆる以後のログエントリのガベージコレクションを妨げることを含んでよい。係る実施形態では、データベーススナップショットを撮ることは、オフボリュームバックアップ戦略を利用するときに必要とされるだろう、データブロックの読取り、コピー、または書込みを必要としないことがある。いくつかの実施形態では、ユーザー/加入者はアクティブデータセットに加えてオンボリュームスナップショットのためにどれほど多くの追加スペースを保つことを希望するのかを選ぶことができることがあるが、修正されたデータだけが追加のスペースを必要とするので、スナップショットのスペース要件は最小であってよい。異なる実施形態では、スナップショットは、不連続(例えば、各スナップショットは時間の特定の時点のデータページ内のデータのすべてに対するアクセスを提供してよい)または連続(例えば、各スナップショットは2つの時点の間のデータページに存在するデータのすべてのバージョンに対するアクセスを提供してよい)であってよい。いくつかの実施形態では、以前のスナップショットに戻ることは、そのスナップショット以降のすべてのリドゥログレコード及びデータページが無効であり、ガベージコレクション可能であることを示すためにログレコードを記録すること、及びスナップショット点後のすべてのデータベースキャッシュエントリを廃棄することを含んでよい。係る実施形態では、ストレージシステムは、ストレージシステムが通常の順方向読取り/書込み処理で行うのと同様に、要求されるように、及びすべてのノード全体でバックグラウンドで、ブロック単位でリドゥログレコードをデータブロックに適用するので、前進復帰は必要とされないことがある。クラッシュ回復は、それによってノード全体で並列且つ分散型にされてよい。スナップショットの作成、使用、及び/または操作に関する追加詳細は、図8及び図9で説明される。
ウェブサービスベースのデータベースサービスを実装するように構成されてよいサービスシステムアーキテクチャの一実施形態が図2に示される。示されている実施形態では、(データベースクライアント250aから250nとして示される)多くのクライアントがネットワーク260を介してウェブサービスプラットホーム200と対話するように構成されてよい。ウェブサービスプラットホーム200は、データベースサービス210、分散型データベース最適化ストレージサービス220、及び/または1つまたは複数の他の仮想コンピューティングサービス230の1つまたは複数のインスタンスとインタフェースをとるように構成されてよい。所与の構成要素の1つまたは複数が存在してよい場合、本明細書でのその構成要素に対する参照は単数形または複数形のどちらかで行われてよいことが留意される。ただしどちらの形の使用も他方を排除することを目的としていない。
多様な実施形態では、図2に示される構成要素は、コンピュータハードウェア(例えば、マイクロプロセッサもしくはコンピュータシステム)によって直接的にまたは間接的に実行可能な命令として、またはこれらの技法の組合せを使用してコンピュータハードウェアの中で直接的に実装されてよい。例えば、図2の構成要素はそれぞれが図10に示され、以下に説明されるコンピュータシステム実施形態に類似してよい、いくつかのコンピューティングノード(つまり、単にノード)を含むシステムによって実装されてよい。多様な実装形態では、所与のサービスシステム構成要素(例えば、データベースサービスの構成要素またはストレージサービスの構成要素)の機能性は、特定のノードによって実装されてよい、またはいくつかのノード全体で分散されてよい。いくつかの実施形態では、所与のノードは複数のサービスシステム構成要素(例えば、複数のデータベースサービスシステム構成要素)の機能性を実装してよい。
一般的に言えば、クライアント250は、データベースサービスに対する要求(例えば、スナップショットを生成する要求等)を含むウェブサービス要求を、ネットワーク260を介してウェブサービスプラットホーム200に提出するように構成可能な任意のタイプのクライアントを包含してよい。例えば、所与のクライアント250は、ウェブブラウザの適切なバージョンを含んでよい、またはウェブブラウザによって提供される実行環境に対する拡張部として、またはウェブブラウザによって提供される実行環境の中で実行するように構成されるプラグインモジュールまたは他のタイプのコードモジュールを含んでよい。代わりに、クライアント250(例えば、データベースサービスクライアント)は、データベースアプリケーション(もしくはデータベースアプリケーションのユーザーインタフェース)、メディアアプリケーション、オフィスアプリケーション、または1つまたは複数のデータベーステーブルを記憶する、及び/または1つまたは複数のデータベーステーブルにアクセスするために永続記憶装置リソースを利用してよい任意の他のアプリケーション等のアプリケーションを包含してよい。いくつかの実施形態では、係るアプリケーションは、必ずしもすべてのタイプのウェブベースのデータに対する完全なブラウザサポートを実装しなくてもウェブサービス要求を生成し、処理するための(例えば、ハイパテキスト転送プロトコル(HTTP)の適切なバージョンのための)十分なプロトコルサポートを含んでよい。すなわち、クライアント250は、ウェブサービスプラットホーム200と直接的に対話するように構成されるアプリケーションであってよい。いくつかの実施形態では、クライアント250は、表象状態転送(Representational State Transfer)(REST)様式ウェブサービスアーキテクチャ、ドキュメントベースもしくはメッセージベースのウェブサービスアーキテクチャ、または別の適切なウェブサービスアーキテクチャに従ってウェブサービス要求を生成するよう構成されてよい。
いくつかの実施形態では、クライアント250(例えば、データベースサービスクライアント)は、データベーステーブルのウェブサービスベースのストレージへのアクセスを、他のアプリケーションに、それらのアプリケーションにはトランスペアレントな方法で提供するように構成されてよい。例えば、クライアント250は、オペレーティングシステムまたはファイルシステムと統合して、本明細書に説明されるストレージモデルの適切な変形に従ってストレージを提供するように構成されてよい。ただし、オペレーティングシステムまたはファイルシステムは、ファイル、ディレクトリ、及び/またはフォルダの従来のファイルシステム階層等の、アプリケーションに異なるストレージインタフェースを提示してよい。係る実施形態では、アプリケーションは図1のストレージシステムサービスモデルを利用するために修正される必要はないことがある。代わりに、ウェブサービスプラットホーム200へのインタフェースをとることの詳細は、オペレーティングシステム環境の中で実行するアプリケーションの代わりに、クライアント250及びオペレーティングシステムまたはファイルシステムによって調整されてよい。
クライアント250は、ネットワーク260を介してウェブサービスプラットホーム200にウェブサービス要求(例えば、スナップショット要求、スナップショット要求のパラメータ、読取り要求、スナップショットの復元等)を伝達し、ウェブサービスプラットホーム200から応答を受信してよい。多様な実施形態では、ネットワーク260は、クライアント250とプラットホーム200との間でウェブベースの通信を確立するために必要なネットワーキングハードウェア及びプロトコルの任意の適切な組合せを包含してよい。例えば、ネットワーク260は、集合的にインターネットを実装する多様な電気通信ネットワーク及びサービスプロバイダを概して包含してよい。また、ネットワーク260は、公衆無線ネットワークまたは構内無線ネットワークだけではなく、ローカルエリアネットワーク(LAN)または広域ネットワーク(WAN)等の構内ネットワークも含んでよい。例えば、所与のクライアント250とウェブサービスプラットホーム200の両方とも、独自の内部ネットワークを有する企業の中でそれぞれプロビジョニングされてよい。係る実施形態では、ネットワーク260は、インターネットとウェブサービスプラットホーム200との間だけではなく、所与のクライアント250とインターネットとの間にネットワーキングリンクを確立するために必要なハードウェア(例えば、モデム、ルータ、開閉器、ロードバランサ、プロキシサーバ等)及びソフトウェア(例えば、プロトコルスタック、財務会計ソフト、ファイアウォール/セキュリティソフトウェア等)を含んでよい。いくつかの実施形態では、クライアント250は、公衆インターネットよりむしろ構内ネットワークを使用してウェブサービスプラットホーム200と通信してよい。例えば、クライアント250は、データベースサービスシステム(例えば、データベースサービス210及び/または分散型データベース最適化ストレージサービス220を実装するシステム)と同じ企業の中でプロビジョニングされてよい。係る場合、クライアント250は、構内ネットワーク260(例えば、インターネットベースの通信プロトコルを使用してよいが、公にアクセス可能ではないLANまたはWAN)を通して完全にプラットホーム200と通信してよい。
一般的に言えば、ウェブサービスプラットホーム200は、データページ(またはデータページのレコード)にアクセスする要求等のウェブサービス要求を受信し、処理するように構成される1つまたは複数のサービスエンドポイントを実装するように構成されてよい。例えば、ウェブサービスプラットホーム200は、特定のエンドポイントを実装するように構成されるハードウェア及び/またはソフトウェアを含んでよく、したがってそのエンドポイントに向けられたHTTPベースのウェブサービス要求は適切に受信され、処理される。一実施形態では、ウェブサービスプラットホーム200は、クライアント250からウェブサービス要求を受信し、ウェブサービス要求を、処理のためにデータベースサービス210、分散型データベース最適化ストレージサービス220、及び/または別の仮想コンピューティングサービス230を実装するシステムの構成要素に転送するように構成されるサーバシステムとして実装されてよい。他の実施形態では、ウェブサービスプラットホーム200は、大規模なウェブサービス要求処理ロードを動的に管理するように構成されるロードバランス機能及び他の要求管理機能を実装する(例えば、クラスタトポロジの)いくつかの別個のシステムとして構成されてよい。多様な実施形態では、ウェブサービスプラットホーム200は、REST様式またはドキュメントベースの(例えば、SOAPベースの)タイプのウェブサービス要求をサポートするように構成されてよい。
いくつかの実施形態では、ウェブサービスプラットホーム200は、クライアントのウェブサービス要求に対するアドレス可能なエンドポイントとして機能することに加えて、多様なクライアント管理機能を実装してよい。例えば、プラットホーム200は、例えば要求側クライアント250のアイデンティティ、クライアント要求の数及び/または頻度、クライアント250の代わりに記憶されているまたは取り出されるデータテーブル(またはデータテーブルのレコード)のサイズ、クライアント250によって使用される全体的な記憶帯域幅、クライアント250によって要求されるストレージのクラス、または任意の他の測定可能なクライアント使用パラメータを追跡調査することによって、ストレージリソースを含むウェブサービスのクライアント使用の計量及びアカウンティングを調整してよい。プラットホーム200は、財務会計システム及び請求書作成システムを実装してもよい、またはクライアント使用活動の報告及び請求書作成のために外部システムによって照会され、処理されてよい使用データのデータベースを維持してもよい。特定の実施形態では、プラットホーム200は、クライアント250から受け取られる要求の割合及びタイプ、係る要求によって活用される帯域幅、係る要求のためのシステム処理レーテンシ、システム構成要素活用(例えば、ストレージサービスシステムの中のネットワーク帯域幅及び/またはストレージ活用)、要求から生じるエラーの割合及びタイプ、記憶され、要求されるデータページもしくはそのレコードの特徴(例えば、サイズ、データタイプ等)を反映する測定基準、または任意の他の適切な測定基準等、さまざまなストレージサービスシステム操作測定基準を収集する、監視する、及び/または統合するよう構成されてよい。いくつかの実施形態では、係る測定基準はシステム構成要素を調整し、維持するためにシステム管理者によって使用されてよい。一方、他の実施形態では、係る測定基準(または係る測定基準の関連性のある部分)は、係るクライアントがデータベースサービス210、分散型データベース最適化ストレージサービス220、及び/または別の仮想コンピューティングサービス230(またはそれらのサービスを実装する基礎的なシステム)の使用を監視できるようにするためにクライアント250に曝露されてよい。
いくつかの実施形態では、プラットホーム200は、ユーザー認証手順及びアクセス制御手順も実装してよい。例えば、特定のデータベーステーブルにアクセスする所与のウェブサービス要求の場合、プラットホーム200は、要求と関連付けられるクライアント250が特定のデータベーステーブルにアクセスする権限を与えられているかどうかを確かめるように構成されてよい。プラットホーム200は、例えばアイデンティティ、パスワード、もしくは他の信用証明書を特定のデータベーステーブルと関連付けられた信用証明書に対して評価する、または特定のデータベーステーブルに対する要求されたアクセスを、特定のデータベーステーブルに対するアクセス制御リストに対して評価することによって係る権限付与を決定してよい。例えば、クライアント250が特定のデータベーステーブルにアクセスするほど十分な信用証明書を有していない場合、プラットホーム200は、例えばエラー状態を示す応答を要求側クライアント250に返すことによって対応するウェブサービス要求を拒絶してよい。多様なアクセス制御方針は、データベースサービス210、分散型データベース最適化ストレージサービス220、及び/または他の仮想コンピューティングサービス230によってアクセス制御情報のレコードまたはリストとして記憶されてよい。
ウェブサービスプラットホーム200が、クライアント250がデータベースサービス210を実装するデータベースシステムの特徴にそれを通してアクセスしてよい一次インタフェースを表してよいが、ウェブサービスプラットホーム200が係る特徴に対する単独のインタフェースを表す必要がないことが留意される。例えば、ウェブサービスインタフェースとは別個であってよい代替のAPIは、データベースシステムを提供する企業にとって内部のクライアントがウェブサービスプラットホーム200を迂回できるようにするために使用されてよい。本明細書に説明される例の多くで、分散型データベース最適化ストレージサービス220が、クライアント250にデータベースサービスを提供するコンピューティングシステムまたは企業システムにとって内部であってよく、外部クライアント(例えば、ユーザーまたはクライアントアプリケーション)に曝露されないことがあることに留意されたい。係る実施形態では、内部「クライアント」(例えば、データベースサービス210)は、(例えば、これらのサービスを実装するシステムの間で直接的にAPIを通して)分散型データベース最適化ストレージサービス220とデータベースサービス210との間の実線として示されるローカルネットワークまたは構内ネットワーク上で分散型データベース最適化ストレージサービス220にアクセスしてよい。係る実施形態では、クライアント250の代わりにデータベーステーブルを記憶する上での分散型データベース最適化ストレージサービス220の使用はそれらのクライアントにとってトランスペアレントであってよい。他の実施形態では、分散型データベース最適化ストレージサービス220は、データベース管理のためにデータベースサービス210に依存するアプリケーション以外のアプリケーションに、データベーステーブルまたは他の情報のストレージを提供するために、ウェブサービスプラットホーム200を通してクライアント250に曝露されてよい。これは、ウェブサービスプラットホーム200と分散型データベース最適化ストレージサービス220の間の破線によって図2に示される。係る実施形態では、分散型データベース最適化ストレージサービス220のクライアントは、ネットワーク260を介して(例えば、インターネット上で)分散型データベース最適化ストレージサービス220にアクセスしてよい。いくつかの実施形態では、仮想コンピューティングサービス230は、クライアント250の代わりにコンピューティングサービス230を実行する上で使用されるオブジェクトを記憶するために(例えば、仮想コンピューティングサービス230と分散型データベース最適化ストレージサービス220との間で直接的にAPIを通して)分散型データベース最適化ストレージサービス220からストレージサービスを受信するように構成されてよい。これは、仮想コンピューティングサービス230と分散型データベース最適化ストレージサービス220との間の破線によって図2に示される。いくつかのケースでは、プラットホーム200のアカウンティングサービス及び/または信用証明書発行(credentialing)サービスは、管理クライアント等の内部クライアントにとって、または同じ企業の中のサービス構成要素間では不必要となってよい。
多様な実施形態では、異なる記憶方針が、データベースサービス210及び/または分散型データベース最適化ストレージサービス220によって実装されてよいことに留意されたい。係る記憶方針の例は、耐久性方針(例えば、記憶されるデータベーステーブル(またはデータベーステーブルのデータページ)のインスタンスの数、及びデータベーステーブルが記憶される異なるノードの数を示す方針)、及び/または(要求トラフィックを一様にしようとしてデータベーステーブルまたはデータベーステーブルのデータページを、異なるノード、ボリューム、及び/またはディスク全体で分散してよい)ロードバランシング方針を含んでよい。さらに、異なる記憶方針は、サービスの多様な1つによって異なるタイプの記憶された項目に適用されてよい。例えば、いくつかの実施形態では、分散型データベース最適化ストレージサービス220は、データページに対するよりもリドゥログレコードに対してより高い耐久性を実装してよい。
図3は、一実施形態に従って、データベースエンジン、及び別個の分散型データベースストレージサービスを含むデータベースシステムの多様な構成要素を示すブロック図である。この例では、データベースシステム300は、いくつかのデータベーステーブルのそれぞれのためのそれぞれのデータベースエンジンヘッドノード320、及び(データベースクライアント350aから350nとして示されるデータベースシステムのクライアントにとって可視であってよい、または可視でないことがある)分散型データベース最適化ストレージサービス310を含む。この例で示されるように、データベースクライアント350aから350nの内の1つまたは複数は、データベースヘッドノード320(例えば、それぞれがそれぞれのデータベースインスタンスの構成要素である、ヘッドノード320a、ヘッドノード320b、またはヘッドノード320c)に、ネットワーク360を介してアクセスしてよい(例えば、これらの構成要素はネットワークアドレス指定可能且つデータベースクライアント350aから350nにアクセス可能であってよい)。ただし、データベースクライアント350aから350nの代わりに、1つまたは複数のデータベーステーブルのデータページ(及びリドゥログレコードおよび/またはそれと関連付けられた他のメタデータ)を記憶し、本明細書に説明されるようにデータベースシステムの他の機能を実行するためにデータベースシステムによって利用されてよい分散型データベース最適化ストレージサービス310は、異なる実施形態では、ネットワークアドレス指定可能且つストレージクライアント350aから350nにアクセス可能であってよい、またはアクセス可能でないことがある。例えば、いくつかの実施形態では、分散型データベース最適化ストレージサービス310は、ストレージクライアント350aから350nに非可視である方法で多様な記憶動作、アクセス動作、ロギング変更動作、回復動作、ログレコード操作動作、及び/またはスペース管理動作を実行してよい。
上述されたように、各データベースインスタンスは、多様なクライアントプログラム(例えばアプリケーション)及び/または加入者(ユーザー)から要求(例えば、スナップショット要求等)を受信し、次いで要求をパースし、要求を最適化し、関連付けられたデータベース動作(複数の場合がある)を実施するための実行計画を作成する単一のデータベースエンジンヘッドノード320を含んでよい。図3に示される例では、データベースエンジンヘッドノード320aのクエリーパーシング、最適化、及び実行構成要素305は、データベースクライアント350aから受信され、データベースエンジンヘッドノード320aがその構成要素であるデータベースインスタンスをターゲットとするクエリーのためにこれらの機能を実行してよい。いくつかの実施形態では、クエリーパーシング、最適化、及び実行構成要素305はデータベースクライアント350aに、書込み肯定応答、要求されたデータページ(及びデータページの部分)、エラーメッセージ、及びまたは他の応答を適宜に含んでよいクエリー応答を返してよい。この例に示されるように、データベースエンジンヘッドノード320aは、分散型データベース最適化ストレージサービス310の中で多様なストレージノードに読取り要求及び/またはリドゥログレコードを送り、分散型データベース最適化ストレージサービス310から書込み肯定応答を受信し、分散型データベース最適化ストレージサービス310から要求されたデータページを受信し、及び/またはデータページ、エラーメッセージ、または他の応答を(同様にそれらをデータベースクライアント350aに返してよい)クエリーパーシング、最適化、及び実行構成要素305に返してよい、クライアント側ストレージサービスドライバ325も含んでよい。
この例では、データベースエンジンヘッドノード320aは、最近アクセスされたデータページが一時的に保持されてよいデータページキャッシュ335を含む。図3に示されるように、データベースエンジンヘッドノード320aは、データベースエンジンヘッドノード320aが構成要素であるデータベースインスタンスでトランザクション性及び一貫性を提供することに責任を負ってよいトランザクション及び一貫性管理構成要素330も含んでよい。例えば、この構成要素は、データベースインスタンス及び該データベースインスタンスに向けられるトランザクションの原子性、一貫性、及び独立性のプロパティを保証することに責任を負ってよい。図3に示されるように、データベースエンジンヘッドノード320aは、多様なトランザクションのステータスを追跡調査し、コミットしないトランザクションのあらゆるローカルでキャッシュに入れられた結果をロールバックするためにトランザクション及び一貫性管理構成要素330によって利用されてよいトランザクションログ340及びアンドゥログ345も含んでよい。
図3に示される他のデータベースエンジンヘッドノード320(例えば、320b及び320c)のそれぞれが類似する構成要素を含んでよく、データベースクライアント350aから350nの内の1つまたは複数によって受信され、それが構成要素であるそれぞれのデータベースインスタンスに向けられるクエリーのために類似する機能を実行してよいことに留意されたい。
いくつかの実施形態では、本明細書に説明される分散型データベース最適化ストレージシステムは、1つまたは複数のストレージノードでの記憶のために多様な論理ボリューム、セグメント、及びページでデータを編成してよい。例えば、いくつかの実施形態では、各データベーステーブルは論理ボリュームによって表され、各論理ボリュームはストレージノードの集合体上でセグメント化される。ストレージノード内の特定のストレージノード上で生きる各セグメントは、隣接ブロックアドレスのセットを含む。いくつかの実施形態では、各データページはセグメントに記憶され、したがって各セグメントは1つまたは複数のデータページの集合体及びそれが記憶する各データページの変更ログ(リドゥログとも呼ばれる)(例えば、リドゥログレコードのログ)を記憶する。本明細書に詳細に説明されるように、ストレージノードは(本明細書でULRとも呼ばれてよい)リドゥログレコードを受信し、リドゥログレコードを合体させて、(例えば、ゆったりと及び/またはデータページもしくはデータベースクラッシュに対する要求に応えて)対応するデータページ及び/または追加のもしくは代替のログレコードの新しいバージョンを作成するように構成されてよい。いくつかの実施形態では、データページ及び/または変更ログは(クライアントによって指定されてよく、クライアントの代わりにデータベースシステムでデータベーステーブルが維持されている)可変構成に従って複数のストレージノード全体でミラーリングされてよい。例えば、異なる実施形態では、データログまたは変更ログの1つのコピー、2つのコピー、または3つのコピーがデフォルト構成、アプリケーションに特有の耐久性優先度、またはクライアントによって指定される耐久性優先度に従って、1つ、2つ、または3つの異なる可用性ゾーンもしくは領域のそれぞれに記憶されてよい。
本明細書に使用されるように、以下の用語は、多様な実施形態に従って分散型データベース最適化ストレージシステムによってデータの編成を説明するために使用されてよい。
ボリューム:ボリュームは、ストレージシステムのユーザー/クライアント/アプリケーションが理解するストレージのきわめて耐久性のある単位を表す論理概念である。すなわち、ボリュームはデータベーステーブルの多様なユーザーページに対する書込み動作の単一の一貫性がある順序付けられたログとしてユーザー/クライアント/アプリケーションに見える分散型ストアである。各書込み動作は、ボリュームの中で単一のユーザーページのコンテンツに対する論理的な順序付けられた変形を表すユーザーログレコード(ULR)で符号化されてよい。上述されたように、ULRは、本明細書でリドゥログレコードと呼ばれてもよい。各ULRは、一意の識別子(例えば、論理シーケンス番号(LSN)、タイムスタンプ等)を含んでよい。一意の識別子は単調に増加し、ログレコードの内の特定のログレコードに対して一意であってよいことに留意されたい。また、ログレコードに割り当てられる識別子のシーケンスにギャップが存在してよいことにも留意されたい。例えば、LSNの例では、LSN2、3、7、及び8は使用されていない状態で、LSN1、4、5、6、及び9が5つのそれぞれのログレコードに割り当てられてよい。各ULRは、ULRに高い耐久性及び可用性を提供するために、保護グループ(PG)を形成する、分散型ストア内の1つまたは複数の同期セグメントに持続してよい。ボリュームは、バイトの可変サイズの連続範囲にLSN型の読取り/書込みインタフェースを提供してよい。
いくつかの実施形態では、ボリュームはそれぞれが保護グループを通して耐久的にされた複数のエクステントから構成されてよい。係る実施形態では、ボリュームはボリュームエクステントの変わりやすい連続シーケンスから構成されるストレージの単位を表してよい。ボリュームに向けられる読取り及び書込みは、構成するボリュームエクステントに対する対応する読取り及び書込みにマッピングされてよい。いくつかの実施形態では、ボリュームのサイズは、ボリュームエクステントを追加することにより、又は、ボリュームの端部からボリュームエクステントを除去することにより変更されてもよい。
セグメント:セグメントは、単一ストレージノードに割り当てられるストレージの制限される耐久性の単位である。すなわち、セグメントは、特有の固定サイズバイト範囲のデータに、限られたベストエフォート型の耐久性(例えば、ストレージノードである、故障の永続的であるが冗長ではない単一点)を提供する。多様な実施形態では、このデータは、いくつかの場合では、ユーザーアドレス指定可能なデータのミラーであってよい、またはこのデータはボリュームメタデータまたはイレイジャーコーディングされたビット等の他のデータであってよい。所与のセグメントは、正確に1つのストレージノード上で生きてよい。ストレージノードの中で、複数のセグメントが各SSD上で生きてよく、各セグメントは1つのSSDに制限されてよい(例えば、セグメントは複数のSSDに及ばないことがある)。いくつかの実施形態では、セグメントはSSD上で連続領域を占有するように要求されないことがある。むしろ、各SSDにセグメントのそれぞれによって所有される領域を記述する割当てマップがあってよい。上述されたように、保護グループは複数のストレージノードに渡って拡散される複数のセグメントから構成されてよい。いくつかの実施形態では、セグメントは、(サイズが作成時に定義される)バイトの固定サイズの隣接範囲に、LSN型読取り/書込みインタフェースを提供してよい。いくつかの実施形態では、各セグメントはセグメントUUID(例えば、セグメントの汎用一意識別子)によって識別されてよい。
記憶ページ:記憶ページは、概して固定サイズのメモリのブロックである。いくつかの実施形態では、各ページは、オペレーティングシステムによって定義されるサイズのメモリの(例えば、バーチャルメモリ、ディスク、または他の物理メモリの)ブロックであり、本明細書では用語「データブロック」によって参照されてもよい。すなわち、記憶ページは隣接セクタのセットであってよい。記憶ページは、ヘッダ及びメタデータがあるログページでの単位だけではなく、SSDでの割当ての単位としても役立ってよい。いくつかの実施形態では、及び本明細書に説明されるデータベースシステムの文脈では、用語「ページ」または「記憶ページ」は、通常、4096バイト、8192バイト、16384バイト、または32768バイト等の2の倍数であってよいデータベース構成によって定義されるサイズの類似したブロックを指してよい。
ログページ:ログページは、ログレコード(例えば、リドゥログレコードまたはアンドゥログレコード)を記憶するために使用される記憶ページのタイプである。いくつかの実施形態では、ログページは、サイズが記憶ページと同一であってよい。各ログページは、例えばそれが属するセグメントを識別するメタデータ等、そのログページについてのメタデータを含むヘッダを含んでよい。ログページが編成の単位であり、必ずしも書込み動作に含まれるデータの単位ではないことがあることに留意されたい。例えば、いくつかの実施形態では、標準的な転送処理の間、書込み動作は、一度の1つのセクタをログの末尾に書き込んでよい。
ログレコード:ログレコード(例えば、ログページの個々の要素)はいくつかの異なるクラスであってよい。例えば、ストレージシステムのユーザー/クライアント/アプリケーションによって作成され、理解されるユーザーログレコード(ULR)は、ボリューム内のユーザーデータに対する変更を示すために使用されてよい。ストレージシステムによって生成される制御ログレコード(CLR)は、現在の無条件ボリューム耐久性(unconditional volume durable)LSN(VDL)等のメタデータを追跡調査するために使用される制御情報を含んでよい。ヌルログレコード(NLR)は、いくつかの実施形態では、ログセクタまたはログページの未使用のスペースを充填するためのパディングとして使用されてよい。いくつかの実施形態では、これらのクラスのそれぞれの中に多様なタイプのログレコードがあってよく、ログレコードのタイプはログレコードを解釈するために呼び出される必要がある関数に対応してよい。例えば、1つのタイプは特定の圧縮フォーマットを使用する圧縮フォーマットのユーザーページのすべてのデータを表してよく、第2のタイプは、ユーザーページの中のバイト範囲の新しい値を表してよく、第3のタイプは、整数として解釈されるバイトのシーケンスに対する増分動作を表してよく、第4のタイプはページの中の別の場所に1バイト範囲をコピーすることを表してよい。いくつかの実施形態では、特にULRの場合、ログレコードタイプは、(整数または列挙型によってよりむしろ)バージョニング及び開発を簡略化してよいGUIDによって識別されてよい。
ペイロード:ログレコードのペイロードは、ログレコードに、または特定のタイプのログレコードに特有であるデータまたはパラメータ値である。例えば、いくつかの実施形態では、大部分(またはすべての)ログレコードが含み、ストレージシステム自体が理解するパラメータまたは属性のセットがあってよい。これらの属性は、セクタサイズに比較して相対的に小さくてよい共通のログレコードヘッダ/構造の部分であってよい。さらに、大部分のログレコードは、そのログレコードタイプに特有の追加のパラメータまたはデータを含んでよく、この追加情報はそのログレコードのペイロードと見なされてよい。いくつかの実施形態では、特定のULRのペイロードがユーザーページサイズよりも大きい場合、ペイロードは、そのペイロードがユーザーページのためのすべてのデータを含む絶対ULR(AULR)によって置き換えられてよい。これは、ストレージシステムがユーザーページのサイズに等しいULRのペイロードのサイズに対する上限を課すことができるようにしてよい。
セグメントログでログレコードを記憶する際に、いくつかの実施形態では、ペイロードはログヘッダとともに記憶されてよいことに留意されたい。他の実施形態では、ペイロードは別の場所に記憶されてよく、そのペイロードが記憶される場所に対するポインタはログヘッダとともに記憶されてよい。さらに他の実施形態では、ペイロードの一部はヘッダに記憶されてよく、ペイロードの残りは別個の場所に記憶されてよい。ペイロード全体がログヘッダとともに記憶される場合、これは帯域内ストレージと呼ばれてよい。それ以外の場合、ストレージは帯域外であると呼ばれてよい。いくつかの実施形態では、大部分の大きなAULRのペイロードは(以下に説明される)ログのコールドゾーンで帯域外で記憶されてよい。
ユーザーページ:ユーザーページは、(固定サイズの)バイト範囲、及びストレージシステムのユーザー/クライアントに可視である特定のボリュームのためのそのアラインメントである。ユーザーページは論理概念であり、特定のユーザーページのバイトは任意の記憶ページにそのまま記憶されてよい、または記憶されないことがある。特定のボリュームのユーザーページのサイズは、そのボリュームの記憶ページサイズとは無関係であってよい。いくつかの実施形態では、ユーザーページサイズはボリュームごとに設定可能であってよく、ストレージノード上の異なるセグメントは異なるユーザーページサイズを有してよい。いくつかの実施形態では、ユーザーページサイズは、セクタサイズ(例えば、4KB)の倍数となるように制約されてよく、上限(例えば、64KB)を有してよい。他方、記憶ページサイズは、ストレージノード全体にとって固定であってよく、基礎的なハードウェアに対する変更がない限り変化しないことがある。
データページ:データページは、圧縮された形式でユーザーページデータを記憶するために使用される記憶ページのタイプである。いくつかの実施形態では、データページに記憶されるあらゆる1個のデータがログレコードと関連付けられ、各ログレコードは(データセクタとも呼ばれる)データページの中のセクタに対するポインタを含んでよい。いくつかの実施形態では、データページは各セクタによって提供されるメタデータ以外の任意の埋込みメタデータを含まないことがある。データページ内のセクタ間には関係性がなくてよい。代わりに、ページへの編成は、セグメントへのデータの割当ての粒度の表現としてのみ存在してよい。
ストレージノード:ストレージノードは、ストレージノードサーバコードが配備される単一のバーチャルマシンである。各ストレージノードは、複数のローカルにアタッチされたSSDを含んでよく、1つまたは複数のセグメントへのアクセスにネットワークAPIを提供してよい。いくつかの実施形態では、多様なノードはアクティブリスト上または(例えば、ノードが応答するには低速である、またはそれ以外の場合、正常に機能しないが、完全に使用不可ではない場合等)劣化したリスト上にあってよい。いくつかの実施形態では、クライアント側ドライバは、ノードが交換されるべきかどうか、及びいつノードが交換されるべきかを判断するため、及び/または観察された性能に基づいて、いつ及びどのようにして多様なノードの間でデータを再配分するのかを決定するために、ノードをアクティブまたは劣化として分類するのを支援してよい(または、分類するのに責任を負ってよい)
SSD:本明細書において参照されるように、用語「SSD」は、例えばディスク、ソリッドステートドライブ、電池によって支援されるRAM、NVMRAMデバイス(例えば、1つまたは複数のNVDIMM)、または別のタイプの永続ストレージデバイス等の、その記憶ボリュームによって利用されるストレージのタイプに関わりなく、ストレージノードによって見られるローカルブロック記憶ボリュームを指してよい。SSDは、必ずしも直接的にハードウェアにマッピングされない。例えば、異なる実施形態では、単一のソリッドステートストレージデバイスは、各ボリュームが複数のセグメントに分割され、複数のセグメントに渡ってストライピングされる複数のローカルボリュームに分けられる可能性がある、及び/または単一ドライブは単に管理の容易さのために複数のボリュームに分割されてよい。いくつかの実施形態では、各SSDは単一の固定場所で割当てマップを記憶してよい。このマップは、特定のセグメントによってどの記憶ページが所有されているのか、及び(データページと対照的に)これらのページの内のどれがログページであるのかを示してよい。いくつかの実施形態では、記憶ページは、転送処理が割当てを待機する必要がなくてよいように各セグメントに事前に割り当てられてよい。割当てマップに対するあらゆる変更は、新規に割り当てられた記憶ページがセグメントによって使用される前に耐久的にされる必要があることがある。
分散型データベース最適化ストレージシステムの一実施形態は、図4のブロック図によって示される。この例では、データベースシステム400は、相互接続460上でデータベースエンジンヘッドノード420と通信する分散型データベース最適化ストレージシステム410を含む。図3に示される例でのように、データベースエンジンヘッドノード420は、クライアント側ストレージサービスドライバ425を含んでよい。この例では、分散型データベース最適化ストレージシステム410は(430、440、及び450として示されるストレージシステムサーバノードを含んだ)複数のストレージシステムサーバノードを含み、複数のストレージシステムサーバノードのそれぞれは、それが記憶するセグメント(複数の場合がある)のためのデータページ及びリドゥログのストレージ、多様なセグメント管理機能を実行するように構成されるハードウェア及び/またはソフトウェアを含む。例えば、各ストレージシステムサーバノードは以下の動作、つまり、複製(例えば、ストレージノードの中で等ローカルに)、データページを生成するためのリドゥログの合体、スナップショット(例えば、作成、復元、削除等)、ログ管理(例えば、ログレコードの操作)、クラッシュ回復、及び/または(例えば、セグメントの)スペース管理の内のいずれかまたはすべての少なくとも一部を実行するように構成されるハードウェア及び/またはソフトウェアを含んでよい。各ストレージシステムサーバノードは、データブロックがクライアント(例えば、ユーザー、クライアントアプリケーション、及び/またはデータベースサービス加入者)の代わりに記憶されてよい(例えば、SSD等の)複数のアタッチされたストレージデバイスも有してよい。
図4に示される例では、ストレージシステムサーバノード430は、データページ(複数の場合がある)433、セグメントリドゥログ(複数の場合がある)435、セグメント管理機能437、及びアタッチされたSSD471から478を含む。再び、ラベル「SSD」はソリッドステートドライブを指してよい、または指さないこともあるが、基礎的なハードウェアに関わりなく、より概してローカルブロック記憶ボリュームを指してよいことに留意されたい。同様に、ストレージシステムサーバノード440は、データページ(複数の場合がある)443、セグメントリドゥログ(複数の場合がある)445、セグメント管理機能447、及びアタッチされたSSD481から488を含み、ストレージシステムサーバノード450は、データページ(複数の場合がある)453、セグメントリドゥログ(複数の場合がある)455、セグメント管理機能457、及びアタッチされたSSD491から498を含む。
上述されたように、いくつかの実施形態では、セクタは、SSDでのアラインメントの単位であり、書込みが部分的だけに完了されるリスクなしに書き込むことができるSSDでの最大サイズであってよい。例えば、多様なソリッドステートドライブ及びスピニングメディアのセクタサイズは4KBであってよい。本明細書に説明される分散型データベース最適化ストレージシステムのいくつかの実施形態では、ありとあらゆるセクタは、セクタがその一部であるより高レベルのエンティティに関わりなく、セクタの始まりに64ビット(8バイト)のCRCを含んで有してよい。係る実施形態では、(セクタがSSDから読み取られるたびに確証されてよい)このCRCは破損を検出する際に使用されてよい。いくつかの実施形態では、ありとあらゆるセクタは、その値がセクタをログセクタ、データセクタ、または初期化されていないセクタとして該セクタを識別する「セクタタイプ」バイトを含んでもよい。例えば、いくつかの実施形態では、0のセクタタイプバイト値は、セクタが初期化されていないことを示してよい。
いくつかの実施形態では、分散型データベース最適化ストレージシステムのストレージシステムサーバノードのそれぞれは、例えばリドゥログを受信し、データページ等を送り返すために、データベースエンジンヘッドノードとの通信を管理するノードサーバのオペレーティングシステムで実行中のプロセスのセットを実装してよい。いくつかの実施形態では、分散型データベース最適化ストレージシステムに書き込まれるすべてのデータブロックは、(例えば、リモートキー値耐久性バックアップストレージシステムで)長期の及び/またはアーカイブのストレージにバックアップされてよい。
図5は、一実施形態に係る、データベースシステムでの別個の分散型データベース最適化ストレージシステムの使用を示すブロック図である。この例では、1つまたは複数のクライアントプロセス510が、データベースエンジン520及び分散型データベース最適化ストレージシステム530を含むデータベースシステムによって維持される1つまたは複数のデータベーステーブルにデータを記憶してよい。図5に示される例では、データベースエンジン520がデータベース階層構成要素560、及び(分散型データベース最適化ストレージシステム530とデータベース階層構成要素560との間のインタフェースとして働く)クライアント側ドライバ540を含む。いくつかの実施形態では、データベース階層構成要素560は、図3のクエリーパーシング、最適化、及び実行構成要素305、並びにトランザクション及び一貫性管理構成要素330によって実行される機能等の機能を実行してよい、及び/またはデータページ、トランザクションログ、及び/またはアンドゥログ(例えば、図3のデータページキャッシュ335、トランザクションログ340、及びアンドゥログ345によって記憶されるもの)を記憶してよい。
この例では、1つまたは複数のクライアントプロセス510は、データベース階層構成要素560に(ストレージノード535aから535nの内の1つまたは複数に記憶されるデータをターゲットとする読取り要求及び/または書込み要求を含んでよい)データベースクエリー要求515を送信してよく、データベース階層構成要素560からデータベースクエリー応答517(例えば、書込み肯定応答及び/または要求されたデータを含む応答)を受信してよい。データページに書き込む要求を含む各データベースクエリー要求515は、分散型データベース最適化ストレージシステム530への以後のルーティングのためにクライアント側ドライバ540に送信されてよい、1つまたは複数のレコード書込み要求541を生成するためにパースされ、最適化されてよい。この例では、クライアント側ドライバ540は、それぞれのレコード書込み要求541に対応する1つまたは複数のリドゥログレコード531を生成してよく、リドゥログレコード531を分散型データベース最適化ストレージシステム530のストレージノード535の特定のストレージノードに送信してよい。分散型データベース最適化ストレージシステム530は、データベースエンジン520に(具体的には、クライアント側ドライバ540に)各リドゥログレコード531の対応する書込み肯定応答532を返してよい。クライアント側ドライバ540は、これらの書込み肯定応答をデータベース階層構成要素560に(書込み応答542として)渡してよく、データベース階層構成要素560は次いでデータベースクエリー応答517の内の1つとして1つまたは複数のクライアントプロセス510に対応する応答(例えば、書込み肯定応答)を送信してよい。
この例では、データページを読み込む要求を含む各データベースクエリー要求515は、1つまたは複数のレコード読取り要求543を生成するためにパースされ、最適化されてよく、レコード読取り要求543は分散型データベース最適化ストレージシステム530への以後のルーティングのためにクライアント側ドライバ540に送信されてよい。この例では、クライアント側ドライバ540は、分散型データベース最適化ストレージシステム530のストレージノード535の特定のストレージノードにこれらの要求を送信してよく、分散型データベース最適化ストレージシステム530はデータベースエンジン520に(具体的には、クライアント側ドライバ540に)要求されたデータページ533を返してよい。クライアント側ドライバ540は、戻りデータレコード544としてデータベース階層構成要素560に返されたデータページを送信してよく、データベース階層構成要素560は次いでデータベースクエリー応答517として1つまたは複数のクライアントプロセス510にデータページを送信してよい。
いくつかの実施形態では、多様なエラーメッセージ及び/またはデータ損失メッセージ534が、分散型データベース最適化ストレージシステム530からデータベースエンジン520に(具体的には、クライアント側ドライバ540に)送信されてよい。これらのメッセージは、クライアント側ドライバ540から、エラー報告メッセージ及び/または損失報告メッセージ545として、データベース階層構成要素560に、及び次いで1つまたは複数のクライアントプロセス510に、データベースクエリー応答517とともに(または代わりに)渡されてよい。
いくつかの実施形態では、分散型データベース最適化ストレージシステム530のAPI531から534、及びクライアント側ドライバ540のAPI541から545は、データベースエンジン520が分散型データベース最適化ストレージシステム530のクライアントであるかのように、分散型データベース最適化ストレージシステム530の機能性をデータベースエンジン520に曝露してよい。例えば、データベースエンジン520は、データベースエンジン520及び分散型データベース最適化ストレージシステム530の組合せによって実装されるデータベースシステムの多様な動作(例えば、記憶動作、アクセス動作、ロギング変更動作、回復動作、及び/またはスペース管理動作)を実行するために(またはそれらの実行を容易にするために)(クライアント側ドライバ540を通して)リドゥログレコードまたは要求データページをこれらのAPIを通して書き込んでよい。図5に示されるように、分散型データベース最適化ストレージシステム530は、それぞれが複数のアタッチされたSSDを有してよいストレージノード535aから535nにデータブロックを記憶してよい。いくつかの実施形態では、分散型データベース最適化ストレージシステム530は、多様なタイプの冗長性方式の適用によって、記憶されているデータブロックに高い耐久性を提供してよい。
多様な実施形態では、図5のデータベースエンジン520と分散型データベース最適化ストレージシステム530との間のAPI呼出し及び応答(例えば、API531から534)、及び/またはクライアント側ドライバ540とデータベース階層構成要素560との間のAPI呼出し及び応答(例えば、API541から545)は、(例えば、ゲートウェイ制御プレーンによって管理される)安全なプロキシ接続上で実行されてよい、または公衆ネットワーク上でもしくは代わりにバーチャルプライベートネットワーク(VPN)接続等のプライベートチャネル上で実行されてよいことに留意されたい。本明細書に説明されるデータベースシステムの構成要素への、及びデータベースシステムの構成要素の間のこれらの及び他のAPIは、シンプルオブジェクトアクセスプロトコル(SOAP)技術及び表象状態転送(REST)技術を含むが、これに限定されるものではない異なる技術に従って実装されてよい。例えば、これらのAPIは、SOAP APIまたはRESTful APIとして実装されてよいが、必ずしも実装されない。SOAPは、ウェブベースのサービスとの関連で情報を交換するためのプロトコルである。RESTは分散型ハイパーメディアシステム用のアーキテクチャスタイルである。(RESTfulウェブサービスとも呼ばれてよい)RESTful APIは、HTTP及びREST技術を使用して実装されるウェブサービスAPIである。本明細書に説明されるAPIは、いくつかの実施形態では、データベースエンジン520及び/または分散型データベース最適化ストレージシステム530との統合をサポートするために、C、C++、Java、C#、及びPerlを含むが、これに限定されるものではない多様な言語でクライアントライブラリでラップされてよい。
上述されたように、いくつかの実施形態では、データベースシステムの機能構成要素は、データベースエンジンによって実行される構成要素と、別個の分散されたデータベース最適化ストレージシステムで実行される構成要素との間で仕切られてよい。1つの特定の例では、(例えば、単一のデータブロックを、そのデータブロックにレコードを追加することによって更新するために)何かをデータベーステーブルに挿入する要求をクライアントプロセス(またはクライアントプロセスのスレッド)から受信することに応えて、データベースエンジンヘッドノードの1つまたは複数の構成要素は、クエリーパーシング、最適化、及び実行を実行してよく、クエリーの各部分をトランザクション及び一貫性管理構成要素に送信してよい。トランザクション及び一貫性管理構成要素は、他のクライアントプロセス(またはクライアントプロセスのスレッド)が同時に同じ行を修正しようとしていないことを保証してよい。例えば、トランザクション及び一貫性管理構成要素は、この変更がデータベースにおいて原子的に、一貫して、耐久的に、及び独立して実行されることを保証することに責任を負ってよい。例えば、トランザクション及び一貫性管理構成要素は、分散型データベース最適化ストレージサービスのノードの1つに送信されるリドゥログレコードを生成し、ACIDプロパティがこのトランザクションについて満たされていることを保証する順序で及び/またはタイミングでリドゥログレコードを(他のクライアント要求に応えて生成される他のリドゥログとともに)分散型データベース最適化ストレージサービスに送信するために、データベースエンジンヘッドノードのクライアント側ストレージサービスドライバとともに機能してよい。対応するストレージノードは、(更新レコードとも呼ばれてよい)リドゥログレコードを受信すると、データブロックを更新し、データブロックのリドゥログを更新してよい(例えば、データブロックに向けられるすべての変更のレコード)。いくつかの実施形態では、データベースエンジンは、この変更のためにアンドゥログレコードを生成することに責任を負ってよく、アンドゥログのためのリドゥログレコードを生成することにも責任を負ってよく、この両方ともトランザクション性を保証するために(データベース階層で)ローカルに使用されてよい。ただし、従来のデータベースシステムにおいてとは異なり、本明細書に説明されるシステムは、(変更をデータベース階層で適用し、修正されたデータブロックをストレージシステムに送るよりむしろ)データブロックに変更を適用するための責任をストレージシステムに移してよい。さらに、図8から図9で本明細書に説明されるように、多様な実施形態では、スナップショット動作及び/またはログ操作はストレージシステムによっても実行されてよい。
異なる実施形態で、さまざまな割当てモデルがSSDのために実装されてよい。例えば、いくつかの実施形態では、ログエントリページ及び物理アプリケーションページが、SSDデバイスと関連付けられたページの単一のヒープから割り当てられてよい。この手法は、未指定のままとなるために、および自動的に使用に適合するためにログページ及びデータページによって消費される相対的な記憶量を残すという優位点を有してよい。また、手法は、ページが使用され、準備なしに随意に転用されるまでページを準備されないままにできるという優位点も有してよい。他の実施形態では、割当てモデルはストレージデバイスをログエントリ及びデータページのための別々のスペースに仕切ってよい。一度係る割当てモデルが図6のブロック図に示され、以下に説明される。
図6は、一実施形態に係る、分散型データベース最適化ストレージシステムの所与のストレージノード(または永続ストレージデバイス)にデータ及びメタデータがどのように記憶されてよいのかを示すブロック図である。この例では、SSDストレージスペース600は、610と名前が付けられたスペースの部分にSSDヘッダ及び他の固定メタデータを記憶する。SSDストレージスペース600は、620と名前が付けられたスペースの部分にログページを記憶し、追加のログページのために初期化され、確保される、630と名前が付けられたスペースを含む。(640として示される)SSDストレージスペース600の一部分は初期化されているが、割り当てられておらず、(650として示される)スペースの別の部分は初期化されておらず、割り当てられていない。最後に、660と名前が付けられたSSDストレージスペース600の部分はデータページを記憶する。
この例では、最初の使用可能なログページスロットは615として示され、最後の使用されたログページスロット(一時的)は625として示される。最後の確保されたログページスロットは635として示され、最後の使用可能なログページスロットは645として示される。この例では、最初の使用されたデータページスロット(一時的)は665として示される。いくつかの実施形態では、SSDストレージスペース600の中でのこれらの要素(615、625、635、645、及び665)のそれぞれの位置は、それぞれのポインタによって識別されてよい。
図6に示される割当て手法では、有効なログページはフラットストレージスペースの始まりにパックされてよい。ログページが解放されるために開く穴は、アドレススペースのさらに先に入る追加のログページスロットが使用される前に再使用されてよい。例えば、最悪の場合、最初のn個のログページスロットが有効なログデータを含み、この場合、nは今まで同時に存在した有効なログページの最大数である。この例では、有効データページはフラットストレージスペースの最後にパックされてよい。データページが解放されることにより開く穴は、アドレススペースでより下方の追加のデータページスロットが使用される前に再使用されてよい。例えば、最悪の場合、最後のmのデータページが有効なデータを含み、この場合mは今まで同時に存在した有効なデータページの最大数である。
いくつかの実施形態では、ログページスロットが有効なログページエントリの潜在的なセットの部分になることができる前に、ログページスロットは有効な将来のログエントリページのために混同できない値に初期化されなければならない。廃棄されたログページは新しい有効なログページについて絶対に混同されることがないほど十分なメタデータを有するので、これは、リサイクルされるログページスロットに暗黙に当てはまる。ただし、ストレージデバイスが最初に初期化されるとき、またはアプリケーションデータページを記憶するために潜在的に使用されたスペースが再利用されるとき、ログページスロットは、ログページスロットがログページスロットプールに加えられる前に初期化されなければならない。いくつかの実施形態では、ログスペースのバランスを取り戻す/再利用することは、バックグラウンドタスクとして実行されてよい。
図6に示される例では、カレントログページスロットプールは(615で)最初の使用可能なログページスロットと最後の確保されたログページスロット(625)との間に領域を含む。いくつかの実施形態では、このプールは、(例えば、最後の確保されたログページスロット635を識別するポインタに対する更新を持続させることによって)新しいログページスロットの再初期化なしに最後の使用可能なログページスロット(625)まで安全に増大してよい。この例では、(ポインタ645によって識別される)最後の使用可能なログページスロットを超えて、プールは、初期化されたログページスロットを持続し、最後の使用可能なログページスロット(645)のためのポインタを持続的に更新することによって、(ポインタ665によって識別される)最初の使用されたデータページスロットまで成長してよい。この例では、650として示される、SSDストレージスペース600の以前に初期化されておらず、割り当てられていない部分は、ログページを記憶するためにとりあえず利用されてよい。いくつかの実施形態では、カレントログページスロットプールは、最後の確保されたログページスロット(635)のポインタに対する更新を持続することによって(ポインタによって識別される)最後の使用されたログページスロットの位置まで縮小されてよい。
図6に示される例では、カレントデータページスロットプールは、(ポインタ645によって識別される)最後の使用可能なログページスロットと、SSDストレージスペース600の最後との間に領域を含む。いくつかの実施形態では、データページプールは、最後の使用可能なログページスロット(645)のポインタに対する更新を持続するによって、最後の確保されたログページスロット(635)に対するポインタによって識別される位置まで安全に成長してよい。この例では、640として示される、SSDストレージスペース600の以前に初期化されたが、割り当てられていない部分は、データページを記憶するためにとりあえず利用されてよい。これを超えて、プールは、最後の確保されたログページスロット(635)及び最後の使用可能なログページスロット(645)のポインタに対する更新を持続し、ログページよりむしろデータページを記憶するために、630及び640として示されるSSDストレージスペース600の部分を効果的に割り当てし直すことによって、最後の使用されたログページスロット(625)のポインタによって識別される位置まで安全に成長してよい。いくつかの実施形態では、データページスロットプールは、追加のログページスロットを初期化し、最後の使用可能なログページスロット(645)のポインタに対する更新を持続することによって、最初の使用されたデータページスロット(665)のポインタによって識別される位置まで安全に縮小されてよい。
図6に示される割当て手法を利用する実施形態では、ログページプール及びデータページプールのページサイズは、優れたパッキング挙動を容易にしつつも、独立して選択されてよい。係る実施形態では、有効なログページが、アプリケーションデータによって形成されるスプーフィングされたログページにリンクする可能性はないことがあり、壊れたログと依然として書き込まれていない次のページにリンクする有効なログテールとを区別することが可能なことがある。図6に示される割当て手法を利用する実施形態では、起動時、最後の確保されたログページスロット(635)に対するポインタによって識別される位置までのログページスロットのすべてが迅速に且つ連続して読み取られてよく、(推論されるリンキング/順序付けを含む)ログインデックス全体が再構築されてよい。係る実施形態では、すべてはLSN順序制御制約から推論できるので、ログページ間の明示的なリンキングの必要性がないことがある。
いくつかの実施形態では、セグメントは3つの主要な部分(またはゾーン)、つまり、ホットログを含む部分、コールドログを含む部分、及びユーザーページデータを含む部分から構成されてよい。ゾーンは、必ずしもSSDの隣接領域ではない。むしろ、ゾーンは、記憶ページの粒度で点在することがある。さらに、セグメント及びそのプロパティについてのメタデータを記憶するセグメントごとにルートページがあってよい。例えば、セグメントのルートページはセグメントのためのユーザーページサイズ、セグメント内のユーザーページの数、(フラッシュ番号(flush number)の形で記録されてよい)ホットログゾーンの現在の始まり/ヘッド、ボリュームエポック、及び/またはアクセス制御メタデータを記憶してよい。
いくつかの実施形態では、ホットログゾーンは、それらがストレージノードによって受信されるにつれ、クライアントからの新しい書込みを受け入れてよい。ページの以前のバージョンからのデルタの形をとるユーザーページ/データページに対する変更を指定するデルタユーザーログレコード(DULR)及び完全なユーザーページ/データページのコンテンツを指定する絶対ユーザーログレコード(AULR)の両方とも、ログに完全に書き込まれてよい。ログレコードは、ほぼ、ログレコードが受信され(例えば、ログレコードがLSNによってソートされるのではない)、それらがログページに渡って広がることがある順序でこのゾーンに追加されてよい。例えばログレコードは独自のサイズの表示を含んでよい等、ログレコードは自己記述的である必要がある。いくつかの実施形態では、ガベージコレクションはこのゾーンで実行されない。代わりに、スペースは、すべての必要とされるログレコードがコールドログにコピーされた後にログの始まりから切り詰めることによって再利用されてよい。ホットゾーンのログセクタは、セクタが作成されるたびに最も最近の既知の無条件VDLで注釈されてよい。条件付きのVDL CLRは、それらが受信されるにつれホットゾーンに書き込まれてよいが、最も最近に書き込まれたVDL CLRだけが意味を持ってよい。
いくつかの実施形態では、新しいログページが書き込まれるたびに、新しいログページにはフラッシュ番号が割り当てられる。フラッシュ番号は、各ログページの中のあらゆるセクタの部分として書き込まれてよい。フラッシュ番号は、2つのログページを比較するときに、どのログページが後に書き込まれたのかを決定するために使用されてよい。フラッシュ番号は単調に増加し、SSD(またはストレージノード)に対して調べられて(scoped)よい。例えば、単調に増加するフラッシュ番号のセットは、SSD上のすべてのセグメント(またはストレージノード上のすべてのセグメント)の間で共有される。
いくつかの実施形態では、コールドログゾーンで、ログレコードはそのLSNの昇順で記憶されてよい。このゾーンでは、AULRはそのサイズに応じて必ずしもデータをインラインで記憶しないことがある。例えば、AULRが大きなペイロードを有する場合、ペイロードのすべてまたは一部がデータゾーンに記憶されてよく、AULRはそのデータがデータゾーンのどこに記憶されているのかを指してよい。いくつかの実施形態では、コールドログゾーンのログページは、セクタ単位でよりむしろ、一度に1全ページ、書き込まれてよい。コールドゾーンのログページは一度に全ページ書き込まれるため、全セクタ内のフラッシュ番号が同一ではないコールドゾーンのどのようなログページも不完全に書き込まれたページと見なされてよく、無視されてよい。いくつかの実施形態では、コールドログゾーンでは、DULRは(最大2ログページまで)複数のログページに及ぶことができることがある。しかし、AULRは、例えば合体動作が単一の原子的な書込みでDULRをAULRで置き換えることができるように、複数のログセクタに及ぶことができないことがある。
いくつかの実施形態では、コールドログゾーンは、ホットログゾーンからログレコードをコピーすることによってポピュレートされる。係る実施形態では、LSNが現在の無条件ボリューム耐久性LSN(VDL)以下であるログレコードだけがコールドログゾーンにコピーされる資格があってよい。ホットログゾーンからコールドログゾーンにログレコードを移動するとき、(多くのCLR等の)いくつかのログレコードは、それらがもはや必要ではないため、コピーされる必要がないことがある。さらにユーザーページのなんらかの追加の合体がこの点で実行されてよく、このことが必要とされるコピーの量を削減してよい。いくつかの実施形態では、いったん所与のホットゾーンログページが完全に書き込まれ、もはや最新のホットゾーンログページではなく、ホットゾーンログページ上のすべてのULRがコールドログゾーンに無事にコピーされると、ホットゾーンログページは解放され、再使用されてよい。
いくつかの実施形態では、例えば記憶階層のSSDにもはや記憶される必要のないログレコード等、もはやサポートされていないログレコードによって占められているスペースを再利用するために、ガベージコレクションがコールドログゾーンで行われてよい。例えば、ログレコードは同じユーザーページに対する以後のAULRがあるときにサポートされなくなってよく、ログレコードによって表されるユーザーページのバージョンはSSDでの保持に必要とされない。いくつかの実施形態では、ガベージコレクションプロセスは、2つ以上の隣接するログページをマージし、2つ以上の隣接するログページをそれらのページが置き換えているログページからの旧式ではないログレコードのすべてを含むより少ない新しいログページで置き換えることによってスペースを再利用してよい。新しいログページには、それらが置き換えているログページのフラッシュ番号よりも大きい新しいフラッシュ番号が割り当てられてよい。これらの新しいログページの書込みが完了した後に、置き換えられたログページが空きページプールに加えられてよい。いくつかの実施形態では、あらゆるポインタを使用するログページの明示的な連鎖がないことがあることに留意されたい。代わりに、ログページのシーケンスはそれらのページに対するフラッシュ番号によって暗黙に決定されてよい。ログレコードの複数のコピーが検出されるたびに、最高のフラッシュ番号のログページに存在するログレコードが有効であると見なされてよく、他はもはやサポートされないと見なされてよい。
いくつかの実施形態では、例えば、データゾーン(セクタ)の中で管理されるスペースの粒度がデータゾーン(記憶ページ)の外の粒度とは異なってよいため、なんらかのフラグメンテーションがあってよい。いくつかの実施形態では、このフラグメンテーションを管理するために、システムは各データページによって使用されるセクタの数を追跡調査してよく、ほぼ全データページから優先的に割り当ててよく、ほぼ空のデータページを優先的にガベージコレクトする(データを新しい場所に、それが依然として関連している場合に移動することを必要としてよい)。セグメントに割り当てられるページが、いくつかの実施形態では3つのゾーンの間で転用されてよいことに留意されたい。例えば、セグメントに割り当てられていたページが解放されると、ページはある期間そのセグメントと関連付けられたままとなってよく、後にそのセグメントの3つのゾーンのいずれかで使用されてよい。あらゆるセクタのセクタヘッダは、セクタが属するゾーンを示してよい。いったんページ内のすべてのセクタが空くと、ページは、ゾーンに渡って共有される共通の空き記憶ページプールに返されてよい。この空き記憶ページの共有は、いくつかの実施形態では、フラグメンテーションを削減(または回避)してよい。
いくつかの実施形態では、本明細書に説明される分散型データベース最適化ストレージシステムは、メモリ内に多様なデータ構造を維持してよい。例えば、セグメントに存在するユーザーページごとに、ユーザーページテーブルが、このユーザーページが「クリアされる」かどうか(つまり、このユーザーページがすべてのゼロを含んでいるかどうか)、該ページのためのコールドログゾーンからの最新のログレコードのLSN、及びページのホットログゾーンからのすべてのログレコードの場所のアレイ/リストを示すビットを記憶してよい。ログレコードごとに、ユーザーページテーブルはセクタ番号、そのセクタの中のログレコードのオフセット、そのログページの中で読み取るセクタの数、(ログレコードが複数のログページに及ぶ場合)第2のログページのセクタ番号、及びそのログページの中で読み取るセクタの数を記憶してよい。いくつかの実施形態では、ユーザーページテーブルは、コールドログゾーンからのあらゆるログレコードのLSN、及び/またはAULRがコールドログゾーンにある場合、最新のAULRのペイロードのセクタ番号のアレイを記憶してもよい。
本明細書に説明される分散型データベース最適化ストレージシステムのいくつかの実施形態では、LSNインデックスはメモリに記憶されてよい。LSNインデックスは、コールドログゾーンの中のログページにLSNをマッピングしてよい。コールドログゾーンのログレコードがソートされていることを考えれば、それはログページあたり1つのエントリを含むためであってよい。ただし、いくつかの実施形態では、あらゆる旧式ではないLSNがインデックスに記憶され、対応するセクタ番号、オフセット、及びログレコードごとのセクタの数にマッピングされてよい。
本明細書に説明される分散型データベース最適化ストレージシステムのいくつかの実施形態では、ログページテーブルはメモリに記憶されてよく、ログページテーブルはコールドログゾーンのガベージコレクションの間に使用されてよい。例えば、ログページテーブルはどのログレコードがもはやサポートされていないのか(例えば、どのログレコードのガベージコレクションを行うことができるのか)、及び各ログページでどれほど多くの空きスペースが使用できるのかを識別してよい。
本明細書に説明されるストレージシステムでは、エクステントは、ボリュームを表すために他のエクステントと結合できる(連結できる、またはストライピングできるのかのどちらか)ストレージの高度に耐久性の単位を表す論理概念であってよい。各エクステントは、単一の保護グループでのメンバーシップによって耐久的にされてよい。エクステントは、LSN型の読取り/書込みインタフェースを、作成時に定義される固定サイズを有する隣接バイトサブレンジに提供してよい。エクステントに対する読取り/書込み動作は、含む側の保護グループによって1つまたは複数の適切なセグメント読取り/書込み動作にマッピングされてよい。本明細書に使用されるように、用語「ボリュームエクステント」は、ボリュームの中のバイトの特有のサブレンジを表すために使用されるエクステントを指してよい。
上述されたように、ボリュームは、それぞれが1つまたは複数のセグメントから構成される保護グループによって表される複数のエクステントから構成されてよい。いくつかの実施形態では、異なるエクステントに向けられるログレコードはインタリーブされたLSNを有してよい。ボリュームに対する変更が特定のLSNまで耐久的となるためには、そのLSNまでのすべてのログレコードが、それらが属しているエクステントに関わりなく耐久的である必要があってよい。いくつかの実施形態では、クライアントは、まだ耐久的にされていない未決ログレコードを追跡調査してよく、いったん特定のLSNまでのすべてのULRが耐久的にされると、クライアントはボリュームの保護グループの内の1つにボリューム耐久性LSN(VDL)メッセージを送信してよい。VDLは、保護グループのすべての同期ミラーセグメントに書き込まれてよい。これは「無条件VDL」と呼ばれることがあり、それはセグメントで起こる書込み活動とともに多様なセグメントに(またはより詳細には、多様な保護グループに)周期的に持続されてよい。いくつかの実施形態では、無条件VDLはログセクタヘッダに記憶されてよい。
多様な実施形態では、セグメントで実行されてよい動作は、(ホットログゾーンの末尾にDULRまたはAULRを書き込み、次いでユーザーページテーブルを更新することを含んでよい)クライアントから受信されたDULRまたはAULRを書き込むこと、(ユーザーページのデータセクタの位置を突き止め、あらゆる追加のDULRを適用する必要なしにデータセクタを返すことを含んでよい)コールドユーザーページを読み取ること、(ユーザーページの最も最新のAULRのデータセクタの位置を突き止めることを含み、ユーザーページに、それを返す前にあらゆる以後のDULRを適用してよい)ホットユーザーページを読み取ること、(適用された最後のDULRを置き換えるAULRを作成するためにユーザーページのDULRを合体させることを含んでよい)DULRをAULRで置き換えること、ログレコードを操作すること等を含んでよい。本明細書に説明されるように、合体は、ユーザーページのより最近のバージョンを作成するためにユーザーページの初期のバージョンにDULRを適用するプロセスである。(別のDULRが書き込まれるまで)合体の前に書き込まれたすべてのDULRは要求に応じて読み取られ、適用される必要はないことがあるため、ユーザーページを合体させることは読取りレーテンシを削減するのに役立ってよい。また、合体は、(ログレコードが存在することを必要とするスナップショットがないならば)旧いAULR及びDULRをもはやサポートされなくすることによってストレージスペースを再利用するのに役立ってよい。いくつかの実施形態では、合体動作は、最も最新のAULRを場所を見つけ、DULRのいずれも省略することなく、あらゆる以後のDULRを順番に適用することを含んでよい。上述されたように、いくつかの実施形態では、合体はホットログゾーンの中で実行されないことがある。代わりに、合体はコールドログゾーンの中で実行されてよい。いくつかの実施形態では、合体は、ログレコードがホットログゾーンからコールドログゾーンにコピーされるにつれて実行されてもよい。
いくつかの実施形態では、ユーザーページを合体させる決定は、(例えば、DULRチェーンの長さが合体動作の所定の閾値を超える場合、システム全体での方針、アプリケーション特有の方針、またはクライアントによって指定される方針に従って))、またはクライアントに読み取られているユーザーページごとに、ページの未決のDULRチェーンのサイズによってトリガされてよい。
図7は、一実施形態に係る、データベースボリューム710の例の構成を示すブロック図である。この例では、(アドレス範囲715aから715eとして示される)多様なアドレス範囲715のそれぞれに対応するデータが(セグメント745aから745nとして示される)異なるセグメント745として記憶される。すなわち、多様なアドレス範囲715のそれぞれに対応するデータは(エクステント725aから725b、及びエクステント735aから735hとして示される)異なるエクステントに編成されてよく、これらのエクステントの多様なエクステントが、(ストライプセット720a及びストライプセット720bとして示されるもの等の)ストライピングを行って、または行わないで(730aから730fとして示される)異なる保護グループ730に含まれてよい。この例では、保護グループ1はイレイジャーコーディングの使用を示す。この例では、保護グループ2及び3、並びに保護グループ6及び7は互いのミラーリングされたデータセットを表す。一方、保護グループ4は単一インスタンス(非冗長)データセットを表す。この例では、保護グループ8は、他の保護グループを結合する複数階層保護グループを表す(例えば、これは複数領域保護グループを表してよい)。この例では、ストライプセット1(720a)及びストライプセット2(720b)は、いくつかの実施形態で、エクステント(例えば、エクステント725a及び725b)がどのようにしてボリュームの中にストライピングされてよいのかを示す。
すなわち、この例では、保護グループ1(730a)は、それぞれ範囲1から3(715aから715c)のデータを含むエクステントaからc(735aから735c)を含み、これらのエクステントはセグメント1から4(745aから745d)にマッピングされる。保護グループ2(730b)は、範囲4(715d)からストライピングされたデータを含むエクステントd(735d)を含み、このエクステントはセグメント5から7(745eから745g)にマッピングされる。同様に、保護グループ3(730c)は、範囲4(715d)からストライピングされたデータを含むエクステントe(735e)を含み、セグメント8から9(745hから745i)にマッピングされ、保護グループ4(730d)は、範囲4(715d)からストライピングされたデータを含むエクステントf(735f)を含み、セグメント10(745j)にマッピングされる。この例では、保護グループ6(730e)は、範囲5(715e)からストライピングされたデータを含むエクステントg(735g)を含み、セグメント11から12(745kから745l)にマッピングされ、保護グループ7(730f)は、やはり範囲5(715e)からストライピングされたデータを含むエクステントh(735h)を含み、セグメント13−14(745mから745n)にマッピングされる。
ここで図8を参照すると、多様な実施形態で、データベースシステム400は、スナップショットを作成する、削除する、修正する、及び/またはそれ以外の場合使用するように構成されてよい。図8の方法は、分散型データベース最適化ストレージシステム410(例えば、ストレージシステムサーバノード(複数の場合がある)430、440、450等)のログ構造化ストレージシステムの多様な構成要素によって実行されているとして説明されてよいが、方法はいくつかの場合、いずれの特定の構成要素によっても実行される必要もない。例えば、いくつかの場合、図8の方法は、いくつかの実施形態に従ってなんらかの他の構成要素またはコンピュータシステムによって実行されてよい。また、いくつかの場合、データベースシステム400の構成要素は、図4の例に示されるのとは異なって組み合されてよい、または存在してよい。多様な実施形態では、図8の方法は分散型データベース最適化ストレージシステムの1台または複数のコンピュータによって実行されてよく、その内の1つは図10のコンピュータシステムとして示される。図8の方法は、スナップショットの作成、削除、修正、使用等のための方法の1つの例の実装として示される。他の実装では、図8の方法は追加のブロック、または図示されるよりも少ないブロックを含んでよい。
810で、それぞれがデータベースサービスによって記憶される/維持されるデータに対するそれぞれの変更と関連付けられている複数のログレコードが維持されてよい。多様な実施形態では、ログレコードによって表される変更は、データベースサービスの分散型データベース最適化ストレージシステムのストレージシステムサービスノード430によって記憶されてよい。本明細書に説明されるように、一実施形態では、ログレコードは、データベースサービスのデータベースエンジンヘッドノードから、分散型データベース最適化ストレージシステムによって受信されてよい。他の実施形態では、ログレコードは、分散型データベース最適化ストレージシステムとは別個であるデータベースサービスの別の構成要素から受信されてよい。
一実施形態では、各ログレコードは、本明細書に説明されるように、順次に順序付けられた識別子(例えば、ログシーケンス番号(「LSN」)等のそれぞれの識別子と関連付けられてよい。ログレコードは、ログレコードが受信される時刻でそれぞれのLSNと関連付けられてよい、またはストレージシステムは所与のログレコードに、それが受信された順序でLSNを割り当ててよい。
複数のログレコードが対応するデータは、(例えば、図4のデータページ(複数の場合がある)433、443、もしくは453の内の)単一のデータページ、または多くのデータページであってよい。複数のログレコードがLSN1から4を有する4つのログレコードを含むシナリオを考える。ある例では、LSN1から4のそれぞれがデータページAに関連する。または、別の例では、LSN1及びLSN3がデータページAに関連し、LSN2及び4がデータページBに関連してよい。この例では、それぞれの特定のログレコードが単一のユーザー/データページと関連付けられてよい(例えば、LSN1−ページA、LSN2−ページB等)ことに留意されたい。
多様な実施形態では、ログレコードは図4のストレージシステムサーバノード430、440、及び450等の多様なノード全体で分散して記憶されてよいことに留意されたい。いくつかの実施形態では、ログレコードの単一のコピーが単一のノードに記憶されてよい、または他の例の間では、単一のコピーは複数のノードに記憶されてよい。4つのログレコードの例を上記から続けると、LSN1が付いたログレコードはノード430及びノード440の両方に記憶されてよく、LSN2はノード430に記憶されてよく、LSN3及びLSN4は3つすべてのノード430、440、及び450に記憶されてよい。係る例では、多様なノード及び/またはミラーのすべてがログレコードの完全なセットにより最新ではないことがある。図9に説明されるように、ログレコード操作は多様なノードに記憶されるログレコード間の差異を調整することを容易にするために実行されてよい。
いくつかの実施形態では、所与のログレコードがどこに記憶されるのか(例えば、どの1つのノードまたは複数のノード)は、データベースエンジンヘッドノードによって決定されてよく、分散型データベース最適化ストレージシステムに提供されるルーティング情報として含まれてよい。代わりにまたは加えて、分散型データベース最適化ストレージシステムは、どの1つのノードまたは複数のノードに所与のログレコードを記憶するのかを決定してよい。一実施形態では、分散型データベース最適化ストレージシステムによる係る決定は、多様なノードの間でログレコードをほぼ釣り合いをとって分散することによって性能を最大限にすることであってよい。一実施形態では、分散型データベース最適化ストレージシステムによる係る決定は、ログレコードの重要さに依存してよい。例えば、あまり重要ではないデータページと関連付けられたDULRが単一のノードにしか記憶されないことがあるのに対し、重要な(例えば、頻繁にアクセスされる)データページのAULRは複数のノードに記憶されてよい。
本明細書に説明されるように、ログレコードはDULR及びAULRを含んでよい。多様な実施形態では、アプリケーション、データベースサービス、及び/またはデータベースサービスのユーザー(または他の構成要素)が、データページに対する所与の変更のためにDULRを作成するのか、それともAULRを作成するのかを決定してよい。例えば、データベースサービスは、所与のデータページのための10のログレコードごとに少なくとも1つがAULRであることを保証してよい。係る例で、所与のデータページの行の9つのログレコードがDULRである場合、次いでデータベースサービスは、次のログレコードがAULRであることを指定してよい。
さらに、多様な実施形態では、ボリューム中の各データページがAULRを必要とすることがある。したがって、データページの最初の書込みの場合、ログレコードがAULRであってよい。一実施形態では、システム開始の一部として、各データページが該データページをAULRとして初期化するために、特定の値(例えば、すべてゼロ)に書き込まれることがある。データベースの以後の書込みがDULRであってよいように、すべてゼロのAULRで十分であってよい。
820で示されるように、スナップショットが生成されてよい。多様な実施形態では、スナップショットを生成することは、特定のログレコードのログ識別子(例えば、LSN)を示すメタデータを生成することを含んでよい。いくつかの例では、他の特定のログレコードの1つまたは複数の他のログ識別子を示すメタデータも生成されてよい。ログレコード(複数の場合がある)のログ識別子(複数の場合がある)を示す係るメタデータは、それらの特定のログレコードが、そのスナップショットのために(そのスナップショットが削除される、または置き換えられるまで)(例えば、削除されない、またはガベージコレクトされない等)保存されるべきであることを示してよい。
いくつかの実施形態では、生成されたメタデータはスナップショット識別子を示してもよい。例のスナップショット識別子は、スナップショットと関連付けられた連番、名前、時刻の内の1つまたは複数を含んでよい。例えば、特定のスナップショットはSN1と呼ばれてよい、及び/または2005年12月22日、GMT14:00.00(午後2時きっかり)のタイムスタンプを有してよい。
多様な実施形態では、スナップショットと関連付けられるメタデータは、1つまたは複数のログレコードがガベージコレクトされるのを防ぐために使用可能であってよい。例えば、メタデータは、スナップショットと関連付けられたログレコード/LSNまでの所与のページを作成し直すために必要とされる1つまたは複数のログレコードを示してよい。結果として、メタデータが、データページ(複数の場合がある)がスナップショットと関連付けられたLSNまで生成できることを保証してよい。
多様な実施形態では、メタデータはさまざまな異なる場所に記憶されてよい。例えば、メタデータは各ログレコードの中に記憶されてよく、ガベージコレクションステータスからのそのそれぞれのログレコードの保護を示してよい。例えば、LSN2、LSN3、及びLSN4を有するログレコードが特定のスナップショットのためにガベージコレクトされるべきではない場合、次いでLSN2、LSN3、及びLSN4でのログレコードと関連付けられたメタデータは、LSN2、LSN3、及びLSN4でのログレコードがガベージコレクトされるべきではないことを示す必要がある。別の例として、スナップショットメタデータは分散型データベース最適化ストレージシステムのより高いレベルで(例えば、セグメント、ボリューム、又はログレコードのレベルで、または他で等)記憶されてよく、複数のログレコードのガベージコレクションステータスの内のステータスを示してよい。係る例では、メタデータは、スナップショットごとに保持される必要のあるログレコードに対応するLSNのリストを含む。以後のスナップショットを撮ると、保持されるログレコード(複数の場合がある)が変化することがあることに留意されたい。結果として、ログレコードの内の特定のログレコードに対応するメタデータも変化することがある。例えば、LSN2、LSN3、及びLSN4は、将来のスナップショットのためにもはや保持される必要はないことがある。したがって、係る例では、メタデータは、LSN2、LSN3、及びLSN4に対応するログレコードが保持される必要があることをメタデータがもはや示さないように修正されてよい。
一実施形態では、メタデータは、どのログレコードがガベージコレクション可能ではないのかをはっきりと示してよい、またはメタデータは代わりにスナップショットに対応する特定のLSNとともに(以下に説明される)スナップショットタイプを示してよい。係る実施形態では、分散型データベース最適化ストレージシステムのガベージコレクションプロセスは、スナップショットタイプ及び特定のLSNから、どのログレコードがガベージコレクション可能であるのか、及びどのログレコードがガベージコレクション可能でないのかを決定してよい。例えば、ガベージコレクションプロセスは、特定のLSNと関連付けられたログレコード、及びそのデータページのための以前のAULRまで戻る各DULRがガベージコレクション可能ではないと決定してよい。
多様な実施形態では、スナップショットは特定の1つのデータページに特有であってよい、またはスナップショットは複数のデータページ(例えば、セグメント、ボリューム)に特有であってよい。
一実施形態では、メタデータは、本明細書に説明されるように、スナップショットのタイプ(例えば、スナップショットが連続スナップショットであるのか、それとも不連続スナップショットであるのか)を示してよい。スナップショットのタイプはメタデータに直接的に示されてよい(例えば、連続または不連続)、またはスナップショットのタイプは間接的に示されてよい(例えば、どのログレコード(複数の場合がある)がガベージコレクション不可と示されるのかが、スナップショットが連続であるのか、それとも不連続であるのかを示してよい)。例えば、不連続スナップショットがガベージコレクション可能ではないログレコード(複数の場合がある)の異なる(例えば、より小さい)セットを示すことがあるのに対して、連続スナップショットはガベージコレクション可能ではないログレコード(複数の場合がある)の1つのセットを示すことがある。いくつかの状況では、連続スナップショット及び不連続スナップショットはログレコード(複数の場合がある)の同じセットを示すメタデータを有することがある。例えば、AULRに対応する時点で撮られるデータページのスナップショットの場合、連続スナップショット及び不連続スナップショットが、ともにAULRだけがガベージコレクションから保護される必要があることを示すメタデータを含むことがある。
連続スナップショットは、連続スナップショットの時刻と、以前の時刻(例えば最も最近のAULR)との間の各時点までデータを復元するために使用できてよい。対照的に、不連続スナップショットは、スナップショットの時点での状態までデータを復元するために再使用可能であってよい。例えば、そのデータページの後に3つのデルタログレコードがあり、続いてデータページ(AULR)の新しいバージョン及びデータページのその新しいバージョンのためのさらに3つのデルタログレコードが続くデータページ(AULR)の例を考える。データを復元するためにスナップショットを使用することは、本明細書では、データの以前のバージョンをコピーすることなく、スナップショットの時点のデータを読み取ることを説明するために使用される。不連続スナップショットがエントリのすべて(AULR及び6つすべてのDULR)の後の時点で撮られる場合には、ガベージコレクション不可として示されてよいログエントリはデータページの新しいバージョン、及びそのデータページの後の3つのログエントリを含む。連続スナップショットが、現在のスナップショットの時点からデータページの最初のバージョンの時点までに撮られる場合には、ガベージコレクション不可として示されてよいログエントリは最初のデータページ及び6つすべてのログレコードを含む。中間のインスタンス化されたブロック(例えば、データページ(AULR)の新しいバージョン)は、それがデータページの最初のバージョン及び最初の3つのログレコードで作成し直すことができるため、ガベージコレクション不可として示されないことがあることに留意されたい。この例では、不連続スナップショットが、スナップショットの時点まで、及びスナップショットの時点と、スナップショットの前の最も最近のAULRとの間の各時点までデータページを復元するために使用できるのに対し、連続スナップショットは、ログレコードが存在する時点のいずれかまでデータページを復元するために使用できることにも留意されたい。
いくつかの実施形態では、スナップショットの生成は、オフボリュームバックアップ戦略を利用するときに必要とされるように、データブロックの追加の読取り、コピー、または書き込みなしで実行されてよい。したがって、スナップショットは、スナップショット生成がデータのバックアップをとることを必要としないようにインプレースで生成されてよい。データがどこか他でも記憶されるデータのバックアップが発生してよいが、係る発生はスナップショット生成プロセスの外で実行されてよいことに留意されたい。例えば、クライアントがデータの複数のコピーが別々の記憶場所に記憶されることを要求することがある。
830で示されるように、データはスナップショットに対応する状態の時点で読み取られてよい。例えば、ユーザーがテーブルを削除したが、そのテーブルを戻すことを希望する場合、スナップショットは、テーブルが再び利用できるようにデータ(例えば、データページ、セグメント、ボリューム等)を読み取る/復元するために使用できる。スナップショットを読み取る/復元することが、スナップショットの時点の後に実行されたなんらかのデータ/作業を失うことを含むことがあり、読取り/復元プロセスの一部としてデータの以前のバージョンのコピーを作成することを含まないことがあることに留意されたい。
スナップショットに対応する状態までデータを復元することは、データの以前のバージョンに、メタデータに示される特定のログレコードを含んだログレコードの1つまたは複数を適用することを含んでよい。データの以前のバージョンはAULRの形をとってよい、またはデータの以前のバージョンは(AULR、及び/または該DULRの前の1つまたは複数のDULRに適用される)DULRの形をとってよい。
いくつかの実施形態では、データの以前のバージョンに1つまたは複数のログレコードを適用することは、データベースサービスのためのバックグラウンドプロセスとして実行されてよい。一実施形態では、データの以前のバージョンにログレコード(複数の場合がある)を適用することは、データベースサービスの多様なノード全体で分散されてよい。一実施形態では、データの以前のバージョンにログレコード(複数の場合がある)を適用することは、それらの多様なノード全体で並行して実行されてよい。
840で示されるように、特定のスナップショットまで復元した後、該スナップショットと関連付けられた1つの時刻よりも遅い関連付けられた複数の時刻の1つまたは複数のログレコードはガベージコレクション可能として示されてよい。例えば、LSN1からLSN6を有するログレコードがLSN3で撮られたスナップショットを含むデータページについて存在する場合、LS3で撮られたスナップショットを復元すると、LSN4からLSN6はガベージコレクション可能として示されてよい、または単にガベージコレクション不可の表示を削除され(それによって、それらをガベージコレクション可能にして)よい。したがって、第2のスナップショットがLSN6で撮られた場合にも、LSN3からスナップショットを復元すると、LSN6で撮られたスナップショットは、LSN6で撮られたスナップショットに対応するログレコードの保護がもはや効力がないように、もはやインプレースではないことがある。また、一実施形態では、第2のスナップショットは以前のスナップショットに復元しても保たれてよい。
多様な実施形態では、ガベージコレクションは、ログレコードを記憶するために使用されるスペースを、将来の他のログレコードのために(または他のデータのために)再利用できるようにするバックグラウンドプロセスであってよい。ガベージコレクションは、ガベージコレクションが分散プロセスとして同時に発生してよいように、多様なノード全体に拡散されてよい。ガベージコレクションプロセスによる再利用は、1つまたは複数のログレコードを削除することを含んでよい。削除するそれらのログレコードは、メタデータに示される特定のログレコード(複数の場合がある)に基づいてガベージコレクションプロセスによって決定されてよい、及び/またはスナップショットのタイプに基づいてよい。または、それぞれの保護されているログレコードがメタデータではっきりと示される一実施形態では、ガベージコレクションプロセスは、メタデータで保護されているとして示されていないログレコードを単に削除してよい。
いくつかの実施形態では、複数のログレコードが、少なくとも部分的にスナップショットに基づいて合体されてよい。例えば、所与のデータページについて、AULRがLSN1に存在し、DULRがLSN2から8に存在し、不連続スナップショットがLSN8で撮られる場合、LSN2からLSN8のログレコードのそれぞれがLSN1でAULRに適用されるように、新しいAULRが作成されて、LSN8でDULRを置き換えてよい。LSN8の新しいAULRは、次いでLSN1からLSN7でのログレコードをガベージコレクション可能にし、それによりそれらのログレコードを記憶するために使用されるスペースを解放できる。連続スナップショットの場合、連続スナップショットによってカバーされる時点のそれぞれまで復元する能力を維持するために合体は起こらないことがあることに留意されたい。クライアントが、連続スナップショットが前の2日間、保持され、周期的な(例えば、日に2回、日に1回等)不連続スナップショットがその前の30日間、保持されることを要求することがあることに留意されたい。連続スナップショットが前の2日間の範囲から外れるとき、連続スナップショットは不連続スナップショットに変換されてよく、変換された不連続スナップショットにもはや必要とされないログレコードはもはや保持されないことがある。
1日1回の不連続スナップショットが日1から30のそれぞれに存在し、連続スナップショットが日30から日32まで存在する例を考える。日33に、日30から日31の連続スナップショットは、それがすでに最も最近の2日間の期間内にないので、クライアントによってもはや必要とされないことがある。したがって、日30から日31の連続スナップショットは不連続スナップショットに変換されてよい。日30から日31の連続スナップショットの部分を不連続スナップショットに変換するために、メタデータは、その時点での不連続スナップショットにもはや必要とされていないログレコード(複数の場合がある)がガベージコレクション可能と示される(またはガベージコレクション不可としてもはや示されない)ように修正されてよい。同じラインに沿って、日1の不連続スナップショットも、それがもはや最も最近の2日間の前の先行する30日のウィンドウの範囲内に入らないため、(日2の不連続スナップショットが日1の不連続スナップショットのログレコードに依存していないと仮定して)削除されてよい、及び/またはガベージコレクトされてよい。日1のスナップショットを削除することは、(以後のスナップショットによって必要とされない限り)日1のスナップショットと関連付けられたログレコードをガベージコレクトされることから保護したメタデータを、それらのログレコードが次いでガベージコレクション可能となってよいように修正及び/または削除することを含んでよい。日2の不連続スナップショットが日1の不連続スナップショットのログレコードに依存している場合、日2の不連続スナップショットと関連付けられている1つまたは複数のログレコードが、日1のログレコードを削除する、及び/またはガベージコレクトできるようにAULR(複数の場合がある)で変換されてよいことに留意されたい。
本明細書に説明されるように、図8の方法は単一のデータページのデータに、または複数のデータページからのデータに適用してよい。したがって、多様な実施形態では、スナップショットは複数の異なるデータページからデータを復元するために、または単一のデータページにデータを復元するために使用できてよい。したがって、スナップショットのメタデータは、単一のデータページのための1つまたは複数の特定のログレコードの1つまたは複数のログ識別子、または複数のデータページのための複数のログレコードのログ識別子を示してよい。さらに、単一のデータページのスナップショットに対応するメタデータが、いくつかの例では、複数のログレコードの複数のログ識別子を示してよいことにも留意されたい。例えば、メタデータは、例えばスナップショットがDULRに対応する場合等、ガベージコレクトをするべきではない複数のログレコードを示してよい。係る例では、メタデータは(直接的にまたは間接的に)最も最近のAULRまで戻る各DULR、及びそのページの最も最近のAULRはガベージコレクトされるべきではないことを示してよい。
開示されているインプレーススナップショット技法は、データブロックの読取り、コピー、及び書込みによってスナップショットを実行するためにデータをバックアップするシステムとは対照的に、より少ないIOリソース及びネットワーキングリソースを使用するという点で、システムの性能を改善してよい。そして、それらの性能改善のため、開示されている技法は、システムのユーザー(例えば、フォアグラウンド活動にシステムを使用しているユーザー)の目に見えるだろう、より少ないトランザクションレートの失速または制限を実現してよい。
ここで図9を参照すると、多様な実施形態で、データベースシステム400は、ログレコードを操作する(例えば、変形する、修正する等)ように構成されてよい。図9の方法は、分散型データベース最適化ストレージシステム410(例えば、ストレージシステムサーバノード(複数の場合がある)430、440、450等)のログ構造化ストレージシステムの多様な構成要素によって実行されるとして説明されてよいが、方法はいくつかの場合にいずれの特定の構成要素によっても実行される必要はない。例えば、いくつかの場合、図9の方法は、いくつかの実施形態に従っていくつかの他の構成要素またはコンピュータシステムによって実行されてよい。または、いくつかの場合、データベースシステム400の構成要素は、図4の例に示されるとは異なって組み合されてよい、または存在してよい。多様な実施形態では、図9の方法は、分散型データベース最適化ストレージシステムの1台または複数のコンピュータによって実行されてよく、その内の1つは図10のコンピュータシステムとして示される。図9の方法は、ログ変形/操作のための方法の1つの例の実装として示される。他の実装では、図9の方法は追加のブロック、または図示されるよりも少ないブロックを含んでよい。例えば、図9の方法は、図9の方法が図8の方法の1つまたは複数のブロックを含むように、図8の方法と併せて使用されてよい。
910で、複数のログレコードが受信されてよい。例えば、ログレコードは、データベースサービスのデータベースエンジンヘッドノードから分散型データベース最適化ストレージシステムによって受信されてよい。図8で留意されるように、及び本明細書に説明されるように、各ログレコードはそれぞれのログシーケンス識別子と関連付けられてよく、データベースシステムによって記憶されるデータに対するそれぞれの変更と関連付けられてよい。また、本明細書に説明されるように、ログレコードは、ベースラインログレコード(複数の場合がある)とも呼ばれる1つまたは複数のAULR及び/または1つまたは複数のDULRを含んでよい。ベースラインログレコード(複数の場合がある)は1ページのデータを含んでよく、したがってそれはデータに対する変更だけではなく、ページの完全なデータを含む。対照的に、DULRはデータの完全なデータではなく、データのページに対する変更を含んでよい。
以下の段落は、ログレコードの範囲を記述するために例の表記を説明する。単純な括弧()及び角括弧[]は範囲の開いた(排他的な)境界及び閉じられた(包含的な)境界を示す。本明細書に説明されるように、LSNは0<=a<=b<=c<=d<=eとなるようにログレコードの順次順序付けであってよい。LSNtは、末尾を表す特別なLSNで、0から開始し、ボリュームで書込みが発生するにつれ絶えず増加している。本明細書で使用されるように、ログセクションは、ベースラインLSNでのボリュームを考えると、1つまたは複数のターゲットLSNでボリュームを読み取ることができるために必要なすべての情報を有するログレコードの集合体である。一実施形態では、ログセクションは、ベースラインLSN以下の、または最高のターゲットLSNより大きいLSNが付いたログレコードは含まない。例えば、「a」のベースラインLSNに完全なボリュームがあり、ログセクションがL(a;b]である場合には、ボリュームを生成し、LSN「b」で読み取ることができる。
例の構文を使用すると、ログセクションは、その結果L(<ベースラインLSN>;<ターゲットLSNのセット>]として表されてよい。一実施形態では、<ベースラインLSN>は単一のLSN(例えば、「0」または「a」)であってよい。<ターゲットLSNのセット>は単一のLSN(例えば、「b」)、不連続LSNのシーケンス(例えば、「b,c」)、LSNの包含的な範囲(例えば、「c..d」)、またはその組合せ(例えば、「b,c,d..e」)であってよい。c..d等の包含的な範囲は、cとdとの間の任意のボリュームを復元するために十分な情報が利用できることを示す。例の構文に従って、ターゲットLSNはベースラインLSN以上である。さらに、例の構文に従って、ログセクションのLSNは昇順で一覧表示される。
多様な実施形態では、ログセクション内のレコードはAULR及び/またはDULRの組合せであることがある。ログセクションは、代わりにDULRだけまたはAULRだけを含んでよい。例えば、ログセクションは、ベースラインとターゲットLSNとの間で修正されたユーザーページのAULRだけを含んでよい。多様な実施形態では、ターゲットLSN以外のLSNでユーザーページのバージョンを生成することができることは必要とされていない。例えば、ログセクションL(a;c]は、a<b<cの場合にLSNbでユーザーページを生成するほど十分な情報を有していないことがある。
ボリュームの初期状態がすべてゼロから構成されていると仮定すると、形式L(0;a]のログセクションはLSN aでのボリュームを表してよい。
本明細書に説明されるログセクション表記は、複数のデータページ/ユーザーページを含むボリュームのLSNを示す。例えば、2つのページ、x及びyだけを含むボリュームを考える。LSN1が付いたログレコードはページxの場合AULRであってよく、LSN2が付いたログレコードはページyの場合AULRであってよい。例を続行すると、LSN3及びLSN5が付いたログレコードはページxの場合DULRであってよく、LSN4及びLSN6が付いたログレコードはページyの場合DULRであってよい。読取り要求がページyに対して入信する場合、次いでデータベースサービスは、ページyの最も最近のAULRであるLSN2のAULRで開始してよく、LSN4及びLSN6からの変更をその上に適用してよい。同様に、ページxに対する読取り要求の場合、データベースサービスはLSN1のAULRで開始し、次いで要求者にページxを返す前に、LSN3及びLSN5でのログレコードからの変更を適用してよい。
920で示されるように、複数のログレコードは、分散型データベース最適化ストレージシステムのストレージノードの中で記憶されてよい。一実施形態では、所与のログレコードは、分散型データベース最適化ストレージシステムの1つまたは複数のストレージノードに記憶されてよい。一実施形態では、分散型データベース最適化ストレージシステムは、どの1つまたは複数のストレージノードに所与のログレコードを記憶するのかを決定してよい、または分散型データベース最適化ストレージシステムは、所与のログレコードを記憶する1つまたは複数のストレージノードを示す指示を、データベースエンジンヘッドノードから受信してよい。いくつかの例では、各ストレージノードが所定の時間に同じ1つまたは複数のログレコードを記憶しないことがあるため、ストレージシステムの1つまたは複数のノード及び/またはミラーはカレントログレコードの完全なセットで最新ではないことがある。
930で示されるように、複数のログレコードが変形してよい。本明細書に説明される例の表記で示されるように、変形してよい複数のログレコードは2つ以上のログセクションを含んでよい。それらの2つ以上のログセクションは、該変形のオペランドであってよい。オペランド(例えば、L(a;c]、L(a;b,d]、L(a;b,c..e]等)としてのログセクションの多様な例は以下に提供される。変形はさまざまな方法で発生してよい。例えば、一実施形態では、複数のログレコードを変形させることにより、修正された複数のログレコードが生じてよい。修正された複数のログレコードは、異なる複数のログレコードであってよい。異なる複数のログレコードは、ログレコードの少なくとも1つでは異なるが、最初に維持された複数のログレコードよりも数が少ない、数が多い、または数が等しいことがある。ログレコードの変形は(例えば、ストレージスペース、ネットワーク使用量等に関して)より効率的なシステムを生じさせてよい。
一実施形態では、複数のノード及びミラーを有する分散型システムにおいて、ノード及び/またはミラーのいくつかが最新であってよく、いくつかは最新でないことがある。係る実施形態では、複数のログレコードを変形させることは、差異がストレージノードの内の異なるストレージノードで維持されるログレコードに存在すると決定すること、及び多様なノードで維持されるログレコードのそれらの差異を調整することを含んでよい。ログレコードの差異を調整することは、多様なノードに記憶される多様なログレコードを調整するログレコードの全体的なマスタログの形をとる修正された複数のログレコードを生成すること、及び/または再構築することを含んでよい。一実施形態では、マスタログは次いで(例えば、最新ではないログを置き換えることによって)ログのコンテンツを同期させるために多様なノード/ミラーに提供されてよい。また、一実施形態では、マスタログは特定のノードで維持されてよい。そのマスタログは、ログ調整が次に発生するまでストレージノードのマスタログと見なされてよい。
ログ調整を示すために、3つのストレージノードSN1、SN2、及びSN3がある単純な例を考える。SN1は、識別子LSN1、LSN2、及びLSN3を有するログレコードを記憶してよい。SN2は、識別子LSN3、LSN4、及びLSN5を有するログレコードを記憶してよく、SN3は識別子LSN6を有するログレコードを記憶してよい。ログレコードを変形させることは、SN1とSN2の両方に記憶されていた、LSN3の2つのインスタンスではなく、LSN1から6のかつてのインスタンスを含むマスタログレコードを生成することを含んでよい。ログ調整を実行することは、1つまたは複数のログ演算をログレコードに適用することを含んでよい。ログ演算の例は、ログレコードの合体、切取り、トリミング、削減、融合、及び/またはそれ以外の場合削除または追加を含む。係る例のログ演算はより詳細に以下に説明される。
本明細書に説明されるように、一実施形態では、ログレコードを変形させることは、複数のログレコードを合体することを含んでよい。ログレコードを合体することは、デルタログレコードを新しいベースラインログレコードに変換することを含んでよい。LSN1、LSN2、LSN15、及びLSN16がそれぞれのAULRの識別子であり、LSN2からLSN14がそれぞれのDULRの識別子であるデータページx及びyの例を考える。ログレコードを合体することは、LSN8のDULRをAULRに変換することを含んでよい。LSN8をAULRに変換するためには、LSN8でのログレコードを含んだLSN8と同じデータページ(例えば、データページy)に対応するログレコードからの変更がそのデータページの最も最近のAULRに適用されてよい。例えば、LSN2がデータページyのAULRに対応し、LSN4、LSN6、及びLSN8がデータページyのDULRに対応する場合、次いでLSN8でのDULRをAULRに変換することはLSN4、LSN6、及びLSN8でのログレコードの変更をLSN2でのAULRに適用することを含む。本明細書に説明されるように、他の状況では(例えば、連続スナップショットまたは他の依存状態の場合)、LSN2、LSN4、及びLSN6はもはや必要とされなくなるまで保持されてよいのに対し、特定の状況では、それらのLSNのログレコードは次いでガベージコレクトされてよい、またはそれ以外の場合削除されてよい。
多様な実施形態では、複数のログレコードは、以前の状態にデータを復元するために使用できる少なくとも1つのスナップショット(例えば、図8の方法に従って作成されるスナップショット)に関連付けられてよい。係る実施形態では、複数のレコードを変形させることは、少なくとも部分的にスナップショットに基づいてログレコードの1つまたは複数をガベージコレクトすることを含んでよい。例えば、上記の合体の例を続行すると、LSN2、LSN4、及びLSN6が連続スナップショットの一部として必要とされる場合、次いでそれらのLSNに対応するログレコードはガベージコレクション可能ではな(く、第1に合体されな)いことがある。対照的に、それらのレコードがスナップショットの一部として必要とされない場合には、それらのログレコードはガベージコレクトされてよい。例えば、不連続スナップショットが、例えばLSN10に等、LSN2、LSN4、及びLSN6の後のLSNに存在する場合、LSN8でのログレコードがAULRであるため、次いでLSN2、LSN4、及びLSN6でのログレコードは必要とされないことがある。したがって、LSN2、LSN4、及びLSN6のログレコードはガベージコレクトされてよい。
本明細書に説明されるように、ログレコードを変形させることは、1つまたは複数のログレコードがガベージコレクション可能であることを示すことを含んでよい。係る例では、1つまたは複数のログレコードがガベージコレクション可能であることを示すためにログレコードを変形させることは、それらのログレコードがガベージコレクション可能であることを示すためにそれらの1つまたは複数のログレコードと関連付けられるメタデータを生成すること、及び/または修正することを含んでよい。
一実施形態では、ログレコードを変形させることは、1つまたは複数のログレコードを削除することを含んでよい。本明細書に説明されるように、ログレコードを削除することは、他の演算の中でも切取り演算またはトリミング演算の一部であってよい。ログレコードを削除することは、いくつかの実施形態では、削除がフォアグラウンドプロセスとして実行されてよいことに対して、ガベージコレクションがバックグラウンドプロセスとして受動的に且つゆったりと実行されてよい点で異なってよい。
一実施形態では、ログレコードを変形させることは、複数のログレコードをトリミングするためのトリミング演算を実行することを含んでよい。トリミング演算を実行することは、ターゲット識別子(例えば、ターゲットLSN)の値未満、または値以下のそれぞれの識別子(例えば、LSN値)を有する1つまたは複数のログレコードを削除すること(及び/またはガベージコレクション可能として示すこと)を含んでよい。トリミング演算は、ログセクションのベースラインLSNを増加するために使用されてよい。それぞれの識別子が時刻に従って順次順序付けられてよく、したがっていくつかの実施形態では、トリミングが、ターゲット識別子の関連付けられた時刻の前のそれぞれの関連付けられた時刻を有するログレコードを削除することを含んでよいことに留意されたい。
一実施形態では、演算の左の引数はベースラインLSN B1が付いたログセクションであってよく、右の引数は削除されるLSNの範囲であってよい。したがって、結果は、ターゲットLSNに対応する時点で開始するLSNを有する1つまたは複数のログレコードであってよい。一例として、「−」がトリミングを示す以下の例のトリミング演算、L(a;c]−(a,b]=、L(b;c]を考える。このようにして、部分(a,b]は(a,c]からトリミングされ、(b;c]の新しい範囲を生じさせる。上述されたように、単純な()括弧は範囲の開いた境界を示し、角[]括弧は範囲の閉じられた境界を示してよい。別のトリミング例として、トリミング演算L(a;b,d]−(a,c]を考える。結果はL(c;d]である。さらに別のトリミングの例として、L(a;b,c..e]−(a,d]=L(d;e]であるトリミング演算を考える。
トリミング演算の結果として、新しいベースラインLSN以下のLSNを有する1つまたは複数のログレコードは削除されてよい(またはガベージコレクトされてよい)。いくつかの例では、オリジナルのログセクションがトリミングするための係るログレコードを含まないことがあることが考えられる。それらの例では、トリミング演算はログセクションのサイズの縮小を生じさせないことがある。
一実施形態では、ログレコードを変形させることは、複数のログレコードを切り取るための切取り演算を実行することを含んでよい。切取り演算を実行することは、ターゲット識別子(例えば、ターゲットLSN)の値より大きい、または以上のそれぞれの識別子(例えば、LSN値)を有する1つまたは複数のログレコードを削除すること(及び/またはガベージコレクション可能として示すこと)を含んでよい。切取り演算は、ログセクションの末尾の部分を削除するために使用されてよい。トリミング演算と同様に、それぞれの識別子は時刻に従って順次順序付けられているため、いくつかの実施形態では、切り取ることはターゲット識別子の関連付けられた時刻の後のそれぞれの関連付けられた時刻を有するログレコードを削除することを含んでよい。
一実施形態では、切取り演算の左の引数はターゲットLSN(複数の場合がある)T1が付いたログセクションであってよく、右の引数は新しいターゲットLSN(複数の場合がある)T2であってよく、T2はT1の適切なサブセットである。切取り演算は、削除されたLSNが保持されているLSNよりも大きくなるようにLSNを削除してよい。例えば、L2がT2にある{T1−T2}のLSN L3の場合、以下の条件が当てはまってよい:L3>L2
一例として、「@」がトリミングを示す以下の例の切取り演算、L(a;b,c]@[b]=L(a;b]を考える。このようにして、それぞれの識別子がターゲット識別子bより大きいログレコードの部分がログセクションL(a;b,c]から削除される。別の例はL(a;b..d]@[b..c]=L(a;b..c]を含む。トリミング演算、切取り演算での場合と同様に、オリジナルのログセクションは切り取るための係るログレコードを含まないことがある。それらの例では、切取り演算はログセクションのサイズの縮小を生じさせないことがある。
一実施形態では、ログレコードを変形させることは、複数のログレコードを削減することを含んでよい。削減演算は、最高のターゲットLSNを変更することなくログセクションのターゲットLSNのセットを削減してよい。したがって、削減演算は切取り演算に対する補足演算であってよい。削減することはログセクションの先頭部または最後部を切り取らないことがあるが、代わりにセクションの中央部分を削除してよい。削減演算の例は、スナップショットの連続部分を削除することであるだろう。例えば、連続スナップショットが最後の2日間について要求され、不連続スナップショットが過去30日間について要求され、いったん連続スナップショットの一部分が2日分より大きい場合、一部は削除され、それによって1つまたは複数の不連続スナップショットが生じてよい。
削減演算は「@@」で示されてよい。削減演算の左の引数は、ターゲットLSN T1が付いたログセクションであってよく、右の引数は次のターゲットLSN T2であり、T2はT1の適切なサブセットである。T1の最高のLSNはT2の最高のLSNに等しくてよい。一例として、L(a;b..c]@@[c]は、L(a;c]を生じさせてよい。別の例として、L(a;a..b,c..e]@@[b,d..e]は、L(a;b,d..e]を生じさせてよい。ログレコードが削減演算の一部として削除されることを必要とされないことがあることに留意されたい。いくつかの例では、いくつかのログレコードは、新しいターゲットLSNでユーザーページバージョンを生成するために必要とされないことがある。それらのログレコードは安全に削除されてよいが、削除されることを必要とされていない。それらのログレコードはインプレースに残すことができる、及び/またはゆったりとガベージコレクトすることができる。どのログレコードが削除可能であるのかを(例えば、削除またはガベージコレクションを介して)識別することは、複数のログレコードの中での決定された依存状態に基づいて決定されてよい。例えば、特定のDULRは1つまたは複数の以前のDULR及び/または1つの以前のAULRに依存してよい。したがって、一実施形態では、それ以外の場合削除可能であるだろうが、それに依存する他のログレコードを有するログレコードが維持されてよく、削除されない、またはガベージコレクトされないことがあるのに対し、削除可能であり、それに依存する他のログレコードを有していないログレコードは、削除されてよい、及び/またはガベージコレクション可能であってよい。
いくつかの実施形態では、柔軟に(例えば、トリミング演算を使用して)ベースラインLSNを増すことが可能であるが、ターゲットLSNの同様の減少は利用できない。例えば、L(a;c]はL(b;c]に変形してよいが、いくつかの実施形態では、L(a;c]は、bとcとの間のAULR(複数の場合がある)によって代わられたaとbとの間のいくつかの紛失したログレコード(複数の場合がある)であることがあるため、L(a;b]に変形されないことがあることに留意されたい。このようにして、L(a;c]はLSN bでの全体的なボリュームを生成するほど十分な情報を欠くことがある。ログセクションの新しいターゲットLSNセットは、以前のターゲットLSNセットのサブセットでなければならないことがある。例えば、L(a;b..c]及びL(a;a..c]はLSN bでの全体的なボリュームを生成するために必要な情報を有さないことがあるが、切取り演算及び削減演算を使用してL(a;b]に変形できる。
一実施形態では、ログレコードを変形させることは、該複数のログレコードを融合演算で別の複数のログレコードと結合することを含んでよい。例えば、融合演算は、両方のログセクションのターゲットLSNとも保持されるように、2つの隣接するログセクションを単一のログセクションに結合することを含んでよい。融合演算は「+」で表されてよい。左の引数は、低い方のベースラインLSN B1が付いたログセクションを含んでよく、最高のターゲットLSNはT1である。右の引数は、高い方のベースラインLSN B2が付いたログセクションを含んでよい。いくつかの実施形態では、B2はT1に等しい。1つの例の融合演算はL(a;b]+L(b;c]=L(a;b,c]である。別の例の融合演算はL(a;b,c]+L(c;d,e]=L(a;b,c,d,e]である。多様な実施形態では、ログレコードは融合演算の一部として削除されないことがある。
一実施形態では、ガベージコレクションがスナップショットを保持しないで実行される場合、ログはL(0;t]で表すことができる。ガベージコレクションが実行されない場合、ログはL(0;0..t]で表すことができる。
LSN「a」でのボリュームを表すための表記はV[a]であってよい。V[0]はすべてのゼロを含むと仮定できる。一実施形態では、ボリュームのログレコードを変形させることは「*」で表される構成演算を含んでよい。新しいボリュームは低い方のLSNでのボリューム及びLSNギャップに対応するログセクションを考慮すると高い方のLSNとして作成されてよい。左の引数はLSN Bでのボリュームであってよく、右の引数はベースラインLSN B及び単一のターゲットLSN Tのあるログセクションであってよい。複数のターゲットLSNが付いたログセクションは、所望されるボリュームを構成する前に関心のある単一のLSNまで切り取られてよい、及び/または削減されてよい。例は、V[a]*L(a;b]=V[b]を含む。
一実施形態では、ログレコードを変形させることは、複数のログレコードに対して演算の組合せを実行することを含んでよい。以下の演算の組合せ、{L(b;c],L(b;d]}→L(b;c,d]から引き出された変形を考える。係る変形は、以下の通りトリミング演算及び融合演算から引き出されてよい。L(b;d]−(b,c]=L(c;d]及びL(b;c]+L(c;d]=L(B;c,d]。別の例の引き出された変形は上述の例を拡張する。つまり、上述の例からのトリミング及び融合を含み、さらに追加のトリミングL(a;c]−(a,b]=L(b;c]を含む{L(a;c],L(b;d]}→L(b;c,d]である。「→」の使用は演算の詳細を示すことなく全体的な変形を表すことに留意されたい。例えば、{L1,L2}→{L3}は、変形を実行するための基礎的な演算を示さないL1及びL2のL3への変形である。
多様な実施形態では、複数の演算の組合せを複数のログレコードに対して実行することは、他の動作の中で、スナップショット動作(例えば、図8でのようにスナップショットを撮ること、復元すること、切り詰めること、及び/または削除することの一部として)、またはログレコード調整を容易にしてよい。不連続スナップショット及び連続スナップショットを撮ること、復元すること、及び削除することの例の組合せが続く。
不連続スナップショットを撮るために演算を組み合わせることの例の場合、分散型ストレージシステムのためのライブログの初期状態はL(0;t]であってよい。スナップショットは、最後部がLSNa、L(0;a,t]に到達すると撮られてよい。L(0;a,t]は次いで[a],L(0;a,t]@[a]=L(0;a]で切り取られてよい。L(0;a]は、分散型ストレージシステムとは別個の記憶場所であってよいスナップショット記憶場所にコピーされてよい。別のスナップショットは、最後部がLSN b,L(0;a,b,t]に到達すると撮られてよい。L(0;a,b,t]は次いで、L(0;a,b,t]−(0;a]に従ってトリミングされ、L(a;b,t)を生じさせてよい。L(a;b,t)は次いで[b](L(a;b,)@[b])で切り取られ、L(a;b]を生じさせてよい。L(a;b]も次いでスナップショット記憶場所にコピーされてよい。
不連続スナップショットを復元するために演算を組み合わせる例の場合、スナップショット記憶場所で利用できるL(0;a],L(a;b]を考える。L(0;a]及びL(a;b]は復元先にコピーされてよく、L(0;a]+L(a;b]=L(0;a,b]に従って融合されてよい。融合されたセクションは、次いでL(0;a,b]@@[b]=L(0;b]に従って削減されてよい。L(0;b]は、復元する所望されるスナップショットであってよく、新しいボリュームを開始するために使用されてよい。
旧い不連続スナップショットを削除するために演算を組み合わせる例の場合、次の初期のライブログ状態、L(0;a,b,t]を考える。L(a;a,b,t]@@[b,t]=L(0;b,t]は、aでスナップショットを削除するために使用されてよく、L(0;a,b,t]@@[t]=L(0;t]は両方のスナップショットa及びbを削除するために使用されてよい。
連続スナップショットを撮るために演算を組み合わせることの例の場合、分散型ストレージシステムのライブログの初期状態は、不連続スナップショットを撮る例での場合のようにL(0;t]であってよい。連続スナップショットは、L(0;a..t]で示されるように、最後部がLSN aに到達すると開始されてよい。尾部がLSN b(b<t)を交差した後、L(0;a..t]は[a..b]によって切り取られ(@@)、L(0;a..b]を示す。L(0;a..b]は、次いでスナップショット記憶場所にコピーされてよい。尾部がLSN c(c<t)を交差した後、L(0;a..t]@@[a..c]=L(0;a..c)となる。L(0;a..c)@@[b..c]=L(0;b..c]。L(0;b..c]は(0,a]でトリミングされ、次いでスナップショット記憶場所にコピーされてよいL(b;b..c]を示す。連続スナップショットは、最後部がLSN d:L(0,a..d,t]に到達すると停止されてよい。
連続スナップショットを復元するために演算を組み合わせることの例の場合、スナップショット記憶場所で利用できるL(0;a..b]及びL(b;b..c]を考える。L(0;a..b]及びL(b;b..c]は、2つのログセクションがL(0;a..b]+L(b;b..c]=L(0;a..c]として互いに融合されてよい復元先にコピーされてよい。復元が、b<x<cであるLSN xに対して要求された場合、以下が実行されてよい。L(0;a..c]@[a..x]=L(0;a..x]。結果は、次いで[x]で削減され(@@)、L(0;x]を生じさせてよい。所望されるスナップショットはL(0;x]であってよく、新しいボリュームを開始するために使用されてよい。
ライブログの初期状態がL(0,a..d,t]である連続スナップショットを削減するために演算を組み合わせることの以下の例を考える。L(0,a..d,t]は[t]で削減されて、連続スナップショット全体を削除し、L(0;t](保持されているスナップショットがないログセクション)を生じさせてよい。別の例として、L(0,a..d,t]は[a..c,t]で削減されて、cからdの連続スナップショットの一部を削除し、L(0,a..c,t]を生じさせてよい。別の例として、L(0,a..d,t]は[c..d,t]によって削減されて、aからcの連続スナップショットの一部を削除し、L(0,c..d,t]を生じさせてよい。
ライブログの初期状態がL(0,a..t]であり、c<tである現在の連続スナップショットを切り詰める以下の例を考える。現在の連続スナップショットの最近の部分だけを含んでよいL(0,a..t]@@[c..t]=L(0;c..t]。
多様な実施形態では、データベースサービスは、スナップショットを撮るタイムフレーム、範囲、またはウィンドウの要求をユーザーから受信してよい、及び/または要求されたスナップショットのタイプ(例えば、連続または不連続)の表示を受信してよい。例えば、ユーザーは、前の2日間の連続スナップショット、及び前の30日間の不連続スナップショットを希望すると要求してよい。データベースサービスは、次いで、ユーザーの要求を満たすためにどのログレコード演算(複数の場合がある)(例えば、トリミング、削減、切取り等)をログセクションで実行するのかを決定してよい。例を続行すると、いったん連続スナップショットの一部が2日分よりも古いと、システムは、もはや必要とされていないログレコードのためのスペースを(例えば、ガベージコレクションを介して)再利用するためには削減演算が適切であると決定してよい。
本明細書に説明される方法は、多様な実施形態では、ハードウェア及びソフトウェアの任意の組合せによって実装されてよい。例えば、一実施形態では、方法は、プロセッサに結合されたコンピュータ可読記憶媒体に記憶されるプログラム命令を実行する1台または複数のプロセッサを含むコンピュータシステム(例えば、図10のコンピュータシステム)によって実装されてよい。プログラム命令は、本明細書に説明される機能性(例えば、本明細書に説明されるデータベースサービス/システム及び/またはストレージサービス/システムを実装する多様なサーバ及び他の構成要素の機能性)を実装するように構成されてよい。
図10は、多様な実施形態に従って、本明細書に説明されるデータベースシステムの少なくとも一部を実装するように構成されるコンピュータシステムを示すブロック図である。例えば、コンピュータシステム1000は、異なる実施形態で、データベース階層のデータベースエンジンヘッドノード、またはデータベース階層のクライアントの代わりにデータベーステーブル及び関連付けられたメタデータを記憶する別個の分散型データベース最適化ストレージシステムの複数のストレージノードの内の1つを実装するように構成されてよい。コンピュータシステム1000は、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップコンピュータまたはノートパソコン、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、消費者装置、アプリケーションサーバ、ストレージデバイス、電話、携帯電話、または一般的に任意のタイプのコンピューティング装置を含むが、これに限定されることがない多様なタイプの装置のいずれかであってよい。
コンピュータシステム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を実装してよいが、必ずしも同じISAを実装しないこともある。コンピュータシステム1000は、通信ネットワーク(例えば、インターネット、LAN等)上で他のシステム及び/または構成要素と通信するための1台または複数のネットワーク通信装置(例えば、ネットワークインタフェース1040)も含む。例えば、システム1000で実行中のクライアントアプリケーションは、単一のサーバ上、または本明細書で説明されるデータベースシステムの構成要素の内の1つまたは複数の実装するサーバのクラスタ上で実行中のサーバアプリケーションと通信するためにネットワークインタフェース1040を使用してよい。別の例では、コンピュータシステム1000上で実行中のサーバアプリケーションのインスタンスは、他のコンピュータシステム(例えば、コンピュータシステム1090)の上で実装されてよいサーバアプリケーション(または別のサーバアプリケーション)の他のインスタンスと通信するために、ネットワークインタフェース1040を使用してよい。
示されている実施形態では、コンピュータシステム1000は、1台または複数の永続ストレージデバイス1060及び/または1台または複数のI/Oデバイス1080も含む。多様な実施形態では、永続ストレージデバイス1060は、ディスクドライブ、テープドライブ、ソリッドステートメモリ、他の大容量記憶装置、または任意の他の永続ストレージデバイスに相当してよい。コンピュータシステム1000(または、コンピュータシステム1000上で動作する分散アプリケーションもしくはオペレーティングシステム)は、所望されるように、命令及び/またはデータを永続ストレージデバイス1060に記憶してよく、必要に応じて記憶されている命令及び/またはデータを取り出してよい。例えば、いくつかの実施形態では、コンピュータシステム1000は、ストレージシステムサーバノードをホストしてよく、永続記憶装置1060はそのサーバノードにアタッチされるSSDを含んでよい。
コンピュータシステム1000は、プロセッサ(複数の場合がある)1010によってアクセス可能な命令及びデータを記憶するように構成される1つまたは複数のシステムメモリ1020を含む。多様な実施形態では、システムメモリ1020は、任意の適切なメモリ技術(例えば、キャッシュ、スタティックランダムアクセスメモリ(SRAM)、DRAM、RDRAM、EDO RAM、DDR 10RAM、同期ダイナミックRAM(SDRAM)、Rambus RAM、EEPROM、不揮発性/フラッシュタイプメモリ、または任意の他のタイプのメモリの内の1つまたは複数)を使用して実装されてよい。システムメモリ1020は、本明細書に説明される方法及び技法を実装するためにプロセッサ(複数の場合がある)1010によって実行可能であるプログラム命令1025を含んでよい。多様な実施形態では、プログラム命令1025は、プラットホームネイティブバイナリ、Java(商標)バイトコード等の任意のインタープリター型言語で、またはC/C++、Java(商標)等の任意の他の言語で、またはその任意の組合せで符号化されてよい。例えば、示されている実施形態では、プログラム命令1025は、データベース階層のデータベースエンジンヘッドノードの、または異なる実施形態で、データベース階層のクライアントの代わりにデータベーステーブル及び関連付けられたメタデータを記憶する別個の分散型データベース最適化ストレージシステムの複数のストレージノードの内の1つの機能性を実装するために実行可能なプログラム命令を含む。いくつかの実施形態では、プログラム命令1025は、複数の別個のクライアント、サーバノード、及び/または他の構成要素を実装してよい。
いくつかの実施形態では、プログラム命令1025が、UNIX、LINUX、Solaris(商標)、MacOS(商標)、Windows(商標)等の多様なオペレーティングシステムの内のいずれかであってよいオペレーティングシステム(不図示)を実装するために実行可能な命令を含んでよい。プログラム命令1025のいずれかまたはすべては、多様な実施形態に従ってプロセスを実行するためにコンピュータシステム(または他の電子機器)をプログラミングするために使用されてよい、その上に記憶されている命令を有する非一過性のコンピュータ可読記憶媒体を含んでよいコンピュータプログラム製品、つまりソフトウェアとして提供されてよい。非一過性のコンピュータ可読記憶媒体は、マシン(例えば、コンピュータ)によって読取り可能な形(例えば、ソフトウェア、処理アプリケーション)をとる情報を記憶するための任意の機構を含んでよい。一般的に言えば、非一過性のコンピュータアクセス可能記憶媒体は、例えばI/Oインタフェース1030を介してコンピュータシステム1000に結合される、ディスクまたはDVD/CD−ROM等の磁気媒体または光学媒体等の、コンピュータ可読記憶媒体または記憶媒体を含んでよい。また、非一過性のコンピュータ可読記憶媒体は、コンピュータシステム1000のいくつかの実施形態では、システムメモリ1020または別のタイプのメモリとして含まれてよい、RAM(例えば、SDRAM、DDR SDRAM、SDRAM、RDRAM、SRAM等)、ROM等の任意の揮発性媒体または不揮発性媒体を含んでもよい。他の実施形態では、プログラム命令は、ネットワークインタフェース1040を介して実装されてよい等、ネットワークリンク及び/または無線リンク等の通信媒体を介して伝達される、光信号、音響信号、または他の形の伝搬信号(例えば、搬送波、赤外線信号、デジタル信号等)を使用して通信されてよい。
いくつかの実施形態では、システムメモリ1020は、本明細書に説明されるように構成されてよいデータストア1045を含んでよい。例えば、本明細書に説明されるデータベース階層の機能を実行する際に使用されるトランザクションログ、アンドゥログ、キャッシュに入れられたページデータ、または他の情報等の、データベース階層によって(例えば、データベースエンジンヘッドノード上に)記憶されるとして本明細書に説明される情報は、データストア1045にもしくは1つまたは複数のノード上のシステムメモリ1020の別の部分に、永続記憶装置1060に、及び/または1つまたは複数のリモートストレージデバイス1070に異なるときに及び多様な実施形態で記憶されてよい。同様に、記憶階層によって記憶されているとして本明細書に説明される情報(例えば、本明細書に説明される分散型ストレージシステムの機能を実行する上で使用されるリドゥログレコード、合体データページ、及び/または他の情報)は、データストア1045にもしくは1つまたは複数のノード上のシステムメモリ1020の別の部分に、永続記憶装置1060に、及び/または1つまたは複数のリモートストレージデバイス1070に異なるときに及び多様な実施形態で記憶されてよい。一般に、システムメモリ1020(例えば、システムメモリ1020の中のデータストア1045)、永続記憶装置1060、及び/またはリモートストレージ1070は、データブロック、データブロックのレプリカ、データブロックと関連付けられたメタデータ、及び/またはその状態、データベース構成情報、及び/または本明細書に説明される方法及び技法を実装する上で使用できる任意の他の情報を記憶してよい。
一実施形態では、I/Oインタフェース1030は、プロセッサ1010と、システムメモリ1020と、ネットワークインタフェース1040または他の周辺インタフェースを通してを含んだシステムのあらゆる周辺装置との間のI/Oトラフィックを調整するように構成されてよい。いくつかの実施形態では、I/Oインタフェース1030は、1つの構成要素(例えば、システムメモリ1020)から別の構成要素(例えば、プロセッサ1010)による使用に適したフォーマットにデータ信号を変換するために任意の必要なプロトコル、タイミング、または他のデータ変形を実行してよい。いくつかの実施形態では、I/Oインタフェース1030は、例えばペリフェラルコンポーネントインターコネクト(PCI)バス規格、またはユニバーサルシリアルバス(USB)規格の変形等の多様なタイプの周辺バスを通してアタッチされるデバイスに対するサポートを含んでよい。いくつかの実施形態では、I/Oインタフェース1030の機能は、例えばノースブリッジ及びサウスブリッジ等、2つ以上の別々の構成要素に分割されてよい。また、いくつかの実施形態では、システムメモリ1020へのインタフェース等、I/Oインタフェース1030の機能性のいくつかまたはすべては、プロセッサ1010の中に直接的に組み込まれてよい。
ネットワークインタフェース1040は、例えば、コンピュータシステム1000と、(本明細書に説明される1つまたは複数のストレージシステムサーバノード、データベースエンジンヘッドノード、及び/またはデータベースシステムのクライアントを実装してよい)他のコンピュータシステム1090等の、ネットワークにアタッチされる他のデバイスとの間でデータを交換できるように構成されてよい。さらに、ネットワークインタフェース1040は、コンピュータシステム1000と多様なI/O装置1050及び/またはリモートストレージ1070との間の通信を可能にするように構成されてよい。入出力装置1050は、いくつかの実施形態では、1つまたは複数のディスプレイ端末、キーボード、キーパッド、タッチパッド、スキャン装置、音声認識装置もしくは光学認識装置、または1つまたは複数のコンピュータシステム1000によってデータを入力するまたは取り出すために適した任意の他の装置を含んでよい。複数の入出力装置1050は、コンピュータシステム1000に存在してよい、またはコンピュータシステム1000を含む分散型システムの多様なノードで分散されてよい。いくつかの実施形態では、類似する入出力装置はコンピュータシステム1000とは別個であってよく、ネットワークインタフェース1040上で等、有線接続または無線接続を通してコンピュータシステム1000を含む分散型システムの1つまたは複数のノードと対話してよい。ネットワークインタフェース1040は、一般に1つまたは複数の無線ネットワークプロトコル(例えば、Wi−Fi/IEEE 802.11、または別の無線ネットワーキング規格)をサポートしてよい。ただし、多様な実施形態では、ネットワークインタフェース1040は、例えば他のタイプのイーサネットネットワーク等、任意の適切な有線汎用データネットワークまたは無線汎用データネットワークを介する通信をサポートしてよい。さらに、ネットワークインタフェース1040は、Fibre Channel SAN等のストレージエリアネットワークを介して、または任意の他の適切なタイプのネットワーク及び/またはプロトコルを介して、アナログ音声ネットワークまたはデジタルファイバ通信ネットワーク等の電気通信ネットワーク/電話網を介する通信をサポートしてよい。多様な実施形態では、コンピュータシステム1000は、図10に示される構成要素より多い、少ない、または異なる構成要素(例えば、ディスプレイ、ビデオカード、オーディオカード、周辺装置、ATMインタフェース、イーサネットインタフェース、フレームリレーインタフェース等の他のネットワークインタフェース等)を含んでよい。
本明細書に説明される分散型システムの実施形態のいずれも、またはその構成要素のいずれも1つまたは複数のウェブサービスとして実装されてよいことに留意されたい。例えば、データベースシステムのデータベース階層の中のデータベースエンジンヘッドノードは、データベースサービス、及び/または本明細書に説明される分散型ストレージシステムを利用する他のタイプのデータストレージサービスをウェブサービスとしてのクライアントに提示してよい。いくつかの実施形態では、ウェブサービスは、ネットワーク上で相互運用可能なマシン対マシンの対話をサポートするように設計されたソフトウェアシステム及び/またはハードウェアシステムによって実装されてよい。ウェブサービスは、ウェブサービス記述言語(WSDL)等のマシン処理可能なフォーマットで記述されるインタフェースを有してよい。他のシステムは、ウェブサービスのインタフェースの記述によって規定される方法でウェブサービスと対話してよい。例えば、ウェブサービスは、他のシステムが呼び出してよい多様な動作を定義してよく、多様な動作を要求するときに他のシステムが準拠することを期待されてよい特定のアプリケーションプログラミングインタフェース(API)を定義してよい。
多様な実施形態では、ウェブサービスは、ウェブサービス要求と関連付けられるパラメータ及び/またはデータを含むメッセージを使用することによって要求されてよい、または呼び出されてよい。係るメッセージは、拡張マークアップ言語(XML)等の特定のマークアップ言語に従ってフォーマットされてよい、及び/またはシンプルオブジェクトアクセスプロトコル(SOAP)等のプロトコルを使用してカプセル化されてよい。ウェブサービス要求を実行するために、ウェブサービスクライアントは、要求を含むメッセージをアセンブルし、ハイパテキスト転送プロトコル(HTTP)等のインターネットベースのアプリケーション層転送プロトコルを使用して、メッセージをウェブサービスに対応するアドレス可能なエンドポイント(例えば、ユニフォームリソースロケータ(URL))に伝達してよい。
いくつかの実施形態では、ウェブサービスは、メッセージベースの技法よりむしろ、表象状態転送(「RESTful」)技法を使用して実装されてよい。例えば、RESTful技法に従って実装されるウェブサービスは、SOAPメッセージの中でカプセル化されるよりむしろ、PUT、GET、またはDELETE等のHTTP方法の中に含まれるパラメータを通して呼び出されてよい。
以下の実施形態は以下の節を鑑みてさらによく理解されてよい。
1.それぞれが少なくとも1台のプロセッサ及びメモリを含み、
複数のログレコードのそれぞれが分散型ログ構造化ストレージシステムによって記憶されるデータに対するそれぞれの変更と関連付けられ、複数のログレコードのそれぞれが複数のログシーケンス番号のそれぞれのログシーケンス番号と関連付けられる、複数のログレコードを受信する、
スナップショット識別子を示し、複数のログレコードの内の特定のログレコードと関連付けられる複数のログシーケンス番号の1つをさらに示すメタデータを生成することを含む、スナップショットに対応する状態の時点のデータを読み取るために使用可能なスナップショットを生成する
ように構成されるデータベースサービスの分散型ログ構造化ストレージシステムを集合的に実装するように構成される1つまたは複数のコンピューティングノード、
を含むシステムであって、
スナップショットを上記生成することが、スナップショットを上記生成することの一部としてデータのページを読み取る、コピーする、または書き込むことなしに実行される、
システム。
2.メタデータが、ログレコードの1つまたは複数がガベージコレクトされるのを防ぐために使用できる、節1に記載のシステム。
3.メタデータが、複数のログレコードの別の特定のログレコードと関連付けられる複数のログシーケンス番号の別のログシーケンス番号をさらに示す、節1に記載のシステム。
4.メタデータが、スナップショットが連続スナップショットであることを示し、連続スナップショットが、第1の時点と第2の時点との間の複数の時点までデータを復元するために使用できる、節1に記載のシステム。
5.データベースサービスの1台または複数のコンピュータによって、
複数のログレコードを維持することであって、複数のログレコードのそれぞれがデータベースサービスによって記憶されるデータに対するそれぞれの変更と関連付けられる、複数のログレコードを維持することと、
スナップショットに対応する状態の時点のデータを読み取るために使用できるスナップショットを生成することであって、スナップショットを上記生成することが、ログレコードの内の特定のログレコードの特定のログ識別子を示すメタデータを生成することを含む、スナップショットを上記生成することと、
を実行すること、
を含む方法であって、
スナップショットを上記生成することが、スナップショットを上記生成することの一部としてデータのページを読み取る、コピーする、または書き込むことなしに実行される、
方法。
6.メタデータが、特定のログレコードを含んだログレコードの内の1つまたは複数が削除されることを防ぐために使用できる、節5に記載の方法。
7.メタデータが、スナップショットのタイプが連続であるのか、それとも不連続であるのかを示す、節5に記載の方法。
8.スナップショットに対応する状態の時点のデータを読み取ることであって、上記読み取ることがデータの以前のバージョンのコピーを作成することなく、特定のログレコードを含んだログレコードの1つまたは複数をデータの以前のバージョンに適用することを含む、スナップショットに対応する状態の時点のデータを読み取ること
をさらに含む、節5に記載の方法。
9.上記適用することが、データベースサービスのためのバックグラウンドプロセスとして実行される、節8に記載の方法。
10.上記適用することが、データベースサービスの多様なノード全体で並列で実行される、節8に記載の方法。
11.ログレコードの1つまたは複数がガベージコレクションから保護されることを示さないメタデータに少なくとも部分的に基づいてログレコードの1つまたは複数を削除すること、
をさらに含む、節5に記載の方法。
12.ログレコードの1つまたは複数が、スナップショットのタイプに少なくとも部分的に基づいて削除されるべきであると決定することと、
ログレコードの1つまたは複数を削除することと、
をさらに含む、節5に記載の方法。
13.スナップショットに対応する状態までデータを復元することと、
スナップショットに関連付けられている1つの時刻よりも遅い複数の時刻と関連付けられる1つまたは複数のログレコードがガベージコレクション可能であることを示すことと、
をさらに含む、節5に記載の方法。
14.少なくとも部分的にスナップショットに基づいて複数のログレコードを合体すること、
をさらに含む、節5に記載の方法。
15.プログラム命令を記憶する非一過性のコンピュータ可読記憶媒体であって、プログラム命令が、
複数のログレコードのそれぞれがデータページに対するそれぞれの変更に関連付けられる、複数のログレコードを分散型ストレージシステムの複数のノードに記憶する、及び
スナップショットに対応する状態の時点のデータページを読み取るために使用できるスナップショットを生成することであって、スナップショットを上記生成することが複数のログレコードの内の特定のログレコードと関連付けられる時刻を示すメタデータを生成することを含む、スナップショットを生成する、
ように構成される分散型ストレージシステムを実装するためにコンピュータにより実行可能であり、
スナップショットを上記生成することが、スナップショットを上記生成することの一部としてデータのページを読み取る、コピーする、または書き込むことなしに実行される、
非一過性のコンピュータ可読記憶媒体。
16.メタデータがログレコードの1つまたは複数がガベージコレクトされるのを防ぐために使用できる、節15に記載の非一過性のコンピュータ可読記憶媒体。
17.分散型ストレージシステムが、
分散型ストレージシステムの複数のノードに別の複数のログレコードを記憶することであって、別の複数のログレコードのそれぞれが別のデータページのそれぞれの変更と関連付けられる、分散型ストレージシステムの複数のノードに別の複数のログレコードを記憶する
ようにさらに構成され、
スナップショットが、スナップショットに対応する状態の時点での他のデータページを読み取るためにさらに使用可能であり、メタデータが他の複数のログレコード内の特定のログレコードをさらに示す、
節15に記載の非一過性のコンピュータ可読記憶媒体。
18.分散型ストレージシステムが、
スナップショットに対応する状態の時点のデータページを読み取る、及び
スナップショットに関連付けられている1つの時刻よりも遅い複数の時刻と関連付けられる1つまたは複数のログレコードがガベージコレクション可能であることを示す
ようにさらに構成される、節15に記載の非一過性のコンピュータ可読記憶媒体。
19.分散型ストレージシステムが、
スナップショットに対応する状態の時点のデータページを読み取ることであって、前記読み取ることがデータページの以前のバージョンをコピーすることなく、特定のログレコードを含んだログレコードの1つまたは複数をデータページの以前のバージョンに適用することを含む、スナップショットに対応する状態の時点のデータページを読み取る
ようにさらに構成される、節15に記載の非一過性のコンピュータ可読記憶媒体。
20.上記適用することが、分散型ストレージシステムの複数のノード全体で分散される、節19に記載の非一過性のコンピュータ可読記憶媒体。
図に示され、本明細書に説明される多様な方法は、方法の例の実施形態を表す。方法は、ソフトウェアで、ハードウェアで、またはソフトウェア及びハードウェアの組合せで手動で実装されてよい。任意の方法の順序は変更されてよく、多様な要素が追加、再順序付け、結合、省略、修正等、されてよい。
上記実施形態はかなり詳細に説明されているが、いったん上記開示が完全に理解されると当業者に明らかになるように、多数の変形形態及び修正形態が加えられてよい。続く特許請求の範囲が、すべての係る修正形態及び変更を包含すると解釈され、したがって上記説明は制限的な意味よりむしろ例示的な意味で考えられることが意図される。