特許第5950285号(P5950285)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

特許5950285予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うための方法、並びに、当該命令を使用してツリーの検索を行うためのコンピュータ及びそのコンピュータ・プログラム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5950285
(24)【登録日】2016年6月17日
(45)【発行日】2016年7月13日
(54)【発明の名称】予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うための方法、並びに、当該命令を使用してツリーの検索を行うためのコンピュータ及びそのコンピュータ・プログラム
(51)【国際特許分類】
   G06F 17/30 20060101AFI20160630BHJP
   G06F 12/00 20060101ALI20160630BHJP
【FI】
   G06F17/30 414A
   G06F17/30 210D
   G06F12/00 520A
【請求項の数】20
【全頁数】44
(21)【出願番号】特願2013-262686(P2013-262686)
(22)【出願日】2013年12月19日
(65)【公開番号】特開2015-118609(P2015-118609A)
(43)【公開日】2015年6月25日
【審査請求日】2015年11月27日
【早期審査対象出願】
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
(74)【代理人】
【識別番号】100108501
【弁理士】
【氏名又は名称】上野 剛史
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】石崎 一明
【審査官】 齊藤 貴孝
(56)【参考文献】
【文献】 国際公開第2011/096016(WO,A1)
【文献】 特開2010−044523(JP,A)
【文献】 国際公開第2009/004796(WO,A1)
【文献】 特表2003−516661(JP,A)
【文献】 特開2012−164316(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/30
G06F 12/00
(57)【特許請求の範囲】
【請求項1】
予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う方法であって、コンピュータが、
ツリーのノードを、前記複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するグループに分類して、前記ツリーを構築するステップと、
検索キーの値を有効数とする最小ビット幅のグループに対応する前記命令を使用して、前記検索キーの値を有効数とする最小ビット幅の前記グループからデータを検索するステップと
を実行することを含む、前記方法。
【請求項2】
前記構築するステップが、
挿入されるキーの値を有効数とする最小ビット幅のグループに属するノードに前記挿入されるキーを挿入するステップ
をさらに含む、請求項1に記載の方法。
【請求項3】
前記構築するステップが、
前記キーの値を有効数とする最小ビット幅のグループに属するノードを発見するステップであって、前記キーの値を有効数とする最小ビット幅の前記グループが、前記挿入されるキーの値を表現可能な最小のビット幅を有するグループである、前記発見するステップ
をさらに含む、請求項2に記載の方法。
【請求項4】
前記構築するステップが、
前記発見したノードが、前記挿入されるキーの挿入によってあふれることに応じて、前記発見したノード又は当該発見したノードの上位にあるノードを分割するステップ
をさらに含む、請求項3に記載の方法。
【請求項5】
前記構築するステップが、
前記ノードそれぞれに前記グループを識別する識別子を付与するステップ
を含み、
前記検索するステップが、
前記構築されたツリーのノードを辿って、前記識別子により各ノードが属するグループを判定するステップと、
前記判定されたグループに対応する命令を使用して、前記データを検索するステップと
を含む、
請求項1に記載の方法。
【請求項6】
前記構築するステップが、
前記ツリーの根ノード以外のノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するように、前記ツリーを構築するステップ
を含む、請求項1に記載の方法。
【請求項7】
前記構築するステップが、
各グループを、根ノードを親ノードとするサブツリーとして構築するステップ
を含み、
前記検索するステップが、
前記サブツリーに対応する前記命令を使用して、前記データを検索するステップ
を含む、
請求項1に記載の方法。
【請求項8】
前記構築するステップが、
グループそれぞれを、部分ツリーとして構築するステップ
を含み、
前記検索するステップが、
前記部分ツリーに対応する前記命令を使用して、前記データを検索するステップ
を含む、請求項1に記載の方法。
【請求項9】
前記命令がSIMD(Single Instruction Multiple Data)命令である、請求項1に記載の方法。
【請求項10】
前記ビット幅が、8ビット幅、16ビット幅、32ビット幅、64ビット幅、128ビット幅、又は、256ビット幅である、請求項1に記載の方法。
【請求項11】
予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うコンピュータであって、
ツリーのノードを、前記複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するグループに分類して、前記ツリーを構築するツリー構築手段と、
検索キーの値を有効数とする最小ビット幅のグループに対応する前記命令を使用して、前記検索キーの値を有効数とする最小ビット幅の前記グループからデータを検索するデータ検索手段と
を備えている、前記コンピュータ。
【請求項12】
前記ツリー構築手段が、
挿入されるキーの値を有効数とする最小ビット幅のグループに属するノードに前記挿入されるキーを挿入する、
請求項11に記載のコンピュータ。
【請求項13】
前記ツリー構築手段が、
前記キーの値を有効数とする最小ビット幅のグループに属するノードを発見し、ここで、前記キーの値を有効数とする最小ビット幅の前記グループが、前記挿入されるキーの値を表現可能な最小のビット幅を有するグループである、
請求項12に記載のコンピュータ。
【請求項14】
前記ツリー構築手段が、
前記発見したノードが、前記挿入されるキーの挿入によってあふれることに応じて、前記発見したノード又は当該発見したノードの上位にあるノードを分割する、
請求項13に記載のコンピュータ。
【請求項15】
前記ツリー構築手段が、
前記ノードそれぞれに前記グループを識別する識別子を付与し、
前記データ検索手段が、
前記構築されたツリーのノードを辿って、前記識別子により各ノードが属するグループを判定し、
前記判定されたグループに対応する命令を使用して、前記データを検索する、
請求項11に記載のコンピュータ。
【請求項16】
前記ツリー構築手段が、
前記ツリーの根ノード以外のノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するように、前記ツリーを構築する、
請求項10に記載のコンピュータ。
【請求項17】
前記ツリー構築手段が、
各グループを、根ノードを親ノードとするサブツリーとして構築し、
前記データ検索手段が、
前記サブツリーに対応する前記命令を使用して、前記データを検索する、
請求項11に記載のコンピュータ。
【請求項18】
前記ツリー構築手段が、
グループそれぞれを、部分ツリーとして構築し、
前記データ検索手段が、
前記部分ツリーに対応する前記命令を使用して、前記データを検索する、
請求項11に記載のコンピュータ。
【請求項19】
前記命令がSIMD(Single Instruction Multiple Data)命令である、請求項11に記載のコンピュータ。
【請求項20】
予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うためのコンピュータ・プログラムであって、コンピュータに、請求項1〜10のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ツリー構造において、キーが挿入されるノード又は与えられたキーを持つノードを発見する際に、命令レベルの並列度を活用する技法に関する。特には、本発明は、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う技法に関する。
【背景技術】
【0002】
ツリー構造は、データが持つキーの決められた順序を保持して保存する処理又は与えられたデータを検索する処理を高速に行うことを可能にする為に、データベースや同様のものの検索操作の際に用いられる。当該ツリー構造において、データ挿入又はデータ検索の際には、与えられたデータに対応する内部のノードを発見する(すなわち、特定する)必要がある。当該内部のノードを発見する操作は、一般には、データロード命令、比較命令、又は分岐命令を用いて、与えられたキーの値に基づく検索である。当該内部のノードを発見する操作を高速にすることがツリー構造の処理の高速化に重要である。
【0003】
下記特許文献1は、データベースには、速度を向上させることが常に求められていること(段落0022)、及び、ツリーインデックス構造のデータベースを管理する装置であって、第1の階層に属するノードは第1のサイズとなるように設定されており、第2の階層に属するノードは第2のサイズとなるように設定されており、前記第1の階層に属するノード及び前記第2の階層に属するノードそれぞれに対して、分割、挿入、及び探索を行うノード管理手段を備えるデータベース管理装置(請求項1)を記載する。
【0004】
下記特許文献2は、処理手順を減少させてノード検索の高速化を図るとともに、メモリ使用量を低減することができる情報検索方法及び装置を提供することを目的とすること(段落0005)、パトリシアツリーを構成するノード2aについて、通常の2分木では2つ必要となる下位ノードへのリンクポインタを1つだけリンクポインタ2a2として持たせること(段落0024)を記載する。
【0005】
下記特許文献3は、データ検索の高速化又は管理可能なデータ量の拡大化を図ることができる検索プログラム、検索方法、検索装置、ノードおよび検索システムを提供することを目的とすること(段落0011)、段数h、ビット幅s、擬陽性または陰性を示すビットが配列された第h段の分割数d、第p(1≦p≦h)段のブルームフィルタのビット幅m=s/d[h-(p-1)]、第p段のブルームフィルタの配列数n=d[h-(p-1)]である階層型ブルームフィルタを、段ごとにブルームフィルタ列を構成する各ブルームフィルタ内の同一位置のビットどうしでまとめることで転置した階層型転置ブルームフィルタ(請求項1)を記載する。
【0006】
下記特許文献4〜8それぞれは、木構造データの検索を記載する。
【0007】
下記非特許文献1は、B+-Treeの内部ノードにおいて次のノードを決定する際に、SIMDロードと比較命令を使った”Naive SIMD Binary Search”と、SIMDロードと比較命令を使った”Sequential Comparison with SIMD”と、SIMDロードと比較命令を使った”Naive SIMD Binary Search”と”Sequential Comparison with SIMD”の”Hybrid Search”とを用いる旨を記載する(第150頁“4. INDEX STRUCTURES”〜第151頁“4.1.3 Hybrid Search”の各項を参照)。
【0008】
下記非特許文献2は、k-AryでSIMDロードと比較命令を利用して、ノード内の比較を一命令で行う旨を記載する(第54頁“3.K-ARY SEARCH”〜第56頁“3.4 Non-perfect Trees”の各項を参照)。
【0009】
下記非特許文献3は、Binary-treeの親ノードと複数子ノードにおけるkeyの比較を、SIMDロードと比較命令で行う旨を記載する(第343頁“5.1 CPU Implementation”〜第349頁“6.2.2 Traversing Compressed Trees”の各項を参照)。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】国際公開第2013/035287号
【特許文献2】特開2001−357070号公報
【特許文献3】特開2012−252658号公報
【特許文献4】特開2006−235840号公報
【特許文献5】特開平8−63480号公報
【特許文献6】特開平10−40255号公報
【特許文献7】特開平11−66096号公報
【特許文献8】特開2001−134594号公報
【非特許文献】
【0011】
【非特許文献1】Jingren Zhou等、”Implementing Database Operations Using SIMD Instructions”,ACM,Proceeding SIGMOD '02 Proceedings of the 2002 ACM SIGMOD international conference on Management of data,p. 145-156,2002年,インターネット〈URL:http://research.microsoft.com/en-us/um/people/jrzhou/pub/simd.pdf〉より入手可能
【非特許文献2】Benjamin Schlegel等、”k-Ary Search on Modern Processors”,ACM,Proceeding DaMoN '09 Proceedings of the Fifth International Workshopon Data Management on New Hardware,p. 52-60,2009年,インターネット〈URL:http://www.mpi-inf.mpg.de/~rgemulla/publications/schlegel09search.pdf〉より入手可能
【非特許文献3】Changkyu Kim等、”FAST: Fast Architecture Sensitive Tree Search on Modern CPUs and GPUs”,ACM,Proceeding SIGMOD '10 Proceedings of the 2010 ACM SIGMOD International Conference on Management of data,p. 339-350,2010年,インターネット〈URL:http://www.webislands.net/pubs/FAST__SIGMOD10.pdf〉より入手可能
【発明の概要】
【発明が解決しようとする課題】
【0012】
近年の扱うデータ量の増大によって、ツリー構造が予め大きなデータ量を有することになることを予測する必要がある。そのために、キーのビット幅が大きくなることがある。実際の製品における例として、IBM(登録商標) Cognos(登録商標) Business Intelligence10.2が挙げられる。当該製品において、決められた順序で保存するデータ構造があり、当該データ構造としてツリーが用いられている。このデータ構造のキーは、大きな整数値を取る可能性を考慮して、Java(登録商標)のlong及びBigInteger(変更が不可能な、任意精度の整数)をキーとしている。
【0013】
近年のプロセッサ(例えば、インテル・コーポレーションのHaswell、インターナショナル・ビジネス・マシーンズ・コーポレーションのPOWER7、アドバンスト・マイクロ・デバイセズのK10、及び、ARMホールディングズのARMアーキテクチャに基づくCPU)では、決められたビット幅の複数データに対して同じ処理を1命令で同時に適用するSingle Instruction Multiple Data(SIMD)命令を持つものが多い。このとき、複数データのビット幅の合計数には上限があり、当該上限は例えば、POWER7では128又は256である。
【0014】
データ挿入又はデータ検索の際における内部ノードの発見操作において、データロード又はデータ比較にSIMD命令を用いて処理を高速化することは可能である。しかしながら、当該SIMD命令を用いて高速化することにおいて、以下に示す問題点が存在する。
【0015】
キーのデータ幅が大きい(例えば、64ビット)場合には、SIMD命令を用いても命令レベルの並列度が大きくないので(例えば、SIMD命令のレジスタ幅が128であれば、並列度は2=(128/64)である)、高速化の度合いが小さい。
【0016】
また、プロセッサのアーキテクチャによっては、大きなデータ幅の演算がサポートされていない(例えば、POWER7では64ビットの比較は一命令では行えない)ので、SIMD命令を用いても高速化の度合いが小さい。
【0017】
そこで、本発明は、予め決められたビット幅のデータに対して操作を行う命令(例えば、SIMD命令)を用いながら、データ挿入又はデータ検索の際における内部ノードの発見操作を高速化することを目的とする。
【課題を解決するための手段】
【0018】
本発明は、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う技法を提供する。当該技法は、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う方法、並びに、当該ツリーの検索を行うためのコンピュータ、コンピュータ・プログラム及びコンピュータ・プログラム製品を包含しうる。
【0019】
本発明に従う第1の態様において、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う方法であって、コンピュータが、
ツリーのノードを、上記複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するグループに分類して、上記ツリーを構築するステップと、
検索キーの値を有効数とする最小ビット幅のグループに対応する上記命令を使用して、上記検索キーの値を有効数とする最小ビット幅の上記グループからデータを検索する(search)ステップと
を実行することを含む。
【0020】
本発明の一つの実施態様において、上記構築するステップが、
挿入されるキーの値を有効数とする最小ビット幅のグループに属するノードに上記挿入されるキーを挿入するステップ
をさらに含みうる。
【0021】
本発明の一つの実施態様において、上記構築するステップが、
上記キーの値を有効数とする最小ビット幅のグループに属するノードを発見する(find)ステップであって、上記キーの値を有効数とする最小ビット幅の上記グループが、上記挿入されるキーの値を表現可能な最小のビット幅を有するグループである、上記発見するステップ
をさらに含みうる。
【0022】
本発明の一つの実施態様において、上記構築するステップが、
上記発見したノードが、上記挿入されるキーの挿入によってあふれることに応じて、上記発見したノード又は当該発見したノードの上位にあるノードを分割するステップ
をさらに含みうる。
【0023】
本発明の一つの実施態様において、上記構築するステップが、
上記ノードそれぞれに上記グループを識別する識別子を付与するステップ
を含み、
上記検索するステップが、
上記構築されたツリーのノードを辿って、上記識別子により各ノードが属するグループを判定するステップと、
上記判定されたグループに対応する命令を使用して、上記データを検索するステップと
を含みうる。
【0024】
本発明の一つの実施態様において、上記構築するステップが、
上記ツリーの根ノード以外のノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するように、上記ツリーを構築するステップ
を含みうる。
【0025】
本発明の一つの実施態様において、上記構築するステップが、
上記ツリーの根ノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有する少なくとも2つのグループを下位にあるノードとして有するように、上記ツリーを構築するステップ
を含みうる。
【0026】
本発明の一つの実施態様において、上記構築するステップが、
各グループを、根ノードを親ノードとするサブツリーとして構築するステップ
を含み、
上記検索するステップが、
上記サブツリーに対応する上記命令を使用して、上記データを検索するステップ
を含みうる。
【0027】
本発明の一つの実施態様において、上記構築するステップが、
グループそれぞれを、部分ツリーとして構築するステップ
を含み、
上記検索するステップが、
上記部分ツリーに対応する上記命令を使用して、上記データを検索するステップ
を含みうる。
【0028】
本発明に従う第2の態様において、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うコンピュータは、
ツリーのノードを、上記複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するグループに分類して、上記ツリーを構築するツリー構築手段と、
検索キーの値を有効数とする最小ビット幅のグループに対応する上記命令を使用して、上記検索キーの値を有効数とする最小ビット幅の上記グループからデータを検索するデータ検索手段と
を備えている。
【0029】
本発明の一つの実施態様において、上記ツリー構築手段が、挿入されるキーの値を有効数とする最小ビット幅のグループに属するノードに上記キーを挿入しうる。
【0030】
本発明の一つの実施態様において、上記ツリー構築手段が、上記キーの値を有効数とする最小ビット幅のグループに属するノードを発見しうる。ここで、上記キーの値を有効数とする最小ビット幅の上記グループが、上記挿入されるキーの値を表現可能な最小のビット幅を有するグループである。
【0031】
本発明の一つの実施態様において、上記ツリー構築手段が、上記発見したノードが、上記挿入されるキーの挿入によってあふれることに応じて、上記発見したノード又は当該発見したノードの上位にあるノードを分割しうる。
【0032】
本発明の一つの実施態様において、上記ツリー構築手段が、上記ノードそれぞれに上記グループを識別する識別子を付与し、
上記データ検索手段が、上記構築されたツリーのノードを辿って、上記識別子により各ノードが属するグループを判定し、当該判定されたグループに対応する命令を使用して、上記データを検索しうる。
【0033】
本発明の一つの実施態様において、上記ツリー構築手段が、上記ツリーの根ノード以外のノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するように、上記ツリーを構築しうる。
【0034】
本発明の一つの実施態様において、上記ツリー構築手段が、上記ツリーの根ノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有する少なくとも2つのグループを下位にあるノードとして有するように、上記ツリーを構築しうる。
【0035】
本発明の一つの実施態様において、上記ツリー構築手段が、各グループを、根ノードを親ノードとするサブツリーとして構築し、
上記データ検索手段が、上記サブツリーに対応する上記命令を使用して、上記データを検索しうる。
【0036】
本発明の一つの実施態様において、上記ツリー構築手段が、グループそれぞれを、部分ツリーとして構築し、
上記データ検索手段が、上記部分ツリーに対応する上記命令を使用して、上記データを検索しうる。
【0037】
本発明に従う第3の態様において、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うためのコンピュータ・プログラム又はコンピュータ・プログラム製品は、コンピュータに、上記第1の態様に記載の方法の各ステップを実行させる。
【0038】
本発明に従う第4の態様において、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うためのコンピュータであって、
単一又は複数のプロセッサと、
上記単一又は複数のプロセッサに接続されたメモリと、
上記第3の態様に記載のコンピュータ・プログラムを記憶した記憶媒体と
を備えており、
上記プロセッサが、上記コンピュータ・プログラムを上記メモリに読み込んで、当該コンピュータ・プログラムを実行する。
【0039】
本発明の実施態様に従うコンピュータ・プログラムはそれぞれ、一つ又は複数のフレキシブル・ディスク、MO、CD−ROM、DVD、BD、ハードディスク装置、USBに接続可能なメモリ媒体、ROM、MRAM、RAM等の任意のコンピュータ読み取り可能な記録媒体に格納することができる。当該コンピュータ・プログラムは、上記記録媒体への格納のために、通信回線で接続する他のコンピュータ、例えばサーバ・コンピュータからダウンロードしたり、又は他の記録媒体から複製したりすることができる。また、本発明の実施態様に従うコンピュータ・プログラムは、圧縮し、又は複数に分割して、単一又は複数の記録媒体に格納することもできる。また、様々な形態で、本発明の実施態様に従うコンピュータ・プログラム製品を提供することも勿論可能であることにも留意されたい。本発明の実施態様に従うコンピュータ・プログラム製品は、例えば、上記コンピュータ・プログラムを記録した記憶媒体、又は、上記コンピュータ・プログラムを伝送する伝送媒体を包含しうる。
【0040】
本発明の上記概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの構成要素のコンビネーション又はサブコンビネーションもまた、本発明となりうることに留意すべきである。
【0041】
本発明の実施態様において使用されるコンピュータの各ハードウェア構成要素を、複数のマシンと組み合わせ、それらに機能を配分し実施する等の種々の変更は当業者によって容易に想定され得ることは勿論である。それらの変更は、当然に本発明の思想に包含される概念である。ただし、これらの構成要素は例示であり、そのすべての構成要素が本発明の必須構成要素となるわけではない。
【0042】
また、本発明は、ハードウェア、ソフトウェア、又は、ハードウェア及びソフトウェアの組み合わせとして実現可能である。ハードウェアとソフトウェアとの組み合わせによる実行において、上記コンピュータ・プログラムのインストールされたコンピュータにおける実行が典型的な例として挙げられる。かかる場合、当該コンピュータ・プログラムが当該コンピュータのメモリにロードされて実行されることにより、当該コンピュータ・プログラムは、当該コンピュータを制御し、本発明にかかる処理を実行させる。当該コンピュータ・プログラムは、任意の言語、コード、又は、表記によって表現可能な命令群から構成されうる。そのような命令群は、当該コンピュータが特定の機能を直接的に、又は、1.他の言語、コード若しくは表記への変換及び、2.他の媒体への複製、のいずれか一方若しくは双方が行われた後に、本発明の実施態様に従う処理を実行することを可能にするものである。
【発明の効果】
【0043】
本発明の実施態様に従うと、ツリーのノードを、予め定められた複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するグループに分類して、当該ツリーを構築することによって、データ挿入又はデータ検索の際における内部ノードの発見操作を高速化することが可能になる。また、当該発見操作が早くなることによって、上記データ挿入の操作を高速化することが可能になる。
【図面の簡単な説明】
【0044】
図1】本発明の実施態様において使用されうるコンピュータの一例を示した図である。
図2】本発明の実施態様に従う検索手法1において使用するために構築されたツリー構造の例を示した図である。
図3A】本発明の実施態様に従う検索手法2において使用するために構築されたツリー構造の例を示した図である。
図3B】本発明の実施態様に従う検索手法2において使用するために構築されたツリー構造の例を示した図である。
図3C】本発明の実施態様に従う検索手法2において使用するために構築されたツリー構造の例を示した図である。
図4A】本発明の実施態様に従い、上記検索手法1において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例1を示した図である。
図4B】本発明の実施態様に従い、上記検索手法1において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例1を示した図である。
図4C】本発明の実施態様に従い、上記検索手法1において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例1を示した図である。
図4D】本発明の実施態様に従い、上記検索手法1において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例1を示した図である。
図4E】本発明の実施態様に従い、上記検索手法1において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例2を示した図である。
図4F】本発明の実施態様に従い、上記検索手法1において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例2を示した図である。
図4G】本発明の実施態様に従い、上記検索手法1において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例2を示した図である。
図4H】本発明の実施態様に従い、上記検索手法1において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例2を示した図である。
図5A】本発明の実施態様に従い、上記検索手法2において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例1を示した図である。
図5B】本発明の実施態様に従い、上記検索手法2において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例1を示した図である。
図5C】本発明の実施態様に従い、上記検索手法2において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例2を示した図である。
図5D】本発明の実施態様に従い、上記検索手法2において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例2を示した図である。
図5E】本発明の実施態様に従い、上記検索手法2において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例2を示した図である。
図6】本発明の実施態様に従い、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う処理全体のフローチャートを示す。
図7A】本発明の実施態様に従い、上記検索手法1の為のツリー構造を使用して、キーの値を挿入すべき葉ノード又はキーの値を持つ可能性がある葉ノードを発見する処理のフローチャートを示す。
図7B】本発明の実施態様に従い、上記検索手法2の為のツリー構造を使用して、キーの値を挿入すべき葉ノード又はキーの値を持つ可能性がある葉ノードを発見する処理のフローチャートを示す。
図8A】本発明の実施態様に従い、上記検索手法1において使用するために構築されたツリー構造において、当該ツリーのノードにエントリを挿入して、ツリーを動的に再構築する処理のフローチャートを示す。
図8B】本発明の実施態様に従い、上記検索手法2において使用するために構築されたツリー構造において、当該ツリーのノードにエントリを挿入して、ツリーを動的に再構築する処理のフローチャートを示す。
図9図1に従うハードウェア構成を好ましくは備えており、本発明の実施態様に従い、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うためのコンピュータの機能ブロック図の一例を示した図である。
【発明を実施するための形態】
【0045】
本発明の実施形態を、以下に図面に従って説明する。以下の図を通して、特に断らない限り、同一の符号は同一の対象を指す。本発明の実施形態は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。
【0046】
本発明の実施態様において使用されうる「コンピュータ」は、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う処理を実行可能なコンピュータであれば特に限定されない。当該コンピュータは例えば、例えば、デスクトップ・コンピュータ、ノート・コンピュータ、一体型パソコン若しくはタブレット端末、又は、サーバ・コンピュータでありうる。
【0047】
本発明の実施態様において、「予め決められた複数のビット幅のデータに対して操作を行う命令」とは、予め決められたビット幅の複数のデータに対して同じ処理を1命令で適用可能な命令である。当該命令は例えば、予め決められたビット幅の複数のデータに対して同じ処理を1命令で同時に適用可能であってもよく又は同時に適用可能でない命令であってもよい。予め決められたビット幅の複数のデータに対して同じ処理を1命令で同時に適用可能な命令は例えば、SIMD命令である。SIMD命令には、SSEやNEONと呼ばれるSIMD命令も含まれる。
【0048】
本発明の実施態様において、「キーの値を表現可能な最小のビット幅ビット幅」は例えば、8ビット幅、16ビット幅、32ビット幅、64ビット幅、128ビット幅、又は、256ビット幅である。
【0049】
本発明の実施態様において、「ツリー」(木とも表現される)とは、複数の子ノードと当該子ノードそれぞれに関連付けられたキーを持つ中間ノードを有するツリー構造であればよい。当該ツリーは例えば、B+−ツリー、B−ツリー、B*ツリー、2−3ツリー、2−3−4ツリーである。
【0050】
B+−ツリー、B−ツリー、B*ツリー、2−3ツリー、2−3−4ツリーはいずれも、キーを指定することで挿入、検索、又は削除が行えるツリー構造の一種である。
【0051】
B+−ツリーは、動的な階層型インデックスであり、各インデックスセグメント(「ブロック」とも呼ばれ、ツリー構造におけるノードに相当する)にはキー数の上限と下限がある。B+−ツリーはB−ツリーとは異なり、全てのレコードは木の最下層(葉ノード)に格納され、中間ノード(内部ノード)にはキーの代表のみが格納される。B+−ツリーでは、中間ノードが複数のキーと子ノードペアを持ち、葉ノードが検索されるキーの値を持つ。
【0052】
B−ツリーは、単純な2分木に比べて、一つのブロックに複数のデータエントリを格納するので、データエントリの追加があっても木構造の形の変化が波及する範囲を狭くできる。
【0053】
B*ツリーは、B−ツリーから派生した木構造の一種であり、根ノード以外のノードは、B−ツリーのように1/2ではなく、2/3まで埋まった状態になる。
【0054】
図1は、本発明の実施態様において使用されうるコンピュータの一例を示した図である。
【0055】
コンピュータ(101)は、1つ又は複数のCPU(102)とメイン・メモリ(103)とを備えており、これらはバス(104)に接続されている。CPU(102)は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものである。当該CPU(102)は例えば、インテル社のCore(商標) iシリーズ、Core(商標)シリーズ、Atom(商標)シリーズ、Xeon(登録商標)シリーズ、Pentium(登録商標)シリーズ若しくはCeleron(登録商標)シリーズ、AMD(Advanced Micro Devices)社のAシリーズ、Phenom(商標)シリーズ、Athlon(商標)シリーズ、Turion(登録商標)シリーズ若しくはSempron(商標)、又は、インターナショナル・ビジネス・マシーンズ・コーポレーションのPower(商標)シリーズでありうる。
【0056】
バス(104)には、ディスプレイ・コントローラ(105)を介して、ディスプレイ(106)、例えば液晶ディスプレイ(LCD)が接続されうる。また、液晶ディスプレイ(LCD)は例えば、タッチパネル・ディスプレイ又はフローティング・タッチ・ディスプレイであてもよい。ディスプレイ(106)は、コンピュータ(101)上で動作中のソフトウェア(例えば、本発明の実施態様に従うコンピュータ・プログラム又は当該コンピュータ(101)上で動作中の各種コンピュータ・プログラム)が稼働することによって表示されるオブジェクトを、適当なグラフィック・インタフェースで表示するために使用されうる。
【0057】
バス(104)には任意的に、例えばSATA又はIDEコントローラ(107)を介して、ディスク(108)、例えばハードディスク又はソリッド・ステート・ドライブ(SSD)が接続されうる。
【0058】
バス(104)には任意的に、例えばSATA又はIDEコントローラ(107)を介して、ドライブ(109)、例えばCD、DVD又はBDドライブが接続されうる。
【0059】
バス(104)には、周辺装置コントローラ(110)を介して、例えばキーボード・マウス・コントローラ又はUSBバスを介して、任意的に、キーボード(111)及びマウス(112)が接続されうる。
【0060】
ディスク(108)には、オペレーティング・システム、例えばWindows(登録商標),Mac OS(登録商標) X,Linux(登録商標),Android(登録商標),iOS、J2EEなどのJava(登録商標)処理環境、Java(登録商標)アプリケーション、Java(登録商標)仮想マシン(VM)、Java(登録商標)実行時(JIT)コンパイラを提供するプログラム、本発明の実施態様に従うコンピュータ・プログラム、及びその他のプログラム、並びにデータが、メイン・メモリ(103)にロード可能なように記憶されうる。
【0061】
ディスク(108)は、コンピュータ(101)内に内蔵されていてもよく、当該コンピュータ(101)がアクセス可能なようにケーブルを介して接続されていてもよく、又は、当該コンピュータ(101)がアクセス可能なように有線又は無線ネットワークを介して接続されていてもよい。
【0062】
ドライブ(109)は、必要に応じて、CD−ROM、DVD−ROM又はBDからプログラム、例えばオペレーティング・システム、アプリケーション又は本発明の実施態様に従うコンピュータ・プログラムをディスク(108)にインストールするために使用されうる。
【0063】
通信インタフェース(114)は、例えばイーサネット(登録商標)・プロトコルに従う。通信インタフェース(114)は、通信コントローラ(113)を介してバス(104)に接続され、コンピュータ(101)を通信回線(115)に有線又は無線接続する役割を担い、コンピュータ(101)のオペレーティング・システムの通信機能のTCP/IP通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は例えば、無線LAN接続規格に基づく無線LAN環境、IEEE802.11a/b/g/nなどのWi−Fi無線LAN環境、又は携帯電話網環境(例えば、3G又は4G環境)でありうる。
【0064】
下記図2、並びに下記図3A図3Cそれぞれにおいて、本発明の実施態様に従う検索手法において使用するために構築されたツリー構造の例を示す。本発明の実施態様に従う検索手法には2態様あり、以下において、検索手法1及び検索手法2という。図2は上記検索手法1において使用するために構築されたツリー構造(201)を示したものであり、図3A図3Cそれぞれは上記検索手法2において使用するために構築されたツリー構造(301,302及び303)を示したものである。
【0065】
本発明の実施態様に従う検索手法1において使用するために構築されたツリー構造(201)において、或る中間ノードAは、当該中間ノードAが属するグループと異なるグループ(すなわち、当該中間ノードAが属するグループのビット幅よりも小さい又は大きいビット幅のキーを持つグループ)の中間ノードBを子ノードとして有する場合がある。上記検索手法1は、上記ツリー構造におけるノード決定操作でキーを比較する際に、子ノードを辿って、与えられたキー値とノードが持つキー値とを比較する際に、当該ノードが属するグループを調べて、当該ノードが持つキーのグループ(すなわち、当該キーが持つキーの値の範囲)に応じた、命令レベル並列度をより適切に利用できるSIMD比較命令を用いて比較を行うことを可能にする手法である。
【0066】
本発明の実施態様に従う検索手法2において使用するために構築されたツリー構造(301,302及び303)において、或る中間ノードAは、当該中間ノードAが属するグループと同じグループ(すなわち、当該中間ノードAが属するグループのビット幅と同じビット幅のキーを持つグループ)の中間ノードBだけを子ノードとして有することが保証されている。
【0067】
図2は、本発明の実施態様に従う検索手法1において使用するために構築されたツリー構造の例を示した図である。
【0068】
ツリー(201)は、根ノード(211)、中間ノード(212〜216)、及び、葉ノード(221〜231)を有するとする。
【0069】
根ノード(211)はツリー(201)の頂点にあるノードであり、従って、根ノード(211)は親ノードを持たない。根ノード(211)は、エントリとして、複数(図示の例では、4個)のキーを持つことができるとする。根ノード(211)は、中間ノード(212〜216)と直接的に又は間接的にエッジによって接続されている。根ノード(211)の各エントリは、当該根ノード(211)と直接的にエッジによって接続されている中間ノード(212、213、214及び215)それぞれの左端にあるエントリ内のキー値を持つ。
【0070】
中間ノード(212〜216)は子ノードを持つノードであり、且つ、根ノード(211)及び葉ノード(221〜231)以外のノードである。中間ノード(212〜216)はそれぞれ、エントリとして、1又は複数個(図示の例では、4個)のキーを持つことができるとする。中間ノード(212〜216)はそれぞれ、根ノード(211)及び葉ノード(221〜231)それぞれと直接的に又は間接的にエッジによって接続されている。中間ノードは内部ノードとも呼ばれる。
【0071】
葉ノード(221〜231)は、ツリー(201)の最底辺にあるノードであり、従って、葉ノード(221〜231)は子ノードを持たない。葉ノード(221〜231)はそれぞれ、エントリとして、1又は複数個(図示の例では、2個)のキーを持つことができるとする。また、葉ノード(221〜231)にデータが格納されている。
【0072】
根ノード(211)及び中間ノード(212〜216)はそれぞれ、キーの値を表現可能な最小のビット幅を有するグループとして、下記3つのグループのノードに分類される:
(1)32ビット幅以下のキーを持つノード(すなわち、全てのビット幅のキーを持ちうる);
(2)16ビット幅以下のキーを持つノード;及び、
(3)8ビット幅のキーだけを持つノード。
【0073】
なお、図2に示すツリー(201)の例では3つのグループのノードに分類する場合を示したが、キーの値を表現可能な最小のビット幅に応じて、その他の数のグループに例えば、4つのグループ(64ビット幅以下のキーを持つノード;32ビット幅以下のキーを持つノード;16ビット幅以下のキーを持つノード;及び、8ビット幅のキーだけを持つノード)、5つのグループ(128ビット幅以下のキーを持つノード;64ビット幅以下のキーを持つノード;32ビット幅以下のキーを持つノード;16ビット幅以下のキーを持つノード;及び、8ビット幅のキーだけを持つノード)、又は、6つのグループ(256ビット幅以下のキーを持つノード;128ビット幅以下のキーを持つノード;64ビット幅以下のキーを持つノード;32ビット幅以下のキーを持つノード;16ビット幅以下のキーを持つノード;及び、8ビット幅のキーだけを持つノード)の各ノードに分類することも可能である。
【0074】
(1)32ビット幅以下のキーを持つノードは、32ビット幅のキー、並びに任意的に、16ビット幅のキー及び/又は8ビット幅のキーを有しうる。ツリー(201)のうち、32ビット幅以下のキーを持つノードは、根ノード(211)及び中間ノード(215)である。根ノード(211)は、32ビット幅のキー(70000)、16ビット幅のキー(500)、及び8ビット幅のキー(0,50)を有している。中間ノード(215)は、32ビット幅のキー(70000,71000,80000)だけを有している。
【0075】
(2)16ビット幅以下のキーを持つノードは、16ビット幅のキー、及び任意的に、8ビット幅のキーを有しうる。ツリー(201)のうち、16ビット幅以下のキーを持つノードは、中間ノード(213)及び中間ノード(214)である。中間ノード(213)は、16ビット幅のキー(400)、及び8ビット幅のキー(50)を有している。中間ノード(214)は、16ビット幅のキー(500,510)だけを有している。
【0076】
(3)8ビット幅のキーだけを持つノードは、ツリー(201)のうち、中間ノード(212)及び中間ノード(216)である。中間ノード(212)は、8ビット幅のキー(0,10,20)だけを有している。中間ノード(216)は、8ビット幅のキー(50,60)だけを有している。
【0077】
ツリー(201)中、中間ノード(213)は16ビット幅以下のキーを持つノードであるが、その子ノードとして中間ノード(216)を有しており、当該中間ノード(216)は、8ビット幅のキーだけを持つノードである。すなわち、本発明の実施態様に従う検索手法1において使用するために構築されたツリー構造において、或る中間ノードAは、当該中間ノードAが属するグループと異なるグループ(すなわち、当該中間ノードAが属するグループのビット幅よりも小さい又は大きいビット幅のキーを持つグループ)の中間ノードBを子ノードとして有しうる。
【0078】
ツリー(201)において、データを検索する場合には、(1)32ビット幅以下のキーを持つノード、(2)16ビット幅以下のキーを持つノード、及び(3)8ビット幅のキーだけを持つノード毎に、キー幅(32ビット幅、16ビット幅、又は8ビット幅)に応じたSIMD命令を用いて、同時にデータの比較をすることが可能である。従って、検索の速度が向上する。
【0079】
また、ツリー(201)は、上記したとおり、或る中間ノードAは、当該中間ノードAが属するグループと異なるグループの中間ノードBを子ノードとして有する場合がある。例えば、16ビット幅以下のキーを持つ中間ノード(213)はその子ノードとして、上記16ビット幅と異なる8ビット幅のキーだけを持つ中間ノード(216)を有する。従って、コンピュータは、検索キーの値を有効数とする最小ビット幅のグループに対応する命令(例えば、SIMD命令)を使用して、当該ツリー(201)中のデータの検索を行う場合に、子ノードである中間ノードを辿る度に、当該中間ノードの種類を判断する(すなわち、上記(1)〜(3)のどのグループに属するかを判断する)必要がある。
【0080】
図3Aは、本発明の実施態様に従う検索手法2において使用するために構築されたツリー構造の例を示した図である。
【0081】
ツリー(301)は、根ノード(311)、中間ノード(312〜317)、及び、葉ノード(321〜331)を有するとする。
【0082】
根ノード(311)はツリー(301)の頂点にあるノードであり、従って、根ノード(311)は親ノードを持たない。根ノード(311)は、エントリとして、複数(図示の例では、4個)のキーを持つことができるとする。根ノード(311)は、中間ノード(312〜317)と直接的に又は間接的にエッジによって接続されている。根ノード(311)の各エントリは、当該根ノード(311)と直接的にエッジによって接続されている中間ノード(312、313及び314)それぞれの左端にあるエントリ内のキー値を持つ。
【0083】
中間ノード(312〜317)は子ノードを持つノードであり、且つ、根ノード(311)及び葉ノード(321〜331)以外のノードである。中間ノード(312〜317)はそれぞれ、エントリとして、1又は複数個(図示の例では、4個)のキーを持つことができるとする。中間ノード(312〜317)はそれぞれ、根ノード(311)及び葉ノード(321〜331)それぞれと直接的に又は間接的にエッジによって接続されている。中間ノードは内部ノードとも呼ばれる。
【0084】
葉ノード(321〜331)は、ツリー(301)の最底辺にあるノードであり、従って、葉ノード(321〜331)は子ノードを持たない。葉ノード(321〜331)はそれぞれ、エントリとして、1又は複数個(図示の例では、2個)のキーを持つことができるとする。また、葉ノード(321〜331)にデータが格納されている。
【0085】
根ノード(311)及び中間ノード(312〜317)はそれぞれ、キーの値を表現可能な最小のビット幅を有するグループとして、下記4つのグループのノードに分類される:
(1)32ビット幅以下のキーを持つノード(すなわち、全てのビット幅のキーを持ちうる);
(2)32ビット幅のキーだけを持つノード;
(3)16ビット幅のキーだけを持つノード;及び、
(4)8ビット幅のキーだけを持つノード。
【0086】
なお、図3Aに示すツリー(301)の例では4つのグループのノードに分類する場合を示したが、キーの値を表現可能な最小のビット幅に応じて、その他の数のグループに例えば、5つのグループ(64ビット幅以下のキーを持つノード;64ビット幅のキーだけを持つノード;32ビット幅のキーだけを持つノード;16ビット幅のキーだけを持つノード;及び、8ビット幅のキーだけを持つノード)、6つのグループ(128ビット幅以下のキーを持つノード;128ビット幅のキーだけを持つノード;64ビット幅のキーだけを持つノード;32ビット幅のキーだけを持つノード;16ビット幅のキーだけを持つノード;及び、8ビット幅のキーだけを持つノード)、又は、7つのグループ(256ビット幅以下のキーを持つノード;256ビット幅のキーだけを持つノード;128ビット幅のキーだけを持つノード;64ビット幅のキーだけを持つノード;32ビット幅のキーだけを持つノード;16ビット幅のキーだけを持つノード;及び、8ビット幅のキーだけを持つノード)の各ノードに分類することも可能である。
【0087】
(1)32ビット幅以下のキーを持つノードは、32ビット幅のキー、並びに任意的に、16ビット幅のキー及び/又は8ビット幅のキーを有しうる。ツリー(301)のうち、32ビット幅以下のキーを持つノードは、根ノード(311)である。根ノード(311)は、32ビット幅のキー(70000)、16ビット幅のキー(500)、及び8ビット幅のキー(0)を有している。
【0088】
(2)32ビット幅のキーだけを持つノードは、ツリー(301)のうち、中間ノード(314)である。中間ノード(314)は、32ビット幅のキー(70000,71000,80000)だけを有している。
【0089】
(3)16ビット幅のキーだけを持つノードは、ツリー(301)のうち、中間ノード(313)、中間ノード(316)及び中間ノード(317)である。中間ノード(313)は、16ビット幅のキー(400,500)だけを有している。中間ノード(316)は、16ビット幅のキー(400)だけを有している。中間ノード(317)は、16ビット幅のキー(500,510)だけを有している。
【0090】
(4)8ビット幅のキーだけを持つノードは、ツリー(301)のうち、中間ノード(312)及び中間ノード(315)である。中間ノード(312)は、8ビット幅のキー(0,50,60)だけを有している。中間ノード(315)は、8ビット幅のキー(0,10,20)だけを有している。
【0091】
図3Aに示す本発明の実施態様に従う検索手法2において使用するために構築されたツリー構造において、根ノード以外の中間ノードは、32ビット幅、16ビット幅、又は8ビット幅のいずれかのキーだけを持つノードに分類される。また、図3Aに示す本発明の実施態様に従う検索手法2において使用するために構築されたツリー構造において、或る中間ノードAは、当該中間ノードAが属するグループと同じグループ(すなわち、当該中間ノードAが属するグループのビット幅と同じビット幅のキーを持つグループ)の中間ノードBだけを子ノードとして有する。
【0092】
ツリー(301)において、データを検索する場合には、(1)32ビット幅以下のキーを持つノード、(2)16ビット幅以下のキーを持つノード、及び(3)8ビット幅のキーだけを持つノード毎に、キー幅(32ビット幅、16ビット幅、又は8ビット幅)に応じたSIMD命令を用いて、同時にデータの比較をすることが可能である。従って、検索の速度が向上する。
【0093】
また、ツリー(301)は、上記したとおり、根ノード(311)以外のある中間ノードAは、その子ノードとして、当該中間ノードAが属するグループと同じグループ(すなわち、当該中間ノードAが属するグループのビット幅と同じビット幅のキーを持つグループである)の中間ノードBだけを子ノードとして有することが保証されている。従って、コンピュータ(101)は、検索キーの値を有効数とする最小ビット幅のグループに対応する命令(例えば、SIMD命令)を使用して、当該ツリー(301)中のデータの検索を行う場合には、根ノード(311)に直接的にエッジによって接続されている中間ノード(312,313,及び314)の種類を判断すれば(すなわち、上記(2)〜(4)のどのグループに属するかを判断する)、それ以降の子ノードである中間ノードにおいて、当該中間ノードを辿る度に、当該中間ノードの種類を判断する(すなわち、上記(2)〜(4)のどのグループに属するかを判断する)必要はない。
【0094】
図3Bは、本発明の実施態様に従う検索手法2において使用するために構築されたツリー構造の例を示した図である。
【0095】
ツリー(302)は、根ノード(341)、中間ノード(342〜346)、及び、葉ノード(351〜361)を有するとする。
【0096】
根ノード(341)について、図3Aに示す根ノード(311)の説明を参照されたい。
【0097】
中間ノード(342〜346)について、図3Aに示す中間ノード(312〜317)の説明を参照されたい。
【0098】
葉ノード(351〜361)について、図3Aに示す葉ノード(321〜331)の説明を参照されたい。
【0099】
図3Bに示すツリー(302)の根ノード(341)は、図3Aに示すツリー(301)の根ノード(311)と異なり、あるビット幅のキーだけを持つノードの複数それぞれと直接的にエッジによって接続されている。すなわち、根ノード(341)は、16ビット幅のキーだけを持つノードである中間ノード(343)及び中間ノード(344)それぞれと直接的にエッジによって接続されている。
【0100】
ツリー(302)において、データを検索する場合には、(1)32ビット幅以下のキーを持つノード、(2)16ビット幅以下のキーを持つノード、及び(3)8ビット幅のキーだけを持つノード毎に、キー幅(32ビット幅、16ビット幅、又は8ビット幅)に応じたSIMD命令を用いて、同時にデータの比較をすることが可能である。従って、検索の速度が向上する。
【0101】
また、ツリー(302)は、上記したとおり、根ノード(341)以外のある中間ノードAは、その子ノードとして、当該中間ノードAが属するグループと同じグループ(すなわち、当該中間ノードAが属するグループのビット幅と同じビット幅のキーを持つグループである)の中間ノードBだけを子ノードとして有することが保証されている。従って、コンピュータ(101)は、検索キーの値を有効数とする最小ビット幅のグループに対応する命令(例えば、SIMD命令)を使用して、当該ツリー(302)中のデータの検索を行う場合には、根ノード(341)に直接的にエッジによって接続されている中間ノード(342,343,344,及び345)の種類を判断すれば(すなわち、上記(2)〜(4)のどのグループに属するかを判断する)、それ以降の子ノードである中間ノードにおいて、当該中間ノードを辿る度に、当該中間ノードの種類を判断する(すなわち、上記(2)〜(4)のどのグループに属するかを判断する)必要はない。
【0102】
図3Cは、本発明の実施態様に従う検索手法2において使用するために構築されたツリー構造の例を示した図である。
【0103】
ツリー(303)は、ノード(371〜374)、及び、葉ノード(381〜391)を有するとする。ツリー(303)は、所謂、根ノードを有していない。しかしながら、ノード(371)、ノード(372)及びノード(373)の最上位ノードとして実質的に根ノードが存在するともみなせる。従って、ノード(371〜374)は、中間ノードに対応する。または、ツリー(303)は、最上位ノードであるノード(371)、ノード(372)及びノード(373)それぞれを部分ツリーの根ノードとするツリーであるとも見なせる。この場合に、根ノード(371)の中間ノードは、ノード(374)である。
【0104】
根ノード及び中間ノードについて、図3Aに示す根ノード(311)及び中間ノード(312〜317)の説明を参照されたい。
【0105】
葉ノード(381〜391)について、図3Aに示す葉ノード(321〜331)の説明を参照されたい。
【0106】
ノード(371〜374)はそれぞれ、キーの値を表現可能な最小のビット幅を有するグループとして、下記3つのグループのノードに分類される:
(1)32ビット幅のキーだけを持つノード;
(2)16ビット幅のキーだけを持つノード;及び、
(3)8ビット幅のキーだけを持つノード。
【0107】
なお、図3Cに示すツリー(303)の例では3つのグループのノードに分類する場合を示したが、キーの値を表現可能な最小のビット幅に応じて、その他の数のグループに例えば、4つのグループ(64ビット幅のキーだけを持つノード;32ビット幅のキーだけを持つノード;16ビット幅のキーだけを持つノード;及び、8ビット幅のキーだけを持つノード)、5つのグループ(128ビット幅のキーだけを持つノード;64ビット幅のキーだけを持つノード;32ビット幅のキーだけを持つノード;16ビット幅のキーだけを持つノード;及び、8ビット幅のキーだけを持つノード)、又は、6つのグループ(256ビット幅のキーだけを持つノード;128ビット幅のキーだけを持つノード;64ビット幅のキーだけを持つノード;32ビット幅のキーだけを持つノード;16ビット幅のキーだけを持つノード;及び、8ビット幅のキーだけを持つノード)の各ノードに分類することも可能である。
【0108】
(1)32ビット幅のキーだけを持つノードは、ツリー(303)のうち、ノード(373)である。ノード(373)は、32ビット幅のキー(70000,71000,80000)だけを有している。従って、ノード(373)及び葉ノード(389〜391)は、ツリー(303)の部分ツリーであり、当該部分ツリーは32ビット幅のキーだけを持つグループといえる。また、この場合に、ノード(373)は部分ツリーの根ノードともいえる。
【0109】
(2)16ビット幅のキーだけを持つノードは、ツリー(303)のうち、ノード(372)である。ノード(372)は、16ビット幅のキー(400,500,510)だけを有している。従って、ノード(372)及び葉ノード(386〜388)は、ツリー(303)の部分ツリーであり、当該部分ツリーは16ビット幅のキーだけを持つグループといえる。また、この場合に、ノード(372)は部分ツリーの根ノードともいえる。
【0110】
(3)8ビット幅のキーだけを持つノードは、ツリー(303)のうち、ノード(371)及びノード(374)である。ノード(371)は、8ビット幅のキー(0,50,60)だけを有している。ノード(374)は、8ビット幅のキー(0,10,20)だけを有している。従って、ノード(371)、ノード(374)及び葉ノード(381〜385)は、ツリー(303)の部分ツリーであり、当該部分ツリーは8ビット幅のキーだけを持つグループといえる。また、この場合に、ノード(371)は部分ツリーの根ノード、ノード(374)は中間ツリーともいえる。
【0111】
図3Cに示す本発明の実施態様に従う検索手法2において使用するために構築されたツリー構造において、ノードは、32ビット幅、16ビット幅、又は8ビット幅のいずれかのキーだけを持つノードに分類される。また、図3Cに示す本発明の実施態様に従う検索手法2において使用するために構築されたツリー構造において、或る中間ノードAは、当該中間ノードAが属するグループと同じグループ(すなわち、当該中間ノードAが属するグループのビット幅と同じビット幅のキーを持つグループ)の中間ノードBだけを子ノードとして有する。
【0112】
ツリー(303)において、データを検索する場合には、(1)32ビット幅以下のキーを持つノード、(2)16ビット幅以下のキーを持つノード、及び(3)8ビット幅のキーだけを持つノード毎に、キー幅(32ビット幅、16ビット幅、又は8ビット幅)に応じたSIMD命令を用いて、同時にデータの比較をすることが可能である。従って、検索の速度が向上する。
【0113】
また、ツリー(303)は、上記したとおり、あるノードAは、その子ノードとして、当該ノードAが属するグループと同じグループ(すなわち、当該ノードAが属するグループのビット幅と同じビット幅のキーを持つグループである)のノードBだけを子ノードとして有することが保証されている。従って、コンピュータ(101)は、検索キーの値を有効数とする最小ビット幅のグループに対応する命令(例えば、SIMD命令)を使用して、当該ツリー(303)中のデータの検索を行う場合には、最上位のノード(371,372,及び373)の種類を判断すれば(すなわち、上記(1)〜(3)のどのグループに属するかを判断する)、それ以降の子ノードにおいて、当該子ノードを辿る度に、当該子ノードの種類を判断する(すなわち、上記(1)〜(3)のどのグループに属するかを判断する)必要はない。
【0114】
下記図4A図4D及び下記図4E図4Hそれぞれにおいて、上記検索手法1において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例1及び例2を示す。同様に、下記図5A図5B及び下記図5C図5Eそれぞれにおいて、上記検索手法2において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例1及び例2を示す。
【0115】
図4A図4Dは、本発明の実施態様に従い、上記検索手法1において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例1を示した図である。
【0116】
再構築対象のツリー(401A)は部分ツリーであり、根ノード(図示せず)、中間ノード(411〜412)、及び葉ノード(421〜423)を有するとする。中間ノード(411〜412)はそれぞれ3つのキーまで、葉ノード(421〜423)はそれぞれ2つのキーまで持つことができるとする。
【0117】
中間ノード(411)は、16ビット幅以下のキーを持つノードであり、16ビット幅のキー(500)、及び8ビット幅のキー(0,50)を有している。中間ノード(412)は、8ビット幅のキーだけを持つノードであり、8ビット幅のキー(0,10,20)だけを有している。
【0118】
コンピュータ(101)は、キー値が11であるエントリ(キー値11)をツリー(401A)の葉ノード中に挿入しようとする。
【0119】
ステップ1Aにおいて、コンピュータ(101)は、ツリー(401A)中において、キー値11が挿入されるべき葉ノードを発見する操作を行う。コンピュータ(101)は、キー値11が中間ノード(411)中のキー値50よりも小さいことから、当該中間ノード(411)のうち、キー値50の左側のエントリが指す中間ノード(412)を発見する。引き続き、コンピュータ(101)は、ツリー(401B;401Aと同じ)中において、キー値11が上記発見した中間ノード(412)中のキー値20よりも小さいことから、当該中間ノード(412)のうち、キー値20の左側のエントリが指す葉ノード(422)を発見する。
【0120】
ステップ2Aにおいて、コンピュータ(101)は、ステップ1Aで発見した葉ノード(422)中にキー値11を挿入しようとする(図4Aに示すツリー(401B)を参照)。しかしながら、コンピュータ(101)は、葉ノード(422)は2つのキー値10及び12を既に有しており、且つ、葉ノードは2つまでのキーしか持つことができないことから、葉ノード(422)中にキー値11を挿入すると、当該葉ノード(422)のエントリがあふれてしまうと判断する。そこで、コンピュータ(101)は、上記葉ノード(422)を2つの葉ノード、すなわちキー値10を持つ葉ノードとキー値12を持つ葉ノード(425)(図4Aに示すツリー(401C)を参照)に分割する。そして、コンピュータ(101)は、分割後の上記キー値10を持つ葉ノードにキー値11を挿入して、キー値10及び11を持つ葉ノード(424)(図4Aに示すツリー(401C)を参照)を生成する。
【0121】
ステップ3Aにおいて、コンピュータ(101)は、ツリー(401C)において、上位にある中間ノード(412)からキー値12を持つ葉ノード(425)に対するエッジがないことから、中間ノード(412)から葉ノード(425)に対してリンクを張る。そこで、コンピュータ(101)は、上記中間ノード(412)中にキー値12を挿入しようとする。しかしながら、コンピュータ(101)は、当該中間ノード(412)は3つのキー値0,10及び12を既に有しており、且つ、中間ノードは3つまでのキーしか持つことができないことから、当該中間ノード(412)中にキー値12を挿入すると、当該中間ノード(412)のエントリがあふれてしまうと判断する。そこで、コンピュータ(101)は、上記中間ノード(412)を2つの中間ノード、すなわち中間ノード(413)と中間ノード(414)とに分割する(図4Bに示すツリー(401D)を参照)。上記中間ノード(413)は、分割前と同じ8ビット幅のキーを持ち、且つ、キー値0及び10を有する(図4Bに示すツリー(401D)を参照)。また、上記中間ノード(414)は、分割前と同じ8ビット幅のキーを持ち、且つ、キー値20を有する(図4Bに示すツリー(401D)を参照)。
【0122】
ステップ4Aにおいて、コンピュータ(101)は、ツリー(401D)において、分割した中間ノード(414)の左端にキー値12を挿入し、キー値12及び20を持つ中間ノード(415)(図4Bに示すツリー(401Eを参照)を生成する。なお、コンピュータ(101)は、分割した中間ノード(413)の右端にキー値12を挿入し、キー値0,10及び12を持つ中間ノード(図示せず)を生成してもよい。以下では、キー値12及び20を持つ中間ノード(415)を生成した場合の態様について、引き続き説明する。引き続き、コンピュータ(101)は、上位にある中間ノード(413,415)からキー値12を持つ葉ノード(425)に対するエッジがないことから、中間ノード(415)からキー値12を持つ葉ノード(425)にリンクを張る(図4Bに示すツリー(401E)を参照)。
【0123】
ステップ5Aにおいて、コンピュータ(101)は、ツリー(401E)において、上位にある中間ノード(411)から中間ノード(415)に対するエッジがないことから、中間ノード(411)から中間ノード(415)に対してリンクを張る。そこで、コンピュータ(101)は、上記中間ノード(411)中にキー値12を挿入しようとする。しかしながら、コンピュータ(101)は、当該中間ノード(411)は3つのキー値0,50及び500を既に有しており、且つ、中間ノードは3つまでのキーしか持つことができないことから、当該中間ノード(411)中にキー値12を挿入すると、当該中間ノード(411)のエントリがあふれてしまうと判断する。そこで、コンピュータ(101)は、上記中間ノード(411)を2つの中間ノード、すなわち中間ノード(416)と中間ノード(417)とに分割する(図4Cに示すツリー(401F)を参照)。上記中間ノード(416)は、分割前の16ビット幅以下のキーと異なる8ビット幅のキーだけを持ち、且つ、キー値0を有する(図4Cに示すツリー(401F)を参照)。当該中間ノード(416)が分割前の16ビット幅以下のキーと異なるグループである8ビット幅のキーだけを持つ理由は、当該中間ノード(416)のキー値0が8ビット幅だけで表現できるからである。従って、中間ノード(416)は16ビット幅以下のキーを持つノードから8ビット幅のキーだけを持つノードにグループが変更されている。また、上記中間ノード(417)は、分割前の16ビット幅以下のキーと同じ16ビット幅以下のキーを持ち、且つ、キー値50及び500を有する(図4Cに示すツリー(401F)を参照)。
【0124】
ステップ6Aにおいて、コンピュータ(101)は、ツリー(401F)において、分割した上記中間ノード(416)にキー値12を挿入して、中間ノード(418)(図4Cに示すツリー(418)を参照)を生成する。引き続き、コンピュータ(101)は、上位にある中間ノード(418)からキー値12を持つ中間ノード(415)に対するエッジがないことから、中間ノード(418)からキー値12を持つ中間ノード(415)にリンクを張る(図4Cに示すツリー(401G)を参照)。
【0125】
ステップ7Aにおいて、コンピュータ(101)は、ツリー(401G)において、中間ノード(418)及び中間ノード(417)の親ノード(419)を生成する(図4Dに示すツリー(401H)を参照)。親ノード(419)は、16ビット幅以下のキーを持つノードであり、且つ、中間ノード(418)の左端のキー値0及び中間ノード(417)の左端のキー値50を有する。
【0126】
図4Dに示すツリー(401H)は、図4Aに示す再構築対象のツリー(401A)から動的に再構築されたツリーである。
【0127】
図4A図4Dに示す上記例1に説明した通り、キー値が11であるエントリ(キー値11)をツリー(401A)のノード中に挿入することによって、中間ノードや葉ノードの分割が生じ、上記検索手法1において使用される新たなツリー(401H)が動的に再構築される。
【0128】
図4E図4Hは、本発明の実施態様に従い、上記検索手法1において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例2を示した図である。
【0129】
再構築対象のツリー(431A)は、図4Aに示すツリー(401A)と同じである。従って、再構築対象のツリー(431A)並びに中間ノード(451)及び中間ノード(452)についての説明は、図4Aに示す再構築対象のツリー(401A)並びに中間ノード(411)及び中間ノード(412)の説明を参照されたい。
【0130】
コンピュータ(101)は、キー値が11であるエントリ(キー値11)をツリー(431A)の葉ノード中に挿入しようとする。
【0131】
ステップ1B〜ステップ2Bそれぞれは、図4Aに示すステップ1A〜ステップ2Aそれぞれに対応する。従って、ステップ1B〜ステップ2Bについての説明は、図4に示すステップ1A〜ステップ2Aについての説明を参照されたい。
【0132】
ステップ3Bにおいて、コンピュータ(101)は、ツリー(431C)において、上位にある中間ノード(452)からキー値12を持つ葉ノード(465)に対するエッジがないことから、中間ノード(452)から葉ノード(465)に対してリンクを張る(下記図4Fに示すツリー(431D)中の点線を参照)。
【0133】
ステップ4Bにおいて、コンピュータ(101)は、上記中間ノード(452)中にキー値12を挿入しようとする。しかしながら、コンピュータ(101)は、当該中間ノード(452)は3つのキー値0,10及び20を既に有しており、且つ、中間ノードは3つまでのキーしか持つことができないことから、当該中間ノード(452)中にキー値12を挿入すると、当該中間ノード(452)のエントリがあふれてしまうと判断する。そこで、コンピュータ(101)は、上記中間ノード(452)を2つの中間ノード、すなわち(453)と中間ノード(455)とに分割する(図4Fに示すツリー(431E)を参照)。上記中間ノード(453)は、分割前と同じ8ビット幅のキーを持ち、且つ、キー値0及び10を有する(図4Fに示すツリー(431E)を参照)。また、上記中間ノード(455)は、分割前と同じ8ビット幅のキーを持ち、且つ、キー値12(挿入された)及び20を有する(図4Fに示すツリー(431E)を参照)。なお、コンピュータ(101)は、分割した中間ノード(453)の右端にキー値12を挿入し、キー値0,10及び12を持つ中間ノード(図示せず)を生成してもよい。以下では、キー値12及び20を持つ中間ノード(455)を生成した場合の態様について、引き続き説明する。
【0134】
ステップ5Bにおいて、コンピュータ(101)は、ツリー(431E)において、上位にある中間ノード(451)から中間ノード(455)に対するエッジがないことから、中間ノード(451)から中間ノード(455)に対してリンクを張る。(下記図4Gに示すツリー(431F)中に示す点線を参照)。
【0135】
ステップ6Bにおいて、コンピュータ(101)は、上記中間ノード(451)中にキー値12を挿入しようとする。しかしながら、コンピュータ(101)は、当該中間ノード(451)は3つのキー値0,50及び500を既に有しており、且つ、中間ノードは3つまでのキーしか持つことができないことから、当該中間ノード(451)中にキー値12を挿入すると、当該中間ノード(451)のエントリがあふれてしまうと判断する。そこで、コンピュータ(101)は、上記中間ノード(451)を2つの中間ノード、すなわち中間ノード(458)と中間ノード(457)とに分割する(下記図4Gに示すツリー(431G)を参照)。上記中間ノード(458)は、分割前の16ビット幅以下のキーと異なる8ビット幅のキーだけを持ち、且つ、キー値0及びキー値12(挿入された)を有する(図4Gに示すツリー(431G)を参照)。当該中間ノード(458)が分割前の16ビット幅以下のキーと異なるグループである8ビット幅のキーだけを持つ理由は、当該中間ノード(458)のキー値0が8ビット幅だけで表現できるからである。従って、中間ノード(458)は16ビット幅以下のキーを持つノードから8ビット幅のキーだけを持つノードにグループが変更されている。また、上記中間ノード(457)は、分割前の16ビット幅以下のキーと同じ16ビット幅以下のキーを持ち、且つ、キー値50及び500を有する(図4Gに示すツリー(431G)を参照)。
【0136】
ステップ7Bにおいて、コンピュータ(101)は、中間ノード(458)及び中間ノード(457)の親ノード(459)を生成する(図4Hのツリー431Hを参照)。親ノード(459)は、16ビット幅以下のキーを持つノードであり、且つ、中間ノード(458)の左端のキー値0及び中間ノード(457)の左端のキー値50を有する。
【0137】
図4Hに示すツリー(431H)は、図4Eに示す再構築対象のツリー(431A)から動的に再構築されたツリーである。
【0138】
図4E図4Hに示す上記例2に説明した通り、キー値が11であるエントリ(キー値11)をツリー(431A)のノード中に挿入することによって、中間ノードや葉ノードの分割が生じ、上記検索手法1において使用される新たなツリー(431H)が動的に再構築される。
【0139】
図5A図5Bは、本発明の実施態様に従い、上記検索手法2において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例1を示した図である。
【0140】
再構築対象のツリー(501A)は部分ツリーであり、当該部分ツリーの根ノード(図示せず,ツリー全体からすれば、中間ノードでもある)、中間ノード(511)、及び葉ノード(521〜523)を有するとする。中間ノード(511)は3つのキーまで、葉ノード(521〜523)はそれぞれ2つのキーまで持つことができるとする。
【0141】
中間ノード(511)は、8ビット幅のキー(0,10,20)だけを有している。
【0142】
コンピュータ(101)は、キー値が11であるエントリ(キー値11)をツリー(501A)の葉ノード中に挿入しようとする。
【0143】
ステップ1Cにおいて、コンピュータ(101)は、ツリー(501A)中において、キー値11が挿入されるべき葉ノードを発見する操作を行う。コンピュータ(101)は、キー値11が中間ノード(511)中のキー値20よりも小さいことから、当該中間ノード(511)のうち、キー値20の左側のエントリが指す葉ノード(522)を発見する。
【0144】
ステップ2Cにおいて、コンピュータ(101)は、ツリー(501B;501Aと同じ)中において、上記ステップ1Cで発見した葉ノード(522)中にキー値11を挿入しようとする(図5Aに示すツリー(501B)を参照)。しかしながら、コンピュータ(101)は、葉ノード(522)は2つのキー値10及び12を既に有しており、且つ、葉ノードは2つまでのキーしか持つことができないことから、葉ノード(522)中にキー値11を挿入すると、当該葉ノード(522)のエントリがあふれてしまうと判断する。そこで、コンピュータ(101)は、上記葉ノード(522)を2つの葉ノード、すなわちキー値10を持つ葉ノード(図示せず)とキー値12を持つ葉ノード(525)とに分割する(図5Aに示すツリー(501C)を参照)。そして、コンピュータ(101)は、分割後の上記キー値10を持つ葉ノード(図示せず)にキー値11を挿入して、キー値10及び11を持つ葉ノード(524)(図5Aに示すツリー(501C)を参照)を生成する。
【0145】
ステップ3Cにおいて、コンピュータ(101)は、上位にある中間ノード(511)からキー値12を持つ葉ノード(525)に対するエッジがないことから、中間ノード(511)から葉ノード(525)に対してリンクを張る。そこで、コンピュータ(101)は、上記中間ノード(511)中にキー値12を挿入しようとする。しかしながら、コンピュータ(101)は、当該中間ノード(511)は3つのキー値0,10及び20を既に有しており、且つ、中間ノードは3つまでのキーしか持つことができないことから、当該中間ノード(511)中にキー値12を挿入すると、当該中間ノード(511)のエントリがあふれてしまうと判断する。そこで、コンピュータ(101)は、上記中間ノード(511)を2つの中間ノード、すなわち中間ノード(512)と中間ノード(513)とに分割する(図5Bに示すツリー(501D)を参照)。上記中間ノード(512)は、分割前と同じ8ビット幅のキーだけを持ち、且つ、キー値0及び10を有する(図5Bに示すツリー(501D)を参照)。また、上記中間ノード(513)は、分割前と同じ8ビット幅のキーだけを持ち、且つ、キー値20を有する(図5Bに示すツリー(501D)を参照)。
【0146】
ステップ4Cにおいて、コンピュータ(101)は、分割した中間ノード(513)の左端にキー値12を挿入し、キー値12及び20を持つ中間ノード(514)(図5Bに示すツリー(501E)を参照)を生成する。なお、コンピュータ(101)は、分割した中間ノード(512)の右端にキー値12を挿入し、キー値0,10及び12を持つ中間ノードを生成してもよい。以下では、キー値12及び20を持つ中間ノード(514)を生成した場合の態様について、引き続き説明する。引き続き、コンピュータ(101)は、上位にある中間ノード(512,513)からキー値12を持つ葉ノード(525)に対するエッジがないことから、中間ノード(514)からキー値12を持つ葉ノード(525)にリンクを張る(図5Bに示すツリー(501E)を参照)。
【0147】
ステップ5Cにおいて、コンピュータ(101)は、中間ノード(512)及び中間ノード(514)の親ノード(515)を生成する(図5Bに示すツリー(501F)を参照)。親ノード(515)は、8ビット幅のキーだけを持つノードであり、且つ、中間ノード(512)の左端のキー値0及び中間ノード(514)の左端のキー値12を有する。
【0148】
図5Bに示すツリー(501F)は、図5Aに示す再構築対象のツリー(501A)から動的に再構築されたツリーである。
【0149】
図5A図5Bに示す上記例1に説明したとおり、キー値が11であるエントリ(キー値11)をツリー(501A)のノード中に挿入することによって、中間ノードや葉ノードの分割が生じ、上記検索手法2において使用される新たなツリー(501F)が動的に再構築される。
【0150】
図5C図5Eは、本発明の実施態様に従い、上記検索手法2において使用するために構築されたツリー構造において、ツリーのノードにエントリを挿入して、ツリーを動的に再構築する例1を示した図である。
【0151】
再構築対象のツリー(531A)は部分ツリーであり、当該部分ツリーの根ノード(541,ツリー全体からすれば、中間ノードでもある)、中間ノード(542)、及び葉ノード(551〜553)を有するとする。根ノード(541)及び中間ノード(542)は3つのキーまで、葉ノード(551〜553)はそれぞれ2つのキーまで持つことができるとする。
【0152】
根ノード(541)は、8ビット幅のキー(0,50,100)だけを有している。また、中間ノード(542)は、8ビット幅のキー(0,10,20)だけを有している。
【0153】
コンピュータ(101)は、キー値が11であるエントリ(キー値11)をツリー(531A)の葉ノード中に挿入しようとする。
【0154】
ステップ1Dにおいて、コンピュータ(101)は、ツリー(531A)中において、キー値11が挿入されるべき葉ノードを発見する操作を行う。コンピュータ(101)は、キー値11が根ノード(541)中のキー値50よりも小さいことから、当該根ノード(541)のうち、キー値50の左側のエントリが指す中間ノード(542)を発見する。引き続き、コンピュータ(101)は、ツリー(531B;531Aと同じ)中において、キー値11が上記発見した中間ノード(512)中のキー値20よりも小さいことから、当該中間ノード(5422)のうち、キー値20の左側のエントリが指す葉ノード(552)を発見する。
【0155】
ステップ2Dにおいて、コンピュータ(101)は、ツリー(531B;531Aと同じ)中において、上記ステップ1Dで発見した葉ノード(552)中にキー値11を挿入しようとする(図5Cに示すツリー(531B)を参照)。しかしながら、コンピュータ(101)は、葉ノード(552)は2つのキー値10及び12を既に有しており、且つ、葉ノードは2つまでのキーしか持つことができないことから、葉ノード(552)中にキー値11を挿入すると、当該葉ノード(552)のエントリがあふれてしまうと判断する。そこで、コンピュータ(101)は、上記葉ノード(552)を2つの葉ノード、すなわちキー値10を持つ葉ノード(図示せず)とキー値12を持つ葉ノード(555)とに分割する(図5Cに示すツリー(531C)を参照)。そして、コンピュータ(101)は、分割後の上記キー値10を持つ葉ノード(図示せず)にキー値11を挿入して、キー値10及び11を持つ葉ノード(554)(図5Cに示すツリー(531C)を参照)を生成する。
【0156】
ステップ3Dにおいて、コンピュータ(101)は、上位にある中間ノード(541)からキー値12を持つ葉ノード(555)に対するエッジがないことから、中間ノード(542)から葉ノード(555)に対してリンクを張る(下記図5Dに示すツリー(531D)中の点線を参照)。
【0157】
ステップ4Dにおいて、コンピュータ(101)は、上記中間ノード(542)中にキー値12を挿入しようとする。しかしながら、コンピュータ(101)は、当該中間ノード(542)は3つのキー値0,10及び20を既に有しており、且つ、中間ノードは3つまでのキーしか持つことができないことから、当該中間ノード(542)中にキー値12を挿入すると、当該中間ノード(542)のエントリがあふれてしまうと判断する。そこで、コンピュータ(101)は、上記中間ノード(542)を2つの中間ノード、すなわち(543)と中間ノード(544)とに分割する(図5Dに示すツリー(531E)を参照)。上記中間ノード(543)は、分割前と同じ8ビット幅のキーを持ち、且つ、キー値0及び10を有する(図5Dに示すツリー(531E)を参照)。また、上記中間ノード(544)は、分割前と同じ8ビット幅のキーを持ち、且つ、キー値12(挿入された)及び20を有する(図5Dに示すツリー(531E)を参照)。なお、コンピュータ(101)は、分割した中間ノード(543)の右端にキー値12を挿入し、キー値0,10及び12を持つ中間ノード(図示せず)を生成してもよい。以下では、キー値12及び20を持つ中間ノード(544)を生成した場合の態様について、引き続き説明する。
【0158】
ステップ5Dにおいて、コンピュータ(101)は、ツリー(531E)において、上位にある根ノード(541)から中間ノード(544)に対するエッジがないことから、根ノード(541)から中間ノード(544)に対してリンクを張る。(図5Dに示すツリー(531F)中に示す点線を参照)。
【0159】
ステップ6Dにおいて、コンピュータ(101)は、上記根ノード(541)中にキー値12を挿入しようとする。しかしながら、コンピュータ(101)は、当該根ノード(541)は3つのキー値0,50及び100を既に有しており、且つ、根ノードは3つまでのキーしか持つことができないことから、当該根ノード(541)中にキー値12を挿入すると、当該根ノード(541)のエントリがあふれてしまうと判断する。そこで、コンピュータ(101)は、上記根ノード(541)を2つの中間ノード、すなわち中間ノード(545)と中間ノード(546)とに分割する(下記図5Eに示すツリー(531G)を参照)。上記中間ノード(545)は、分割前と同じく8ビット幅のキーだけを持ち、且つ、キー値0を有する(図5Eに示すツリー(531G)を参照)。また、上記中間ノード(546)は、分割前と同じく8ビット幅のキーだけを持ち、且つ、キー値12(挿入された)、50及び100を有する(図5Eに示すツリー(531G)を参照)。
【0160】
ステップ7Dにおいて、コンピュータ(101)は、中間ノード(545)及び中間ノード(546)の親ノード(547)を生成する(図5Eのツリー531Hを参照)。親ノード(547)は、中間ノード(545)及び中間ノード(546)と同じく8ビット幅のキーだけを持つノードであり、且つ、中間ノード(545)の左端のキー値0及び中間ノード(546)の左端のキー値12を有する。
【0161】
図5Eに示すツリー(531H)は、図5Cに示す再構築対象のツリー(531A)から動的に再構築されたツリーである。
【0162】
図5C図5Eに示す上記例2に説明したとおり、キー値が11であるエントリ(キー値11)をツリー(531A)のノード中に挿入することによって、中間ノードや葉ノードの分割が生じ、上記検索手法2において使用される新たなツリー(531H)が動的に再構築される。
【0163】
図6は、本発明の実施態様に従い、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う処理全体のフローチャートを示す。
【0164】
ステップ601において、コンピュータ(101)は、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行う処理を開始する。
【0165】
ステップ602において、コンピュータ(101)は、本発明の実施態様に従う上記検索手法1又は上記検索手法2において使用する為のツリー構造を構築する。コンピュータ(101)は、当該ツリー構造の構築において、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するグループに分類して、上記ツリーを構築する。上記グループは例えば、8ビット幅のキーだけを持つノード、16ビット幅のキーだけを持つ若しくはそれ以下のキーを持つノード、32ビット幅のキーだけを持つ若しくはそれ以下のキーを持つノード、64ビット幅のキーだけを持つ若しくはそれ以下のキーを持つノード、128ビット幅のキーだけを持つ若しくはそれ以下のキーを持つノード、又は、256ビット幅のキーだけを持つ若しくはそれ以下のキーを持つノードでありうる。
【0166】
コンピュータ(101)は、本発明の実施態様に従う上記検索手法1において使用する為のツリー構造を構築する場合には、ツリーの根ノード以外のノード(例えば、中間ノード)が、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するように、ツリーを構築しうる。
【0167】
コンピュータ(101)は、本発明の実施態様に従う上記検索手法1において使用する為のツリー構造を構築する場合には、ツリーの根ノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有する少なくとも2つのグループを下位にあるノードとして有するように、上記ツリーを構築しうる。
【0168】
また、コンピュータ(101)は、本発明の実施態様に従う上記検索手法1において使用する為のツリー構造を構築する場合に、ノード(根ノード及び中間ノード)それぞれに上記グループを識別する識別子(例えば、Node ID=08(8ビット幅のキーだけを持つノード),16(16ビット幅のキーだけを持つノード),32(32ビット幅のキーだけを持つノード)である)を付与しうる。また、コンピュータ(101)は、本発明の実施態様に従う上記検索手法1において使用する為のツリー構造を構築する場合に、ノードが持つキー値の範囲に応じて、当該ノード(根ノード及び中間ノード)それぞれに上記グループを識別する識別子を付与しうる。例えば、ノードが持つキー値の範囲が0〜255であればNode ID=08(8ビット幅のキーだけを持つノード)、256〜65535であればNode ID=16(16ビット幅のキーだけを持つノード)、65536〜4294967295であればNode ID=32(32ビット幅のキーだけを持つノード)という3種類のグループとしうる。当該識別子は、コンピュータ(101)が、上記構築されたツリーのノードを辿って、上記識別子により各ノードが属するグループを判定し、当該判定されたグループに対応する命令(例えば、SIMD命令)を使用してデータを検索する為に使用されうる。コンピュータ(101)は例えば、識別子「Node08」の場合は8ビット幅データのSIMD比較命令を用い、識別子「Node16」の場合は16ビット幅データのSIMD比較命令を用い、識別子「Node32」の場合は32ビット幅データのSIMD比較命令を用いる。同じ数のキーを比較する場合、例えば16ビット幅データのSIMD比較命令を用いる場合は、16ビット幅データのSIMD比較命令を用いる場合の半分程度の実行命令数で済む。
【0169】
コンピュータ(101)は、本発明の実施態様に従う上記検索手法2において使用する為のツリー構造を構築する場合には、各グループを、根ノードを親ノードとするサブツリーとして構築する(図3A図3Bそれぞれに示すツリー(301,302)を参照)か、又は、グループそれぞれを、部分ツリーとして構築する(図3Cに示すツリー(303)を参照)。
【0170】
また、コンピュータ(101)は、本発明の実施態様に従う上記検索手法2において使用するために構築されたツリー構造を構築し、各グループを、根ノードを親ノードとするサブツリーとして構築する場合には、各グループのサブツリーのうち最上位にある親ノードにおいて、用意した全ての種類のノードにどれにでも到達できるようにし、当該最上位にある親ノード以下の子ノードでは特定の種類のノードだけに到達できることを保証する。当該保証により、ノードの種類を調べる操作が不要になり、ノードを辿る操作が高速化される。
【0171】
同様に、コンピュータ(101)は、本発明の実施態様に従う上記検索手法2において使用するために構築されたツリー構造を構築し、グループそれぞれを、部分ツリーとして構築する場合には、各グループの(中間)ノードのうち最上位にある親ノードにおいて、用意した全ての種類のノードにどれにでも到達できるようにし、当該最上位にある親ノード以下の子ノードでは特定の種類のノードだけに到達できることを保証する。当該保証により、ノードの種類を調べる操作が不要になり、ノードを辿る操作が高速化される。
【0172】
ステップ603において、コンピュータ(101)は、上記検索手法1又は上記検索手法2において使用するために構築されたツリーを再構築する場合に、ツリーのノードにキーを挿入するかを判断する。コンピュータ(101)は、ツリーのノードにキーを挿入することに応じて、処理をステップ604に進める。一方、コンピュータ(101)は、ツリーのノードにキーを挿入しないことに応じて、処理をステップ605に進める。
【0173】
コンピュータ(101)は、ツリーのノードにキーを挿入する場合に、当該ノードが持つキーが一定に範囲に収まるようにして、当該ノードを上記したグループのうちのある特定のグループに属するものとする。上記一定の範囲とは、同一のSSIMD比較命令で処理できることを意味する。例えば、キーの値が32ビット幅で、8/16/32ビット幅データを比較可能なSIMD命令において、符号無し整数の比較の場合には、0〜255/256〜65,535/65,536〜4,294,967,295、である。また、符号有り整数の比較の場合には、範囲の数は16ビット幅の符号有り整数の比較の場合には、-32,768〜-129/-128〜127/128〜32,767である。
【0174】
ステップ604において、コンピュータ(101)は、上記検索手法1又は上記検索手法2において使用するために構築されたツリー構造において、ツリーのノードにキーを挿入する。ツリーのノードにキーを挿入することによって、当該ツリーが動的に再構築される。ツリーのノードにキーを挿入する処理の詳細については、下記図7A(上記検索手法1)及び下記図7B(上記検索手法2)において説明する。
【0175】
ステップ605において、コンピュータ(101)は、ステップ602で構築されたツリー又はステップ604で再構築されたツリーを用いて、データ検索を行うかを判断する。コンピュータ(101)は、当該データ検索を行うことに応じて、処理をステップ606に進める。一方、コンピュータ(101)は、当該データ検索を行わないことに応じて、処理をステップ607に進める。
【0176】
ステップ606において、コンピュータ(101)は、ステップ602で構築されたツリー又はステップ604で再構築されたツリーにおいて、検索キーの値を有効数とする最小ビット幅のグループに対応する命令(例えば、SIMD命令)を使用して、検索キーの値を有効数とする最小ビット幅のグループからデータを検索する。当該データの検索において、キー値Kと葉ノードが持つキーとを比較して、キー値Kを持つ可能性がある葉ノードが発見される。
【0177】
ステップ607において、コンピュータ(101)は、ツリーのノードにキーを挿入することによってツリーの再構築又はデータの検索を繰り返すかを判断する。コンピュータ(101)は、ツリーを再構築すること又はデータを検索することに応じて、処理をステップ603に戻す。一方、コンピュータ(101)は、ツリーを再構築しないこと且つデータの検索をしないことに応じて、処理を終了ステップ608に進める。
【0178】
ステップ608において、コンピュータ(101)は、ステップ601で開始した上記処理を終了する。
【0179】
図6に示す上記フローチャートにおいて、ステップ602に示すツリーの構築後、キーの挿入(以下、「挿入」と示す)及びデータの検索(以下、「検索」と示す)を例えば、下記の順に実行しうる:(1)挿入→検索、(2)挿入→挿入→検索、(3)検索→挿入、及び(4)検索→検索。
【0180】
図7Aは、本発明の実施態様に従い、上記検索手法1の為のツリー構造を使用して、キーの値を挿入すべき葉ノード又はキーの値を持つ可能性がある葉ノードを発見する処理のフローチャートを示す。
【0181】
図7Aに示す処理において使用するために構築されたツリー構造はB+−ツリーであるとする。また、中間ノードのキー幅は、8ビット幅、16ビット幅、又は32ビット幅の3種類であるとする。
【0182】
ステップ701において、コンピュータ(101)は、上記検索手法1の為のツリー構造を使用して、キーの値を挿入すべき葉ノード又はキーの値を持つ可能性がある葉ノードを発見する(葉ノードを特定することでもある)処理を開始する。
【0183】
ステップ702において、コンピュータ(101)は、入力として、検索対象であるノードが持つキー値Kを受け取る。
【0184】
ステップ703において、コンピュータ(101)は、上記検索手法1の為のツリー構造をメモリ(103)から読み取り、当該ツリーの根ノードを取り出す。
【0185】
ステップ704において、コンピュータ(101)は、ステップ703で取り出した根ノード又は、下記ステップ705、706若しくは707で決定された子ノードが持つキーのビット幅を判定する。コンピュータは、上記キー値Kの値を有効数とする最小ビット幅のグループに属するノードを特定する。具体的には、以下の通りである;すなわち、コンピュータ(101)は、当該ノードが持つキーのビット幅が8ビット幅であることに応じて、処理をステップ705に進める:コンピュータ(101)は、当該ノードが持つキーのビット幅が16ビット幅であることに応じて、処理をステップ706に進める:コンピュータ(101)は、当該ノードが持つキーのビット幅が32ビット幅であることに応じて、処理をステップ707に進める。
【0186】
ステップ705において、コンピュータ(101)は、当該ノードが持つキーのビット幅が8ビット幅であることに応じて、ステップ703で取り出した根ノード又は下記ステップ705、706若しくは707で決定された子ノードについて、8ビット・データ幅を用いた比較を行うためのSIMD命令を用いて、上記キー値Kと上記根又は子ノード(中間ノード又は葉ノードでありうる)のキーとを比較して、次に辿るべき子ノードを決定する。
【0187】
また、ステップ705において、コンピュータ(101)は、キー値Kを有効数とする最小ビット幅のグループに属するノードを発見しうる。当該キー値Kを有効数とする最小ビット幅のグループは、上記キー値Kを表現可能な最小のビット幅を有するグループである。
【0188】
ステップ706において、コンピュータ(101)は、当該ノードが持つキーのビット幅が16ビット幅であることに応じて、ステップ703で取り出した根ノード又は、下記ステップ705、706若しくは707で決定された子ノードについて、16ビット・データ幅を用いた比較を行うためのSIMD命令を用いて、上記キー値Kと上記根又は子ノード(中間ノード又は葉ノードでありうる)のキーとを比較して、次に辿るべき子ノードを決定する。
【0189】
また、ステップ706において、コンピュータ(101)は、キー値Kを有効数とする最小ビット幅のグループに属するノードを発見しうる。当該キー値Kを有効数とする最小ビット幅のグループは、上記キー値Kを表現可能な最小のビット幅を有するグループである。
【0190】
ステップ707において、コンピュータ(101)は、当該ノードが持つキーのビット幅が32ビット幅であることに応じて、ステップ703で取り出した根ノード又は、下記ステップ705、706若しくは707で決定された子ノードについて、32ビット・データ幅を用いた比較を行うためのSIMD命令を用いて、上記キー値Kと上記根又は子ノード(中間ノード又は葉ノードでありうる)のキーとを比較して、次に辿るべき子ノードを決定する。
【0191】
また、ステップ707において、コンピュータ(101)は、キー値Kを有効数とする最小ビット幅のグループに属するノードを発見しうる。当該キー値Kを有効数とする最小ビット幅のグループは、上記キー値Kを表現可能な最小のビット幅を有するグループである。
【0192】
ステップ708において、コンピュータ(101)は、ステップ705、706又は707において決定された子ノードが葉ノードであるかを判定する。コンピュータ(101)は、当該子ノードが葉ノードであることに応じて、処理をステップ709に進める。一方、コンピュータ(101)は、当該子ノードが葉ノードでないことに応じて、次に辿る子ノードを決定する為に、処理をステップ704に戻す。
【0193】
ステップ709において、コンピュータ(101)は、出力として、ステップ708で決定された子ノード(葉ノードでもある)を、キー値Kを挿入すべき葉ノード又はキー値Kを持つ可能性がある葉ノードとする。
【0194】
ステップ710において、コンピュータ(101)は、ステップ701で開始した上記処理を終了する。
【0195】
図7Bは、本発明の実施態様に従い、上記検索手法2の為のツリー構造を使用して、キーの値を挿入すべき葉ノード又はキーの値を持つ可能性がある葉ノードを発見する処理のフローチャートを示す。
【0196】
図7Bに示す処理において使用するために構築されたツリー構造はB+−ツリーであるとする。また、(中間)ノードのキー幅は、8ビット幅、16ビット幅、又は32ビット幅の3種類であるとする。
【0197】
ステップ711において、コンピュータ(101)は、上記検索手法2の為のツリー構造を使用して、キーの値を挿入すべき葉ノード又はキーの値を持つ可能性がある葉ノードを発見する処理を開始する。
【0198】
ステップ712において、コンピュータ(101)は、入力として、キー値Kを受け取る。
【0199】
ステップ713において、コンピュータ(101)は、キー値Kが必要とするビット幅を調べる。コンピュータは、上記キー値Kの値を有効数とする最小ビット幅のグループに属するノードを特定する。具体的には、以下の通りである;すなわち、コンピュータ(101)は、当該ノードが持つキーのビット幅が8ビット幅であることに応じて、Kが必要とするビット幅が8ビット幅であると判断する:コンピュータ(101)は、当該ノードが持つキーのビット幅が16ビット幅であることに応じて、Kが必要とするビット幅が16ビット幅であると判断する:コンピュータ(101)は、当該ノードが持つキーのビット幅が32ビット幅であることに応じて、Kが必要とするビット幅が32ビット幅であると判断する。
【0200】
ステップ714において、コンピュータ(101)は、キー値Kが必要とするビット幅が8ビット幅であることに応じて、処理をステップ715に進める。コンピュータ(101)は、キー値Kが必要とするビット幅が16ビット幅であることに応じて、処理をステップ718に進める。コンピュータ(101)は、キー値Kが必要とするビット幅が32ビット幅であることに応じて、処理をステップ721に進める。
【0201】
ステップ715において、コンピュータ(101)は、キー値Kが必要とするビット幅が8ビット幅であることに応じて、8ビット幅のキーを持つ(中間)ノードを構成する部分ツリーの根ノード(又は、根ノードがない場合には最上位ノード)を取り出す。
【0202】
ステップ716において、コンピュータ(101)は、ステップ715において取り出した根ノード又は当該実行中のステップ716のループ直前に実行されたステップ716で決定された子ノードについて、8ビット・データ幅を用いた比較を行うためのSIMD命令を用いて、上記キー値Kと上記根又は子ノード(中間ノード又は葉ノードでありうる)のキーとを比較して、次に辿るべき子ノードを決定する。
【0203】
また、ステップ716において、コンピュータ(101)は、キー値Kを有効数とする最小ビット幅のグループに属するノードを発見しうる。当該キー値Kを有効数とする最小ビット幅のグループは、上記キー値Kを表現可能な最小のビット幅を有するグループである。
【0204】
ステップ717において、コンピュータ(101)は、ステップ716において決定された根又は子ノードが葉ノードであるかを判定する。コンピュータ(101)は、当該根又は子ノードが葉ノードであることに応じて、処理をステップ724に進める。一方、コンピュータ(101)は、当該根又は子ノードが葉ノードでないことに応じて、次に辿る子ノードを決定する為に、処理をステップ716に戻す。
【0205】
ステップ718において、コンピュータ(101)は、キー値Kが必要とするビット幅が16ビット幅であることに応じて、16ビット幅のキーを持つ(中間)ノードを構成する部分ツリーの根ノード(又は、根ノードがない場合には最上位ノード)を取り出す。
【0206】
ステップ719において、コンピュータ(101)は、ステップ718において取り出した根ノード又は当該実行中のステップ719のループ直前に実行されたステップ719で決定された子ノードについて、16ビット・データ幅を用いた比較を行うためのSIMD命令を用いて、上記キー値Kと上記根又は子ノード(中間ノード又は葉ノードでありうる)のキーとを比較して、次に辿るべき子ノードを決定する。
【0207】
また、ステップ719において、コンピュータ(101)は、キー値Kを有効数とする最小ビット幅のグループに属するノードを発見しうる。当該キー値Kを有効数とする最小ビット幅のグループは、上記キー値Kを表現可能な最小のビット幅を有するグループである。
【0208】
ステップ720において、コンピュータ(101)は、ステップ719において決定された根又は子ノードが葉ノードであるかを判定する。コンピュータ(101)は、当該根又は子ノードが葉ノードであることに応じて、処理をステップ724に進める。一方、コンピュータ(101)は、当該根又は子ノードが葉ノードでないことに応じて、次に辿る子ノードを決定する為に、処理をステップ719に戻す。
【0209】
ステップ721において、コンピュータ(101)は、キー値Kが必要とするビット幅が32ビット幅であることに応じて、32ビット幅のキーを持つ(中間)ノードを構成する部分ツリーの根ノード(又は、根ノードがない場合には最上位ノード)を取り出す。
【0210】
ステップ722において、コンピュータ(101)は、ステップ721において取り出した根ノード又は当該実行中のステップ722のループ直前に実行されたステップ722で決定された子ノードについて、32ビット・データ幅を用いた比較を行うためのSIMD命令を用いて、上記キー値Kと上記根又は子ノード(中間ノード又は葉ノードでありうる)のキーとを比較して、次に辿るべき子ノードを決定する。
【0211】
また、ステップ722において、コンピュータ(101)は、キー値Kを有効数とする最小ビット幅のグループに属するノードを発見しうる。当該キー値Kを有効数とする最小ビット幅のグループは、上記キー値Kを表現可能な最小のビット幅を有するグループである。
【0212】
ステップ723において、コンピュータ(101)は、ステップ722において決定された根又は子ノードが葉ノードであるかを判定する。コンピュータ(101)は、当該根又は子ノードが葉ノードであることに応じて、処理をステップ724に進める。一方、コンピュータ(101)は、当該根又は子ノードが葉ノードでないことに応じて、次に辿る子ノードを決定する為に、処理をステップ722に戻す。
【0213】
ステップ724において、コンピュータ(101)は、出力として、ステップ717、720又は723で決定された子ノード(葉ノードでもある)を、キー値Kを挿入すべき葉ノード又はキー値Kを持つ可能性がある葉ノードとする。
【0214】
ステップ725において、コンピュータ(101)は、ステップ711で開始した上記処理を終了する。
【0215】
図8Aは、本発明の実施態様に従い、上記検索手法1において使用するために構築されたツリー構造において、当該ツリーのノードにエントリを挿入して、ツリーを動的に再構築する処理のフローチャートを示す。
【0216】
図8Aに示す処理において使用するために構築されたツリー構造はB+−ツリーであるとする。また、中間ノードのキー幅は、8ビット幅、16ビット幅、又は32ビット幅の3種類であるとする。
【0217】
ステップ801において、コンピュータ(101)は、上記検索手法1において使用するために構築されたツリー構造において、当該ツリーのノードにエントリを挿入して、ツリーを動的に再構築する処理を開始する(図4Eに示すステップ1Bの処理に対応する)。
【0218】
ステップ802において、コンピュータ(101)は、例えば図7Aに示すステップ709で出力される葉ノード(すなわち、キー値Kを挿入する葉ノード)にエントリを挿入しようとする(図4Eに示すステップ1Bの処理に対応する)。
【0219】
ステップ803において、コンピュータ(101)は、上記葉ノードにエントリを挿入しようとすることで、当該葉ノードのエントリ数がオーバーフローするか(あふれるか)を判断する(図4Eに示すステップ2Bの処理に対応する)。コンピュータ(101)は、当該葉ノードのエントリ数がオーバーフローすることに応じて、当該葉ノードの分割処理をする為に、処理をステップ804に進める。一方、コンピュータ(101)は、当該葉ノードのエントリ数がオーバーフローしないことに応じて、上記葉ノードにエントリを挿入し、処理を終了ステップ813に進める。
【0220】
ステップ804において、コンピュータ(101)は、上記葉ノードを2つの葉ノードに分割する(図4Eに示すステップ2Bの処理に対応する)。
【0221】
ステップ805において、コンピュータ(101)は、上記分割して生じた2つの葉ノードのうちの一方にエントリを挿入する(図4Eに示すステップ2Bの処理に対応する)。
【0222】
ステップ806において、コンピュータ(101)は、上記エントリを挿入した葉ノードについて、当該葉ノードの親ノードである中間ノードにリンクを張る(図4Eに示すステップ3Bの処理に対応する)。
【0223】
ステップ807において、コンピュータ(101)は、上記中間ノードにリンクを張ることで、当該中間ノードのエントリ数がオーバーフローするかを判断する(図4Eに示すステップ4B及びステップ6Bの処理に対応する)。コンピュータ(101)は、当該中間ノードのエントリ数がオーバーフローすることに応じて、当該中間ノードの分割処理をする為に、処理をステップ808に進める。一方、コンピュータ(101)は、当該中間ノードのエントリ数がオーバーフローしないことに応じて、上記エントリを挿入した葉ノードの親ノードである中間ノードにリンクを張り、処理を終了ステップ813に進める。
【0224】
ステップ808において、コンピュータ(101)は、上記中間ノードを2つの中間ノードに分割して、分割前の中間ノードと同じビット幅のキーを持つ中間ノード、又は、分割結果でより小さいビット幅のキーを持つ中間ノードが利用可能である場合には、当該利用可能なグループに属する中間ノードを作成する(図4Fに示すステップ4B及びステップ6Bの処理に対応する)。
【0225】
ステップ809において、コンピュータ(101)は、オーバーフローしたノードに親ノードがあるかを判断する(図4Fに示すステップ4B及びステップ6Bの処理に対応する)。コンピュータ(101)は、オーバーフローしたノードに親ノードがあることに応じて、処理をステップ810に進める。一方、コンピュータ(101)は、オーバーフローしたノードに親ノードがないことに応じて、処理をステップ811に進める。
【0226】
ステップ810において、コンピュータ(101)は、親ノードの中間ノードに作成されたノードに関するリンクを張る(図4Fに示すステップ5Bの処理に対応する)。コンピュータ(101)は、処理をステップ807に進めて、上記中間ノードにリンクを張ろうとすることで、当該中間ノードのエントリ数がオーバーフローするかを判断する。以降、コンピュータ(101)は、ステップ808以降の処理を繰り返す。
【0227】
ステップ811において、コンピュータ(101)は、リンクを挿入する際に使用するキーのビット幅の最大のものが格納可能である、最小幅のキーを持つ親ノードを作成する(図4Gに示すステップ7Bの処理(親ノード(459)を作成すること)に対応する)。
【0228】
ステップ812において、コンピュータ(101)は、ステップ811で作成した親ノードとステップ808で作成した中間ノードとの間にリンクを張る(図4Gに示すステップ7Bの処理(親ノード(459)と中間ノード(457)との間にリンクを張ること)に対応する)。
【0229】
ステップ813において、コンピュータ(101)は、ステップ801で開始した上記処理を終了する。
【0230】
図8Bは、本発明の実施態様に従い、上記検索手法2において使用するために構築されたツリー構造において、当該ツリーのノードにエントリを挿入して、ツリーを動的に再構築する処理のフローチャートを示す。
【0231】
図8Bに示す処理において使用するために構築されたツリー構造はB+−ツリーであるとする。また、中間ノードのキー幅は、8ビット幅、16ビット幅、又は32ビット幅の3種類であるとする。
【0232】
ステップ821において、コンピュータ(101)は、上記検索手法2において使用するために構築されたツリー構造において、当該ツリーのノードにエントリを挿入して、ツリーを動的に再構築する処理を開始する(図5Cに示すステップ1Dの処理に対応する)。
【0233】
ステップ822において、コンピュータ(101)は、例えば図7Bに示すステップ724で出力される葉ノード(すなわち、キー値Kを挿入する葉ノード)にエントリを挿入しようとする(図5Cに示すステップ1Dの処理に対応する)。
【0234】
ステップ823において、コンピュータ(101)は、上記葉ノードにエントリを挿入しようとすることで、当該葉ノードのエントリ数がオーバーフローするか(あふれるか)を判断する(図5Cに示すステップ2Dの処理に対応する)。コンピュータ(101)は、当該葉ノードのエントリ数がオーバーフローすることに応じて、当該葉ノードの分割処理をする為に、処理をステップ824に進める。一方、コンピュータ(101)は、当該葉ノードのエントリ数がオーバーフローしないことに応じて、上記葉ノードにエントリを挿入し、処理を終了ステップ833に進める。
【0235】
ステップ824において、コンピュータ(101)は、上記葉ノードを2つの葉ノードに分割する(図5Cに示すステップ2Dの処理に対応する)。
【0236】
ステップ825において、コンピュータ(101)は、上記分割して生じた2つの葉ノードのうちの一方にエントリを挿入する(図5Cに示すステップ2Dの処理に対応する)。
【0237】
ステップ826において、コンピュータ(101)は、上記エントリを挿入した葉ノードについて、当該葉ノードの親ノードである中間ノードにリンクを張る(図5Dに示すステップ3Dの処理に対応する)。
【0238】
ステップ827において、コンピュータ(101)は、上記中間ノードにリンクを張ることで、当該中間ノードのエントリ数がオーバーフローするかを判断する(図5Dに示すステップ4D及びステップ6Dの処理に対応する)。コンピュータ(101)は、当該中間ノードのエントリ数がオーバーフローすることに応じて、当該中間ノードの分割処理をする為に、処理をステップ828に進める。一方、コンピュータ(101)は、当該中間ノードのエントリ数がオーバーフローしないことに応じて、上記エントリを挿入した葉ノードの親ノードである中間ノードにリンクを張り、処理を終了ステップ833に進める。
【0239】
ステップ828において、コンピュータ(101)は、上記中間ノードを2つの中間ノードに分割して、分割前の中間ノードと同じビット幅のキーを持つ中間ノードを作成する(図5Dに示すステップ4D及びステップ6Dの処理に対応する)。
【0240】
ステップ829において、コンピュータ(101)は、オーバーフローしたノードに親ノードがあるかを判断する(図5Dに示すステップ4D及びステップ6Dの処理に対応する)。コンピュータ(101)は、オーバーフローしたノードに親ノードがあることに応じて、処理をステップ830に進める。一方、コンピュータ(101)は、オーバーフローしたノードに親ノードがないことに応じて、処理をステップ831に進める。
【0241】
ステップ830において、コンピュータ(101)は、親ノードの中間ノードに作成されたノードに関するリンクを張る(図5Dに示すステップ5Dの処理に対応する)。コンピュータ(101)は、処理をステップ827に進めて、上記中間ノードにリンクを張ろうとすることで、当該中間ノードのエントリ数がオーバーフローするかを判断する。以降、コンピュータ(101)は、ステップ828以降の処理を繰り返す。
【0242】
ステップ831において、コンピュータ(101)は、現在着目しているノードと同じビット幅のキーを持つ親ノードを作成する(図5Dに示すステップ6Dの処理(親ノード(547)を作成すること)に対応する)。
【0243】
ステップ832において、コンピュータ(101)はステップ831で作成した、親ノードとステップ820で作成した中間ノードとの間にリンクを張る(図5Eに示すステップ7Dの処理(親ノード(547)と中間ノード(546)との間にリンクを張ること)に対応する)。
【0244】
ステップ833において、コンピュータ(101)は、ステップ821で開始した上記処理を終了する。
【0245】
図9は、図1に従うハードウェア構成を好ましくは備えており、本発明の実施態様に従い、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うためのコンピュータの機能ブロック図の一例を示した図である。
【0246】
コンピュータ(901)は、本発明の実施態様に従い、予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うためのコンピュータであり、例えば図1に示すコンピュータ(101)である。
【0247】
コンピュータ(901)は、ツリー構築手段(911)及びデータ検索手段(912)、並びに、メモリ(913)を備えている。
【0248】
ツリー構築手段(911)は、ツリーのノードを、上記複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するグループに分類して、上記ツリーを構築する。
【0249】
また、ツリー構築手段(911)は、挿入されるキーの値を有効数とする最小ビット幅のグループに属するノードに上記キーを挿入する。
【0250】
また、ツリー構築手段(911)は、上記キーの値を有効数とする最小ビット幅のグループに属するノードを発見する。ここで、上記キーの値を有効数とする最小ビット幅の上記グループが、上記挿入されるキーの値を表現可能な最小のビット幅を有するグループである。
【0251】
また、ツリー構築手段(911)は、上記発見したノードが、上記挿入されるキーの挿入によってあふれることに応じて、上記発見したノード又は当該発見したノードの上位にあるノードを分割する。
【0252】
また、ツリー構築手段(911)は、上記検索手法1に従うツリー(図2を参照)を構築する為に、任意的に、上記ノードそれぞれに上記グループを識別する識別子を付与する。
【0253】
また、ツリー構築手段(911)は、上記検索手法1に従うツリー(図2を参照)を構築する為に、上記ツリーの根ノード以外のノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有するように、上記ツリーを構築する。
【0254】
また、ツリー構築手段(911)は、上記検索手法1に従うツリー(図2を参照)を構築する為に、上記ツリーの根ノードが、複数のビット幅のうち、キーの値を表現可能な最小のビット幅を有する少なくとも2つのグループを下位にあるノードとして有するように、上記ツリーを構築する。
【0255】
また、ツリー構築手段(911)は、上記検索手法2に従うツリー(図3A及び図3Bを参照)を構築する為に、各グループを、根ノードを親ノードとするサブツリーとして構築する。
【0256】
また、ツリー構築手段(911)は、上記検索手法2に従うツリー(図3Cを参照)を構築する為に、グループそれぞれを、部分ツリーとして構築する。
【0257】
ツリー構築手段(911)は、図6に示すステップ602〜604、図7Aに示す全ステップ(キーの値Kを挿入すべき葉ノードの発見処理、及び、キーの値Kを持つ可能性がある葉ノードの発見処理)、図7Bに示す全ステップ(キーの値Kを挿入すべき葉ノードの発見処理、及び、キーの値Kを持つ可能性がある葉ノードの発見処理)、並びに、図8Aに示す全ステップ、及び、図8Bに示す全ステップを実行しうる。
【0258】
また、データ検索手段(912)は、検索キーの値を有効数とする最小ビット幅のグループに対応する上記命令を使用して、上記検索キーの値を有効数とする最小ビット幅の上記グループからデータを検索する。
【0259】
また、データ検索手段(912)は、上記検索手法1の為に構築されたツリーであって、当該ツリーの各ノードそれぞれに上記グループを識別する識別子が付与されている当該ツリー(図2を参照)において、当該構築されたツリーのノードを辿って、上記識別子により各ノードが属するグループを判定し、当該判定されたグループに対応する命令を使用して、上記データを検索する。
【0260】
データ検索手段(912)は、上記検索手法2の為に構築されたツリー(図3A及び図3Bを参照)において、上記サブツリーに対応する命令(例えば、SIMD命令)を使用して、上記データを検索する。
【0261】
また、データ検索手段(912)は、上記検索手法2の為に構築されたツリー(図3Cを参照)において、上記部分ツリーに対応する命令(例えば、SIMD命令)を使用して、上記データを検索する。
【0262】
データ検索手段(912)は、図6に示すステップ605を実行しうる。
【0263】
コンピュータ(901)は、記憶媒体(921)から、ツリー構築対象のプログラムをメモリ(913)に読み出して、当該メモリ(913)に読み出したプログラムをツリー構築手段(911)に渡す。
【0264】
また、コンピュータ(901)は、データ検索手段(912)がデータを検索することを可能にする為に、ツリー構築手段(911)が構築したツリーをメモリ(913)中に記憶する。
【0265】
(実施例)
IBM(登録商標) Cognos(登録商標) Business Intelligence 10.2.1では、TPC−DSベンチマークを元にしたベンチマーク・プログラムの一つにおいて、ツリーにキーを挿入する処理でプログラムの実行時間の15%を費やす。
【0266】
従って、IBM(登録商標) Cognos(登録商標)Business Intelligence 10.2.1を高速化する為にも、ツリー構造において、ツリーのノードにエントリを挿入する操作を高速化することが重要となってくる。
【0267】
上記ベンチマーク・プログラムでは、ツリーのノードに約666,000個のエントリの挿入が数回行われる。当該約666,000個のエントリの挿入の際に使用されるキーの順列を取得し、上記ツリーのノードへの挿入を当該同じキーの順列を用いて実行するC言語で記述された単体ベンチマーク・プログラムを用意した。
【0268】
本発明の実施態様に従う検索手法2において使用されるツリーを使用して、及び従来手法で構築されたツリーを使用して、POWER7上で、上記単体ベンチマーク・プログラムを実行した。具体的には、longのキーの比較に絞って、本発明の実施態様に従い32ビット幅又は64ビット幅でキーの比較のみを行うSIMD化されたB+−ツリーと、従来手法に従い64ビット幅でキーの比較のみを行うSIMD化されたB+−ツリーとの間で比較を行った。その結果、本発明の実施態様に従う検索手法2において使用されるツリーを使用した場合、従来手法で構築されたツリーを使用した場合と比べて、実行時間が41.2%減少した。
図1
図6
図7A
図7B
図8A
図8B
図9
図2
図3A
図3B
図3C
図4A
図4B
図4C
図4D
図4E
図4F
図4G
図4H
図5A
図5B
図5C
図5D
図5E