(57)【特許請求の範囲】
【請求項１】
ツリーベース・データ構造に対する操作の同時処理のためのコンピュータ実装方法であって、
前記ツリーベース・データ構造が記憶されるストレージ・デバイスを管理するストレージ・システムで入力を受信することであって、前記入力が前記ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する、前記受信することと、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数が検索段階の部分として適用される前記ツリーベース・データ構造の１つまたは複数のノードを決定することと、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数を更新段階の部分として同時に一括して実行することであって、追加された間接アドレスのマッピングを利用することなしに、前記同時に一括して実行することと、を含み、
前記ツリーベース・データ構造のノードが、前記検索段階において共有された権限を使用してアクセスされ、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数のいずれかに適用されるノードが、前記更新段階の間に排他的権限を使用してアクセスされる、コンピュータ実装方法。
【請求項２】
前記ヘテロジニアスな操作のセットが挿入操作、削除操作、および更新操作のうちの１つまたは複数を含み、
前記入力が、前記 ツリーベース・データ構造への参照と、ペアリストとを含み、
各々のペアが、データ・エントリーおよび少なくとも一つの関連する操作をからなる、請求項１に記載の方法。
【請求項３】
前記決定することが、前記ツリーベース・データ構造の葉ノードにアクセスすることを含まず、
前記葉ノードが１つまたは複数のデータ・エントリを記憶し、
前記データ・エントリの１つまたは複数のうちの少なくとも一部が前記入力において指定される、請求項１に記載の方法。
【請求項４】
前記検索段階が、
前記ツリーベース・データ構造の各層内のノードを降順に評価することを含み、
前記評価することが、層ごとに、評価対象の前記層内の前記ノードのいずれかが、
前記ツリー内の前記検索をさらにルーティングするために使用されるノード、および
前記ヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のあるノードのうちの１つまたは複数であるかどうかを同時に決定することを含み、
前記検索段階が、ノードおよび操作のセットを含んでいる出力を生成し、前記ノードおよび操作のセットがストレージ識別子のリストを含んでおり、
各ストレージ識別子が、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のある前記ノードのうちの１つを識別し、
前記ストレージ識別子の少なくとも一部が、前記検索段階によって生成された少なくとも１つの操作に関連付けられる、請求項１に記載の方法。
【請求項５】
前記更新段階が、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数を前記ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する各ノードに適用することを含み、
前記ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する前記ノードごとに、前記ノードに適用される前記ヘテロジニアスな操作のセットのうちの前記１つまたは複数が、前記ノードの前記ストレージ識別子に関連付けられた前記少なくとも１つの操作に基づき、
前記ヘテロジニアスな操作のセットのうちの前記１つまたは複数が、前記ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する前記ノードのそれぞれに同時に一括して独立して適用される、請求項４に記載の方法。
【請求項６】
前記ヘテロジニアスな操作のセットのうちの前記１つまたは複数を前記ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する各ノードに適用することが、
１つまたは複数の新しいノードを挿入すること、
１つまたは複数の既存のノードを削除すること、
１つまたは複数の既存のノードをマージすること、
１つまたは複数の既存のノードを分割すること、および
１つまたは複数の既存のノードの１つまたは複数のデータ・エントリを更新すること
のうちの１つまたは複数を含む、請求項５に記載の方法。
【請求項７】
処理されたノードが分割されたときに作成された新しいノードが、次の更新段階において前記ツリーベース・データ構造の次の上位層に追加されるエントリを生成し、
処理されたノードから兄弟ノードへのエントリの完全な移動が、前記次の更新段階における前記ツリーの前記次の上位層内のエントリの削除操作を生成し、
エントリの内容が変更され、その結果、その代表エントリが変更された処理されるノードによって、前記次の更新段階において削除されて前記ツリーの前記次の上位層に挿入されるエントリが生成される、請求項６に記載の方法。
【請求項８】
前記更新段階が反復プロセスであり、
各更新段階によって生成される前記操作が、現在の更新段階の反復におけるノードの作成、ノードの削除、およびノードの変更から生じる、請求項５に記載の方法。
【請求項９】
前記更新段階が、前記ヘテロジニアスな操作のセットのうちの前記１つまたは複数を前記ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する各ノードに適用することに少なくとも部分的に基づいて、新しいノードおよび操作のセットを生成することを含み、
前記新しいノードおよび操作のセットがストレージ識別子のリストを含み、
前記新しいノードおよび操作のセット内の各ストレージ識別子が、新しいヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のある前記ノードのうちの１つを識別し、
前記更新段階が、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数を前記新しいノードおよび操作のセットにおいて列挙されたストレージ識別子を有する各ノードに適用することを含み、
前記ヘテロジニアスな操作のセットのうちの前記１つまたは複数が、前記新しいノードおよび操作のセットにおいて列挙されたストレージ識別子を有する前記ノードのそれぞれに同時に一括して適用される、請求項５に記載の方法。
【請求項１０】
ツリーベース・データ構造に対する操作の同時処理のためのコンピュータ実装方法であって、
前記ツリーベース・データ構造が記憶されるストレージ・デバイスを管理するストレージ・システムで入力を受信することであって、前記入力が前記ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する、前記受信することと、
検索段階と更新段階とを含み、
前記検索段階が、
前記ツリーベース・データ構造の各層内のノードを降順に評価することを含み、
前記評価することが、層ごとに、評価対象の前記層内の前記ノードのいずれかが、 前記ツリー内の前記検索をさらにルーティングするために使用されるノード、および  前記ヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のあるノードのうちの１つまたは複数であるかどうかを同時に決定することを含み、
前記更新段階が、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数を前記ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する各ノードに適用することを含み、
前記ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する前記ノードごとに、前記ノードに適用される前記ヘテロジニアスな操作のセットのうちの前記１つまたは複数が、前記ノードの前記ストレージ識別子に関連付けられた前記少なくとも１つの操作に基づき、
前記ヘテロジニアスな操作のセットのうちの前記１つまたは複数が、前記ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する前記ノードのそれぞれに同時に一括して独立して適用されること、を特徴とし、
前記ヘテロジニアスな操作のセットのうちの前記１つまたは複数を前記ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する前記ノードのそれぞれに適用することに応答して生成された新しいノードおよび操作のセットが、前記ツリーベース・データ構造の次の上位層内のノードに対応するいずれかのストレージ識別子を含んでいるかどうかを決定することを含み、
前記新しいノードおよび操作のセットが前記ツリーベース・データ構造の次の上位層内のノードに対応するストレージ識別子を含んでいないとの決定に応答して前記更新段階を終了する、コンピュータ実装方法 。
【請求項１１】
前記ツリーベース・データ構造が複数のノード層を含み、前記方法が、前記更新段階を前記複数のノード層のうちの１つまたは複数に対して反復方式で実行することを含み、
前記更新段階の各反復が、前記更新段階の次の反復において更新されるノード層に関する新しいノードおよび操作のセットを生成し、
前記更新段階の前記次の反復において更新される前記ノード層が、前記更新段階の現在の反復において前記更新段階が実行されている前記ノード層の上にある、請求項５に記載の方法。
【請求項１２】
前記ヘテロジニアスな操作のセットのうちの１つまたは複数を前記ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する各ノードに同時に一括して適用することが、異なるプロセス・スレッドを使用して操作を各ノードに適用することを含み、
各プロセス・スレッドが並列に処理される、請求項５に記載の方法。
【請求項１３】
ツリーベース・データ構造に対するヘテロジニアスな操作の同時処理のためのコンピュータ実装方法であって、
前記ツリーベース・データ構造が、
ルート・ノードで構成されるルート・ノード層と、
前記ルート・ノード層の下にあり、少なくとも２つの内部ノードを含んでいる第１のノード層と、
前記第１のノード層の下にあり、少なくとも４つの内部ノードを含んでいる第２のノード層と、
前記第２のノード層の下にあり、複数の葉ノードで構成される葉ノード層とを含み、
前記方法が、
前記ツリーベース・データ構造が記憶されるストレージ・システムで入力を受信することであって、前記入力が前記ツリーベース・データ構造の１つまたは複数の葉ノードに適用されるヘテロジニアスな操作のセットを識別する、前記受信することと、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数が検索段階の部分として適用される前記ツリーベース・データ構造の１つまたは複数のノードを決定することと、
前記入力に基づいて前記ヘテロジニアスな操作のセットのうちの１つまたは複数を前記葉ノードのうちの１つまたは複数に対して更新段階の部分として同時に一括して実行することであって、追加された間接アドレスのマッピングを利用することなし、前記同時に一括して実行することと、を含み、
前記ツリーベース・データ構造のノードが、前記検索段階において共有された権限を使用してアクセスされ、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数のいずれかに適用されるノードが、前記更新段階の間に排他的権限を使用してアクセスされる、
コンピュータ実装方法。
【請求項１４】
前記検索段階が、
前記ツリーベース・データ構造の各層を前記ルート・ノード層から前記葉ノード層へ進む降順で評価することと、
前記ヘテロジニアスな操作のセットが適用される必要のある前記葉ノードを同時に決定することとを含む、請求項１３に記載の方法。
【請求項１５】
前記検索段階が、ノードおよび操作のセットを含んでいる出力を生成し、前記ノードおよび操作のセットがストレージ識別子のリストを含んでおり、
各ストレージ識別子が、前記ヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のある前記葉ノードのうちの１つを識別し、
前記ストレージ識別子のそれぞれが、前記受信された入力において識別された少なくとも１つのデータ・エントリ／操作ペアに関連付けられる、請求項１４に記載の方法。
【請求項１６】
前記更新段階が、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数を前記ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する各葉ノードに適用することを含み、
前記ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する前記葉ノードごとに、前記葉ノードに適用される前記ヘテロジニアスな操作のセットのうちの前記１つまたは複数が、前記葉ノードの前記ストレージ識別子に関連付けられた前記少なくとも１つのデータ・エントリ／操作ペアに基づき、
前記ヘテロジニアスな操作のセットが、前記ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する前記葉ノードのそれぞれに同時に一括して適用される、請求項１５に記載の方法。
【請求項１７】
前記更新段階が、
前記ヘテロジニアスな操作のセットのうちの前記１つまたは複数を前記ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する前記葉ノードに適用することに少なくとも部分的に基づいて新しいノードおよび操作のセットを生成することであって、前記新しいノードおよび操作のセットがストレージ識別子のリストを含み、各ストレージ識別子が、前記ヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のある前記第２のノード層内の前記内部ノードのうちの１つを識別する、前記生成することと、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数を前記新しいノードおよび操作のセットにおいて列挙されたストレージ識別子を有する前記第２のノード層内の前記内部ノードに適用することと、を含み、
前記ヘテロジニアスな操作のセットのうちの前記１つまたは複数が、前記新しいノードおよび操作のセットにおいて列挙されたストレージ識別子を有する前記第２のノード層内の前記内部ノードのそれぞれに同時に一括して適用される、請求項１６に記載の方法。
【請求項１８】
前記更新段階が、
前記ヘテロジニアスな操作のセットのうちの前記１つまたは複数を前記新しいノードおよび操作のセットにおいて列挙されたストレージ識別子を有する前記内部ノードに適用することに少なくとも部分的に基づいて第２の新しいノードおよび操作のセットを生成することであって、前記第２の新しいノードおよび操作のセットがストレージ識別子のリストを含み、各ストレージ識別子が、前記ヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のある前記第１のノード層内の前記内部ノードのうちの１つを識別する、前記生成することと、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数を前記第２の新しいノードおよび操作のセットにおいて列挙されたストレージ識別子を有する前記第１のノード層内の前記内部ノードに適用することと、を含み、
前記ヘテロジニアスな操作のセットのうちの前記１つまたは複数が、前記第２の新しいノードおよび操作のセットにおいて列挙されたストレージ識別子を有する前記第１のノード層内の前記内部ノードのそれぞれに同時に一括して適用される、請求項１７に記載の方法。
【請求項１９】
ツリーベース・データ構造に対する一括操作の処理のためのコンピュータ・プログラムであって、
前記ツリーベース・データ構造が記憶されるストレージ・デバイスを管理するストレージ・システムで入力を受信することであって、前記入力が、前記ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する、前記受信することと、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数が検索段階の部分として適用される前記ツリーベース・データ構造の１つまたは複数のノードを決定することと、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数を更新段階の部分として同時に一括して実行することであって、追加された間接アドレスのマッピングを利用することなしに、前記同時に一括して実行することと、を含み、
前記ツリーベース・データ構造のノードが、前記検索段階において共有された権限を使用してアクセスされ、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数のいずれかに適用されるノードが、前記更新段階の間に排他的権限を使用してアクセスされることを特徴とする、
前記ステップをコンピュータに実行させるコンピュータ・プログラム。
【請求項２０】
ツリーベース・データ構造に対する操作の同時処理のためのコンピュータ実装方法であって、
前記ツリーベース・データ構造が記憶されるストレージ・デバイスを管理するストレージ・システムで入力を受信することであって、前記入力が、前記ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する、前記受信することと、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数が適用される前記ツリーベース・データ構造の１つまたは複数のノードを決定することと、
前記ヘテロジニアスな操作のセットが適用される前記１つまたは複数のノードに従って前記ヘテロジニアスな操作のセットのうちの１つまたは複数のグループを決定することと、
事前に定義された順序に従って前記１つまたは複数のグループごとに前記ヘテロジニアスな操作のセットを適用することと
を含む、コンピュータ実装方法。
【請求項２１】
ツリーベース・データ構造に対する操作の同時処理のためのストレージシステムであって、
前記ツリーベース・データ構造が記憶されるストレージ・デバイスを管理するストレージ・システムで入力を受信することであって、前記入力が、前記ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する、前記受信することと、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数が検索段階の部分として適用される前記ツリーベース・データ構造の１つまたは複数のノードを決定することと、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数を更新段階の部分として同時に一括して実行することであって、追加された間接アドレスのマッピングを利用することなしに、前記同時に一括して実行することと、を含み、
前記ツリーベース・データ構造のノードが、前記検索段階において共有された権限を使用してアクセスされ、
前記ヘテロジニアスな操作のセットのうちの１つまたは複数のいずれかに適用されるノードが、前記更新段階の間に排他的権限を使用してアクセスされる、ストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ構造の処理に関連し、さらに具体的には、本発明はツリーベース・データ構造（例えば、ページ化検索ツリー・データ構造（paged search tree data structures））において構造化されたデータの効率的な同時一括処理およびデータ構造自体の処理に関する。
【背景技術】
【０００２】
従来のストレージ・システムに記憶されたデータは、多数の既知のデータ構造のうちの１つに従って構造化される。通常、データは、対象のデータの検索を容易にするためにデータまたはルーティング情報あるいはその両方を記憶するノードの分岐ネットワークを構成するページ化検索ツリーなどの、ツリーベース・データ構造に従って構造化される。ページ化検索ツリーでは、各ノードは通常、ディスク・ページに対応する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
したがって、入力／出力（Ｉ／Ｏ）の効率を向上させ、データ・エントリおよび対応するデータ構造の記憶、構造化、検索、および更新の計算コストを減らすことによって、多様なデータ・ストレージ・システムの機能およびスループットを改善するために、ツリーベース・データ構造の変更の効率を改善するためのシステムおよび手法を提供することは有益である。
【課題を解決するための手段】
【０００４】
一実施形態では、ツリーベース・データ構造に対する操作の同時処理のためのコンピュータ実装方法が、ツリーベース・データ構造が記憶されるストレージ・デバイスを管理するストレージ・システムで入力を受信することであって、この入力がツリーベース・データ構造に適用されるヘテロジニアスな操作（heterogeneous operation）のセットを識別する、受信することと、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用されるツリーベース・データ構造の１つまたは複数のノードを決定することと、ヘテロジニアスな操作のセットのうちの１つまたは複数を同時に一括して実行することとを含む。
【０００５】
別の実施形態では、ツリーベース・データ構造に対する操作の同時処理のためのコンピュータ・プログラム製品が、具現化されたプログラム命令を含んでいるコンピュータ可読記憶媒体を含む。コンピュータ可読記憶媒体は、本質的に一時的信号ではなく、プログラム命令は、ストレージ・システム・マネージャによって実行可能であり、ストレージ・システム・マネージャに方法を実行させる。この方法は、ストレージ・システム・マネージャによって、ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する入力を受信することと、ストレージ・システム・マネージャによって、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用されるツリーベース・データ構造の１つまたは複数のノードを決定することと、ストレージ・システム・マネージャによって、ヘテロジニアスな操作のセットのうちの１つまたは複数を同時に一括して実行することとを含む。
【０００６】
さらに別の実施形態では、ツリーベース・データ構造に対する操作の同時処理のためのストレージ・システムが、ストレージ・システム・マネージャ、およびストレージ・システム・マネージャに統合されるか、またはストレージ・システム・マネージャによって実行可能であるか、あるいはその両方である論理を含む。この論理は、ストレージ・システムに、ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する入力を受信することと、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用されるツリーベース・データ構造の１つまたは複数のノードを決定することと、ヘテロジニアスな操作のセットのうちの１つまたは複数を同時に一括して実行することとを実行させるように構成される。
【０００７】
本発明のその他の態様および実施形態は、本発明の原理を図面と併せて例として説明する、以下の詳細な説明から明らかになる。
【０００８】
ここで、添付の図面を単に例として参照し、本発明の実施形態について説明する。
【図面の簡単な説明】
【０００９】
【図１】一実施形態に記載されたネットワーク・アーキテクチャを示す図である。
【図２】一実施形態に記載された、図１のサーバまたはクライアントあるいはその両方に関連付けられてよい代表的ハードウェア環境を示す図である。
【図３】一実施形態に記載された層型データ・ストレージ・システム（tiered datastorage system）を示す図である。
【図４】一実施形態に記載された、バランス調整された３層ページ化検索ツリーの簡略図である。
【図５】一実施形態に記載された、バランス調整されない３層ページ化検索ツリーの簡略図である。
【図６】一実施形態に記載された、バランス調整されない多層ページ化検索ツリーの簡略図である。
【図７】好ましい実施形態に記載された、ｎ層ツリーベース・データ構造、および検索段階および更新段階の間のツリーベース・データ構造に関する処理の進行の簡略図である。
【図８】開示された本発明の概念の好ましい実施形態に記載された、検索段階の間の処理を表すフローチャートである。
【図９】開示された本発明の概念の好ましい実施形態に記載された、検索段階の間の処理を表すフローチャートである。
【図１０】一実施形態に記載された、ページ化検索ツリー・データ構造に対するヘテロジニアスな操作の同時一括処理のためのコンピュータ実装方法のフローチャートである。
【図１１】一実施形態に記載された、ページ化検索ツリー・データ構造に対する同時操作の分離のためのコンピュータ実装方法のフローチャートである。
【図１２】一実施形態に記載された、ページ化検索ツリー・データ構造に対する操作の効率的な順序付けのための方法のフローチャートである。
【発明を実施するための形態】
【００１０】
以下の説明は、本発明の一般的原理を説明する目的で行われるのであり、本明細書において請求される本発明の概念を限定するように意図されていない。さらに、本明細書に記載された特定の特徴を、さまざまな可能な組み合わせおよび並べ替えのそれぞれで、その他の説明された特徴と組み合わせて使用することができる。
【００１１】
本明細書では、特に定義されない限り、すべての用語には、本明細書から示される意味、および当業者によって理解される意味、または辞書、論文などにおいて定義された意味、あるいはその両方を含む、最も広い可能な解釈が与えられる。
【００１２】
本明細書および添付の特許請求の範囲において使用されているように、単数形「ａ」および「ｔｈｅ」が、特に規定されない限り、複数の指示対象を含むということにも注意しなければならない。「備える（ｃｏｍｐｒｉｓｅ）」または「備えている（ｃｏｍｐｒｉｓｉｎｇ）」あるいはその両方は、本明細書で使用される場合、記載された機能、整数、ステップ、処理、要素、またはコンポーネント、あるいはこれらの組み合わせの存在を示すが、１つまたは複数のその他の機能、整数、ステップ、処理、要素、コンポーネント、またはこれらのグループ、あるいはこれらの組み合わせの存在または追加を除外していないことが、さらに理解されるであろう。
【００１３】
以下の説明では、ヘテロジニアスな操作タイプの一括した同時処理を使用したツリーベース・データ構造の効率的な操作のためのシステム、方法、およびコンピュータ・プログラム製品の複数の好ましい実施形態を開示する。
【００１４】
一般的な一実施形態では、ツリーベース・データ構造に対する操作の同時処理のためのコンピュータ実装方法が、ツリーベース・データ構造が記憶されるストレージ・デバイスを管理するストレージ・システムで入力を受信することであって、この入力がツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する、受信することと、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用されるツリーベース・データ構造の１つまたは複数のノードを決定することと、ヘテロジニアスな操作のセットのうちの１つまたは複数を同時に一括して実行することとを含む。
【００１５】
別の一般的な実施形態では、ツリーベース・データ構造に対する操作の同時処理のためのコンピュータ・プログラム製品が、具現化されたプログラム命令を含んでいるコンピュータ可読記憶媒体を含む。コンピュータ可読記憶媒体は、本質的に一時的信号ではなく、プログラム命令は、ストレージ・システム・マネージャによって実行可能であり、ストレージ・システム・マネージャに方法を実行させる。この方法は、ストレージ・システム・マネージャによって、ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する入力を受信することと、ストレージ・システム・マネージャによって、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用されるツリーベース・データ構造の１つまたは複数のノードを決定することと、ストレージ・システム・マネージャによって、ヘテロジニアスな操作のセットのうちの１つまたは複数を同時に一括して実行することとを含む。
【００１６】
さらに別の一般的な実施形態では、ツリーベース・データ構造に対する操作の同時処理のためのストレージ・システムが、ストレージ・システム・マネージャ、およびストレージ・システム・マネージャに統合されるか、またはストレージ・システム・マネージャによって実行可能であるか、あるいはその両方である論理を含む。この論理は、ストレージ・システムに、ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する入力を受信することと、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用されるツリーベース・データ構造の１つまたは複数のノードを決定することと、ヘテロジニアスな操作のセットのうちの１つまたは複数を同時に一括して実行することとを実行させるように構成される。
【００１７】
定義
隣接ノード
本明細書において理解されているように、ツリーベース・データ構造内のノードは、ツリー内の同じ層のすぐ近くのノードに隣接しており、ツリーの同じ層のすべてのノードは、ツリーのルート・ノードから同じ距離を有しており、隣接ノードは、ツリーの次の上位層内の同じ親ノードの下にあってもなくてもよい。特定の層の隣接ノードは、兄弟ノードとも呼ばれる。
【００１８】
同時一括処理
本明細書において理解されているように、同時一括処理では、ツリーベース・データ構造に対する複数の操作の同時処理を行う。操作は、それらの操作の処理が同じ時間ウィンドウの間に発生したときに、同時に処理される。操作は、同じ時間ウィンドウの間に複数の操作が（個別にではなく）一緒に処理されるときに、一括して処理される。
【００１９】
さまざまな実施形態では、同時一括処理は、ツリーの同じ層に属しているツリーベース・データ構造の複数のノードの同時の独立した処理を含む。特に好ましい実施形態では、同時一括処理は、独立した操作スレッドを使用して、ツリーベース・データ構造の特定の層のすべてのノードを並列に処理することを含む。
【００２０】
ヘテロジニアスな操作
本明細書において理解されているように、ヘテロジニアスな操作は、ツリーベース・データ構造に記憶されたデータを変更もしくは処理するため、またはツリーベース・データ構造自体の構造化を変更もしくは処理するため、あるいはその両方のために実行できる任意の２つ以上の異なるタイプの操作を包含している。操作の例は、当業者が本説明を読むときに理解するように、ツリーベース・データ構造のノードに記憶されたデータ・エントリまたはルーティング・エントリあるいはその両方の更新、挿入、または削除を含む。
【００２１】
したがって、ヘテロジニアスな操作のセットは、本明細書に記載されたさまざまな操作の例のうちの任意の２つ以上を含む。好ましい実施形態では、ヘテロジニアスな操作は、ツリー・ノードではなくデータ・エントリに関連する。特に好ましい実施形態では、ヘテロジニアスな操作は、内部ノードではなく葉ノードに関連する。
【００２２】
ノードの削除
本明細書において理解されているように、ノードの削除では、ノードをツリーベース・データ構造から除去することを含む。
【００２３】
さまざまな実施形態では、ノードの削除は、ノードのマージ（node merger）の後に、例えばデータ構造内の別のノードへのノードの内容のマージの結果として空にされたノードを削除して、実行されてよい。ノードの削除は、例えば、下にあるノードが削除された１つまたは複数の層に属しているノード内のルーティング・エントリの変更または削除あるいはその両方を含むことができる。
【００２４】
ノードの挿入
本明細書において理解されているように、ノードの挿入では、以前は存在しなかったノードをツリーベース・データ構造内に作成することを含む。
【００２５】
さまざまな実施形態では、ノードの挿入は、特定の層内の１つまたは複数のノードが満杯になったとの決定に応答して、例えばデータ・エントリを満杯になったノードから新たに挿入されたノードに移動させることによって、実行されてよい。
【００２６】
ノードのマージ
本明細書において理解されているように、ノードのマージでは、２つ以上の既存のノードを結合して１つのノードを形成することを含む。
【００２７】
さまざまな実施形態では、マージは、（例えば、データ構造の特定の層に対するヘテロジニアスな操作の実行の結果として）満杯になっていないノードが存在しているか、または存在することになるとの決定に応答して実行されてよい。ノードのマージは、好ましくは、満杯になっていないノードを兄弟ノードと結合することによって達成される。
【００２８】
ノードの権限
ユーザは、ツリーベース・データ構造の特定のノードにアクセスするための権限を、同じデータ構造を操作している他のすべてのユーザに関して微細な粒度で取得することができる。
【００２９】
この権限は共有されてよく、その場合、ノードは読み取り専用であってよい。読み取り専用の共有された権限は、複数のユーザによって同時に取得されることが可能である。
【００３０】
あるいは、この権限は排他的であってよく、その場合、ノードは変更されてもよい。排他的権限は、ノードにアクセスしている他のユーザと相互に排他的である。
【００３１】
ノードの再バランス調整
本明細書において理解されているように、ノードの再バランス調整は、必要とされるストレージ使用率の範囲内にノードを維持するために、満杯になったノードからそのノードの兄弟ノードへのデータ・エントリの移動、または満杯になっていないノードへのそのノードの兄弟ノードからのデータ・エントリの移動を含む。
【００３２】
さまざまな実施形態では、ノードの再バランス調整は、ツリーベース・データ構造のノード全体で適切なストレージ使用率レベルを維持することに特に役立つ。
【００３３】
したがって、当業者は、これらの説明に基づいて、ノードの再バランス調整がツリーベース・データ構造内のルーティング情報の変更に使用されるプロセスを含むか、またはノードの再バランス調整の後にそのようなプロセスが続いてよく、それによって、好ましい実施形態では、ノードの構造化またはデータ・エントリの位置あるいはその両方に対する任意の変更に対応するということを理解するであろう。
【００３４】
ノードの分割
本明細書において理解されているように、ノードの分割操作では、ノードを２つ以上のノードに分割することを含み、それらのノードのうちの少なくとも１つは、分割操作を実行する前のデータ構造に含まれていなかったものである。
【００３５】
さまざまな実施形態では、ノードの分割は、当業者が本説明を読んだときに理解するように、例えば、ツリーベース・データ構造の特定の層に対する１つまたは複数のヘテロジニアスな操作の実行の結果として、ツリーベース・データ構造の既存のノードが満杯になっているか、または満杯になるとの決定に応答して発生させることができる。
【００３６】
ノードの更新
本明細書において理解されているように、ノードの更新は、データ・エントリのペイロードを変更すること（例えば、Ｂ＋ツリーの葉ノードの場合）、およびノードに記憶された１つまたは複数のルーティング・エントリを変更すること（例えば、Ｂ＋ツリーの内部ノードの場合）のうちの１つまたは複数を含む。
【００３７】
さまざまな実施形態では、ノードの更新は、データ構造の構造化における変更を引き起こす別の操作に応答して実行されてよく、この変更に対応するために、ルーティング・エントリの更新を必要とする場合がある。
【００３８】
追加または代替あるいはその両方として、ノードは、ノードに記憶されたデータ・エントリの変更を達成するために更新されてよい。
【００３９】
ストレージ識別子
本明細書において理解されているように、ストレージ識別子は、ストレージ・デバイス内のノードの位置を識別するデータ要素である。
【００４０】
さまざまな実施形態では、ツリーベース・データ構造内のノードは、好ましくは、一意のストレージ識別子に関連付けられる。例えば、ツリーベース・データ構造内でノードＮ１からノードＮ２を指すために、ノードＮ２のストレージ識別子が、好ましくはノードＮ１に記憶される。
【００４１】
ツリーベース・データ構造
本明細書において理解されているように、ツリーベース・データ構造は任意のさまざまなデータ構造を含み、このデータ構造内で、データ・エントリがバランス調整階層構造（branching hierarchical structure）に従って記憶および構造化される。好ましくは、構造は、２つに分岐する方法で分岐するが、本発明の範囲内では、当業者が本説明を読んだときに理解するように、例えば４つの分岐、８つの分岐などの、さらに高次の分割を含む構造が考慮される。
【００４２】
ページ化検索ツリー・データ構造
本明細書において理解されているように、ページ化検索ツリー・データ構造は、データの構造化および検索のために設計される。ページ化検索ツリー・データ構造では、データはノードに記憶され、１つのノードは通常、１つのディスク・ページに対応し、各ノードは階層ツリー構造内で構造化されてリンクされる。
【００４３】
これらのデータ構造は、大規模なデータ・セット内での高速かつ効率的な検索を提供するように設計される。通常は、そのようなデータ構造はディスク上に記憶され、より高速なストレージ（例えば、メモリまたは固体ディスク）上のキャッシュが、データ構造の一部を記憶して性能を改善するために使用される。
【００４４】
例えば、Ｂ＋ツリーはページ化検索ツリー・データ構造の一種である。Ｂ＋ツリーでは、データ・エントリは葉ノードに排他的に記憶され、内部ノードは、操作を適切な葉ノードに向けるためにルーティング情報を記憶する。葉ノードに記憶されたデータ・エントリは、（検索を容易にするための）キー、および対象のデータを含んでいるペイロードを含む。ルーティング・エントリは、キー、および操作を適切な葉ノードに向けるために使用される内部リンクまたはノード識別子を含む。
【００４５】
コンピュータ、ネットワーク、およびストレージ・システム・アーキテクチャ
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはこれらの組み合わせにすることができる。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいる（１つまたは複数の）コンピュータ可読記憶媒体を含んでもよい。
【００４６】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および記憶できる有形のデバイスにすることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせにすることができるが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）、読み取り専用メモリ（ＲＯＭ：read-only memory）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ：erasable programmable read-only memoryまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：static random access memory）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：compact disc read-only memory）、デジタル多用途ディスク（ＤＶＤ：digital versatile disk）、メモリ・スティック、フロッピー（Ｒ）・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されているコンピュータ可読記憶媒体は、本質的に、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、あるいはワイヤを介して送信される電気信号などの一時的信号であると解釈されるべきではない。
【００４７】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス／処理デバイスへ、またはネットワーク（例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワークあるいはこれらの組み合わせ）を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードすることができる。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはこれらの組み合わせを備えてもよい。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス／処理デバイス内のコンピュータ可読記憶媒体に記憶するために転送する。
【００４８】
本発明の処理を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：instruction-set-architecture）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードにすることができる。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータを、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）または広域ネットワーク（ＷＡＮ：wide area network）を含む任意の種類のネットワークを介してユーザのコンピュータに接続することができ、または接続を、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行うことができる。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ：field-programmable gate arrays）、またはプログラマブル・ロジック・アレイ（ＰＬＡ：programmable logic arrays）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行できる。
【００４９】
本発明の態様は、本明細書において、本発明の実施形態に記載された方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせは、コンピュータ可読プログラム命令によって実装できると理解されるであろう。
【００５０】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が記憶されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に記憶され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはこれらの組み合わせに特定の方式で機能するように指示できるものであってよい。
【００５１】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれてもよく、それによって、一連の動作可能なステップを、コンピュータ上、その他のプログラム可能な装置上、またはコンピュータ実装プロセスを生成するその他のデバイス上で実行させる。
【００５２】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に記載されているシステム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および処理を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、指定された論理機能を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表すことができる。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生させることができる。例えば、連続して示された２つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、指定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令とを組み合わせて実行する専用ハードウェアベースのシステムによって実装できるということにも注意する。
【００５３】
さらに、さまざまな実施形態に従うシステムは、プロセッサ、およびプロセッサに統合された論理またはプロセッサによって実行可能な論理あるいはその両方を含むことができ、この論理は、本明細書において列挙された処理ステップのうちの１つまたは複数を実行するように構成される。統合されるということは、つまり、プロセッサに論理が、特定用途向け集積回路（ＡＳＩＣ：application specific integrated circuit）、ＦＰＧＡなどのハードウェア論理として組み込まれるということである。プロセッサによって実行可能であるということは、つまり、論理が、プロセッサによってアクセス可能なハードウェア論理、ソフトウェア論理（ファームウェア、オペレーティング・システムの一部、アプリケーション・プログラムの一部など）など、またはハードウェア論理とソフトウェア論理の何らかの組み合わせであり、プロセッサによって実行されたときに何らかの機能をプロセッサに実行させるように構成されているということである。ソフトウェア論理は、当技術分野において知られた任意のメモリ・タイプの、ローカルまたはリモートあるいはその両方のメモリに記憶されてよい。ＡＳＩＣ、ＦＰＧＡ、中央処理装置（ＣＰＵ：central processing unit）、集積回路（ＩＣ：integrated circuit）、グラフィック処理装置（ＧＰＵ：graphics processing unit）といった、ソフトウェア・プロセッサ・モジュールまたはハードウェア・プロセッサあるいはその両方などの、当技術分野において知られた任意のプロセッサが使用されてよい。
【００５４】
図１は、一実施形態に従うアーキテクチャ１００を示している。図１に示されているように、第１のリモート・ネットワーク１０４および第２のリモート・ネットワーク１０６を含む複数のリモート・ネットワーク１０２が提供される。ゲートウェイ１０１は、リモート・ネットワーク１０２と近接ネットワーク１０８との間で結合されてよい。本アーキテクチャ１００の文脈において、ネットワーク１０４、１０６はそれぞれ、ＬＡＮ、インターネットなどのＷＡＮ、公衆交換電話網（ＰＳＴＮ：Public Switched Telephone Network）、構内電話網などを含むが、これらに限定されない、任意の形態を取ることができる。
【００５５】
使用中に、ゲートウェイ１０１はリモート・ネットワーク１０２から近接ネットワーク１０８への入り口ポイントとして機能する。このようにして、ゲートウェイ１０１は、ゲートウェイ１０１に到着するデータの特定のパケットを行き先に向けることができるルータ、およびゲートウェイ１０１に入る実際のパスおよびゲートウェイ１０１から出る実際のパスを特定のパケットに提供するスイッチとして機能することができる。
【００５６】
ゲートウェイ１０１を介してリモート・ネットワーク１０２からアクセスできる、近接ネットワーク１０８に結合された少なくとも１つのデータ・サーバ１１４がさらに含まれる。データ・サーバ１１４が任意のタイプのコンピューティング・デバイス／グループウェアを含むことができるということに注意するべきである。複数のユーザ・デバイス１１６が各データ・サーバ１１４に結合されている。ユーザ・デバイス１１６は、ネットワーク１０４、１０６、１０８のうちの１つを通って直接接続されてもよい。そのようなユーザ・デバイス１１６は、デスクトップ・コンピュータ、ラップトップ・コンピュータ、ハンドヘルド・コンピュータ、プリンタ、または任意のその他のタイプの論理を含むことができる。一実施形態では、ユーザ・デバイス１１１がネットワークのうちのいずれかに直接結合されてもよいということに注意するべきである。
【００５７】
周辺機器１２０または一連の周辺機器１２０（例えば、ファクシミリ装置、プリンタ、ネットワークまたはローカルあるいはその両方のストレージ・ユニットまたはストレージ・システムなど）が、ネットワーク１０４、１０６、１０８のうちの１つまたは複数に結合されてよい。データベースまたは追加コンポーネントあるいはその両方が、ネットワーク１０４、１０６、１０８に結合された任意のタイプのネットワーク要素で利用されるか、またはそのようなネットワーク要素に統合されてよいということに注意するべきである。本説明の文脈において、ネットワーク要素はネットワークの任意のコンポーネントを指すことができる。
【００５８】
何らかのアプローチに従って、本明細書に記載された方法およびシステムは、仮想システムまたは１つまたは複数の他のシステムをエミュレートするシステム（ＩＢＭ  ｚ／ＯＳ環境をエミュレートするＵＮＩＸ（Ｒ）システム、ＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（Ｒ）環境を仮想的にホストするＵＮＩＸ（Ｒ）システム、ＩＢＭ  ｚ／ＯＳ環境をエミュレートするＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（Ｒ）システムなど）あるいはその両方と共に実装されるか、またはそのようなシステムの上に実装されるか、あるいはその両方で実装されてよい。一部の実施形態では、この仮想化またはエミュレーションあるいはその両方は、ＶＭＷＡＲＥソフトウェアを使用することによって拡張してよい。
【００５９】
その他のアプローチでは、１つまたは複数のネットワーク１０４、１０６、１０８は、一般に「クラウド」と呼ばれる、システムのクラスタを表すことができる。クラウド・コンピューティングでは、処理能力、周辺機器、ソフトウェア、データ、サーバなどの共有されたリソースが、オンデマンドの関係においてクラウド内の任意のシステムに提供され、それによって、多くのコンピューティング・システムにまたがるサービスのアクセスおよび分散が可能になる。クラウド・コンピューティングは、通常、クラウド内で動作するシステム間のインターネット接続を含むが、システムを接続するその他の手法が使用されてもよい。
【００６０】
図２に、一実施形態に従って、図１のユーザ・デバイス１１６またはサーバ１１４あるいはその両方に関連付けられた代表的ハードウェア環境を示す。この図は、マイクロプロセッサなどの中央処理装置２１０、およびシステム・バス２１２を介して相互接続されたその他の複数のユニットを備えているワークステーションの標準的なハードウェア構成を示している。
【００６１】
図２に示されたワークステーションは、ランダム・アクセス・メモリ（ＲＡＭ）２１４、読み取り専用メモリ（ＲＯＭ）２１６、ディスク・ストレージ・ユニット２２０などの周辺機器をバス２１２に接続するためのＩ／Ｏアダプタ２１８、キーボード２２４、マウス２２６、スピーカ２２８、マイクロホン２３２、またはタッチ・スクリーンおよびデジタル・カメラ（図示せず）などのその他のユーザ・インターフェイス・デバイス、あるいはこれらの組み合わせをバス２１２に接続するためのユーザ・インターフェイス・アダプタ２２２、ワークステーションを通信ネットワーク２３５（例えば、データ処理ネットワーク）に接続するための通信アダプタ２３４、ならびにバス２１２をディスプレイ・デバイス２３８に接続するためのディスプレイ・アダプタ２３６を含む。
【００６２】
ワークステーション上には、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（Ｒ）オペレーティング・システム（ＯＳ：Operating System）、ＭＡＣ  ＯＳ、ＵＮＩＸ（Ｒ）  ＯＳなどのオペレーティング・システムが常駐することができる。前述されたプラットフォームおよびオペレーティング・システム以外のプラットフォームおよびオペレーティング・システム上に好ましい実施形態が実装されてもよいということが理解されるであろう。好ましい実施形態は、ＸＭＬ言語、Ｃ言語、もしくはＣ＋＋言語、またはこれらの組み合わせの言語、あるいはその他のプログラミング言語を、オブジェクト指向プログラミング方法と共に使用して記述されてよい。複雑なアプリケーションを開発するためにますます使用されるようになったオブジェクト指向プログラミング（ＯＯＰ：object oriented programming）が使用されてよい。
【００６３】
ここで図３を参照すると、一実施形態に従ってストレージ・システム３００が示されている。さまざまな実施形態に従って、図３に示された要素の一部が、ハードウェアまたはソフトウェアあるいはその両方として実装されてよいということに注意する。ストレージ・システム３００は、少なくとも１つの上位ストレージ層（higher storage tier）３０２上および少なくとも１つの高位ストレージ層（upper storage tier）３０６上の複数の媒体と通信するために、ストレージ・システム・マネージャ３１２を含むことができる。上位ストレージ層３０２は、好ましくは、ハード・ディスク・ドライブ（ＨＤＤ：hard disk drive）内のハード・ディスク、不揮発性メモリ（ＮＶＭ：nonvolatile memory）、固体ドライブ（ＳＳＤ：solid state drive）内の固体メモリ、フラッシュ・メモリ、ＳＳＤアレイ、フラッシュ・メモリ・アレイなど、または本明細書に記載されたか、もしくは当技術分野において知られているその他の媒体、あるいはこれらの組み合わせなどの、１つまたは複数のランダム・アクセスまたは直接アクセスあるいはその両方の媒体３０４を含むことができる。高位ストレージ層３０６は、好ましくは、テープ・ドライブ内の磁気テープもしくは光媒体またはその両方、スーパー・アクセスＨＤＤ、スーパー・アクセスＳＳＤなど、または本明細書に記載されたか、もしくは当技術分野において知られているその他の順次アクセス媒体、あるいはこれらの組み合わせなどの順次アクセス媒体を含む、１つまたは複数の高位で実行されるストレージ媒体３０８を含むことができる。１つまたは複数の追加ストレージ層３１６は、システム３００の設計者の要求に従って、ストレージ・メモリ媒体の任意の組み合わせを含むことができる。また、上位ストレージ層３０２またはより高位ストレージ層３０６あるいはその両方のうちのいずれかは、ストレージ・デバイスまたはストレージ媒体あるいはその両方の何らかの組み合わせを含むことができる。
【００６４】
ストレージ・システム・マネージャ３１２は、図３に示されたストレージ・エリア・ネットワーク（ＳＡＮ：storage area network）またはその他の適切なネットワーク・タイプなどのネットワーク３１０を介して、上位ストレージ層３０２上および高位ストレージ層３０６上のストレージ媒体３０４、３０８と通信することができる。ストレージ・システム・マネージャ３１２は、ストレージ・システム・マネージャ３１２の一部であってもなくてもよいホスト・インターフェイス３１４を介して、１つまたは複数のホスト・システム（図示せず）と通信することもできる。ストレージ・システム３００のストレージ・システム・マネージャ３１２または任意のその他のコンポーネントあるいはその両方は、ハードウェア内またはソフトウェア内またはその両方に実装されてよく、当技術分野において知られているタイプのコマンドを実行するために、中央処理装置（ＣＰＵ）、フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ：field programmable gate array）、特定用途向け集積回路（ＡＳＩＣ）などのプロセッサ（図示せず）を利用することができる。当然、当業者が本説明を読んだときに明らかになるように、ストレージ・システムの任意の配置が使用されてよい。
【００６５】
その他の実施形態では、ストレージ・システム３００は、任意の数のデータ・ストレージ層を含むことができ、各ストレージ層内の同じであるか、または異なるストレージ・メモリ媒体を含むことができる。例えば、各データ・ストレージ層は、ＨＤＤ、ＳＳＤ、順次アクセス媒体（テープ・ドライブ内のテープ、光ディスク・ドライブ内の光ディスクなど）、直接アクセス媒体（ＣＤ-ＲＯＭ、ＤＶＤ-ＲＯＭなど）、または媒体のストレージ・タイプの任意の組み合わせなどの、同じタイプのストレージ・メモリ媒体を含むことができる。そのような１つの構成において、上位ストレージ層３０２は、上位で実行されるストレージ環境内にデータを記憶するためのＳＳＤストレージ媒体の大部分を含むことができ、高位ストレージ層３０６および追加ストレージ層３１６を含む残りのストレージ層は、データを高位で実行されるストレージ環境内に記憶するために、ＳＳＤ、ＨＤＤ、テープ・ドライブなどの任意の組み合わせを含むことができる。このようにして、より頻繁にアクセスされるデータ、優先度の高いデータ、より素早くアクセスされる必要のあるデータなどは、上位ストレージ層３０２に記憶されてよく、これらの属性のいずれかを有しないデータは、高位ストレージ層３０６を含む追加ストレージ層３１６に記憶されてよい。当然、当業者は、本説明を読んだときに、本明細書において提示された実施形態に従って、異なるストレージ方式で実装するために、ストレージ媒体のタイプの多くのその他の組み合わせを考案することができる。
【００６６】
一部の実施形態に従って、ストレージ・システム（３００など）は、データ・セットを開くための要求を受信するように構成された論理、要求されたデータ・セットが、複数の関連する部分において、層型データ・ストレージ・システム３００の高位ストレージ層３０６に記憶されているかどうかを決定するように構成された論理、要求されたデータ・セットの関連する各部分を層型データ・ストレージ・システム３００の上位ストレージ層３０２に移動させるように構成された論理、および層型データ・ストレージ・システム３００の上位ストレージ層３０２上の要求されたデータ・セットを関連する部分から組み立てるように構成された論理を含むことができる。
【００６７】
当然、この論理は、さまざまな実施形態に従って、デバイス上またはシステム上あるいはその両方での方法として、またはコンピュータ・プログラム製品として実装されてよい。
【００６８】
ツリーベース・データ構造の例
一般に、開示された本発明の実施形態は、ツリーベース・データ構造の処理および更新に関し、ストレージ・システム内のデータの構造化を容易にするために、通常は、ページ化検索ツリーへの実用的応用が活用される。本明細書において提示される説明は、ページ化検索ツリー（例えば、「Ｂ＋ツリー」）の事例を参照し、この事例において、すべてのデータ・エントリがデータ構造の終端ノード（すなわち、「葉ノード」）に記憶され、すべての内部ノード（すなわち、「分岐ノード」および「ルート・ノード」）が、ツリー構造に記憶された特定のデータの検索時にツリー構造のトラバースを容易にするように構成されたルーティング情報を記憶する。
【００６９】
ただし、本開示の範囲はＢ＋ツリー、Ｂツリー、または任意のその他の特定のさまざまなツリーベース・データ構造に限定されないということが理解されるべきである。むしろ、開示された本発明の概念は、当業者が本説明を読んだときに理解するであろう任意の適切なツリーベース・データ構造に適用されてよい。
【００７０】
ツリーベース・データ構造４００の一実施形態例が、図４におい視覚的に表されている。この実施形態では、ツリー４００は、３層のバランス調整されたデータ構造である。ツリーの最上位層（ルート層４１０ａ）は、ルート・ノード４０２を含んでおり、ツリー内のすべての他のノードがルート・ノード４０２の下にある。ルート・ノード４０２の真下にある、ツリー４００の第１のノード層４１０ｂは、ルート・ノード４０２から分岐する２つの内部ノード４０４を含んでいる。ツリー４００がＢ＋ツリーである実施形態では、これらの内部ノード４０４はルーティング情報を含んでいるが、データ・エントリを含んでいない。むしろ、図４のＢ＋ツリーの実施形態では、データ・エントリは、図４に示されている第１のノード層の真下の第２のノード層４１０ｃ内にある葉ノード４０６に排他的に記憶される。当然、当業者は、他の実施形態において、ツリー４００がＢ＋ツリーではなく、データ・エントリを内部ノード４０４および葉ノード４０６に記憶できる、ツリーベース・データ構造の何らかのその他の適切な形態であってよいということを理解するであろう。
【００７１】
類似するツリーベース・データ構造５００が図５に示されているが、示された実施形態によれば、ツリー５００はバランス調整されていない。図４と同様に、ツリー５００は、ルート・ノード５０２を含んでいるルート層５１０ａ、ルート・ノード層の下の第１のノード層５１０ｂ、および第１のノード層の下の第２のノード層５１０ｃを含んでいる。ただし、図５に示されているように、ツリー５００は非対称であり、第１のノード層５１０ｂ内に１つの内部ノード５０４を含んでいるが、ツリー５００の複数のノード層５１０ｂ、５１０ｃ内に葉ノード５０６も含んでいる。実際には、さまざまな実施形態に従って、開示された本発明の実施形態は、対称なツリー・タイプおよび非対称なツリー・タイプの両方に同じように適用できる。
【００７２】
引き続き図４および５を参照すると、本明細書において理解されているように、各ツリー４００、５００の第１のノード層４１０ｂ、５１０ｂはそれぞれ、２つの水平方向に隣接する兄弟ノードを含んでいる（図４に示されているノード４０４、図５に示されているノード５０４および５０６を参照）。これらの兄弟ノードは、それぞれ対応するルート・ノード４０２、５０２の真下にあるため、それらの各ルート・ノードにも垂直方向に隣接している。
【００７３】
ただし、一部の実施形態では、兄弟ノードは、必ずしも同じ先祖ノードの下にある必要はない。例えば、図４に示されているように、第２のノード層４１０ｃは、兄弟ノードの３つのセットを含んでいると見なすことができる４つの葉ノード４０６を含んでおり、左側の２つの兄弟ノードは、第１のノード層４１０ｂ内の左側の内部ノード４０４の下にある。右側の２つの兄弟ノードは、第１のノード層４１０ｂ内の右側の内部ノード４０４の下にある。中央の２つの兄弟ノードはそれぞれ、異なる親ノードの下にあり、１つの兄弟ノードは第１のノード層４１０ｂ内の左側の内部ノード４０４の下にあり、もう１つの兄弟ノードは第１のノード層４１０ｂ内の右側の内部ノード４０４の下にある。さまざまな実施形態では、特定のノード層内でこのように水平方向に直接隣接しているノードのペアは、すべて兄弟であると見なされる。
【００７４】
同様に、図６を用いて示されているように、開示された本発明の実施形態は、非常に複雑なツリー構造（例えば、ツリーベース・データ構造６００などのｎ層を含んでいる非対称のツリー）に適用可能であり、そのようなツリー構造の文脈において役立つ。図６に示された構造に従う一実施形態では、ツリー６００は、ルート・ノード層６１０ａ内のルート・ノード６０２、およびルート・ノード層６１０ａの真下にある第１のノード層６１０ｂ内の２つの内部ノード６０４を含んでいる。
【００７５】
一部の実施形態では第２のノード層６１０ｄに指定することができる次のノード層が、第１のノード層の下にあり、内部ノード６０４および葉ノード６０６の両方を含むことができる。さまざまな実施形態では、ｎ層型ツリー６００は、図６に示されているように、第１のノード層６１０ｂと第２のノード層６１０ｄの間、および第３のノード層６１０ｅと終端ノード層６１０ｎの間の分岐を分離する途切れたギザギザの線を経由して、第１のノード層６１０ｂと第２のノード層６１０ｄの間、または第３のノード層６１０ｅと終端ノード層６１０ｎの間、あるいはその両方に配置された、内部ノード６０４または葉ノード６０６あるいはその両方をそれぞれ含んでいる任意の数の介在する追加層（図示せず）を含むことができる。
【００７６】
好ましいアプローチでは、開示された本アルゴリズムが、最適な最小および最大のファンアウトの特徴を有するストレージ・システム内またはストレージ・アーキテクチャ内あるいはその両方において実装される。すなわち、ストレージ・システムまたはストレージ・アーキテクチャあるいはその両方によって実装されたツリーベース・データ構造は、ツリー内の層の数を最適化するようにバランス調整され、ツリーの１つの層当たりのノード数を最適化する。加えて、好ましいアプローチでは、これらのアルゴリズムは、そのようなファンアウトの特徴を有するＢ＋ツリーに適用される。
【００７７】
有利なことに、前述したようなファンアウトの特徴を有するデータ構造を採用することによって、下で詳細に説明されているように、データ・エントリに対するヘテロジニアスな操作の同時一括処理、およびそれに応じたツリー構造に対する変更を、３回以下の更新段階の反復で実行できるようにする。この非常に効率的なプロセスは、複数のアプローチに従ってデータおよびツリーベース・データ構造自体の操作の計算コストおよび実行時間を削減することによって、開示された本手法を実装するストレージ・システムの機能をさらに改善する。
【００７８】
ツリーベース・データ構造の同時一括処理
下で示されるように、データおよびツリーベース・データ構造を処理するための、ページ化検索ツリーなどの従来手法は、ツリー内に、またはツリーを介して記憶されたデータの効率的な同時処理の問題をまだ解決する必要がある。本明細書において提示された独自のアプローチは、ツリー内に、またはツリーを介して記憶されたデータを処理するため、およびツリー構造を処理するための標準的な手法に関連するＩ／Ｏおよびプロセッサのコストを削減する、ヘテロジニアスな操作タイプの同時一括処理の使用を提案する。簡単に言うと、開示された本発明の手法は、ヘテロジニアスな操作タイプの一括処理を可能にし、ツリーに対する必要最小限の構造の変更を決定し、それらの必要最小限の構造の変更を、データまたはツリー構造あるいはその両方を変更するプロセスにおいて、ツリーの上方に伝えるため、大幅な効率の改善が提供される。
【００７９】
開示された本発明の概念は、ページ化検索ツリーなどのデータ構造内のデータ・エントリに対するヘテロジニアスな操作を実行するため、およびヘテロジニアスな操作の実行から生じたデータ構造の構造化に対する必要な変更を行うための手法を提供する。開示された本発明の概念は、ヘテロジニアスな操作の処理がツリー・データ構造の層ごとに同時に一括して実行され、ヘテロジニアスな操作のセットを実行するために必要な処理およびＩ／Ｏ操作の数およびコストを大幅に削減するという点において独自のものである。
【００８０】
一般に、本明細書に記載された手法は、２段階のアプローチを使用して前述の同時一括処理を達成する。まず、検索段階で、ツリー・データ構造をトラバースし、入力されたヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のある葉ノードを特定する。次に、更新段階で、葉層からルートまで進む層ごとの反復方式で、ツリー・データ構造をトラバースする。
【００８１】
例えば、開示された本発明の概念の１つの実装が図７に概略的に示されており、この図では、ｎ層ツリーベース・データ構造が複数の層７１０ａ、７１０ｂ、７１０ｃ．．．７１０ｎを含んでいる。ルート層７１０ａはルート・ノード７０２を含んでおり、ルート・ノード７０２の下に４つの内部ノード７０４があり、別のノード層７１０ｂを形成している。同様に、このノード層のノード７０４の下にはそれぞれ４つのノードがあり、さらに別のノード層７１０ｃを形成している。ツリーは、このようにして、複数の葉ノード７０６を含んでいるｎ番目の層７１０ｎに達するまで広がり、葉ノード７０６はそれぞれ、１つまたは複数のデータ・エントリを記憶している。開示された本発明の概念の範囲から逸脱することなく、任意の数の層が、ルート層７１０ａと葉ノード層７１０ｎの間に介在することができる。
【００８２】
基本的に、本開示に従って実行される処理は、２つの基本的な段階において発生する。検索段階は、ルート層７１０ａで開始し、ｎ番目の層７１０ｎ内の葉ノード７０６に向かって層ごとに進む。
【００８３】
反対に、更新段階は１番目の反復（ｉ＝０）において葉ノード層７１０ｎで開始し、１つまたは複数の反復（ｉ＞０）を通じて上方に進み、最終的にｎ番目の反復（ｉ＝ｎ）においてルート・ノード７０２に達する可能性がある。当然、さまざまな実施形態では、更新段階は、例えば、直前の更新段階の反復（例えば、図７に示された反復ｉ＝（ｎ−１）、ｉ＝（ｎ−２）、２＜ｉ＜（ｎ−２）、ｉ＞１など）中に生成されたノードおよび操作のセットにおいてノードが指定されないとの決定に応答して、ルート・ノード層７１０ａに到達する前に終了することができる。
【００８４】
好ましい実施形態では、更新段階の各反復中に、データ構造の層が処理され、適切な操作がその層内のすべての適切なノードに対して同時に一括して実行される。更新段階では、ヘテロジニアスな操作の適用の結果として満杯になっているか、または満杯になっていないノードを処理する。各更新段階の出力は、ツリーの次の上位層内のノードのセット、およびそれらのノードに適用される操作であり、それらの操作は、ツリーの現在の層内のノードに適用された操作の結果である。ツリーの次の上位層のノードに適用される、更新段階の間に生成された操作は、ツリーの現在の層の処理において作成されたノード、削除されたノード、および内容が更新されたエントリを有するノードの新しい形態をサポートする。次に、現在の更新段階の出力されたノードおよび操作のセットが、次の更新段階の入力として（つまり、ツリーの次の上位層を処理するために）提供される。アルゴリズムの処理は、ツリーの層の処理によって生成されたノードおよび操作のセットが空であるときに完了する。
【００８５】
したがって、図１０を参照すると、一実施形態に従う方法１０００のフローチャートが示されている。方法１０００は、さまざまなアプローチにおいて、特に図１〜９に示された環境のいずれかにおいて本発明に従って実行されてよい。当然、当業者が本説明を読んだときに理解するように、図１０において具体的に説明された処理よりも多いか、または少ない処理が方法１０００に含まれてよい。
【００８６】
方法１０００の各ステップは、動作環境の任意の適切なコンポーネントによって実行されてよい。例えば、さまざまな実施形態では、方法１０００は、階層ストレージ・システムのディスク・マネージャ、または１つまたは複数のプロセッサを備えているその他のデバイスによって、部分的に、または全体的に実行されてよい。プロセッサ（例えば、ハードウェアまたはソフトウェアあるいはその両方において実装され、好ましくは少なくとも１つのハードウェア・コンポーネントを含んでいる処理回路、チップ、またはモジュール、あるいはこれらの組み合わせ）が、方法１０００の１つまたは複数のステップを実行するために任意のデバイス内で利用されてよい。プロセッサの例は、中央処理装置（ＣＰＵ）、特定用途向け集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）など、これらの組み合わせ、または当技術分野において知られた任意のその他の適切なコンピューティング・デバイスを含むが、これらに限定されない。
【００８７】
方法１０００は、当業者が本説明を読んだときに理解するであろう他の類似するツリーベース構造の中で特に、図４〜６に示されたツリーベース構造のうちのいずれかなどの、ツリーベース・データ構造に対する操作の同時処理のために構成される。ルート・ノード層および葉ノード層は、任意の数の断続的層によって分離されてよい。ツリーベース構造は、Ｂ＋ツリー、Ｂツリー、または任意のその他の適切なタイプのツリーベース構造の定義に従うことができる。
【００８８】
ツリーベース・データ構造の詳細にかかわらず、図１０に示されているように、方法１０００は処理（operation）１００２を含み、処理１００２では、入力が、ツリーベース・データ構造が記憶されるストレージ・システムによって受信される。この入力は、ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する。
【００８９】
好ましくは、この入力は、ツリーベース・データ構造への参照およびペアのリストを含み、各ペアはデータ・エントリおよび関連する操作を示す。各データ・エントリはキー、およびデータが記憶されるペイロードを含むことができる。
【００９０】
さまざまなアプローチでは、ヘテロジニアスな操作のセットは、挿入操作、削除操作、および更新操作のうちの任意の１つまたは複数を含むことができる。ノードへの挿入によって、ノードにオーバーフローが発生し、したがってノードの分割が必要になる場合があり、その後、ツリーの葉の上の層内のエントリに対して変更を適用することが必要になる場合がある。ノードからの削除によって、ノードが満杯ではなくなり、したがってそのノードを別のノードとマージすることが必要になる場合があり、その後、ツリーの葉の上の層内のエントリに対しても変更を適用することが必要になる場合がある。データ構造の構造化における変更を考慮するために、そのような変更は、ルーティング・エントリの追加、更新、または削除を含むことができ、ツリーのルート・ノードまで伝達されてよい。ノードの更新は、好ましくは、ノードに記憶されたエントリの更新を含む。当然、前述の例は限定するものではないと見なされるべきであり、ヘテロジニアスな操作は、当業者が本説明を読んだときに理解するであろう任意の適切なタイプの操作を含むことができる。
【００９１】
一実施形態では、データ構造を変更するかどうか、およびデータ構造の変更方法の決定は、好ましくはノード・バランス調整基準（node balancing criteria）に基づく。ノード・バランス調整基準は、望ましいシステムのストレージ使用率、性能などに基づいて、事前に定義されてよい。例えば、一実施形態では、ノード・バランス調整基準は、ツリーが対応するストレージ・デバイスのページ（ノード）ごとに事前に定義された最小ストレージ使用率、平均ストレージ使用率などを含むことができる。
【００９２】
好ましいアプローチでは、事前に定義されたノード・バランス調整基準は、ページの容量の５０％未満が使用中であるときにノード（ページ）が「満杯ではない」と見なされるように、約５０％の最小容量しきい値を含む。ノード・バランス調整基準は、事前に定義された約７５％の平均容量しきい値を含むこともできる。
【００９３】
当然、ノード・バランス調整基準は、事前に定義されるのではなく、決定されてもよく、ツリーベース・データ構造および開示された本手法が実装されるストレージ・システムの特徴に基づいてリアルタイムに変更されてよい。
【００９４】
ストレージ・システムは、下の事象例のうちの１つまたは複数、あるいは当業者が本開示を読んだときに理解するであろうこれらと等価な事象の発生を検出し、変更された状況に適した新しい最適なノード・バランス調整基準を決定することによって適切な処置を取るように構成されてよい。
【００９５】
追加または代替あるいはその両方として、ノード・バランス調整基準はユーザによって定義または決定されてよい。
【００９６】
方法１０００は処理１００４も含み、処理１００４では、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用されるノードおよび好ましくは葉ノードが決定される。この決定は、好ましくは、処理１００２で受信された入力に少なくとも一部において基づく。さらに好ましくは、データ・エントリおよびデータ・エントリに関連付けられた操作を定義するペアのリストに基づいて、処理１００４は、ヘテロジニアスな操作のうちの１つまたは複数による処理を必要とするデータ構造のノードを決定することを含む。
【００９７】
特に有利なアプローチでは、処理１００４において実行される決定は、検索段階として具現化されてよい。例えば、図６に示されたようなツリーベース・データ構造を参照すると、一実施形態では、検索段階は降順でのツリーベース・データ構造の各層の評価を含むことができる。層ごとに、検索段階は、ペアのリストで指定されたデータ・エントリの全体または一部に基づいて、評価されている層内のノードのいずれかが、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のあるノード（または、子孫ノードにそのような操作が適用される必要のあるノード）であるかどうかを同時に決定することを含むことができる。この決定することは、一部のアプローチでは、データ・エントリを記憶するノード（例えば葉ノード）へのアクセスを除外することができ、代わりに内部ノードに記憶されたルーティング情報に基づくことができる。
【００９８】
例えば、アプローチの一例に従って、検索段階は、入力ペアごとにツリーを同時に下降すること、および入力ペアによって指定された操作が適用される必要のあるデータ構造内の葉ノードのストレージ識別子を取得することを含むことができる。操作またはヘテロジニアスな操作のセットが特定の葉ノードに適用される必要があるとの決定は、ノードに記憶されたデータ・エントリを、入力ペアによって指定され、１つまたは複数の操作に関連付けられたデータ・エントリと比較することを含むことができる。
【００９９】
好ましくは、検索は、ノードにアクセスするための共有された権限を使用して、すべての入力ペアについて同時に実行される。検索段階では、キャッシングを利用してストレージ・アクセスをさらに最小限に抑え、対応するストレージ・システムの機能を改善することができる。
【０１００】
追加または代替あるいはその両方のアプローチでは、検索段階は、入力ペアごとに個別に実行されるのではなく、サブセットで実行されることが可能である。つまり、ルート・ノードでは、入力ペアは、アクセスされる次の下位層内のノードに従ってサブセットに分割されてよく、それらの各ノードへのアクセスは、関連するサブセットを処理する（したがって下降し続ける）操作の異なるスレッドによって実行されてよい。このようにして、開示された本発明の概念は、複数の操作処理スレッドにまたがる検索段階の並列化を可能にし、検索段階を実行するために必要な時間を大幅に削減する。
【０１０１】
入力ペアごとに個別に実行されるのか、それともセットで実行されるのかにかかわらず、好ましい実施形態では、データ・エントリを記憶するデータ構造の葉ノードは、検索段階では直接アクセスされず、更新段階においてのみ直接アクセスされる。
【０１０２】
検索段階の出力は、「ノードおよび操作のセット」であり、通常は、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のある、検索段階において決定されるノードを識別し、好ましくは、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のある、検索段階において決定されるノードのストレージ識別子のリストを含む。
【０１０３】
さまざまな実施形態では、ノードおよび操作のセットにおいて、ストレージ識別子のリスト内のノードの各ストレージ識別子は、入力されたデータ・エントリおよび操作（すなわち、挿入、削除、更新）のペアのリストに関連付けられ、このリストは、関連するストレージ識別子によって識別されたノードに適用される。
【０１０４】
その他のアプローチでは、検索段階は、実質的に図８に示されたプロセス・フローに従って発生させることができる。
【０１０５】
したがって、さまざまなアプローチでは、方法１０００の処理１００４は、ノードおよび操作のセットを含んでいる出力を生成することを含むことができる。ノードおよび操作のセットはストレージ識別子のリストを含み、各ストレージ識別子は、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のあるノードのうちの１つを識別する。さらに、一部のアプローチでは、各ストレージ識別子は、処理１００２において受信された入力において識別された少なくとも１つのデータ・エントリおよび操作のペアに関連付けられる。
【０１０６】
方法１０００は、一実施形態に従って、ヘテロジニアスな操作のセットのうちの１つまたは複数が同時に一括して実行される処理１００６をさらに含む。ツリー・データ構造は、好ましくは、層ごとに反復する方式で処理され、特定の層に属しているノードおよび操作のセットにおいて識別されたすべてのノードが同時に一括して処理される。この処理は、本明細書で開示された本発明の更新段階の文脈において、下でさらに詳細に説明される。
【０１０７】
好ましい実施形態では、ツリー・データ構造のさまざまなノードへのヘテロジニアスな操作のセットの適用は、ツリーベース・データ構造の層ごとの同時一括更新を含む「更新段階」の１つまたは複数の反復を通じて達成される。更新段階は、例えば図４〜６に示されたようなツリーベース・データ構造に対して、ヘテロジニアスな操作のセットのうちの１つまたは複数を、ツリーベース・データ構造の最下層（例えば、図４および５にそれぞれ示された第２のノード層４１０ｃ、５１０ｃ、または図６に示されたｎ番目の層６１０ｎ）内の１つまたは複数のノードに適用することによって、開始することができ、それらの葉ノードはノードおよび操作のセットにおいて列挙されたストレージ識別子を含む。
【０１０８】
したがって、前の層の処理によって生成されたノードおよび操作のセットにおいて列挙されたストレージ識別子を有する第２のノード層（すなわち、前に処理された層の上の層）内のノードごとの、ノードに適用されるヘテロジニアスな操作のセットは、ノードおよび操作のセット内のそのノードのストレージ識別子に関連付けられたデータ・エントリ／操作ペアに基づいてよい。
【０１０９】
重要なことに、１つのアプローチでは、ヘテロジニアスな操作のセットが、ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する第２のノード層内の各ノードに同時に一括して適用される。好ましくは、同時一括処理は、現在の層内のノードへのヘテロジニアスな操作の適用の結果として必要とされるノードのバランス調整操作に関与する資格のある隣接ノードの評価および資格付与を可能にする方法で、現在のノード層内で処理されている各ノードを分離することを含む。
【０１１０】
さまざまな実施形態では、ヘテロジニアスな操作を特定のノード層内のノードに適用することは、新しいノードをツリーの１つまたは複数の層に挿入すること、ツリーの１つまたは複数の層内の既存のノードを削除すること、ツリーの１つまたは複数の層内の既存のノードをマージすること、ツリーの１つまたは複数の層内の１つまたは複数の既存のノードを分割すること、またはツリーの１つまたは複数の層内の既存のノードの１つまたは複数のデータ・エントリを更新すること、あるいはこれらの組み合わせを含むことができる。
【０１１１】
ヘテロジニアスな操作を葉ノード層の上の層に適用することがエントリの挿入を含んでいる場合、この挿入操作は、好ましくは、現在の層の下の層のうちの少なくとも１つに含まれる１つまたは複数の既存のノードが分割されたとの決定に応答して、実行される。さらに、挿入操作は、ツリーベース・データ構造の現在の層内の１つまたは複数のノードの作成を必要とする場合がある。
【０１１２】
ヘテロジニアスな操作を葉ノード層の上の層に適用することがエントリの削除を含んでいる場合、この削除操作は、好ましくは、現在の層の下のツリーベース・データ構造の少なくとも１つの層内の１つまたは複数の既存のノードがマージされたとの決定に応答して、実行される。削除操作は、ツリーベース・データ構造の現在の層内の１つまたは複数のノードの削除を必要とする場合もある。
【０１１３】
ツリーの現在の層の処理中に生成されたエントリおよび操作は、ツリーの現在の層の処理において更新、作成、および削除されたノードの新しい形態をサポートする。そのようなエントリおよび操作を生成する３つの事例が、すぐ下で示される。
【０１１４】
第一に、一実施形態において、処理されるノードが分割されたときに作成された新しいノードによって、ツリーの次の上位層に追加されるエントリが生成される。
【０１１５】
第二に、別の実施形態において、処理されるノードから兄弟ノードへのエントリの（例えばマージによる）完全な移動の結果、処理されたノードが削除され、それによって、ツリーの次の上位層内でこの削除されたノードを参照しているエントリの削除操作が生成される。
【０１１６】
第三に、その他の実施形態において、エントリの内容が変更され、その結果、その代表エントリが変更された処理されるノードによって、削除されてツリーの次の上位層に挿入されるエントリが生成される。
【０１１７】
当然、さまざまな実施形態では、当業者が本説明を読んだときに理解することの中でも特にこれらの事例のうちの１つまたは複数が、ツリーベース・データ構造の処理の１回の反復（または複数回の反復）において発生する場合がある。
【０１１８】
一般に、更新段階は、好ましくは、次の反復中に適用される必要のある操作のセットを識別する出力を生成し、この出力は、好ましくは、ツリーベース・データ構造の異なる層、さらに好ましくは、更新段階の現在の反復中に処理される層の上の層、最も好ましくは、更新段階の現在の反復中に処理される層のすぐ上の層のノードに対応する。
【０１１９】
一部の実施形態では、更新段階において、ヘテロジニアスな操作のセットを更新段階の間に処理されるノード層に適用することに少なくとも部分的に基づいて、出力として新しいノードおよび操作のセットを生成する。新しいノードおよび操作のセットは、ストレージ識別子のリストを含む。新しいノードおよび操作のセット内の各ストレージ識別子は、更新される次のノード層内のノードのうちの１つを識別する。新しいノードおよび操作のセットにおいて識別された次のノード層内のノードは、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のあるノードである。好ましくは、新しいノードおよび操作のセット内の各ストレージ識別子は、少なくとも１つのデータ・エントリおよび操作のペアに関連付けられる。
【０１２０】
更新段階は、ツリーベース・データ構造の終端ノードからルート・ノードまで上昇する（下位から上位への）方法で、ツリーベース・データ構造を層ごとに徐々に更新する、任意の数の反復を含むことができる。
【０１２１】
さまざまな実施形態では、反復更新は、ツリーベース・データ構造の最下層で開始することができ、ルート・ノードを含んでいる層に達するまで、各層を徐々に更新する。あるいは、更新段階では、ツリーベース・データ構造の層のサブセットのみを徐々に更新することができる。
【０１２２】
その他のアプローチでは、反復更新プロセスによって、例えばノード・バランス調整操作またはノード・バランス調整基準あるいはその両方に対応するために、ツリー構造の新しい層が生成される場合もある。ノード・バランス調整操作は、例えばノード・バランス調整がルート・ノードの分割を引き起こし、前のルート・ノードの上の層内の新しいルート・ノードを必要とすることに応答して、新しい層の生成を必要とする場合がある。ノード使用率しきい値などのノード・バランス調整基準も、例えばルート・ノードの分割を必要とすることなどによって、新しいノードの作成を必要とする場合がある。
【０１２３】
したがって、１回の更新段階の反復によって生成されるノードおよび操作のセットは、次の更新段階の反復の入力として機能することができる。好ましくは、この新しいノードおよび操作のセットは、現在の反復において更新される層の上の層内のノードのセットを識別し、これらの識別されたノードは、次の更新段階の反復においてヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のあるノードである。
【０１２４】
その他のアプローチでは、１つまたは複数の更新段階の反復は、ノードまたは操作の入力セットが空であるかどうかを決定すること、および空である場合は、ツリーベース・データ構造の上位層に適用される必要がある変更がそれ以上存在しないため、ツリーベース・データ構造の処理を完了させることを含むこともできる。一部の実施形態では、ルート・ノードに対する権限がすでに確保されている場合、処理の完了は、ルート・ノードに対するそのような権限の解放を含むことができる。その他の実施形態では、そのような権限は排他的権限であってよい。
【０１２５】
ノードおよび操作の入力セットが空でない場合、本明細書で説明された手法は、新しい空のノードおよび操作のセットを作成することと、空のノードおよび操作のセットに、ヘテロジニアスな操作のセットのうちの１つまたは複数が次の更新段階の反復において適用される必要のあるノードのストレージ識別子を入力することと、ストレージ識別子を、次の更新段階の反復において対応するノードに対して実行される１つまたは複数のヘテロジニアスな操作の適切なセットに関連付けることとを含むことができる。
【０１２６】
一実施形態では、更新段階の反復は、ヘテロジニアスな操作のセットのうちの１つまたは複数を、後続の更新段階の反復の場合（ｉ≧１）に前の更新段階の反復中に生成されたか、または１番目の更新段階の反復の場合（ｉ＝０）に検索段階の間に生成された新しいノードおよび操作のセットにおいて列挙されたストレージ識別子を有する特定のノード層内の各ノードに適用することを含むことができる。好ましくは、新しいノードおよび操作のセットにおいて列挙されたストレージ識別子を有する特定のノード層内のノードが葉ノードを含んでいる場合、それらの葉ノードに適用されるヘテロジニアスな操作は、葉ノードのストレージ識別子に関連付けられ、ストレージ・システムへの入力として提供された少なくとも１つのデータ・エントリおよび操作のペアに基づく。さらに、ヘテロジニアスな操作は、新しいノードおよび操作のセットにおいて列挙されたストレージ識別子を有する特定のノード層内の各ノードに同時に一括して適用される。
【０１２７】
図４を参照すると、好ましい実施形態に従って、この反復更新段階のプロセスは、１番目の反復（ｉ＝０）中に第１のノード層４１０ｃ内のノード４０６を更新することと、ヘテロジニアスな操作が適用される必要のある第２のノード層４１０ｂ内のノード４０４を識別する新しいノードおよび操作のセットを生成することと、更新段階の２番目の反復（ｉ＝１）において第２のノード層４１０ｂのノード４０４を更新することとを含む。
【０１２８】
特に好ましい実施形態では、第１のノード層４１０ｃ内のノード４０６は、データ・エントリを記憶する葉ノードであり、Ｂ＋ツリー・データ構造の一部である。第２のノード層４１０ｂ内のノード４０４は、ルーティング情報を記憶している内部ノードである。
【０１２９】
当然、本開示の範囲内のその他の実施形態は、例えば図５および６に一般的に示されているように、データ・エントリまたはルーティング情報あるいはその両方を記憶している複数の層のノードを含んでいるツリーベース・データ構造、ツリーの複数の層でデータ・エントリを記憶しているノードを含んでいるツリーベース・データ構造などを含むことができる。特にこれらの実施形態に従って、反復更新段階は、当業者が本説明を読んだときに理解するように、ツリーベース・データ構造のいずれかの層に対してノードのデータ・エントリを更新すること、ツリーベース・データ構造のいずれかの層に対してノードのルーティング情報を更新すること、ツリーベース・データ構造のいずれかの層に対してノード間の関係を変更すること、ツリーベース・データ構造のいずれかの層に対してノード間で情報を移動させることなどを含むことができる。
【０１３０】
特定のツリー構造にかかわらず、さまざまな実施形態に従って、更新段階は、元のノードおよび操作のセットまたは新しいノードおよび操作のセットあるいはその両方が、ツリーの次の上位層内のノードに対応するいずれかのストレージ識別子を列挙するかどうかを決定することを含むことができる。ノードおよび操作のセットがツリーの次の上位層内のノードに対応するどのストレージ識別子も含んでいないとの決定に応答して、更新段階を終了することが好ましい。
【０１３１】
特に好ましいアプローチでは、検索段階において、ノードは共有された権限を使用してアクセスされ、更新段階において、ノードは排他的権限を使用してアクセスされる。
【０１３２】
特定の層内のノードへのヘテロジニアスな操作の適用は、同時に一括して発生させ、異なるプロセス・スレッドを使用して操作を各ノードに適用することを含む。さらに好ましくは、各プロセス・スレッドは並列に実行され、それによって、ツリーベース・データ構造内のデータを特定して更新するプロセスを高速化しながら、必要な計算コストを少なくすることで、計算時間を削減し、開示された本手法を実装しているストレージ・システムを改善する。
【０１３３】
例えば、ヘテロジニアスな操作を一括して処理し、必要なノード・バランス調整または１回の反復プロセスにおけるツリー構造のその他の操作に対応することによって、開示された本手法は、特定のタイプの操作をツリー全体に適用し、その後、別のタイプの操作によって対象とされるデータ・エントリのいずれかが、特定のタイプの操作がツリー全体に適用される前とは異なる位置にあるかどうかを決定するために、別のタイプの操作に関するデータ・エントリを特定するための別の検索を実行する必要があるということを回避する。
【０１３４】
さまざまな実施形態に従って、更新段階の間にノードを処理することは、ツリーベース・データ構造の特定の層内の複数のノードにまたがるヘテロジニアスな操作の同時一括処理を可能にする任意の適切な方法で実行されてよい。特に好ましい実施形態では、更新段階の間の処理は、図９で表されているように実質的に発生する。
【０１３５】
好ましい実施形態では、入力されたノードおよび操作のセット内のノードに関連付けられた操作は、開示された本発明の概念において効率の向上をもたらし、ストレージ・システム自体の機能をさらに改善する特定の順序で実行される。以下では、この操作の順序についてさらに詳細に説明する。
【０１３６】
葉ノードを含んでいる層を処理する場合のある更新段階の最初の反復中に、ユーザによって提供された操作の順序に従って、または本明細書において指定された望ましい順序に従って、検索段階によって生成された入力されたノードおよび操作のセット内のノードに関連付けられた操作を処理することができる。本明細書において指定された望ましい順序は、有利なことに、操作を特定のノードに適用することから生じる構造の変更を最小限に抑え、したがってアルゴリズムの効率に貢献し、アルゴリズムが実装されたストレージ・システムの機能をさらに改善する。実装された特定の順序にかかわらず、更新段階は、ルート・ノードに対する排他的アクセスを取得することによって開始することができる。
【０１３７】
好ましい順序は、更新操作の実行後に削除操作を実行し、その後、挿入操作を実行することを含む。
【０１３８】
さらに具体的には、実行される１番目の操作は、好ましくは、ノード内のデータ・エントリのペイロードを更新することである。２番目の操作は、ノードからエントリを削除することである。この時点で、ノードのバランス調整操作もマージ操作も、入力されたすべての操作の処理が完了するまで、実行される必要がない。実際、好ましくは、入力されたすべての操作を適用した結果として、処理対象のノードが満杯でなくなっていない限り、バランス調整操作もマージ操作も実行されない。３番目の操作は、エントリをノードに挿入することである。挿入の場合、入力されたすべての操作が適用される前に、ノードが満杯になる場合があり、したがってそのような状況では、挿入時に、ノードが満杯になった場合に、ノードの再バランス調整または分割が適用されることが必要になることがある。
【０１３９】
さまざまな実施形態では、満杯になっているノードは、ノード使用率レベル（すなわち、ノードに記憶されたデータの量）をノードの最大容量と比較することによって決定されてよい。
【０１４０】
同様に、満杯でなくなっているノードは、ノード使用率レベルを最小ノード使用率しきい値と比較することによって決定されてよい。最小ノード使用率しきい値は、ユーザの選択、またはストレージ・システムの特定の必要性（例えば、ストレージ使用率または性能の要件あるいはその両方）に従って事前に決定されてよい。好ましいアプローチでは、最小ノード使用率しきい値は、ノード容量全体の約５０％である。当然、本開示の範囲を逸脱することなく、１００％未満のその他の値（例えば、２５％、３０％、３５％など）が採用されてよい。
【０１４１】
ノードが満杯になる状況に対処するために、ノードの再バランス調整が採用されてよい。好ましくは、このノードの再バランス調整は、満杯になったノードが隣接ノード、好ましくは現在の反復への入力として提供されたノードおよび操作のセットにおいて識別されなかった隣接ノードを有するかどうかを決定することを含む。そのような隣接ノードが存在するとの決定に応答して、ノードの再バランス調整は、満杯になったノードからエントリを移動させることによって、隣接ノード自体が満杯になるかどうかを決定することを含む。隣接ノードが満杯にならないとの決定に応答して、ノードの再バランス調整は、エントリの移動によって、入力されたノードおよび操作のセット内の保留中の挿入が隣接ノードにさらに適用されなくてもよいかどうかを決定することを含む（すべての挿入は、隣接ノードに対してではなく、入力されたノードおよび操作のセットにおいて識別されたノードに適用されなければならない）。挿入が隣接ノードにさらに適用されなくてもよいとの決定に応答して、ノードの再バランス調整は、エントリの移動によって隣接ノードが満杯にならないかどうかを決定することを含む。エントリの移動によって隣接ノードが満杯にならないとの決定に応答して、ノードの再バランス調整は、隣接ノードへのエントリの移動によって、満杯になったノードが指定されたノード使用率の範囲内の（例えば、最小ノード使用率しきい値より高い）ノード使用率レベルを有するようになるかどうかを決定することを含む。移動によってこの結果を達成するとの決定に応答して、エントリを好ましくは移動させる。さらに好ましくは、処理対象のノード内に、保留中の追加の挿入のための容量を生み出すために、複数のエントリを移動させてよい。
【０１４２】
さらに好ましくは、エントリの移動先のノードは、移動の期間中にのみ（例えば排他的アクセスによって）ロックされる。最も好ましくは、このノードの再バランス調整は、すべての挿入が処理対象の層内のノードに適用された後、移動させたエントリを受け取る隣接ノードに適用される挿入がなかった場合にのみ実行される。
【０１４３】
その他の実施形態では、満杯になったノードを緩和するためのノードの再バランス調整は、例えば、上に列挙された決定のいずれかの結果が否定であるために上の移動手順が不可能である場合に、ノードを分割することを含むことができる。
【０１４４】
特に、一部の状況では、ヘテロジニアスな操作のセットをツリーベース・データ構造の特定の層のノードに適用することは、この更新段階の反復の間に、処理対象のノードが満杯になることを複数回発生させる場合があり、したがって１回の更新段階の反復につきノードの再バランス調整を複数回実行することが望ましい場合がある。
【０１４５】
更新段階の反復中に満杯ではなくなったノードは、複数の実施形態に従って、類似する方法で再バランス調整されてよい。例えば、一実施形態では、満杯になっていないノードの問題を緩和するためのノードの再バランス調整は、満杯になっていないノードが、現在の反復への入力として提供されたノードおよび操作のセットにおいて識別されなかった隣接ノードを有するかどうかを決定することを含む。
【０１４６】
その他の実施形態では、そのような隣接ノードが存在するとの決定に応答して、ノードの再バランス調整は、隣接ノードからエントリを移動させることによって、隣接ノード自体が満杯でなくなるかどうかを決定することを含む。
【０１４７】
さらにその他の実施形態では、隣接ノードが満杯でなくなることはないとの決定に応答して、ノードの再バランス調整は、満杯になっていないノードへのエントリの移動によって、満杯になっていないノードが指定されたノード使用率の範囲内の（例えば、最小ノード使用率しきい値より高い）ノード使用率レベルを有するようになるかどうかを決定することを含む。移動によってこの結果を達成するとの決定に応答して、エントリを好ましくは移動させる。
【０１４８】
さらに好ましくは、一部のアプローチでは、エントリの移動元のノードは、移動の期間中にのみ（例えば排他的アクセスによって）ロックされる。最も好ましくは、このノードの再バランス調整は、満杯になっていないノードを望ましいノード使用率の範囲内するために必要な数のエントリまたは必要な量の情報のみを移動させることを含む。
【０１４９】
その他の実施形態では、満杯になっていないノードを緩和するためのノードの再バランス調整は、例えば、上に示された決定のうちの１つまたは複数の結果が否定であるために上の移動手順が不可能である場合に、満杯になっていないノードをマージすることを含むことができる。このような状況では、マージすることは一連の決定を含むことができる。例えば、１つのアプローチでは、ノードをマージすることは、満杯になっていないノードが、入力されたノードおよび操作のセットに含まれていない隣接ノードを有するかどうかを決定することを含む。そのような隣接ノードが存在するとの決定に応答して、満杯になっていないノードをマージすることが、満杯になっていないノードのすべてのエントリを隣接ノードに移動させることによって、隣接ノードが満杯になるかどうかを決定することをさらに含む。満杯になっていないノードのすべてのエントリを隣接ノードに移動させることによって隣接ノードが満杯にならないとの決定に応答して、満杯になっていないノードをマージすることが、満杯になっていないノードのすべてのエントリを隣接ノードに移動させることをさらに含む。以前に満杯ではなく、現在は空のノードのすべてのエントリを移動させた後に、このノードは削除されてよい。エントリは、満杯になっていないノードを空にできるようにするために、満杯になっていないノードから複数の隣接ノードに移動させてよい。
【０１５０】
有利なことに、すぐ上で説明されたマージ操作における移動の方向性、すなわち、隣接ノードから満杯になっていないノードへの移動ではなく、満杯になっていないノードから隣接ノードへのエントリの移動は、マージ操作に関わる隣接ノードを削除する必要性をなくすのに役立つ。これは、他の同時操作がこれらの隣接ノードへのアクセスを同時に必要とする場合があるため、有益であり、一部のアプローチでは、そのようなノードがツリーの別の上位層からまだ参照されているため、このアクセスが可能でなければならない。加えて、この方向性は、望ましくは、他の同時操作との一貫性を保ちながら、削除されたノードが他の同時操作にとって必要ではないという状況をもたらす。
【０１５１】
好ましい実施形態では、現在のノードの処理が完了したときに、そのノードに対する排他的権限がすでに取得されている場合、その権限が解放される。加えて、ツリーの特定の層の処理中に、例えばツリーの他の上位層へのアクセスが、隣接ノードを特定する目的で、例えば共有された権限を使用して、すべての同時操作によって同時に実行される。
【０１５２】
前述したように、現在の層のノードに対する操作の同時処理の出力は、操作が適用される必要のあるツリーの次の層内のノードのストレージ識別子のリストで構成された、新しいノードおよび操作のセットである。一部の実施形態では、新しいノードおよび操作のセットは、ストレージ識別子のリストおよび各ストレージ識別子に関連付けられた１つまたは複数のヘテロジニアスな操作のセットで構成されてよい。
【０１５３】
好ましくは、ツリーの次の層に適用される必要のある新しいノードおよび操作のセットにおいて定義された操作は、現在の層内のノードに適用された操作の結果である。そのような実施形態では、新しいノードおよび操作のセットはペアのリストを含み、それらの各ペアは、エントリ（例えば、データまたはルーティング・エントリ）およびエントリに適用される関連する操作（例えば、挿入、削除、更新など）を含んでいる。そのようなペアのリストのそれぞれは、有利なことに、リスト内の操作が適用される必要のあるノードのストレージ識別子に関連付けられてよい。
【０１５４】
やはり、ツリーの現在の層の処理中に生成されたエントリおよび操作は、有利なことに、ツリーの現在の層の処理の過程で更新、作成、および削除されたノードの新しい形態をサポートする。
【０１５５】
さまざまな実施形態では、ノードの新しい形態をサポートするエントリおよび操作を生成する可能性の高い状況は、処理されたノードが分割されたときに作成される新しいノードを含む。この状況では、ツリーの次の上位層に追加されるエントリを生成する。そのようなエントリは、ツリーの現在の層の処理中に生成されるノードおよび操作のセットに含まれる。
【０１５６】
その他の実施形態では、ノードの新しい形態をサポートするエントリおよび操作を生成する可能性の高い状況は、処理されたノードから隣接ノードへのエントリの移動、特に（例えばマージ操作による）エントリの完全な移動を含む。特に、そのような移動が処理されたノードの削除を引き起こす場合、ツリーの次の層内のその削除されたノードを参照しているエントリの削除を必要とすることは、削除されたノードへの参照が現在無効であるため、有利であることがある。
【０１５７】
さらにその他の実施形態では、ノードの新しい形態をサポートするエントリおよび操作を生成する可能性が高い状況は、ノードの代表エントリを変更する方法でエントリを変更することを含む、更新操作を含む。この状況では、ツリーの次の上位層から削除するため、またはツリーの次の上位層に挿入するため、あるいはその両方のためにエントリを生成することは、有利である。当業者が本説明を読んだときに理解するように、そのような削除および挿入は、変更されたツリー構造に従って、代表エントリがデータまたはルーティング情報あるいはその両方を正しく識別することを保証することによって、ツリー構造およびルーティング・エントリ内の一貫性の維持に役立てることができる。
【０１５８】
好ましい実施形態では、受信された入力内で指定されたヘテロジニアスな操作のセットが特定の層に対して実行され、ノードのバランス調整操作が特定の層に対して実行され、それらの操作の完了時に、新しいノードおよび操作のセットが生成され、更新段階の次の反復で使用するために出力される。
【０１５９】
ツリーベース・データ構造の次の層に対する操作が不要な場合、新しいノードおよび操作のセットが空になる。したがって、更新段階の各反復は、ノードおよび操作のセットが空であるかどうかを決定すること、およびそのような決定に応答して更新段階を終了することを含むことができる。更新段階の終了がツリーベース・データ構造のルート・ノードに対する排他的アクセスを解放することを含むか、または更新段階の終了後にそのような排他的アクセスが解放されるか、あるいはその両方が行われてよい。
【０１６０】
ｎ層Ｂ＋ツリーの同時一括処理
ｎ層Ｂ＋ツリーを含むさらに具体的な状況では、本明細書に記載された手法は、ｎ層Ｂ＋ツリーがデータ構造として実装されたデータ・ストレージ・システムの性能を大幅に改善するために、同様に活用されてよい。ページ化検索ツリー・データ構造に対するヘテロジニアスな操作の同時処理を容易にするためのコンピュータ実装方法が設計される。
【０１６１】
この方法は、好ましくは、ツリーベース・データ構造が記憶されるストレージ・システムで入力を受信することと、その入力に基づいて複数のヘテロジニアスな操作を葉ノードのうちの１つまたは複数に対して同時に一括して実行することとを含む。この入力は、ページ化検索ツリー・データ構造に適用されるヘテロジニアスな操作のセットを識別する。
【０１６２】
方法１０００と同様に、さまざまな実施形態では、さらに具体的な実装が検索段階を含むことができる。検索段階は、好ましくは、ツリーベース・データ構造の各層をルート・ノード層から葉ノード層へ進む順序で評価することと、ヘテロジニアスな操作のセットが適用される必要のある葉ノードを同時に決定することとを含む。
【０１６３】
加えて、検索段階では、ストレージ識別子のリストを含むノードおよび操作のセットの形態で出力を生成する。各ストレージ識別子は、好ましくは、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のある葉ノードのうちの１つを識別し、各ストレージ識別子は、受信された入力において識別された少なくとも１つのデータ・エントリおよび操作のペアに関連付けられる。
【０１６４】
やはり方法１０００と同様の方法で、この方法は、ヘテロジニアスな操作のセットのうちの１つまたは複数を、ノードおよび操作のセットにおいて示されたストレージ識別子を有する葉ノード層（例えば、図４に示されたような葉ノード層４１０ｃ）内の各葉ノードに適用することを伴う更新段階を含むことができる。さらに具体的には、この１番目の反復（すなわちｉ＝０）では、ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する葉ノードごとに、特定の葉ノードに適用されるヘテロジニアスな操作のセットは、好ましくは、この葉ノードのストレージ識別子に関連付けられたデータ・エントリおよび操作のペアに基づく。さらに、好ましいアプローチでは、ヘテロジニアスな操作のセットが、ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する各葉ノードに同時に一括して適用される。
【０１６５】
更新段階では、反復が完了するごとに、新しいノードおよび操作のセットを生成することができる。新しいノードおよび操作のセットは、現在の反復において処理される層よりも高い層内のノード、およびそれらのノードに対して実行される操作を識別する。好ましくは、この定義は、現在の層に適用された操作の結果に基づく。各反復でこの出力を生成することは、ヘテロジニアスな操作をノードおよび操作のセットにおいて列挙されたストレージ識別子を有するノードに適用することに少なくとも部分的に基づいて、新しいノードおよび操作のセットを生成することを含む。
【０１６６】
したがって、一実施形態では、１番目の反復中に生成された新しいノードおよび操作のセットは、好ましくはストレージ識別子のリストを含み、それらの各ストレージ識別子は、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用される必要のあるＢ＋ツリーの次の上位ノード層内の内部ノードのうちの１つを識別する。それに応じて、次の更新段階の反復（ｉ＝１）において、ヘテロジニアスな操作のセットが、新しいノードおよび操作のセットにおいて列挙されたストレージ識別子を有する次の上位ノード層内の内部ノードに適用される。好ましくは、ヘテロジニアスな操作のセットは、ノードおよび操作のセットにおいて列挙されたストレージ識別子を有する第２のノード層内の各内部ノードに同時に一括して適用される。
【０１６７】
前述された反復プロセスは、Ｂ＋ツリー内のエントリに対する必要な変更またはＢ＋ツリー構造に対する変更あるいはその両方の変更の伝達を、層ごとの方式で、それ以上操作が必要でなくなり、ノードおよび操作のセットが空であると決定され、したがって更新段階が終了するまで、続行することができる。好ましくは、ヘテロジニアスな操作のセットは、前の更新段階の反復中に生成されたノードおよび操作のセットにおいて列挙されたストレージ識別子を有する特定の層内の各ノードに同時に一括して適用される。
【０１６８】
ツリー操作中の同時操作の分離
開示された本発明の概念は、データ・エントリおよびツリー構造を更新する計算コストを削減することによって、ツリーベース・データ構造を利用する従来のストレージ・システムの機能に改善をもたらす。前述したように、この改善された効率の重要な態様は、ツリーベース・データ構造の文脈において、ヘテロジニアスな操作の同時一括処理に関する本発明の手法から派生する。
【０１６９】
開示された本発明の手法の追加の態様は、ツリーベース・データ構造の特定の層内の処理対象のノードの処理を分離することによって、さらに高い計算効率をもたらし、これらのヘテロジニアスな操作が同時に一括して処理されることを容易にする。この分離手法は、さまざまな実施形態において、現在の更新段階の反復における処理対象のノードからエントリを受け取ることができるか、またはそのようなノードにエントリを与えることができるか、あるいはその両方を行うことができるノードに資格を与えることを一般に含む。
【０１７０】
実質的に、これによって、更新プロセスが満杯になったノードおよび満杯になっていないノードを効率的に処理できるようにし、そうすることによって、独立した分離された方法で各ノードを処理することを容易にする。この分離は、特にさまざまな操作プロセス・スレッドの並列化と併用された場合に、ツリーの特定の層のノードを同時に処理することによって与えられる効率を向上する。
【０１７１】
一般に、開示された本発明の分離手順は、ノードの再バランス調整およびその他の構造変更操作（特にエントリの移動）への関与について考慮されるノードに資格を与えることによって、特定の層に関して、入力されたノードおよび操作のセットにおいて処理するために指定されたノードの処理を分離する。
【０１７２】
例えば、１つの態様に従って、資格を満たすことができるノードは、それらのノードがツリー全体の変更／更新プロセスを含む他の操作を妨げずに移動操作、マージ操作などに関与できるように、実行されるどの操作との依存関係も有しないノードである。実際、これらの資格を満たすノードは、（１）処理対象のノードに隣接するノード、（２）それら自体が処理対象のノードの入力セットに含まれていないノード、および（３）特定のケースに依存する１つまたは複数の追加資格基準を満たすノードを含む。これらの追加資格基準については、下でさらに詳細に説明される。
【０１７３】
エントリを、処理されるノードから資格を満たすノードに移動させてよい一実施形態では、追加資格基準は、提案された移動が隣接ノードを満杯にするかどうかを含む。この条件が成立する場合、このノードは移動の資格を満たすことはできないが、この条が成立しない場合、このノードは移動の資格を満たすことができる。
【０１７４】
反対に、一実施形態では、エントリの移動元のノード自体が移動の結果として満杯でない状態にならない場合、このノードは、ノードから処理対象の隣接ノードへのエントリの移動に関与する資格を満たすことができる。したがって、追加資格基準は、ノードの望ましい使用率の範囲を一般に含み、資格付与プロセスは、好ましくは、ノード使用率レベルを望ましい使用率の範囲に対して評価することと、提案された移動が望ましい使用率の範囲の違反を引き起こすかどうか決定することと、提案された移動がそのような違反を引き起こさないとの決定に応答して、ノードに資格を与えることとを含むことができる。
【０１７５】
その他の実施形態では、このシナリオにおける追加資格基準は、移動が提案された移動の移動先の隣接ノードに、保留中の挿入操作をさらに適用することを必要とするかどうかを含むことができる。やはり、挿入操作をさらに適用することを必要とする場合、このノードは資格を満たすことはできないが、挿入操作をさらに適用することを必要としない場合、このノードは資格を満たすことができる。
【０１７６】
さらに別のシナリオでは、追加資格基準は、提案されたマージ操作の方向性を含むことができる。
【０１７７】
さらに具体的には、資格付与は、隣接ノードとの処理されるノードの提案されたマージが、処理されるノードのすべてのエントリを隣接ノードに移動させること、またはその逆方向に移動させることを含むかどうかを決定することを含むことができる。提案されたマージが処理されるノードのすべてのエントリを隣接ノードに移動させることを含むとの決定に応答して、それらの隣接ノードはエントリの移動の資格を満たすことができる。そのような決定が行われない場合、それらの隣接ノードは資格を満たすことができない。
【０１７８】
さらに、許可されたマージの一方向の性質は、隣接ノードではなく処理されるノードが、マージ操作の後に削除の対象になるということを意味する。好ましくは、隣接ノードはマージ操作によって削除されない。
【０１７９】
特定のシナリオおよび資格基準にかかわらず、好ましいアプローチでは、移動を他の操作と同時に実行できるようにするために、隣接ノードが排他的権限によってロックされる。ただし、そのような排他的アクセスに関連付けられた遅延を最小限に抑えるために、隣接ノードが、好ましくは一時的にロックされ、さらに好ましくは移動操作の期間中にのみロックされる。移動の完了時に、ノードに対する排他的アクセスが解放され、他の同時処理は効率的な方法で続行することができる。同様に、変更操作によって処理されるノードは、好ましくは排他的アクセスによって一時的にのみロックされ、さらに好ましくは特定の変更操作の期間中にのみロックされる。
【０１８０】
当業者が本説明を読んだときに理解するように、１つまたは複数のヘテロジニアスな操作によって処理される特定のノードが、本明細書に記載された移動に対応するのに適した資格を満たす隣接ノードを有することができないという可能なシナリオが確かに存在する。そのような状況では、処理の結果として処理されたノードが満杯になった場合、処理されるノードからエントリを移動させるための資格を満たす隣接ノードが存在しないとの決定に応答して、処理されるノードが好ましくは分割される。特に、処理されるノードに対する挿入操作の処理中に、そのような複数の分割操作が発生する可能性がある。
【０１８１】
特に、開示された本発明の実施形態は、さまざまなアプローチに従って、追加された間接アドレスのマッピング（indirect address mapping）を必要とせずに、水平方向の同時処理によって優れた同時性を実現する。追加された間接アドレスのマッピングは、望ましくないことに、追加のオーバーヘッドおよび追加のリソース消費（例えば、追加のＩ／Ｏ操作、処理時間、ストレージなど）をもたらし、これを防ぐことによって、ストレージ・システムの機能が改善される。
【０１８２】
ここで図１１を参照すると、ノードの分離の同時一括処理を容易にするようにノードを分離するための方法１１００のフローチャートが、一実施形態に従って示されている。方法１１００は、さまざまな実施形態において、特に図１〜６に示された環境のいずれかにおいて本発明に従って実行されてよい。当然、当業者が本説明を読んだときに理解するように、図１１において具体的に説明された処理よりも多いか、または少ない処理が方法１１００に含まれてよい。
【０１８３】
方法１１００の各ステップは、動作環境の任意の適切なコンポーネントによって実行されてよい。例えば、さまざまな実施形態では、方法１１００は、ストレージ・システム・マネージャ、または１つまたは複数のプロセッサを備えているその他のデバイスによって、部分的に、または全体的に実行されてよい。プロセッサ（例えば、ハードウェアまたはソフトウェアあるいはその両方において実装され、好ましくは少なくとも１つのハードウェア・コンポーネントを含んでいる処理回路、チップ、またはモジュール、あるいはこれらの組み合わせ）が、方法１１００の１つまたは複数のステップを実行するために任意のデバイス内で利用されてよい。プロセッサの例は、中央処理装置（ＣＰＵ）、特定用途向け集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）など、これらの組み合わせ、または当技術分野において知られた任意のその他の適切なコンピューティング・デバイスを含むが、これらに限定されない。
【０１８４】
図１１に示されているように、方法１１００は処理１１０２から開始することができ、処理１１０２では、入力が、ツリーベース・データ構造が記憶されるストレージ・デバイスを管理するストレージ・システムで受信される。この入力は、ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する。
【０１８５】
方法１１００は処理１１０４も含み、処理１１０４では、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用されるツリーベース・データ構造の１つまたは複数のノードが識別されるか、または決定される。この決定は、さまざまな実施形態において、本説明に一致する任意の適切な方法で実行されてよい。好ましいアプローチでは、この決定は、前述したように、ツリーベース・データ構造内で入力エントリを検索し、それらの入力エントリを収容しているノードを決定することに基づくか、あるいは検索段階によって、または前の更新段階の反復によって生成されたノードおよび操作の出力に基づく。
【０１８６】
さらに方法１１００は処理１１０６を含み、処理１１０６では、１つまたは複数のノードに適用されるヘテロジニアスな操作のセットのうちの１つまたは複数のグループが識別されるか、または決定される。この決定は、さまざまな実施形態において、本説明に一致する任意の適切な方法で実行されてよい。好ましくは、この決定は、１つまたは複数の操作がどのノードに適用されるかに基づいて達成され、さまざまなアプローチでは、ノードおよび操作のセットに含まれるデータに基づいて達成されてよい。
【０１８７】
好ましいアプローチでは、この決定は、前述したように、検索段階または前の更新段階の反復から出力されたノードおよび操作に少なくとも部分的に基づく。特に、当業者が本説明を読んだときに理解するように、この決定は、ヘテロジニアスな操作が適用される必要のあるノードに従ってヘテロジニアスな操作をグループ化することを含むことができる。
【０１８８】
その他の好ましいアプローチでは、ノードおよび操作のセット内の各ノードは、ツリーベース・データ構造の同じ層を占める。
【０１８９】
方法１１００は、処理１１０８において、ノードおよび操作のセット内の各ノードの処理を、独立して処理するために分離することを含む。本明細書において理解されているように、ノード処理の分離は、１つまたは複数のヘテロジニアスな操作を使用してノードを処理できるように構成された任意の適切な手法またはメカニズムを含み、この処理は、ノードおよび操作のセット内の他のノードに対するヘテロジニアスな操作の処理とは無関係に発生させる。好ましくは、ノードの分離は、セット内のノードに適用されるヘテロジニアスな操作のセット全体が、ツリー内（特に現在の層内）の他のノードに対するヘテロジニアスな操作の処理を妨げずに実行されることが可能であるように、ノードおよび操作のセット内の各ノードを分離することを含む。例えば、一実施形態では、分離されたノードの独立した処理は、異なるプロセス・スレッド上で各ノードを処理することを含む。
【０１９０】
したがって、方法１１００は処理１１１０も含み、処理１１１０では、ノードおよび操作のセット内の各ノードが、ノードのセットに適用されると決定されたヘテロジニアスな操作のセットのうちの１つまたは複数のグループを使用して処理される。ノードのセット内の各ノードは、好ましくは、同時に独立して処理される。
【０１９１】
好ましくは、各プロセス・スレッドが実質的に同時に実行されるように、すべてのノードが同時に処理される。当然、一部のスレッドの実行時間が他のスレッドよりも長くなる場合があるが、当業者が本説明を読んだときに理解するように、同時の独立した処理は、セット内のすべてのスレッドの処理が実質的に同時に開始され、すべてのスレッドが実質的に同一の時間ウィンドウの間に処理される実施形態を含む。
【０１９２】
当業者が本説明を読んだときに理解するように、上で示された方法１１００は、セット内のノードに適用されると決定された１つまたは複数のヘテロジニアスな操作のグループを使用する、ノードのセットの独立した分離された同時処理を企図する。当然、方法１１００は、上で示された方法と同様の方法で、ノードの複数の異なるセットに対してヘテロジニアスな操作の複数の異なるグループを処理することを含むことができる。
【０１９３】
例えば、一実施形態例では、方法１１００は、ノードの異なるセットに対して操作の複数の異なるグループを処理することを含むことができ、さまざまなセット内のすべてのノードは、ツリーベース・データ構造の１つの層を占める。簡略化のために、ツリーベース・データ構造の例は、（例えば図４〜６に示されているように）４つのノードＮ１、Ｎ２、Ｎ３、およびＮ４を含んでいる層を含むと仮定する。
【０１９４】
そのようなシナリオの例では、方法１１００は、更新操作および挿入操作を含んでいるヘテロジニアスな操作のグループが、Ｎ１、Ｎ２、およびＮ３を含んでいるノードのセットに適用される必要があると決定すること、ならびに更新操作および削除操作を含んでいるヘテロジニアスな操作の異なるグループが、Ｎ３およびＮ４を含んでいるノードのセットに適用される必要があると決定することを含むことができる。当業者が本説明を読んだときに理解するように、任意の数のそのようなグループおよびセットが決定されてよく、本明細書において説明されているように、独立した同時処理のために、対応するノードが分離されてよい。
【０１９５】
当然、方法１１００は、前述された特徴および下で示される特徴の例などの、任意の数の追加または代替あるいはその両方の特徴を含むことができる。
【０１９６】
一実施形態では、方法１１００は、１つまたは複数のノードがノードの再バランス調整操作に関与する資格を満たすかどうかを決定することを含むことができる。好ましくは、この決定は、ノード再バランス調整基準（node re-balancing criteria）に基づき、具体的には、次の考慮事項の任意の組み合わせ、並べ替え、または統合を含むことができる。
【０１９７】
１つのアプローチでは、１つまたは複数のノードがノードの再バランス調整に関与する資格を満たすかどうかの決定は、ノードのセット内の少なくとも１つのノードに隣接する１つまたは複数のノードを識別することと、１つまたは複数の隣接ノードのいずれかがノードのセットから除外されるかどうかを決定することと、１つまたは複数の隣接ノードのうちの少なくとも１つがノードのセットから除外されるとの決定に応答して、１つまたは複数の隣接ノードのうちの少なくとも１つに資格を与えることを含む。好ましくは、隣接ノードは、ストレージ・システムによって受信された入力内で指定されたどの操作の対象でもない。
【０１９８】
好ましい実施形態では、ノードの再バランス調整操作は、ノードのセット内のノードとノードのセットから除外されたノードとの間のエントリの移動を少なくとも含む。当然、方法１１００は、当業者が本説明を読んだときに理解するように、更新操作、分割操作、マージ操作などのノードの再バランス調整操作を同様に含むことができる。
【０１９９】
エントリの移動が、ノードのセット内のノードから、ノードのセットから除外されたノードへエントリを移動させることを含んでいる実施形態では、１つまたは複数のノードが、ノードの再バランス調整操作に関与する資格を満たすかどうかを決定することは、次の構成操作のうちの１つまたは複数を含むことができる。１つのアプローチでは、ノードが資格を満たすかどうかを決定することは、ノードのセットから除外されたノードがエントリの移動の結果として満杯になるかどうかを決定することと、ノードのセットから除外されたノードがエントリの移動の結果として満杯にならないとの決定に応答して、ノードのセットから除外されたノードに移動の資格を与えることとを含む。
【０２００】
さらに、ノードのセットから除外されたノードがエントリの移動の結果として満杯になるかどうかを決定することは、移動後のノードのセットから除外されたノードの使用率レベルを推定することと、ノードのセットから除外されたノードの推定された使用率レベルを、最大使用率しきい値またはノードのストレージ容量と比較することとを含むことができる。推定された使用率レベルが最大使用率しきい値またはノードのストレージ容量を超えない場合、そのノードは資格が与えられてよい。推定された使用率レベルが最大使用率しきい値またはノードのストレージ容量を超える場合、好ましくは、そのノードは資格が与えられない。
【０２０１】
同様の方法で、エントリの移動が、ノードのセットから除外されたノードから、ノードのセット内のノードへエントリを移動させることを含んでいる実施形態では、１つまたは複数のノードが、ノードの再バランス調整操作に関与する資格を満たすかどうかを決定することは、次を含むことができる。一実施形態では、このプロセスは、ノードの共通セットから除外されたノードがエントリの移動の結果として満杯でなくなるかどうかを決定することと、ノードのセットから除外されたノードがエントリの移動の結果として満杯でなくなることがないとの決定に応答して、ノードのセットから除外されたノードに移動の資格を与えることとを含む。
【０２０２】
したがって、ノードのセットから除外されたノードがエントリの移動の結果として満杯でなくなるかどうかを決定することは、移動後のノードのセットから除外されたノードの使用率レベルを推定することと、ノードのセットから除外されたノードの推定された使用率レベルを、最小使用率しきい値と比較することとを含むことができる。推定された使用率レベルが最小使用率しきい値を満たすか、または超える場合、そのノードは資格が与えられてよい。推定された使用率レベルが最小使用率しきい値を満たさないか、または超えない場合、好ましくは、そのノードは資格が与えられない。
【０２０３】
さらにその他の実施形態では、ノードの再バランス調整操作はマージ操作を含むことができる。したがって、この方法は、ノードのセット内のノード内のすべてのエントリを、ノードのセットから除外されたノードに移動させることを含むことができる。１つまたは複数のノードが、マージ操作を含んでいるノードの再バランス調整操作に関与する資格を満たすかどうかを決定することは、好ましくは、ノードのセットから除外されたノードがエントリの移動の結果として満杯になるかどうかを決定することと、ノードのセットから除外されたノードがエントリの移動の結果として満杯にならないとの決定に応答して、ノードのセットから除外されたノードに移動の資格を与えることとを含む。マージ操作を完了させるために、すべてのエントリをセットから除外されたノードに移動させた後に、エントリの移動元だった、空になったノードのセット内のノードが削除される。
【０２０４】
上で暗に示されたように、さまざまな実施形態では、ノードの再バランス調整は、ノードの再バランス調整操作に関与する資格を満たすノードへの排他的アクセスを取得することを含むことができる。好ましくは、排他的アクセスは、ノードの再バランス調整操作に関与するノードの更新を開始する前に取得され、さらに好ましくは、ノードの再バランス調整操作に関与するノードの更新を開始する直前に取得される。このプロセスの実施形態例は、ノードの再バランス調整操作に関与する資格を満たすノードを使用してノードの再バランス調整操作を実行することと、ノードの再バランス調整操作の完了時に、ノードの再バランス調整操作に関与する資格を満たすノードに対する排他的アクセスを解放することとを含むことができる。したがって、排他的アクセスは、好ましくは、ノードの再バランス調整操作の期間に実質的に等しい時間の間存在する。
【０２０５】
さらにその他の実施形態では、ノードの再バランス調整操作は、例えば分割操作に従って、ノードのセット内のノードからのエントリの移動を含むことができる。したがって、１つまたは複数のノードがノードの再バランス調整操作に関する資格を満たすかどうかを決定することは、ノードのセット内の少なくとも１つのノードに隣接する１つまたは複数のノードを識別することと、１つまたは複数の隣接ノードのいずれかがノードのセットから除外されるかどうかを決定することと、ノードのセットから除外された隣接ノードが、エントリの移動の結果として満杯になるかどうかを決定することと、ノードのセットから除外された隣接ノードが、エントリの移動の結果として満杯になるとの決定に応答して、ノードのセット内のノードを分割することとを含むことができる。
【０２０６】
当然、前述したことは、同時一括処理のためにノードを分離するための発明の手法の単なる実施形態例であり、本開示の範囲を限定していると見なされるべきではない。
【０２０７】
効率的な操作の順序付け
上で参照されているように、開示された本発明の概念は、ノードに適用されるヘテロジニアスな操作の新しい効率的な順序付けを提供することによって、従来のストレージ・システム・アーキテクチャでの機能の改善ももたらす。ヘテロジニアスな操作は、ヘテロジニアスな操作が影響を与えるノードに従ってグループ化された後、操作の適用から生じる構造の変更を最小限に抑える特定の順序で、ヘテロジニアスな操作のタイプに従って各グループ内で順序付けされる。これによって、アルゴリズムの各段階によって生成された出力操作セットのサイズが大幅に減少し、したがってツリーベース・データ構造の処理を完了させるために必要な操作の総数が減少し、本手法によってもたらされる計算効率の向上に寄与するという有利な結果が得られる。
【０２０８】
例えば、一実施形態では、ノードの特定のグループは、特定のグループ内の各ノードのエントリが変更される更新操作による影響を受ける。ノードは処理のためにグループ化され、そのグループ内で、更新操作（例えば、挿入、削除など）を実行することによって必要になる構造の変更が評価される。
【０２０９】
更新および任意の望ましいノード・バランス調整を達成するために必要な操作のセットを決定するときに、操作のセットは、好ましくは本明細書において示された好ましい順序に従って実行される。やはり、好ましい順序は、更新操作の実行後に削除操作を実行し、その後、挿入操作を実行することを含む。ただし、他の実施形態では、ユーザによって定義された順序が（例えば受信された入力内で）強制され、実施されてよい。
【０２１０】
したがって、図１２に示されているように、方法１２００は処理１２０２から開始することができ、処理１２０２では、入力が、ツリーベース・データ構造が記憶されるストレージ・デバイスを管理するストレージ・システムで受信される。この入力は、ツリーベース・データ構造に適用されるヘテロジニアスな操作のセットを識別する。
【０２１１】
方法１２００は処理１２０４も含み、処理１２０４では、ヘテロジニアスな操作のセットのうちの１つまたは複数が適用されるツリーベース・データ構造の１つまたは複数のノードが識別されるか、または決定される。この決定は、さまざまな実施形態において、本説明に一致する任意の適切な方法で達成されてよい。好ましいアプローチでは、この決定は、前述したように、ツリーベース・データ構造内で入力エントリを検索し、それらの入力エントリを収容しているノードを決定することに基づくか、あるいは検索段階によって、または前の更新段階の反復によって生成されたノードおよび操作の出力に基づく。
【０２１２】
さらに方法１２００は処理１２０６を含み、処理１２０６では、１つまたは複数のノードに適用されるヘテロジニアスな操作のセットのうちの１つまたは複数のグループが識別されるか、または決定される。この決定は、さまざまな実施形態において、本説明に一致する任意の適切な方法で達成されてよい。
【０２１３】
好ましいアプローチでは、この決定は、前述したように、検索段階から出力されたノードおよび操作、または更新段階の前の反復から出力されたノードおよび操作のセット、あるいはその両方に少なくとも部分的に基づく。特に、この決定は、当業者が本説明を読んだときに理解するように、ノードのセットのストレージ識別子に基づいてノードのセットを識別することと、ノードのセットがすべて、挿入操作、削除操作、マージ操作、分割操作、更新操作などのうちの１つまたは複数の対象にされると決定することとを含むことができる。
【０２１４】
その他の好ましいアプローチでは、１つまたは複数のノードのセット内の各ノードは、ツリーベース・データ構造の同じ層を占める。
【０２１５】
方法１２００は処理１２０８をさらに包含し、処理１２０８においてヘテロジニアスな操作のセットのうちの１つまたは複数のグループが適用される。重要なことに、各グループ内で適用される操作のセットは、事前に定義された順序に従って適用される。好ましくは、事前に定義された順序は、本明細書において示された好ましい順序である。
【０２１６】
当然、当業者が本説明を読んだときに理解するように、方法１２００は、本明細書に記載された任意の数の追加の機能または特徴あるいはその両方を含むこともできる。さまざまな実施形態では、方法１２００は、以下の特徴または機能あるいはその両方のうちの任意の１つまたは複数を含むことができる。
【０２１７】
有利なことに、事前に定義された順序に従ってヘテロジニアスな操作のセットをノードのセットに適用することを含む開示された本発明の実施形態は、ツリーベース・データ構造の構造の変更の数を最小限に抑えること、およびヘテロジニアスな操作のセットをツリーベース・データ構造の特定の層に適用した結果として生成される出力ノードおよび操作のセットのサイズを削減することによって、ストレージ・システムの機能を改善する。
【０２１８】
一般的に前述したように、事前に定義された順序は、更新操作を適用してから、削除操作を適用した後に、挿入操作を適用することを含む。したがって、一実施形態では、方法１２００は、ヘテロジニアスな操作のセットにおいて識別された削除操作を実行する前にヘテロジニアスな操作のセットにおいて識別された更新操作を実行することと、ヘテロジニアスな操作のセットにおいて識別された挿入操作を実行する前にヘテロジニアスな操作のセットにおいて識別された削除操作を実行することとを含むことができる。
【０２１９】
同様に、その他の実施形態では、事前に定義された順序は、好ましくは特定のノードに対するヘテロジニアスな操作のセットにおいて識別された更新操作、削除操作、および挿入操作をすべて実行した後に、ノードの再バランス調整操作（例えば、エントリの移動操作、分割操作、またはマージ操作）を実行することを含むことができる。ノードの再バランス調整を実行することは、好ましくは、入力において指定された操作のグループを実行した後に、ノードのセット内のノードが満杯であるか、または満杯でないかを決定することに応答して実行される。
【０２２０】
その他のアプローチでは、事前に定義された順序は、ノードのセット内のノードが、操作のグループを実行する過程で満杯になるとの決定に応答して分割操作を実行することを含む。
【０２２１】
さらに、一部の実施形態において前述したように、操作の順序はユーザによって指定されてよく、詳細には、操作がデータ・エントリを記憶しているノードのセットに適用されるときに指定されてよく、さらに詳細には、操作が本明細書に記載された更新段階の１番目の反復中にＢ＋ツリーの葉ノードのセットに適用されるときに指定されてよい。
【０２２２】
したがって、方法１２００は、追加または代替あるいはその両方として、ユーザによって提供された順序が入力において指定されたとの決定に応答して、事前に定義された順序をオーバーライドすることを含むことができ、このユーザによって提供された入力は、データ・エントリを記憶するツリーベース・データ構造に適用されるヘテロジニアスな操作のセットのうちの１つまたは複数に対応する。
【０２２３】
当然、前述したことは、同時一括処理のためにノードを分離するための発明の手法の単なる実施形態例であり、本開示の範囲を限定していると見なされるべきではない。
【０２２４】
開示された本手法は、前述の発明の概念を使用して多くの有益な特徴を可能にして提供し、例えばストレージ・システムのアクセス操作、Ｉ／Ｏ、およびプロセッサの負荷を削減することによって、従来のデータ・ストレージ・システムの機能を改善するように単独で、および組み合わせて動作させる。さらに具体的には、開示された本発明の概念は、ヘテロジニアスな操作のセットの効率的な同時処理に関して最適化される方法で、ヘテロジニアスなタイプの操作を一括して処理することを可能にする。加えて、ツリーの現在の層内の処理対象の各ノードの処理の分離は、操作の効率的な同時一括処理を可能にする。さらに、アルゴリズムの効率に寄与する操作の最大限に効率的な順序を定義することによって、操作を適用することから生じる構造の変更が最小限に抑えられる。
【０２２５】
したがって、開示された本発明の概念は、データ構造にアクセスして変更するためにトランザクションを使用する応用によく適合し、そのような応用のための包括的な解決策を提供するが、そのような応用は、操作を蓄積してから、データ構造に適用する前に操作を減らす可能性のある多くの使用事例および応用では、非常に一般的なアーキテクチャである。さらに具体的には、開示された本発明の概念は、ページ化検索ツリー・データ構造の一般的なファミリに適用可能であり、多くの応用において広く使用されるコンポーネントの効率を改善するために、広い適用可能範囲を有する解決策を提供する。ただし、これらの開示が、データベース・システム、ファイル・システム、ストレージおよび重複排除システム（storage and deduplication systems）などの、ツリーベース・データ構造を使用する多くのシステムに適用できる概念を提示し、したがって広い適用可能性を有するということが理解されるべきである。
【０２２６】
本明細書において提示された説明から複数の組み合わせを作成して、前述のシステムまたは方法あるいはその両方のさまざまな特徴が任意の方法で組み合わされてよいということは明らかである。本発明の実施形態が、サービスをオンデマンドで提供するように顧客のために展開されるサービスの形態で提供されてよいということがさらに理解されるであろう。
【０２２７】
以上でさまざまな実施形態が説明されたが、これらの実施形態は単に例として提示されており、これらに限定されないということが理解されるべきである。したがって、好ましい実施形態の広さおよび範囲は、前述された実施形態例のいずれかによって限定されるべきではなく、添付の特許請求の範囲およびそれらと均等なもののみに従って定められるべきである。
【図１】
0006714692.tif 000002
【図２】
0006714692.tif 000003
【図３】
0006714692.tif 000004
【図４】
0006714692.tif 000005
【図５】
0006714692.tif 000006
【図６】
0006714692.tif 000007
【図７】
0006714692.tif 000008
【図８】
0006714692.tif 000009
【図９】
0006714692.tif 000010
【図１０】
0006714692.tif 000011
【図１１】
0006714692.tif 000012
【図１２】
0006714692.tif 000013