(57)【要約】  データベース管理システム（ＤＢＭＳ）は、ホストＣＰＵを動作させ、ハードウェアコプロセッサは、ツリータイプのデータ構造物がホストＣＰＵによって要求されるとき、ツリータイプのデータ構造物の部分を記憶するためにキャッシュにおいて再使用可能なメモリを割り当てることによってツリータイプのデータ構造物のスキャンを加速する。ハードウェアコプロセッサは、ホストＣＰＵに対して透過的な方式で、キャッシュされたツリータイプのデータ構造物を管理する。ホストＣＰＵに又は別個のコンピューティングデバイスにあるドライバーは、ホストＣＰＵとハードウェアコプロセッサとの間のインターフェースを用意することができ、以て、ホストＣＰＵとハードウェアコプロセッサとの間の通信を低減する。
2018502373.tif 000002
【特許請求の範囲】
【請求項１】
１つ又は複数のプロセッサによって実行可能なコンピューター可読媒体において少なくとも部分的に実施されたデータベース管理システム（ＤＢＭＳ）であり、クエリの受信に応答して、クエリを送るように構成された前記ＤＢＭＳと、
１つ又は複数のプロセッサによって実行可能なコンピューター可読媒体において少なくとも部分的に実施されたドライバーであり、前記ＤＢＭＳからの前記クエリの受信に応答して、修正されたクエリを送るように構成され、それによってより効果的探索ツールを作成する、ドライバーと
を備える、システム。
【請求項２】
前記ＤＢＭＳと関連する１つ又は複数のツリータイプのリレーショナルデータベースデータ構造物のうちの１つの少なくとも一部に関連する前記ツリータイプのリレーショナルデータベースデータ構造物を記憶するためのキャッシュメモリを備える、ハードウェアにおいて少なくとも部分的に実施された、論理デバイスであって、前記修正されたクエリの受信に応答して、
前記修正されたクエリに少なくとも基づいて前記キャッシュメモリに記憶された前記ツリータイプのリレーショナルデータベースデータ構造物のノードをスキャンし、
各スキャンされたノードにあるデータの部分を取得し、
データの前記取得された部分を前記ドライバーに送る
ように構成された、論理デバイス
をさらに備える、請求項１に記載のシステム。
【請求項３】
前記ドライバーが、前記ＤＢＭＳと前記論理デバイスとの間の通信を減らすように構成された、請求項１又は２のいずれかに記載のシステム。
【請求項４】
前記ドライバーが、データの前記部分の受信に応答して、
前記ＤＢＭＳと関連する前記ツリータイプのリレーショナルデータベースデータ構造物のうちの１つに記憶されたデータに少なくとも基づいて、前記データの前記部分を検証し、
前記データの前記検証された部分を前記ＤＢＭＳに送る
ように構成された、請求項１又は２のいずれかに記載のシステム。
【請求項５】
前記クエリが、関連ノードにあるクエリ値及びデータを少なくとも備えるノードレベルクエリであり、前記修正されたクエリが、前記クエリ値及びノード識別子を備えるツリーレベル要求である、請求項１又は２のいずれかに記載のシステム。
【請求項６】
前記ドライバーが、データの部分の受信に応答して、
前記データの前記受信された部分が不整合であるかどうかを決定し、
前記データの前記受信された部分が不整合であるという決定に応答して、前記クエリ、ノードデータ及びパス情報を送る
ように構成され、
前記クエリ、前記ノードデータ、及び前記パス情報の受信に応答して、
前記ノードデータに関連するノードのページを割り当てるステップ、又は、
前記ノードデータに関連する以前にキャッシュされたページに含まれるデータ値又はポインター情報のうちの少なくとも１つを更新するステップ
のうちの少なくとも１つを実行するように構成された、論理デバイス
をさらに備える、請求項１又は２のいずれかに記載のシステム。
【請求項７】
前記クエリ、ノードデータ及びパス情報の受信に応答して、前記受信されたクエリと関連するノードの論理デバイスと関連するキャッシュメモリ内でページを連続的に割り当てるように構成された、論理デバイスをさらに備え、前記ノードデータ及び前記パス情報が、前記キャッシュメモリが前記受信されたクエリと関連付けられた前記ノードに関連するページを現在含まないときに、割り当てルールに少なくとも基づく、請求項１に記載のシステム。
【請求項８】
前記ドライバーが、
前記論理デバイスから送られたデータの部分の検証を試み、
前記データの前記部分の検証ができないことに応答して、前記クエリ、ノードデータ及びパス情報を送る
ように構成され、
論理デバイスがデータの前記部分を前に送った後、前記クエリ、前記ノードデータ、及び前記パス情報の受信に応答して、前記受信されたノードデータ又は前記受信されたパス情報のうちの少なくとも１つに関連する前記以前にキャッシュされたページに含まれる前記データ値又はポインター情報のうちの少なくとも１つを更新する、前記論理デバイスをさらに備える、請求項１に記載のシステム。
【請求項９】
前記ドライバーが、
ルックアップテーブル（ＬＵＴ）内のノードとして前記論理デバイスから受信された受信データの部分を記憶し、
前記ＤＢＭＳからの前記クエリの受信に応答して、
前記ＬＵＴ内に記憶された情報が前記受信されたクエリと関連するかどうかを決定し、
前記ＬＵＴ内に記憶された情報が前記受信されたクエリと関連するという決定に少なくとも基づいて前記ＬＵＴ内に記憶された前記情報を前記ＤＢＭＳに送る
ように構成された、請求項１又は２のいずれかに記載のシステム。
【請求項１０】
修正されたクエリの受信に応答して、
前記修正されたクエリに少なくとも基づいて、前記論理デバイスに関連するメモリに以前にキャッシュされたツリータイプのリレーショナルデータベースデータ構造物のノードをスキャンし、
各スキャンされたノードにあるデータの少なくとも部分を取得し、
データの前記取得された部分を前記ドライバーに送る
ように構成された、論理デバイスをさらに備え、
スキャンされたノードにあるデータの前記取得された部分が、ノード識別子に関連する少なくとも１つの第１のデータ値及び関連するキャッシュされたページ内の第１のデータ値の序数位置及び前記第１のデータ値に対して所定のロケーションにある少なくとも１つの第２のデータ値及び前記キャッシュされたノード内の前記第２のデータ値の序数位置のうちの少なくとも１つを備える、請求項１に記載のシステム。
【請求項１１】
前記修正されたクエリの受信に応答して、
前記修正されたクエリに少なくとも基づいて、前記論理デバイスに関連するメモリに以前にキャッシュされたツリータイプのリレーショナルデータベースデータ構造物のノードをスキャンし、
各スキャンされたノードにあるデータの少なくともいくらかの部分を取得し、
データの前記取得された部分を前記ドライバーに送る
ように構成された、論理デバイスをさらに備え、
前記少なくとも１つの第１のデータ値が、前記ノード識別子と関連する下限値又は上限値のうちの少なくとも１つを備え、前記少なくとも１つの第２の値が、下限値よりも少なくとも１小さい序数位置にある値又は上限値よりも少なくとも１大きい序数位置にある値のうちの少なくとも１つを備える、請求項１に記載のシステム。
【請求項１２】
１つ又は複数のプロセッサによって実行可能なコンピューター可読媒体において少なくとも部分的に実施されたデータベース管理システム（ＤＢＭＳ）で、クエリの受信に応答して、クエリをドライバーに送るステップと、
１つ又は複数のプロセッサによって実行可能なコンピューター可読媒体において少なくとも部分的に実施された前記ドライバーで、前記ＤＢＭＳからの前記クエリの受信に応答して、修正されたクエリをハードウェア論理デバイスに送るステップと、
前記ハードウェア論理デバイスで、前記修正されたクエリの受信に応答して、
前記修正されたクエリに少なくとも基づいて前記ハードウェア論理デバイスに関連するメモリにおいて以前にキャッシュされたツリータイプのリレーショナルデータベースデータ構造物のノードをスキャンするステップ、
各スキャンされたノードにあるデータの少なくとも部分を取得するステップ、及び、
データの前記取得された部分を前記ドライバーに送り、それによって、より効果的探索ツールを作成するステップ
を含む、方法。
【請求項１３】
前記ドライバーで、
前記ハードウェア論理デバイスからのデータの部分の受信に応答して、前記ＤＢＭＳと関連する前記１つ又は複数のツリータイプのリレーショナルデータベースデータ構造物のうちの１つで記憶された関連データに少なくとも基づいて前記データの前記部分を検証するステップと、
前記データの前記部分の検証に応答して、前記データの前記検証された部分を前記ＤＢＭＳに送るステップと、
前記部分の検証がないことに応答して、前記クエリ、ノードデータ及びパス情報を前記ハードウェア論理デバイスに送るステップと、
前記ハードウェア論理デバイスで、前記クエリ、前記ノードデータ及び前記パス情報の受信に応答して、
前記ノードデータに関連するノードのページを割り当てるステップ、又は、
前記ノードデータに関連する以前にキャッシュされたページに含まれるデータ値又はポインター情報のうちの少なくとも１つを更新するステップ
のうちの少なくとも１つを実行するステップと
をさらに含む、請求項１２に記載の方法。
【請求項１４】
前記ハードウェア論理デバイスで、前記クエリ、ノードデータ及びパス情報の受信に応答して、前記受信されたクエリと関連するノードの前記ハードウェア論理デバイスに関連するキャッシュメモリ内でページを連続的に割り当てるステップをさらに含み、前記ノードデータ及び前記パス情報が、前記キャッシュメモリが前記受信されたクエリと関連付けられた前記ノードに関連するページを現在含まないときに、割り当てルールに少なくとも基づく、請求項１２に記載の方法。
【請求項１５】
前記ドライバーで、
ルックアップテーブル（ＬＵＴ）内で前記ハードウェア論理デバイスから受信されたデータの部分を記憶するステップと、
前記ＤＢＭＳからの前記クエリの受信に応答して、
前記ＬＵＴ内に記憶された情報が前記受信されたクエリと関連するかどうかを決定するステップ、及び
前記ＬＵＴ内に記憶された情報が前記受信されたクエリと関連するという決定に基づいて前記ＬＵＴ内に記憶された前記情報を前記ＤＢＭＳに送るステップ
をさらに含む、請求項１２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェアベースの処理を使用する分散型ツリースキャンを行うためのシステム及び方法に関する。
【背景技術】
【０００２】
[0001]今日のデータベースシステムは、大規模なデータベースで多数のクエリを実行しなければならず、たとえば、Ｇｏｏｇｌｅは、１日あたり約１兆の探索クエリに関して回答しなければならない。応答時間を短く保つために、クエリは、できる限り速く実行されなければならない。クエリは、データベースを保持するデータベース管理システムとそのようなデータベースに記憶されたデータに依存するデータベースアプリケーションとの間のインターフェースである。したがって、クエリ実行の高速化は、データベースシステムの性能を高め、データベースアプリケーションは、より短い応答時間による利益を得ることになる。
【０００３】
[0002]専用の及び再構成可能なハードウェアアクセラレータは、従来のソフトウェアベースのプロセッサと比較して、データベースクエリ、特に、計算のスループット、待機時間、及び所要電力、を改善する長い歴史を有する。しかし、同時に、これらのタイプのデバイスの特化した特質は、概して、それらが、タスクを完了するためにソフトウェアベースの処理を必要とし、比較的単純な機能のみを実行する、又は少なくともバックアップ処理の機能を果たすことができることを意味する。この分散型処理は、２つのシステムの間に同期化及び／又は整合性の問題をもたらし得る。
【０００４】
[0003]フィールドプログラマブルゲートアレイ（ＦＰＧＡ）及び他のハードウェア論理デバイス（たとえば、特定用途向け集積回路（ＡＳＩＣ）及び複合プログラマブルゲートアレイ（ＣＰＧＡ）が、ツリーデータ構造物の記憶及びスキャンを加速するために使用される。現在の解決法は、２つの一般的手法のうちの１つをとる：ツリーノードが専用のレジスタ転送レベル（ＲＴＬ）論理において配置された、ツリーのためのコンテントアドレッサブルメモリ構造及びＦＰＧＡアクセラレータによるキャッシング。第１のタイプの解決法は、２つの欠点を有する。第１に、それは、通常、明確なキャッシングポリシーを特徴とし、ホスト（たとえば、データベース管理システム（ＤＢＭＳ））が、キャッシュにおける項目の記憶／更新に関する決定を行わなければならない。第２に、最もよく使用されるデータ構造物は、あまり高いメモリ効率を実現しない。第２のタイプの解決法もまた、２つの基本的な欠点を有する。第１に、ツリー全体がハードウェアにおいて直接に表されるので、それらは大量のオンチップメモリ／論理を消費する。第２に、実装されるツリー構造は、非常に厳格であり、ツリー構造の動的更新を迅速に及び経済的に処理することを困難にする。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、こうした課題を解決しようとするものである。
【課題を解決するための手段】
【０００６】
[0004]本開示は、ハードウェアにおいてツリー状のデータ構造物（ｔｒｅｅ−ｌｉｋｅ  ｄａｔａ  ｓｔｒｕｃｔｕｒｅｓ）をキャッシュ及び処理するためのシステム及び方法を説明する。
【０００７】
[0005]例示的システムは、データベース管理システム（ＤＢＭＳ）、ドライバー、及び論理デバイスを含む。ＤＢＭＳ及びドライバーは、１つ又は複数のプロセッサによって実行可能なコンピューター可読媒体において少なくとも部分的に実施される。ＤＢＭＳは、１つ又は複数のツリータイプのリレーショナルデータベースデータ構造物に記憶された情報のクエリを受信し、クエリの受信に応答して、ドライバーにクエリを送る。ドライバーは、ＤＢＭＳからのクエリの受信に応答して、ハードウェアにおいて少なくとも部分的に実施された論理デバイスに修正されたクエリを送る。論理デバイスは、ＤＢＭＳと関連する１つ又は複数のツリータイプのリレーショナルデータベースデータ構造物のうちの１つの少なくとも一部に関連するツリータイプのリレーショナルデータベースデータ構造物を記憶するためのキャッシュメモリを含む。論理デバイスは、修正されたクエリの受信に応答して、修正されたクエリに少なくとも基づいて、キャッシュメモリに記憶されたツリータイプのリレーショナルデータベースデータ構造物のノードをスキャンし、各スキャンされたノードにあるデータの部分（ｐｏｒｔｉｏｎｓ  ｏｆ  ｄａｔａ）を取得し、データの取得された部分（ｔｈｅ  ｒｅｔｒｉｅｖｅｄ  ｐｏｒｔｉｏｎｓ  ｏｆ  ｄａｔａ）をドライバーに送る。
【０００８】
[0006]ドライバーは、データの部分の受信に応答して、ＤＢＭＳと関連するツリータイプのリレーショナルデータベースデータ構造物に記憶されたデータに基づいてそれらのデータを検証し、検証されたデータの部分をＤＢＭＳに送る。データの検証されていない又は不整合部分は、論理デバイスに再送される。ドライバーは、ハードウェア論理デバイスから受信されたデータの部分をルックアップテーブル（ＬＵＴ）内のノードとして記憶し、ＬＵＴを使用してＤＢＭＳから受信されたクエリに応答する。
【０００９】
[0007]他の例では、論理デバイスは、キャッシュメモリが、受信されたクエリと関連するノードと関連するページを現在含まないとき、割り当てルールに少なくとも基づいて、受信されたクエリと関連するノード、ノードデータ及びパス情報の論理デバイスと関連するキャッシュメモリ内のページを割り当てる。論理デバイスは、受信されたクエリ、ノードデータ及びパス情報の受信に少なくとも基づいてページを連続的に割り当てる。キャッシュされたページは、値を記憶する値ロケーションと、１つ又は複数のポインターを記憶するポインターロケーションとを含む。ポインターロケーションは、キャッシュメモリ内の値ロケーションとは論理的に別個である。
【００１０】
[0008]本概要は、発明を実施するための形態において以下でさらに説明される概念の選択を簡略化された形で紹介するために提供される。本概要は、特許請求される主題の主要な又は本質的特徴を識別することは意図されておらず、特許請求される主題の範囲を決定する際の助けとして使用されることも意図されていない。たとえば、「技法」という用語は、前述の文脈によって及び本明細書を通して許されるものとしてのシステム、方法、コンピューター可読命令、モジュール、アルゴリズム、ハードウェア論理、及び／又は動作を指し得る。
【００１１】
[0009]発明を実施するための形態は、添付の図面を参照して説明される。図において、参照番号の最も左の数字は、その参照番号が最初に現われた図を識別する。異なる図中の同じ参照番号は、同様の又は同一の項目を示す。
【図面の簡単な説明】
【００１２】
【図１】[0010]データベース管理システムを実装するための例示的環境を示す図である。
【図２】[0011]データベース管理システムのサポートにおいて読取り／書込み動作を実行する例示的ハードウェア論理デバイスを示すブロック図である。
【図３−１】[0012]データベース管理システムによって使用される例示的データベース管理ソフトウェア構成要素及びドライバーソフトウェア構成要素を示すブロック図である。
【図３−２】データベース管理システムによって使用される例示的データベース管理ソフトウェア構成要素及びドライバーソフトウェア構成要素を示すブロック図である。
【図４】[0013]データベース管理システムのソフトウェア及びハードウェア構成要素の例示的動作を示す流れ図である。
【図５−１】[0014]データベース管理システムの構成要素間の対話の例示的動作を示す流れ図である。
【図５−２】データベース管理システムの構成要素間の対話の例示的動作を示す流れ図である。
【図６】[0015]ハードウェア論理デバイスでキャッシュされたツリータイプのデータ構造物のスキャンを実行するための例示的手法を示す流れ図である。
【図７−１】[0016]データベース管理システムのソフトウェア構成要素での結果の確認の流れ図である。
【図７−２】データベース管理システムのソフトウェア構成要素での結果の確認の流れ図である。
【図８−１】[0017]論理デバイスとソフトウェア構成要素との間の対話をグラフで示した図である。
【図８−２】論理デバイスとソフトウェア構成要素との間の対話をグラフで示した図である。
【図９】[0018]論理デバイスで生じるメモリ割り当てをグラフで示した図である。
【図１０】[0019]論理デバイスによって生み出される例示的結果を示す図である。
【発明を実施するための形態】
【００１３】
概説
[0020]本明細書に記載される例は、データベース管理システム（ＤＢＭＳ）によって保持される完全なツリータイプのデータ構造物に関連するキャッシュされたツリータイプのデータ構造物に関係する動作を実行することができるホスト中央処理装置（ＣＰＵ）（たとえば、ＤＢＭＳを実行する）及びハードウェアコプロセッサを有するシステムの構成概念を提供する。
【００１４】
[0021]ハードウェアコプロセッサは、ツリータイプのデータ構造物要求がＤＢＭＳによって提供されるときに、ツリータイプのデータ構造物のいくらかの部分を記憶するためにキャッシュにおいて再使用可能なメモリを割り当てることによって、ツリータイプのデータ構造物のスキャンを加速することができる。ハードウェアコプロセッサは、ＤＢＭＳに透過的な方式で、キャッシュされたツリータイプのデータ構造物を管理することができる。また、ドライバーモジュールは、ＤＢＭＳとは別個のコンピューティングデバイスにあってもよく、又はＤＢＭＳと同じコンピューティングデバイスにあってもよい。ドライバーモジュールは、ＤＢＭＳとハードウェアコプロセッサとの間のインターフェースを用意することができ、以て、ＤＢＭＳとハードウェアコプロセッサとの間の通信を減らす。
【００１５】
[0022]ドライバーモジュールは、ＤＢＭＳがドライバーモジュールに送るツリータイプのデータ構造物と関連するノードレベルクエリに基づいてツリーレベルのクエリを提供することができる。ドライバーモジュールは、ツリーレベルのクエリをハードウェアコプロセッサに送ることができる。ハードウェアコプロセッサは、ドライバーモジュールによって提供されるツリーレベルのクエリに基づいてドライバーにツリーレベルの結果を返すことができる。ドライバーモジュールは、ハードウェアコプロセッサから送られた結果を受信及び確認することができる。ハードウェアコプロセッサから送られる結果は、受信されたツリーレベルのクエリ及びドライバーモジュールによって送られたツリーＩＤ情報に基づいて、ハードウェアコプロセッサがスキャン中に見つけたキャッシュされたツリータイプのデータ構造物の各ノードに関連する値を含み得る。ドライバーモジュールは、確認された結果をＤＢＭＳに送ることができる。キャッシュされたツリータイプのデータ構造物のノードのうちの１つ又は複数のノードに関連する不整合の結果は、キャッシュされたツリータイプのデータ構造物を更新するために、ハードウェアコプロセッサとドライバーモジュールとの間にフォローアップ通信を生じさせ得る。
【００１６】
[0023]ドライバーモジュール及びハードウェアコプロセッサは、標準ＣＰＵで実行するリレーショナルデータベースのためのアドオンでもよい。ホストＣＰＵは、構造化クエリ言語（ＳＱＬ）解析、クエリプランニング、並びに、クライアントへの及びクライアントからのデータ移動などの、しかしこれらに限定されない、リレーショナルデータベースにおいて最先端と考えられ得る機能を実装するデータベース管理システム（ＤＢＭＳ）を含む。
【００１７】
[0024]ハードウェアコプロセッサは、アクセラレータの機能を果たすことができる。アクセラレータがＤＢＭＳと使用されるのには複数の理由がある。ツリーのスキャン、インデックス参照、又はオンザフライデータ圧縮の加速が、いくつかの起こり得るものである。もう１つは、セキュリティである。たとえば、Ｃｉｐｈｅｒｂａｓｅは、信頼されるコンピューティングモジュールとしてハードウェア論理プラットフォームを統合するＳＱＬサーバーの機能拡張版である。データは、クラウド顧客によって暗号化され、サーバーにアップロードされ、その後に初めて、ハッカーから又はクラウドサービスのシステム管理者のために機密性を維持するために、ＦＰＧＡ内で暗号化及び処理され得る。ＤＢＭＳは、暗号化された形でデータを記憶及び管理し、次いで、これらの暗号化された値の操作の実行をＦＰＧＡに委ねる能力を有する。結果として、暗号化された値のデータベースにおけるインデックスツリースキャンは、クエリに含まれる検索鍵（ｌｏｏｋｕｐ  ｋｅｙ）と各ツリーノードのコンテンツとの間の比較を実行するためにＦＰＧＡに依存し得る。
【００１８】
[0025]例示的システムは、ホストＣＰＵでＤＢＭＳについて透過的であり得、関連データベース管理エンジンのコードへの修正を必要としない、ハードウェアコプロセッサのメモリにおけるキャッシュを実装することができる。さらに、ハードウェアコプロセッサは、ツリータイプのデータ構造物のハードウェアキャッシュされた部分の一括スキャン（ｅａｇｅｒ  ｔｒａｖｅｒｓａｌ）を実行することができる。ツリータイプのデータ構造物のキャッシュされた部分は、ＤＢＭＳに関連して記憶された完全なツリータイプのデータ構造物と関連付けられる。一括スキャンは、ハードウェアコプロセッサがドライバーモジュールからルートノードにおける鍵検索の要求を受信したときに、始動され得る。ハードウェアコプロセッサは、キャッシュされたかなりの量のツリーについて、キャッシュされたツリーを一括して（ｅａｇｅｒｌｙ）スキャンする（ＤＢＭＳが具体的に要求する前に）。これらの部分的な又は完全な結果が、ドライバーに返されるとき、ドライバーは、一定時間内にその後のＤＭＢＳ要求とのこれらの結果の整合性を確認することができる。キャッシュされないツリーの部分は、前のように送信及び処理することができ、ハードウェアコプロセッサは、自動的に新しい部分を透過的にキャッシュする。
【００１９】
[0026]様々な例、シナリオ、及び態様が、図１〜１０を参照してさらに説明される。
例示的環境
[0027]図１は、ツリータイプのリレーショナルデータベースデータ構造物内のデータにアクセスするための高速の及び安全なシステム１００を実装するための例示的環境を示す。例示的システム１００は、１つ又は複数のネットワーク１０６を介して、ラップトップコンピューター１０４（１）、スマートフォン１０４（２）、携帯情報端末（ＰＤＡ）１０４（３）又は他のコンピューターデバイス１０４（Ｎ）など、１つ又は複数のユーザーコンピューティングデバイス１０４と信号通信する、１つ又は複数のデータベース管理システム（ＤＢＭＳ）ユニット１０２（１）〜（Ｎ）を含む。ＤＢＭＳユニット１０２（１）〜（Ｎ）は、ユーザーのコンピューティングデバイス１０４（１）〜（Ｎ）によって提供されるクエリへの応答を提供することができる。クエリへの応答は、ＤＢＭＳユニット１０２（１）〜（Ｎ）でローカルに又はネットワーク１０６に分散されたいくつかの他のデータ記憶デバイスに記憶された１つ又は複数のツリータイプのリレーショナルデータベースデータ構造物内に含まれたデータを含み得る。
【００２０】
[0028]いくつかの例では、ＤＢＭＳユニット１０２（１）〜（Ｎ）は、ソフトウェアにおいて実施された構成要素、及び、ＤＢＭＳフレームワーク１０８の一部としてハードウェアにおいて主として実施された他の構成要素を含み得る。ソフトウェアにおいて実施された構成要素は、データ記憶デバイス１１２及びドライバー１１６内に記憶されたツリータイプのリレーショナルデータベースデータ構造物と通信し得るＤＢＭＳ１１０を含み得る。ＤＢＭＳフレームワーク１０８は、論理デバイス１１４など、ハードウェアにおいて実施された構成要素を含み得る。論理デバイス１１４は、ＤＢＭＳ１１０へのコプロセッサと考えられ得る。ＤＢＭＳ１１０は、ユーザーコンピューティングデバイス１０４から、又はデータ記憶デバイス１１２に記憶されたツリータイプのリレーショナルデータベースデータ構造物に記憶された情報を要求する他のソフトウェア構成要素などのいくつかの他のソースから、クエリを受信することができる。ＤＢＭＳ１１０は、ドライバー１１６を介して論理デバイス１１４にクエリに関連する情報を転送することができる。論理デバイス１１４は、ドライバー１１６から受信された情報への応答を生成することができ、ドライバー１１６に応答を返す。
【００２１】
[0029]ＤＢＭＳ１１０は、ユーザーのコンピューティングデバイス１０４からクエリを受信するための構成要素を含み得る。ＤＢＭＳ１１０、ドライバー１１６及び論理デバイス１１４は、１つ又は複数のネットワーク１０６に分散された様々な／異なるデバイスで実装され得る。ネットワーク１０６は、インターネットなどのパブリックネットワーク、組織の及び／又は個人のイントラネットなどのプライベートネットワーク、あるいは、プライベート及びパブリックネットワークの何らかの組合せを含み得る。ネットワーク１０６はまた、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、衛星ネットワーク、ケーブルネットワーク、Ｗｉ−Ｆｉネットワーク、ＷｉＭａｘネットワーク、モバイル通信ネットワーク（たとえば、３Ｇ、４Ｇなど）又はその任意の組合せを含むがこれらに限定されない、任意のタイプのワイヤード及び／又はワイヤレスネットワークを含み得る。ネットワーク１０６は、インターネットプロトコル（ＩＰ）、伝送制御プロトコル（ＴＣＰ）、ユーザーデータグラムプロトコル（ＵＤＰ）、又は他のタイプのプロトコルなど、パケットベースの及び／又はデータグラムベースのプロトコルを含む、通信プロトコルを使用することができる。さらに、ネットワーク１０６はまた、ネットワーク通信を円滑化する及び／又はスイッチ、ルーター、ゲートウェイ、アクセスポイント、ファイアーウォール、基地局、リピーター、バックボーンデバイスなどのネットワークのためのハードウェア基盤を形成するいくつかのデバイスを含み得る。
【００２２】
[0030]例示的シナリオでは、ＤＢＭＳユニット１０２は、資源を共用する、負荷を平衡させる、性能を高める、フェイルオーバーサポートもしくは冗長性を提供するために、又は他の目的で、クラスタ又は他のグループ化された構成において動作する、１つ又は複数のコンピューティングデバイスを含み得る。ＤＢＭＳユニット１０２は、従来のサーバータイプのデバイス、デスクトップコンピュータータイプのデバイス、モバイルタイプのデバイス、特定用途タイプのデバイス、組込みタイプのデバイス、及び／又はウェアラブルタイプのデバイスなど、様々なカテゴリー又はクラスのデバイスに属し得る。したがって、デスクトップコンピューターとして図示されるが、ＤＢＭＳユニット１０２は、多様なデバイスタイプを含むことができ、特定のタイプのデバイスに限定されない。ＤＢＭＳユニット１０２は、デスクトップコンピューター、サーバーコンピューター、ウェブサーバーコンピューター、パーソナルコンピューター、モバイルコンピューター、ラップトップコンピューター、タブレットコンピューター、ウェアラブルコンピューター、埋め込み型コンピューティングデバイス、電気通信デバイス、自動車用コンピューター、ネットワーク対応テレビジョン、シンクライアント、端末、携帯情報端末（ＰＤＡ）、ゲーム機、ゲームデバイス、ワークステーション、媒体プレーヤー、パーソナルビデオレコーダー（ＰＶＲ）、セットトップボックス、カメラ、コンピューティングデバイスに含まれる内蔵構成要素、アプライアンス、又は任意の他の種類のコンピューティングデバイスを表し得るが、これらに限定されない。
【００２３】
[0031]ＤＢＭＳユニット１０２は、システムバス、データバス、アドレスバス、ＰＣＩバス、ミニＰＣＩバス、及び、任意の様々なローカル、周辺及び／又は独立型バスのうちの１つ又は複数をいくつかの事例において含み得るバス１２２を介するなどして、コンピューター可読媒体１２０に動作可能に接続された１つ又は複数の処理ユニット１１８を有する任意のコンピューティングデバイスを含み得る。ＤＢＭＳユニット１０２は、バス１２２に動作可能に接続することができる入力／出力（Ｉ／Ｏ）インターフェース１２６を含み得る。コンピューター可読媒体に記憶された実行可能命令は、たとえば、オペレーティングシステム１２２、フレームワーク、及び、処理ユニットによってロード可能及び実行可能な他のモジュール、プログラム、又はアプリケーションを含み得る。
【００２４】
[0032]図２に示されるように、いくつかの例では、論理デバイス１１４は、１つ又は複数の論理構成要素２０２及び論理メモリアレイ２０４を含み得る。論理メモリアレイ２０４は、ダイナミックアクセスメモリ（ＤＲＡＭ）又は同等のメモリデバイスなどの論理デバイス１１４とは別個でもよい。論理構成要素２０２は、キャッシュ構成要素２０６及びツリースキャン構成要素２０８を含み得る。構成要素２０６及び２０８は、ＤＢＭＳ１１０と通信する及び／又は論理アレイ２０４で入力／出力（Ｉ／Ｏ）（たとえば、読取り／書込み動作）を実行することができる。キャッシュ構成要素２０６は、論理アレイ２０４内のメモリロケーションにＤＢＭＳ１１０から受信されたクエリに関連するデータを割り当てることができる。キャッシュ構成要素２０６は、データ記憶デバイス１１２に記憶されたツリータイプのリレーショナルデータベースデータ構造物の少なくとも部分的なコピー又はインデックスを作り出すために、ノードのページを割り当てることができる。キャッシュ構成要素２０６は、記憶されたノードが再使用されることを可能にする方式でページを割り当てることができ、以て論理アレイ２０４をより効率的に使用する。
【００２５】
[0033]ツリースキャン構成要素２０８は、ＤＢＭＳ１１０から受信されたクエリ情報に基づいて、論理アレイ２０４に記憶されたツリータイプのリレーショナルデータベースデータ構造物をスキャンすることができる。キャッシュ構成要素２０６及びツリースキャン構成要素２０８によって実行される動作は、ＤＢＭＳ１１０にあるコアデータベース管理構成要素に対して透過的であり得る。これらの動作は、以下でさらに詳しく説明される。
【００２６】
[0034]別法として、又は追加で、ハードウェア論理デバイス１１２は、アクセラレータの機能を果たす。たとえば、及び制限なしに、使用することができる例示的タイプのハードウェア論理デバイスは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、特定用途用標準品（ａｐｐｌｉｃａｔｉｏｎ−ｓｐｅｃｉｆｉｃ  ｓｔａｎｄａｒｄ  ｐｒｏｄｕｃｔ：ＡＳＳＰ）、システムオンチップシステム（ＳＯＣ）、複合プログラマブル論理デバイス（ＣＰＬＤ）などを含む。たとえば、アクセラレータは、ＦＰＧＡファブリックに組み込まれたＣＰＵを含むＸＩＬＩＮＸ又はＡＬＴＥＲＡ（登録商標）からのＣＰＬＤなど、ハイブリッドデバイスを表し得る。
【００２７】
[0035]ＦＰＧＡは、製造後に顧客又は設計者によって構成されるように設計された  −  したがって「フィールドプログラマブル」  −  集積回路でもよい。ＦＰＧＡ構成は、一般に、特定用途向け集積回路（ＡＳＩＣ）のために使用されるものと同様に、ハードウェア記述言語（ＨＤＬ）を使用して指定され得る（回路図が、それらがＡＳＩＣ向けであったとき、構成を指定するために以前は使用されたが、これは次第に珍しくなっている）。
【００２８】
[0036]コンテンポラリーＦＰＧＡは、複雑なデジタル計算を実装するための論理ゲート及びＲＡＭブロックの大きな資源を有する。ＦＰＧＡ設計は、非常に高速のＩ／Ｏ及び双方向データバスを使用する。ＦＰＧＡは、ＡＳＩＣが実行し得た任意の論理機能を実装するために使用され得る。
【００２９】
[0037]ＦＰＧＡは、「論理ブロック」と呼ばれるプログラマブル論理構成要素と、ブロックが「ともにワイヤー接続される」ことを可能にする再構成可能な相互接続の階層構造  −  （多数の）異なる構成において相互にワイヤー接続され得る多数の（変更可能な）論理ゲートにやや似た  −  とを含む。論理ブロックは、複雑な組合せの関数、又は、ＡＮＤ及びＸＯＲのような単純な論理ゲートを実行するように構成することができる。多くのＦＰＧＡでは、論理ブロックはまた、メモリの単純なフリップフロップ又はより完全なブロックでもよい、メモリ要素を含む。
【００３０】
[0038]図３−１は、ＤＢＭＳ１１０の例示的ソフトウェア構成要素を示す。ＤＢＭＳ１１０のソフトウェア構成要素は、メモリデバイス３０２内にコンピューター可読媒体として記憶され得る。ソフトウェア構成要素は、少なくともデータベース管理構成要素３０４を含み得る。図３−２は、ドライバー１１６の例示的ソフトウェア構成要素を示す。ドライバー１１６のソフトウェア構成要素は、メモリデバイス３０６内にコンピューター可読媒体として記憶され得る。ソフトウェア構成要素は、少なくともドライバー構成要素３０８を含み得る。いくつかの例では、データベース管理構成要素３０４及びドライバー構成要素３０８は、ハードウェアアクセラレータとして実施されたコプロセッサと対話することができる。ドライバー構成要素３０８は、データベース管理構成要素３０４と論理デバイス１１４との間のインターフェースを用意し得る。ドライバー構成要素３０８は、キャッシュ構成要素２０６及びツリースキャン構成要素２０８によって実行される動作をデータベース管理構成要素３０４に対して透過的にさせることができる。ドライバー構成要素３０８はまた、論理デバイス１１４から受信された結果の確認を実行することができる。ドライバー構成要素３０８の動作は、以下でさらに詳しく説明される。
【００３１】
[0039]いくつかの例では、実行の開始直ぐに、論理デバイス１１４は、ドライバー構成要素３０８を介して渡され得るＤＢＭＳ構成要素３０４からの要求を受信することができる。要求は、ツリータイプのリレーショナルデータ構造物のツリータイプのデータ構造物（すなわち、ノードレベル要求）に基づくインデックスに記憶された探索鍵及び値を含み得る。子ポインター、記録ＩＤなど、メタデータは、送信されない。ハードウェアからの予期される応答は、探索鍵と同等のキャッシュされたツリータイプのデータ構造物のノードの値配列の中の第１の及び最後の項目のインデックスを表す、２つの数（より正確には、鍵と同等以上の第１の値、及び、鍵より完全に大きい第１の値）を含むインデックス応答でもよい。他の境界変動量（ｂｏｕｎｄａｒｙ  ｖａｒｉａｔｉｏｎ）が、使用され得る。ＤＢＭＳ１１０は、ハードウェアから受信されたインデックスに基づいて、キャッシュされたツリータイプのデータ構造物をノードからノードへスキャンし、論理デバイス１１４への複数の要求を最終的に始動することができる。
【００３２】
[0040]ノードの値が論理デバイス１１４によって受信される度に、キャッシュ構成要素２０６は、既にキャッシュされていない場合には、これらの値をキャッシュすることができる。各ノードのスペースは、ページごとに割り当てることができ、各ツリーノードは、唯一のメモリページに対応する。各ページは、２つの論理的領域に分けられ得る：１つは値配列のための、もう１つはメモリ内の他のページへのポインターを記憶するためのものであり、以てツリー構造を構築する。分けられた２つの論理的領域は、値がそれらの対応するポインターに触れることのない場所で更新されることを可能にする。メモリ割り当て戦略は、以下のようでもよい：ページが、メモリにおいて連続的に、キャッシュに記憶されるべきノードがページを既に有さない場合にのみ、割り当てられる。「子」を有するために使用したノードが「リーフ」になっても、ツリーの基礎的構造は、ノードが再び非リーフになる将来の場合に備えて保持され得るように、ページの区分された特質により、ポインターは、決して消去されない。これは、割り当てられたメモリが決して失われないことを確保する。
【００３３】
[0041]キャッシュされたツリー内の各ノードは、ノードにつながるツリーにおいて各レベルでとられるポインターの序数を表す一連の数として表現された、ルートに対するその相対的ロケーションによって一意的に識別され得る。この一連の数は、任意の内部又はリーフノードへのルートからの一意のパス又はパス情報を形成し、ドライバー構成要素３０８によって、着信する要求に添付され得る。このパス情報は、２つの方法で導出され得る。第１の方法は、ドライバー構成要素３０８に直接由来し得る。第２の方法では、ドライバー構成要素３０８が、関連（インデックス）ツリーをスキャンするために使用されるアルゴリズムの知識に基づいて、ＤＭＢＳ１１０と通信してパス情報を推測することができる。すなわち、任意の着信する要求は、前の要求へのフォローアップとして識別され得る。これは、その場合に要求がツリーのルートで開始する新しいスキャン要求でもよく、又は論理デバイス１１４によって与えられた前の結果に基づく内部ノードのスキャンでもよい（各ノードから得られるポインターは、返された下限及び上限インデックス（ｌｏｗｅｒ  ａｎｄ  ｕｐｐｅｒ  ｂｏｕｎｄ  ｉｎｄｉｃｅｓ）の直接的結果である）。
【００３４】
[0042]パス情報は、２つの目的で論理デバイス１１４によって使用され得る。第１に、パス情報は、論理デバイス１１４が鍵検索処理のために受信されたノードから適切なツリーを構築することを可能にする。第２に、パス情報は、論理デバイス１１４においてツリーの独立型スキャンを可能にし得る。
【００３５】
[0043]正確なツリー構造は、以下の方法で論理デバイス１１４において再構築され得る。インデックスの第１のノードが送信された（すなわち、ルート）後、ＤＢＭＳユニット１０８は、ツリー内の第２のレベルから「子」ノードを送信することができる。論理デバイス１１４が、このノードにページを割り当てた後、親の中の対応するポインターが、このページを参照するように更新され得る。第２のレベルノードに伴うパス情報は、論理デバイス１１４が正確なポインターを更新することを可能にし得る。次の動作で、ＤＢＭＳユニット１０８が、第３のレベルのノードを送信し得るとき、論理デバイス１１４は、キャッシュにおいて、前の２つのノードを既に有することになり、それは、正確な第２のレベルのノードの正確な子として新しいノードを挿入する。すなわち、論理デバイス１１４は、現在のノードのロケーションが見つかるまで、パス情報を使用してページをスキャンすることができる。ＤＢＭＳユニット１０８から送られたノードが「リーフ」であるとき、論理デバイス１１４における参照ポインターは、それがリーフを指し示すことを示すためにフラグを立てられ得る。ノードが、既に割り当てられたページで終了するパスに位置する場合、そのページのコンテンツは、新しいノードで直接更新することができ、したがって、追加のメモリは割り当てられる必要はない。割り当てを目的とするツリーパスのスキャンは、論理デバイス１１４が全部のページを読み取ることを必要とせず、論理デバイス１１４は、ページごとに１つのポインターを取得すればよい。ポインターのロケーションは、ページおいて固定されてもよく、パス情報の一部として提供される序数は、ポインターの正確なメモリロケーションを与える。したがって、これらのポインターは、代数的に計算されたメモリロケーションのランダムアクセスによって、見つけることができる。
【００３６】
[0044]代替のメモリ割り当て戦略では、２つのページサイズが使用される。大きなページは、値及びポインターを記憶するための十分なスペースを割り当てられ得る一方で、小さなページは、値のみのためのスペースを有し得る。リーフノードは、ポインターのためのスペースを無駄にすることなく、記憶され得る。これは、わずかにメモリ割り当てプロセスを複雑にする。前に「リーフ」であったノードが内部ノードになった場合、ページは、値及びポインターの両方を記憶するには小さ過ぎることになる。したがって、新しい大きなページは、このページのために割り当てられ得、小さいページの親におけるポインターは、新たに割り当てられた大きなページを指し示すように更新され得る。既に割り当てられた小さなページを失わないために、新たに割り当てられた大きなページの第１の子ポインターは、それを参照するようにセットされ得る。この方法では、それはリーフノードを記憶するために最終的に使用されることになり、メモリは決して失われない。
【００３７】
[0045]第２の方法では、論理デバイス１１４（すなわち、ツリースキャン構成要素２０８）は、パス情報を使用してツリーをそれ自体でナビゲートする。論理デバイス１１４が、ルートノードにおいて鍵を検索するという要求を受信するとき、一括スキャンが、始動され得る。それは、この鍵探索を実行するのみでなく、同じ鍵の将来の要求の結果を生成して、キャッシュされたツリーをできる限り降下することになる。キャッシュされたツリーをナビゲートするために、ツリースキャン構成要素２０８は、各ノードでの限界インデックス及びページ内のポインターを使用することができる：ノード内の鍵の位置を決定した後、ツリースキャン構成要素２０８は、下限ツリースキャン構成要素２０８でその子ノードを取得し（ポインターに基づいて）、そのページを一時記憶域へと持ち込み、それで鍵検索を実行する。それが、このノードの中の境界を見つけた後、それは、この情報を出力し、割り当てられていないポインターに遭遇する又はリーフノードに到達するまで、より深く進み続けることができる。
【００３８】
[0046]いくつかの例では、ポインターは、結果がＤＢＭＳユニット１０８にとって不正確／有用でないことが知られたとき、たとえば、ノードが、内部ノードの状態からツリー内のリーフの状態に移行するとき、一括スキャンを停止するために、追加のメタデータを運ぶことができる。リーフノードは、内部ノードであったので、キャッシュ内のそれのページは、ポインター（割り当てられたスペース又は場合により空値を指し示す）の配列を有することになる。これらのポインターが、辿られた場合、子ノードが存在しないので、結果は、定義によって、不正確になる。この問題を回避するために、ポインターは、指し示されたページ内の配列の長さ及び／又は子ノードがリーフかどうかなど、何らかのメタデータを運ぶことができる。この方法では、ツリータイプのデータ構造物が、データ記憶デバイス１１２において現在のものより深くに以前に割り当てられた場合でも、ノードをリーフに更新した後、それの親ノード内のそれのポインターは、それのリーフフラグを起動させることができる。ノードが再び内部ノードになった場合／ときに、それの「子」のために既に割り当てられたスペースが、再び使用され得るように、現在のリーフ内のポインターは削除されない。言い換えれば、キャッシュ内のツリーの物理的構造、及びその中のデータの論理的構造は、異なってもよい  −  同様にして、データ記憶デバイス１１２におけるノードのバージョンとはコンテンツにおいて異なってもよい。
【００３９】
[0047]一括スキャンは、部分的な結果をドライバー構成要素３０８に、これらの結果の正確性が一定時間内に確認され得るような方法で、通信することができる。キャッシュ内のツリータイプの構造は、ＤＢＭＳユニット１０８によって保持されるものとはかなり異なり得る。キャッシュの透過的及び緩く結合された特質により、ＤＢＭＳユニット１０８は、論理デバイス１１４を更新することなくインデックスのコンテンツを挿入、削除、又は他の方法で変更してあることがある。したがって、一括スキャンの結果は、不正確（又は現在のバージョンのツリーと少なくとも不整合）であることがある。
【００４０】
[0048]一括スキャンを終了した後、ツリー内のデータが分類された形で整理されると仮定して、論理デバイス１１４は、元の要求の結果（ルートノード）に加えて、以下の情報をドライバー構成要素３０８に返すことができる：スキャンされた各ノードについて、論理デバイス１１４は、配列した２つのインデックス（鍵と同等の配列内の範囲を示すための）と、配列からの４つの実際の値とを返すことになる。これらの値は、実際のインデックスにある２つの値、第１の値の直前の値（もしあれば）及び最後の値の直後の値（もしあれば）、である。これらの６つの値は、所与のノードの論理デバイス１１４によって提供される回答がそのノードの現在の状態について正確であるかをドライバー構成要素３０８が決定するのに十分である。返された値が、ＤＢＭＳユニット１０８に関連するツリータイプのデータ構造物内の同じロケーション内の値と同一である場合、鍵と同等の項目が、論理デバイス１１４によって返された範囲の前に又は後に挿入された可能性はない。したがって、たとえノードの部分が合間に更新された（すなわち、キャッシュ内のバージョンが実際に期限切れである）場合でも、部分的な結果が、安全に受け付けられ得る。その場合、変更は、単に、探索鍵に関しないデータの部分にある必要がある。
【００４１】
[0049]ドライバー構成要素３０８は、ノードのパス情報及び探索鍵でラベル付けされた、ルックアップテーブル（ＬＵＴ）内の論理デバイス１１４からの応答を記憶することができる。要求が、データベース管理構成要素３０４から届くとき、ドライバー構成要素３０８は、先ず、それが既にＬＵＴにおける要求のための事前に生成された応答を有するかどうかを確認することができる。ＬＵＴが、記憶された応答を有する場合、ドライバー構成要素３０８は、この応答が正確である（すなわち、データのＤＢＭＳユニットのバージョンと競合しない）かどうかを決定することができる。応答が正確である場合、データベース管理ユニット３０４は、論理デバイス１１４に進むことなくこの応答を受信することになる。そうでない場合、ドライバー構成要素３０８は、要求を論理デバイス１１４に中継することになり、論理デバイス１１４は、次いで、更新されたノードで検索を実行することになる。この動作の一部として、論理デバイス１１４は、ノードを黙示的にキャッシュすることになる（パス情報の助けを借りて）。
【００４２】
[0050]一括スキャンは、ルートノードへの要求について始動することができ、したがって、パスを辿るミスマッチ（ｍｉｓｍａｔｃｈ  ｄｏｗｎ  ｔｈｅ  ｐａｔｈ）は、そのパスについての論理デバイス１１４でのさらなる作業をトリガしないことになる。また、インデックスの作業セットが非常に大きい場合、又はドライバーが、どのノードがキャッシュするか（たとえば、ツリーの最上レベルのみ）に関して論理デバイス１１４にヒントを手動で提供したい場合、論理デバイス１１４は、新しいノードをキャッシュする必要は必ずしもない。
【００４３】
[0051]論理デバイス１１４における一括スキャンの使用は、論理デバイス１１４とＤＢＭＳユニット１０８との間の通信の予期される数を減らすのみならず、それはまた、その２つの間で送られるデータの総量を減らすことができる。
例示的プロセス
[0052]プロセス５００〜７００は、ハードウェア、ソフトウェア、又はその組合せにおいて実装され得る一連の動作を表す、論理フローグラフにおけるブロックの一群として示される。ソフトウェアに関連して、ブロックは、１つ又は複数のプロセッサによって実行されるときに列挙された動作を実行する、１つ又は複数のコンピューター可読記憶媒体に記憶されたコンピューター実行可能命令を表す。コンピューター実行可能命令は、特定の機能を実行する又は特定の抽象タイプのデータを実装するルーチン、プログラム、オブジェクト、構成要素、データ構造物などを含み得る。動作が記載された順序は、限定として解釈されることを意図されておらず、任意の数の記載されたブロックが、図示されたプロセスを実装するために、任意の順序で及び／又は並行して結合され得る。本明細書に記載されている１つ又は複数のプロセスは、独立して、又は、順次にもしくは並行して、任意の順序で関連して、生じ得る。
【００４４】
[0053]図４は、図１のシステム１００と同様のシステムによって実行される高レベルプロセス４００を示す。第１に、ブロック４０２で、ＤＢＭＳ（すなわち、データベース管理構成要素３０４などのソフトウェア信頼されていないマシン）は、論理デバイス（たとえば、論理デバイス１１４などのハードウェア信頼されたマシン、処理要素）にツリータイプのリレーショナルデータベースデータ構造物に関連するデータ又はデータインデックスの要求を送ることができる。ＤＢＭＳによって送られる要求は、図５−１に関して以下でさらに詳しく説明される。ブロック４０４で、要求の受信に応答して、論理デバイスが、結果を返し、ＤＢＭＳと関連するデータ記憶デバイスで全体として記憶され得る元のツリータイプのデータ構造物の少なくとも一部をハードウェアキャッシュにおいて記憶することができる。ブロック４０２及び４０４で実行されるプロセスの詳細は、図５−１、５−２、６、７−１、及び７−２に関して以下でさらに詳しく説明される。
【００４５】
[0054]図５−１及び５−２は、ＤＢＭＳから論理デバイスへのクエリの送信及び論理デバイスに関連するキャッシュで生じるメモリの割り当てのためのプロセス５００を示す。第１に、ブロック５０２で、データベース管理構成要素は、ユーザーのコンピューティングデバイス（たとえば、ユーザーのコンピューティングデバイス１０４）から要求を受信することができる。ブロック５０４で、ＤＢＭＳは、ドライバー構成要素（たとえば、ドライバー構成要素３０８）に送ることができるルートノードデータを有するクエリにユーザー要求を変換することができる。ドライバー構成要素は、ＤＢＭＳを実行する同じ処理デバイスによって実行可能であり得、又は異なる処理デバイスによって実行可能であり得る。
【００４６】
[0055]ブロック５０６で、ドライバーは、ルートノードデータに基づき得るルート識別子を作成することができ、次いで、ドライバーは、受信されたクエリ及びルート識別子を論理デバイスに送ることができる。ルート識別子は、パス情報の一部である。パス情報は、論理デバイスにあらゆる要求で送られる。パス情報は、ＤＢＭＳによって作成する又はドライバーによって推測することができる。
【００４７】
[0056]決定ブロック５０８で、論理デバイスは、受信されたルート識別子に関連するルートノードが論理デバイスで既にキャッシュされたかどうかを決定する。
[0057]ブロック５１０で、ルートノードが、論理デバイスでキャッシュされていない場合、論理デバイスは、空値応答（ｎｕｌｌ  ｒｅｓｐｏｎｓｅ）をドライバーに送ることができる。ルートノードは、キャッシュされていなかったので、応答は、空値応答でもよい。
【００４８】
[0058]ブロック５１２で、論理デバイスからの空値応答の受信に応答して、ドライバーは、論理デバイスに実際のノードデータ及びパス情報とともにクエリを再送することができる。ブロック５１４で、論理デバイスは、以前にキャッシュされたデータではなくて新たに送られるデータに基づいて、回答を与えることができる。
【００４９】
[0059]決定ブロック５１６で、論理デバイスは、ルートノードデータがキャッシュされることになるかどうかを決定することができる。多数の要因が、ルートノードデータがキャッシュされることになるかどうかを決定するために使用され得る。たとえば、クエリに関連するルートノードが、論理デバイスがこのノードのキャッシュスペースを消耗しないことを決定した、そのように稀にアクセスされるノードであるという論理デバイスでの決定があり得る。
【００５０】
[0060]ブロック５１８で、ルートノードはキャッシュされるべきではないと決定された場合、論理デバイスは、ドライバーにルートノードがキャッシュされなかったことを知らせることができる。次に同じクエリが提供されるときにノードデータのみをドライバーが送ることを可能にするため以外にドライバーにこの情報を提供する必要はない可能性があるので、ルートノードがキャッシュされなかったとドライバーに知らせることは、オプションでもよい。
【００５１】
[0061]決定ブロック５１６で、ルートノードがキャッシュされることになると決定された場合、次いで、ブロック５２０で、論理デバイスは、受信されたノードデータ及び１セットの空値ポインターを記憶するためのページを割り当てることができる。論理デバイスでのノードのキャッシングは、論理デバイスのストレージアレイ（すなわち、キャッシュ）内でページを割り当てることを含む。ページは、前もって設定されたサイズを各々有する２つの論理的に分離されたセクションを含み得る。一方のセクションは、ノードのデータ値を記憶することを目的とし得る。他方のセクションは、記憶されたデータ値のポインターを記憶することを目的とし得る。
【００５２】
[0062]ブロック５２２で、ＤＢＭＳは、クエリ、ツリーレベルＩノードデータ、及び、オプションでパス情報をドライバーに送ることができる。ドライバーは、１）それが前にＤＢＭＳから受信したツリールートは何か、及び２）論理デバイスが探索鍵と一致したと言われたルート内の序数はどれかを知っているので、パス情報は、ドライバーによって推測され得る。ブロック５２４で、ドライバーは、クエリ、パス情報及び受信されたレベルＩノードデータを論理デバイスに送ることができる。ブロック５２６で、論理デバイスは、レベルＩノードデータのためのページを割り当てることができる。この割り当ては、ルートノード割り当てと同様であり得る。ページは連続的に割り当てられるので、そして、書き込まれた後は、ページの内側のポインターは、ほとんど変化しない（そして、それらが変化する必要がある場合には、新しいポインターがそれらの代わりに追加され、古いポインターは、それらを別のページに書き込むことによって、保存される）ので、この割り当ては、親ノードが前にそのノードへのポインターを取り除いた場合に、関連ノードが更新を必要とする又は再起動を必要とする場合に、ページの再使用を可能にし得る。
【００５３】
[0063]ブロック５２８で、論理デバイスは、受信されたノードデータ及び／又はパス情報に基づいて、回答を与えることができる。ブロック５３０で、親ノードページ内のポインターは、割り当てられたばかりの子ページを指し示すように更新され得る。
【００５４】
[0064]次いで、ブロック５３２で、ブロック５２２〜５３０が、割り当てられたばかりのノードがリーフノードであるまで、繰り返され、次いで、親ノード内のポインターは、リーフノードとして子ノードを識別するためにフラグを立てられ得る。
【００５５】
[0065]決定ブロック５０８で、ルートノードが論理デバイスで既にキャッシュされた場合、次いで、プロセス６００が、実行し得る。ブロック６０２で、論理デバイスは、ドライバーから送られたクエリ及びルートＩＤを使用して、キャッシュされたツリーデータ構造物をスキャンすることができる。ブロック６０４で、論理デバイスは、クエリに関連する目標データ及びツリーの現在アクセスされるノード内の境界データを見つけることができる。ブロック６０６で、論理デバイスは、見つけられた目標及び境界データの序数位置（ｏｒｄｉｎａｌ  ｐｏｓｉｔｉｏｎ）を決定することができる。目標データ、境界データ及び序数位置情報は、一時的に保存することができる。ブロック６０８で、論理デバイスは、目標データのポインターを取得する。このポインターにあるデータが、新しい「現在のノード」になることになる。ブロック６１０で、ブロック６０４〜６０８が、リーフノード又は割り当てられていないポインターを有するノードに到達するまで、繰り返され得る。リーフノード又は割り当てられていないポインターを有するノードに到達した後、次いで、ブロック６１２で、論理デバイスは、目標データ、境界データ及び序数位置情報をドライバーに送ることができる。
【００５６】
[0066]図７−１及び７−２は、ドライバーによって実行されるプロセス７００を示す。ブロック７０２で、ドライバーは、論理デバイスから結果を受信することができる。ブロック７０４で、ドライバーが論理デバイスから受信するノードに関連する各情報について、結果が、ＤＢＭＳに関連付けられたツリーデータ構造物の同じノード内の同じ序数ロケーションに記憶された情報と比較されるとき、ドライバーは、それらの結果が有効であるかどうかを決定することができる。ドライバーは、直接、論理デバイスから受信された２つの目標データ及び２つの境界データ値を検索して、一定時間内にＤＢＭＳによって提供されたノード内のそれらと比較することができる（序数情報を使用して）。決定ブロック７０６で、ドライバーは、生み出された比較が有効な結果か無効な結果かを決定することができる。比較によって、結果は無効であった、言い換えれば、ＤＢＭＳによって提供されたノード内の同じ序数位置にあるデータが、論理デバイスによってキャッシュされたものに劣る、と決定した場合、次いで、ブロック７０８で、ドライバーは、比較テストで失格したノード及び任意の関連する子ノードデータを更新するために論理デバイスにクエリ、ノードデータ及びパス情報を送ることができる。ノードが比較で失格した場合、そのとき、そのノードのすべての子もまた不整合であることになるので、これが生じる。次に、ブロック７１０で、論理デバイスは、ノードデータに基づいて提供及び回答することができ、ノードデータをキャッシュするかどうかを決定することができ、次いで、ＤＭＢＳは、ツリーにおいて次のレベルに移動する。
【００５７】
[0067]決定ブロック７０６で、比較結果が、ノードデータは有効であったと示した場合、次いで、ブロック７１２で、ドライバーは、記憶されたノードに関連するパス情報及び関連するクエリ目標でラベル付けされたルックアップテーブル（ＬＵＴ）において結果を記憶することができる。次に、ブロック７１４で、ドライバーは、ＤＢＭＳにルートノード要求に関連する結果を送ることができる。ブロック７１６で、ＤＢＭＳは、ドライバーにツリーの次のレベルのノードの要求を送る。決定ブロック７１８で、ドライバーは、次のノードの要求に関連する結果が、ドライバーのＬＵＴに既に記憶されているかを決定することができる。その結果が、ドライバーのＬＵＴに記憶されていない場合、プロセスは、ブロック７０８に戻ることができる。しかし、要求に関連する結果が、ドライバーのＬＵＴに既に記憶されていた場合、次いで、ブロック７２０で、ドライバーは、ＤＢＭＳにＬＵＴに記憶された結果を送ることができる。このプロセスは、ブロック７１６に戻ることにより、ＤＢＭＳがリーフノードの結果を取得するまで、又はそれがクライアントクエリを処理するために必要な情報を取得するのに十分な程深くツリーにおいてスキャンするまで、継続することになる。
【００５８】
[0068]図８−１及び８−２は、ソフトウェア構成要素（ＤＢＭＳ８０２及びドライバー８０４）とハードウェア構成要素（論理デバイス８０６）とを含むシステム８００内で生じる通信をグラフで示す。ＤＢＭＳ８０２で示されるのは、ツリータイプのデータ構造物８０８である。ＤＢＭＳ８０２は、ツリータイプのデータ構造物８０８のリーフノードに最終的に記憶され得る情報の外部ソースからクエリを受信した。受信されたクエリに応答して、ＤＢＭＳ８０２は、ドライバー８０４にツリータイプのデータ構造物８０８のルートノード８１２のためのノードレベルクエリを送ることができる。ドライバー８０４が、提供された探索鍵及びＬＵＴに記憶されたルートノード８１２に関連する結果を有さない場合、矢印８１４でドライバー８０４は、クエリ及びルートノードＩＤを論理デバイス８０６に転送することができる。論理デバイス８０６は、次いで、論理デバイス８０６に関連するキャッシュメモリに前に記憶されたツリータイプのデータ構造物８１０の一括スキャンを実行することができる。論理デバイス８０６は、ツリータイプのデータ構造物８１０のルートノード８１６で、レベルＩノードまで（矢印８１８）、レベルＩＩのルートノードまで（矢印８２０）、スキャンを開始する。
【００５９】
[0069]論理デバイス８０６が、それがツリータイプのデータ構造物８１０内で進み得る範囲でスキャンした後、それがリーフノードまででも空値ポインターを有するノードまででも、論理デバイス８０６は、ドライバー８０４にスキャンされたノードに関連する目標及び境界情報８２２を送ることができる。ドライバー８０４は、ＬＵＴに論理デバイス８０６から受信された情報８２２を記憶することができる。ＤＢＭＳからの要求（たとえば、矢印８２４−１及び８２６）の後、ドライバー８０４は、次いで、受信された情報が、有効性チェックに合格した場合にのみ、ＬＵＴに記憶された情報を送ることができる（たとえば、矢印８２４−２）。受信された情報が、有効性チェックに合格しなかった、例えばツリーのレベルＩＩノード８２６に関連するインデックス情報で「Ｘ」によって示されるような、場合、次いで、ドライバーは、元のクエリ、ノードデータ情報、及びパス情報を論理デバイス８０６に転送することができる（矢印８３０）。論理デバイス８０６は、次いで、更新された値に基づいて新しい回答を与え、次いで、レベルＩＩノード８３２のその関連キャッシュにおいて値を記憶又は更新することができる。
【００６０】
[0070]図９は、どのようにしてノードページが、キャッシュツリータイプデータ構造物９００に論理デバイスによって割り当てられるかを示す。キャッシュツリータイプデータ構造物９００は、レベル０のルートノード９０２と、レベルＩの３つのノード９０４、９０６、及び９０８と、レベルＩＩの２つのノード９１０及び９１２とを含む。
【００６１】
[0071]ルートノード９０２の情報が、論理デバイスで受信されるとき、第１のページ９０２−１が、キャッシュメモリ９１４内の第１のロケーションで割り当てられ得る。ページは、関連ノードのクエリが論理デバイスによって受信される順序に基づいて、キャッシュメモリ９１４内で割り当てられ得る。ページは、値セクション９１６及びポインターセクション９１８を含む。図示された例では、ノードクエリが受信される順序は、以下の通りである：ルートノード９０２の後に、ツリーレベルＩ第１のノード９０４、ツリーレベルＩ第２のノード９０６、ツリーレベルＩ第３のノード９０８、ツリーレベルＩＩ第２のノード９１２、及び最後にツリーレベルＩＩ第１のノード９１０が続く。したがって、キャッシュメモリ９１４内で割り当てられるページの順序は、ノードクエリの到達順序を反映する。それらの同様の番号を付されたノードに関連して、これは、ページ９０２−１、ページ９０４−１、ページ９０６−１、ページ９０８−１、ページ９１２−１、ページ９１０−１である。論理デバイスは、ツリーノードページがドライバーによって問い合わせられるときにツリーノードページを割り当て、それらの計算が要求されるときにツリーノードページをキャッシュする又はしないことがあることに留意されたい。さらに、論理デバイスは、問い合わせられたそれらのページのみをキャッシュすることができる。したがって、メモリ内のツリーの物理的レイアウト及びツリーのコンテンツは、ＤＢＭＳに記憶されたツリーとは大きく異なり得る。
【００６２】
[0072]いくつかの例では、作業負荷におけるスキューは、いくつかの利益をもたらし得る。第１に、ツリー内の互いに近い鍵のグループが、アクセスされる（すなわち、それらが、共通の部分的パスを有する）場合、それらは、互いの更新から利益を得ることができる。たとえば、１つの鍵のリーフへのルートからのパス全体に沿ってすべてのノードを更新するコストは、それらのパスのそれらの部分を共用するすべての他の鍵の間で償却され得る。すなわち、更新されるノードに含まれる任意の他の鍵は、それらが、以前に検索されていなくても、更新することができる（以て、潜在的に一括スキャンの利益を得ることができる）。
【００６３】
[0073]スキューがキャッシュ性能にとって有益であり得る他の場合は、更新がツリーについて生じるが、最も頻繁にアクセスされる鍵は修正されないときである。ここでは、キャッシュ内のデータは、期限切れであるが、この陳腐化は、序数及びデータに加えた境界値結果チェックにより許容され得る。すなわち、ノードが、データベースにおいて更新されている場合でも、所与の（頻繁な）クエリに関係する特定の鍵が触れられていない限り、論理デバイスは、正確な結果を提供することができる。
【００６４】
[0074]スキューが活用され得る最後の方法は、ツリーノードページは、それらがクエリの一部としてアクセスされるときにのみキャッシュされるので、スキューされた作業負荷は、キャッシュ内にツリー全体の一部のみを置くことができることである。
【００６５】
[0075]図１０は、暗号化されたデータ１０００及びそれの対応するプレーンテキスト値１００２の部分的なストリングを示す。ユーザーコンピューティングデバイスによって生成された元のクエリが、プレーンテキスト値の６を有した場合、次いで、ユーザーのコンピューティングデバイスは、元のクエリを暗号化し、処理のためにＤＢＭＳにそれを送ったことになる。いくつかの例では、復号化は、ＤＢＭＳのための処理機能を実行するためにハードウェア論理デバイスで生じる。したがって、論理デバイスは、ハードウェアデバイスであるので、ツリータイプのデータ構造物に記憶された情報のセキュリティは、確保され得る。ＤＢＭＳは、暗号化された値のツリータイプのデータ構造物を含み得るが、プレーンテキスト値のものは含み得ない。ハードウェア論理デバイスは、暗号化されたツリータイプのデータ構造物の少なくとも一部をキャッシュする能力を有し得るが、そのとき、そのデータ構造物に関する特定の要求された情報を復号化することはできないことになる。したがって、本例では、ハードウェア論理デバイスは、元のクエリに含まれるプレーンテキスト値に関連する暗号化されたデータの左及び右の境界１００４、１００６を表す序数値２、４を返すことができる。暗号化されたデータが検証されるために、ハードウェア論理デバイスはまた、１００４、１００６にある暗号化された値、及び、元のクエリに含まれるプレーンテキスト値に関連する暗号化されたデータに隣接して位置する１００８、１０１０にある暗号化された値を送ることができる。
【００６６】
[0076]例示的条項
[0077]Ａ：以下を含む、方法：１つ又は複数のプロセッサによって実行可能なコンピューター可読媒体において少なくとも部分的に実施されたデータベース管理システム（ＤＢＭＳ）で、クエリの受信に応答して、クエリをドライバーに送るステップと、１つ又は複数のプロセッサによって実行可能なコンピューター可読媒体において少なくとも部分的に実施されたドライバーで、ＤＢＭＳからのクエリの受信に応答して、修正されたクエリをハードウェア論理デバイスに送るステップ。
【００６７】
[0078]Ｂ：以下をさらに含む、段落Ａにあげるような方法：ハードウェア論理デバイスで、修正されたクエリの受信に応答して、修正されたクエリに少なくとも基づいてハードウェア論理デバイスに関連するメモリにおいて以前にキャッシュされたツリータイプのリレーショナルデータベースデータ構造物のノードをスキャンするステップと、各スキャンされたノードにあるデータの少なくとも部分（ａｔ  ｌｅａｓｔ  ｐｏｒｔｉｏｎｓ  ｏｆ  ｄａｔａ）を取得するステップと、データの取得された部分をドライバーに送るステップ。
【００６８】
[0079]Ｃ：以下をさらに含む、段落Ａ又はＢにあげるような方法：ドライバーで、ハードウェア論理デバイスからのデータの部分の受信に応答して、ＤＢＭＳと関連する１つ又は複数のツリータイプのリレーショナルデータベースデータ構造物のうちの１つで記憶された関連データに少なくとも基づいてデータの部分を検証するステップと、データの部分の検証に応答して、データの検証された部分をＤＢＭＳに送るステップ。
【００６９】
[0080]Ｄ：クエリが、関連ノードにあるクエリ値及びデータを少なくとも備えるノードレベルクエリであり、修正されたクエリが、クエリ値及びノード識別子を備えるツリーレベル要求である、段落Ａ、Ｂ、又はＣにあげるような方法。
【００７０】
[0081]Ｅ：以下をさらに含む、段落Ａ、Ｂ、Ｃ、又はＤにあげるような方法：ドライバーで、ハードウェア論理デバイスからのデータの部分の受信に応答して、データの受信された部分が不整合であるかどうかを決定するステップと、受信された部分が不整合であるという決定に応答して、クエリ、ノードデータ及びパス情報をハードウェア論理デバイスに送るステップと、ハードウェア論理デバイスで、クエリ、ノードデータ及びパス情報の受信に応答して、以下のうちの少なくとも１つを実行するステップ：ノードデータに関連するノードのページを割り当てるステップ、又は、そのノードデータに関連する以前にキャッシュされたページに含まれるデータ値もしくはポインター情報のうちの少なくとも１つを更新するステップ。
【００７１】
[0082]Ｆ：以下をさらに含む、段落Ａ、Ｂ、Ｃ、Ｄ、又はＥにあげるような方法：ハードウェア論理デバイスで、クエリ、ノードデータ及びパス情報の受信に応答して、受信されたクエリと関連するノードのためのハードウェア論理デバイスに関連するキャッシュメモリ内でページを連続的に割り当てるステップであって、ノードデータ及びパス情報が、キャッシュメモリが受信されたクエリと関連付けられたノードに関連するページを現在含まないときに、割り当てルールに少なくとも基づく、ステップ。
【００７２】
[0083]Ｇ：以下をさらに含む、段落Ａ、Ｂ、Ｃ、Ｄ、Ｅ、又はＦにあげるような方法：ドライバーで、ハードウェア論理デバイスから送られたデータの部分の検証を試みるステップと、データの部分の検証ができないことに応答して、クエリ、ノードデータ、及びパス情報をハードウェア論理デバイスに送るステップと、ハードウェア論理デバイスで、クエリ、ノードデータ、及びパス情報の受信に応答して、受信されたノードデータ又は受信されたパス情報のうちの少なくとも１つに関連する以前にキャッシュされたページに含まれるデータ値又はポインター情報のうちの少なくとも１つを更新するステップ。
【００７３】
[0084]Ｈ：以下をさらに含む、段落Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、又はＧにあげる方法：ドライバーで、ルックアップテーブル（ＬＵＴ）内でハードウェア論理デバイスから受信されたデータの部分を記憶するステップと、ＤＢＭＳからのクエリの受信に応答して、ＬＵＴ内に記憶された情報が受信されたクエリと関連するかどうかを決定するステップと、ＬＵＴ内に記憶された情報が受信されたクエリと関連するという決定に基づいてＬＵＴ内に記憶された情報をＤＢＭＳに送るステップ。
【００７４】
[0085]Ｉ：以下をさらに含む、段落Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、又はＨにあげる方法：ハードウェア論理デバイスで、修正されたクエリの受信に応答して、修正されたクエリに少なくとも基づいてハードウェア論理デバイスに関連するメモリにおいて以前にキャッシュされたツリータイプのリレーショナルデータベースデータ構造物のノードをスキャンするステップと、各スキャンされたノードにあるデータの少なくとも部分を取得するステップと、データの取得された部分をドライバーに送るステップ、そこにおいて、スキャンされたノードにあるデータの取得された部分は、ノード識別子に関連する第１のデータ値及び関連するキャッシュされたページ内の第１のデータ値のデータ値の序数位置及び第１のデータ値に対して所定のロケーションにある少なくとも１つの第２のデータ値及びキャッシュされたページ内の第２のデータ値の序数位置のうちの少なくとも１つを備える。
【００７５】
[0086]Ｊ：以下をさらに含む、段落Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、又はＩにあげるような方法：ハードウェア論理デバイスで、修正されたクエリの受信に応答して、修正されたクエリに少なくとも基づいてハードウェア論理デバイスに関連するメモリにおいて以前にキャッシュされたツリータイプのリレーショナルデータベースデータ構造物のノードをスキャンするステップと、各スキャンされたノードにあるデータの少なくとも部分を取得するステップと、データの取得された部分をドライバーに送るステップ、そこにおいて、スキャンされたノードにあるデータの取得された部分は、ノード識別子に関連する第１のデータ値及び関連するキャッシュされたページ内の第１のデータ値のデータ値の序数位置及び第１のデータ値に対して所定のロケーションにある少なくとも１つの第２のデータ値及びキャッシュされたページ内の第２のデータ値の序数位置のうちの少なくとも１つを備え、第１のデータ値は、ノード識別子に関連する下限及び上限値を備え、第２の値は、下限値よりも少なくとも１小さい序数位置にある値と、上限値よりも少なくとも１大きい序数位置にある値とを備える。
【００７６】
[0087]Ｋ：ページが、値ロケーション及びポインターロケーションを備え、ポインターロケーションは値ロケーションとは論理的に別個である、段落Ａ〜Ｊにあげるような方法。
【００７７】
[0088]Ｌ。段落Ａ〜Ｋのいずれかに記載の方法を実行するためのデバイス。
[0089]Ｍ。以下を備えるシステム：１つ又は複数のプロセッサによって実行可能なコンピューター可読媒体において少なくとも部分的に実施されたデータベース管理システム（ＤＢＭＳ）であって、クエリの受信に応答してクエリを送るＤＢＭＳと、１つ又は複数のプロセッサによって実行可能なコンピューター可読媒体において少なくとも部分的に実施されたドライバーであって、ＤＢＭＳからのクエリの受信に応答して、修正されたクエリを論理デバイスに送るドライバー。
【００７８】
[0090]Ｎ。以下をさらに備える、段落Ｍにあげるシステム：ハードウェアにおいて少なくとも部分的に実施された、論理デバイスが、ＤＢＭＳと関連する１つ又は複数のツリータイプのリレーショナルデータベースデータ構造物のうちの１つの少なくとも一部に関連するツリータイプのリレーショナルデータベースデータ構造物を記憶するためのキャッシュメモリを備え、論理デバイスが、修正されたクエリの受信に応答して、修正されたクエリに少なくとも基づいてキャッシュメモリに記憶されたツリータイプのリレーショナルデータベースデータ構造物のノードをスキャンし、各スキャンされたノードにあるデータの部分を取得し、データの取得された部分をドライバーに送る。
【００７９】
[0091]Ｏ。ドライバーが、データの部分の受信に応答して、ＤＢＭＳと関連するツリータイプのリレーショナルデータベースデータ構造物のうちの１つに記憶されたデータに少なくとも基づいて、データの部分を検証し、データの検証された部分をＤＢＭＳに送る、段落Ｍ又はＮにあげるシステム。
【００８０】
[0092]Ｐ。クエリが、関連ノードにあるクエリ値及びデータを少なくとも備えるノードレベルクエリであり、修正されたクエリが、クエリ値及びノード識別子を備えるツリーレベル要求である、段落Ｍ、Ｎ、又はＯにあげるシステム。
【００８１】
[0093]Ｑ。ドライバーが、論理デバイスからのデータの部分の受信に応答して、データの受信された部分が不整合であるかどうかを決定する、及び、データの受信された部分が不整合であるという決定に応答して、クエリ、ノードデータ及びパス情報を論理デバイスに送る、そして、論理デバイスが、クエリ、ノードデータ、及びパス情報の受信に応答して、以下のうちの少なくとも１つを実行する、段落Ｍ、Ｎ、Ｏ、又はＰにあげるシステム：ノードデータに関連するノードのページを割り当てるステップ、又は、そのノードデータに関連する以前にキャッシュされたページに含まれるデータ値又はポインター情報のうちの少なくとも１つを更新するステップ。
【００８２】
[0094]Ｒ。論理デバイスが、クエリ、ノードデータ及びパス情報の受信に応答して、受信されたクエリと関連するノードのための論理デバイスと関連するキャッシュメモリ内でページを連続的に割り当て、ノードデータ及びパス情報が、キャッシュメモリが受信されたクエリと関連付けられたノードに関連するページを現在含まないときに、割り当てルールに少なくとも基づく、段落Ｍ、Ｎ、Ｏ、Ｐ、又はＱにあげるシステム。
【００８３】
[0095]Ｓ。ドライバーが、論理デバイスから送られたデータの部分の検証を試み、データの部分の検証ができないことに応答して、クエリ、ノードデータ及びパス情報を論理デバイスに送り、論理デバイスが、クエリ、ノードデータの受信に応答して、受信されたノードデータ又は受信されたパス情報のうちの少なくとも１つに関連する以前にキャッシュされたページに含まれるデータ値又はポインター情報のうちの少なくとも１つを更新する、段落Ｍ、Ｎ、Ｏ、Ｐ、Ｑ、又はＳにあげるシステム。
【００８４】
[0096]Ｔ。ドライバーが、ルックアップテーブル（ＬＵＴ）内のノードとして論理デバイスから受信されたデータの部分を記憶し、ＤＢＭＳからのクエリの受信に応答して、ＬＵＴ内に記憶された情報が受信されたクエリと関連するかどうかを決定する、及び、ＬＵＴ内に記憶された情報が受信されたクエリと関連するという決定に少なくとも基づいてＤＢＭＳにＬＵＴ内に記憶された情報を送る、段落Ｍ、Ｎ、Ｏ、Ｐ、Ｑ、Ｒ、又はＳにあげるシステム。
【００８５】
[0097]Ｕ。論理デバイスが、修正されたクエリの受信に応答して、修正されたクエリに少なくとも基づいて、論理デバイスに関連するメモリに以前にキャッシュされたツリータイプのリレーショナルデータベースデータ構造物のノードをスキャンし、少なくとも各スキャンされたノードにあるデータの部分を取得し、データの取得された部分をドライバーに送り、スキャンされたノードにあるデータの取得された部分が、ノード識別子に関連する第１のデータ値及び関連するキャッシュされたページ内の第１のデータ値の序数位置及び第１のデータ値に対して所定のロケーションにある少なくとも１つの第２のデータ値及びキャッシュされたノード内の第２のデータ値の序数位置のうちの少なくとも１つを備える、段落Ｍ、Ｎ、Ｏ、Ｐ、Ｑ、Ｒ、Ｓ、又はＴにあげるシステム。
【００８６】
[0098]Ｖ。論理デバイスが、修正されたクエリの受信に応答して、修正されたクエリに少なくとも基づいて、論理デバイスに関連するメモリに以前にキャッシュされたツリータイプのリレーショナルデータベースデータ構造物のノードをスキャンし、各スキャンされたノードにあるデータの少なくとも部分を取得し、データの取得された部分をドライバーに送り、上限値が、ページ内の最後の値ではないときに、下限値が、ページ内の最初の値及び上限値よりも少なくとも１大きい序数位置にある値ではないときに、第１のデータ値が、ノード識別子に関連する下限及び上限値を備え、第２の値が、下限値よりも少なくとも１小さい序数位置にある値を備える、段落Ｍ、Ｎ、Ｏ、Ｐ、Ｑ、Ｒ、Ｓ、又はＴにあげるシステム。
【００８７】
[0099]Ｗ：ページが、値ロケーション及びポインターロケーションを備え、ポインターロケーションが値ロケーションとは論理的に別個である、段落Ｍ、Ｎ、Ｏ、Ｐ、Ｑ、Ｒ、Ｓ、Ｔ、Ｕ、又はＶにあげる方法。
【００８８】
[0100]Ｘ：以下を備えるシステム：クエリの受信に応答して、クエリを送るための１つ又は複数のプロセッサによって実行可能なコンピューター可読媒体において少なくとも部分的に実施されたデータベース管理システム（ＤＢＭＳ）手段と、ＤＢＭＳからのクエリの受信に応答して、修正されたクエリを送るための１つ又は複数のプロセッサによって実行可能なコンピューター可読媒体において少なくとも部分的に実施されたドライバー手段。
【００８９】
[0101]Ｙ：修正されたクエリの受信に応答して、修正されたクエリに少なくとも基づいて論理手段に関連するメモリに以前にキャッシュされたツリータイプのリレーショナルデータベースデータ構造物のノードをスキャンする、各スキャンされたノードにあるデータの少なくとも部分を取得する、及びデータの取得された部分をドライバー手段に送るための論理手段をさらに備える、段落Ｘにあげるシステム。
【００９０】
[0102]Ｚ：論理手段からのデータの部分の受信に応答して、ＤＢＭＳ手段に関連する１つ又は複数のツリータイプのリレーショナルデータベースデータ構造物のうちの１つで記憶された関連データに少なくとも基づいてデータの部分を検証し、データの部分の検証に応答して、データの検証された部分をＤＢＭＳ手段に送る、ハードウェアドライバー手段をさらに備える、段落Ｘ又はＹにあげるシステム。
【００９１】
[0103]ＡＡ：クエリが、関連ノードにあるクエリ値及びデータを少なくとも備えるノードレベルクエリであり、修正されたクエリが、クエリ値及びノード識別子を備えるツリーレベル要求である、段落Ｘ、Ｙ、又はＺにあげるシステム。
【００９２】
[0104]ＢＢ：ドライバー手段が、データの部分の受信に応答して、データの受信された部分が不整合であるかどうかを決定し、受信された部分が不整合であるという決定に応答して、クエリ、ノードデータ及びパス情報を送る、及び、クエリ、ノードデータ及びパス情報の受信に応答して、以下のうちの少なくとも１つを実行する論理手段をさらに備える、段落Ｘ、Ｙ、Ｚ、又はＡＡにあげるシステム：ノードデータに関連するノードのページを割り当てるステップ、又は、ノードデータに関連する以前にキャッシュされたページに含まれるデータ値又はポインター情報のうちの少なくとも１つを更新するステップ。
【００９３】
[0105]ＣＣ：クエリ、ノードデータ及びパス情報の受信に応答して、受信されたクエリと関連するノードの論理手段と関連するキャッシュメモリ内でページを連続的に割り当てる論理手段をさらに備え、ノードデータ及び前記パス情報が、キャッシュメモリが受信されたクエリと関連付けられたノードに関連するページを現在含まないときに、割り当てルールに少なくとも基づく、段落Ｘ、Ｙ、Ｚ、ＡＡ、又はＢＢにあげるシステム。
【００９４】
[0106]ＤＤ：ドライバー手段が、データの部分の検証を試み、データの部分の検証ができないことに応答して、クエリ、ノードデータ、及びパス情報を送る、そして、クエリ、ノードデータ、及びパス情報の受信に応答して、受信されたノードデータ又は受信されたパス情報のうちの少なくとも１つに関連する以前にキャッシュされたページに含まれるデータ値又はポインター情報のうちの少なくとも１つを更新する論理手段をさらに備える、段落Ｘ、Ｙ、Ｚ、ＡＡ、ＢＢ、又はＣＣにあげるシステム。
【００９５】
[0107]ＥＥ：ドライバー手段が、ルックアップテーブル（ＬＵＴ）内の論理デバイスから受信されたデータの部分を記憶し、ＤＢＭＳ手段からのクエリの受信に応答して、ＬＵＴ内に記憶された情報が受信されたクエリと関連するかどうかを決定し、ＬＵＴ内に記憶された情報が受信されたクエリと関連するという決定に基づいてＤＢＭＳ手段にＬＵＴ内に記憶された情報を送る、段落Ｘ、Ｙ、Ｚ、ＡＡ、ＢＢ、ＣＣ、又はＤＤにあげるシステム。
【００９６】
[0108]ＦＦ：修正されたクエリの受信に応答して、修正されたクエリに少なくとも基づいて論理手段と関連するメモリに以前にキャッシュされたツリータイプのリレーショナルデータベースデータ構造物のノードをスキャンする、各スキャンされたノードにあるデータの少なくとも部分を取得する、及びデータの取得された部分をドライバーに送る、論理手段をさらに備え、そこにおいて、スキャンされたノードにあるデータの取得された部分が、ノード識別子に関連する第１のデータ値及び関連するキャッシュされたページ内の第１のデータ値のデータ値の序数位置及び第１のデータ値に対して所定のロケーションにある少なくとも１つの第２のデータ値及びキャッシュされたページ内の第２のデータ値の序数位置のうちの少なくとも１つを備える、段落Ｘ、Ｙ、Ｚ、ＡＡ、ＢＢ、ＣＣ、ＤＤ、又はＥＥにあげるシステム。
【００９７】
[0109]ＧＧ：修正されたクエリの受信に応答して、修正されたクエリに少なくとも基づいて論理手段と関連するメモリに以前にキャッシュされたツリータイプのリレーショナルデータベースデータ構造物のノードをスキャンする、各スキャンされたノードにあるデータの少なくとも部分を取得する、及びデータの取得された部分をドライバー手段に送る、論理手段をさらに備え、そこにおいて、スキャンされたノードにあるデータの取得された部分が、ノード識別子に関連する第１のデータ値及び関連するキャッシュされたページ内の第１のデータ値のデータ値の序数位置及び第１のデータ値に対して所定のロケーションにある少なくとも１つの第２のデータ値及びキャッシュされたページ内の第２のデータ値の序数位置のうちの少なくとも１つを備え、第１のデータ値が、ノード識別子に関連する下限及び上限値を備え、第２の値が、下限値よりも少なくとも１小さい序数位置にある値及び上限値よりも少なくとも１大きい序数位置にある値を備える、段落Ｘ、Ｙ、Ｚ、ＡＡ、ＢＢ、ＣＣ、ＤＤ、又はＥＥにあげるシステム。
【００９８】
[0110]ＨＨ：ページが、値ロケーション及びポインターロケーションを備え、ポインターロケーションが、値ロケーションとは論理的に別個である、段落Ｘ、Ｙ、Ｚ、ＡＡ、ＢＢ、ＣＣ、ＤＤ、ＥＥ、ＦＦ、又はＧＧのようなシステム。
結論
[0111]本技法は、構造的特徴及び／又は方法論的動作に特有の言語で説明されてあるが、添付の特許請求の範囲は、説明された特徴又は動作に必ずしも限定されないことを理解されたい。そうではなくて、それらの特徴及び動作は、そのような技法の例示的実装形態として説明される。
【００９９】
[0112]例示的プロセスの動作が、個々のブロックにおいて示され、それらのブロックを参照して要約される。プロセスは、ブロックの論理的流れとして示され、各ブロックは、ハードウェア、ソフトウェア、又はその組合せにおいて実装され得る１つ又は複数の動作を表し得る。ソフトウェアに関連して、動作は、１つ又は複数のプロセッサによって実行されるときに、１つ又は複数のプロセッサが列挙された動作を実行することを可能にする１つ又は複数のコンピューター可読媒体に記憶されたコンピューター実行可能命令を表す。一般に、コンピューター実行可能命令は、特定の機能を実行する又は特定の抽象データタイプを実装する、ルーチン、プログラム、オブジェクト、モジュール、構成要素、データ構造物などを含む。それらの動作が説明される順序は、限定として解釈されるものではなく、任意の数の記載された動作が、記載されたプロセスを実装するために、任意の順序で実行する、任意の順序で組み合わせる、複数のサブアクションに細分する、及び／又は並行して実行することが可能である。記載されたプロセスは、１つもしくは複数の内部もしくは外部ＣＰＵもしくはＧＰＵなどの１つもしくは複数のデバイス及び／又はＦＰＧＡ、ＤＳＰもしくは他のタイプのアクセラレータなどの１つもしくは複数のハードウェア論理と関連する資源によって、実行され得る。
【０１００】
[0113]前述のすべての方法及びプロセスは、１つ又は複数の汎用コンピューター又はプロセッサによって実行されるソフトウェアコードモジュールにおいて実施することができ、そのようなソフトウェアコードモジュールを介して完全に自動化することができる。コードモジュールは、任意のタイプのコンピューター可読記憶媒体又は他のコンピューター記憶デバイスに記憶され得る。本方法の一部又はすべては、別法として、専門のコンピューターハードウェアにおいて実施され得る。
【０１０１】
[0114]本明細書に記載される及び／又は添付の図面に示される流れ図における任意のルーチン記述、要素、又はブロックは、ルーチンにおける特定の論理的機能又は要素の実装のための１つ又は複数の実行可能命令を含むコードのモジュール、セグメント、又は部分を潜在的に表すものとして解釈されるべきである。その中で要素又は機能が、関係する機能に応じて、削除され得る、又は、ほぼ同期してもしくは逆の順序を含めて、示されたもしくは論じられたもの以外の順序で実行され得る、代替実装形態が、本明細書に記載された例の範囲に含まれることが、当業者には理解されよう。多数の変更及び修正が、その要素は他の受け入れ可能な例のうちにあるものとして理解されるべき、前述の例に対して行われ得ることが強調されるべきである。すべてのそのような修正及び変更は、本明細書において本開示の範囲に含まれる及び以下の特許請求の範囲によって保護されることが意図されている。
【図１】
2018502373.tif 000003
【図２】
2018502373.tif 000004
【図３−１】
2018502373.tif 000005
【図３−２】
2018502373.tif 000006
【図４】
2018502373.tif 000007
【図５−１】
2018502373.tif 000008
【図５−２】
2018502373.tif 000009
【図６】
2018502373.tif 000010
【図７−１】
2018502373.tif 000011
【図７−２】
2018502373.tif 000012
【図８−１】
2018502373.tif 000013
【図８−２】
2018502373.tif 000014
【図９】
2018502373.tif 000015
【図１０】
2018502373.tif 000016
【国際調査報告】
2018502373.tif 000017
2018502373.tif 000018
2018502373.tif 000019
2018502373.tif 000020
2018502373.tif 000021