以下の説明は、本発明の一般的原理を説明する目的で行われるのであり、本明細書において請求される本発明の概念を限定するように意図されていない。さらに、本明細書に記載された特定の特徴を、さまざまな可能な組み合わせおよび並べ替えのそれぞれで、その他の説明された特徴と組み合わせて使用することができる。
本明細書では、特に定義されない限り、すべての用語には、本明細書から示される意味、および当業者によって理解される意味、または辞書、論文などにおいて定義された意味、あるいはその両方を含む、最も広い可能な解釈が与えられる。
本明細書および添付の特許請求の範囲において使用されているように、単数形「a」および「the」が、特に規定されない限り、複数の指示対象を含むということにも注意しなければならない。「備える(comprise)」または「備えている(comprising)」あるいはその両方は、本明細書で使用される場合、記載された機能、整数、ステップ、処理、要素、またはコンポーネント、あるいはこれらの組み合わせの存在を示すが、1つまたは複数のその他の機能、整数、ステップ、処理、要素、コンポーネント、またはこれらのグループ、あるいはこれらの組み合わせの存在または追加を除外していないことが、さらに理解されるであろう。
以下の説明では、ヘテロジニアスな操作タイプの一括した同時処理を使用したツリーベース・データ構造の効率的な操作のためのシステム、方法、およびコンピュータ・プログラム製品の複数の好ましい実施形態を開示する。
一般的な一実施形態では、ツリーベース・データ構造に対する操作の同時処理のためのコンピュータ実装方法が、ツリーベース・データ構造が記憶されるストレージ・デバイスを管理するストレージ・システムで入力を受信することであって、この入力がツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する、受信することと、ヘテロジニアスな操作のセットのうちの1つまたは複数が適用されるツリーベース・データ構造の1つまたは複数のノードを決定することと、ヘテロジニアスな操作のセットのうちの1つまたは複数を同時に一括して実行することとを含む。
別の一般的な実施形態では、ツリーベース・データ構造に対する操作の同時処理のためのコンピュータ・プログラム製品が、具現化されたプログラム命令を含んでいるコンピュータ可読記憶媒体を含む。コンピュータ可読記憶媒体は、本質的に一時的信号ではなく、プログラム命令は、ストレージ・システム・マネージャによって実行可能であり、ストレージ・システム・マネージャに方法を実行させる。この方法は、ストレージ・システム・マネージャによって、ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する入力を受信することと、ストレージ・システム・マネージャによって、ヘテロジニアスな操作のセットのうちの1つまたは複数が適用されるツリーベース・データ構造の1つまたは複数のノードを決定することと、ストレージ・システム・マネージャによって、ヘテロジニアスな操作のセットのうちの1つまたは複数を同時に一括して実行することとを含む。
さらに別の一般的な実施形態では、ツリーベース・データ構造に対する操作の同時処理のためのストレージ・システムが、ストレージ・システム・マネージャ、およびストレージ・システム・マネージャに統合されるか、またはストレージ・システム・マネージャによって実行可能であるか、あるいはその両方である論理を含む。この論理は、ストレージ・システムに、ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する入力を受信することと、ヘテロジニアスな操作のセットのうちの1つまたは複数が適用されるツリーベース・データ構造の1つまたは複数のノードを決定することと、ヘテロジニアスな操作のセットのうちの1つまたは複数を同時に一括して実行することとを実行させるように構成される。
定義
隣接ノード
本明細書において理解されているように、ツリーベース・データ構造内のノードは、ツリー内の同じ層のすぐ近くのノードに隣接しており、ツリーの同じ層のすべてのノードは、ツリーのルート・ノードから同じ距離を有しており、隣接ノードは、ツリーの次の上位層内の同じ親ノードの下にあってもなくてもよい。特定の層の隣接ノードは、兄弟ノードとも呼ばれる。
同時一括処理
本明細書において理解されているように、同時一括処理では、ツリーベース・データ構造に対する複数の操作の同時処理を行う。操作は、それらの操作の処理が同じ時間ウィンドウの間に発生したときに、同時に処理される。操作は、同じ時間ウィンドウの間に複数の操作が(個別にではなく)一緒に処理されるときに、一括して処理される。
さまざまな実施形態では、同時一括処理は、ツリーの同じ層に属しているツリーベース・データ構造の複数のノードの同時の独立した処理を含む。特に好ましい実施形態では、同時一括処理は、独立した操作スレッドを使用して、ツリーベース・データ構造の特定の層のすべてのノードを並列に処理することを含む。
ヘテロジニアスな操作
本明細書において理解されているように、ヘテロジニアスな操作は、ツリーベース・データ構造に記憶されたデータを変更もしくは処理するため、またはツリーベース・データ構造自体の構造化を変更もしくは処理するため、あるいはその両方のために実行できる任意の2つ以上の異なるタイプの操作を包含している。操作の例は、当業者が本説明を読むときに理解するように、ツリーベース・データ構造のノードに記憶されたデータ・エントリまたはルーティング・エントリあるいはその両方の更新、挿入、または削除を含む。
したがって、ヘテロジニアスな操作のセットは、本明細書に記載されたさまざまな操作の例のうちの任意の2つ以上を含む。好ましい実施形態では、ヘテロジニアスな操作は、ツリー・ノードではなくデータ・エントリに関連する。特に好ましい実施形態では、ヘテロジニアスな操作は、内部ノードではなく葉ノードに関連する。
ノードの削除
本明細書において理解されているように、ノードの削除では、ノードをツリーベース・データ構造から除去することを含む。
さまざまな実施形態では、ノードの削除は、ノードのマージ(node merger)の後に、例えばデータ構造内の別のノードへのノードの内容のマージの結果として空にされたノードを削除して、実行されてよい。ノードの削除は、例えば、下にあるノードが削除された1つまたは複数の層に属しているノード内のルーティング・エントリの変更または削除あるいはその両方を含むことができる。
ノードの挿入
本明細書において理解されているように、ノードの挿入では、以前は存在しなかったノードをツリーベース・データ構造内に作成することを含む。
さまざまな実施形態では、ノードの挿入は、特定の層内の1つまたは複数のノードが満杯になったとの決定に応答して、例えばデータ・エントリを満杯になったノードから新たに挿入されたノードに移動させることによって、実行されてよい。
ノードのマージ
本明細書において理解されているように、ノードのマージでは、2つ以上の既存のノードを結合して1つのノードを形成することを含む。
さまざまな実施形態では、マージは、(例えば、データ構造の特定の層に対するヘテロジニアスな操作の実行の結果として)満杯になっていないノードが存在しているか、または存在することになるとの決定に応答して実行されてよい。ノードのマージは、好ましくは、満杯になっていないノードを兄弟ノードと結合することによって達成される。
ノードの権限
ユーザは、ツリーベース・データ構造の特定のノードにアクセスするための権限を、同じデータ構造を操作している他のすべてのユーザに関して微細な粒度で取得することができる。
この権限は共有されてよく、その場合、ノードは読み取り専用であってよい。読み取り専用の共有された権限は、複数のユーザによって同時に取得されることが可能である。
あるいは、この権限は排他的であってよく、その場合、ノードは変更されてもよい。排他的権限は、ノードにアクセスしている他のユーザと相互に排他的である。
ノードの再バランス調整
本明細書において理解されているように、ノードの再バランス調整は、必要とされるストレージ使用率の範囲内にノードを維持するために、満杯になったノードからそのノードの兄弟ノードへのデータ・エントリの移動、または満杯になっていないノードへのそのノードの兄弟ノードからのデータ・エントリの移動を含む。
さまざまな実施形態では、ノードの再バランス調整は、ツリーベース・データ構造のノード全体で適切なストレージ使用率レベルを維持することに特に役立つ。
したがって、当業者は、これらの説明に基づいて、ノードの再バランス調整がツリーベース・データ構造内のルーティング情報の変更に使用されるプロセスを含むか、またはノードの再バランス調整の後にそのようなプロセスが続いてよく、それによって、好ましい実施形態では、ノードの構造化またはデータ・エントリの位置あるいはその両方に対する任意の変更に対応するということを理解するであろう。
ノードの分割
本明細書において理解されているように、ノードの分割操作では、ノードを2つ以上のノードに分割することを含み、それらのノードのうちの少なくとも1つは、分割操作を実行する前のデータ構造に含まれていなかったものである。
さまざまな実施形態では、ノードの分割は、当業者が本説明を読んだときに理解するように、例えば、ツリーベース・データ構造の特定の層に対する1つまたは複数のヘテロジニアスな操作の実行の結果として、ツリーベース・データ構造の既存のノードが満杯になっているか、または満杯になるとの決定に応答して発生させることができる。
ノードの更新
本明細書において理解されているように、ノードの更新は、データ・エントリのペイロードを変更すること(例えば、B+ツリーの葉ノードの場合)、およびノードに記憶された1つまたは複数のルーティング・エントリを変更すること(例えば、B+ツリーの内部ノードの場合)のうちの1つまたは複数を含む。
さまざまな実施形態では、ノードの更新は、データ構造の構造化における変更を引き起こす別の操作に応答して実行されてよく、この変更に対応するために、ルーティング・エントリの更新を必要とする場合がある。
追加または代替あるいはその両方として、ノードは、ノードに記憶されたデータ・エントリの変更を達成するために更新されてよい。
ストレージ識別子
本明細書において理解されているように、ストレージ識別子は、ストレージ・デバイス内のノードの位置を識別するデータ要素である。
さまざまな実施形態では、ツリーベース・データ構造内のノードは、好ましくは、一意のストレージ識別子に関連付けられる。例えば、ツリーベース・データ構造内でノードN1からノードN2を指すために、ノードN2のストレージ識別子が、好ましくはノードN1に記憶される。
ツリーベース・データ構造
本明細書において理解されているように、ツリーベース・データ構造は任意のさまざまなデータ構造を含み、このデータ構造内で、データ・エントリがバランス調整階層構造(branching hierarchical structure)に従って記憶および構造化される。好ましくは、構造は、2つに分岐する方法で分岐するが、本発明の範囲内では、当業者が本説明を読んだときに理解するように、例えば4つの分岐、8つの分岐などの、さらに高次の分割を含む構造が考慮される。
ページ化検索ツリー・データ構造
本明細書において理解されているように、ページ化検索ツリー・データ構造は、データの構造化および検索のために設計される。ページ化検索ツリー・データ構造では、データはノードに記憶され、1つのノードは通常、1つのディスク・ページに対応し、各ノードは階層ツリー構造内で構造化されてリンクされる。
これらのデータ構造は、大規模なデータ・セット内での高速かつ効率的な検索を提供するように設計される。通常は、そのようなデータ構造はディスク上に記憶され、より高速なストレージ(例えば、メモリまたは固体ディスク)上のキャッシュが、データ構造の一部を記憶して性能を改善するために使用される。
例えば、B+ツリーはページ化検索ツリー・データ構造の一種である。B+ツリーでは、データ・エントリは葉ノードに排他的に記憶され、内部ノードは、操作を適切な葉ノードに向けるためにルーティング情報を記憶する。葉ノードに記憶されたデータ・エントリは、(検索を容易にするための)キー、および対象のデータを含んでいるペイロードを含む。ルーティング・エントリは、キー、および操作を適切な葉ノードに向けるために使用される内部リンクまたはノード識別子を含む。
コンピュータ、ネットワーク、およびストレージ・システム・アーキテクチャ
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはこれらの組み合わせにすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいる(1つまたは複数の)コンピュータ可読記憶媒体を含んでもよい。
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および記憶できる有形のデバイスにすることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせにすることができるが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-only memory)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasable programmable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD−ROM:compact disc read-only memory)、デジタル多用途ディスク(DVD:digital versatile disk)、メモリ・スティック、フロッピー(R)・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されているコンピュータ可読記憶媒体は、本質的に、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、あるいはワイヤを介して送信される電気信号などの一時的信号であると解釈されるべきではない。
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワークあるいはこれらの組み合わせ)を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードすることができる。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはこれらの組み合わせを備えてもよい。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読記憶媒体に記憶するために転送する。
本発明の処理を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードにすることができる。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータを、ローカル・エリア・ネットワーク(LAN:local area network)または広域ネットワーク(WAN:wide area network)を含む任意の種類のネットワークを介してユーザのコンピュータに接続することができ、または接続を、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行うことができる。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA:field-programmable gate arrays)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic arrays)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行できる。
本発明の態様は、本明細書において、本発明の実施形態に記載された方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できると理解されるであろう。
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が記憶されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に記憶され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはこれらの組み合わせに特定の方式で機能するように指示できるものであってよい。
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれてもよく、それによって、一連の動作可能なステップを、コンピュータ上、その他のプログラム可能な装置上、またはコンピュータ実装プロセスを生成するその他のデバイス上で実行させる。
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に記載されているシステム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および処理を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、指定された論理機能を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表すことができる。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生させることができる。例えば、連続して示された2つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、指定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令とを組み合わせて実行する専用ハードウェアベースのシステムによって実装できるということにも注意する。
さらに、さまざまな実施形態に従うシステムは、プロセッサ、およびプロセッサに統合された論理またはプロセッサによって実行可能な論理あるいはその両方を含むことができ、この論理は、本明細書において列挙された処理ステップのうちの1つまたは複数を実行するように構成される。統合されるということは、つまり、プロセッサに論理が、特定用途向け集積回路(ASIC:application specific integrated circuit)、FPGAなどのハードウェア論理として組み込まれるということである。プロセッサによって実行可能であるということは、つまり、論理が、プロセッサによってアクセス可能なハードウェア論理、ソフトウェア論理(ファームウェア、オペレーティング・システムの一部、アプリケーション・プログラムの一部など)など、またはハードウェア論理とソフトウェア論理の何らかの組み合わせであり、プロセッサによって実行されたときに何らかの機能をプロセッサに実行させるように構成されているということである。ソフトウェア論理は、当技術分野において知られた任意のメモリ・タイプの、ローカルまたはリモートあるいはその両方のメモリに記憶されてよい。ASIC、FPGA、中央処理装置(CPU:central processing unit)、集積回路(IC:integrated circuit)、グラフィック処理装置(GPU:graphics processing unit)といった、ソフトウェア・プロセッサ・モジュールまたはハードウェア・プロセッサあるいはその両方などの、当技術分野において知られた任意のプロセッサが使用されてよい。
図1は、一実施形態に従うアーキテクチャ100を示している。図1に示されているように、第1のリモート・ネットワーク104および第2のリモート・ネットワーク106を含む複数のリモート・ネットワーク102が提供される。ゲートウェイ101は、リモート・ネットワーク102と近接ネットワーク108との間で結合されてよい。本アーキテクチャ100の文脈において、ネットワーク104、106はそれぞれ、LAN、インターネットなどのWAN、公衆交換電話網(PSTN:Public Switched Telephone Network)、構内電話網などを含むが、これらに限定されない、任意の形態を取ることができる。
使用中に、ゲートウェイ101はリモート・ネットワーク102から近接ネットワーク108への入り口ポイントとして機能する。このようにして、ゲートウェイ101は、ゲートウェイ101に到着するデータの特定のパケットを行き先に向けることができるルータ、およびゲートウェイ101に入る実際のパスおよびゲートウェイ101から出る実際のパスを特定のパケットに提供するスイッチとして機能することができる。
ゲートウェイ101を介してリモート・ネットワーク102からアクセスできる、近接ネットワーク108に結合された少なくとも1つのデータ・サーバ114がさらに含まれる。データ・サーバ114が任意のタイプのコンピューティング・デバイス/グループウェアを含むことができるということに注意するべきである。複数のユーザ・デバイス116が各データ・サーバ114に結合されている。ユーザ・デバイス116は、ネットワーク104、106、108のうちの1つを通って直接接続されてもよい。そのようなユーザ・デバイス116は、デスクトップ・コンピュータ、ラップトップ・コンピュータ、ハンドヘルド・コンピュータ、プリンタ、または任意のその他のタイプの論理を含むことができる。一実施形態では、ユーザ・デバイス111がネットワークのうちのいずれかに直接結合されてもよいということに注意するべきである。
周辺機器120または一連の周辺機器120(例えば、ファクシミリ装置、プリンタ、ネットワークまたはローカルあるいはその両方のストレージ・ユニットまたはストレージ・システムなど)が、ネットワーク104、106、108のうちの1つまたは複数に結合されてよい。データベースまたは追加コンポーネントあるいはその両方が、ネットワーク104、106、108に結合された任意のタイプのネットワーク要素で利用されるか、またはそのようなネットワーク要素に統合されてよいということに注意するべきである。本説明の文脈において、ネットワーク要素はネットワークの任意のコンポーネントを指すことができる。
何らかのアプローチに従って、本明細書に記載された方法およびシステムは、仮想システムまたは1つまたは複数の他のシステムをエミュレートするシステム(IBM z/OS環境をエミュレートするUNIX(R)システム、MICROSOFT WINDOWS(R)環境を仮想的にホストするUNIX(R)システム、IBM z/OS環境をエミュレートするMICROSOFT WINDOWS(R)システムなど)あるいはその両方と共に実装されるか、またはそのようなシステムの上に実装されるか、あるいはその両方で実装されてよい。一部の実施形態では、この仮想化またはエミュレーションあるいはその両方は、VMWAREソフトウェアを使用することによって拡張してよい。
その他のアプローチでは、1つまたは複数のネットワーク104、106、108は、一般に「クラウド」と呼ばれる、システムのクラスタを表すことができる。クラウド・コンピューティングでは、処理能力、周辺機器、ソフトウェア、データ、サーバなどの共有されたリソースが、オンデマンドの関係においてクラウド内の任意のシステムに提供され、それによって、多くのコンピューティング・システムにまたがるサービスのアクセスおよび分散が可能になる。クラウド・コンピューティングは、通常、クラウド内で動作するシステム間のインターネット接続を含むが、システムを接続するその他の手法が使用されてもよい。
図2に、一実施形態に従って、図1のユーザ・デバイス116またはサーバ114あるいはその両方に関連付けられた代表的ハードウェア環境を示す。この図は、マイクロプロセッサなどの中央処理装置210、およびシステム・バス212を介して相互接続されたその他の複数のユニットを備えているワークステーションの標準的なハードウェア構成を示している。
図2に示されたワークステーションは、ランダム・アクセス・メモリ(RAM)214、読み取り専用メモリ(ROM)216、ディスク・ストレージ・ユニット220などの周辺機器をバス212に接続するためのI/Oアダプタ218、キーボード224、マウス226、スピーカ228、マイクロホン232、またはタッチ・スクリーンおよびデジタル・カメラ(図示せず)などのその他のユーザ・インターフェイス・デバイス、あるいはこれらの組み合わせをバス212に接続するためのユーザ・インターフェイス・アダプタ222、ワークステーションを通信ネットワーク235(例えば、データ処理ネットワーク)に接続するための通信アダプタ234、ならびにバス212をディスプレイ・デバイス238に接続するためのディスプレイ・アダプタ236を含む。
ワークステーション上には、Microsoft Windows(R)オペレーティング・システム(OS:Operating System)、MAC OS、UNIX(R) OSなどのオペレーティング・システムが常駐することができる。前述されたプラットフォームおよびオペレーティング・システム以外のプラットフォームおよびオペレーティング・システム上に好ましい実施形態が実装されてもよいということが理解されるであろう。好ましい実施形態は、XML言語、C言語、もしくはC++言語、またはこれらの組み合わせの言語、あるいはその他のプログラミング言語を、オブジェクト指向プログラミング方法と共に使用して記述されてよい。複雑なアプリケーションを開発するためにますます使用されるようになったオブジェクト指向プログラミング(OOP:object oriented programming)が使用されてよい。
ここで図3を参照すると、一実施形態に従ってストレージ・システム300が示されている。さまざまな実施形態に従って、図3に示された要素の一部が、ハードウェアまたはソフトウェアあるいはその両方として実装されてよいということに注意する。ストレージ・システム300は、少なくとも1つの上位ストレージ層(higher storage tier)302上および少なくとも1つの高位ストレージ層(upper storage tier)306上の複数の媒体と通信するために、ストレージ・システム・マネージャ312を含むことができる。上位ストレージ層302は、好ましくは、ハード・ディスク・ドライブ(HDD:hard disk drive)内のハード・ディスク、不揮発性メモリ(NVM:nonvolatile memory)、固体ドライブ(SSD:solid state drive)内の固体メモリ、フラッシュ・メモリ、SSDアレイ、フラッシュ・メモリ・アレイなど、または本明細書に記載されたか、もしくは当技術分野において知られているその他の媒体、あるいはこれらの組み合わせなどの、1つまたは複数のランダム・アクセスまたは直接アクセスあるいはその両方の媒体304を含むことができる。高位ストレージ層306は、好ましくは、テープ・ドライブ内の磁気テープもしくは光媒体またはその両方、スーパー・アクセスHDD、スーパー・アクセスSSDなど、または本明細書に記載されたか、もしくは当技術分野において知られているその他の順次アクセス媒体、あるいはこれらの組み合わせなどの順次アクセス媒体を含む、1つまたは複数の高位で実行されるストレージ媒体308を含むことができる。1つまたは複数の追加ストレージ層316は、システム300の設計者の要求に従って、ストレージ・メモリ媒体の任意の組み合わせを含むことができる。また、上位ストレージ層302またはより高位ストレージ層306あるいはその両方のうちのいずれかは、ストレージ・デバイスまたはストレージ媒体あるいはその両方の何らかの組み合わせを含むことができる。
ストレージ・システム・マネージャ312は、図3に示されたストレージ・エリア・ネットワーク(SAN:storage area network)またはその他の適切なネットワーク・タイプなどのネットワーク310を介して、上位ストレージ層302上および高位ストレージ層306上のストレージ媒体304、308と通信することができる。ストレージ・システム・マネージャ312は、ストレージ・システム・マネージャ312の一部であってもなくてもよいホスト・インターフェイス314を介して、1つまたは複数のホスト・システム(図示せず)と通信することもできる。ストレージ・システム300のストレージ・システム・マネージャ312または任意のその他のコンポーネントあるいはその両方は、ハードウェア内またはソフトウェア内またはその両方に実装されてよく、当技術分野において知られているタイプのコマンドを実行するために、中央処理装置(CPU)、フィールド・プログラマブル・ゲートアレイ(FPGA:field programmable gate array)、特定用途向け集積回路(ASIC)などのプロセッサ(図示せず)を利用することができる。当然、当業者が本説明を読んだときに明らかになるように、ストレージ・システムの任意の配置が使用されてよい。
その他の実施形態では、ストレージ・システム300は、任意の数のデータ・ストレージ層を含むことができ、各ストレージ層内の同じであるか、または異なるストレージ・メモリ媒体を含むことができる。例えば、各データ・ストレージ層は、HDD、SSD、順次アクセス媒体(テープ・ドライブ内のテープ、光ディスク・ドライブ内の光ディスクなど)、直接アクセス媒体(CD-ROM、DVD-ROMなど)、または媒体のストレージ・タイプの任意の組み合わせなどの、同じタイプのストレージ・メモリ媒体を含むことができる。そのような1つの構成において、上位ストレージ層302は、上位で実行されるストレージ環境内にデータを記憶するためのSSDストレージ媒体の大部分を含むことができ、高位ストレージ層306および追加ストレージ層316を含む残りのストレージ層は、データを高位で実行されるストレージ環境内に記憶するために、SSD、HDD、テープ・ドライブなどの任意の組み合わせを含むことができる。このようにして、より頻繁にアクセスされるデータ、優先度の高いデータ、より素早くアクセスされる必要のあるデータなどは、上位ストレージ層302に記憶されてよく、これらの属性のいずれかを有しないデータは、高位ストレージ層306を含む追加ストレージ層316に記憶されてよい。当然、当業者は、本説明を読んだときに、本明細書において提示された実施形態に従って、異なるストレージ方式で実装するために、ストレージ媒体のタイプの多くのその他の組み合わせを考案することができる。
一部の実施形態に従って、ストレージ・システム(300など)は、データ・セットを開くための要求を受信するように構成された論理、要求されたデータ・セットが、複数の関連する部分において、層型データ・ストレージ・システム300の高位ストレージ層306に記憶されているかどうかを決定するように構成された論理、要求されたデータ・セットの関連する各部分を層型データ・ストレージ・システム300の上位ストレージ層302に移動させるように構成された論理、および層型データ・ストレージ・システム300の上位ストレージ層302上の要求されたデータ・セットを関連する部分から組み立てるように構成された論理を含むことができる。
当然、この論理は、さまざまな実施形態に従って、デバイス上またはシステム上あるいはその両方での方法として、またはコンピュータ・プログラム製品として実装されてよい。
ツリーベース・データ構造の例
一般に、開示された本発明の実施形態は、ツリーベース・データ構造の処理および更新に関し、ストレージ・システム内のデータの構造化を容易にするために、通常は、ページ化検索ツリーへの実用的応用が活用される。本明細書において提示される説明は、ページ化検索ツリー(例えば、「B+ツリー」)の事例を参照し、この事例において、すべてのデータ・エントリがデータ構造の終端ノード(すなわち、「葉ノード」)に記憶され、すべての内部ノード(すなわち、「分岐ノード」および「ルート・ノード」)が、ツリー構造に記憶された特定のデータの検索時にツリー構造のトラバースを容易にするように構成されたルーティング情報を記憶する。
ただし、本開示の範囲はB+ツリー、Bツリー、または任意のその他の特定のさまざまなツリーベース・データ構造に限定されないということが理解されるべきである。むしろ、開示された本発明の概念は、当業者が本説明を読んだときに理解するであろう任意の適切なツリーベース・データ構造に適用されてよい。
ツリーベース・データ構造400の一実施形態例が、図4におい視覚的に表されている。この実施形態では、ツリー400は、3層のバランス調整されたデータ構造である。ツリーの最上位層(ルート層410a)は、ルート・ノード402を含んでおり、ツリー内のすべての他のノードがルート・ノード402の下にある。ルート・ノード402の真下にある、ツリー400の第1のノード層410bは、ルート・ノード402から分岐する2つの内部ノード404を含んでいる。ツリー400がB+ツリーである実施形態では、これらの内部ノード404はルーティング情報を含んでいるが、データ・エントリを含んでいない。むしろ、図4のB+ツリーの実施形態では、データ・エントリは、図4に示されている第1のノード層の真下の第2のノード層410c内にある葉ノード406に排他的に記憶される。当然、当業者は、他の実施形態において、ツリー400がB+ツリーではなく、データ・エントリを内部ノード404および葉ノード406に記憶できる、ツリーベース・データ構造の何らかのその他の適切な形態であってよいということを理解するであろう。
類似するツリーベース・データ構造500が図5に示されているが、示された実施形態によれば、ツリー500はバランス調整されていない。図4と同様に、ツリー500は、ルート・ノード502を含んでいるルート層510a、ルート・ノード層の下の第1のノード層510b、および第1のノード層の下の第2のノード層510cを含んでいる。ただし、図5に示されているように、ツリー500は非対称であり、第1のノード層510b内に1つの内部ノード504を含んでいるが、ツリー500の複数のノード層510b、510c内に葉ノード506も含んでいる。実際には、さまざまな実施形態に従って、開示された本発明の実施形態は、対称なツリー・タイプおよび非対称なツリー・タイプの両方に同じように適用できる。
引き続き図4および5を参照すると、本明細書において理解されているように、各ツリー400、500の第1のノード層410b、510bはそれぞれ、2つの水平方向に隣接する兄弟ノードを含んでいる(図4に示されているノード404、図5に示されているノード504および506を参照)。これらの兄弟ノードは、それぞれ対応するルート・ノード402、502の真下にあるため、それらの各ルート・ノードにも垂直方向に隣接している。
ただし、一部の実施形態では、兄弟ノードは、必ずしも同じ先祖ノードの下にある必要はない。例えば、図4に示されているように、第2のノード層410cは、兄弟ノードの3つのセットを含んでいると見なすことができる4つの葉ノード406を含んでおり、左側の2つの兄弟ノードは、第1のノード層410b内の左側の内部ノード404の下にある。右側の2つの兄弟ノードは、第1のノード層410b内の右側の内部ノード404の下にある。中央の2つの兄弟ノードはそれぞれ、異なる親ノードの下にあり、1つの兄弟ノードは第1のノード層410b内の左側の内部ノード404の下にあり、もう1つの兄弟ノードは第1のノード層410b内の右側の内部ノード404の下にある。さまざまな実施形態では、特定のノード層内でこのように水平方向に直接隣接しているノードのペアは、すべて兄弟であると見なされる。
同様に、図6を用いて示されているように、開示された本発明の実施形態は、非常に複雑なツリー構造(例えば、ツリーベース・データ構造600などのn層を含んでいる非対称のツリー)に適用可能であり、そのようなツリー構造の文脈において役立つ。図6に示された構造に従う一実施形態では、ツリー600は、ルート・ノード層610a内のルート・ノード602、およびルート・ノード層610aの真下にある第1のノード層610b内の2つの内部ノード604を含んでいる。
一部の実施形態では第2のノード層610dに指定することができる次のノード層が、第1のノード層の下にあり、内部ノード604および葉ノード606の両方を含むことができる。さまざまな実施形態では、n層型ツリー600は、図6に示されているように、第1のノード層610bと第2のノード層610dの間、および第3のノード層610eと終端ノード層610nの間の分岐を分離する途切れたギザギザの線を経由して、第1のノード層610bと第2のノード層610dの間、または第3のノード層610eと終端ノード層610nの間、あるいはその両方に配置された、内部ノード604または葉ノード606あるいはその両方をそれぞれ含んでいる任意の数の介在する追加層(図示せず)を含むことができる。
好ましいアプローチでは、開示された本アルゴリズムが、最適な最小および最大のファンアウトの特徴を有するストレージ・システム内またはストレージ・アーキテクチャ内あるいはその両方において実装される。すなわち、ストレージ・システムまたはストレージ・アーキテクチャあるいはその両方によって実装されたツリーベース・データ構造は、ツリー内の層の数を最適化するようにバランス調整され、ツリーの1つの層当たりのノード数を最適化する。加えて、好ましいアプローチでは、これらのアルゴリズムは、そのようなファンアウトの特徴を有するB+ツリーに適用される。
有利なことに、前述したようなファンアウトの特徴を有するデータ構造を採用することによって、下で詳細に説明されているように、データ・エントリに対するヘテロジニアスな操作の同時一括処理、およびそれに応じたツリー構造に対する変更を、3回以下の更新段階の反復で実行できるようにする。この非常に効率的なプロセスは、複数のアプローチに従ってデータおよびツリーベース・データ構造自体の操作の計算コストおよび実行時間を削減することによって、開示された本手法を実装するストレージ・システムの機能をさらに改善する。
ツリーベース・データ構造の同時一括処理
下で示されるように、データおよびツリーベース・データ構造を処理するための、ページ化検索ツリーなどの従来手法は、ツリー内に、またはツリーを介して記憶されたデータの効率的な同時処理の問題をまだ解決する必要がある。本明細書において提示された独自のアプローチは、ツリー内に、またはツリーを介して記憶されたデータを処理するため、およびツリー構造を処理するための標準的な手法に関連するI/Oおよびプロセッサのコストを削減する、ヘテロジニアスな操作タイプの同時一括処理の使用を提案する。簡単に言うと、開示された本発明の手法は、ヘテロジニアスな操作タイプの一括処理を可能にし、ツリーに対する必要最小限の構造の変更を決定し、それらの必要最小限の構造の変更を、データまたはツリー構造あるいはその両方を変更するプロセスにおいて、ツリーの上方に伝えるため、大幅な効率の改善が提供される。
開示された本発明の概念は、ページ化検索ツリーなどのデータ構造内のデータ・エントリに対するヘテロジニアスな操作を実行するため、およびヘテロジニアスな操作の実行から生じたデータ構造の構造化に対する必要な変更を行うための手法を提供する。開示された本発明の概念は、ヘテロジニアスな操作の処理がツリー・データ構造の層ごとに同時に一括して実行され、ヘテロジニアスな操作のセットを実行するために必要な処理およびI/O操作の数およびコストを大幅に削減するという点において独自のものである。
一般に、本明細書に記載された手法は、2段階のアプローチを使用して前述の同時一括処理を達成する。まず、検索段階で、ツリー・データ構造をトラバースし、入力されたヘテロジニアスな操作のセットのうちの1つまたは複数が適用される必要のある葉ノードを特定する。次に、更新段階で、葉層からルートまで進む層ごとの反復方式で、ツリー・データ構造をトラバースする。
例えば、開示された本発明の概念の1つの実装が図7に概略的に示されており、この図では、n層ツリーベース・データ構造が複数の層710a、710b、710c...710nを含んでいる。ルート層710aはルート・ノード702を含んでおり、ルート・ノード702の下に4つの内部ノード704があり、別のノード層710bを形成している。同様に、このノード層のノード704の下にはそれぞれ4つのノードがあり、さらに別のノード層710cを形成している。ツリーは、このようにして、複数の葉ノード706を含んでいるn番目の層710nに達するまで広がり、葉ノード706はそれぞれ、1つまたは複数のデータ・エントリを記憶している。開示された本発明の概念の範囲から逸脱することなく、任意の数の層が、ルート層710aと葉ノード層710nの間に介在することができる。
基本的に、本開示に従って実行される処理は、2つの基本的な段階において発生する。検索段階は、ルート層710aで開始し、n番目の層710n内の葉ノード706に向かって層ごとに進む。
反対に、更新段階は1番目の反復(i=0)において葉ノード層710nで開始し、1つまたは複数の反復(i>0)を通じて上方に進み、最終的にn番目の反復(i=n)においてルート・ノード702に達する可能性がある。当然、さまざまな実施形態では、更新段階は、例えば、直前の更新段階の反復(例えば、図7に示された反復i=(n−1)、i=(n−2)、2<i<(n−2)、i>1など)中に生成されたノードおよび操作のセットにおいてノードが指定されないとの決定に応答して、ルート・ノード層710aに到達する前に終了することができる。
好ましい実施形態では、更新段階の各反復中に、データ構造の層が処理され、適切な操作がその層内のすべての適切なノードに対して同時に一括して実行される。更新段階では、ヘテロジニアスな操作の適用の結果として満杯になっているか、または満杯になっていないノードを処理する。各更新段階の出力は、ツリーの次の上位層内のノードのセット、およびそれらのノードに適用される操作であり、それらの操作は、ツリーの現在の層内のノードに適用された操作の結果である。ツリーの次の上位層のノードに適用される、更新段階の間に生成された操作は、ツリーの現在の層の処理において作成されたノード、削除されたノード、および内容が更新されたエントリを有するノードの新しい形態をサポートする。次に、現在の更新段階の出力されたノードおよび操作のセットが、次の更新段階の入力として(つまり、ツリーの次の上位層を処理するために)提供される。アルゴリズムの処理は、ツリーの層の処理によって生成されたノードおよび操作のセットが空であるときに完了する。
したがって、図10を参照すると、一実施形態に従う方法1000のフローチャートが示されている。方法1000は、さまざまなアプローチにおいて、特に図1〜9に示された環境のいずれかにおいて本発明に従って実行されてよい。当然、当業者が本説明を読んだときに理解するように、図10において具体的に説明された処理よりも多いか、または少ない処理が方法1000に含まれてよい。
方法1000の各ステップは、動作環境の任意の適切なコンポーネントによって実行されてよい。例えば、さまざまな実施形態では、方法1000は、階層ストレージ・システムのディスク・マネージャ、または1つまたは複数のプロセッサを備えているその他のデバイスによって、部分的に、または全体的に実行されてよい。プロセッサ(例えば、ハードウェアまたはソフトウェアあるいはその両方において実装され、好ましくは少なくとも1つのハードウェア・コンポーネントを含んでいる処理回路、チップ、またはモジュール、あるいはこれらの組み合わせ)が、方法1000の1つまたは複数のステップを実行するために任意のデバイス内で利用されてよい。プロセッサの例は、中央処理装置(CPU)、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)など、これらの組み合わせ、または当技術分野において知られた任意のその他の適切なコンピューティング・デバイスを含むが、これらに限定されない。
方法1000は、当業者が本説明を読んだときに理解するであろう他の類似するツリーベース構造の中で特に、図4〜6に示されたツリーベース構造のうちのいずれかなどの、ツリーベース・データ構造に対する操作の同時処理のために構成される。ルート・ノード層および葉ノード層は、任意の数の断続的層によって分離されてよい。ツリーベース構造は、B+ツリー、Bツリー、または任意のその他の適切なタイプのツリーベース構造の定義に従うことができる。
ツリーベース・データ構造の詳細にかかわらず、図10に示されているように、方法1000は処理(operation)1002を含み、処理1002では、入力が、ツリーベース・データ構造が記憶されるストレージ・システムによって受信される。この入力は、ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する。
好ましくは、この入力は、ツリーベース・データ構造への参照およびペアのリストを含み、各ペアはデータ・エントリおよび関連する操作を示す。各データ・エントリはキー、およびデータが記憶されるペイロードを含むことができる。
さまざまなアプローチでは、ヘテロジニアスな操作のセットは、挿入操作、削除操作、および更新操作のうちの任意の1つまたは複数を含むことができる。ノードへの挿入によって、ノードにオーバーフローが発生し、したがってノードの分割が必要になる場合があり、その後、ツリーの葉の上の層内のエントリに対して変更を適用することが必要になる場合がある。ノードからの削除によって、ノードが満杯ではなくなり、したがってそのノードを別のノードとマージすることが必要になる場合があり、その後、ツリーの葉の上の層内のエントリに対しても変更を適用することが必要になる場合がある。データ構造の構造化における変更を考慮するために、そのような変更は、ルーティング・エントリの追加、更新、または削除を含むことができ、ツリーのルート・ノードまで伝達されてよい。ノードの更新は、好ましくは、ノードに記憶されたエントリの更新を含む。当然、前述の例は限定するものではないと見なされるべきであり、ヘテロジニアスな操作は、当業者が本説明を読んだときに理解するであろう任意の適切なタイプの操作を含むことができる。
一実施形態では、データ構造を変更するかどうか、およびデータ構造の変更方法の決定は、好ましくはノード・バランス調整基準(node balancing criteria)に基づく。ノード・バランス調整基準は、望ましいシステムのストレージ使用率、性能などに基づいて、事前に定義されてよい。例えば、一実施形態では、ノード・バランス調整基準は、ツリーが対応するストレージ・デバイスのページ(ノード)ごとに事前に定義された最小ストレージ使用率、平均ストレージ使用率などを含むことができる。
好ましいアプローチでは、事前に定義されたノード・バランス調整基準は、ページの容量の50%未満が使用中であるときにノード(ページ)が「満杯ではない」と見なされるように、約50%の最小容量しきい値を含む。ノード・バランス調整基準は、事前に定義された約75%の平均容量しきい値を含むこともできる。
当然、ノード・バランス調整基準は、事前に定義されるのではなく、決定されてもよく、ツリーベース・データ構造および開示された本手法が実装されるストレージ・システムの特徴に基づいてリアルタイムに変更されてよい。
ストレージ・システムは、下の事象例のうちの1つまたは複数、あるいは当業者が本開示を読んだときに理解するであろうこれらと等価な事象の発生を検出し、変更された状況に適した新しい最適なノード・バランス調整基準を決定することによって適切な処置を取るように構成されてよい。
追加または代替あるいはその両方として、ノード・バランス調整基準はユーザによって定義または決定されてよい。
方法1000は処理1004も含み、処理1004では、ヘテロジニアスな操作のセットのうちの1つまたは複数が適用されるノードおよび好ましくは葉ノードが決定される。この決定は、好ましくは、処理1002で受信された入力に少なくとも一部において基づく。さらに好ましくは、データ・エントリおよびデータ・エントリに関連付けられた操作を定義するペアのリストに基づいて、処理1004は、ヘテロジニアスな操作のうちの1つまたは複数による処理を必要とするデータ構造のノードを決定することを含む。
特に有利なアプローチでは、処理1004において実行される決定は、検索段階として具現化されてよい。例えば、図6に示されたようなツリーベース・データ構造を参照すると、一実施形態では、検索段階は降順でのツリーベース・データ構造の各層の評価を含むことができる。層ごとに、検索段階は、ペアのリストで指定されたデータ・エントリの全体または一部に基づいて、評価されている層内のノードのいずれかが、ヘテロジニアスな操作のセットのうちの1つまたは複数が適用される必要のあるノード(または、子孫ノードにそのような操作が適用される必要のあるノード)であるかどうかを同時に決定することを含むことができる。この決定することは、一部のアプローチでは、データ・エントリを記憶するノード(例えば葉ノード)へのアクセスを除外することができ、代わりに内部ノードに記憶されたルーティング情報に基づくことができる。
例えば、アプローチの一例に従って、検索段階は、入力ペアごとにツリーを同時に下降すること、および入力ペアによって指定された操作が適用される必要のあるデータ構造内の葉ノードのストレージ識別子を取得することを含むことができる。操作またはヘテロジニアスな操作のセットが特定の葉ノードに適用される必要があるとの決定は、ノードに記憶されたデータ・エントリを、入力ペアによって指定され、1つまたは複数の操作に関連付けられたデータ・エントリと比較することを含むことができる。
好ましくは、検索は、ノードにアクセスするための共有された権限を使用して、すべての入力ペアについて同時に実行される。検索段階では、キャッシングを利用してストレージ・アクセスをさらに最小限に抑え、対応するストレージ・システムの機能を改善することができる。
追加または代替あるいはその両方のアプローチでは、検索段階は、入力ペアごとに個別に実行されるのではなく、サブセットで実行されることが可能である。つまり、ルート・ノードでは、入力ペアは、アクセスされる次の下位層内のノードに従ってサブセットに分割されてよく、それらの各ノードへのアクセスは、関連するサブセットを処理する(したがって下降し続ける)操作の異なるスレッドによって実行されてよい。このようにして、開示された本発明の概念は、複数の操作処理スレッドにまたがる検索段階の並列化を可能にし、検索段階を実行するために必要な時間を大幅に削減する。
入力ペアごとに個別に実行されるのか、それともセットで実行されるのかにかかわらず、好ましい実施形態では、データ・エントリを記憶するデータ構造の葉ノードは、検索段階では直接アクセスされず、更新段階においてのみ直接アクセスされる。
検索段階の出力は、「ノードおよび操作のセット」であり、通常は、ヘテロジニアスな操作のセットのうちの1つまたは複数が適用される必要のある、検索段階において決定されるノードを識別し、好ましくは、ヘテロジニアスな操作のセットのうちの1つまたは複数が適用される必要のある、検索段階において決定されるノードのストレージ識別子のリストを含む。
さまざまな実施形態では、ノードおよび操作のセットにおいて、ストレージ識別子のリスト内のノードの各ストレージ識別子は、入力されたデータ・エントリおよび操作(すなわち、挿入、削除、更新)のペアのリストに関連付けられ、このリストは、関連するストレージ識別子によって識別されたノードに適用される。
その他のアプローチでは、検索段階は、実質的に図8に示されたプロセス・フローに従って発生させることができる。
したがって、さまざまなアプローチでは、方法1000の処理1004は、ノードおよび操作のセットを含んでいる出力を生成することを含むことができる。ノードおよび操作のセットはストレージ識別子のリストを含み、各ストレージ識別子は、ヘテロジニアスな操作のセットのうちの1つまたは複数が適用される必要のあるノードのうちの1つを識別する。さらに、一部のアプローチでは、各ストレージ識別子は、処理1002において受信された入力において識別された少なくとも1つのデータ・エントリおよび操作のペアに関連付けられる。
方法1000は、一実施形態に従って、ヘテロジニアスな操作のセットのうちの1つまたは複数が同時に一括して実行される処理1006をさらに含む。ツリー・データ構造は、好ましくは、層ごとに反復する方式で処理され、特定の層に属しているノードおよび操作のセットにおいて識別されたすべてのノードが同時に一括して処理される。この処理は、本明細書で開示された本発明の更新段階の文脈において、下でさらに詳細に説明される。
好ましい実施形態では、ツリー・データ構造のさまざまなノードへのヘテロジニアスな操作のセットの適用は、ツリーベース・データ構造の層ごとの同時一括更新を含む「更新段階」の1つまたは複数の反復を通じて達成される。更新段階は、例えば図4〜6に示されたようなツリーベース・データ構造に対して、ヘテロジニアスな操作のセットのうちの1つまたは複数を、ツリーベース・データ構造の最下層(例えば、図4および5にそれぞれ示された第2のノード層410c、510c、または図6に示されたn番目の層610n)内の1つまたは複数のノードに適用することによって、開始することができ、それらの葉ノードはノードおよび操作のセットにおいて列挙されたストレージ識別子を含む。
したがって、前の層の処理によって生成されたノードおよび操作のセットにおいて列挙されたストレージ識別子を有する第2のノード層(すなわち、前に処理された層の上の層)内のノードごとの、ノードに適用されるヘテロジニアスな操作のセットは、ノードおよび操作のセット内のそのノードのストレージ識別子に関連付けられたデータ・エントリ/操作ペアに基づいてよい。
重要なことに、1つのアプローチでは、ヘテロジニアスな操作のセットが、ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する第2のノード層内の各ノードに同時に一括して適用される。好ましくは、同時一括処理は、現在の層内のノードへのヘテロジニアスな操作の適用の結果として必要とされるノードのバランス調整操作に関与する資格のある隣接ノードの評価および資格付与を可能にする方法で、現在のノード層内で処理されている各ノードを分離することを含む。
さまざまな実施形態では、ヘテロジニアスな操作を特定のノード層内のノードに適用することは、新しいノードをツリーの1つまたは複数の層に挿入すること、ツリーの1つまたは複数の層内の既存のノードを削除すること、ツリーの1つまたは複数の層内の既存のノードをマージすること、ツリーの1つまたは複数の層内の1つまたは複数の既存のノードを分割すること、またはツリーの1つまたは複数の層内の既存のノードの1つまたは複数のデータ・エントリを更新すること、あるいはこれらの組み合わせを含むことができる。
ヘテロジニアスな操作を葉ノード層の上の層に適用することがエントリの挿入を含んでいる場合、この挿入操作は、好ましくは、現在の層の下の層のうちの少なくとも1つに含まれる1つまたは複数の既存のノードが分割されたとの決定に応答して、実行される。さらに、挿入操作は、ツリーベース・データ構造の現在の層内の1つまたは複数のノードの作成を必要とする場合がある。
ヘテロジニアスな操作を葉ノード層の上の層に適用することがエントリの削除を含んでいる場合、この削除操作は、好ましくは、現在の層の下のツリーベース・データ構造の少なくとも1つの層内の1つまたは複数の既存のノードがマージされたとの決定に応答して、実行される。削除操作は、ツリーベース・データ構造の現在の層内の1つまたは複数のノードの削除を必要とする場合もある。
ツリーの現在の層の処理中に生成されたエントリおよび操作は、ツリーの現在の層の処理において更新、作成、および削除されたノードの新しい形態をサポートする。そのようなエントリおよび操作を生成する3つの事例が、すぐ下で示される。
第一に、一実施形態において、処理されるノードが分割されたときに作成された新しいノードによって、ツリーの次の上位層に追加されるエントリが生成される。
第二に、別の実施形態において、処理されるノードから兄弟ノードへのエントリの(例えばマージによる)完全な移動の結果、処理されたノードが削除され、それによって、ツリーの次の上位層内でこの削除されたノードを参照しているエントリの削除操作が生成される。
第三に、その他の実施形態において、エントリの内容が変更され、その結果、その代表エントリが変更された処理されるノードによって、削除されてツリーの次の上位層に挿入されるエントリが生成される。
当然、さまざまな実施形態では、当業者が本説明を読んだときに理解することの中でも特にこれらの事例のうちの1つまたは複数が、ツリーベース・データ構造の処理の1回の反復(または複数回の反復)において発生する場合がある。
一般に、更新段階は、好ましくは、次の反復中に適用される必要のある操作のセットを識別する出力を生成し、この出力は、好ましくは、ツリーベース・データ構造の異なる層、さらに好ましくは、更新段階の現在の反復中に処理される層の上の層、最も好ましくは、更新段階の現在の反復中に処理される層のすぐ上の層のノードに対応する。
一部の実施形態では、更新段階において、ヘテロジニアスな操作のセットを更新段階の間に処理されるノード層に適用することに少なくとも部分的に基づいて、出力として新しいノードおよび操作のセットを生成する。新しいノードおよび操作のセットは、ストレージ識別子のリストを含む。新しいノードおよび操作のセット内の各ストレージ識別子は、更新される次のノード層内のノードのうちの1つを識別する。新しいノードおよび操作のセットにおいて識別された次のノード層内のノードは、ヘテロジニアスな操作のセットのうちの1つまたは複数が適用される必要のあるノードである。好ましくは、新しいノードおよび操作のセット内の各ストレージ識別子は、少なくとも1つのデータ・エントリおよび操作のペアに関連付けられる。
更新段階は、ツリーベース・データ構造の終端ノードからルート・ノードまで上昇する(下位から上位への)方法で、ツリーベース・データ構造を層ごとに徐々に更新する、任意の数の反復を含むことができる。
さまざまな実施形態では、反復更新は、ツリーベース・データ構造の最下層で開始することができ、ルート・ノードを含んでいる層に達するまで、各層を徐々に更新する。あるいは、更新段階では、ツリーベース・データ構造の層のサブセットのみを徐々に更新することができる。
その他のアプローチでは、反復更新プロセスによって、例えばノード・バランス調整操作またはノード・バランス調整基準あるいはその両方に対応するために、ツリー構造の新しい層が生成される場合もある。ノード・バランス調整操作は、例えばノード・バランス調整がルート・ノードの分割を引き起こし、前のルート・ノードの上の層内の新しいルート・ノードを必要とすることに応答して、新しい層の生成を必要とする場合がある。ノード使用率しきい値などのノード・バランス調整基準も、例えばルート・ノードの分割を必要とすることなどによって、新しいノードの作成を必要とする場合がある。
したがって、1回の更新段階の反復によって生成されるノードおよび操作のセットは、次の更新段階の反復の入力として機能することができる。好ましくは、この新しいノードおよび操作のセットは、現在の反復において更新される層の上の層内のノードのセットを識別し、これらの識別されたノードは、次の更新段階の反復においてヘテロジニアスな操作のセットのうちの1つまたは複数が適用される必要のあるノードである。
その他のアプローチでは、1つまたは複数の更新段階の反復は、ノードまたは操作の入力セットが空であるかどうかを決定すること、および空である場合は、ツリーベース・データ構造の上位層に適用される必要がある変更がそれ以上存在しないため、ツリーベース・データ構造の処理を完了させることを含むこともできる。一部の実施形態では、ルート・ノードに対する権限がすでに確保されている場合、処理の完了は、ルート・ノードに対するそのような権限の解放を含むことができる。その他の実施形態では、そのような権限は排他的権限であってよい。
ノードおよび操作の入力セットが空でない場合、本明細書で説明された手法は、新しい空のノードおよび操作のセットを作成することと、空のノードおよび操作のセットに、ヘテロジニアスな操作のセットのうちの1つまたは複数が次の更新段階の反復において適用される必要のあるノードのストレージ識別子を入力することと、ストレージ識別子を、次の更新段階の反復において対応するノードに対して実行される1つまたは複数のヘテロジニアスな操作の適切なセットに関連付けることとを含むことができる。
一実施形態では、更新段階の反復は、ヘテロジニアスな操作のセットのうちの1つまたは複数を、後続の更新段階の反復の場合(i≧1)に前の更新段階の反復中に生成されたか、または1番目の更新段階の反復の場合(i=0)に検索段階の間に生成された新しいノードおよび操作のセットにおいて列挙されたストレージ識別子を有する特定のノード層内の各ノードに適用することを含むことができる。好ましくは、新しいノードおよび操作のセットにおいて列挙されたストレージ識別子を有する特定のノード層内のノードが葉ノードを含んでいる場合、それらの葉ノードに適用されるヘテロジニアスな操作は、葉ノードのストレージ識別子に関連付けられ、ストレージ・システムへの入力として提供された少なくとも1つのデータ・エントリおよび操作のペアに基づく。さらに、ヘテロジニアスな操作は、新しいノードおよび操作のセットにおいて列挙されたストレージ識別子を有する特定のノード層内の各ノードに同時に一括して適用される。
図4を参照すると、好ましい実施形態に従って、この反復更新段階のプロセスは、1番目の反復(i=0)中に第1のノード層410c内のノード406を更新することと、ヘテロジニアスな操作が適用される必要のある第2のノード層410b内のノード404を識別する新しいノードおよび操作のセットを生成することと、更新段階の2番目の反復(i=1)において第2のノード層410bのノード404を更新することとを含む。
特に好ましい実施形態では、第1のノード層410c内のノード406は、データ・エントリを記憶する葉ノードであり、B+ツリー・データ構造の一部である。第2のノード層410b内のノード404は、ルーティング情報を記憶している内部ノードである。
当然、本開示の範囲内のその他の実施形態は、例えば図5および6に一般的に示されているように、データ・エントリまたはルーティング情報あるいはその両方を記憶している複数の層のノードを含んでいるツリーベース・データ構造、ツリーの複数の層でデータ・エントリを記憶しているノードを含んでいるツリーベース・データ構造などを含むことができる。特にこれらの実施形態に従って、反復更新段階は、当業者が本説明を読んだときに理解するように、ツリーベース・データ構造のいずれかの層に対してノードのデータ・エントリを更新すること、ツリーベース・データ構造のいずれかの層に対してノードのルーティング情報を更新すること、ツリーベース・データ構造のいずれかの層に対してノード間の関係を変更すること、ツリーベース・データ構造のいずれかの層に対してノード間で情報を移動させることなどを含むことができる。
特定のツリー構造にかかわらず、さまざまな実施形態に従って、更新段階は、元のノードおよび操作のセットまたは新しいノードおよび操作のセットあるいはその両方が、ツリーの次の上位層内のノードに対応するいずれかのストレージ識別子を列挙するかどうかを決定することを含むことができる。ノードおよび操作のセットがツリーの次の上位層内のノードに対応するどのストレージ識別子も含んでいないとの決定に応答して、更新段階を終了することが好ましい。
特に好ましいアプローチでは、検索段階において、ノードは共有された権限を使用してアクセスされ、更新段階において、ノードは排他的権限を使用してアクセスされる。
特定の層内のノードへのヘテロジニアスな操作の適用は、同時に一括して発生させ、異なるプロセス・スレッドを使用して操作を各ノードに適用することを含む。さらに好ましくは、各プロセス・スレッドは並列に実行され、それによって、ツリーベース・データ構造内のデータを特定して更新するプロセスを高速化しながら、必要な計算コストを少なくすることで、計算時間を削減し、開示された本手法を実装しているストレージ・システムを改善する。
例えば、ヘテロジニアスな操作を一括して処理し、必要なノード・バランス調整または1回の反復プロセスにおけるツリー構造のその他の操作に対応することによって、開示された本手法は、特定のタイプの操作をツリー全体に適用し、その後、別のタイプの操作によって対象とされるデータ・エントリのいずれかが、特定のタイプの操作がツリー全体に適用される前とは異なる位置にあるかどうかを決定するために、別のタイプの操作に関するデータ・エントリを特定するための別の検索を実行する必要があるということを回避する。
さまざまな実施形態に従って、更新段階の間にノードを処理することは、ツリーベース・データ構造の特定の層内の複数のノードにまたがるヘテロジニアスな操作の同時一括処理を可能にする任意の適切な方法で実行されてよい。特に好ましい実施形態では、更新段階の間の処理は、図9で表されているように実質的に発生する。
好ましい実施形態では、入力されたノードおよび操作のセット内のノードに関連付けられた操作は、開示された本発明の概念において効率の向上をもたらし、ストレージ・システム自体の機能をさらに改善する特定の順序で実行される。以下では、この操作の順序についてさらに詳細に説明する。
葉ノードを含んでいる層を処理する場合のある更新段階の最初の反復中に、ユーザによって提供された操作の順序に従って、または本明細書において指定された望ましい順序に従って、検索段階によって生成された入力されたノードおよび操作のセット内のノードに関連付けられた操作を処理することができる。本明細書において指定された望ましい順序は、有利なことに、操作を特定のノードに適用することから生じる構造の変更を最小限に抑え、したがってアルゴリズムの効率に貢献し、アルゴリズムが実装されたストレージ・システムの機能をさらに改善する。実装された特定の順序にかかわらず、更新段階は、ルート・ノードに対する排他的アクセスを取得することによって開始することができる。
好ましい順序は、更新操作の実行後に削除操作を実行し、その後、挿入操作を実行することを含む。
さらに具体的には、実行される1番目の操作は、好ましくは、ノード内のデータ・エントリのペイロードを更新することである。2番目の操作は、ノードからエントリを削除することである。この時点で、ノードのバランス調整操作もマージ操作も、入力されたすべての操作の処理が完了するまで、実行される必要がない。実際、好ましくは、入力されたすべての操作を適用した結果として、処理対象のノードが満杯でなくなっていない限り、バランス調整操作もマージ操作も実行されない。3番目の操作は、エントリをノードに挿入することである。挿入の場合、入力されたすべての操作が適用される前に、ノードが満杯になる場合があり、したがってそのような状況では、挿入時に、ノードが満杯になった場合に、ノードの再バランス調整または分割が適用されることが必要になることがある。
さまざまな実施形態では、満杯になっているノードは、ノード使用率レベル(すなわち、ノードに記憶されたデータの量)をノードの最大容量と比較することによって決定されてよい。
同様に、満杯でなくなっているノードは、ノード使用率レベルを最小ノード使用率しきい値と比較することによって決定されてよい。最小ノード使用率しきい値は、ユーザの選択、またはストレージ・システムの特定の必要性(例えば、ストレージ使用率または性能の要件あるいはその両方)に従って事前に決定されてよい。好ましいアプローチでは、最小ノード使用率しきい値は、ノード容量全体の約50%である。当然、本開示の範囲を逸脱することなく、100%未満のその他の値(例えば、25%、30%、35%など)が採用されてよい。
ノードが満杯になる状況に対処するために、ノードの再バランス調整が採用されてよい。好ましくは、このノードの再バランス調整は、満杯になったノードが隣接ノード、好ましくは現在の反復への入力として提供されたノードおよび操作のセットにおいて識別されなかった隣接ノードを有するかどうかを決定することを含む。そのような隣接ノードが存在するとの決定に応答して、ノードの再バランス調整は、満杯になったノードからエントリを移動させることによって、隣接ノード自体が満杯になるかどうかを決定することを含む。隣接ノードが満杯にならないとの決定に応答して、ノードの再バランス調整は、エントリの移動によって、入力されたノードおよび操作のセット内の保留中の挿入が隣接ノードにさらに適用されなくてもよいかどうかを決定することを含む(すべての挿入は、隣接ノードに対してではなく、入力されたノードおよび操作のセットにおいて識別されたノードに適用されなければならない)。挿入が隣接ノードにさらに適用されなくてもよいとの決定に応答して、ノードの再バランス調整は、エントリの移動によって隣接ノードが満杯にならないかどうかを決定することを含む。エントリの移動によって隣接ノードが満杯にならないとの決定に応答して、ノードの再バランス調整は、隣接ノードへのエントリの移動によって、満杯になったノードが指定されたノード使用率の範囲内の(例えば、最小ノード使用率しきい値より高い)ノード使用率レベルを有するようになるかどうかを決定することを含む。移動によってこの結果を達成するとの決定に応答して、エントリを好ましくは移動させる。さらに好ましくは、処理対象のノード内に、保留中の追加の挿入のための容量を生み出すために、複数のエントリを移動させてよい。
さらに好ましくは、エントリの移動先のノードは、移動の期間中にのみ(例えば排他的アクセスによって)ロックされる。最も好ましくは、このノードの再バランス調整は、すべての挿入が処理対象の層内のノードに適用された後、移動させたエントリを受け取る隣接ノードに適用される挿入がなかった場合にのみ実行される。
その他の実施形態では、満杯になったノードを緩和するためのノードの再バランス調整は、例えば、上に列挙された決定のいずれかの結果が否定であるために上の移動手順が不可能である場合に、ノードを分割することを含むことができる。
特に、一部の状況では、ヘテロジニアスな操作のセットをツリーベース・データ構造の特定の層のノードに適用することは、この更新段階の反復の間に、処理対象のノードが満杯になることを複数回発生させる場合があり、したがって1回の更新段階の反復につきノードの再バランス調整を複数回実行することが望ましい場合がある。
更新段階の反復中に満杯ではなくなったノードは、複数の実施形態に従って、類似する方法で再バランス調整されてよい。例えば、一実施形態では、満杯になっていないノードの問題を緩和するためのノードの再バランス調整は、満杯になっていないノードが、現在の反復への入力として提供されたノードおよび操作のセットにおいて識別されなかった隣接ノードを有するかどうかを決定することを含む。
その他の実施形態では、そのような隣接ノードが存在するとの決定に応答して、ノードの再バランス調整は、隣接ノードからエントリを移動させることによって、隣接ノード自体が満杯でなくなるかどうかを決定することを含む。
さらにその他の実施形態では、隣接ノードが満杯でなくなることはないとの決定に応答して、ノードの再バランス調整は、満杯になっていないノードへのエントリの移動によって、満杯になっていないノードが指定されたノード使用率の範囲内の(例えば、最小ノード使用率しきい値より高い)ノード使用率レベルを有するようになるかどうかを決定することを含む。移動によってこの結果を達成するとの決定に応答して、エントリを好ましくは移動させる。
さらに好ましくは、一部のアプローチでは、エントリの移動元のノードは、移動の期間中にのみ(例えば排他的アクセスによって)ロックされる。最も好ましくは、このノードの再バランス調整は、満杯になっていないノードを望ましいノード使用率の範囲内するために必要な数のエントリまたは必要な量の情報のみを移動させることを含む。
その他の実施形態では、満杯になっていないノードを緩和するためのノードの再バランス調整は、例えば、上に示された決定のうちの1つまたは複数の結果が否定であるために上の移動手順が不可能である場合に、満杯になっていないノードをマージすることを含むことができる。このような状況では、マージすることは一連の決定を含むことができる。例えば、1つのアプローチでは、ノードをマージすることは、満杯になっていないノードが、入力されたノードおよび操作のセットに含まれていない隣接ノードを有するかどうかを決定することを含む。そのような隣接ノードが存在するとの決定に応答して、満杯になっていないノードをマージすることが、満杯になっていないノードのすべてのエントリを隣接ノードに移動させることによって、隣接ノードが満杯になるかどうかを決定することをさらに含む。満杯になっていないノードのすべてのエントリを隣接ノードに移動させることによって隣接ノードが満杯にならないとの決定に応答して、満杯になっていないノードをマージすることが、満杯になっていないノードのすべてのエントリを隣接ノードに移動させることをさらに含む。以前に満杯ではなく、現在は空のノードのすべてのエントリを移動させた後に、このノードは削除されてよい。エントリは、満杯になっていないノードを空にできるようにするために、満杯になっていないノードから複数の隣接ノードに移動させてよい。
有利なことに、すぐ上で説明されたマージ操作における移動の方向性、すなわち、隣接ノードから満杯になっていないノードへの移動ではなく、満杯になっていないノードから隣接ノードへのエントリの移動は、マージ操作に関わる隣接ノードを削除する必要性をなくすのに役立つ。これは、他の同時操作がこれらの隣接ノードへのアクセスを同時に必要とする場合があるため、有益であり、一部のアプローチでは、そのようなノードがツリーの別の上位層からまだ参照されているため、このアクセスが可能でなければならない。加えて、この方向性は、望ましくは、他の同時操作との一貫性を保ちながら、削除されたノードが他の同時操作にとって必要ではないという状況をもたらす。
好ましい実施形態では、現在のノードの処理が完了したときに、そのノードに対する排他的権限がすでに取得されている場合、その権限が解放される。加えて、ツリーの特定の層の処理中に、例えばツリーの他の上位層へのアクセスが、隣接ノードを特定する目的で、例えば共有された権限を使用して、すべての同時操作によって同時に実行される。
前述したように、現在の層のノードに対する操作の同時処理の出力は、操作が適用される必要のあるツリーの次の層内のノードのストレージ識別子のリストで構成された、新しいノードおよび操作のセットである。一部の実施形態では、新しいノードおよび操作のセットは、ストレージ識別子のリストおよび各ストレージ識別子に関連付けられた1つまたは複数のヘテロジニアスな操作のセットで構成されてよい。
好ましくは、ツリーの次の層に適用される必要のある新しいノードおよび操作のセットにおいて定義された操作は、現在の層内のノードに適用された操作の結果である。そのような実施形態では、新しいノードおよび操作のセットはペアのリストを含み、それらの各ペアは、エントリ(例えば、データまたはルーティング・エントリ)およびエントリに適用される関連する操作(例えば、挿入、削除、更新など)を含んでいる。そのようなペアのリストのそれぞれは、有利なことに、リスト内の操作が適用される必要のあるノードのストレージ識別子に関連付けられてよい。
やはり、ツリーの現在の層の処理中に生成されたエントリおよび操作は、有利なことに、ツリーの現在の層の処理の過程で更新、作成、および削除されたノードの新しい形態をサポートする。
さまざまな実施形態では、ノードの新しい形態をサポートするエントリおよび操作を生成する可能性の高い状況は、処理されたノードが分割されたときに作成される新しいノードを含む。この状況では、ツリーの次の上位層に追加されるエントリを生成する。そのようなエントリは、ツリーの現在の層の処理中に生成されるノードおよび操作のセットに含まれる。
その他の実施形態では、ノードの新しい形態をサポートするエントリおよび操作を生成する可能性の高い状況は、処理されたノードから隣接ノードへのエントリの移動、特に(例えばマージ操作による)エントリの完全な移動を含む。特に、そのような移動が処理されたノードの削除を引き起こす場合、ツリーの次の層内のその削除されたノードを参照しているエントリの削除を必要とすることは、削除されたノードへの参照が現在無効であるため、有利であることがある。
さらにその他の実施形態では、ノードの新しい形態をサポートするエントリおよび操作を生成する可能性が高い状況は、ノードの代表エントリを変更する方法でエントリを変更することを含む、更新操作を含む。この状況では、ツリーの次の上位層から削除するため、またはツリーの次の上位層に挿入するため、あるいはその両方のためにエントリを生成することは、有利である。当業者が本説明を読んだときに理解するように、そのような削除および挿入は、変更されたツリー構造に従って、代表エントリがデータまたはルーティング情報あるいはその両方を正しく識別することを保証することによって、ツリー構造およびルーティング・エントリ内の一貫性の維持に役立てることができる。
好ましい実施形態では、受信された入力内で指定されたヘテロジニアスな操作のセットが特定の層に対して実行され、ノードのバランス調整操作が特定の層に対して実行され、それらの操作の完了時に、新しいノードおよび操作のセットが生成され、更新段階の次の反復で使用するために出力される。
ツリーベース・データ構造の次の層に対する操作が不要な場合、新しいノードおよび操作のセットが空になる。したがって、更新段階の各反復は、ノードおよび操作のセットが空であるかどうかを決定すること、およびそのような決定に応答して更新段階を終了することを含むことができる。更新段階の終了がツリーベース・データ構造のルート・ノードに対する排他的アクセスを解放することを含むか、または更新段階の終了後にそのような排他的アクセスが解放されるか、あるいはその両方が行われてよい。
n層B+ツリーの同時一括処理
n層B+ツリーを含むさらに具体的な状況では、本明細書に記載された手法は、n層B+ツリーがデータ構造として実装されたデータ・ストレージ・システムの性能を大幅に改善するために、同様に活用されてよい。ページ化検索ツリー・データ構造に対するヘテロジニアスな操作の同時処理を容易にするためのコンピュータ実装方法が設計される。
この方法は、好ましくは、ツリーベース・データ構造が記憶されるストレージ・システムで入力を受信することと、その入力に基づいて複数のヘテロジニアスな操作を葉ノードのうちの1つまたは複数に対して同時に一括して実行することとを含む。この入力は、ページ化検索ツリー・データ構造に適用されるヘテロジニアスな操作のセットを識別する。
方法1000と同様に、さまざまな実施形態では、さらに具体的な実装が検索段階を含むことができる。検索段階は、好ましくは、ツリーベース・データ構造の各層をルート・ノード層から葉ノード層へ進む順序で評価することと、ヘテロジニアスな操作のセットが適用される必要のある葉ノードを同時に決定することとを含む。
加えて、検索段階では、ストレージ識別子のリストを含むノードおよび操作のセットの形態で出力を生成する。各ストレージ識別子は、好ましくは、ヘテロジニアスな操作のセットのうちの1つまたは複数が適用される必要のある葉ノードのうちの1つを識別し、各ストレージ識別子は、受信された入力において識別された少なくとも1つのデータ・エントリおよび操作のペアに関連付けられる。
やはり方法1000と同様の方法で、この方法は、ヘテロジニアスな操作のセットのうちの1つまたは複数を、ノードおよび操作のセットにおいて示されたストレージ識別子を有する葉ノード層(例えば、図4に示されたような葉ノード層410c)内の各葉ノードに適用することを伴う更新段階を含むことができる。さらに具体的には、この1番目の反復(すなわちi=0)では、ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する葉ノードごとに、特定の葉ノードに適用されるヘテロジニアスな操作のセットは、好ましくは、この葉ノードのストレージ識別子に関連付けられたデータ・エントリおよび操作のペアに基づく。さらに、好ましいアプローチでは、ヘテロジニアスな操作のセットが、ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する各葉ノードに同時に一括して適用される。
更新段階では、反復が完了するごとに、新しいノードおよび操作のセットを生成することができる。新しいノードおよび操作のセットは、現在の反復において処理される層よりも高い層内のノード、およびそれらのノードに対して実行される操作を識別する。好ましくは、この定義は、現在の層に適用された操作の結果に基づく。各反復でこの出力を生成することは、ヘテロジニアスな操作をノードおよび操作のセットにおいて列挙されたストレージ識別子を有するノードに適用することに少なくとも部分的に基づいて、新しいノードおよび操作のセットを生成することを含む。
したがって、一実施形態では、1番目の反復中に生成された新しいノードおよび操作のセットは、好ましくはストレージ識別子のリストを含み、それらの各ストレージ識別子は、ヘテロジニアスな操作のセットのうちの1つまたは複数が適用される必要のあるB+ツリーの次の上位ノード層内の内部ノードのうちの1つを識別する。それに応じて、次の更新段階の反復(i=1)において、ヘテロジニアスな操作のセットが、新しいノードおよび操作のセットにおいて列挙されたストレージ識別子を有する次の上位ノード層内の内部ノードに適用される。好ましくは、ヘテロジニアスな操作のセットは、ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する第2のノード層内の各内部ノードに同時に一括して適用される。
前述された反復プロセスは、B+ツリー内のエントリに対する必要な変更またはB+ツリー構造に対する変更あるいはその両方の変更の伝達を、層ごとの方式で、それ以上操作が必要でなくなり、ノードおよび操作のセットが空であると決定され、したがって更新段階が終了するまで、続行することができる。好ましくは、ヘテロジニアスな操作のセットは、前の更新段階の反復中に生成されたノードおよび操作のセットにおいて列挙されたストレージ識別子を有する特定の層内の各ノードに同時に一括して適用される。
ツリー操作中の同時操作の分離
開示された本発明の概念は、データ・エントリおよびツリー構造を更新する計算コストを削減することによって、ツリーベース・データ構造を利用する従来のストレージ・システムの機能に改善をもたらす。前述したように、この改善された効率の重要な態様は、ツリーベース・データ構造の文脈において、ヘテロジニアスな操作の同時一括処理に関する本発明の手法から派生する。
開示された本発明の手法の追加の態様は、ツリーベース・データ構造の特定の層内の処理対象のノードの処理を分離することによって、さらに高い計算効率をもたらし、これらのヘテロジニアスな操作が同時に一括して処理されることを容易にする。この分離手法は、さまざまな実施形態において、現在の更新段階の反復における処理対象のノードからエントリを受け取ることができるか、またはそのようなノードにエントリを与えることができるか、あるいはその両方を行うことができるノードに資格を与えることを一般に含む。
実質的に、これによって、更新プロセスが満杯になったノードおよび満杯になっていないノードを効率的に処理できるようにし、そうすることによって、独立した分離された方法で各ノードを処理することを容易にする。この分離は、特にさまざまな操作プロセス・スレッドの並列化と併用された場合に、ツリーの特定の層のノードを同時に処理することによって与えられる効率を向上する。
一般に、開示された本発明の分離手順は、ノードの再バランス調整およびその他の構造変更操作(特にエントリの移動)への関与について考慮されるノードに資格を与えることによって、特定の層に関して、入力されたノードおよび操作のセットにおいて処理するために指定されたノードの処理を分離する。
例えば、1つの態様に従って、資格を満たすことができるノードは、それらのノードがツリー全体の変更/更新プロセスを含む他の操作を妨げずに移動操作、マージ操作などに関与できるように、実行されるどの操作との依存関係も有しないノードである。実際、これらの資格を満たすノードは、(1)処理対象のノードに隣接するノード、(2)それら自体が処理対象のノードの入力セットに含まれていないノード、および(3)特定のケースに依存する1つまたは複数の追加資格基準を満たすノードを含む。これらの追加資格基準については、下でさらに詳細に説明される。
エントリを、処理されるノードから資格を満たすノードに移動させてよい一実施形態では、追加資格基準は、提案された移動が隣接ノードを満杯にするかどうかを含む。この条件が成立する場合、このノードは移動の資格を満たすことはできないが、この条が成立しない場合、このノードは移動の資格を満たすことができる。
反対に、一実施形態では、エントリの移動元のノード自体が移動の結果として満杯でない状態にならない場合、このノードは、ノードから処理対象の隣接ノードへのエントリの移動に関与する資格を満たすことができる。したがって、追加資格基準は、ノードの望ましい使用率の範囲を一般に含み、資格付与プロセスは、好ましくは、ノード使用率レベルを望ましい使用率の範囲に対して評価することと、提案された移動が望ましい使用率の範囲の違反を引き起こすかどうか決定することと、提案された移動がそのような違反を引き起こさないとの決定に応答して、ノードに資格を与えることとを含むことができる。
その他の実施形態では、このシナリオにおける追加資格基準は、移動が提案された移動の移動先の隣接ノードに、保留中の挿入操作をさらに適用することを必要とするかどうかを含むことができる。やはり、挿入操作をさらに適用することを必要とする場合、このノードは資格を満たすことはできないが、挿入操作をさらに適用することを必要としない場合、このノードは資格を満たすことができる。
さらに別のシナリオでは、追加資格基準は、提案されたマージ操作の方向性を含むことができる。
さらに具体的には、資格付与は、隣接ノードとの処理されるノードの提案されたマージが、処理されるノードのすべてのエントリを隣接ノードに移動させること、またはその逆方向に移動させることを含むかどうかを決定することを含むことができる。提案されたマージが処理されるノードのすべてのエントリを隣接ノードに移動させることを含むとの決定に応答して、それらの隣接ノードはエントリの移動の資格を満たすことができる。そのような決定が行われない場合、それらの隣接ノードは資格を満たすことができない。
さらに、許可されたマージの一方向の性質は、隣接ノードではなく処理されるノードが、マージ操作の後に削除の対象になるということを意味する。好ましくは、隣接ノードはマージ操作によって削除されない。
特定のシナリオおよび資格基準にかかわらず、好ましいアプローチでは、移動を他の操作と同時に実行できるようにするために、隣接ノードが排他的権限によってロックされる。ただし、そのような排他的アクセスに関連付けられた遅延を最小限に抑えるために、隣接ノードが、好ましくは一時的にロックされ、さらに好ましくは移動操作の期間中にのみロックされる。移動の完了時に、ノードに対する排他的アクセスが解放され、他の同時処理は効率的な方法で続行することができる。同様に、変更操作によって処理されるノードは、好ましくは排他的アクセスによって一時的にのみロックされ、さらに好ましくは特定の変更操作の期間中にのみロックされる。
当業者が本説明を読んだときに理解するように、1つまたは複数のヘテロジニアスな操作によって処理される特定のノードが、本明細書に記載された移動に対応するのに適した資格を満たす隣接ノードを有することができないという可能なシナリオが確かに存在する。そのような状況では、処理の結果として処理されたノードが満杯になった場合、処理されるノードからエントリを移動させるための資格を満たす隣接ノードが存在しないとの決定に応答して、処理されるノードが好ましくは分割される。特に、処理されるノードに対する挿入操作の処理中に、そのような複数の分割操作が発生する可能性がある。
特に、開示された本発明の実施形態は、さまざまなアプローチに従って、追加された間接アドレスのマッピング(indirect address mapping)を必要とせずに、水平方向の同時処理によって優れた同時性を実現する。追加された間接アドレスのマッピングは、望ましくないことに、追加のオーバーヘッドおよび追加のリソース消費(例えば、追加のI/O操作、処理時間、ストレージなど)をもたらし、これを防ぐことによって、ストレージ・システムの機能が改善される。
ここで図11を参照すると、ノードの分離の同時一括処理を容易にするようにノードを分離するための方法1100のフローチャートが、一実施形態に従って示されている。方法1100は、さまざまな実施形態において、特に図1〜6に示された環境のいずれかにおいて本発明に従って実行されてよい。当然、当業者が本説明を読んだときに理解するように、図11において具体的に説明された処理よりも多いか、または少ない処理が方法1100に含まれてよい。
方法1100の各ステップは、動作環境の任意の適切なコンポーネントによって実行されてよい。例えば、さまざまな実施形態では、方法1100は、ストレージ・システム・マネージャ、または1つまたは複数のプロセッサを備えているその他のデバイスによって、部分的に、または全体的に実行されてよい。プロセッサ(例えば、ハードウェアまたはソフトウェアあるいはその両方において実装され、好ましくは少なくとも1つのハードウェア・コンポーネントを含んでいる処理回路、チップ、またはモジュール、あるいはこれらの組み合わせ)が、方法1100の1つまたは複数のステップを実行するために任意のデバイス内で利用されてよい。プロセッサの例は、中央処理装置(CPU)、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)など、これらの組み合わせ、または当技術分野において知られた任意のその他の適切なコンピューティング・デバイスを含むが、これらに限定されない。
図11に示されているように、方法1100は処理1102から開始することができ、処理1102では、入力が、ツリーベース・データ構造が記憶されるストレージ・デバイスを管理するストレージ・システムで受信される。この入力は、ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する。
方法1100は処理1104も含み、処理1104では、ヘテロジニアスな操作のセットのうちの1つまたは複数が適用されるツリーベース・データ構造の1つまたは複数のノードが識別されるか、または決定される。この決定は、さまざまな実施形態において、本説明に一致する任意の適切な方法で実行されてよい。好ましいアプローチでは、この決定は、前述したように、ツリーベース・データ構造内で入力エントリを検索し、それらの入力エントリを収容しているノードを決定することに基づくか、あるいは検索段階によって、または前の更新段階の反復によって生成されたノードおよび操作の出力に基づく。
さらに方法1100は処理1106を含み、処理1106では、1つまたは複数のノードに適用されるヘテロジニアスな操作のセットのうちの1つまたは複数のグループが識別されるか、または決定される。この決定は、さまざまな実施形態において、本説明に一致する任意の適切な方法で実行されてよい。好ましくは、この決定は、1つまたは複数の操作がどのノードに適用されるかに基づいて達成され、さまざまなアプローチでは、ノードおよび操作のセットに含まれるデータに基づいて達成されてよい。
好ましいアプローチでは、この決定は、前述したように、検索段階または前の更新段階の反復から出力されたノードおよび操作に少なくとも部分的に基づく。特に、当業者が本説明を読んだときに理解するように、この決定は、ヘテロジニアスな操作が適用される必要のあるノードに従ってヘテロジニアスな操作をグループ化することを含むことができる。
その他の好ましいアプローチでは、ノードおよび操作のセット内の各ノードは、ツリーベース・データ構造の同じ層を占める。
方法1100は、処理1108において、ノードおよび操作のセット内の各ノードの処理を、独立して処理するために分離することを含む。本明細書において理解されているように、ノード処理の分離は、1つまたは複数のヘテロジニアスな操作を使用してノードを処理できるように構成された任意の適切な手法またはメカニズムを含み、この処理は、ノードおよび操作のセット内の他のノードに対するヘテロジニアスな操作の処理とは無関係に発生させる。好ましくは、ノードの分離は、セット内のノードに適用されるヘテロジニアスな操作のセット全体が、ツリー内(特に現在の層内)の他のノードに対するヘテロジニアスな操作の処理を妨げずに実行されることが可能であるように、ノードおよび操作のセット内の各ノードを分離することを含む。例えば、一実施形態では、分離されたノードの独立した処理は、異なるプロセス・スレッド上で各ノードを処理することを含む。
したがって、方法1100は処理1110も含み、処理1110では、ノードおよび操作のセット内の各ノードが、ノードのセットに適用されると決定されたヘテロジニアスな操作のセットのうちの1つまたは複数のグループを使用して処理される。ノードのセット内の各ノードは、好ましくは、同時に独立して処理される。
好ましくは、各プロセス・スレッドが実質的に同時に実行されるように、すべてのノードが同時に処理される。当然、一部のスレッドの実行時間が他のスレッドよりも長くなる場合があるが、当業者が本説明を読んだときに理解するように、同時の独立した処理は、セット内のすべてのスレッドの処理が実質的に同時に開始され、すべてのスレッドが実質的に同一の時間ウィンドウの間に処理される実施形態を含む。
当業者が本説明を読んだときに理解するように、上で示された方法1100は、セット内のノードに適用されると決定された1つまたは複数のヘテロジニアスな操作のグループを使用する、ノードのセットの独立した分離された同時処理を企図する。当然、方法1100は、上で示された方法と同様の方法で、ノードの複数の異なるセットに対してヘテロジニアスな操作の複数の異なるグループを処理することを含むことができる。
例えば、一実施形態例では、方法1100は、ノードの異なるセットに対して操作の複数の異なるグループを処理することを含むことができ、さまざまなセット内のすべてのノードは、ツリーベース・データ構造の1つの層を占める。簡略化のために、ツリーベース・データ構造の例は、(例えば図4〜6に示されているように)4つのノードN1、N2、N3、およびN4を含んでいる層を含むと仮定する。
そのようなシナリオの例では、方法1100は、更新操作および挿入操作を含んでいるヘテロジニアスな操作のグループが、N1、N2、およびN3を含んでいるノードのセットに適用される必要があると決定すること、ならびに更新操作および削除操作を含んでいるヘテロジニアスな操作の異なるグループが、N3およびN4を含んでいるノードのセットに適用される必要があると決定することを含むことができる。当業者が本説明を読んだときに理解するように、任意の数のそのようなグループおよびセットが決定されてよく、本明細書において説明されているように、独立した同時処理のために、対応するノードが分離されてよい。
当然、方法1100は、前述された特徴および下で示される特徴の例などの、任意の数の追加または代替あるいはその両方の特徴を含むことができる。
一実施形態では、方法1100は、1つまたは複数のノードがノードの再バランス調整操作に関与する資格を満たすかどうかを決定することを含むことができる。好ましくは、この決定は、ノード再バランス調整基準(node re-balancing criteria)に基づき、具体的には、次の考慮事項の任意の組み合わせ、並べ替え、または統合を含むことができる。
1つのアプローチでは、1つまたは複数のノードがノードの再バランス調整に関与する資格を満たすかどうかの決定は、ノードのセット内の少なくとも1つのノードに隣接する1つまたは複数のノードを識別することと、1つまたは複数の隣接ノードのいずれかがノードのセットから除外されるかどうかを決定することと、1つまたは複数の隣接ノードのうちの少なくとも1つがノードのセットから除外されるとの決定に応答して、1つまたは複数の隣接ノードのうちの少なくとも1つに資格を与えることを含む。好ましくは、隣接ノードは、ストレージ・システムによって受信された入力内で指定されたどの操作の対象でもない。
好ましい実施形態では、ノードの再バランス調整操作は、ノードのセット内のノードとノードのセットから除外されたノードとの間のエントリの移動を少なくとも含む。当然、方法1100は、当業者が本説明を読んだときに理解するように、更新操作、分割操作、マージ操作などのノードの再バランス調整操作を同様に含むことができる。
エントリの移動が、ノードのセット内のノードから、ノードのセットから除外されたノードへエントリを移動させることを含んでいる実施形態では、1つまたは複数のノードが、ノードの再バランス調整操作に関与する資格を満たすかどうかを決定することは、次の構成操作のうちの1つまたは複数を含むことができる。1つのアプローチでは、ノードが資格を満たすかどうかを決定することは、ノードのセットから除外されたノードがエントリの移動の結果として満杯になるかどうかを決定することと、ノードのセットから除外されたノードがエントリの移動の結果として満杯にならないとの決定に応答して、ノードのセットから除外されたノードに移動の資格を与えることとを含む。
さらに、ノードのセットから除外されたノードがエントリの移動の結果として満杯になるかどうかを決定することは、移動後のノードのセットから除外されたノードの使用率レベルを推定することと、ノードのセットから除外されたノードの推定された使用率レベルを、最大使用率しきい値またはノードのストレージ容量と比較することとを含むことができる。推定された使用率レベルが最大使用率しきい値またはノードのストレージ容量を超えない場合、そのノードは資格が与えられてよい。推定された使用率レベルが最大使用率しきい値またはノードのストレージ容量を超える場合、好ましくは、そのノードは資格が与えられない。
同様の方法で、エントリの移動が、ノードのセットから除外されたノードから、ノードのセット内のノードへエントリを移動させることを含んでいる実施形態では、1つまたは複数のノードが、ノードの再バランス調整操作に関与する資格を満たすかどうかを決定することは、次を含むことができる。一実施形態では、このプロセスは、ノードの共通セットから除外されたノードがエントリの移動の結果として満杯でなくなるかどうかを決定することと、ノードのセットから除外されたノードがエントリの移動の結果として満杯でなくなることがないとの決定に応答して、ノードのセットから除外されたノードに移動の資格を与えることとを含む。
したがって、ノードのセットから除外されたノードがエントリの移動の結果として満杯でなくなるかどうかを決定することは、移動後のノードのセットから除外されたノードの使用率レベルを推定することと、ノードのセットから除外されたノードの推定された使用率レベルを、最小使用率しきい値と比較することとを含むことができる。推定された使用率レベルが最小使用率しきい値を満たすか、または超える場合、そのノードは資格が与えられてよい。推定された使用率レベルが最小使用率しきい値を満たさないか、または超えない場合、好ましくは、そのノードは資格が与えられない。
さらにその他の実施形態では、ノードの再バランス調整操作はマージ操作を含むことができる。したがって、この方法は、ノードのセット内のノード内のすべてのエントリを、ノードのセットから除外されたノードに移動させることを含むことができる。1つまたは複数のノードが、マージ操作を含んでいるノードの再バランス調整操作に関与する資格を満たすかどうかを決定することは、好ましくは、ノードのセットから除外されたノードがエントリの移動の結果として満杯になるかどうかを決定することと、ノードのセットから除外されたノードがエントリの移動の結果として満杯にならないとの決定に応答して、ノードのセットから除外されたノードに移動の資格を与えることとを含む。マージ操作を完了させるために、すべてのエントリをセットから除外されたノードに移動させた後に、エントリの移動元だった、空になったノードのセット内のノードが削除される。
上で暗に示されたように、さまざまな実施形態では、ノードの再バランス調整は、ノードの再バランス調整操作に関与する資格を満たすノードへの排他的アクセスを取得することを含むことができる。好ましくは、排他的アクセスは、ノードの再バランス調整操作に関与するノードの更新を開始する前に取得され、さらに好ましくは、ノードの再バランス調整操作に関与するノードの更新を開始する直前に取得される。このプロセスの実施形態例は、ノードの再バランス調整操作に関与する資格を満たすノードを使用してノードの再バランス調整操作を実行することと、ノードの再バランス調整操作の完了時に、ノードの再バランス調整操作に関与する資格を満たすノードに対する排他的アクセスを解放することとを含むことができる。したがって、排他的アクセスは、好ましくは、ノードの再バランス調整操作の期間に実質的に等しい時間の間存在する。
さらにその他の実施形態では、ノードの再バランス調整操作は、例えば分割操作に従って、ノードのセット内のノードからのエントリの移動を含むことができる。したがって、1つまたは複数のノードがノードの再バランス調整操作に関する資格を満たすかどうかを決定することは、ノードのセット内の少なくとも1つのノードに隣接する1つまたは複数のノードを識別することと、1つまたは複数の隣接ノードのいずれかがノードのセットから除外されるかどうかを決定することと、ノードのセットから除外された隣接ノードが、エントリの移動の結果として満杯になるかどうかを決定することと、ノードのセットから除外された隣接ノードが、エントリの移動の結果として満杯になるとの決定に応答して、ノードのセット内のノードを分割することとを含むことができる。
当然、前述したことは、同時一括処理のためにノードを分離するための発明の手法の単なる実施形態例であり、本開示の範囲を限定していると見なされるべきではない。
効率的な操作の順序付け
上で参照されているように、開示された本発明の概念は、ノードに適用されるヘテロジニアスな操作の新しい効率的な順序付けを提供することによって、従来のストレージ・システム・アーキテクチャでの機能の改善ももたらす。ヘテロジニアスな操作は、ヘテロジニアスな操作が影響を与えるノードに従ってグループ化された後、操作の適用から生じる構造の変更を最小限に抑える特定の順序で、ヘテロジニアスな操作のタイプに従って各グループ内で順序付けされる。これによって、アルゴリズムの各段階によって生成された出力操作セットのサイズが大幅に減少し、したがってツリーベース・データ構造の処理を完了させるために必要な操作の総数が減少し、本手法によってもたらされる計算効率の向上に寄与するという有利な結果が得られる。
例えば、一実施形態では、ノードの特定のグループは、特定のグループ内の各ノードのエントリが変更される更新操作による影響を受ける。ノードは処理のためにグループ化され、そのグループ内で、更新操作(例えば、挿入、削除など)を実行することによって必要になる構造の変更が評価される。
更新および任意の望ましいノード・バランス調整を達成するために必要な操作のセットを決定するときに、操作のセットは、好ましくは本明細書において示された好ましい順序に従って実行される。やはり、好ましい順序は、更新操作の実行後に削除操作を実行し、その後、挿入操作を実行することを含む。ただし、他の実施形態では、ユーザによって定義された順序が(例えば受信された入力内で)強制され、実施されてよい。
したがって、図12に示されているように、方法1200は処理1202から開始することができ、処理1202では、入力が、ツリーベース・データ構造が記憶されるストレージ・デバイスを管理するストレージ・システムで受信される。この入力は、ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する。
方法1200は処理1204も含み、処理1204では、ヘテロジニアスな操作のセットのうちの1つまたは複数が適用されるツリーベース・データ構造の1つまたは複数のノードが識別されるか、または決定される。この決定は、さまざまな実施形態において、本説明に一致する任意の適切な方法で達成されてよい。好ましいアプローチでは、この決定は、前述したように、ツリーベース・データ構造内で入力エントリを検索し、それらの入力エントリを収容しているノードを決定することに基づくか、あるいは検索段階によって、または前の更新段階の反復によって生成されたノードおよび操作の出力に基づく。
さらに方法1200は処理1206を含み、処理1206では、1つまたは複数のノードに適用されるヘテロジニアスな操作のセットのうちの1つまたは複数のグループが識別されるか、または決定される。この決定は、さまざまな実施形態において、本説明に一致する任意の適切な方法で達成されてよい。
好ましいアプローチでは、この決定は、前述したように、検索段階から出力されたノードおよび操作、または更新段階の前の反復から出力されたノードおよび操作のセット、あるいはその両方に少なくとも部分的に基づく。特に、この決定は、当業者が本説明を読んだときに理解するように、ノードのセットのストレージ識別子に基づいてノードのセットを識別することと、ノードのセットがすべて、挿入操作、削除操作、マージ操作、分割操作、更新操作などのうちの1つまたは複数の対象にされると決定することとを含むことができる。
その他の好ましいアプローチでは、1つまたは複数のノードのセット内の各ノードは、ツリーベース・データ構造の同じ層を占める。
方法1200は処理1208をさらに包含し、処理1208においてヘテロジニアスな操作のセットのうちの1つまたは複数のグループが適用される。重要なことに、各グループ内で適用される操作のセットは、事前に定義された順序に従って適用される。好ましくは、事前に定義された順序は、本明細書において示された好ましい順序である。
当然、当業者が本説明を読んだときに理解するように、方法1200は、本明細書に記載された任意の数の追加の機能または特徴あるいはその両方を含むこともできる。さまざまな実施形態では、方法1200は、以下の特徴または機能あるいはその両方のうちの任意の1つまたは複数を含むことができる。
有利なことに、事前に定義された順序に従ってヘテロジニアスな操作のセットをノードのセットに適用することを含む開示された本発明の実施形態は、ツリーベース・データ構造の構造の変更の数を最小限に抑えること、およびヘテロジニアスな操作のセットをツリーベース・データ構造の特定の層に適用した結果として生成される出力ノードおよび操作のセットのサイズを削減することによって、ストレージ・システムの機能を改善する。
一般的に前述したように、事前に定義された順序は、更新操作を適用してから、削除操作を適用した後に、挿入操作を適用することを含む。したがって、一実施形態では、方法1200は、ヘテロジニアスな操作のセットにおいて識別された削除操作を実行する前にヘテロジニアスな操作のセットにおいて識別された更新操作を実行することと、ヘテロジニアスな操作のセットにおいて識別された挿入操作を実行する前にヘテロジニアスな操作のセットにおいて識別された削除操作を実行することとを含むことができる。
同様に、その他の実施形態では、事前に定義された順序は、好ましくは特定のノードに対するヘテロジニアスな操作のセットにおいて識別された更新操作、削除操作、および挿入操作をすべて実行した後に、ノードの再バランス調整操作(例えば、エントリの移動操作、分割操作、またはマージ操作)を実行することを含むことができる。ノードの再バランス調整を実行することは、好ましくは、入力において指定された操作のグループを実行した後に、ノードのセット内のノードが満杯であるか、または満杯でないかを決定することに応答して実行される。
その他のアプローチでは、事前に定義された順序は、ノードのセット内のノードが、操作のグループを実行する過程で満杯になるとの決定に応答して分割操作を実行することを含む。
さらに、一部の実施形態において前述したように、操作の順序はユーザによって指定されてよく、詳細には、操作がデータ・エントリを記憶しているノードのセットに適用されるときに指定されてよく、さらに詳細には、操作が本明細書に記載された更新段階の1番目の反復中にB+ツリーの葉ノードのセットに適用されるときに指定されてよい。
したがって、方法1200は、追加または代替あるいはその両方として、ユーザによって提供された順序が入力において指定されたとの決定に応答して、事前に定義された順序をオーバーライドすることを含むことができ、このユーザによって提供された入力は、データ・エントリを記憶するツリーベース・データ構造に適用されるヘテロジニアスな操作のセットのうちの1つまたは複数に対応する。
当然、前述したことは、同時一括処理のためにノードを分離するための発明の手法の単なる実施形態例であり、本開示の範囲を限定していると見なされるべきではない。
開示された本手法は、前述の発明の概念を使用して多くの有益な特徴を可能にして提供し、例えばストレージ・システムのアクセス操作、I/O、およびプロセッサの負荷を削減することによって、従来のデータ・ストレージ・システムの機能を改善するように単独で、および組み合わせて動作させる。さらに具体的には、開示された本発明の概念は、ヘテロジニアスな操作のセットの効率的な同時処理に関して最適化される方法で、ヘテロジニアスなタイプの操作を一括して処理することを可能にする。加えて、ツリーの現在の層内の処理対象の各ノードの処理の分離は、操作の効率的な同時一括処理を可能にする。さらに、アルゴリズムの効率に寄与する操作の最大限に効率的な順序を定義することによって、操作を適用することから生じる構造の変更が最小限に抑えられる。
したがって、開示された本発明の概念は、データ構造にアクセスして変更するためにトランザクションを使用する応用によく適合し、そのような応用のための包括的な解決策を提供するが、そのような応用は、操作を蓄積してから、データ構造に適用する前に操作を減らす可能性のある多くの使用事例および応用では、非常に一般的なアーキテクチャである。さらに具体的には、開示された本発明の概念は、ページ化検索ツリー・データ構造の一般的なファミリに適用可能であり、多くの応用において広く使用されるコンポーネントの効率を改善するために、広い適用可能範囲を有する解決策を提供する。ただし、これらの開示が、データベース・システム、ファイル・システム、ストレージおよび重複排除システム(storage and deduplication systems)などの、ツリーベース・データ構造を使用する多くのシステムに適用できる概念を提示し、したがって広い適用可能性を有するということが理解されるべきである。
本明細書において提示された説明から複数の組み合わせを作成して、前述のシステムまたは方法あるいはその両方のさまざまな特徴が任意の方法で組み合わされてよいということは明らかである。本発明の実施形態が、サービスをオンデマンドで提供するように顧客のために展開されるサービスの形態で提供されてよいということがさらに理解されるであろう。
以上でさまざまな実施形態が説明されたが、これらの実施形態は単に例として提示されており、これらに限定されないということが理解されるべきである。したがって、好ましい実施形態の広さおよび範囲は、前述された実施形態例のいずれかによって限定されるべきではなく、添付の特許請求の範囲およびそれらと均等なもののみに従って定められるべきである。