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

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

Info

Publication number
JP5430436B2
JP5430436B2 JP2010031794A JP2010031794A JP5430436B2 JP 5430436 B2 JP5430436 B2 JP 5430436B2 JP 2010031794 A JP2010031794 A JP 2010031794A JP 2010031794 A JP2010031794 A JP 2010031794A JP 5430436 B2 JP5430436 B2 JP 5430436B2
Authority
JP
Japan
Prior art keywords
entry
node
search
value
key
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
JP2010031794A
Other languages
English (en)
Other versions
JP2011170460A (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 JP2010031794A priority Critical patent/JP5430436B2/ja
Publication of JP2011170460A publication Critical patent/JP2011170460A/ja
Application granted granted Critical
Publication of JP5430436B2 publication Critical patent/JP5430436B2/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*木を使うことが多い。これらの技術はファイルシステムにおいても活用されている。
これらのB+木やB*木を用いたインデックスは、各タプル内の1種類の属性に対する属性値(RDBで言えばある1つのカラムに入る値)の集合に対して構築される木の形をしたデータ構造(木構造)であり、検索木とも呼ばれる。タプル表にタプルを登録する際、インデックスの構築も行う(検索時に検索条件を指定したい属性毎に、この検索木を構築する)ことで、高速な検索が可能となる。
木構造は、ノードとノード間を結ぶ枝で表される。ノードはデータの集まりであり、後述する。木構造内では、ノードが階層構造をなしており、この内、上位のノードを親ノード、下位のノードを子ノードと称する。木構造の頂点にあるノードをルートノード、木構造の最底辺にあるノードをリーフノード、リーフノード以外のノードをインナーノードと称する。そして、レベル数は、各ノードに対して定義される、ノードの階層を意味する値である。
リーフノードは、タプル表における検索対象タプルのID(識別子)とキーを格納する。インナーノード(ルートノードを含む)は、自分の子ノードへのポインタを有する。また、自分に帰属するリーフノードがどのようなキー範囲のタプルを含んでいるかについても情報を格納する。従って、検索(Search)においては、インデックスを用いることで、該当する検索するキー範囲のタプルがどこに存在するかがわかるので、タプル表を全て検索する必要がなくなり、高速で検索することが可能となる。
なお、検索木を構築する際、ノードにエントリ(対応するポインタとキーの組み合わせ)が追加される。その手順がInsert(エントリ挿入手順)と呼ばれるものである。その際、どのノードにエントリをInsertするかを選択するのが、ChooseSubtree(部分木選択手順)と呼ばれる手順である。また、Insertする際に、対象となるノードが既に許容できる最大数のエントリを持っている場合にはノードの分割を行う。これが、Split(ノード分割手順)と呼ばれる手順である。Splitを行ったノードの親ノード(〜ルートノード)に対しては、子ノードのエントリを更新する必要が生じる。この更新作業がAdjustKeys(キー集合情報調整手順)と呼ばれる手順である。これらについては、後述する。
これらB木ないしその改良型は1つの属性に対して構築されるインデックスであるが、他にも、2つ以上の属性に対して構築されるインデックスが存在し、2つ以上の属性の値もしくは値の範囲を指定した検索を高速に実現するのに利用される。こうしたインデックスは複数の属性をもつタプル、すなわち多次元データを含むタプルに対するものであるため、多次元インデックスと呼ばれる。多次元インデックスの最も代表的なものはR木である。R木はB木と同様に木構造であり、R*木、R+木など多くの改良型が存在する。
これら従来の検索木の多くは、非特許文献1に記載されているように、共通して以下の特徴をもつ。すなわち、インデックスは木構造の検索木であり、1つ以上のノードを含んでいる。ルートノードと呼ぶ第1階層のノードからポインタによってノード間が階層的に接続されている。ノードは0から予め定められた閾値までの個数のエントリを含んでいる。リーフノードのエントリは、タプルのID(識別子)とタプルのキーの組から構成されている。一方、インナーノードの該エントリは、他のノードへのポインタと、他のノードが含むエントリ集合のキーの和をとったキーの組とから構成されている。そして、キーは、1以上の長さ(すなわち1以上のデータ列の長さ;以下同様)を有する属性−値または属性−値範囲の組の並びである。
一方、非特許文献1には、これらの検索木へのタプル挿入方法、すなわちタプルのインデキシング方法に関し、Insert、ChooseSubtree、Split、AdjustKeysが開示されているので、以下に記載する。
(Insert)
1つのエントリを、レベル数Lのノードに対しInsertする手順である。まず、このエントリとレベル数Lに対する部分木選択手順(ChooseSubtree、後述)を実施し、ノードを選択する。この選択されたレベル数Lのノードが予め決められた数未満のエントリを含む場合には、このノードにエントリを加える。一方、このノードが予め決められた数以上のエントリを含む場合には、ノード分割手順(Split、後述)を実施し、さらに、キー集合情報調整手順(AdjustKeys、後述)を実施する。
(ChooseSubtree)
ChooseSubtreeにおいては、1つのエントリXと、レベル数Lが与えられる。はじめに、ルートノードを操作対象のノードとして選択する。そして、この操作対象のノードが含むエントリのうち、「該操作対象ノードがすでに含む既存エントリに対し、該エントリXを挿入した場合のペナルティ」が最も小さいエントリを選出する。そして、このエントリに含まれるポインタが指し示す子ノードを、次の操作対象のノードとする。この操作を、操作対象のノードのレベル数がLとなるまで繰り返し、ノードを選択する。
(Split)
検索木内の1つのノードと、1つのエントリに対し、このノード内のキー集合とこのエントリ内のキーを含めたキー集合を2つのグループに分割し、そのうち1つを新しいノードに入れ、新しいノードをこのノードの親ノードに挿入する。
(AdjustKeys)
検索木内の1つのノードに対し、このノードが含むキー集合情報を親ノードに伝達し、親ノードにこのノード(親ノードから見て、子ノード)が含むキー集合情報を保持させる操作を、このノードからルートノードまで再帰的に行う。
また同様に、非特許文献1には、これらの検索木を用いたタプル検索方法(Search)が開示されているので、以下に記載する。
(Search)
検索では、検索式としてのキーである検索キーが与えられる。これに対して、上位のノードから、含まれるエントリを調査し、最終的に目的のエントリのキーを含むリーフノードを探していく。調査するノードがインナーノード(リーフノードでない)の場合、このノードに含まれる各エントリについて、エントリのキーが検索キーに含まれる各属性を全て含み、かつ、検索キーに含まれる各属性に対応する値または値範囲と該エントリのキーに含まれる該属性に対応する値または値範囲とが一致または部分的に一致するかを調べる。そして、これが、一致または部分的に一致する場合には、このエントリに対応するポインタが指定する子ノードを調査対象とし、また、このときの検索キーを新たな検索キーとしてノード検索手順を再帰的に行う。この調査を再帰的に行うと、調査対象のノードは最終的にリーフノードとなる。調査対象のノードがリーフノードとなった場合、このノードに含まれる各エントリについて、このエントリのキーが検索キーに含まれる各属性を全て含み、かつ、検索キーに含まれる各属性に対応する値または値範囲にこのエントリのキーに含まれる属性に対応する値が含まれるかを調べ、含まれる場合にはこのエントリのタプルのID(識別子)を検索結果タプル識別子集合に加える。
なお、ChooseSubtreeにおいて前述したペナルティとして、例えば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, Zurich, 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つのエントリを入力とするペナルティの計算において、該エントリのキーが含む全次元について、次元毎に大小関係を判別可能である必要があるが、多種多次元のタプルを下位に含むエントリ間では、そのキーが含む次元も異なるために、次元毎の大小関係を必ずしも判別できず、多種多次元のタプルに対する効率的なインデックスを構築することができなかった。
本発明は、このような事情を考慮し、上記の問題を解決すべくなされたもので、その目的は、多種多次元のタプルに対する検索を、タプル数や含まれる属性種類数が大きくなった場合にも、効率的に実現することにある。
上記課題を解決するため、請求項1記載の発明は、蓄積検索対象の情報の単位であるタプルは、属性−値の組の並びを少なくとも含む1以上の長さを有するものであり、該属性の種類や該並びの長さが同じまたは異なる1つ以上の該タプルが複数記憶されるものであり、該タプルから検索キーがインデックス化され検索木が構築されるものであり、該検索木はノードを階層的に有する構成であり、該ノードの内最下層のリーフノードはエントリとして該タプルを識別するタプル識別子とキーを有するものであり、該ノードの内該リーフノードより上位のインナーノードはエントリとして下位ノードである子ノードの位置情報であるポインタとキーを有するものであり、該インデックスの構築において、エントリをノードに挿入する際、1つの挿入すべきエントリXと、該エントリを挿入すべきレベル数L(前記リーフノードを0として階層が上がるごとに1増える階層数)が与えられた際、はじめにルートノードを操作対象ノードとし、操作対象ノードにおいて、「該操作対象ノードがすでに含む既存エントリに対し、該エントリXを挿入した場合のペナルティ」が最も小さい該既存エントリを選出し、該既存エントリに含まれるポインタが指し示す子ノードを次の操作対象ノードと選定し、該次の操作対象ノードのレベル数がLより大きい場合は、該次の操作対象ノードからさらに次の操作対象ノードを選定することを再帰的に繰り返し、該次の操作対象ノードのレベル数がLに到達した場合は、このノードを選択ノードとするステップと、前記選択ノードが許容できる最大数のエントリを持っていない場合において、前記選択ノードに対し、前記エントリXを追加するステップと、前記選択ノードが既に許容できる最大数のエントリを持っている場合において、前記エントリXを追加しつつ前記選択ノードの分割を行うステップと、前記分割を行った場合において、前記選択ノードの上位ノードのエントリを更新するステップと、を有する情報蓄積検索方法において、該ペナルティは、該操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAが検索される確率に対応した値の増分を示す値として定義される、ことを特徴とする情報蓄積検索方法である。
請求項2記載の発明は、請求項1に記載の分割を行うステップが、前記選択ノードが含む複数のエントリに前記エントリXを追加した各エントリを2つのグループに順次、振り分ける際に、各グループがすでに含むエントリの和をとったエントリを前記既存エントリAとし、該振り分けられるエントリを前記エントリBとしてグループ毎に求めた各前記ペナルティに基づいて振り分け先のグループを選択して振り分けを行うステップと、該2つのグループうちの1つのグループに振り分けられた各エントリを前記選択ノードのエントリとするとともに、もう1つのグループに振り分けられた各エントリを新たに生成したノードのエントリとするステップと、該新たに生成したノードのエントリを該ノードの親ノードに挿入するステップと、を含むことを特徴とする情報蓄積検索方法である。
請求項3記載の発明は、請求項2に記載の分割を行うステップにおいて、前記選択ノードが含む複数のエントリに前記エントリXを追加した各エントリを2つのグループに順次、振り分ける際、はじめに、前記各エントリに含まれる任意の2つのエントリの一方を前記既存エントリAとし、他方のエントリを前記エントリBとして求めた前記ペナルティから、前記他方のエントリが検索される確率に対応した値を減じた値が最も大きくなる2つのエントリを、前記2つのグループに振り分けることを特徴とする情報蓄積検索方法である。
請求項4記載の発明は、請求項1ないし3に記載のペナルティの算出において、前記エントリが検索される確率に対応した値として、該エントリに含まれる前記キーに含まれる各属性に対する重みづけ付き正規化長の和を用い、該重みづけ付き正規化長は、正規化長に、該属性が検索式に用いられる確率を掛け合わせた値であり、該正規化長は、該キーに含まれる該属性の最大値から最小値を引いた値を、それまで該検索木に挿入された全タプル集合に含まれる該属性の最大値から最小値を引いた値で除した値である、ことを特徴とする情報蓄積検索方法である。
請求項5記載の発明は、請求項4において、前記属性が検索式に用いられる確率として、属性出現回数をタプル総数で除した値を用い、該属性出現回数は、それまでに該検索木に挿入された全タプル集合における該属性の出現回数であり、該タプル総数は、それまでに該検索木に挿入された全タプル集合の要素数である、ことを特徴とする情報蓄積検索方法である。
請求項6記載の発明は、請求項1ないし5に記載の前記検索木を用いた検索において、検索式としての前記キーである検索キーに対し、前記ルートノードからその下位の前記ノードへと検索対象を変えながら、1つの該ノードを検索対象とし、該ノードが前記インナーノードであれば、該ノードに含まれる前記各エントリについて、該エントリのキーが前記検索キーに含まれる各属性を全て含み、かつ、該検索キーに含まれる各属性に対応する値または値範囲と該エントリのキーに含まれる該属性に対応する値または値範囲とが一致または部分的に一致する(一方の値または値範囲が、他方の値範囲に含まれるまたは一部重なる)かを調べる検索手順を行い、一致または部分的に一致する場合には、該エントリの前記ポインタで接続されたノードを検索対象、該検索キーを検索キーとして前記ノード検索手順を再帰的に行い、また、該ノードが前記リーフノードであれば、該ノードに含まれる前記各エントリについて、該エントリのキーが前記検索キーに含まれる各属性を全て含み、かつ、前記検索キーに含まれる各属性に対応する値または値範囲に該エントリのキーに含まれる該属性に対応する値が含まれるかを調べ、含まれる場合には該エントリの前記タプル識別子を検索結果タプル識別子集合に加えるノード検索ステップ、を有することを特徴とする情報蓄積検索方法である。
請求項7記載の発明は、蓄積検索対象の情報の単位であるタプルは、属性−値の組の並びを少なくとも含む1以上の長さを有するものであり、該属性の種類や該並びの長さが同じまたは異なる1つ以上の該タプルが複数記憶されるものであり、該タプルから検索キーがインデックス化され検索木が構築されるものであり、該検索木はノードを階層的に有する構成であり、該ノードの内最下層のリーフノードはエントリとして該タプルを識別するタプル識別子とキーを有するものであり、該ノードの内該リーフノードより上位のインナーノードはエントリとして下位ノードである子ノードの位置情報であるポインタとキーを有するものであり、該インデックスの構築において、エントリをノードに挿入する際、
1つの挿入すべきエントリXと、該エントリを挿入すべきレベル数L(前記リーフノードを0として階層が上がるごとに1増える階層数)が与えられた際、はじめにルートノードを操作対象ノードとし、操作対象ノードにおいて、「該操作対象ノードがすでに含む既存エントリに対し、該エントリXを挿入した場合のペナルティ」が最も小さい該既存エントリを選出し、該既存エントリに含まれるポインタが指し示す子ノードを次の操作対象ノードと選定し、該次の操作対象ノードのレベル数がLより大きい場合は、該次の操作対象ノードからさらに次の操作対象ノードを選定することを再帰的に繰り返し、該次の操作対象ノードのレベル数がLに到達した場合は、このノードを選択ノードとするステップと、前記選択ノードが許容できる最大数のエントリを持っていない場合において、前記選択ノードに対し、前記エントリXを追加するステップと、前記選択ノードが既に許容できる最大数のエントリを持っている場合において、前記エントリXを追加しつつ前記選択ノードの分割を行うステップと、前記分割を行った場合において、前記選択ノードの上位ノードのエントリを更新するステップと、をコンピュータを用いて実行するためのプログラムにおいて、該ペナルティは、該操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAが検索される確率に対応した値の増分を示す値として定義される、ことを特徴とする情報蓄積検索プログラムである。
請求項8記載の発明は、請求項7に記載の分割を行うステップが、前記選択ノードが含む複数のエントリに前記エントリXを追加した各エントリを2つのグループに順次、振り分ける際に、各グループがすでに含むエントリの和をとったエントリを前記既存エントリAとし、該振り分けられるエントリを前記エントリBとしてグループ毎に求めた各前記ペナルティに基づいて振り分け先のグループを選択して振り分けを行うステップと、該2つのグループうちの1つのグループに振り分けられた各エントリを前記選択ノードのエントリとするとともに、もう1つのグループに振り分けられた各エントリを新たに生成したノードのエントリとするステップと、該新たに生成したノードのエントリを該ノードの親ノードに挿入するステップと、を含むことを特徴とする情報蓄積検索プログラムである。
請求項9記載の発明は、請求項8に記載の分割を行うステップにおいて、前記選択ノードが含む複数のエントリに前記エントリXを追加した各エントリを2つのグループに順次、振り分ける際、はじめに、前記各エントリに含まれる任意の2つのエントリの一方を前記既存エントリAとし、他方のエントリを前記エントリBとして求めた前記ペナルティから、前記他方のエントリが検索される確率に対応した値を減じた値が最も大きくなる2つのエントリを、前記2つのグループに振り分けることを特徴とする情報蓄積検索プログラムである。
請求項10記載の発明は、請求項7ないし9に記載のペナルティの算出において、前記エントリが検索される確率に対応した値として、該エントリに含まれる前記キーに含まれる各属性に対する重みづけ付き正規化長の和を用い、該重みづけ付き正規化長は、正規化長に、該属性が検索式に用いられる確率を掛け合わせた値であり、該正規化長は、該キーに含まれる該属性の最大値から最小値を引いた値を、それまで該検索木に挿入された全タプル集合に含まれる該属性の最大値から最小値を引いた値で除した値である、ことを特徴とする情報蓄積検索プログラムである。
請求項11記載の発明は、請求項10において、前記属性が検索式に用いられる確率として、属性出現回数をタプル総数で除した値を用い、該属性出現回数は、それまでに該検索木に挿入された全タプル集合における該属性の出現回数であり、該タプル総数は、それまでに該検索木に挿入された全タプル集合の要素数である、ことを特徴とする情報蓄積検索プログラムである。
請求項12記載の発明は、請求項7ないし11に記載の前記検索木を用いた検索において、検索式としての前記キーである検索キーに対し、前記ルートノードからその下位の前記ノードへと検索対象を変えながら、1つの該ノードを検索対象とし、該ノードが前記インナーノードであれば、該ノードに含まれる前記各エントリについて、該エントリのキーが前記検索キーに含まれる各属性を全て含み、かつ、該検索キーに含まれる各属性に対応する値または値範囲と該エントリのキーに含まれる該属性に対応する値または値範囲とが一致または部分的に一致する(一方の値または値範囲が、他方の値範囲に含まれるまたは一部重なる)かを調べる検索手順を行い、一致または部分的に一致する場合には、該エントリの前記ポインタで接続されたノードを検索対象、該検索キーを検索キーとして前記ノード検索手順を再帰的に行い、また、該ノードが前記リーフノードであれば、該ノードに含まれる前記各エントリについて、該エントリのキーが前記検索キーに含まれる各属性を全て含み、かつ、前記検索キーに含まれる各属性に対応する値または値範囲に該エントリのキーに含まれる該属性に対応する値が含まれるかを調べ、含まれる場合には該エントリの前記タプル識別子を検索結果タプル識別子集合に加えるノード検索ステップ、を有することを特徴とする情報蓄積検索プログラムである。
本発明によれば、多種多次元のタプルに対し、統一的に1つの木構造インデックスを構築し、そのペナルティとして、エントリ挿入前後での検索される確率に対応する値(すなわち検索される確率ないし検索される確率の近似値)の増加量を用いることとした。このペナルティであれば、次元毎に大小関係を判別する必要はなく、エントリが含むキーの次元数や種類が異なっても定義可能となる。これにより、多種多次元のタプル集合を蓄積・検索する際の、複数のインデックスを用いることによるオーバーヘッド、すなわち処理量や記憶容量、処理速度が大きくなることを抑え、また多種多次元のタプル集合に対して検索効率を向上させるクラスタリングを実現することが可能となる。
また、本発明によれば、前記ペナルティとして、エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化長の和の増加量を用いるようにした。ある属性が検索式に用いられた場合、その値としてどの値を取り得るかの可能性は該属性の定義域内で一様と仮定すると、該エントリにアクセスする必要がある確率は(該エントリのキーに含まれる該属性の値範囲/該属性の定義域)で表されるが、さらにインデックスに蓄積した全タプルにおける該属性の最大値から最小値までを該属性の定義域と近似したものが該正規化長であり、重みづけ付き正規化長は、さらに該属性が検索式に用いられる確率を正規化長に乗じたものである。従って、エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化長の和は、検索時に、検索条件に適合するタプルを探すために該エントリにアクセスしなければならない確率の近似値に相当する。該ペナルティを用いることにより、検索時にアクセスしなければならないエントリ数を総じて小さくするよう木構造を構築することが可能となる。すなわち、検索の処理量、処理速度を向上させることが可能となる。
また、本発明によれば、該エントリの算出において用いる、属性が検索式に用いられる確率として、属性出現回数をタプル総数で除した値を用いた。これにより、各属性の検索式に用いられる確率が不明な場合でも、蓄積するタプル集合から該確率の推定値を得ることが可能となる。
本発明の情報蓄積検索方法を実行するための情報蓄積検索システム全体図を示す図である。 図1のシステムで用いられるタプルの例を示す図である。 図1のシステムで用いられる検索式の例を示す図である。 図1のサーバ・コンピュータ装置201の構成例を示すブロック図である。 図1のシステムで用いられるインデックスのデータ構造の例を示す図である。 図1のシステムで用いられるタプル表の例を示す図である。 図1のシステムで用いられるリーフノードのエントリ表の例を示す図である。 図1のシステムで用いられるインナーノードのエントリ表の例を示す図である。 図1のシステムで用いられる属性表の例を示す図である。 図1のクライアント・コンピュータ装置301の構成例を示すブロック図である。 図1のシステムにおけるエントリ挿入手順(Insert)のフローチャートである。 図1のシステムにおける部分木選択手順(ChooseSubtree)のフローチャートである。 図14とあわせて図1のシステムにおけるノード分割手順(Split)を示すフローチャートである。 図13とあわせて図1のシステムにおけるノード分割手順(Split)を示すフローチャートである。 図1のシステムにおけるノード分割手順によるノード分割例1を示す図である。 図1のシステムにおけるノード分割手順によるノード分割例2を示す図である。 図1のシステムにおけるキー集合情報調整手順(AdjustKeys)のフローチャートである。 図1のシステムにおけるノード検索手順(Search)のフローチャートである。
以下、図面を参照して本発明の実施形態について説明する。図1は、本発明の一実施形態による情報蓄積検索システムを示す概略ブロック図である。情報蓄積検索システムは、ネットワーク101を介して接続された、情報、すなわちタプルの蓄積・検索を行うサーバ・コンピュータ装置201と、タプルないし検索式の作成とサーバ・コンピュータ装置201とのタプルないし検索式ないし検索結果の送受信を行うクライアント・コンピュータ装置301とからなる。ネットワーク101は、インターネットなどの公衆網、LAN(Local Area Network)、専用線などの私設網からなる。なお、図1では簡単のためクライアント・コンピュータ装置301を1台のみ記載したが、それに限らず複数台設けても良い。
なお、サーバ・コンピュータ装置201およびクライアント・コンピュータ装置301は、コンピュータ及びその周辺装置と、そのコンピュータによって実行されるプログラムとを用いて実現することができる。また、そのプログラムは、コンピュータ読み取り可能な記録媒体や通信回線を介して提供することが可能である。
本実施形態では、サーバ・コンピュータ装置201によって、タプルを蓄積し、検索式によりタプルを検索する。タプルは、1つ以上の属性と値のペア(AVペア)から構成される。蓄積するタプルのAVペアの数やその属性の種類は様々である。図2にタプルの例を示す。図2(a)は、3次元データのタプルの例であり、この例では、「機種種別」、「使用者」および「使用開始年月日」の各属性に、「PC」、「○○太郎」および「2005/04/01」の各値がそれぞれ対(あるいは組)をなすことでタプルが構成されている。図2(b)は、7次元データのタプルの例であり、この例では、「機器種別」、「使用者」、「緯度」、「経度」、「センシング時刻」、「センサID」、および「センサ値」の各属性に、「温度センサ」、「○○太郎」、「126030」、「501018」、「2008/11/11 12:34:56」、「123456」および「23.5」の各値がそれぞれ対をなすことでタプルが構成されている。ここで、図2(b)のタプルでは、緯度、経度の単位は秒であり、北緯と東経が正、南緯と西経が負で表現されることとしている。
また、検索式は、1つ以上の属性と値ないし値の範囲のペアから構成される。図3に検索式の例を示す。検索式は、検索条件を満たすタプルを検索結果として得るための記述であり、図3に示す例では属性「機器種別」の値が「温度センサ」であり、属性「緯度」の値が値の範囲「126000〜127000」内にあり、属性「経度」の値が値の範囲「501000〜501100」内にあるタプルを検索結果とするものである。検索時には、検索式に含まれる全ての属性を含み、かつ該属性の値が検索式に含まれる該属性の値ないし値の範囲内にあるタプルを検索結果とする。例えば、図3の検索式による検索においては、図2の(b)のタプルが検索式に適合し、検索結果に含まれることになる。
次に、サーバ・コンピュータ装置201の内部構成について説明する。
図4は、サーバ・コンピュータ装置201の構成を示すブロック図である。サーバ・コンピュータ装置201は、クライアント・コンピュータ装置301からのタプル蓄積要求/タプル検索要求の受信または検索結果の送信を行う通信部202と、クライアント・コンピュータ装置301からの要求に応じて、インデックス構築を含む蓄積処理やインデックスを用いた検索処理を行う演算部203と、インデックスと属性表とタプル総数とタプル表とを保持する記憶部204とを備える。すなわち、記憶部204には、後述のインデックス、タプル表、属性表が格納される。
また、本実施形態では、記憶部204内における、検索式で示された検索条件を満たすタプルの格納位置を決定する際に、インデックスを用いたファイルアクセス法が採用されている。インデックスのデータ構造としては、背景技術で述べたような種々の検索木を用いることができる。本実施形態で用いられるインデックスのデータ構造の一例を図5に示す。インデックスのデータ構造は複数のノードと、階層的にそれらをつなぐ枝で表される木構造である。最も上位のノードをルートノードと呼び、最も下位のノードをリーフノードと呼ぶ。またリーフノード以外のノードをインナーノードと呼ぶ。図5に示す例では、4個のインナーノード402と、7個のリーフノード403とから検索木が構成されている。インナーノード402の最上位のノードがルートノード401である。各インナーノード402には枝で繋がれた他のノードへのポインタと、後述するエントリ表502とが保持されている。各リーフノード403には枝で繋がれた他のインナーノード402へのポインタと、後述するエントリ表503とが保持されている。
次に、記憶部204に格納されているタプル表の例を図6に示す。タプル表には、タプルIDとそのタプルの情報が格納される。図6に示すタプル表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”」の情報とが格納されている。
図7は、リーフノード403のエントリ表503の一例である。各リーフノード403は、1つ上位の階層のノード(親ノード)へのポインタと、図7に示すリーフノードのエントリ表503とを保持する。ノードへのポインタは当該ノードの蓄積アドレスを意味し、各ノード間を繋げる枝に相当する。図7に示すように、リーフノード403のエントリはタプルIDとタプルのキー(検索キーとも呼ばれる)の組から構成され、該キーは、1以上の長さを有する属性−値の組の並びから成る。すなわち、1個のエントリは、エントリ表503の縦の1列(1カラム)に該当する。リーフノードのエントリ表503は、T1以上T2以下の個数のリーフノード403のエントリを保持する。T1、T2は、予め定められた定数であり、どちらも正の整数、またT1<T2である。
図7に示す例では、エントリ表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」(空値)はエントリの終わりを示している。また、記号「−」は属性に対するキーが空値であることを示している。
また、図8は、インナーノード402のエントリ表502の一例である。インナーノードは、親ノードへのポインタと、図8に示すインナーノードのエントリ表502を保持する。インナーノード402のエントリは子ノードへのポインタと子ノードのキーの組から構成され、該キーは、1以上の長さを有する属性−値範囲の組の並びから成り、該並びは該子ノードが下位に含むタプル集合における各属性についての最小値から最大値までを表す。エントリ表502において、1個のエントリは、エントリ表502の縦の1列(1カラム)に該当する。例えば、図8において、「子ノード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個のエントリが含まれている。図8において、「M1〜M2」の形式の表記は、「M1」が最小値、「M2」が最大値を示している。
図5に示すように、データ構造の木構造が複数の階層構造を持つ場合において、ルートノード401はインナーノードであるが、一方で、インデックス全体が一つのノードのみからなる場合には、ルートノード401は最下位のノードでもあるためリーフノードとなる。ルートノード401がリーフノードの場合には、エントリ表に0以上T2以下の個数のリーフノードのエントリを保持する。またルートノード401がインナーノードの場合には、2以上T2以下の個数のインナーノードのエントリを保持する。いずれの場合においても、ルートノード401は親ノードをもたないため、親ノードへのポインタを保持しない。
次に、記憶部204に格納されている属性表の一例を図9に示す。属性表には、それまでに蓄積したタプル集合に含まれる全属性について、含まれていた回数(出現頻度)と最小値と最大値とが保持される。図9に示す属性表504には、タプルの各属性「device_type」、「user」、「date_of_first_use」、「lat」、「long」、「time」、「sensor_id」および「sensor_value」の出現頻度ならびに各属性の値の最小値および最大値が保持されている。なお、タプルの値の最小値および最大値は、例えば、タプルの値を、属性毎にあらかじめ設定された所定の変換処理によって、所定の数値に変換することで求めること等ができる。変換処理としては、例えば、タプルの値が文字列の場合は文字列を文字コードに変換した後に四則演算等の所定の演算処理を行って数値を得るようにしたり、時、分、秒で表される値を秒の単位で表するようにして数値を得るようにしたりする処理を用いることができる。
次に、クライアント・コンピュータ装置301の内部構成について説明する。
図10は、クライアント・コンピュータ装置301の構成を示すブロック図である。クライアント・コンピュータ装置301は、サーバ・コンピュータ装置201へのタプル蓄積要求/タプル検索要求の送信または検索結果の受信を行う通信部302と、サーバ・コンピュータ装置201へ送信するタプル蓄積要求に含まれるタプルやタプル検索要求に含まれる検索式の作成、サーバ・コンピュータ装置201から受信した検索結果であるタプル集合を表示するタプル/検索式作成表示部303とを備える。タプル/検索式の作成には、入力デバイスを用いてユーザが入力する方法や、センサデバイスから得られたセンサデータから作成する方法がある。
本実施形態において、タプルを蓄積する際には、クライアント・コンピュータ装置301から受信したタプル蓄積要求に対し、サーバ・コンピュータ装置201の演算部203が、まず記憶部204が保持するタプル表501を参照し、未使用の新しいタプルIDを決定し、該タプルIDとタプル蓄積要求に含まれるタプルをタプル表501に追加する。また属性表504を更新するとともにタプル総数(すなわち蓄積しているタプルの全個数)を1増やす。さらに、記憶部204が保持するインデックスに該タプルに対応するエントリを挿入する。このときのエントリ挿入手順フローを図11に示す。図11に示す処理における引数のエントリX、レベル数Lとしては、それぞれ該エントリ、0とする。ここでレベル数は、リーフノードの階層の レベル数を0とし、1つ上位の階層に上がるごとに、レベル数は1増えるものとする。このエントリXは、例えば図7のエントリ表503に示される4個のエントリのいずれかに対応するようなデータである。
図11に示すように、まず、“該エントリ、0(0はリーフノードのレベル数に該当する)”を引数X、Lとして、部分木選択手順を実施する(ステップS11−1)。部分木選択手順(ステップS11−1)では、エントリXを挿入すべきレベル数Lのノードが選択ノードとして選択される(すなわちステップS11−1のサブルーチンから戻る際に、挿入すべきノードを示すアドレスが返り値として返される)。この該部分木選択手順については後述する。
次に、ステップS11−1で選択されたノードのエントリ表に記載されたエントリ数が当該エントリ表のエントリの個数の最大値T2未満かどうかを判断する(ステップS11−2)。T2未満である場合には、該ノードのエントリ表に該エントリを追加する(ステップS11−3)。ステップS11−2においてT2未満でなかった場合には、該ノードと該エントリを入力とするノード分割手順を実施する(ステップS11−4)。このノード分割手順については後述する。次に、該ノードを入力とするキー集合情報調整手順を実施し(ステップS11−5)、処理を終える。このキー集合情報調整手順については後述する。
図11のステップS11−1で呼び出される該部分木選択手順フローを図12に示す。部分木選択手順では、まず、変数current(カレント)にルートノードのアドレスを代入し、変数lvにルートノードのレベル数を代入する(ステップS12−1)。変数currentは、操作対象のノードのアドレスが代入される変数である。この場合、ステップS12−1でルートノードのアドレスが最初に代入される。その後、順次、操作対象のノードのレベル数lvが変化する度に、ステップS12−7においてその子ノードのアドレスが代入されることで、更新されることになる。
次に、lvと入力されたレベル数Lの大きさを比較し(ステップS12−2)、等しいまたはLの方が大きければ、currentノードを選択することとし、currentを返り値とし(ステップS12−3)、処理を終了する。この例では、L=0なので(すなわちLにはリーフノードのレベル数が代入されているので)、currentノードのレベル数lvが0に到達したことろで、すなわち変数currentでアドレスが指定されるノードがリーフノードとなったところで処理が終了する。
ステップS12−2において、lvの方が大きい場合は、変数child_num、min_childに1を代入し(ステップS12−4)、currentノードのchild_num番目のエントリと入力されたエントリXを引数とする関数Pによりペナルティ値を計算し、変数min_penaltyに代入する(ステップS12−5)。
関数Pは以下のように定義される。ただし、A、Bはエントリを示す。
P(A,B)=Q(A+B)−Q(A) ・・・・・(1)
関数Pは、「該操作対象ノードがすでに含む既存エントリに対し、該エントリXを挿入した場合のペナルティ」を表す関数であり、該操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAが検索される確率に対応した値(すなわち検索される確率ないし検索される確率の近似値)の増分を示す値として定義される。ここで、関数Q(C)は、エントリ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つのキーの該属性の値もしくは値範囲のどちらをも含む値もしくは値範囲とし、必ずしも最小限の値もしくは値範囲としないことも可能である。
また関数Q(C)は以下のように定義される。
Q(C)=ΣCi((L´Ci/LCi)・R(Ci)) ・・・・・(2)
CiはエントリCが持つキーに含まれる属性を示す。ΣCi(D)は、すべてのCiについてのDの総和を意味する。L´Ciは、該キーに記述されたCiの最大値から最小値を引いた値であり、LCiは、インデックス内の全リーフノードが保持する全タプル集合Yにおける属性Ciの最大値から最小値を引いた値である。LCiは属性表から得ることができる。(L´Ci/LCi)が前記正規化長である。R(Ci)は、属性Ciが検索式に用いられる確率であり、以下のように定義される。
R(Ci)=(全タプル集合YにおけるCiの出現回数)/(全タプル集合Yの要素数)・・・・・(3)
全タプル集合YにおけるCiの出現回数は、属性表から得ることができる。全タプル集合Yの要素数とは、タプルの総数である。
ステップS12−5では、変数min_penaltyにP((child_num番目のエントリ),X)の値が代入される。すなわち、変数currentでアドレスが指定されるノードのchild_num番目のエントリに対し、エントリXを挿入する際、エントリXを挿入する前のchild_num番目のエントリと、挿入した後のchild_num番目のエントリとを比べた場合の、child_num番目のエントリが検索される確率に対応した値の増分を示す値が、変数min_penaltyに代入されることになる。ただし、ステップS12−4で変数child_numに1が代入されているので、ステップS12−5で関数Pを求める際には、変数currentでアドレスが指定されるノードの1番目のエントリに対し、エントリXを挿入する際、エントリXを挿入する前の1番目のエントリと、挿入した後の1番目のエントリとを比べた場合の、1番目のエントリが検索される確率に対応した値の増分を示す値が、変数min_penaltyに代入されることになる。
次に、currentに対応するノード(currentノード)のchild_num番目のエントリが存在するかを判定し(ステップS12−6)、存在しない場合には、currentノードのmin_child番目の子ノードのアドレスをcurrentに代入し、lvの大きさを1減らし(ステップS12−7)、ステップS12−2に戻る。
ステップS12−6において、存在する場合には、currentノードのchild_num番目のエントリと入力されたエントリXを引数とする該関数Pによりペナルティ値を計算し、該ペナルティ値がmin_penaltyよりも小さいか否かを判定する(ステップS12−8)。このステップS12−8では、変数currentでアドレスが指定されるノード(すなわち操作対象のノード)の、2番目以降のエントリに対し、当該ノードのエントリが存在している間、エントリXを挿入する際に、エントリXを挿入する前の当該エントリと、挿入した後の当該エントリとを比べた場合の、当該エントリが検索される確率に対応した値の増分を示す値が、変数min_penaltyに代入されている値と比較されることになる。
ステップS12−8において、小さくないと判定された場合には、child_numの値を1増やし(ステップS12−9)、ステップS12−6に戻る。
ステップS12−8において、小さいと判定された場合には、child_numの値をmin_childに代入し、currentノードのchild_num番目のエントリと入力されたエントリXを引数として関数Pにより計算したペナルティ値をmin_penaltyに代入し(ステップS12−10)、ステップS12−9へ進む。このステップS12−10を繰り返し行うことで、変数min_penaltyが最も小さい関数Pの計算結果で更新されるとともに、変数min_childにその最も小さい関数Pの計算結果が得られたエントリの番号が代入されることになる。
上記のステップS12−6、S12−8、S12−10、S12−9を繰り返し行うことで、currentノードのすべてのエントリについて、エントリXを挿入した場合の関数Pの値が求められ、すべてのエントリについて計算が終了した時点で、変数min_childにその最も小さい関数Pの計算結果が得られたエントリの番号が代入されることになる。例えば、図8のエントリ表502を有するノードがcurrentノードであったとすると、子ノード1〜4のアドレスを子ノードへのポインタとする4個のエントリのうち、エントリXを挿入した場合に関数Pの値が最も小さくなるエントリの番号が変数min_childに代入されることになる。そして、すべてのエントリについて関数Pの計算および比較が終了すると、ステップS12−7でcurrentノードのmin_child番目の子ノードのアドレスが変数currentに代入され、lvの大きさが1減らされ、ステップS12−2へ戻るので、関数Pの値が最も小さくなるエントリで指定された子ノードに対して、同様に、全てのエントリに対する関数Pの計算と最も小さい値のエントリを求める処理が行われることになる。
そして、currentノードのレベル数lvが、レベル数L(=0)に達したところで、currentを返り値として処理が終了することになる(ステップS12−3)。
次に、図11のステップS11−4で呼び出されるノード分割手順フローを図13及び図14に示す。このノード分割手順は、分割対象のノード(ノードNおよびそのアドレスをNとする。)とエントリXとを引数として呼び出される処理である。
まず、入力されたノードアドレスNに対応するノード(ノードN)のエントリ表に、入力されたエントリXを追加する(ステップS13−1)。この場合、分割対象ノードはリーフノードなので、リーフノードのエントリ表にエントリXが追加されることになる。
次に、変数i、i_max、j、j_max、d_maxにそれぞれ1、1、2、2、0を代入する(ステップS13−2)。ここで、変数iおよびjは、分割対象ノードにおける処理対象エントリの番号を一時的に記憶するための変数である。変数i_maxおよびj_maxは関数P等を用いた演算結果が最大となるエントリの番号を一時的に記憶するための変数である。変数d_maxは関数P等を用いた演算結果の最大値を一時的に記憶するための変数である。このステップS13−2では、それらの変数が初期化されている。
次に、ノードNのj番目のエントリが存在するかどうかを判定し(ステップS13−3)、存在する場合には、iとjが等しいかを判定し(ステップS13−4)、等しい場合には、iを1とし(ステップS13−5)、jを1増加させ(ステップS13−6)、ステップS13−3に戻る。
ステップS13−4において、等しくない場合には、下記dを計算する(ステップS13−7)。
d=P(i番目のエントリ,j番目のエントリ)−Q(j番目のエントリ) ・・・・・(4)
dがd_maxより大きいかどうかを判定し(ステップS13−8)、大きい場合には、i_max、j_max、d_maxにそれぞれi、j、dを代入し(ステップS13−9)、iを1増加させる(ステップS13−10)。
ステップS13−8において、大きくない場合には、ステップS13−9をとばしてステップS13−10へ進む。ステップS13−10の後、ステップS13−4に戻る。
ステップS13−3において、存在しない場合には、ノードNのi_max番目のエントリをエントリのグループG1に入れ、j_max番目のエントリをグループG2に入れ、さらに両者ともノードNのエントリ表から削除する(ステップS13−11)。ここで、G1とG2が含むエントリ集合は、初期状態として空集合であり、ステップS13−11が終わった時点でそれぞれ1つずつエントリを含むこととなる。
このステップS13−3〜S13−10の処理は、分割対象のノードNの全エントリ(すなわちノードNの既存のエントリにエントリXを追加したエントリの集合)から、式(4)の値を最大とする2つのエントリを選択する処理である。式(4)は、ノードNのi番目のエントリを既存エントリ、j番目のエントリを挿入エントリとした場合のペナルティから、j番目のエントリが検索される確率(ないしその近似値)を減じた値を求めるものである。この場合、関数Pは式(1)で表されるから、式(1)のエントリAをi番目のエントリ、エントリBをj番目のエントリとすると、式(4)は、d=Q(i番目のエントリ+j番目のエントリ)−Q(i番目のエントリ)−Q(j番目のエントリ)と表されることになる。
ステップS13−3〜S13−10の処理が終了した時点で、変数i_maxおよび変数j_maxには、式(4)の値を最大とする、分割対象のノードNの全エントリ中の2つのエントリの番号が代入されることになる。
そして、ステップS13−11では、空集合のグループG1にノードNのi_max番目のエントリが1つ代入され、空集合のグループG2にノードNのj_max番目のエントリが1つ代入されることになる。また、ノードNのエントリ表からは、i_max番目のエントリとj_max番目のエントリが削除されることになる。
次に、T1からG1内のエントリ数を引いた値が、ノードNのエントリ表内に残っているエントリ数に比べて等しいまたは大きいか否かを判定し(ステップS13−12)、等しいか大きい場合には、ノードNのエントリ表内に残っているエントリを全てグループG1に入れ、エントリ表内からは削除する(ステップS13−13)。
ステップS13−12において、否と判定された場合には、ステップS13−13を実施しない。
さらにT1からG2内のエントリ数を引いた値が、ノードNのエントリ表内に残っているエントリ数に比べて等しいまたは大きいか否かを判定し(ステップS13−14)、等しいか大きい場合には、ノードNのエントリ表内に残っているエントリを全てグループG2に入れ、エントリ表内からは削除する(ステップS13−15)。
ステップS13−14において、否と判定された場合には、ステップS13−15を実施しない。
このステップS13−12〜S13−15の処理では、ノードNのエントリ表から、グループG1およびグループG2に代入される(振り分けられる)エントリ集合の個数が、各ノードにおけるエントリの最小値T1を下回らないようにするための処理である。後述するステップS13−24またはS13−25では、ノードNのエントリ表に含まれるエントリは順次、グループG1またはグループG2に振り分けられるとともに、ノードNのエントリ表からは削除されることになる。その際、例えば一方のグループに振り分けが偏ってしまうような場合があったとしても、ステップS13−12〜S13−15の処理によって各グループG1、G2には少なくともT1個のエントリが代入されるようになっている。
i、i_max、d_maxにそれぞれ1、1、0を代入し(ステップS13−16)、ノードNのエントリ表内のi番目のエントリEiが存在するか否かを判定する(ステップS13−17)。ここで、変数iは、分割対象ノードにおける処理対象エントリの番号を一時的に記憶するための変数である。変数i_maxは関数P等を用いたステップS13−18での演算結果が最大となるエントリの番号を一時的に記憶するための変数である。変数d_maxはステップS13−18での関数P等を用いた演算結果の最大値を一時的に記憶するための変数である。このステップS13−16では、それらの変数が初期化されている。
存在する場合には、下記dを計算する(ステップS13−18)。ただし(G1)、(G2)は、グループG1、G2に含まれる全エントリのキーの和をとった新たなキーを持つエントリを示す。
d=|P((G1)、Ei)−P((G2)、Ei)| ・・・・・(5)
式(5)は、式(1)のペナルティ関数Pの計算において、グループG1に含まれる全エントリのキーの和をとった新たなキーを持つエントリを既存エントリAとし、エントリEiを挿入するエントリBとして求めた関数Pの値と、グループG2に含まれる全エントリのキーの和をとった新たなキーを持つエントリを既存エントリAとし、エントリEiを挿入するエントリBとして求めた関数Pの値との差の絶対値を変数dに代入する演算である。すなわち、ノードNのエントリ表にまだ残されているエントリのうちのi番目のエントリについて、グループG1に挿入する場合のペナルティとグループG2に挿入する場合のペナルティとの差の大きさが変数dに代入されることになる。
次に、dがd_maxより大きいかどうかを判定し(ステップS13−19)、大きい場合には、i_max、d_maxにそれぞれi、dを代入し(ステップS13−20)、iを1増加させる(ステップS13−21)。
ステップS13−19において、大きくない場合には、ステップS13−20をとばしてステップS13−21へ進む。ステップS13−21の後、ステップS13−17に戻る。
このステップS13−17〜S13−21の処理を繰り返し行うことで、ノードNのエントリ表に残っているエントリのうちで、グループG1に振り分けた場合とグループG2に振り分けた場合でペナルティPの値の差が最も大きくなるエントリの番号が、変数i_maxに記憶されることになる。
ステップS13−17において、存在しない場合には、ノードNのエントリ表内のi_max番目のエントリEi_maxが存在するかどうかを判定し(ステップS13−22)、存在する場合には、さらに下記式が成り立つか否かを判定する(ステップS13−23)。
P((G1),Ei_max)< P((G2),Ei_max) ・・・・・(6)
成り立つ場合には、Ei_maxをG1に入れ、エントリ表からは削除し(ステップS13−25)、ステップS13−12に戻る。
成り立たない場合には、Ei_maxをG2に入れ、エントリ表からは削除し(ステップS13−24)、ステップS13−12に戻る。
式(6)は、ステップS13−17〜S13−21の処理で求められたi_max番目のエントリEi_maxについて、グループG1に挿入した場合のペナルティPとグループG2に挿入した場合のペナルティPとを比較する条件式である。この比較結果に基づいて、ステップS13−24またはS13−25で、ペナルティが小さくなる方のグループへエントリEi_maxが挿入されることになる。
ステップS13−22において、存在しない場合には、ノードNのエントリ表にG1のエントリ集合を入れ、新しいノードN´を生成し、そのエントリ表にG2のエントリ集合を入れる(ステップS13−26)。ノードNのすべてのエントリをグループG1またはグループG2に振り分けた後は、ノードNのエントリ表にはエントリが存在しないことになる。この場合、ステップS13−17およびS13−22はいずれも判定結果が「NO」となるので、ステップS13−26へ進み、ノードNのエントリ表にグループG1に振り分けられたすべてのエントリが入れられ、新たに生成されたノードN´のエントリ表にグループG2に振り分けられたすべてのエントリが入れられることになる。
次に、ノードNがルートノードか否かを判定し(図14のステップS13−27)、ルートノードでない場合には、ノードNの親ノードが保持するエントリ表内のエントリ数がT2未満かどうかを判定する(ステップS13−28)。
T2未満である場合には、ノードNの親ノードのエントリ表に、新しいノードN´に対応するエントリ、すなわちキーとしてノードN´のエントリ表内の全エントリのキーの和をとったキーをもち、またノードN´へのポインタをもつエントリを追加する(ステップS13−29)。
ステップS13−27において、ノードNがルートノードである場合には、新しいノードN´´を生成し、ノードNの親ノードとする。すなわち、ノードNに親ノードとしてノードN´´へのポインタを保持させる。さらに、ノードNに対応するエントリをノードN´´のエントリ表に追加し(ステップS13−30)、ステップS13−29へ進む。
ステップS13−29の後、ノードNの親ノードを入力とするキー集合情報調整手順を実施し(ステップS13−32)、処理を終える。
ステップS13−28において、T2未満でない場合には、ノードNの親ノードと、N´に対応するエントリを入力とするノード分割手順を実施し(すなわち図13および図14に示すノード分割手順を再帰呼び出しし)(ステップS13−31)、ステップS13−32に進む。
該ノード分割手順によりノードが分割される様子の例を図15に示す。
この例では、T1=2、T2=4とする。図15左に示すように、今、3つのノードN1〜N3からなる検索木において、各ノードのエントリ表にエントリE1〜E10が保持されている状態を考える。
エントリE10は最後に該検索木に挿入され、これにより、ノードN3のエントリ表に保持しているエントリ数がT2を超える5となった場合、エントリ数を減らすために、ノード分割手順が実施される(図11のステップS11−2、ステップS11−4)。
この結果、図15右に示すように、ノードN3がN3と新たなノードN4に分割され、N3が保持していたエントリの一部は、N4へ移る(図13のステップS13−1〜ステップS13−26)。これに伴い、新たなノードN4に対応するエントリE11がN3の親ノードであるN1のエントリ表に追加される(図14のステップS13−29)。
該ノード分割手順によりノードが分割される様子のもう1つの例を図16に示す。
図15に示した例のように、ノード分割手順においては、分割対象のノードの親ノードのエントリ表に新しいエントリが追加される。これにより、親ノードが保持するエントリ数がT2以上となる場合、さらに該親ノードがノード分割対象となる(図14のステップS13−28、ステップS13−31)。
図16は、該親ノードがルートノードだった場合の例である。
図16に示すように、ルートノードN1が分割される場合には、N1と新たなノードN7に分割されるだけでなく、新たなノードN8がルートノードとして生成され、N1、N7に対応するエントリをエントリ表に保持する(図14のステップS13−27、ステップS13−30、ステップS13−29)。このとき、検索木の階層が1つ増え、ルートノードのレベル数は1増えることとなる。
次に、図11のステップS11−5または図14のステップS13−32で呼び出されるキー集合情報調整手順フローを図17に示す。
図11のキー集合情報調整手順フローでは、まず引数として入力されたノードアドレスNが示すノード(ノードN)がルートノードかどうかを判定する(ステップS17−1)。
ルートノードでない場合には、ノードNの親ノードのエントリ表内の、ノードNに対応するエントリ、すなわちポインタとしてノードNのアドレスを保持するエントリのキーを、その時点でのノードNに対応するキー、すなわちノードNのエントリ表内のエントリ集合のキーの和をとったキーで上書きする(ステップS17−2)。
さらに、ノードNの親ノードを入力とするキー集合情報調整手順を実施し(再帰呼び出しし)(ステップS17−3)、処理を終える。
ステップS17−1において、ルートノードであった場合には、そのまま処理を終える。
なお、本実施形態においては、リーフノードのエントリにタプルIDを含ませ、タプルそのものはタプル表に格納することとしたが、本発明の範囲はそれに限らず、リーフノードのエントリにタプルそのものを含ませることも可能である。
また本実施形態においては、各属性が検索式に用いられる確率の近似値として、属性出現回数をタプル総数で除した値を用いたが、本発明の範囲はそれに限らず、各属性が検索式に用いられる確率について、予めデータベース管理者が入力することとしたり、実際にユーザが用いた検索式の統計情報に基づいて算出したりすることも可能である。
また本実施形態においては、ペナルティの計算において、入力される2つのエントリのキーが含む全属性について考慮したが、本発明の範囲はそれに限らず、検索式に用いられる確率が高い属性のうち例えば上位10個の属性についての項のみを考慮することも可能である。すなわち、他の属性の項については0とみなしてもよい。
また本実施形態では、各属性が検索式に用いられる確率は独立として扱ったが、本発明の範囲はそれに限らず、各属性の共起性、すなわち1つの検索式に同時に現れる確率を考慮したペナルティの計算を行うことも可能である。たとえば、属性Aと属性Bを条件に含む検索式が用いられる確率をRとすると、その属性の組み合わせに対する重みづけ付き正規化長を(属性Aの正規化長)×(属性Bの正規化長)×Rと定義し、全属性の全組合せに対するこのような重みづけ付き正規化長の和の増加量をペナルティとすればよい。
次に、本実施形態のシステムにおける検索処理について説明する。
検索処理では、クライアント・コンピュータ装置301から受信したタプル検索要求に対し、サーバ・コンピュータ装置201の演算部203は、まず記憶部204が保持するインデックスから、受信した検索式が意味する検索条件を満たすタプルのID集合を取得する。具体的には、検索結果タプルIDリストを空にした後、記憶部204が保持するインデックスのルートノードを検索対象ノードとしてノード検索手順を実行することにより、検索結果タプルIDリスト内に該ID集合を得ることができる。さらに、記憶部204が保持するタプル表を参照し、該ID集合に対応するタプル集合を抽出し、検索結果として該タプル集合をタプル検索要求元であるクライアント・コンピュータ装置301に送信する。
ノード検索手順フローを図18に示す。
図18に示すフローは、上記検索木を用いたノード検索手順のフローであって、検索式としてのキーである検索キーに対し、ルートノードからその下位のノードへと検索対象を変えながら、1つのノードを検索対象ノードとして検索を行う際に呼び出されるものであるとともに、ステップS18−7において再帰呼び出しされるものである。図18のフローでは、まず、検索対象ノードがリーフノードか否かを判定し(ステップ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つの木構造インデックスを構築し、そのペナルティとして、エントリ挿入前後での検索される確率に対応する値(すなわち検索される確率ないし検索される確率の近似値)の増加量を用いている。このペナルティであれば、次元毎に大小関係を判別する必要はなく、エントリが含むキーの次元数や種類が異なっても定義可能となる。これにより、多種多次元のタプル集合を蓄積・検索する際の、複数のインデックスを用いることによるオーバーヘッド、すなわち処理量や記憶容量、処理速度が大きくなることを抑え、また多種多次元のタプル集合に対して検索効率を向上させるクラスタリングを実現することが可能となる。
また、本実施形態によれば、前記ペナルティとして、エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化長の和の増加量を用いるようにしている。ある属性が検索式に用いられた場合、その値としてどの値を取り得るかの可能性は該属性の定義域内で一様と仮定すると、該エントリにアクセスする必要がある確率は(該エントリのキーに含まれる該属性の値範囲/該属性の定義域)で表されるが、さらにインデックスに蓄積した全タプルにおける該属性の最大値から最小値までを該属性の定義域と近似したものが該正規化長であり、重みづけ付き正規化長は、さらに該属性が検索式に用いられる確率を正規化長に乗じたものである。従って、エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化長の和は、検索時に、検索条件に適合するタプルを探すために該エントリにアクセスしなければならない確率の近似値に相当する。該ペナルティを用いることにより、検索時にアクセスしなければならないエントリ数を総じて小さくするよう木構造を構築することが可能となる。すなわち、検索の処理量、処理速度を向上させることが可能となる。
また、本実施形態によれば、該エントリの算出において用いる、属性が検索式に用いられる確率として、属性出現回数をタプル総数で除した値を用いている。これにより、各属性の検索式に用いられる確率が不明な場合でも、蓄積するタプル集合から該確率の推定値を得ることが可能となる。
なお、本発明が特徴とする構成と、上記実施形態における構成との対応関係は次のとおりである。
本発明の特徴は、蓄積検索対象の情報の単位であるタプル(図2)は、属性−値の組の並びを少なくとも含む1以上の長さを有するものであり、該属性の種類や該並びの長さが同じまたは異なる1つ以上の該タプルが複数記憶されるものであり、該タプルから検索キーがインデックス化され検索木(図5)が構築されるものであり、該検索木はノード(図5のルートノード401、インナーノード402、リーフノード403)を階層的に有する構成であり、該ノードの内最下層のリーフノードはエントリとして該タプルを識別するタプル識別子(タプルID)とキーを有するものであり(図7)、該ノードの内該リーフノードより上位のインナーノードはエントリとして下位ノードである子ノードの位置情報であるポインタとキーを有するものであり(図8)、該インデックスの構築において、エントリをノードに挿入する際、1つの挿入すべきエントリXと、該エントリを挿入すべきレベル数L(リーフノードを0として階層が上がるごとに1増える階層数)が与えられた際(図11のステップS11−1、図12のフロー)、はじめにルートノードを操作対象ノードとし(図12のステップS12−1)、操作対象ノードにおいて、「該操作対象ノードがすでに含む既存エントリに対し、該エントリXを挿入した場合のペナルティ」が最も小さい該既存エントリを選出し(図12のステップS12−6、S12−8、S12−10、S12−9)、該既存エントリに含まれるポインタが指し示す子ノードを次の操作対象ノードと選定し(図12のステップS12−7)、該次の操作対象ノードのレベル数がLより大きい場合は(図12のステップS12−2で「NO」)、該次の操作対象ノードからさらに次の操作対象ノードを選定することを再帰的に繰り返し(図12のステップS12−6、S12−8、S12−10、S12−9、S12−7)、該次の操作対象ノードのレベル数がLに到達した場合は(図12のステップS12−2で「YES」)、このノードを選択ノードとするステップ(図12のステップS12−3)と、選択ノードが許容できる最大数のエントリを持っていない場合において(図11のステップS11−2で「YES」)、選択ノードに対し、エントリXを追加するステップ(図11のステップS11−3)と、選択ノードが既に許容できる最大数のエントリを持っている場合において(図11のステップS11−2で「NO」)、エントリXを追加しつつ選択ノードの分割を行うステップ(図11のステップS11−4、図13のステップS13−1およびS13−2以降のステップ)と、分割を行った場合において、選択ノードの上位ノードのエントリを更新するステップ(図11のステップS11−5、図17のフロー)と、を有する情報蓄積検索方法において、該ペナルティは、該操作対象ノードがすでに含む既存エントリAに対し、エントリBを挿入する際、該エントリBを挿入する前の該エントリAと、挿入した後の該エントリAとを比べた場合の、該エントリAが検索される確率に対応した値の増分を示す値として定義される(式(1)、図12のステップS12−5、S12−8)、ことである。
また、他の発明は、上記分割を行うステップが、選択ノードが含む複数のエントリにエントリXを追加した各エントリを2つのグループに順次、振り分ける際に(図13のステップS13−24、S13−25)、各グループがすでに含むエントリの和をとったエントリ((G1)、(G2))を既存エントリAとし、該振り分けられるエントリ(Ei)をエントリBとしてグループ毎に求めた各ペナルティに基づいて振り分け先のグループを選択して振り分けを行うステップ(図13のステップS13−17〜S13−25)と、該2つのグループうちの1つのグループに振り分けられた各エントリを選択ノードのエントリとするとともに、もう1つのグループに振り分けられた各エントリを新たに生成したノードのエントリとするステップ(図13のステップS13−26)と、該新たに生成したノードのエントリを該ノードの親ノードに挿入するステップ(図14のステップS13−29)と、を含むことを特徴とする。
また、他の発明は、分割を行うステップ(図11のステップS11−4、図13のステップS13−1およびS13−2以降のステップ)において、選択ノードが含む複数のエントリにエントリXを追加した各エントリを2つのグループに順次、振り分ける際、はじめに、各エントリに含まれる任意の2つのエントリの一方(i番目のエントリ)を既存エントリAとし、他方のエントリ(j番目のエントリ)をエントリBとして求めたペナルティから、他方のエントリ(j番目のエントリ)が検索される確率に対応した値を減じた値が最も大きくなる2つのエントリを、2つのグループに振り分ける(図13のステップS13−2〜S13−11)ことを特徴とする。
また、他の発明は、上記ペナルティの算出において、エントリが検索される確率に対応した値(Q(C))として、該エントリに含まれるキーに含まれる各属性に対する重みづけ付き正規化長の和を用い(式(2))、該重みづけ付き正規化長は、正規化長(L´Ci/LCi)に、該属性が検索式に用いられる確率(R(Ci))を掛け合わせた値であり、該正規化長は、該キーに含まれる該属性の最大値から最小値を引いた値(L´Ci)を、それまで該検索木に挿入された全タプル集合に含まれる該属性の最大値から最小値を引いた値(LCi)で除した値である、ことを特徴とする。
また、他の発明は、属性が検索式に用いられる確率(R(Ci))として、属性出現回数をタプル総数で除した値を用い、該属性出現回数は、それまでに該検索木に挿入された全タプル集合における該属性の出現回数であり、該タプル総数は、それまでに該検索木に挿入された全タプル集合の要素数である(式(3))、ことを特徴とする。
また、他の発明は、上記検索木を用いた検索において(図18のフロー)、検索式としてのキーである検索キーに対し、ルートノードからその下位のノードへと検索対象を変えながら、1つの該ノードを検索対象とし、該ノードがインナーノードであれば(図18のステップS18−1で「NO」)、該ノードに含まれる各エントリについて、該エントリのキーが検索キーに含まれる各属性を全て含み、かつ、該検索キーに含まれる各属性に対応する値または値範囲と該エントリのキーに含まれる該属性に対応する値または値範囲とが一致または部分的に一致する(一方の値または値範囲が、他方の値範囲に含まれるまたは一部重なる)かを調べる検索手順を行い(ステップS18−4、S18−5)、一致または部分的に一致する場合には(ステップS18−5で「YES」)、該エントリのポインタで接続されたノードを検索対象、該検索キーを検索キーとしてノード検索手順を再帰的に行い(ステップS18−7)、また、該ノードがリーフノードであれば(ステップS18−1で「YES」)、該ノードに含まれる各エントリについて、該エントリのキーが検索キーに含まれる各属性を全て含み、かつ、検索キーに含まれる各属性に対応する値または値範囲に該エントリのキーに含まれる該属性に対応する値が含まれるかを調べ、含まれる場合には該エントリのタプル識別子を検索結果タプル識別子集合に加える(ステップS18−2)、ノード検索ステップ、を有することを特徴とする。
101 ネットワーク
201 サーバ・コンピュータ装置
202 通信部
203 演算部
304 記憶部
301 クライアント・コンピュータ装置
302 通信部
303 タプル/検索式作成表示部
401 ルートノード
402 インナーノード
403 リーフノード
501 タプル表
502 インナーノードのエントリ表
503 リーフノードのエントリ表
504 属性表

Claims (10)

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

Priority Applications (1)

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

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
JP2011170460A JP2011170460A (ja) 2011-09-01
JP5430436B2 true JP5430436B2 (ja) 2014-02-26

Family

ID=44684549

Family Applications (1)

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

Country Status (1)

Country Link
JP (1) JP5430436B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013128788A1 (ja) * 2012-03-02 2013-09-06 日本電気株式会社 データ管理装置、データ管理方法およびプログラム
JP5871698B2 (ja) * 2012-04-06 2016-03-01 日本電信電話株式会社 情報蓄積検索装置

Also Published As

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

Similar Documents

Publication Publication Date Title
US11763175B2 (en) Systems and methods for semantic inference and reasoning
CN108038222B (zh) 用于信息系统建模和数据访问的实体-属性框架的系统
CN105706078B (zh) 实体集合的自动定义
US20060235838A1 (en) System and method for managing complex relationships over distributed heterogeneous data sources
US20080263078A1 (en) Runtime class database operation
CN111444317B (zh) 一种语义敏感的知识图谱随机游走采样方法
JP5470082B2 (ja) 情報蓄積検索方法及び情報蓄積検索プログラム
CN106528648A (zh) 结合Redis内存数据库的分布式RDF关键词近似搜索方法
CN103177094A (zh) 一种物联网数据清洗方法
CN111813870B (zh) 基于统一描述表达的机器学习算法资源共享方法及系统
CN105138674B (zh) 一种数据库访问方法
Kanagal et al. Indexing correlated probabilistic databases
US20160364426A1 (en) Maintenance of tags assigned to artifacts
WO2014186745A1 (en) Generating and implementing local search engines over large databases
EP4033373A1 (en) Methods and systems for undetermined query analytics
Alyas et al. Query optimization framework for graph database in cloud dew environment
CN108241709A (zh) 一种数据集成方法、装置和系统
JP5430436B2 (ja) 情報蓄積検索方法及び情報蓄積検索プログラム
CN107239568B (zh) 分布式索引实现方法及装置
RU2433467C1 (ru) Способ формирования структуры агрегированных данных и способ поиска данных посредством структуры агрегированных данных в системе управления базами данных
JP4745993B2 (ja) 意識体系構築装置および意識体系構築プログラム
Kontakis et al. Spatial indexing of complex virtual reality scenes in the web
Bodra Processing queries over partitioned graph databases: An approach and it’s evaluation
US20040230554A1 (en) Method of adding data in bulk to a spatial database
Choi et al. Building methods of intelligent data catalog based on graph database for data sharing platform

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: 20130827

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131028

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: 20131126

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131203

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5430436

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees