JP5470082B2 - 情報蓄積検索方法及び情報蓄積検索プログラム - Google Patents

情報蓄積検索方法及び情報蓄積検索プログラム Download PDF

Info

Publication number
JP5470082B2
JP5470082B2 JP2010031795A JP2010031795A JP5470082B2 JP 5470082 B2 JP5470082 B2 JP 5470082B2 JP 2010031795 A JP2010031795 A JP 2010031795A JP 2010031795 A JP2010031795 A JP 2010031795A JP 5470082 B2 JP5470082 B2 JP 5470082B2
Authority
JP
Japan
Prior art keywords
entry
node
search
key
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010031795A
Other languages
English (en)
Other versions
JP2011170461A (ja
Inventor
豊 荒川
隆幸 中村
元紀 中村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2010031795A priority Critical patent/JP5470082B2/ja
Publication of JP2011170461A publication Critical patent/JP2011170461A/ja
Application granted granted Critical
Publication of JP5470082B2 publication Critical patent/JP5470082B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、多次元かつ多種類のデータの中から、目的のデータを高速に検索するためのインデキシング方式の構築の際に用いて好適な情報蓄積検索方法及び情報蓄積検索プログラムに関するものである。
データベース技術の分野においては、多量のデータから目的のデータを高速に検索するために、様々なインデキシング技術が考案されている。以下、個々のデータを、リレーショナルデータベース(RDB)における呼び名と同様にタプルと呼ぶ。タプルは、1つ以上の属性と値のペア(AVペア(属性−値ペア))から構成されるものを指すものとする。また、タプルの集合を表(テーブル)として表したものが、タプル表である。
現在最も広く使われているRDBにおいては、B木と呼ばれるデータ構造がインデックスとして用いられることが多い。特に、実用化されているRDBにおいてはB木の改良型であるB+木やB*木を使うことが多い。これらの技術はファイルシステムにおいても活用されている。
これらは各タプル内の1種類の属性に対する属性値(RDBで言えばある1つのカラムに入る値)の集合に対して構築される木の形をしたデータ構造(木構造)であり、検索木とも呼ばれる。検索時に検索条件を指定したい属性毎に、この検索木を構築することで、高速な検索が可能となる。
これらB木ないしその改良型は1つの属性に対して構築されるインデックスであるが、他にも、2つ以上の属性に対して構築されるインデックスが存在し、2つ以上の属性の値もしくは値の範囲を指定した検索を高速に実現するのに利用される。こうしたインデックスは複数の属性をもつタプル、すなわち多次元データを含むタプルに対するものであるため、多次元インデックスと呼ばれる。多次元インデックスの最も代表的なものはR木である。R木はB木と同様に木構造であり、R*木、R+木など多くの改良型が存在する。
これら従来の検索木の多くは、非特許文献1に記載されているように、共通して以下の特徴をもつ。
・1つ以上のノードを含み、
該ノードは0から予め定められた閾値までの個数のエントリを含み、
該ノードはリーフノードまたはインナーノードであり、
該リーフノードの該エントリは、
タプルの識別子とタプルのキーの組から構成され、
該インナーノードの該エントリは、
他のノードへのポインタと、
該他のノードが含むエントリ集合のキーの和をとったキーの組とから構成され、
該キーは、1以上の長さ(すなわち1以上のデータ列の長さ;以下同様)を有する属性−値または属性−値範囲の組の並びであり、
ルートノードと呼ぶ第1階層のノードから、
該ポインタによってノード間が階層的に接続された
木構造の検索木である。
また同様に、非特許文献1に記載されているように、これらの検索木へのタプル挿入方法、すなわちタプルのインデキシング方法は、共通して以下の手順を含む。
・非特許文献1においてSplitと呼ばれる手順:
検索木内の1つのノードと、1つのエントリに対し、
該ノード内のキー集合と該エントリ内のキーを含めたキー集合を2つのグループに分割し、そのうち1つを新しいノードに入れ、該新しいノードを該ノードの親ノードに挿入するノード分割手順。
・非特許文献1においてAdjustKeysと呼ばれる手順:
検索木内の1つのノードに対し、
該ノードが含むキー集合情報を親ノードに伝達し親ノードに子ノードである
該ノードが含むキー集合情報を保持させる操作を該ノードからルートノードまで再帰的に行うキー集合情報調整手順。
・非特許文献1においてChooseSubtreeと呼ばれる手順:
1つのエントリXと、レベル数Lに対し、
ルートノードから、レベル数Lのノードに至るまでの各ノードにおいて、
該ノードが含むエントリのうち、該ノードが含むエントリを既存エントリ、
該エントリXを挿入するエントリとした場合のペナルティが
最も小さい該ノードが含むエントリを選出し、
該エントリに含まれるポインタが指し示す子ノードを次の操作対象とする操作を再帰的に行い、
最終的にレベル数Lのノードを1つ選択する部分木選択手順。
ここで、ペナルティとは、インデキシングにおける各手順を経て構築された検索木を用いて所望の検索条件を満たすタプルを見つける際の効率を表す指標であり、部分木選択手順では、良い選択か否かを表す指標となる。
・非特許文献1においてInsertと呼ばれる手順:
1つのエントリと、レベル数Lに対し、
該エントリと該レベル数Lに対する部分木選択手順を実施し、
選択されたレベル数Lのノードに対し、
該ノードが予め決められた数未満のエントリを含む場合には、
該ノードに該エントリを加え、
該ノードが予め決められた数以上のエントリを含む場合には、
該ノードと、該エントリに対するノード分割手順を実施し、
該ノードに対するキー集合情報調整手順を実施するエントリ挿入手順。
また同様に、非特許文献1に記載されているように、これらの検索木からのタプル検索方法は、共通して以下の手順を含む。
・非特許文献1においてSearchと呼ばれる手順:
検索対象とする1つのノードと、検索式としてのキーである検索キーに対し、
該ノードがリーフノードでなければ、該ノードに含まれる各エントリについて、
該エントリのキーが検索キーに含まれる各属性を全て含みかつ
検索キーに含まれる各属性に対応する値または値範囲と該エントリのキーに含まれる該属性に対応する値または値範囲とが一致または部分的に一致するかを調べ、
一致または部分的に一致する場合には該エントリのポインタで接続されたノードを検索対象、該検索キーを検索キーとしてノード検索手順を再帰的に行い、
該ノードがリーフノードであれば、該ノードに含まれる各エントリについて、
該エントリのキーが検索キーに含まれる各属性を全て含みかつ
検索キーに含まれる各属性に対応する値または値範囲に該エントリのキーに含まれる該属性に対応する値が含まれるかを調べ、
含まれる場合には該エントリのタプルの識別子を検索結果タプル識別子集合に加えるノード検索手順。
前記ペナルティとして、例えばR木においては、一般に最小包囲矩形、あるいは最小外接矩形(Minimum Bounding Rectangle; MBR)と呼ばれるオブジェクトの大きさの増加量が用いられる。3次元空間内の座標データを示すタプル集合であれば、各エントリのキーも3次元となり、エントリの最小外接矩形は、該エントリが下位の階層に含むタプル集合を全て含む各面がいずれかの軸に平行な最小の直方体となる。タプル挿入においては、前記部分木選択手順により該直方体の体積増加が最小となるノードをタプル挿入先として選択することになる。これは、3次元空間内で近いタプル同士を同じノードへ入れていくクラスタリングに相当し、これにより、検索条件を満たすタプルを効率的に見つけることができるようになる。また、ペナルティは、前記ノード分割手順においても、良い分割か否かの指標として用いられる。
Joseph M.Hellerstein, Jeffrey F. Naughton and Avi Pfeffer, "Generalized Search Trees for Database Systems," Proc. 21st Int’l Conf. on Very Large Data Bases, Zuerich, September 1995,pp. 562−573.
MEMS(Micro−Electro−Mechanical Systems)技術、蓄電技術、通信技術などの発達により、様々な小型センサデバイスが安価に入手可能となりつつある。身の回りにこうした多様なセンサが多数配置され、それらを利用した様々なアプリケーションが我々の生活を支援する、そうしたユビキタス環境の実現が期待される。こうしたセンサデバイスから出力されるセンサデータは、通常、前記タプルの形式で表現することが可能である。
様々なセンサやアプリケーションが存在するユビキタス環境においては、それだけ様々な属性を含んだセンサデータ(タプル)が蓄積され、また様々な属性を指定した検索が行われるようになる。たとえばx,y方向の2次元の加速度センサから得られるタプルと、x,y,z方向の3次元の加速度センサから得られるタプルが混在する場合、x,y方向の加速度を知りたいアプリケーションは、どちらの種類のタプルも活用できるべきである。すなわち、「x,y方向の加速度データ」を検索条件とした場合、どちらの種類のタプルも検索する必要がある。このような、次元数や次元種類に依存しない、タプルの横断的検索が必要とされ、また特に、数値で示されることが多いセンサデータの検索においては、範囲検索が重要となる。こうした多種多次元なタプルに対する範囲検索をなるべく効率的に実現する場合、従来のインデックス技術を利用する場合にはB木(あるいはその改良型)を使う方法と、R木(あるいはその改良型)を使う方法が考えられる。
B木を使う方法は、各属性に対してB木によるインデックスを構築しておき、検索条件で指定される各属性に対し、当該属性に対応するB木インデックスを使用して当該属性の条件を満たすタプルを検索した後、全結果のAND(論理積)をとり(すなわち、どの結果にも含まれているタプルのみを抽出し)、それを最終的な検索結果とする、というものである。
しかしながら、B木を使う方法は、複数のB木にアクセスするため、検索時のアクセスノード数の総数が大きくなってしまう。アクセスノード数は、検索の処理量や速度を決める重要なパラメータである。またANDをとる処理の処理量は、最終的な検索結果の量ではなく、各B木での検索で得られた中間結果の量に依存するため、タプル数に従って大きくなりやすい。つまりB木を使う方法には、検索処理全体の処理量や処理時間が大きくなりやすいという問題がある。
R木を使う方法は、タプル種類毎に、つまり前記の加速度センサの例であればx,y2次元のタプルとx,y,z3次元のタプルそれぞれに対して、R木によるインデックスを構築しておき、検索条件で指定される全属性を含むタプル種類に対応するR木インデックスを使用して検索条件を満たすタプルを検索した後、全結果のOR(論理和)をとり(各結果をまとめ)、それを最終的な検索結果とする、というものである。
しかしながら、R木を使う方法においても、やはり複数のR木にアクセスするため、タプル種類数が大きくなった場合には、R木検索時のアクセスノード数の総数が大きくなってしまう。またどのR木を検索するべきかを判断する前処理も必要である。つまりこの方法にも、検索処理全体の処理量や処理時間が大きくなりやすいという問題がある。
そこで、1つの検索木に多種多次元のタプル集合、すなわち属性の数や種類が異なるタプル集合を挿入することが考えられるが、前記従来の木構造のインデックスは、対象とするタプル集合が、すべて同次元であることが前提とされている。つまり、属性の数と種類が同じタプルの集合に対してインデックスを構築することを前提としている。例えば、2次元空間内の座標データを示すタプル集合をR木によってインデキシングする場合を考える。このとき、該タプル集合を下位の階層に含むエントリの最小外接矩形は、該タプル集合を全て含む最小の長方形で表される。多種多次元のタプルをインデキシングする場合、ここに新たに3次元のタプルが挿入される場合もあり、この場合、最小外接矩形は直方体となる。ペナルティは、定義上、直方体の体積から長方形の面積を引いた値となるが、次元の異なる値同士の引き算による値は論理的意味をもたず、良いクラスタリングの指標とはなりえない。結果、多種多次元のタプル集合に対し、R木では良い検索効率を実現できない。別の表現をすれば、従来の木構造インデックスにおいては、2つのエントリを入力とするペナルティの計算において、該エントリのキーが含む全次元について、次元毎に大小関係を判別可能である必要があるが、多種多次元のタプルを下位に含むエントリ間では、そのキーが含む次元も異なるために、次元毎の大小関係を必ずしも判別できず、多種多次元のタプルに対する効率的なインデックスを構築することができなかった。
一方、従来から、次元数が非常に大きい多次元データに対する検索においては、効率的な検索ができなくなる問題(いわゆる「次元の呪い」と呼ばれる問題)が存在することが知られている。「次元の呪い」問題の具体例であるが、n次元空間中に点が一様に分布している場合、ある点から他の各点までの距離は、nが大きくなるほど、距離の差が小さくなっていく。こうした現象により、R−treeなどの手法によりクラスタリングを行っても、互いに大きく重なりあったクラスタばかりができてしまい、クラスタリングの効果が発揮されない。つまり、検索時に検索木上の多くのノードを辿る必要が生じ、効率的な検索ができない。
ユビキタス環境においては多様なデバイス(センサやアクチュエータ)が使用され、それに応じてデータの種類も多様となり、次元数は非常に大きくなると想定される。つまり、ユビキタス環境を対象とした検索では、多様なデバイスに応じて検索データの次元数が増加することから、「次元の呪い」問題が発生しうると考えられる。
本発明は、このような事情を考慮し、上記の問題を解決すべくなされたもので、その目的は、多種多次元のタプルに対する検索を、タプル数や含まれる属性種類数が大きくなった場合にも、効率的に実現することにある。また、本発明の他の目的は、多種多次元のタプルに対する検索において、「次元の呪い」の問題が発生することを回避しつつ、効率的な検索を可能とすることにある。
上記課題を解決するため、請求項1記載の発明は、蓄積検索対象の情報の単位であるタプルは、属性−値の組の並びを少なくとも含む1以上の長さを有するものであり、該属性の種類や該並びの長さが同じまたは異なる1つ以上の該タプルが複数記憶されるものであり、該タプルから検索キーがインデックス化され検索木が構築されるものであり、該検索木はノードを階層的に有する構成であり、該ノードの内最下層のリーフノードはエントリとして該タプルを識別するタプル識別子とキーを有するものであり、該ノードの内該リーフノードより上位のインナーノードはエントリとして下位ノードである子ノードの位置情報であるポインタとキーを有するものであり、該インデックスの構築において、エントリをノードに挿入する際、1つの挿入すべきエントリXと、該エントリを挿入すべきレベル数L(前記リーフノードを0として階層が上がるごとに1増える階層数)が与えられた際、はじめにルートノードを操作対象ノードとし、操作対象ノードにおいて、「該操作対象ノードがすでに含む既存エントリに対し、該エントリXを挿入した場合のペナルティ」に基づいて1つの該既存エントリを選出し、該既存エントリに含まれるポインタが指し示す子ノードを次の操作対象ノードと選定し、該次の操作対象ノードのレベル数がLより大きい場合は、該次の操作対象ノードからさらに次の操作対象ノードを選定することを再帰的に繰り返し、該次の操作対象ノードのレベル数がLに到達した場合は、このノードを選択ノードに決定するステップと、前記選択ノードが許容できる最大数のエントリを持っていない場合において、前記選択ノードに対し、前記エントリXを追加するステップと、前記選択ノードが既に許容できる最大数のエントリを持っている場合において、前記エントリXを追加しつつ前記選択ノードの分割を行うステップと、前記分割を行った場合において、前記選択ノードの上位ノードのエントリを更新するステップと、を含むことを特徴とする情報蓄積検索方法である。
請求項2記載の発明は、請求項1に記載の分割を行うステップが、前記選択ノードが含む複数のエントリに前記エントリXを追加した各エントリを2つのグループに順次、振り分ける際に、各グループがすでに含むエントリの和をとったエントリを既存エントリAとし、該振り分けられるエントリをエントリBとしてグループ毎に求めた各前記ペナルティに基づいて振り分け先のグループを選択して振り分けを行うステップと、該2つのグループうちの1つのグループに振り分けられた各エントリを前記選択ノードのエントリとするとともに、もう1つのグループに振り分けられた各エントリを新たに生成したノードのエントリとするステップと、該新たに生成したノードのエントリを該ノードの親ノードに挿入するステップと、を含むことを特徴とする情報蓄積検索方法である。
請求項3記載の発明は、請求項1ないし2に記載の選択ノードを決定するステップが、前記操作対象ノードにおいて、前記ペナルティが最も小さい前記既存エントリを選出することを特徴とする情報蓄積検索方法である。
請求項4記載の発明は、請求項3に記載のペナルティが、前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAが検索される確率に対応した値の増分を示す値として定義され、該エントリAが検索される確率に対応した値として、該エントリAに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和を用い、該重みづけ付き正規化被検索面積は、正規化被検索面積に、該属性が検索式に用いられる確率を掛け合わせた値であり、該正規化被検索面積は、数式((q−a)(b−p)−(q−p)/2)/((b−a)/2)(但し、p、qはそれぞれ、該キーに含まれる該属性の最小値、最大値。a、bはそれぞれ、それまで該検索木に挿入された全タプル集合に含まれる該属性の最小値、最大値。)で規定される、ことを特徴とする情報蓄積検索方法である。
請求項5記載の発明は、請求項3に記載のペナルティが、前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAに含まれるキーに含まれる属性種類数の増分を示す値であることを特徴とする情報蓄積検索方法である。
請求項6記載の発明は、請求項1ないし2に記載の選択ノードを決定するステップが、2種の前記ペナルティを用い、前記操作対象ノードにおいて、第一のペナルティが最も小さい前記既存エントリを選出し、このとき該最も小さい既存エントリが複数存在する場合には、さらに、該最も小さい既存エントリのうち、第二のペナルティが最も小さい既存エントリを選出することを特徴とする情報蓄積検索方法である。
請求項7記載の発明は、請求項6において、前記第一のペナルティが、前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAに含まれるキーに含まれる属性種類数の増分を示す値であり、前記第二のペナルティが、前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAが検索される確率に対応した値の増分を示す値であることを特徴とする情報蓄積検索方法である。
請求項8記載の発明は、請求項7において、前記エントリが検索される確率に対応した値として、前記エントリに含まれるキーに含まれる各属性に対する前記重みづけ付き正規化被検索面積の和を用いることを特徴とする情報蓄積検索方法である。
請求項9記載の発明は、請求項4または8において、前記属性が検索式に用いられる確率として、属性出現回数をタプル総数で除した値を用い、該属性出現回数は、それまでに該検索木に挿入された全タプル集合における該属性の出現回数であり、該タプル総数は、それまでに該検索木に挿入された全タプル集合の要素数である、ことを特徴とする情報蓄積検索方法である。
請求項10記載の発明は、請求項1ないし9に記載の前記検索木を用いた検索において、検索式としての前記キーである検索キーに対し、前記ルートノードからその下位の前記ノードへと検索対象を変えながら、1つの該ノードを検索対象とし、該ノードが前記インナーノードであれば、該ノードに含まれる前記各エントリについて、該エントリのキーが前記検索キーに含まれる各属性を全て含み、かつ、該検索キーに含まれる各属性に対応する値または値範囲と該エントリのキーに含まれる該属性に対応する値または値範囲とが一致または部分的に一致する(一方の値または値範囲が、他方の値範囲に含まれるまたは一部重なる)かを調べる検索手順を行い、一致または部分的に一致する場合には、該エントリの前記ポインタで接続されたノードを検索対象、該検索キーを検索キーとして前記ノード検索手順を再帰的に行い、また、該ノードが前記リーフノードであれば、該ノードに含まれる前記各エントリについて、該エントリのキーが前記検索キーに含まれる各属性を全て含み、かつ、前記検索キーに含まれる各属性に対応する値または値範囲に該エントリのキーに含まれる該属性に対応する値が含まれるかを調べ、含まれる場合には該エントリの前記タプル識別子を検索結果タプル識別子集合に加えるノード検索ステップ、を有することを特徴とする情報蓄積検索方法である。
請求項11記載の発明は、蓄積検索対象の情報の単位であるタプルは、属性−値の組の並びを少なくとも含む1以上の長さを有するものであり、該属性の種類や該並びの長さが同じまたは異なる1つ以上の該タプルが複数記憶されるものであり、該タプルから検索キーがインデックス化され検索木が構築されるものであり、該検索木はノードを階層的に有する構成であり、該ノードの内最下層のリーフノードはエントリとして該タプルを識別するタプル識別子とキーを有するものであり、該ノードの内該リーフノードより上位のインナーノードはエントリとして下位ノードである子ノードの位置情報であるポインタとキーを有するものであり、該インデックスの構築において、エントリをノードに挿入する際、1つの挿入すべきエントリXと、該エントリを挿入すべきレベル数L(前記リーフノードを0として階層が上がるごとに1増える階層数)が与えられた際、はじめにルートノードを操作対象ノードとし、操作対象ノードにおいて、「該操作対象ノードがすでに含む既存エントリに対し、該エントリXを挿入した場合のペナルティ」に基づいて1つの該既存エントリを選出し、該既存エントリに含まれるポインタが指し示す子ノードを次の操作対象ノードと選定し、該次の操作対象ノードのレベル数がLより大きい場合は、該次の操作対象ノードからさらに次の操作対象ノードを選定することを再帰的に繰り返し、該次の操作対象ノードのレベル数がLに到達した場合は、このノードを選択ノードに決定するステップと、前記選択ノードが許容できる最大数のエントリを持っていない場合において、前記選択ノードに対し、前記エントリXを追加するステップと、前記選択ノードが既に許容できる最大数のエントリを持っている場合において、前記エントリXを追加しつつ前記選択ノードの分割を行うステップと、前記分割を行った場合において、前記選択ノードの上位ノードのエントリを更新するステップと、をコンピュータを用いて実行するための情報蓄積検索プログラムである。
請求項12記載の発明は、請求項11に記載の分割を行うステップが、前記選択ノードが含む複数のエントリに前記エントリXを追加した各エントリを2つのグループに順次、振り分ける際に、各グループがすでに含むエントリの和をとったエントリを既存エントリAとし、該振り分けられるエントリをエントリBとしてグループ毎に求めた各前記ペナルティに基づいて振り分け先のグループを選択して振り分けを行うステップと、該2つのグループうちの1つのグループに振り分けられた各エントリを前記選択ノードのエントリとするとともに、もう1つのグループに振り分けられた各エントリを新たに生成したノードのエントリとするステップと、該新たに生成したノードのエントリを該ノードの親ノードに挿入するステップと、を含むことを特徴とする情報蓄積検索プログラムである。
請求項13記載の発明は、請求項11ないし12に記載の選択ノードを決定するステップが、前記操作対象ノードにおいて、前記ペナルティが最も小さい前記既存エントリを選出することを特徴とする情報蓄積検索プログラムである。
請求項14記載の発明は、請求項13に記載のペナルティが、前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAが検索される確率に対応した値の増分を示す値として定義され、該エントリAが検索される確率に対応した値として、該エントリAに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和を用い、該重みづけ付き正規化被検索面積は、正規化被検索面積に、該属性が検索式に用いられる確率を掛け合わせた値であり、該正規化被検索面積は、数式((q−a)(b−p)−(q−p)/2)/((b−a)/2)(但し、p、qはそれぞれ、該キーに含まれる該属性の最小値、最大値。a、bはそれぞれ、それまで該検索木に挿入された全タプル集合に含まれる該属性の最小値、最大値。)で規定される、ことを特徴とする情報蓄積検索プログラムである。
請求項15記載の発明は、請求項13に記載のペナルティが、前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAに含まれるキーに含まれる属性種類数の増分を示す値であることを特徴とする情報蓄積検索プログラムである。
請求項16記載の発明は、請求項11ないし12に記載の選択ノードを決定するステップが、2種の前記ペナルティを用い、前記操作対象ノードにおいて、第一のペナルティが最も小さい前記既存エントリを選出し、このとき該最も小さい既存エントリが複数存在する場合には、さらに、該最も小さい既存エントリのうち、第二のペナルティが最も小さい既存エントリを選出することを特徴とする情報蓄積検索プログラムである。
請求項17記載の発明は、請求項16において、前記第一のペナルティが、前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAに含まれるキーに含まれる属性種類数の増分を示す値であり、前記第二のペナルティが、前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAが検索される確率に対応した値の増分を示す値であることを特徴とする情報蓄積検索プログラムである。
請求項18記載の発明は、請求項17において、前記エントリが検索される確率に対応した値として、前記エントリに含まれるキーに含まれる各属性に対する前記重みづけ付き正規化被検索面積の和を用いることを特徴とする情報蓄積検索プログラムである。
請求項19記載の発明は、請求項14または18において、前記属性が検索式に用いられる確率として、属性出現回数をタプル総数で除した値を用い、該属性出現回数は、それまでに該検索木に挿入された全タプル集合における該属性の出現回数であり、該タプル総数は、それまでに該検索木に挿入された全タプル集合の要素数である、ことを特徴とする情報蓄積検索プログラムである。
請求項20記載の発明は、請求項11ないし19に記載の前記検索木を用いた検索において、検索式としての前記キーである検索キーに対し、前記ルートノードからその下位の前記ノードへと検索対象を変えながら、1つの該ノードを検索対象とし、該ノードが前記インナーノードであれば、該ノードに含まれる前記各エントリについて、該エントリのキーが前記検索キーに含まれる各属性を全て含み、かつ、該検索キーに含まれる各属性に対応する値または値範囲と該エントリのキーに含まれる該属性に対応する値または値範囲とが一致または部分的に一致する(一方の値または値範囲が、他方の値範囲に含まれるまたは一部重なる)かを調べる検索手順を行い、一致または部分的に一致する場合には、該エントリの前記ポインタで接続されたノードを検索対象、該検索キーを検索キーとして前記ノード検索手順を再帰的に行い、また、該ノードが前記リーフノードであれば、該ノードに含まれる前記各エントリについて、該エントリのキーが前記検索キーに含まれる各属性を全て含み、かつ、前記検索キーに含まれる各属性に対応する値または値範囲に該エントリのキーに含まれる該属性に対応する値が含まれるかを調べ、含まれる場合には該エントリの前記タプル識別子を検索結果タプル識別子集合に加えるノード検索ステップ、を有することを特徴とする情報蓄積検索プログラムである。
本発明によれば、多種多次元のタプルに対し、統一的に1つの木構造インデックスを構築する際に、操作対象ノードにおいて、「該操作対象ノードがすでに含む既存エントリに対し、該エントリXを挿入した場合のペナルティ」に基づいて1つの既存エントリを選出してエントリをノードに挿入するようにした。このペナルティとして、例えば、エントリに含まれるキーに含まれる属性種類数の増加量や、エントリ挿入前後での検索される確率に対応する値(すなわち検索される確率ないし検索される確率の近似値)の増加量を用いることで、ペナルティを、次元毎に大小関係を判別する必要はなく、エントリが含むキーの次元数や種類が異なっても定義することができる。これにより、多種多次元のタプル集合を蓄積・検索する際の、複数のインデックスを用いることによるオーバーヘッド、すなわち処理量や記憶容量、処理速度が大きくなることを抑え、また多種多次元のタプル集合に対して検索効率を向上させるクラスタリングを実現することが可能となる。
また、ペナルティの算出において、エントリが検索される確率に対応した値として、エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和を用い、該重みづけ付き正規化被検索面積は、該正規化被検索面積に、該属性が検索式に用いられる確率を掛け合わせた値であり、該正規化被検索面積は、数式((q−a)(b−p)−(q−p)/2)/((b−a)/2)(但し、p、qはそれぞれ、該キーに含まれる該属性の最小値、最大値。a、bはそれぞれ、それまで該検索木に挿入された全タプル集合に含まれる該属性の最小値、最大値。)で規定されるようにすることで、あるいは、ペナルティとして、操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAに含まれるキーに含まれる属性種類数の増分を示す値でとすることで、あるエントリにそれまで含まれていなかった属性がタプルの挿入により該エントリに新たに追加された場合であっても、ペナルティが発生することとなるため、属性種類数が増加する状態遷移、すなわちエントリの次元増加を抑制し、「次元の呪い」の問題が発生することを回避することができる。
本発明が特徴とするペナルティの算出手法を説明するための模式図である。 本発明の情報蓄積検索方法を実行するための情報蓄積検索システム全体図を示す図である。 図2のシステムで用いられるタプルの例を示す図である。 図2のシステムで用いられる検索式の例を示す図である。 図2のサーバ・コンピュータ装置201の構成例を示すブロック図である。 図2のシステムで用いられるインデックスのデータ構造の例を示す図である。 図2のシステムで用いられるタプル表の例を示す図である。 図2のシステムで用いられるリーフノードのエントリ表の例を示す図である。 図2のシステムで用いられるインナーノードのエントリ表の例を示す図である。 図2のシステムで用いられる属性表の例を示す図である。 図2のクライアント・コンピュータ装置301の構成例を示すブロック図である。 図2のシステムにおけるエントリ挿入手順(Insert)のフローチャートである。 図2のシステムにおける部分木選択手順(ChooseSubtree)のフローチャートである。 図15および図16とあわせて図2のシステムにおけるノード分割手順(Split)を示すフローチャートである。 図14および図16とあわせて図2のシステムにおけるノード分割手順(Split)を示すフローチャートである。 図14および図15とあわせて図2のシステムにおけるノード分割手順(Split)を示すフローチャートである。 図2のシステムにおけるノード分割手順によるノード分割例1を示す図である。 図2のシステムにおけるノード分割手順によるノード分割例2を示す図である。 図2のシステムにおけるキー集合情報調整手順(AdjustKeys)のフローチャートである。 図2のシステムにおけるノード検索手順(Search)のフローチャートである。
以下、図面を参照して本発明の実施形態について説明する。本発明の情報蓄積検索方法は、検索木を構築する際に用いられるペナルティが、ノード選択処理等の場合に操作対象となるノードがすでに含む既存エントリAに対し、エントリBを挿入するとき、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べたときの、該エントリAが検索される確率に対応した値の増分を示す値として定義される、ことを特徴としている。本実施形態では、このエントリが検索される確率に対応した値の増分を示す値として、エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和の増加量を用いることとしている。そこで、まず、本実施形態におけるペナルティの算出手法について図1を参照して詳細に説明する。
本実施形態においては、検索木のペナルティとして、エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和の増加量を用いることとした。このエントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和の増加量について、数式を示して説明する。
(数式の定義)
今、ある属性xaの定義域がRAからRBまでであり、あるエントリEが保持するキーに属性xaが値範囲をpからqとして含まれていた場合を考える。この場合、属性xaの値範囲を指定した検索条件は、指定する値範囲が属性xaの定義域内であるとすると、図1の三角形内の一点に対応する。図1は、エントリEが属性xaの値範囲を指定して検索される確率を模式的に説明するための座標系であり、属性xaを指定した検索条件について、横軸に値範囲の始点、縦軸に値範囲の終点をとってその検索条件に対応する座標を表している。例えばxa1〜xa2の値範囲を指定した検索条件であれば、図1中の点Xaに対応する。このとき、該エントリE以下に該当するタプルを含みうる検索条件、すなわちエントリEにアクセスする必要がある検索条件は、図1の斜線部内の一点に対応する。
ここで、数式Iを、以下の通り定義する。
((q−a)(b−p)−(q−p)/2)/((b−a)/2) (式I)
p、qはそれぞれ、キーに含まれる該属性の最小値、最大値であり、また、a、bはそれぞれ、それまで検索木に挿入された全タプル集合に含まれる属性の最小値、最大値を表すものである。数式Iは、正規化被検索面積を表す。
属性xaを指定する検索が行われる際、その値範囲がxstart〜xendである確率が、確率密度関数Xp(xstart、xend)で与えられるとすると、属性xaを指定する検索においてエントリEがアクセスされる確率は、斜線部に渡り確率密度関数Xpを積分した値に等しい。
しかしながら、通常、確率度密度分布Xpを事前に知ることは難しい。そこで、図1の三角形内のどの点に対応する検索条件も等しい確率で発生しうると仮定すると、エントリEがアクセスされる確率は、((斜線部の面積)/(三角形の面積))となる。すなわち、該確率は次式で与えられる。
((q−RA)(RB−p)−(q−p)/2)/((RB−RA)/2)
また、定義域RA、RBが不明な場合には、それまでにインデックスに登録されたタプル集合における、属性xaについての最小値a、最大値bをそれぞれRA、RBの代わりに用いることが考えられる。このとき、斜線部の面積は次式Sで与えられる。
((q−a)(b−p)−(q−p)/2)/((b−a)/2) (式S)
式Sが該数式Iに等しい式であり、これにより求められる値を正規化被検索面積と呼ぶ。
(効果の説明)
ある属性が検索式に用いられ、さらに該検索式において該属性の値範囲を指定した範囲条件が用いられている場合、該値範囲の始点、終点を示す2値が該属性の定義域内で一様の確率で選ばれると仮定すると、該エントリにアクセスする必要がある確率は数式Iで近似される。数式Iで求められる値が該正規化被検索面積である。重みづけ付き正規化被検索面積は、さらに該属性が検索式に用いられる確率を正規化被検索面積に乗じたものである。
従って、エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和は、範囲検索時に、検索条件に適合するタプルを探すために該エントリにアクセスしなければならない確率の近似値に相当する。該重み付け付き正規化被検索面積の和をペナルティとして用い、ペナルティをなるべく小さくする戦略の下、検索木を構築することにより、検索時にアクセスしなければならないエントリ数を総じて小さくすることが可能となる。すなわち、検索の処理量、処理速度を向上させることが可能となる。
また数式Iにおいて、p=qの場合、すなわちエントリEが保持する属性xaの値範囲の始点、終点が等しい場合を考えると、
((q−a)(b−p)−(q−p)/2)/((b−a)/2)
=(p−a)(b−p)/((b−a)/2) (式T)
となる。通常、b>aであり、また多くの場合p>aかつb>pとであるから、多くの場合(式Tの右辺)>0となる。すなわち、属性xaの値範囲の始点、終点が等しい場合でも、当該属性の存在によりペナルティが発生することとなる。
あるエントリにそれまで含まれていなかった属性が、タプルの挿入により該エントリに新たに追加された場合、該タプルの該属性が値範囲でなく値である場合には、該エントリは該属性の値範囲の始点、終点が等しい状態となる。この状態への変化には、上述の通りペナルティの発生を伴うため、本発明においては、このような属性種類数が増加する状態遷移、すなわちエントリの次元増加は抑制される。
一方、R木で用いられるペナルティは、エントリが保持する属性の値範囲の長さの増分、あるいはそれを一辺とする超立方の体積の増分であるため、値範囲の始点、終点が等しい場合にはペナルティは0となる。すなわち、挿入するタプルの属性が値範囲でなく値をもつ場合には、次元増加への抑制力が全く働かない。
このように本発明は、各エントリの次元増加を抑制し、これにより次元数が大きくなって「次元の呪い」の問題が発生することを防ぐことを可能とする。
また、以下の実施形態では、検索木のペナルティとして、重みづけ付き正規化被検索面積の和の増加量に基づくペナルティに加えて、エントリに含まれるキーに含まれる属性種類数の増加量を用いることとした。これにより、該重みづけ付き正規化被検索面積の和の増加量のみをペナルティとした場合以上に、さらに強力にエントリの次元増加が抑えられ、「次元の呪い」の問題を抑制することができる。
以下の実施形態では、検索木のペナルティを1つ、あるいは、2つ使用する。すなわち、第一のペナルティとして、該「エントリに含まれるキーに含まれる属性種類数の増加量」を用い、第二のペナルティとして、エントリ挿入前後での検索される確率ないし検索される確率の近似値の増加量、すなわち該「エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和の増加量」を用いる。第一のペナルティは強い次元増加低減効果を、第二のペナルティはある程度の次元増加低減効果を有するので、部分木選択手順ないしノード分割手順において、いずれかのペナルティを使用するだけでも、「次元の呪い」問題を抑圧することができる。さらには、部分木選択手順において、第一のペナルティが最も小さいエントリが複数存在する場合に、それらの間で第二のペナルティを比較し、第二のペナルティが最も小さいエントリを選ぶこととし、またノード分割手順において、第一のペナルティを分類の指標としてエントリを分類し、第一のペナルティの指標が同じ値になる場合にはさらに第二のペナルティを分類の指標としてエントリを分類することとし、具体的には、各エントリについて、グループG1へ入れた場合の第一のペナルティとグループG2へ入れた場合の第一のペナルティの差分が最も大きいエントリから順に、第一のペナルティが小さいグループへ分類し、差分が最も大きいエントリが複数存在する場合に、それらの間で第一のペナルティが小さいグループへ分類した場合の第二のペナルティを比較し、第二のペナルティが最も小さいエントリから順に、第一のペナルティが小さいグループへ分類することとすれば、第一のペナルティによる次元増加低減効果と、第二のペナルティによる検索効率化効果を合わせ持った、検索木構築方法となる。特に、第二のペナルティとして該「エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和の増加量」を用いた場合には、第一のペナルティが属性の種類だけを考慮するのに対し、第二のペナルティによる「各属性(次元)の値までを考慮することによる検索効率化効果」を合わせ持った、検索木構築方法となると言えるので、より効果的である。
図2は、本発明の一実施形態による情報蓄積検索システムを示す概略ブロック図である。情報蓄積検索システムは、ネットワーク101を介して接続された、情報、すなわちタプルの蓄積・検索を行うサーバ・コンピュータ装置201と、タプルないし検索式の作成とサーバ・コンピュータ装置201とのタプルないし検索式ないし検索結果の送受信を行うクライアント・コンピュータ装置301とからなる。ネットワーク101は、インターネットなどの公衆網、LAN(Local Area Network)、専用線などの私設網からなる。なお、図2では簡単のためクライアント・コンピュータ装置301を1台のみ記載したが、それに限らず複数台設けても良い。
なお、サーバ・コンピュータ装置201およびクライアント・コンピュータ装置301は、コンピュータ及びその周辺装置と、そのコンピュータによって実行されるプログラムとを用いて実現することができる。また、そのプログラムは、コンピュータ読み取り可能な記録媒体や通信回線を介して提供することが可能である。
本実施形態では、タプルを蓄積し、検索式によりタプルを検索する。タプルは、1つ以上の属性と値のペア(AVペア)から構成される。蓄積するタプルのAVペアの数やその属性の種類は様々である。図3にタプルの例を示す。図3(a)は、3次元データのタプルの例であり、この例では、「機器種別」、「使用者」および「使用開始年月日」の各属性に、「PC」、「○○太郎」および「2005/04/01」の各値がそれぞれ対(あるいは組)をなすことでタプルが構成されている。図3(b)は、7次元データのタプルの例であり、この例では、「機器種別」、「使用者」、「緯度」、「経度」、「センシング時刻」、「センサID」、および「センサ値」の各属性に、「温度センサ」、「○○太郎」、「126030」、「501018」、「2008/11/11 12:34:56」、「123456」および「23.5」の各値がそれぞれ対をなすことでタプルが構成されている。ここで、図3(b)のタプルでは、緯度、経度の単位は秒であり、北緯と東経が正、南緯と西経が負で表現されることとしている。
また、検索式は、1つ以上の属性と値ないし値の範囲のペアから構成される。図4に検索式の例を示す。検索式は、検索条件を満たすタプルを検索結果として得るための記述であり、図4に示す例では属性「機器種別」の値が「温度センサ」であり、属性「緯度」の値が値の範囲「126000〜127000」内にあり、属性「経度」の値が値の範囲「501000〜501100」内にあるタプルを検索結果とするものである。検索時には、検索式に含まれる全ての属性を含み、かつ該属性の値が検索式に含まれる該属性の値ないし値の範囲内にあるタプルを検索結果とする。例えば、図4の検索式による検索においては、図3の(b)のタプルが検索式に適合し、検索結果に含まれることになる。
次に、サーバ・コンピュータ装置201の内部構成について説明する。
図5は、サーバ・コンピュータ装置201の構成を示すブロック図である。サーバ・コンピュータ装置201は、クライアント・コンピュータ装置301からのタプル蓄積要求/タプル検索要求の受信または検索結果の送信を行う通信部202と、クライアント・コンピュータ装置301からの要求に応じて、インデックス構築を含む蓄積処理やインデックスを用いた検索処理を行う演算部203と、インデックスと属性表とタプル総数とタプル表とを保持する記憶部204とを備える。
また、本実施形態では、記憶部204内における、検索式で示された検索条件を満たすタプルの格納位置を決定する際に、インデックスを用いたファイルアクセス法が採用されている。インデックスのデータ構造としては、背景技術で述べたような種々の検索木を用いることができる。本実施形態で用いられるインデックスのデータ構造の一例を図6に示す。インデックスのデータ構造は複数のノードと、階層的にそれらをつなぐ枝で表される木構造である。最も上位のノードをルートノードと呼び、最も下位のノードをリーフノードと呼ぶ。またリーフノード以外のノードをインナーノードと呼ぶ。図6に示す例では、4個のインナーノード402と、7個のリーフノード403とから検索木が構成されている。インナーノード402の最上位のノードがルートノード401である。各インナーノード402には枝で繋がれた他のノードへのポインタと、後述するエントリ表502とが保持されている。各リーフノード403には枝で繋がれた他のインナーノード402へのポインタと、後述するエントリ表503とが保持されている。
次に、記憶部204に格納されているタプル表の例を図7に示す。タプル表には、タプルID(タプル識別子)とそのタプルの情報が格納される。図7に示すタプル表501には、2つのタプルID「000000001」および「000000002」と、各タプルIDにそれぞれ対応する2つのタプル「device_type=“PC”,user=“mike”,date_of_first_use=“2005/04/01”」および「device_type=“temperature sensor”,user=“mike”,lat=“126030”,long=“501018”,time=“2008/11/11 12:34:56”,sensor_id=“123456”,temperature_value=“23.5”」の情報とが格納されている。
リーフノード403は、1つ上位の階層のノード(親ノード)へのポインタと、図8に示すリーフノードのエントリ表503とを保持する。ノードへのポインタは当該ノードの蓄積アドレスを意味し、各ノード間を繋げる枝に相当する。リーフノード403のエントリはタプルIDとタプルのキーの組から構成され、該キーは、1以上の長さを有する属性−値の組の並びから成る。すなわち、1個のエントリは、エントリ表503の縦の1列(1カラム)に該当する。リーフノードのエントリ表503は、T1からT2までの個数のリーフノードのエントリを保持する。T1、T2は、予め定められた定数であり、どちらも正の整数、またT1<T2である。
図8に示す例では、エントリ表503に、タプルID「000008129」とそのタプルIDに対応するタプルのキーの組とからなるエントリと、タプルID「000000045」とそのタプルIDに対応するタプルのキーの組とからなるエントリと、タプルID「000000802」とそのタプルIDに対応するタプルのキーの組とからなるエントリと、タプルID「000003581」とそのタプルIDに対応するタプルのキーの組とからなるエントリとの、4個のエントリが含まれている。この場合、例えば、タプルID「000008129」に対応するタプルのキーの組は、「PC」(属性「device_type」に対する値)、「mike」(属性「user」に対する値)、「2007/11/23」(属性「date_of_first_use」に対する値)、「103456」(属性「lat」に対する値)および「218234」(属性「long」に対する値)である。また、例えば、タプルID「000000045」に対応するタプルのキーの組は、「temperature sensor」(属性「device_type」に対する値)、「mike」(属性「user」に対する値)、「132210」(属性「lat」に対する値)、「501222」(属性「long」に対する値)、「2002/01/01 12:34:56」(属性「time」に対する値)、「11983」(属性「sensor_id」に対する値)および「15.4」(属性「sensor_value」に対する値)である。また、記号「NULL」(空値)はエントリの終わりを示している。また、記号「−」は属性に対するキーが空値であることを示している。
またインナーノード402は、親ノードへのポインタと、図9に示すインナーノードのエントリ表502を保持する。インナーノードのエントリは子ノードへのポインタと子ノードのキーの組から構成され、該キーは、1以上の長さを有する属性−値範囲の組の並びから成り、該並びは該子ノードが下位に含むタプル集合における各属性についての最小値から最大値までを表す。インナーノードのエントリ表は、T1からT2までの個数のインナーノードのエントリを保持する。エントリ表502において、1個のエントリは、エントリ表502の縦の1列(1カラム)に該当する。例えば、図9において、「子ノード1のアドレス」と「子ノード2のアドレス」の「device_type」は、それぞれ「“a”〜“k”」、「“h”〜“q”」となっている。これは、「device_type」の頭文字が“a”〜“k”で始まるタプルは子ノード1に格納されている可能性があることを、“h”〜“q” で始まるタプルは子ノード2に格納されている可能性があることを示している。すなわち、「device_type」の頭文字が“h”〜“k”で始まるタプルについては、子ノード1または子ノード2のいずれかに格納されていることとなる。インナーノードのエントリ表は、T1以上T2以下の個数のインナーノードのエントリを保持する。また、この場合、エントリ表502には、子ノードへのポインタ「子ノード1のアドレス」とその子ノードのキーの組とからなるエントリと、子ノードへのポインタ「子ノード2のアドレス」とその子ノードのキーの組とからなるエントリと、子ノードへのポインタ「子ノード3のアドレス」とその子ノードのキーの組とからなるエントリと、子ノードへのポインタ「子ノード4のアドレス」とその子ノードのキーの組とからなるエントリとの、4個のエントリが含まれている。図9において、「M1〜M2」の形式の表記は、「M1」が最小値、「M2」が最大値を示している。
図6においてルートノード401はインナーノードであるが、ルートノード401は特殊なノードであり、インデックス全体が一つのノードのみからなる場合には、ルートノード401は最下位のノードでもあるためリーフノードとなる。ルートノード401がリーフノードの場合には、エントリ表に0からT2の個数のリーフノードのエントリを保持する。またルートノード401がインナーノードの場合には、2からT2の個数のインナーノードのエントリを保持する。ルートノード401は親ノードをもたないため、親ノードへのポインタを保持しない。
次に、記憶部204に格納されている属性表を図10に示す。属性表には、それまでに蓄積したタプル集合に含まれる全属性について、含まれていた回数と最小値と最大値とを保持する。図10に示す属性表504には、タプルの各属性「device_type」、「user」、「date_of_first_use」、「lat」、「long」、「time」、「sensor_id」および「sensor_value」の出現頻度ならびに各属性の値の最小値および最大値が保持されている。なお、タプルの値の最小値および最大値は、例えば、タプルの値を、属性毎にあらかじめ設定された所定の変換処理によって、所定の数値に変換することで求めること等ができる。変換処理としては、例えば、タプルの値が文字列の場合は文字列を文字コードに変換した後に四則演算等の所定の演算処理を行って数値を得るようにしたり、時、分、秒で表される値を秒の単位で表するようにして数値を得るようにしたりする処理を用いることができる。
次に、クライアント・コンピュータ装置301の内部構成について説明する。
図11は、クライアント・コンピュータ装置301の構成を示すブロック図である。クライアント・コンピュータ装置301は、サーバ・コンピュータ装置201へのタプル蓄積要求/タプル検索要求の送信または検索結果の受信を行う通信部302と、サーバ・コンピュータ装置201へ送信するタプル蓄積要求に含まれるタプルやタプル検索要求に含まれる検索式の作成、サーバ・コンピュータ装置201から受信した検索結果であるタプル集合を表示するタプル/検索式作成表示部303とを備える。タプル/検索式の作成には、入力デバイスを用いてユーザが入力する方法や、センサデバイスから得られたセンサデータから作成する方法がある。
本実施形態において、タプルを蓄積する際には、クライアント・コンピュータ装置301から受信したタプル蓄積要求に対し、サーバ・コンピュータ装置201の演算部203は、まず記憶部204が保持するタプル表501を参照し、未使用の新しいタプルIDを決定し、該タプルIDとタプル蓄積要求に含まれるタプルをタプル表501に追加する。また属性表504を更新するとともにタプル総数(すなわち蓄積しているタプルの全個数)を1増やす。さらに、記憶部204が保持するインデックスに該タプルに対応するエントリを挿入する。このときのエントリ挿入手順フローを図12に示す。図12に示す処理における引数のエントリX、レベル数Lとしては、それぞれ該エントリ、0とする。ここでレベル数は、リーフノードの階層のレベル数を0とし、1つ上位の階層に上がるごとに、レベル数は1増えるものとする。このエントリXは、例えば図8のエントリ表503に示される4個のエントリのいずれかに対応するようなデータである。
図12に示すように、まず、該エントリ、0を入力として部分木選択手順を実施する(ステップS11−1)。部分木選択手順(ステップS11−1)では、エントリXを挿入すべきレベル数Lのノードが選択ノードとして選択される(すなわちステップS11−1のサブルーチンから戻る際に、挿入すべきノードを示すアドレスが返り値として返される)。この部分木選択手順については後述する。
次に、ステップS11−1で選択されたノードのエントリ表に記載されたエントリ数が当該エントリ表のエントリの個数の最大値T2未満かどうかを判断する(ステップS11−2)。T2未満である場合には、該ノードのエントリ表に該エントリを追加する(ステップS11−3)。ステップS11−2においてT2未満でなかった場合には、該ノードと該エントリを入力とするノード分割手順を実施する(ステップS11−4)。ノード分割手順については後述する。次に、該ノードを入力とするキー集合情報調整手順を実施し(ステップS11−5)、処理を終える。キー集合情報調整手順については後述する。
図12のステップS11−1で呼び出される部分木選択手順フローを図13に示す。部分木選択手順では、まず、変数current(カレント)にルートノードのアドレスを代入し、変数lvにルートノードのレベル数を代入し、リストmin_child_listを空にする(ステップS12−1)。変数currentは、操作対象のノードのアドレスが代入される変数である。この場合、ステップS12−1でルートノードのアドレスが最初に代入される。その後、順次、操作対象のノードのレベル数lvが変化する度に、ステップS12−18においてその子ノードのアドレスが代入されることで、更新されることになる。また、リストmin_child_listは、後述する関数P1が最低値となるエントリの番号が1または複数個格納される変数である。
次に、lvと入力されたレベル数Lの大きさを比較し(ステップS12−2)、lvの方が小さければ、変数child_numに1を代入し、リストmin_child_listにchild_numに入った数を追加する(ステップS12−3)。次に、currentノードのchild_num番目のエントリと入力されたエントリXを引数とする関数P1によりペナルティ値を計算し、変数min_penaltyに代入する(ステップS12−4)。
関数P1は以下のように定義される。ただし、A,Bはエントリを示す。
P1(A,B)=Q1(A+B)−Q1(A)
ここでQ1(C)は、エントリCに含まれるキーに含まれる属性の種類数を示す。またA+Bは、エントリAのキーとエントリBのキーの和をとった新たなキーを持つエントリを示す。ここで2つのキーの和をとったキーとは、該2つのキーに含まれる属性を全て含み、各属性の値として、該属性が該2つのキーのどちらか一方に含まれる場合には、該一方のキーに含まれる該属性の値もしくは値範囲と同じ値もしくは値範囲をもち、該属性が該2つのキーの両方に含まれる場合には、該両方のキーに含まれる該属性の2つの値もしくは値範囲のどちらをも含む最小限の値もしくは値範囲をもつキーを意味する。例えばキー(a=3、b=2〜4)とキー(a=4〜5、b=3〜5、c=1)の和をとったキーとは、(a=3〜5、b=2〜5、c=1)となる。ただし、本発明はこれに限るものではなく、例えば、2つのキーの和をとったキーに含まれる属性の値は、該2つのキーの該属性の値もしくは値範囲のどちらをも含む値もしくは値範囲とし、必ずしも最小限の値もしくは値範囲としないことも可能である。
上述したように、ステップS12−4では、変数min_penaltyにP1((child_num番目のエントリ),X)(=P1(A,B))の値が代入される。すなわち、変数currentでアドレスが指定されるノードのchild_num番目のエントリに対し、エントリXを挿入する際、エントリXを挿入する前のchild_num番目のエントリに含まれるキーに含まれる属性の種類数と、挿入した後のchild_num番目のエントリ(すなわちchild_num番目のエントリとエントリXの和をとった新たなキーを持つエントリ)に含まれるキーに含まれる属性の種類数とを比べた場合の差分が、変数min_penaltyに代入されることになる。
ステップS12−4の後、currentに対応するノード(currentノード)のchild_num番目のエントリが存在するかを判定し(ステップS12−5)、存在する場合には、currentノードのchild_num番目のエントリと入力されたエントリXを引数とする該関数P1によりペナルティ値を計算し、該ペナルティ値とmin_penaltyの大きさを比較する(ステップS12−6)。
min_penaltyの方が大きいまたは等しい場合には、再度、currentノードのchild_num番目のエントリと入力されたエントリXを引数とする該関数P1によりペナルティ値を計算し、該ペナルティ値とmin_penaltyの大きさを比較し(ステップS12−7)、等しくない場合には、リストmin_child_listを空にし、currentノードのchild_num番目のエントリと入力されたエントリXを引数として該関数P1より計算したペナルティ値をmin_penaltyに代入する(ステップS12−8)。
さらに、リストmin_child_listにchild_numの値を追加し(ステップS12−9)、child_numを1つ増加させ(ステップS12−10)、ステップS12−5に戻る。
ステップS12−6において、min_penaltyの方が小さい場合には、ステップS12−10に進む。
ステップS12−7において、比較の結果、等しい場合には、ステップS12−9に進む。
これらのステップS12−5〜S12−10を繰り返し実行することで、currentノードのすべてのエントリに対して関数P1を求めるとともに、リストmin_child_listに関数P1が最低値となるエントリの番号が1または複数個格納されることになる。
ステップS12−5において、存在しない場合には、変数iに1を代入し、変数child_numにリストmin_child_listのi番目(すなわち、1番目)の数を代入し、変数min_childにchild_numを代入する(ステップS12−11)。
currentノードのchild_num番目のエントリと入力されたエントリXを引数とする関数P2によりペナルティ値を計算し、変数min_penaltyに代入する(ステップS12−12)。
関数P2は以下のように定義される。ただし、A,Bはエントリを示す。
P2(A,B)=Q2(A+B)−Q2(A)
ここでQ2(C)は、エントリCに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和であり、エントリCが検索される確率を示す。またA+Bは、エントリAのキーとエントリBのキーの和をとった新たなキーを持つエントリを示す。この関数P2は、「該操作対象ノードがすでに含む既存エントリに対し、該エントリXを挿入した場合のペナルティ」を表す関数であり、該操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAが検索される確率に対応した値(すなわち検索される確率ないし検索される確率の近似値)の増分を示す値して定義されるものである。
またQ2(C)は以下のように定義される。
Q2(C)=ΣCi(S(Ci)・R(Ci))
CiはエントリCが持つキーに含まれる属性を示す。ΣCi(D)は、すべてのCiについてのDの総和を意味する。S(Ci)は、正規化被検索面積であり、前記数式Iと同じく、次式で定義される。
S(Ci)=((qCi−aCi)(bCi−pCi)−(qCi−pCi)/2)/((bCi−aCi)/2)
該pCi、qCiはそれぞれ、該キーに記述された属性Ciの最小値、最大値であり、該aCi、bCiはそれぞれ、それまで該検索木に挿入された全タプル集合Yにおける属性Ciの最小値、最大値である。aCi、bCiは属性表から得ることができる。ただし、bCi−aCi=0となる場合には、S(Ci)はあらかじめ設定された定数値をとるものとする。
R(Ci)は、属性Ciが検索式に用いられる確率であり、以下のように定義される。
R(Ci)=(全タプル集合YにおけるCiの出現回数)/(全タプル集合Yの要素数)
全タプル集合YにおけるCiの出現回数は、属性表から得ることができる。
ステップS12−12では、変数min_penaltyにP2((child_num番目のエントリ),X)の値が代入される。すなわち、変数currentでアドレスが指定されるノードのchild_num番目のエントリに対し、エントリXを挿入する際、エントリXを挿入する前のchild_num番目のエントリと、挿入した後のchild_num番目のエントリとを比べた場合の、child_num番目のエントリが検索される確率に対応した値の増分を示す値が、変数min_penaltyに代入されることになる。ただし、ステップS12−11で変数iに1が代入され、変数child_numにリストmin_child_listのi番目の数すなわち1番目の数が代入されているので、ステップS12−12で関数P2を求める際には、変数currentでアドレスが指定されるノードのリストmin_child_listの1番目の数が示す番号のエントリに対し、エントリXを挿入する際、エントリXを挿入する前の当該エントリと、挿入した後の当該エントリとを比べた場合の、当該エントリが検索される確率に対応した値の増分を示す値が、変数min_penaltyに代入されることになる。
次に、リストmin_child_listのi番目の数が存在するか否かを判定し(ステップS12−13)、存在する場合には、リストmin_child_listのi番目の数をchild_numに代入し(ステップS12−14)、currentノードのchild_num番目のエントリと入力されたエントリXを引数として関数P2により計算したペナルティ値とmin_penaltyの大きさを比較し(ステップS12−15)、min_penaltyの方が大きいまたは等しい場合には、child_numの値をmin_childに代入し、currentノードのchild_num番目のエントリと入力されたエントリXを引数として関数P2により計算したペナルティ値をmin_penaltyに代入する(ステップS12−16)。そしてiを1増加させ(ステップS12−17)、ステップS12−13に戻る。
ステップS12−15において、min_penaltyの方が小さい場合には、ステップS12−17に進む。
このステップS12−16を繰り返し行うことで、変数min_penaltyが最も小さい関数P2の計算結果で更新されるとともに、変数min_childにその最も小さい関数P2の計算結果が得られたエントリの番号が代入されることになる。
ステップS12−13において、存在しない場合には、currentノードのmin_child番目のエントリに含まれる子ノードのアドレスをcurrentに代入し、該子ノードを新たなcurrentノードとし、lvを1減らし(ステップS12−18)、ステップS12−2に戻る。
上記のステップS12−13、S12−14、S12−15、S12−16、S12−17を繰り返し行うことで、currentノードに含まれる全エントリのうち、関数P1を用いた判定処理によってリストmin_child_listにリストアップされたすべてのエントリについて、エントリXを挿入した場合の関数P2の値が求められる。そして、そのリストアップされたすべてのエントリについて計算が終了した時点で、変数min_childに最も小さい関数P2の計算結果が得られたエントリの番号が代入されることになる。そして、そのリストアップされたすべてのエントリについての関数P2の計算および比較が終了すると、ステップS12−18でcurrentノードのmin_child番目の子ノードのアドレスが変数currentに代入され、lvの大きさが1減らされ、ステップS12−2へ戻ることになる。したがって、その後、関数P2の値が最も小さくなるエントリで指定された子ノードに対して、同様に、関数P1による挿入後のエントリに含まれるキーに含まれる属性の種類数が小さいエントリのリストアップと、リストアップされた全てのエントリに対する関数P2の計算と、その計算結果に基づいて関数P2の値が最も小さくなるエントリを求める処理が行われることになる。
ステップS12−2において、Lの方が大きいまたは等しい場合には、currentノードを選択することとし、currentを返り値とし(ステップS12−19)、処理を終了する。この例では、L=0なので(すなわちLにはリーフノードのレベル数が代入されているので)、currentノードのレベル数lvが0に到達したことろで、すなわち変数currentでアドレスが指定されるノードがリーフノードとなったところで処理が終了する。
次に、図12のステップS11−4で呼び出されるノード分割手順フローを図14〜図16に示す。このノード分割手順は、分割対象のノード(ノードNおよびそのアドレスをNとする。)とエントリXとを引数として呼び出される処理である。なお、図14〜図16のフローは、結合子SまたはTによって互いに結合されている。
まず、入力されたノードアドレスNに対応するノード(ノードN)のエントリ表に、入力されたエントリXを追加する(ステップS13−1)。図12のステップS11−4から呼び出される場合、分割対象ノードはリーフノードなので、リーフノードのエントリ表にエントリXが追加されることになる。
変数i、jにそれぞれ1、2を代入し(ステップS13−2)、下記式によりd_maxの初期値を計算する(ステップS13−3)。ここで、変数iおよびjは、分割対象ノードにおける処理対象エントリの番号を一時的に記憶するための変数である。変数d_maxは関数P1等を用いた演算結果の最大値を一時的に記憶するための変数である。このステップS13−2〜S13−3では、それらの変数が初期化されている。
d_max=P1(ノードNのi番目のエントリ,ノードNのj番目のエントリ)−Q1(ノードNのj番目のエントリ)
上述した関数P1の定義から、変数d_maxは、d_max=P1(ノードNのi番目のエントリ,ノードNのj番目のエントリ)−Q1(ノードNのj番目のエントリ)=Q1(ノードNのi番目のエントリ+ノードNのj番目のエントリ)−Q1(ノードNのi番目のエントリ)−Q1(ノードNのj番目のエントリ)と表される。
さらに、リストd_max_pairsを空にし(ステップS13−4)、ノードNのエントリ表のj番目のエントリが存在するか否かを判定する(ステップS13−5)。このリストd_max_pairsは、d_maxが最大となる1又は複数のエントリの組の番号(上記のiおよびjの組)が格納される変数である。
ステップS13−5において、存在する場合には、iとjの大きさを比較し(ステップS13−6)、等しくない場合には、下記dを計算する(ステップS13−7)。
d=P1(ノードNのi番目のエントリ,ノードNのj番目のエントリ)−Q1(ノードNのj番目のエントリ)
上述した関数P1の定義から、変数dは、変数d_maxと同様に、d=P1(ノードNのi番目のエントリ,ノードNのj番目のエントリ)−Q1(ノードNのj番目のエントリ)=Q1(ノードNのi番目のエントリ+ノードNのj番目のエントリ)−Q1(ノードNのi番目のエントリ)−Q1(ノードNのj番目のエントリ)と表される。
次に、dとd_maxの大きさを比較し(ステップS13−8)、d_maxの方が小さいまたは等しい場合には、再度dとd_maxの大きさを比較し(ステップS13−9)、等しくない場合には、リストd_max_pairsを空にし、dをd_maxに代入する(ステップS13−10)。さらに、リストd_max_pairsに(i,j)の値のペアを追加し(ステップS13−11)、iを1増加させ(ステップS13−12)、ステップS13−6に戻る。
ステップS13−8において、d_maxの方が大きい場合には、ステップS13−12に進む。
ステップS13−9において、比較の結果、等しい場合には、ステップS13−11に進む。
ステップS13−6において、比較の結果、等しい場合には、iに1を代入し(ステップS13−13)、さらにjを1増加させ(ステップS13−14)、ステップS13−5に戻る。
これらのステップS13−6〜S13−14の処理によって、分割対象のノードNの全エントリ(すなわちノードNの既存のエントリにエントリXを追加したエントリの集合)から、上記dの値を最大とする2つのエントリが1または複数組、選択され、リストd_max_pairsに選択されたエントリのペアを示す値(番号)が格納される。
ステップS13−5において、存在しない場合には、変数k、d_max、i_max、j_maxに、それぞれ1、0、0、0を代入する(ステップS13−15)。ここで、変数kは、リストd_max_pairs内の値(要素)の格納位置を示す番号を一時的に記憶するための変数である。変数i_maxおよびj_maxは関数P2等を用いた演算結果が最大となるエントリの番号の組を一時的に記憶するための変数である。変数d_maxは関数P2等を用いた演算結果の最大値を一時的に記憶するための変数である。このステップS13−15では、それらの変数が初期化されている。
なお、ステップS13−4〜ステップS13−15の手順は、「ノードNが含むエントリのうち、どちらのエントリにも含まれる属性の種類数が最も少ない2つのエントリのペア」を調べ、その2つのエントリの番号をリストd_max_pairsに入れる手順と言えるが、本発明の範囲はそれに限らず、この手順を「ノードNが含むエントリのうち、一方のエントリにしか含まれない属性の種類数が最も多い2つのエントリのペア」を調べ、その2つのエントリの番号をリストd_max_pairsに入れる手順に差し替えても良い。そのためには、ステップS13−7で用いたdのかわりに、下記dを用いれば良い。
d=P1(ノードNのi番目のエントリ,ノードNのj番目のエントリ)+P1(ノードNのj番目のエントリ,ノードNのi番目のエントリ)
次にリストd_max_pairsのk番目の要素が存在するか否かを判定し(ステップS13−16)、存在する場合には、リストd_max_pairsのk番目の要素であるペアを構成する2つの数をそれぞれi、jに代入する(ステップS13−17)。
さらに下記dを計算する(ステップS13−18)。
d=P2(ノードNのi番目のエントリ,ノードNのj番目のエントリ)−Q2(ノードNのj番目のエントリ)
上述した関数P2の定義から、変数dは、d=P2(ノードNのi番目のエントリ,ノードNのj番目のエントリ)−Q2(ノードNのj番目のエントリ)=Q2(ノードNのi番目のエントリ+ノードNのj番目のエントリ)−Q2(ノードNのi番目のエントリ)−Q2(ノードNのj番目のエントリ)と表される。
dとd_maxの大きさを比較し(ステップS13−19)、d_maxの方が小さいまたは等しい場合には、i_max、j_max、d_maxにそれぞれi、j、dの値を代入する(ステップS13−20)。さらに、kを1増加させ(ステップS13−21)、ステップS13−16に戻る。
ステップS13−19において、d_maxの方が大きい場合には、ステップS13−21に進む。
これらのステップS13−6〜S13−21の処理を繰り返し実行することで、リストd_max_pairsに格納されているすべてのエントリのペアにおいて、上記dを最大とする1対のエントリの番号が変数i_maxおよびj_maxに代入されることになる。
ステップS13−16において、存在しない場合には、ノードNのi_max番目のエントリをエントリのグループG1に入れ、j_max番目のエントリをグループG2に入れ、さらに両者ともノードNのエントリ表から削除する(ステップS13−22)。ここで、G1とG2が含むエントリ集合は、初期状態として空集合であり、ステップS13−22が終わった時点でそれぞれ1つずつエントリを含むこととなる。
ノードNにおけるエントリ表のエントリの個数の最小値T1からG1内のエントリ数を引いた値が、ノードNのエントリ表内に残っているエントリ数に比べて等しいまたは大きいか否かを判定し(ステップS13−23)、等しいか大きい場合には、ノードNのエントリ表内に残っているエントリを全てグループG1に入れ、エントリ表内からは削除する(ステップS13−24)。
ステップS13−23において、否と判定された場合には、ステップS13−24を実施しない。
さらにT1からG2内のエントリ数を引いた値が、ノードNのエントリ表内に残っているエントリ数に比べて等しいまたは大きいか否かを判定し(ステップS13−25)、等しいか大きい場合には、ノードNのエントリ表内に残っているエントリを全てグループG2に入れ、エントリ表内からは削除する(ステップS13−26)。
ステップS13−25において、否と判定された場合には、ステップS13−26を実施しない。
これらのステップS13−23〜S13−26の処理では、ノードNのエントリ表から、グループG1およびグループG2に代入される(振り分けられる)エントリ集合の個数が、各ノードにおけるエントリの最小値T1を下回らないようにするための処理である。後述するステップS13−47またはS13−48では、ノードNのエントリ表に含まれるエントリが順次、グループG1またはグループG2に振り分けられるとともに、ノードNのエントリ表からは削除されることになる。その際、例えば一方のグループに振り分けが偏ってしまうような場合があったとしても、ステップS13−23〜S13−26の処理によって各グループG1、G2には少なくともT1個のエントリが代入されるようになっている。
i、d_maxにそれぞれ1、0を代入し、リストmas_entryを空にし(ステップS13−27)、ノードNのエントリ表内のi番目のエントリEiが存在するか否かを判定する(ステップS13−28)。ここで、変数iは、分割対象ノードにおける処理対象エントリの番号を一時的に記憶するための変数である。変数d_maxは関数P1等を用いたステップS13−29での演算結果の最大値を一時的に記憶するための変数である。リストmas_entryは、変数d_maxに対応するエントリの番号を1または複数記憶する変数である。このステップS13−27では、それらの変数が初期化されている。
ステップS13−28において存在する場合には、下記dを計算する(ステップS13−29)。ただし(G1)、(G2)は、グループG1、G2に含まれる全エントリのキーの和をとった新たなキーを持つエントリを示す。
d=|P1((G1),Ei)−P1((G2),Ei)|
このdの式は、上記で定義した関数P1において、グループG1に含まれる全エントリのキーの和をとった新たなキーを持つエントリを既存エントリAとし、エントリEiを挿入するエントリBとして求めた関数P1の値と、グループG2に含まれる全エントリのキーの和をとった新たなキーを持つエントリを既存エントリAとし、エントリEiを挿入するエントリBとして求めた関数P1の値との差の絶対値を変数dに代入する演算である。すなわち、ノードNのエントリ表にまだ残されているエントリのうちのi番目のエントリについて、グループG1に挿入する場合のペナルティP1とグループG2に挿入する場合のペナルティP1との差の大きさが変数dに代入されることになる。
dとd_maxの大きさを比較し(ステップS13−30)、d_maxの方が小さいまたは等しい場合には、再度dとd_maxの大きさを比較し(ステップS13−31)、等しくない場合には、リストmax_entryを空にし、d_maxにdを代入し(ステップS13−32)、さらにリストmax_entryにiを追加する(ステップS13−33)。iを1増加させ(ステップS13−34)、ステップS13−28に戻る。ステップS13−30において、d_maxの方が大きい場合には、ステップS13−34に進む。
ステップS13−31において、等しい場合には、ステップS13−33に進む。
これらのステップS13−28〜S13−34の処理を繰り返し実行することで、エントリNのエントリ表内のすべてのエントリのうち上記dを最大とするエントリの番号が1または複数個、リストmax_entryに代入されることになる。
ステップS13−28において、存在しない場合には、まず、変数i、i_max、d_maxにそれぞれ、1、1、0を代入する(ステップS13−35)。ここで、変数iは、リストmax_entry内の値(要素)の格納位置を示す番号を一時的に記憶するための変数である。変数i_maxは関数P2等を用いたステップS13−38での演算結果が最大となるエントリの番号を一時的に記憶するための変数である。変数d_maxは関数P2等を用いたステップS13−38での演算結果の最大値を一時的に記憶するための変数である。このステップS13−35では、それらの変数が初期化されている。
次にリストmax_entryのi番目の要素(数)が存在するか否かを判定する(ステップS13−36)。存在する場合には、リストmax_entryのi番目の数を変数cに代入する(ステップS13−37)。
さらに、下記dを計算する(ステップS13−38)。ただし、EcはノードNのエントリ表のc番目のエントリを示す。
d=|P2((G1),Ec)−P2((G2),Ec)|
このdの式は、上記で定義した関数P2において、グループG1に含まれる全エントリのキーの和をとった新たなキーを持つエントリを既存エントリAとし、エントリEcを挿入するエントリBとして求めた関数P2の値と、グループG2に含まれる全エントリのキーの和をとった新たなキーを持つエントリを既存エントリAとし、エントリEcを挿入するエントリBとして求めた関数P2の値との差の絶対値を変数dに代入する演算である。すなわち、ノードNのエントリ表にまだ残されているエントリのうちのc番目のエントリについて、グループG1に挿入する場合のペナルティP2とグループG2に挿入する場合のペナルティP2との差の大きさが変数dに代入されることになる。
次に、dとd_maxの大きさを比較し(ステップS13−39)、d_maxの方が小さいまたは等しい場合には、i_max、d_maxにそれぞれi、dを代入し(ステップS13−40)、iを1増加させて(ステップS13−41)ステップS13−36に戻る。
ステップS13−39において、d_maxの方が大きい場合には、ステップS13−41に進む。
これらのステップS13−36〜S13−41の処理を繰り返し行うことで、リストmax_entryに格納されているすべてのエントリの番号について、グループG1に振り分けた場合とグループG2に振り分けた場合でペナルティP2の値の差が最も大きくなるエントリの番号のリストmax_entry中の格納位置(番号)が変数i_maxに記憶されることになる。
ステップS13−36において、存在しない場合には、リストmax_entryのi_max番目の要素が存在する否かを判定し(ステップS13−42)、存在する場合には、リストmax_entryのi_max番目の数を変数cに代入する(ステップS13−43)。さらに、P1((G1),Ec)とP1((G2),Ec)の大きさを比較し(ステップS13−44)、P1((G2),Ec)の方が大きいか等しい場合には、再度P1((G1),Ec)とP1((G2),Ec)の大きさを比較する(ステップS13−45)。
P1((G2),Ec)の方が小さいか等しい場合には、さらにP2((G1),Ec)とP2((G2),Ec)の大きさを比較する(ステップS13−46)。P2((G2),Ec)の方が大きいまたは等しい場合には、EcをG1に入れ、エントリ表からは削除し(ステップS13−47)、ステップS13−23に戻る。
ステップS13−44において、P1((G2),Ec)の方が小さい場合には、EcをG2に入れ、エントリ表からは削除し(ステップS13−48)、ステップS13−23に戻る。
ステップS13−45において、P1((G2),Ec)の方が大きい場合には、ステップS13−47に進む。
ステップS13−46において、P2((G2),Ec)の方が小さい場合には、ステップS13−48に進む。
ステップS13−43〜S13−48では、リストmax_entryのi_max番目の要素の値をcとして、ノードNのエントリ表のc番目のエントリEcを挿入されるエントリB、グループG1またはG2に含まれる全エントリのキーの和をとった新たなキーを持つエントリをエントリAとして、関数P1の値が小さくなる方のいずれかのグループにエントリEcが振り分けられ、エントリ表から削除される。すなわち、グループG2とエントリEcとから求められる関数P1の値が、グループG1とエントリEcとから求められる関数P1の値よりも小さい場合には(ステップS13−44で「YES」の場合には)、当該エントリEcがグループG2に入れられる。他方、グループG1とエントリEcとから求められる関数P1の値が、グループG2とエントリEcとから求められる関数P1の値よりも小さい場合には(ステップS13−45で「YES」の場合には)、当該エントリEcがグループG1に入れられる。また、グループG1とエントリEcとから求められる関数P1の値と、グループG2とエントリEcとから求められる関数P1の値が等しい場合には(ステップS13−45で「NO」の場合には)、ノードNのエントリ表のc番目のエントリEcを挿入されるエントリB、グループG1またはG2に含まれる全エントリのキーの和をとった新たなキーを持つエントリをエントリAとして、関数P2の値が小さくなる方のいずれかのグループにエントリEcが振り分けられ、エントリ表から削除される。すなわち、グループG2とエントリEcとから求められる関数P2の値が、グループG1とエントリEcとから求められる関数P2の値よりも小さい場合には(ステップS13−46で「YES」の場合には)、当該エントリEcがグループG2に入れられる。他方、そうでない場合には(ステップS13−46で「NO」の場合には)、当該エントリEcがグループG1に入れられる。
ステップS13−42において、存在しない場合には、ノードNのエントリ表にG1のエントリ集合を入れ、新しいノードN´を生成し、そのエントリ表にG2のエントリ集合を入れる(ステップS13−49)。ノードNのすべてのエントリをグループG1またはグループG2に振り分けた後は、ノードNのエントリ表にはエントリが存在しないことになる。この場合、ステップS13−28、S13−36、およびS13−42はいずれも判定結果が「NO」となるので、ステップS13−49へ進み、ノードNのエントリ表にグループG1に振り分けられたすべてのエントリが入れられ、新たに生成されたノードN´のエントリ表にグループG2に振り分けられたすべてのエントリが入れられることになる。
次に、ノードNがルートノードか否かを判定し(ステップS13−50)、ルートノードでない場合には、ノードNの親ノードが保持するエントリ表内のエントリ数がT2未満かどうかを判定する(ステップS13−51)。
T2未満である場合には、ノードNの親ノードのエントリ表に、新しいノードN´に対応するエントリ、すなわちキーとしてノードN´のエントリ表内の全エントリのキーの和をとったキーをもち、またノードN´へのポインタをもつエントリを追加する(ステップS13−52)。
ステップS13−50において、ノードNがルートノードである場合には、新しいノードN´´を生成し、ノードNの 親ノードとする。すなわち、ノードNに親ノードとしてノードN´´へのポインタを保持させる。さらに、ノードNに対応するエントリをノードN´´のエントリ表に追加し(ステップS13−53)、ステップS13−52へ進む。
ステップS13−52の後、ノードNの親ノードを入力とするキー集合情報調整手順を実施し(ステップS13−55)、処理を終える。
ステップS13−51において、T2未満でない場合には、ノードNの親ノードと、N´に対応するエントリを入力とするノード分割手順を実施し(すなわち図14〜図16に示すノード分割手順を再帰呼び出しし)(ステップS13−54)、ステップS13−55に進む。
該ノード分割手順によりノードが分割される様子の例を図17に示す。この例では、T1=2、T2=4とする。図17左に示すように、今、3つのノードN1〜N3からなる検索木において、各ノードのエントリ表にエントリE1〜E10が保持されている状態を考える。
エントリE10は最後に該検索木に挿入され、これにより、ノードN3のエントリ表に保持しているエントリ数がT2を超える5となった場合、エントリ数を減らすために、ノード分割手順が実施される(図12のステップS11−2、ステップS11−4)。この結果、図17右に示すように、ノードN3がN3と新たなノードN4に分割され、N3が保持していたエントリの一部は、N4へ移る(図14〜図15のステップS13−1〜ステップS13−49)。これに伴い、新たなノードN4に対応するエントリE11がN3の親ノードであるN1のエントリ表に追加される(図16のステップS13−52)。
該ノード分割手順によりノードが分割される様子のもう1つの例を図18に示す。図17に示した例のように、ノード分割手順においては、分割対象のノードの親ノードのエントリ表に新しいエントリが追加される。これにより、親ノードが保持するエントリ数がT2以上となる場合、さらに該親ノードがノード分割対象となる(図16のステップS13−51、ステップS13−54)。
図18は、該親ノードがルートノードだった場合の例である。図18に示すように、ルートノードN1が分割される場合には、N1と新たなノードN7に分割されるだけでなく、新たなノードN8がルートノードとして生成され、N1、N7に対応するエントリをエントリ表に保持する(図16のステップS13−50、ステップS13−53、ステップS13−52)。このとき、検索木の階層が1つ増え、ルートノードのレベル数は1増えることとなる。
次に、図12のステップS11−5または図16のステップS13−55で呼び出されるキー集合情報調整手順フローを図19に示す。まず引数として入力されたノードアドレスNが示すノード(ノードN)がルートノードかどうかを判定する(ステップS17−1)。
ルートノードでない場合には、ノードNの親ノードのエントリ表内の、ノードNに対応するエントリ、すなわちポインタとしてノードNのアドレスを保持するエントリのキーを、その時点でのノードNに対応するキー、すなわちノードNのエントリ表内のエントリ集合のキーの和をとったキーで上書きする(ステップS17−2)。
さらに、ノードNの親ノードを入力とするキー集合情報調整手順を実施し(再帰呼び出しし)(ステップS17−3)、処理を終える。
ステップS17−1において、ルートノードであった場合には、そのまま処理を終える。
なお、本実施形態においては、リーフノードのエントリにタプルIDを含ませ、タプルそのものはタプル表に格納することとしたが、本発明の範囲はそれに限らず、リーフノードのエントリにタプルそのものを含ませることも可能である。
また本実施形態においては、各属性が検索式に用いられる確率の近似値として、属性出現回数をタプル総数で除した値を用いたが、本発明の範囲はそれに限らず、各属性が検索式に用いられる確率について、予めデータベース管理者が入力することとしたり、実際にユーザが用いた検索式の統計情報に基づいて算出したりすることも可能である。
また本実施形態においては、該関数P2によるペナルティの計算において、入力される2つのエントリのキーが含む全属性について考慮したが、本発明の範囲はそれに限らず、検索式に用いられる確率が高い属性のうち例えば上位10個の属性についての項のみを考慮することも可能である。すなわち、他の属性の項については0とみなしてもよい。
また本実施形態では、各属性が検索式に用いられる確率は独立として扱ったが、本発明の範囲はそれに限らず、各属性の共起性、すなわち1つの検索式に同時に現れる確率を考慮したペナルティの計算を行うことも可能である。たとえば、属性aAと属性aBを条件に含む検索式が用いられる確率をRとすると、その属性の組み合わせに対する重みづけ付き正規化被検索面積を(属性aAの正規化被検索面積)×(属性aBの正規化被検索面積)×Rと定義し、全属性の全組合せに対するこのような重みづけ付き正規化被検索面積の和の増加量をペナルティとすればよい。
また本実施形態では、ある属性が検索式に用いられた場合、指定される値範囲の始点、終点を示す2値が該属性の定義域内で一様の確率で選ばれると仮定した、すなわち、該始点、該終点を入力、その値範囲が検索式内で指定される確率を出力とする確率密度関数の出力値が、該属性の定義域内の点を入力とする場合に一定と仮定したが、本発明の範囲はそれに限らず、該確率密度関数を予めデータベース管理者が入力することとしたり、実際にユーザが用いた検索式の統計情報に基づいて算出したりすることも可能である。また例えば時刻属性について、現在時刻に近い値ほど検索されやすい場合には、現在時刻に近い値範囲を入力するほど高い値を出力する確率密度関数を用いるなど、別の確率密度関数を仮定することも可能である。
次に、本実施形態のシステムにおける検索処理について説明する。検索処理では、クライアント・コンピュータ装置301から受信したタプル検索要求に対し、サーバ・コンピュータ装置201の演算部203は、まず記憶部204が保持するインデックスから、受信した検索式が意味する検索条件を満たすタプルのID集合を取得する。具体的には、検索結果タプルIDリストを空にした後、記憶部204が保持するインデックスのルートノードを検索対象ノードとしてノード検索手順を実行することにより、検索結果タプルIDリスト内に該ID集合を得ることができる。さらに、記憶部204が保持するタプル表を参照し、該ID集合に対応するタプル集合を抽出し、検索結果として該タプル集合をタプル検索要求元であるクライアント・コンピュータ装置301に送信する。
ノード検索手順フローを図20に示す。図20に示すフローは、上記検索木を用いたノード検索手順のフローであって、検索式としてのキーである検索キーに対し、ルートノードからその下位のノードへと検索対象を変えながら、1つのノードを検索対象ノードとして検索を行う際に呼び出されるものであるとともに、ステップS18−7において再帰呼び出しされるものである。
まず、検索対象ノードがリーフノードか否かを判定し(ステップS18−1)、リーフノードである場合には、検索対象ノードのエントリ表に記載されたエントリのうち、検索条件を満たすものを検索結果タプルIDリストに追加し(ステップS18−2)、処理を終える。
ステップS18−1において、リーフノードでない場合には、まず変数iに1を代入し(ステップS18−3)、検索対象ノードに含まれるエントリ表内のi番目のエントリが存在するか否かを判定する(ステップS18−4)。存在しない場合には、処理を終える。
ステップS18−4において、i番目のエントリが存在する場合には、該エントリに含まれるポインタが指し示す子ノード以下のノードに検索条件を満たすタプルが存在し得るか否かを、該エントリに含まれるキーより判定する(ステップS18−5)。存在しえない場合には、変数iを1増加させ(ステップS18−6)、ステップS18−4に戻る。
ステップS18−5において、存在し得る場合には、該エントリのポインタが指し示す子ノードを検索対象ノードとして再帰的にノード検索手順を実施する(ステップS18−7)。
本実施形態によれば、多種多次元のタプルに対し、統一的に1つの木構造インデックスを構築し、そのペナルティとして、エントリ挿入前後での検索される確率に対応する値(すなわち検索される確率ないし検索される確率の近似値)の増加量が用いられている。このペナルティであれば、次元毎に大小関係を判別する必要はなく、エントリが含むキーの次元数や種類が異なっても定義可能となる。これにより、多種多次元のタプル集合を蓄積・検索する際の、複数のインデックスを用いることによるオーバーヘッド、すなわち処理量や記憶容量、処理速度が大きくなることを抑え、また多種多次元のタプル集合に対して検索効率を向上させるクラスタリングを実現することが可能となる。
また、本実施形態では、ペナルティの算出において、エントリが検索される確率に対応した値として、エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和を用い、該重みづけ付き正規化被検索面積が、該正規化被検索面積に、該属性が検索式に用いられる確率を掛け合わせた値であり、該正規化被検索面積が、数式((q−a)(b−p)−(q−p)/2)/((b−a)/2)(但し、p、qはそれぞれ、該キーに含まれる該属性の最小値、最大値。a、bはそれぞれ、それまで該検索木に挿入された全タプル集合に含まれる該属性の最小値、最大値。)(数式I)で規定される。
ある属性が検索式に用いられ、さらに該検索式において該属性の値範囲を指定した範囲条件が用いられている場合、該値範囲の始点、終点を示す2値が該属性の定義域内で一様の確率で選ばれると仮定すると、該エントリにアクセスする必要がある確率は数式Iで近似される。数式Iで求められる値が該正規化被検索面積である。重みづけ付き正規化被検索面積は、さらに該属性が検索式に用いられる確率を正規化被検索面積に乗じたものである。従って、エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和は、範囲検索時に、検索条件に適合するタプルを探すために該エントリにアクセスしなければならない確率ないし確率の近似値に相当する。該重み付け付き正規化被検索面積の和をペナルティとして用い、ペナルティをなるべく小さくする戦略の下、検索木を構築することにより、検索時にアクセスしなければならないエントリ数を総じて小さくすることが可能となる。すなわち、検索の処理量、処理速度を向上させることが可能となる。
なお、本発明が特徴とする構成と、上記実施形態における構成との対応関係は次のとおりである。
本発明の特徴は、蓄積検索対象の情報の単位であるタプル(図3)は、属性−値の組の並びを少なくとも含む1以上の長さを有するものであり、該属性の種類や該並びの長さが同じまたは異なる1つ以上の該タプルが複数記憶されるものであり、該タプルから検索キーがインデックス化され検索木(図6)が構築されるものであり、該検索木はノード(図6のルートノード401、インナーノード402、リーフノード403)を階層的に有する構成であり、該ノードの内最下層のリーフノードはエントリとして該タプルを識別するタプル識別子(タプルID)とキーを有するものであり(図8)、該ノードの内該リーフノードより上位のインナーノードはエントリとして下位ノードである子ノードの位置情報であるポインタとキーを有するものであり(図9)、該インデックスの構築において、エントリをノードに挿入する際、1つの挿入すべきエントリXと、該エントリを挿入すべきレベル数L(リーフノードを0として階層が上がるごとに1増える階層数)が与えられた際(図12のステップS11−1、図13のフロー)、はじめにルートノードを操作対象ノードとし(図13のステップS12−1)、操作対象ノードにおいて、「該操作対象ノードがすでに含む既存エントリに対し、該エントリXを挿入した場合のペナルティ」が最も小さい該既存エントリを選出し(図13のステップS12−13、S12−14、S12−15、S12−16、S12−17)、該既存エントリに含まれるポインタが指し示す子ノードを次の操作対象ノードと選定し(図13のステップS12−18)、該次の操作対象ノードのレベル数がLより大きい場合は(図13のステップS12−2で「NO」)、該次の操作対象ノードからさらに次の操作対象ノードを選定することを再帰的に繰り返し(図13のステップS12−13、S12−14、S12−15、S12−16、S12−17、S12−18)、該次の操作対象ノードのレベル数がLに到達した場合は(図13のステップS12−2で「YES」)、このノードを選択ノードとするステップ(図13のステップS12−19)と、選択ノードが許容できる最大数のエントリを持っていない場合において(図12のステップS11−2で「YES」)、選択ノードに対し、エントリXを追加するステップと(図12のステップS11−3)、選択ノードが既に許容できる最大数のエントリを持っている場合において(図12のステップS11−2で「NO」)、エントリXを追加しつつ選択ノードの分割を行うステップ(図12のステップS11−4、図14〜図15のステップS13−1およびS13−2以降のステップ)と、分割を行った場合において、選択ノードの上位ノードのエントリを更新するステップ(図12のステップS11−5、図19のフロー)と、を含むことを特徴とする。このペナルティは、例えば、該操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAが検索される確率に対応した値の増分を示す値として定義する(関数P2、図13のステップS12−12、12−15、S12−16)ことができる。
また、他の発明は、上記分割を行うステップが、選択ノードが含む複数のエントリにエントリXを追加した各エントリを2つのグループに順次、振り分ける際に(図15のステップS13−47、S13−48)、各グループがすでに含むエントリの和をとったエントリ((G1)、(G2))を既存エントリAとし、該振り分けられるエントリ(Ec)をエントリBとしてグループ毎に求めた各ペナルティに基づいて振り分け先のグループを選択して振り分けを行うステップ(図15のステップS13−36〜S13−48)と、該2つのグループうちの1つのグループに振り分けられた各エントリを選択ノードのエントリとするとともに、もう1つのグループに振り分けられた各エントリを新たに生成したノードのエントリとするステップ(図15のステップS13−49)と、該新たに生成したノードのエントリを該ノードの親ノードに挿入するステップ(図16のステップS13−52)と、を含むことを特徴とする。
また、他の発明は、上記選択ノードを決定するステップが、操作対象ノードにおいて、ペナルティが最も小さい既存エントリを選出する(図13のステップS12−18)ことを特徴とする。
また、他の発明は、上記ペナルティが、操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、エントリBを挿入する前のエントリAと、挿入した後のエントリAとを比べた場合の、エントリAが検索される確率に対応した値の増分を示す値として定義され(関数P2、図13のステップS12−12、12−15、S12−16)、エントリAが検索される確率に対応した値(Q2(C))として、エントリAに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和(ΣCi(S(Ci)・R(Ci)))を用い、該重みづけ付き正規化被検索面積は、正規化被検索面積(S(Ci))に、該属性が検索式に用いられる確率(R(Ci))を掛け合わせた値であり、正規化被検索面積は、数式((q−a)(b−p)−(q−p)/2)/((b−a)/2)(但し、p、qはそれぞれ、該キーに含まれる該属性の最小値、最大値。a、bはそれぞれ、それまで該検索木に挿入された全タプル集合に含まれる該属性の最小値、最大値。)で規定される、ことを特徴とする。なお、該キーに含まれる属性の最小値はpCi、最大値はqCiに、検索木に挿入された全タプル集合に含まれる該属性の最小値はaCiに、最大値はbCiに、それぞれ対応するものでもある。
また、他の発明は、上記ペナルティが、操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、エントリBを挿入する前のエントリAと、挿入した後のエントリAとを比べた場合の、エントリAに含まれるキーに含まれる属性種類数(Q1(C))の増分(関数P1)を示す値であることを特徴とする。
また、他の発明は、選択ノードを決定するステップが、2種のペナルティ(関数P1および関数P2)を用い、操作対象ノードにおいて、第一のペナルティ(関数P1)が最も小さい既存エントリを選出し(図13のステップS12−3〜12−10)、このとき該最も小さい既存エントリが複数存在する場合には、さらに、該最も小さい既存エントリのうち、第二のペナルティ(関数P2)が最も小さい既存エントリを選出する(図13のステップS12−11〜12−18)ことを特徴とする。
また、他の発明は、第一のペナルティ(関数P1)が、操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAに含まれるキーに含まれる属性種類数(Q1(C))の増分を示す値であり、第二のペナルティが、操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAが検索される確率に対応した値(Q2(C))の増分を示す値(関数P2)であることを特徴とする。
また、他の発明は。エントリが検索される確率に対応した値(Q2(C))として、エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和(ΣCi(S(Ci)・R(Ci)))を用いることを特徴とする。
また、他の発明は、属性が検索式に用いられる確率(R(Ci))として、属性出現回数をタプル総数で除した値を用い、該属性出現回数は、それまでに該検索木に挿入された全タプル集合における該属性の出現回数であり、該タプル総数は、それまでに該検索木に挿入された全タプル集合の要素数((全タプル集合YにおけるCiの出現回数)/(全タプル集合Yの要素数))である、ことを特徴とする。
また、他の発明は、上記検索木を用いた検索において(図20のフロー)、検索式としてのキーである検索キーに対し、ルートノードからその下位のノードへと検索対象を変えながら、1つの該ノードを検索対象とし、該ノードがインナーノードであれば(図20のステップS18−1で「NO」)、該ノードに含まれる各エントリについて、該エントリのキーが検索キーに含まれる各属性を全て含み、かつ、該検索キーに含まれる各属性に対応する値または値範囲と該エントリのキーに含まれる該属性に対応する値または値範囲とが一致または部分的に一致する(一方の値または値範囲が、他方の値範囲に含まれるまたは一部重なる)かを調べる検索手順を行い(ステップS18−4、S18−5)、一致または部分的に一致する場合には(ステップS18−5で「YES」)、該エントリのポインタで接続されたノードを検索対象、該検索キーを検索キーとしてノード検索手順を再帰的に行い(ステップS18−7)、また、該ノードがリーフノードであれば(ステップS18−1で「YES」)、該ノードに含まれる各エントリについて、該エントリのキーが検索キーに含まれる各属性を全て含み、かつ、検索キーに含まれる各属性に対応する値または値範囲に該エントリのキーに含まれる該属性に対応する値が含まれるかを調べ、含まれる場合には該エントリのタプル識別子を検索結果タプル識別子集合に加える(ステップS18−2)、ノード検索ステップ、を有することを特徴とする。
また、本発明は、他の次のような態様としてとらえることもできる。
本発明の他の態様は、検索木のペナルティとして、重みづけ付き正規化被検索面積の和の増加量(関数P2)に基づくペナルティに加えて、エントリに含まれるキーに含まれる属性種類数の増加量(関数P1)を用いることとした。これにより、該重みづけ付き正規化被検索面積の和の増加量のみをペナルティとした場合以上に、さらに強力にエントリの次元増加が抑えられ、「次元の呪い」の問題を抑制することができる。すなわち、検索木のペナルティを2つ使用し、第一のペナルティとして、該「エントリに含まれるキーに含まれる属性種類数の増加量」(関数P1)を用い、第二のペナルティとして、エントリ挿入前後での検索される確率ないし検索される確率の近似値の増加量、すなわち該「エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和の増加量」(関数P2)を用い、部分木選択手順において、第一のペナルティが最も小さいエントリが複数存在する場合に(図13のステップS12−13で判定)、それらの間で第二のペナルティを比較し(図13のステップS12−15)、第二のペナルティが最も小さいエントリを選ぶこととした(図13のステップS12−18)。これにより、第一のペナルティによる次元増加低減効果と、第二のペナルティによる検索効率化効果を合わせ持った、検索木構築方法となる。特に、第二のペナルティとして該「エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和の増加量」を用いた場合には、第一のペナルティが属性の種類だけを考慮するのに対し、第二のペナルティによる「各属性(次元)の値までを考慮することによる検索効率化効果」を合わせ持った、検索木構築方法となると言える。
101 ネットワーク
201 サーバ・コンピュータ装置
202 通信部
203 演算部
304 記憶部
301 クライアント・コンピュータ装置
302 通信部
303 タプル/検索式作成表示部
401 ルートノード
402 インナーノード
403 リーフノード
501 タプル表
502 インナーノードのエントリ表
503 リーフノードのエントリ表
504 属性表

Claims (16)

  1. 蓄積検索対象の情報の単位であるタプルは、属性−値の組の並びを少なくとも含む1以上の長さを有するものであり、該属性の種類や該並びの長さが同じまたは異なる1つ以上の該タプルが複数記憶されるものであり、該タプルから検索キーがインデックス化され検索木が構築されるものであり、該検索木はノードを階層的に有する構成であり、該ノードの内最下層のリーフノードはエントリとして該タプルを識別するタプル識別子とキーを有するものであり、該ノードの内該リーフノードより上位のインナーノードはエントリとして下位ノードである子ノードの位置情報であるポインタとキーを有するものであり、
    コンピュータが、
    該インデックスの構築において、エントリをノードに挿入する際、
    1つの挿入すべきエントリXと、該エントリを挿入すべき、前記リーフノードを0として階層が上がるごとに1増える階層数であるレベル数Lが与えられた際、
    はじめにルートノードを操作対象ノードとし、
    操作対象ノードにおいて、「該操作対象ノードがすでに含む既存エントリに対し、該エントリXを挿入した場合のペナルティ」に基づいて1つの該既存エントリを選出し、
    該既存エントリに含まれるポインタが指し示す子ノードを次の操作対象ノードと選定し、
    該次の操作対象ノードのレベル数がLより大きい場合は、該次の操作対象ノードからさらに次の操作対象ノードを選定することを再帰的に繰り返し、
    該次の操作対象ノードのレベル数がLに到達した場合は、このノードを選択ノードに決定するステップと、
    前記選択ノードが許容できる最大数のエントリを持っていない場合において、前記選択ノードに対し、前記エントリXを追加するステップと、
    前記選択ノードが既に許容できる最大数のエントリを持っている場合において、前記エントリXを追加しつつ前記選択ノードの分割を行うステップと、
    前記分割を行った場合において、前記選択ノードの上位ノードのエントリを更新するステップと、
    を実行し、
    前記選択ノードを決定するステップにおいて、
    前記操作対象ノードにおいて、前記ペナルティが最も小さい前記既存エントリを選出し、
    前記ペナルティが、
    前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAが検索される確率に対応した値の増分を示す値として定義され、
    該エントリAが検索される確率に対応した値として、
    該エントリAに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和を用い、
    該重みづけ付き正規化被検索面積は、
    正規化被検索面積に、該属性が検索式に用いられる確率を掛け合わせた値であり、
    該正規化被検索面積は、数式
    ((q−a)(b−p)−(q−p)/2)/((b−a)/2)
    (但し、p、qはそれぞれ、該キーに含まれる該属性の最小値、最大値。a、bはそれぞれ、それまで該検索木に挿入された全タプル集合に含まれる該属性の最小値、最大値。)
    で規定される、
    ことを特徴とする情報蓄積検索方法。
  2. 請求項1において、
    前記選択ノードを決定するステップにおいて、
    記ペナルティを第二のペナルティとし、
    第一のペナルティを、
    前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAに含まれるキーに含まれる属性種類数の増分を示す値とし、
    前記操作対象ノードにおいて、前記第一のペナルティが最も小さい前記既存エントリを選出し、このとき該最も小さい既存エントリが複数存在する場合には、さらに、該最も小さい既存エントリのうち、前記第二のペナルティが最も小さい既存エントリを選出する
    ことを特徴とする情報蓄積検索方法。
  3. 蓄積検索対象の情報の単位であるタプルは、属性−値の組の並びを少なくとも含む1以上の長さを有するものであり、該属性の種類や該並びの長さが同じまたは異なる1つ以上の該タプルが複数記憶されるものであり、該タプルから検索キーがインデックス化され検索木が構築されるものであり、該検索木はノードを階層的に有する構成であり、該ノードの内最下層のリーフノードはエントリとして該タプルを識別するタプル識別子とキーを有するものであり、該ノードの内該リーフノードより上位のインナーノードはエントリとして下位ノードである子ノードの位置情報であるポインタとキーを有するものであり、
    コンピュータが、
    該インデックスの構築において、エントリをノードに挿入する際、
    1つの挿入すべきエントリXと、該エントリを挿入すべき、前記リーフノードを0として階層が上がるごとに1増える階層数であるレベル数Lが与えられた際、
    はじめにルートノードを操作対象ノードとし、
    操作対象ノードにおいて、「該操作対象ノードがすでに含む既存エントリに対し、該エントリXを挿入した場合のペナルティ」に基づいて1つの該既存エントリを選出し、
    該既存エントリに含まれるポインタが指し示す子ノードを次の操作対象ノードと選定し、
    該次の操作対象ノードのレベル数がLより大きい場合は、該次の操作対象ノードからさらに次の操作対象ノードを選定することを再帰的に繰り返し、
    該次の操作対象ノードのレベル数がLに到達した場合は、このノードを選択ノードに決定するステップと、
    前記選択ノードが許容できる最大数のエントリを持っていない場合において、前記選択ノードに対し、前記エントリXを追加するステップと、
    前記選択ノードが既に許容できる最大数のエントリを持っている場合において、前記エントリXを追加しつつ前記選択ノードの分割を行うステップと、
    前記分割を行った場合において、前記選択ノードの上位ノードのエントリを更新するステップと、
    を実行し、
    前記選択ノードを決定するステップにおいて、
    2種の前記ペナルティを用い、
    前記操作対象ノードにおいて、第一のペナルティが最も小さい前記既存エントリを選出し、このとき該最も小さい既存エントリが複数存在する場合には、さらに、該最も小さい既存エントリのうち、第二のペナルティが最も小さい既存エントリを選出する
    ことを特徴とする情報蓄積検索方法。
  4. 請求項3において、
    前記第一のペナルティが、前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAに含まれるキーに含まれる属性種類数の増分を示す値であり、
    前記第二のペナルティが、前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAが検索される確率に対応した値の増分を示す値である
    ことを特徴とする情報蓄積検索方法。
  5. 請求項4において、
    前記エントリが検索される確率に対応した値として、
    前記エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和を用いる
    ことを特徴とする情報蓄積検索方法。
  6. 請求項1または5において、
    前記属性が検索式に用いられる確率として、属性出現回数をタプル総数で除した値を用い、
    該属性出現回数は、それまでに該検索木に挿入された全タプル集合における該属性の出現回数であり、
    該タプル総数は、それまでに該検索木に挿入された全タプル集合の要素数である、
    ことを特徴とする情報蓄積検索方法。
  7. 請求項1ないし6のいずれか1項において、
    前記検索木を用いた検索において、
    検索式としての前記キーである検索キーに対し、
    前記ルートノードからその下位の前記ノードへと検索対象を変えながら、
    1つの該ノードを検索対象とし、
    該ノードが前記インナーノードであれば、該ノードに含まれる前記各エントリについて、該エントリのキーが前記検索キーに含まれる各属性を全て含み、かつ、該検索キーに含まれる各属性に対応する値または値範囲と該エントリのキーに含まれる該属性に対応する値または値範囲とが一致または部分的に一致する(一方の値または値範囲が、他方の値範囲に含まれるまたは一部重なる)かを調べる検索手順を行い、一致または部分的に一致する場合には、該エントリの前記ポインタで接続されたノードを検索対象、該検索キーを検索キーとして前記検索手順を再帰的に行い、
    また、該ノードが前記リーフノードであれば、該ノードに含まれる前記各エントリについて、該エントリのキーが前記検索キーに含まれる各属性を全て含み、かつ、前記検索キーに含まれる各属性に対応する値または値範囲に該エントリのキーに含まれる該属性に対応する値が含まれるかを調べ、含まれる場合には該エントリの前記タプル識別子を検索結果タプル識別子集合に加えるノード検索ステップ、
    を有することを特徴とする情報蓄積検索方法。
  8. 請求項1ないし7のいずれか1項において、
    前記分割を行うステップが、
    前記選択ノードが含む複数のエントリに前記エントリXを追加した各エントリを2つのグループに順次、振り分ける際に、各グループがすでに含むエントリの和をとったエントリを既存エントリAとし、該振り分けられるエントリをエントリBとしてグループ毎に求めた各前記ペナルティに基づいて振り分け先のグループを選択して振り分けを行うステップと、
    該2つのグループうちの1つのグループに振り分けられた各エントリを前記選択ノードのエントリとするとともに、もう1つのグループに振り分けられた各エントリを新たに生成したノードのエントリとするステップと、
    該新たに生成したノードのエントリを該ノードの親ノードに挿入するステップと、
    を含むことを特徴とする情報蓄積検索方法。
  9. 蓄積検索対象の情報の単位であるタプルは、属性−値の組の並びを少なくとも含む1以上の長さを有するものであり、該属性の種類や該並びの長さが同じまたは異なる1つ以上の該タプルが複数記憶されるものであり、該タプルから検索キーがインデックス化され検索木が構築されるものであり、該検索木はノードを階層的に有する構成であり、該ノードの内最下層のリーフノードはエントリとして該タプルを識別するタプル識別子とキーを有するものであり、該ノードの内該リーフノードより上位のインナーノードはエントリとして下位ノードである子ノードの位置情報であるポインタとキーを有するものであり、
    該インデックスの構築において、エントリをノードに挿入する際、
    1つの挿入すべきエントリXと、該エントリを挿入すべき、前記リーフノードを0として階層が上がるごとに1増える階層数であるレベル数Lが与えられた際、
    はじめにルートノードを操作対象ノードとし、
    操作対象ノードにおいて、「該操作対象ノードがすでに含む既存エントリに対し、該エントリXを挿入した場合のペナルティ」に基づいて1つの該既存エントリを選出し、
    該既存エントリに含まれるポインタが指し示す子ノードを次の操作対象ノードと選定し、
    該次の操作対象ノードのレベル数がLより大きい場合は、該次の操作対象ノードからさらに次の操作対象ノードを選定することを再帰的に繰り返し、
    該次の操作対象ノードのレベル数がLに到達した場合は、このノードを選択ノードに決定するステップと、
    前記選択ノードが許容できる最大数のエントリを持っていない場合において、前記選択ノードに対し、前記エントリXを追加するステップと、
    前記選択ノードが既に許容できる最大数のエントリを持っている場合において、前記エントリXを追加しつつ前記選択ノードの分割を行うステップと、
    前記分割を行った場合において、前記選択ノードの上位ノードのエントリを更新するステップと、
    をコンピュータに実行させ、
    前記選択ノードを決定するステップにおいて、
    前記操作対象ノードにおいて、前記ペナルティが最も小さい前記既存エントリを選出し、
    前記ペナルティが、
    前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAが検索される確率に対応した値の増分を示す値として定義され、
    該エントリAが検索される確率に対応した値として、
    該エントリAに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和を用い、
    該重みづけ付き正規化被検索面積は、
    正規化被検索面積に、該属性が検索式に用いられる確率を掛け合わせた値であり、
    該正規化被検索面積は、数式
    ((q−a)(b−p)−(q−p)/2)/((b−a)/2)
    (但し、p、qはそれぞれ、該キーに含まれる該属性の最小値、最大値。a、bはそれぞれ、それまで該検索木に挿入された全タプル集合に含まれる該属性の最小値、最大値。)
    で規定される、
    ことを特徴とする情報蓄積検索プログラム。
  10. 請求項9において、
    記ペナルティを第二のペナルティとし、
    第一のペナルティを、
    前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAに含まれるキーに含まれる属性種類数の増分を示す値とし、
    前記操作対象ノードにおいて、前記第一のペナルティが最も小さい前記既存エントリを選出し、このとき該最も小さい既存エントリが複数存在する場合には、さらに、該最も小さい既存エントリのうち、前記第二のペナルティが最も小さい既存エントリを選出する
    ことを特徴とする情報蓄積検索プログラム。
  11. 蓄積検索対象の情報の単位であるタプルは、属性−値の組の並びを少なくとも含む1以上の長さを有するものであり、該属性の種類や該並びの長さが同じまたは異なる1つ以上の該タプルが複数記憶されるものであり、該タプルから検索キーがインデックス化され検索木が構築されるものであり、該検索木はノードを階層的に有する構成であり、該ノードの内最下層のリーフノードはエントリとして該タプルを識別するタプル識別子とキーを有するものであり、該ノードの内該リーフノードより上位のインナーノードはエントリとして下位ノードである子ノードの位置情報であるポインタとキーを有するものであり、
    該インデックスの構築において、エントリをノードに挿入する際、
    1つの挿入すべきエントリXと、該エントリを挿入すべき、前記リーフノードを0として階層が上がるごとに1増える階層数であるレベル数Lが与えられた際、
    はじめにルートノードを操作対象ノードとし、
    操作対象ノードにおいて、「該操作対象ノードがすでに含む既存エントリに対し、該エントリXを挿入した場合のペナルティ」に基づいて1つの該既存エントリを選出し、
    該既存エントリに含まれるポインタが指し示す子ノードを次の操作対象ノードと選定し、
    該次の操作対象ノードのレベル数がLより大きい場合は、該次の操作対象ノードからさらに次の操作対象ノードを選定することを再帰的に繰り返し、
    該次の操作対象ノードのレベル数がLに到達した場合は、このノードを選択ノードに決定するステップと、
    前記選択ノードが許容できる最大数のエントリを持っていない場合において、前記選択ノードに対し、前記エントリXを追加するステップと、
    前記選択ノードが既に許容できる最大数のエントリを持っている場合において、前記エントリXを追加しつつ前記選択ノードの分割を行うステップと、
    前記分割を行った場合において、前記選択ノードの上位ノードのエントリを更新するステップと、
    をコンピュータに実行させ、
    前記選択ノードを決定するステップにおいて、
    2種の前記ペナルティを用い、
    前記操作対象ノードにおいて、第一のペナルティが最も小さい前記既存エントリを選出し、このとき該最も小さい既存エントリが複数存在する場合には、さらに、該最も小さい既存エントリのうち、第二のペナルティが最も小さい既存エントリを選出する
    ことを特徴とする情報蓄積検索プログラム。
  12. 請求項11において、
    前記第一のペナルティが、前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAに含まれるキーに含まれる属性種類数の増分を示す値であり、
    前記第二のペナルティが、前記操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAが検索される確率に対応した値の増分を示す値である
    ことを特徴とする情報蓄積検索プログラム。
  13. 請求項12において、
    前記エントリが検索される確率に対応した値として、
    前記エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化被検索面積の和を用いる
    ことを特徴とする情報蓄積検索プログラム。
  14. 請求項9または13において、
    前記属性が検索式に用いられる確率として、属性出現回数をタプル総数で除した値を用い、
    該属性出現回数は、それまでに該検索木に挿入された全タプル集合における該属性の出現回数であり、
    該タプル総数は、それまでに該検索木に挿入された全タプル集合の要素数である、
    ことを特徴とする情報蓄積検索プログラム。
  15. 請求項9ないし14のいずれか1項において、
    前記検索木を用いた検索において、
    検索式としての前記キーである検索キーに対し、
    前記ルートノードからその下位の前記ノードへと検索対象を変えながら、
    1つの該ノードを検索対象とし、
    該ノードが前記インナーノードであれば、該ノードに含まれる前記各エントリについて、該エントリのキーが前記検索キーに含まれる各属性を全て含み、かつ、該検索キーに含まれる各属性に対応する値または値範囲と該エントリのキーに含まれる該属性に対応する値または値範囲とが一致または部分的に一致する(一方の値または値範囲が、他方の値範囲に含まれるまたは一部重なる)かを調べる検索手順を行い、一致または部分的に一致する場合には、該エントリの前記ポインタで接続されたノードを検索対象、該検索キーを検索キーとして前記検索手順を再帰的に行い、
    また、該ノードが前記リーフノードであれば、該ノードに含まれる前記各エントリについて、該エントリのキーが前記検索キーに含まれる各属性を全て含み、かつ、前記検索キーに含まれる各属性に対応する値または値範囲に該エントリのキーに含まれる該属性に対応する値が含まれるかを調べ、含まれる場合には該エントリの前記タプル識別子を検索結果タプル識別子集合に加えるノード検索ステップ、
    を有することを特徴とする情報蓄積検索プログラム。
  16. 請求項9ないし15のいずれか1項において、
    前記分割を行うステップが、
    前記選択ノードが含む複数のエントリに前記エントリXを追加した各エントリを2つのグループに順次、振り分ける際に、各グループがすでに含むエントリの和をとったエントリを既存エントリAとし、該振り分けられるエントリをエントリBとしてグループ毎に求めた各前記ペナルティに基づいて振り分け先のグループを選択して振り分けを行うステップと、
    該2つのグループうちの1つのグループに振り分けられた各エントリを前記選択ノードのエントリとするとともに、もう1つのグループに振り分けられた各エントリを新たに生成したノードのエントリとするステップと、
    該新たに生成したノードのエントリを該ノードの親ノードに挿入するステップと、
    を含むことを特徴とする情報蓄積検索プログラム。
JP2010031795A 2010-02-16 2010-02-16 情報蓄積検索方法及び情報蓄積検索プログラム Expired - Fee Related JP5470082B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010031795A JP5470082B2 (ja) 2010-02-16 2010-02-16 情報蓄積検索方法及び情報蓄積検索プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010031795A JP5470082B2 (ja) 2010-02-16 2010-02-16 情報蓄積検索方法及び情報蓄積検索プログラム

Publications (2)

Publication Number Publication Date
JP2011170461A JP2011170461A (ja) 2011-09-01
JP5470082B2 true JP5470082B2 (ja) 2014-04-16

Family

ID=44684550

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010031795A Expired - Fee Related JP5470082B2 (ja) 2010-02-16 2010-02-16 情報蓄積検索方法及び情報蓄積検索プログラム

Country Status (1)

Country Link
JP (1) JP5470082B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102890714B (zh) * 2012-09-24 2015-04-15 华为技术有限公司 数据索引方法及装置
JP5953262B2 (ja) * 2013-05-09 2016-07-20 日本電信電話株式会社 データ索引装置、データ索引方法及びプログラム
JP5953277B2 (ja) * 2013-09-11 2016-07-20 日本電信電話株式会社 データ索引装置、データ索引方法及びプログラム
CN111566627B (zh) * 2017-11-09 2023-07-21 日本电信电话株式会社 信息蓄积装置、数据处理系统及记录介质
JP7481787B2 (ja) * 2020-01-16 2024-05-13 株式会社エヌ・ティ・ティ・データ・セキスイシステムズ インデックス管理装置

Also Published As

Publication number Publication date
JP2011170461A (ja) 2011-09-01

Similar Documents

Publication Publication Date Title
US10754887B1 (en) Systems and methods for multimedia image clustering
CN106528648B (zh) 结合Redis内存数据库的分布式RDF关键词近似搜索方法
EP1218831A1 (en) System and method for performing similarity searching
US11748351B2 (en) Class specific query processing
US10275486B2 (en) Multi-system segmented search processing
US11442915B2 (en) Methods and systems for extracting and visualizing patterns in large-scale data sets
JPWO2014109127A1 (ja) インデックス生成装置及び方法並びに検索装置及び検索方法
JP5470082B2 (ja) 情報蓄積検索方法及び情報蓄積検索プログラム
AU2017316661B2 (en) Semantic distance systems and methods for determining related ontological data
Singh et al. Nearest keyword set search in multi-dimensional datasets
US20220391367A1 (en) Efficient Indexing for Querying Arrays in Databases
US20230124432A1 (en) Database Indexing Using Structure-Preserving Dimensionality Reduction to Accelerate Database Operations
CN110866276A (zh) 一种混合云环境下数据的隐私保护方法
JP2010277329A (ja) 近傍探索装置
US10089361B2 (en) Efficient mechanism for managing hierarchical relationships in a relational database system
JP2012063959A (ja) 索引方法、検索方法、及びその記憶媒体
JP5430436B2 (ja) 情報蓄積検索方法及び情報蓄積検索プログラム
RU2433467C1 (ru) Способ формирования структуры агрегированных данных и способ поиска данных посредством структуры агрегированных данных в системе управления базами данных
JP6065001B2 (ja) データ検索装置、データ検索方法およびデータ検索用プログラム
KR20220099745A (ko) 지리공간 블록체인 데이터 검색을 위한 공간 분할 기반의 트리 인덱싱 및 질의어 처리 방법 및 장치
CN104424190A (zh) 整合多个数据库的方法及装置
Wang et al. Hypergraph index: an index for context-aware nearest neighbor query on social networks
JP2016062522A (ja) データベース管理システム、データベースシステム、データベース管理方法およびデータベース管理プログラム
JP6167531B2 (ja) 領域検索方法、領域インデックス構築方法および領域検索装置
US20240184793A1 (en) Deep mining of enterprise data sources

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120119

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130527

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130604

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20130605

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130724

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130805

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131029

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131226

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140128

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140203

R150 Certificate of patent or registration of utility model

Ref document number: 5470082

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees