JP2020135530A - データ管理装置、データ検索方法及びプログラム - Google Patents
データ管理装置、データ検索方法及びプログラム Download PDFInfo
- Publication number
- JP2020135530A JP2020135530A JP2019029435A JP2019029435A JP2020135530A JP 2020135530 A JP2020135530 A JP 2020135530A JP 2019029435 A JP2019029435 A JP 2019029435A JP 2019029435 A JP2019029435 A JP 2019029435A JP 2020135530 A JP2020135530 A JP 2020135530A
- Authority
- JP
- Japan
- Prior art keywords
- index
- search
- node
- search condition
- rowid
- 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.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】複数の索引と、索引に対応するオブジェクトテーブルを利用して、少ないリソース環境下で高速で検索を実施する。【解決手段】属性の異なる第1検索条件及び第2検索条件を満たすオブジェクトを検索するデータ管理装置は、第1検索条件に対応する属性の第1索引と、第1索引のオブジェクトノードに対応する識別子を管理する第1オブジェクト管理情報と、第2検索条件に対応する属性の第2索引と、第2索引のオブジェクトノードに対応する識別子を管理する第2オブジェクト管理情報と、第1検索条件で第1索引を探索してオブジェクトノードを取得し、当該オブジェクトノードで第1オブジェクト管理情報を探索して識別子を取得する主索引検索部と、第2検索条件で第2索引を探索してオブジェクトノードを取得し、オブジェクトノードで第2オブジェクト管理情報を探索して識別子を取得する副索引検索部と、を有する。【選択図】図11
Description
本発明は、データ管理システム、データ管理方法、及び、データ管理プログラムに関するものである。
データベース管理システムでは、数値データ、文字列データ、時刻印データ、空間データなど、様々な種類のデータを内包するオブジェクトを管理できる。
このようなオブジェクトの検索方法として、オブジェクトが有するデータを一定の順序で配置することで構築した索引を参照し、検索条件の値を基に、該当オブジェクトを高速に絞り込む方法が知られている。
ここで、取り出したいオブジェクトを絞り込むために、複数の検索条件の論理積によって検索する場合が多く、特に、検索条件ごとに対象とするデータが異なる場合、複数の索引を利用して検索する。そのため、データベース管理システムでは、この複数の検索条件の全てに該当するオブジェクトを、複数の索引を用いて高速に検索することが求められる。
例えば、カーナビゲーションシステムにおいて、登録されている施設情報オブジェクトのうち、“コンビニ”の文字列を含み、かつ、自車位置から半径5Km以内の位置に存在するオブジェクトを検索する場合などがある。
従来のデータベース管理システムでは、複数の検索条件の論理積による検索を行う場合、文字列データや空間データなどのそれぞれのデータごとに構築された索引を利用して一時的な絞り込み結果を個々に生成し、それぞれの一時的な絞り込み結果を突き合わせてオブジェクトを抽出して検索結果を得る。
この方法では、それぞれの索引ごとの一次的な絞り込み結果を生成する際に、大量の索引オブジェクトを参照するため、ディスクアクセス処理やソート処理に膨大な時間が必要となる。この処理時間を短縮させる方法として、データベース管理システムが管理する全てのオブジェクトを、大容量の主記憶装置上に予め配置しておき、ディスクアクセスを削減させる方法があるが、大規模なハードウェア資源が必要となる。
一方、大容量の主記憶を利用しない別の解決方法として、特許文献1には、文書情報と空間情報を共に検索する手法が開示されている。この手法によると、空間情報と、文書情報と、固有表現を位置情報に変換できる地名辞書を用いて解決する。
前記した特許文献1で開示される方法では、検索条件のデータの種類が文字列データと空間データだけを対象としており、数値データや時刻印データなどの種類の検索条件を利用できない。また、前記特許文献1では、固有表現を位置情報に変換できる地名辞書を予め構築する必要があり、任意の文字列を検索条件のデータとして利用できない。
そこで、本発明は、複数の検索条件の論理積によるオブジェクトの検索処理について、前記した問題を解決し、複数の索引と、対応するオブジェクトテーブルを利用して、少ないリソース環境下で高速で検索を実施することを、主な目的とする。
本発明は、プロセッサとメモリを有し、属性の異なる第1の検索条件と第2の検索条件を受け付けて、前記第1の検索条件及び第2の検索条件を満たすオブジェクトを検索するデータ管理装置であって、前記第1の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第1の索引と、前記第1の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第1のオブジェクト管理情報と、前記第2の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第2の索引と、前記第2の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第2のオブジェクト管理情報と、前記第1の検索条件で前記第1の索引を探索してオブジェクトノードを取得し、当該オブジェクトノードで前記第1のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する主索引検索部と、前記第2の検索条件で前記第2の索引を探索してオブジェクトノードを取得し、当該オブジェクトノードで前記第2のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する副索引検索部と、を有する。
本発明によれば、複数の検索条件の論理積によるオブジェクトの検索処理を、複数の索引部と、対応するオブジェクトテーブルを利用して、少ないリソース環境下で高速に実施することができる。
本明細書において開示される主題の、少なくとも一つの実施の詳細は、添付されている図面と以下の記述の中で述べられる。開示される主題のその他の特徴、態様、効果は、以下の開示、図面、請求項により明らかにされる。
以下、本発明の実施形態を添付図面に基づいて説明する。
図1は、データ管理装置1を示す構成図である。データ管理装置1は、中央処理装置91と、主記憶装置92と、二次記憶装置93と、入力装置94、及び、出力装置95を含むコンピュータとして構成される。ただし、二次記憶装置93については、主記憶装置で代替することも可能である。
中央処理装置91は主記憶装置92に格納されたプログラムの処理を行い、各処理を実行する。主記憶装置92は、中央処理装置91で実行されるプログラムやデータを格納するメモリで構成される。
主記憶装置92には、処理部として、オブジェクト検索部50を構成するためのプログラムと、非該当ROWID範囲リスト81と、概略判定リスト82と、が格納されている。
オブジェクト検索部50には、主索引検索部としての空間索引検索部61と、副索引検索部としての文字列索引検索部71と、非該当ROWID範囲設定部52の各機能部が含まれる。オブジェクト検索部50の各機能部はプログラムとして主記憶装置92にロードされて中央処理装置91で実行される。
中央処理装置91は、各機能部のプログラムに従って処理を実行することによって、所定の機能を提供する機能部として稼働する。例えば、中央処理装置91は、空間索引検索プログラムに従って処理を実行することで空間索引検索部61として機能する。他のプログラムについても同様である。さらに、中央処理装置91は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。なお、各機能部で行われる処理については後述する。
二次記憶装置93は、ハードディスクドライブやフラッシュメモリドライブなどの大容量の記憶装置で構成される。二次記憶装置93には、数値データや、文字列データ、空間データなど様々な属性のデータがオブジェクトとしてオブジェクト詳細テーブル90に格納されている。
また、二次記憶装置93には、オブジェクトを検索するための条件に用いられる属性に応じて、オブジェクトの属性データを索引化した索引部が格納される。本実施例1では、索引部として、1つの主索引部(空間データ索引部23)と、副索引部(文字列データ索引部33)から構成される例を示す。
入力装置94は、オブジェクトの検索に必要な複数の検索条件を入力する装置である。例えば、車載情報端末では、入力装置94として、ハードウェアキーボードの他に、タッチパネルによるソフトウェアキーボードなどで構成される。出力装置95は、オブジェクトの検索結果を表示する装置であり、液晶ディスプレイやスピーカなどにより構成される。
なお、本実施例1では、入力装置94から空間データの検索条件と文字列データの検索条件を受け付けて、これらの検索条件の論理積と一致するオブジェクトを検索する例を示す。
図2は、データ管理装置1における主索引部(空間データ索引部23)、及び、副索引部(文字列データ索引部33)として扱う索引部と、オブジェクトを格納したオブジェクト詳細テーブル90の関係を示す図である。
空間データ索引部23は、空間索引ツリー24と空間オブジェクトテーブル25で構成される。空間索引検索部61は、指定された検索条件に応じて空間索引ツリー24を辿りながら、空間索引ツリー24にリンクする空間オブジェクトテーブル25でオブジェクトノードを特定する。
空間オブジェクトテーブル25は、オブジェクト詳細テーブル90で管理される個々のオブジェクトを、オブジェクト識別子(ROWID)によってリンクする。空間オブジェクトテーブル25の各オブジェクトノードは、1つ又は複数のROWIDを管理する。
一方、副索引部としての文字列データ索引部33も空間データ索引部23と同様に、文字列索引ツリー34及び文字列オブジェクトテーブル35で構成され、空間データ索引部23と同等のリンクを含む。
ただし、文字列データ索引部33の文字列オブジェクトテーブル35で管理される1つのオブジェクトノード(キー値)の中で、ROWIDの値は昇順又は降順にソートされており、空間データ索引部23では1つのオブジェクトノード(キー値)の中で、ROWIDの順序は任意に配置されている。
空間索引ツリー24には、空間索引の情報が、低データ量かつ高速検索が可能なツリー構造として格納される(詳細は図3A、図3Bを参照)。空間オブジェクトテーブル25には、空間索引ツリー24が示す各領域について、オブジェクトが含まれているか否かの情報が格納される。
文字列索引ツリー34には、文字列索引の情報が、低データ量かつ高速検索可能なツリー構造として格納される(詳細は図4A、図4Bを参照)。文字列オブジェクトテーブル35には、文字列索引ツリー34が示す各文字列を含むオブジェクトのROWIDが、オブジェクトノードに対応付けて格納される。なお、ROWIDは、オブジェクト詳細テーブル90のオブジェクトを指し示すポインタとして機能する。
図2に示した空間索引検索部61は、空間に関する検索条件を受け付けて、空間索引ツリー24を用いて、任意の範囲(検索範囲)に含まれるオブジェクトを範囲検索する。範囲検索を実現するため、空間索引検索部61は、検索起点設定部62と、空間条件判定部63を含む。本実施例1では、空間に関する検索条件として位置情報を中心として所定の半径内のオブジェクトを検索する例を示す。
図2に示した文字列索引検索部71は、文字列に関する検索条件を受け付けて、文字列索引ツリー34を用いて、検索条件の文字列を含むオブジェクトを検索する。文字列検索を実現するために、文字列索引検索部71は、検索初期設定部72と、文字列条件判定部73を含む。
本実施例1のオブジェクト検索部50は、位置情報の検索条件と、文字列の検索条件の論理積を満たすオブジェクトを検索する例を示す。
オブジェクト詳細テーブル90には、位置情報の属性と文字列の属性を含むオブジェクトのデータと、当該オブジェクトの識別子としてのROWIDが格納される。なお、ROWIDは、予めオブジェクト毎に設定した識別子で、データ管理装置1内でユニークな値である。
図3A、図3Bは、空間データ索引部23の空間索引ツリー24が示す情報を展開した展開図である。図3Aでは、横(x)16区画×縦(y)16区画の空間領域を、情報(z軸)から見下ろした形式で示しており、図中7つのオブジェクト(A〜G)が配置されている。
図3Aにおいて、展開図内の数字(例えば、原点「0」や中央点「192」など)は、その数字の記載位置に対応するZオーダーの順位で符号化したモートン符号値(又はZ階数)を示す。なお、モートン符号値は、n次元の空間領域上の位置を、1次元のスカラ値に写像する写像値の一例である。本実施例1では、モートン符号値を例示したが、これに限定されるものではなく、ヒルベルト曲線で符号化したヒルベルト符号値など他の写像演算値を用いてもよい。
図3Aにおいて、展開図内の円は、各オブジェクトの座標値を示しており、オブジェクトID(A〜G)が記述されている。展開図内の破線は、空間領域を各軸の垂直2等分線で等面積に4分割することで生成される各空間領域の境界を示す。
例えば、モートン符号値「192」を起点(左下点)とする右上の領域401は、16区画の空間領域を1分割した結果の大きめの(8x8区画)領域である。一方、モートン符号値「60」を起点(左下点)とする中央付近の領域402は、16区画の空間領域を3分割した結果の小さ目の(2x2区画)領域である。
空間データ索引部23は、各空間領域の位置を、その代表点(例えば、左下の位置)を変換したモートン符号値と分割回数(分割数)の組で表現する。空間領域を再帰的に等面積で4分割するため、モートン符号値と分割数の組で空間領域の位置と形状を一意に特定できる。空間領域の代表点は、領域内のx座標とy座標の最小値を組みとした座標値とする。
以下、座標値(7、10)をモートン符号値「157」に変換する計算方法を示す。
(手順1)座標値として、(x、y)=(7、10)が入力される。
(手順2)入力された10進数の座標値(7、10)を、2進数の座標値(0111、1010)に変換する。
(手順3)2進数の座標値(0111、1010)を、y座標とx座標の順で、2進数の先頭ビットから順に交互に並べ、「10011101」とする。
(手順4)「10011101」を10進数に変換すると、モートン符号値「157」となる。
(手順2)入力された10進数の座標値(7、10)を、2進数の座標値(0111、1010)に変換する。
(手順3)2進数の座標値(0111、1010)を、y座標とx座標の順で、2進数の先頭ビットから順に交互に並べ、「10011101」とする。
(手順4)「10011101」を10進数に変換すると、モートン符号値「157」となる。
図3Bは、図3Aが示す空間索引ツリー24の情報を、ツリー構造として示した構成図である。空間索引ツリー24は、各ノードと、ノード間を接続するリンクとがツリー構造になっている。空間索引ツリー24は、バランス木(B木、B+木など)のツリー構造であり、非リーフノード(ルートノード)、リーフノード、オブジェクトノードから構成される。
以下の説明では、バランス木の一例として、B+木を用いる例を説明する。B+木では、非リーフノードにはキー値と子ノードへのポインタ、リーフノードにはキー値とレコードポインタが含まれる。そして、隣接するリーフノードの間を片方向のリンクで連結する。
空間索引ツリー24のリーフノード、非リーフノードには、キー値であるモートン符号値(図中では数値で示す)と、そのモートン符号値が示す左下座標からの空間領域を生成するための分割数と、の組が最大3組分格納できる。例えば、図3Aの左上の空間領域は、「モートン符号値=128、分割数=1」の組として表現される。
このモートン符号値と分割数との組が、図3Aの1つ分の空間領域を示すので、以下の説明では、モートン符号値と分割数の組を「ノード内の空間領域情報」と表記する。
このように、空間索引ツリー24では、空間領域を等面積で4分割することで生成される空間領域をモートン符号値と分割数との組で一意に表現する。
空間索引ツリー24の非リーフ(幹)ノードは、最大3件の空間領域情報を格納する。非リーフノードは、非リーフノード又はリーフノードを子ノードとしてリンクする。非リーフノード内の空間領域情報は、降順又は昇順に配置されており、空間領域情報間の図中白色部には、子ノードへのポインタが矢印で表記される。
なお、空間領域情報の最大個数を3件とするのは、あくまで一例である。
親ノードの第1空間領域情報と第2空間領域情報との間に設定されるポインタは、そのポインタが示す子ノードを指し示す。このとき、子ノードの各空間領域情報のモートン符号値は、第1空間領域情報のモートン符号値から、第2空間領域情報のモートン符号値までの範囲に収まる。
空間索引ツリー24のリーフ(葉)ノードは、最大3件の空間領域情報を格納する。リーフノードは、オブジェクトノードにリンクする。リーフノードの空間領域情報は、降順又は、昇順に配置されている。リーフノードの各空間領域情報(例えば、モートン符号値「16」)からは、その空間領域情報が示す空間領域に存在するオブジェクトを示すオブジェクトノードへのリンク(例えば、オブジェクト「B」)が存在する。
空間索引ツリー24のオブジェクトノードは、オブジェクトの座標位置とROWID値を含む。
図4Aは、副索引部の例に挙げた文字列データ索引部33における文字列索引ツリー34が示す情報を展開した展開図である。この展開図(図4A)では、7個のオブジェクトの文字列データ(A〜G)を示しており、文字列の中に含まれる任意の文字列を図4Bに示すツリー構造で管理する。本実施例1では、文字列管理構造として代表的な3−GRAM方式のトライ構造を一例として説明する。
3−GRAM方式では、文字列データ内の全ての文字を起点として、連続する3文字をキー値として図4Bのトライ構造で管理する。なお、文字列データの、後方2文字目、及び、最終文字から始まるキー値は、それぞれ、2文字、及び、1文字となる。したがって、1つの文字列データから生成されるキー値の数は文字列データの長さと等しい。
文字列索引ツリー34の非リーフノードは、キー値の1文字の文字データを管理し、非リーフノード又はリーフノードを子ノードとしてリンクする。非リーフノード内の文字データは、降順又は昇順に配置されており、子ノードへのポインタが矢印で表記される。
文字列索引ツリー34のリーフノードは、キー値の1文字の文字データを管理し、オブジェクトノードをリンクする。リーフノードの文字データは、降順又は、昇順に配置されている。
例えば、図4Aの文字列データEに含まれる「aeb」は、図4Bの非リーフノードから深さ3のリーフノードまで、各ノードで「a」「e」「b」を1文字ごとに管理する。リーフノードは、対象文字列を含むオブジェクトノードをリンクし、オブジェクトノード(aeb)では、オブジェクト詳細情報のROWID(E)を管理する。
図4Aの文字列データGの前半に含まれる「aeb」も文字列データEと同じくオブジェクトノード(aeb)で管理されるため、オブジェクト詳細テーブル90のROWID(G)を含む。このとき、オブジェクトノードが管理するROWIDは、ROWIDの値によって昇順、又は、降順にソートされた形式で管理される。
図5は、検索条件に該当するROWIDを探索する手順において、いずれかの検索条件に対して非該当となることが予め判断できているROWIDの範囲を管理する、非該当ROWID範囲リスト81の構造を示した図である。
最上位となる非該当ROWID範囲リスト81は、相互に異なる複数の非該当ROWID範囲エントリを管理する。1つの非該当ROWID範囲エントリは、検索条件に対して非該当(不一致)となるROWIDの値の範囲を最小値と最大値によって管理する。
また、1つの非該当ROWID範囲の最大値(最大ROWID値)は、当該範囲において現在の検索条件に該当する最小のROWID値を示す。したがって、非該当ROWID範囲は、最小値以上であり、かつ、最大値よりも小さなROWIDを意味する。1つの非該当ROWID範囲エントリが表す非該当ROWID範囲は、他の非該当ROWID範囲エントリが表す非該当ROWID範囲と重複しない。
この非該当ROWID範囲リスト81は、検索開始から検索終了の間で、主索引部(本実施例1では空間索引検索部61)による検索から得られる主索引部の検索条件に該当するROWID(候補ROWID)が、副索引部(本実施例1では文字列索引検索部71)によって検索条件に該当しないと判定される契機で、候補ROWIDの値を基に非該当ROWID範囲エントリの追加や最小値の更新がなされる。
例えば、非該当ROWIDの最小値が「100」の非該当範囲エントリは、ROWIDの最小値が「100」、最大値が「200」を示す。これは、現在の検索条件に該当しないROWIDの値が「100」以上、「200」未満であることを示す。したがって、オブジェクト検索部50は、現在の検索条件では、ROWIDの値が「100」以上「200」未満の範囲を除外して検索すればよい。
これにより、空間データ索引部23及び文字列索引検索部71は、非該当ROWID範囲リスト81を参照することで、現在の検索条件にマッチしないROWIDを取得して、このROWID範囲を読み飛ばすことで、検索処理を高速化することができる。
図6は、概略判定リスト82の概念図を示したものである。主索引部(本実施例1では空間索引検索部61)による検索から得られる候補ROWIDが、全ての副索引部(本実施例1では文字列索引検索部71)によってそれぞれの検索条件の全てに該当すると判断された場合に、空間データ索引部23のキー値(本実施例1では座標値とROWID)が概略判定リスト82へ登録される。
この概略判定リスト82に登録されたROWIDは、検索結果として出力されるオブジェクトを示すものである。なお、検索結果の取り出し順序に、任意点からの距離順を指定された場合は、この概略判定リスト82の各キーの座標値を基にソートを実施して検索結果を出力する。
空間範囲だけを検索条件に指定された場合に、オブジェクト検索部50が主索引の例に挙げた空間データ索引部23だけで該当オブジェクトを検索する手順を説明する。
図7Aは、オブジェクト検索部50が実行する、検索範囲を、太い破線で囲む矩形の左下座標(5、2)〜右上座標(7、5)としたときの、図3Bの空間索引ツリー24を検索する様子を示す。以下に、この場合の手順について、図7A及び図7Bを併せて参照しつつ、以下に説明する。
まず、図7Bにおける1回目の検索処理(図中左側の破線矢印75)について、説明する。検索起点設定部62は、図7Aに示す検索範囲の左下座標(5、2)をモートン符号値「28」に変換し、検索符号値Mに設定する。
空間索引ツリー24を探索する際、空間索引検索部61は、検索符号値Mに対応した座標を含む空間領域を辿る。モートン符号値の性質から、検索符号値M以下で最大のモートン符号値を含む部分木を辿ることになる。
この場合、図7Bにおいて、空間索引ツリー24のルートノードを参照すると、モートン符号値「60」の左の子ノードへのリンクを辿る。これは、このリンクは、検索符号値M「28」以下で最大のモートン符号値をもつ部分木を指し示すためである。
ルートノードの子ノードでは、同様にモートン符号値「32」の左ポインタが指し示す孫ノードを辿る。さらに、この孫ノードでは、検索符号値M「28」は空間領域情報のモートン符号値「16」を代表点とする空間領域に含まれるため(図7Aで空間領域の右上座標のモートン符号値は「31」であるため)、空間索引検索部61は、そのノードからのリンク先であるオブジェクトノード「B」を概略判定リスト82に入れる。
検索起点設定部62は、空間索引ツリー24をリーフノード(及びその下のオブジェクトノード)まで辿った後、検索符号値Mを更新する。次回の検索符号値Mは、今回の検索符号値Mに対応する検索範囲から、今回の検索符号値Mから検索された空間領域を除外(領域として切り取る)した後の、残りの検索範囲の座標に対応したモートン符号値の中で最小値になる。
例えば、図7Aにおいて、今回の検索範囲(5、2)〜(7、5)に対して、検索された空間領域の範囲(4、0)〜(7、3)を除外すると、残りの検索範囲は(5、4)〜(7、5)となる。よって、検索起点設定部62は、座標(5、4)のモートン符号値「49」を、次回の検索符号値Mとする。
次に、図7Bにおける2回目の検索処理(図中中央の破線矢印76)について、説明する。
空間索引検索部61は、空間索引ツリー24のルートノードを参照すると、検索符号値M「49」以下で最大のモートン符号値をもつ部分木を指し示すモートン符号値「60」の左の子ノードへのリンクを辿る。その子ノードでは、空間領域情報のモートン符号値「32」以上で、「52」よりも小さい、左から2つ目の子ノードへのリンクを辿る。その子ノード(ルートノードの孫ノード)では、検索符号値M「49」は空間領域情報のモートン符号値「48」を代表点とする空間領域に含まれる。このため、空間索引検索部61は、そのノードからのリンク先であるオブジェクトノード「C」を概略判定リスト82に入れる。
図7Aで今回の検索範囲(5、4)〜(7、5)に対して、検索された空間領域の範囲(4、4)〜(5、5)を除外すると、残りの範囲は(6、4)〜(7、5)となる。よって、検索起点設定部62は、図7Aの座標(6、4)のモートン符号値「52」を次の検索対象値Mとする。
そして、図7Bにおける3回目の検索処理(図中右側の破線矢印77)について、説明する。
空間索引検索部61は、空間索引ツリー24のルートノードを参照すると、検索符号値M「52」はルートノードの空間領域情報のモートン符号値「60」よりも小さいので、左下の子ノードへのリンクを辿る。その子ノードでは、検索符号値M「52」は空間領域情報のモートン符号値「52」以上なので、さらに左から3つめの子ノードへのリンクを辿る。その子ノード(ルートノードの孫ノード)では、検索符号値M「52」は空間領域情報のモートン符号値「52」を代表点とする空間領域に含まれるため、空間索引検索部61は、そのノードからのリンク先であるオブジェクトノード「E、G」を概略判定リスト82に入れる。
図7Aで今回の検索範囲(6、4)〜(7、5)に対して、検索された空間領域の範囲(6、4)〜(7、5)を除外すると、残りの検索範囲が無くなる。よって、検索符号値Mは更新せず、空間索引検索部61は空間索引ツリー24を対象とした検索を終了する。
以上の結果、オブジェクト「B、C、E、G」が、空間索引ツリー24からリンクを辿ることにより検索され、図7Aの太い破線の枠で囲んだ検索範囲(5、2)〜(7、5)に適合する検索結果として、出力装置95に出力される。
なお、検索条件となる検索範囲の形状は、円、矩形、多角形など任意である。例えば、円を検索範囲とする場合、円の外接矩形を検索範囲として代替して、前記の方法でオブジェクトノードを辿った後、概略判定リスト82への登録前に、円に含まれるか否かを座標値によって判定する方法などで実現できる。
副索引(文字列データ索引部33)を利用した検索手順は、前記の空間データ索引部23の手順と同等である。本実施例1では、検索条件に図7Aの検索範囲が与えられ、かつ、文字列データに“aeb”と“upc”の両方を含むという検索条件が与えられた場合に、文字列データ索引部33を利用した検索手順について図7A〜図10を参照して説明する。
まず、オブジェクト検索部50は、前記図7Bの左側の破線矢印75に沿って、オブジェクトノードBまで辿る。文字列索引検索部71は、このオブジェクトノードBを概略判定リスト82に登録する前に、オブジェクトノードBのROWID値(240)を候補ROWIDとし、図8Bの文字列索引ツリー34を辿って文字列データの検索条件に対する絞り込みを実施する。
文字列索引検索部71は、検索条件の文字列の“aeb”と“upc”のそれぞれについて図8Bの文字列索引ツリー34を辿る。まず、文字列索引検索部71は、検索条件“aeb”について1文字ずつルートノード(a)、ルートノードの子ノード(e)、リーフノード(b)を辿り、オブジェクトノード(E、G)まで辿る。
ここで文字列データの検索条件が図8Aで示すように、「“aeb”と“upc”の両方を含む文字列データ」というAND論理演算であるため、文字列索引検索部71は、まず、“aeb”が含まれるオブジェクトを指し示すオブジェクトノード(E、G)に候補ROWID(240)が含まれるか否かを判定する。
文字列索引検索部71は、判定の結果、オブジェクトノード(E、G)に候補ROWID(240)は存在しないため、残りの検索条件「“upc”を含む」を判定することなく、この候補ROWIDは非該当として概略判定リスト82に登録せず、非該当ROWID範囲リスト81の設定(更新)を非該当ROWID範囲設定部52へ依頼する。なお、非該当ROWID範囲リスト81の更新は、文字列索引検索部71が行うようにしてもよい。
図9は、非該当ROWID範囲設定部52が行う、非該当ROWID範囲リスト81への登録手順を図示したものである。
前記の候補ROWID(240)を文字列索引の検索条件によりオブジェクトノードを辿った際、候補ROWID(240)がオブジェクトノードに存在せず、オブジェクトノード内でROWID(240)よりも小さなROWIDが存在せず、かつ、次に存在するROWIDはROWID(260)である。
したがって、ROWID(0)〜ROWID(259)の範囲のROWIDは、文字列索引の検索条件に該当しないため、空間索引の検索結果に関わらず非該当のオブジェクトである。
非該当ROWID範囲設定部52は、非該当ROWID範囲リスト81に、「最小値0、最大値260」の非該当ROWID範囲エントリ811を追加する。本実施例1では、ROWIDを整数で扱うため、ROWID(259)より大なる値「260」を最大値として設定する。また、候補ROWID(240)は非該当と判断されたため概略判定リスト82には登録されない。
次に、空間索引検索部61は、図7Bの中央の破線矢印76の順にて、オブジェクトノードCまで辿り、候補ROWIDを(245)とする。空間索引検索部61は、この候補ROWID(245)を概略判定リスト82へ登録する前に、この候補ROWID(245)が図9の非該当ROWID範囲リスト81の範囲に含まれるかをサーチする。
空間索引検索部61は、非該当ROWID範囲リスト81が管理する各エントリの非該当ROWIDの最小値のうち、候補ROWID(245)よりも小さく、値が最大である非該当ROWID範囲エントリを辿る。これにより、空間索引検索部61は、候補ROWID値(245)が0以上かつ260未満の非該当ROWID範囲に含まれるため、非該当であることを判定できる。このため、候補ROWID値(245)は概略判定リスト82には登録されない。
次に、空間索引検索部61は、図7Bの右側の破線矢印77の順にて、オブジェクトノードE、Gまで辿る。文字列索引検索部71は、このオブジェクトノードEを候補ROWID(260)とし、概略判定リスト82へ登録する前に、候補ROWID値(260)が、図9の非該当ROWID範囲リスト81の範囲に含まれるか否かをサーチする。
空間索引検索部61は、非該当ROWID範囲リスト81が管理する各エントリの非該当ROWIDの最小値のうち、候補ROWID(260)よりも小さく、値が最大である非該当ROWID範囲エントリを辿る。これにより、空間索引検索部61は、候補ROWID値(260)が、240以上かつ260未満の非該当ROWID範囲に含まれないため、図8Bの文字列索引ツリー34を辿って文字列の検索条件を評価する。
文字列索引検索部71は、図8Bの前回の検索条件“aeb”の対象オブジェクトノード位置からオブジェクトEのROWID(260)が存在することを判定する。次に、文字列索引検索部71は、もう一方の検索条件“upc”について1文字ずつルートノード(u)、ルートノードの子ノード(p)、リーフノード(c)を辿り、オブジェクトノード(D、G)まで辿る。
オブジェクトノード(D、G)には、候補ROWID(260)が含まれていないため、文字列索引検索部71は、この候補ROWIDを非該当と判定して概略判定リスト82に登録せず、非該当ROWID範囲の設定を非該当ROWID範囲設定部52へ依頼する。
図10は、図9の非該当ROWID範囲リスト81に対して、非該当ROWID範囲設定部52が、非該当ROWID範囲を更新する手順を図示したものである。
非該当ROWID範囲設定部52は、候補ROWID(260)よりも小さな値(0)を最小値とする非該当ROWID範囲エントリを辿り、そのエントリが管理する範囲に候補ROWID(260)が含まれているため、この非該当ROWID範囲エントリを更新対象とする。
非該当ROWID範囲設定部52は、文字列索引で検索文字列に該当するオブジェクトノード上で候補ROWID(260)よりも1つ大きいROWID(280)は、この非該当ROWID範囲エントリの最大ROWID(260)よりも大きな値である。
したがって、現時点で非該当ROWID範囲とされていない260〜279の範囲も非該当であることが判明していることから、非該当ROWID範囲設定部52は、非該当ROWID範囲エントリの最大値を260から280に更新する。また、候補ROWID(260)は非該当と判定されたため概略判定リスト82には登録されない。
次に、図7Bの前回の検索条件(図中右側の破線矢印77)で辿ったオブジェクトノードGの候補ROWID(280)について、空間索引検索部61は、非該当ROWID範囲に含まれるか否かを前述の手順で判定においてする。この判定の結果、候補ROWID(280)は非該当ROWID範囲に含まれないため、文字列索引検索部71は、図8Bの文字列索引によって検索条件の評価を行う。
文字列索引検索部71は、図8Bで、検索条件“aeb”による前回のオブジェクトノードGをサーチして、候補ROWID(280)が存在することが判定される。次に、検索条件“upc”による前回のオブジェクトノードGをサーチして候補ROWID(280)が存在することが判定される。
以上から文字列索引の検索条件「“aeb”と“upc”の両方を含む文字列」に対してオブジェクトノードGのROWID(280)が該当すると判断される。このため、文字列索引検索部71は、候補ROWID(280)を、概略判定リスト82に登録し、検索結果を出力装置95へ出力する。
この後、文字列索引検索部71は、図7Bにおいて、次のオブジェクトノードが存在しないため、検索を終了する。
本実施例1における検索手法は前記の通りである。この手順における非該当ROWID範囲リスト81の特性から、図1の空間データ索引部23が管理する空間オブジェクトテーブル25のROWID全体に対して、昇順にソートされたROWID部分が多いほど、非該当ROWID範囲のサーチ処理と判定処理の効率を向上させ、検索時間の短縮を図ることができる。
このため、図1の空間データ索引部23での検索順序に近い順序でオブジェクト識別子(ROWID)を割り当てることが考えられる。具体的な例として、図7Bの空間索引ツリー24を例に説明する。
図7Aの空間索引ツリー24では、空間索引検索部61が前記の通り、モートン符号値の順に空間領域(空間オブジェクトテーブル25)を探索する。したがって、各オブジェクトの座標値から得られるモートン符号値が昇順になる順序で各オブジェクトを配置し、この順序に応じたROWID値を割り当ててデータ管理装置1を構築することで、非該当ROWID範囲の判定の効率化が実現できる。
図11は、図1で示した空間索引検索部61による、主索引(空間データ索引部23)の検索処理の一例を示すフローチャートである。
図11におけるステップS101では、空間索引検索部61が、主索引用の検索条件に該当する主索引(空間索引ツリー24)の下位ノードを辿り、主索引の該当オブジェクトノードのうち未確認(未処理)のオブジェクトノードを1つ取り出す。
次にステップS102にて、空間索引検索部61は、上記取り出した1つの該当オブジェクトノードの中から、未確認(未処理)のオブジェクト識別子(ROWID)を1つ選択して、これを候補ROWIDとして扱う。
ステップS103では、空間索引検索部61が、非該当ROWID範囲リスト81を参照し、候補ROWIDが非該当ROWID範囲に含まれるか否かを判定する。空間索引検索部61は、候補ROWIDが非該当ROWID範囲に含まれる場合、候補ROWIDは文字列索引検索部71の検索条件に該当しないオブジェクトであると判定できる。このため、この候補ROWIDに対する以降の判定(文字列索引検索部71での検索処理)をスキップしてS107に進む。すなわち、副索引(文字列データ索引部33)による検索を実施せずに、次のオブジェクトノードの評価に進む。
一方、空間索引検索部61は、候補ROWIDが非該当ROWID範囲に含まれなければ、ステップS104以降の処理を行う。
ステップS104では、主索引(空間データ索引部23)用の検索条件に合致したオブジェクトの候補ROWIDが、副索引(文字列データ索引部33)用の検索条件に該当するか否かを判定する処理であり、文字列索引検索部71が判定結果を「該当」又は「非該当」の2値で出力する。この処理の詳細は図12A、図12Bのフローチャートで説明する。
ステップS105では、空間索引検索部61が、ステップS104での副索引による候補ROWIDの判定結果が該当(文字列の検索条件に一致)したか否かを判定する。候補ROWIDが副索引用の条件に該当した場合は、ステップS106に進んで、空間索引検索部61が、この候補ROWIDを概略判定リスト82に登録する。
一方、候補ROWIDが副索引用の検索条件に該当しなかった場合、空間索引検索部61が、候補ROWIDを概略判定リスト82に登録せずに、ステップS107に進む。
ステップS107では、空間索引検索部61が、1つの候補ROWIDの判定が完了し、現在取り出しているオブジェクトノードに含まれる未確認(未処理)のROWIDが存在するか否かを判定する。当該オブジェクトノードに未確認のROWIDが存在する場合、空間索引検索部61は、ステップS102に戻って次の未確認のROWIDを次の候補ROWIDとして上記処理を繰り返す。
一方、現在取り出しているオブジェクトノードに未確認のROWIDがない場合、ステップS108にて、空間索引検索部61が、主索引(空間データ索引部23)用の検索条件に該当する未確認のオブジェクトノードが無いかを判定する。
空間索引検索部61は、未確認のオブジェクトノードがある場合、ステップS101に戻って未確認のオブジェクトノードからROWIDを1つ取り出してから上記処理を繰り返す。一方、当該オブジェクトノードに未確認のオブジェクトノードが無い場合、ステップS109に進む。
ステップS109では、空間索引検索部61が、概略判定リスト82に登録された、検索条件に該当するROWID群を検索結果として出力装置95へ出力する。なお、空間索引検索部61は、検索結果としてROWIDで特定されるオブジェクトをオブジェクト詳細テーブル90から取得して出力装置95に表示する。
上記処理によって、データ管理装置1では、空間索引検索部61が位置情報(空間データ)に関する検索条件を満たす候補ROWIDについて、非該当ROWID範囲リスト81に当該ROWIDが存在する場合には、副索引部(文字列データ索引部33)での検索をスキップすることで、検索処理の高速化を図ることができる。これにより、利用可能な計算機資源が少ない環境においても、高速な検索処理を実現することが可能となる。
図12A、図12Bは、図1で示した文字列索引検索部71による、副索引(文字列データ索引部33)の検索処理を示すフローチャートである。このフローチャートは図11におけるステップS104に相当し、対象となる副索引(文字列データ索引部33)用の検索条件に該当するオブジェクトノードの中に候補ROWIDが存在するか否かを判定し、候補ROWIDが存在する場合は「該当」を、候補ROWIDが存在しない場合は「非該当」を出力する処理である。
図12AにおけるステップS201では、文字列索引検索部71が副索引(文字列データ索引部33)用の検索条件に該当するオブジェクトノードを辿り、副索引用の検索条件に該当するオブジェクトノード群を取り出し、ステップS202にてオブジェクトノード群が管理する全てのROWIDの値を昇順にソートする。
なお、検索条件に該当するROWIDがソート済みである場合は、このソート処理をスキップすることができる。例えば、検索条件に該当するオブジェクトノードが1つだけであり、1つのオブジェクトノードが管理する全てのROWIDがソートされている構造である場合は、ROWIDがソート済みであるため、文字列索引検索部71はソート処理をスキップすることができる。
ステップS203では、文字列索引検索部71が上記ステップS202でソートされたROWIDのうち未確認(未処理)のROWIDを昇順で1つ取り出して比較対象ROWIDとする。
ステップS204では、文字列索引検索部71が比較対象ROWIDの値と候補ROWIDの値とを比較し、比較対象ROWIDの値が候補ROWIDの値以下であるか否かを判定する。比較対象ROWIDの値が候補ROWIDの値以下であればステップS205へ進み、そうでない場合にはステップS209へ進む。
文字列索引検索部71は、昇順にソートされた比較対象ROWIDの値が、候補ROWIDの値より大きい場合、この副索引用の検索条件に対して候補ROWIDが存在しないことを判定できる。
そのため、文字列索引検索部71は、ステップS209において比較対象ROWIDで非該当ROWID範囲リスト81の更新を行う。文字列索引検索部71は、図9で示したように、文字列索引検索部71における検索条件に合致しない候補ROWIDの範囲を設定する。次に、文字列索引検索部71は、ステップS210で候補ROWIDを非該当と応答して処理を終了する。
一方、ステップS204で比較対象ROWIDの値が候補ROWIDの値以下であれば、ステップS205にて、文字列索引検索部71は、比較対象ROWIDと比較対象ROWIDの値が一致するか否かを判定する。
文字列索引検索部71は、両方の値が一致していれば、この副索引(文字列データ索引部33)用の検索条件に候補ROWIDが該当すると判定し、ステップS206に進む。
また、ステップS205にて、両方の値が一致しなかった場合、比較対象ROWIDの値が候補ROWIDの値よりも小さいことが判定される。この場合、より大きな比較対象ROWIDが存在する可能性があるため、図12BのステップS211で、文字列索引検索部71が、現在の比較対象ROWIDの値を元に、非該当ROWID範囲リスト81を更新する。
そして、ステップS212にて、文字列索引検索部71は、副索引用の検索条件に該当するROWIDのリストに未確認(未処理)のROWIDが残っている間は上記ステップS203からの処理を繰り返す。
ステップS212にてROWIDのリストに未確認のROWIDが無くなった場合、文字列索引検索部71は、ステップS213で候補ROWIDを非該当として結果を出力して処理を終了する。
ステップS206では現在サーチを行っている副索引(文字列データ索引部33)の検索条件の他に、未判定である他の副索引の検索条件があるか否かを判定する。例えば、主索引(空間データ索引部23)の検索条件を図11で実施し、副索引(文字列データ索引部33)の検索条件を図12AのS205まで完了した後、さらなる副索引(文字列データ索引部33)の検索条件が存在する場合などである。
このような未判定である他の副索引の検索条件が存在しない場合、文字列索引検索部71は、候補ROWIDが全ての検索条件に該当することが判明しているため、ステップS208に進んで候補ROWIDを検索条件に該当として結果を出力して処理を終了する。
一方、ステップS206で未判定である他の副索引の検索条件が存在する場合、文字列索引検索部71は、図12A、図12Bのフローチャート(S104)を再帰的に実行して、候補ROWIDが他の副索引の検索条件に該当するかを判定する。
文字列索引検索部71は、未判定である他の副索引の検索条件の全てに対して繰り返してステップS104の処理を再帰的に実行し、それぞれのステップS104の呼出し元のステップS207において、ステップS104の結果を判定する。
文字列索引検索部71は、ステップS104が出力する結果が「該当」であれば、ステップS208にて候補ROWIDを検索条件に「該当」として結果を出力して処理を終了する。一方、ステップS104が出力する結果が検索条件に該当しなければ、文字列索引検索部71は、ステップS210にて候補ROWIDを「非該当」として結果を出力して処理を終了する。
以上のように、本実施例1では、データ管理装置1は、主索引部(空間データ索引部23)を利用して第1の検索条件(位置情報)に該当するかオブジェクトの有無を判定する主索引検索部(空間索引検索部61)と、副索引部(文字列データ索引部33)を利用して第2の検索条件に該当するオブジェクトの有無を判定する副索引検索部(文字列索引検索部71)と、を有する。主索引検索部(空間索引検索部61)は、主索引部(空間データ索引部23)で第1の検索条件に該当するオブジェクト識別子(ROWID)からROWIDの候補(候補ROWID)を1件取り出して、非該当ROWID範囲リスト81のROWID範囲に含まれるか否かを判定する。
主索引検索部(空間索引検索部61)は、候補ROWIDが非該当ROWID範囲リスト81のROWID範囲に含まれる場合には、候補ROWIDが非該当であると判定できるので、副索引部(文字列データ索引部33)による検索処理(文字列索引検索部71)をスキップして、次の候補ROWIDの評価に進む。
これにより、主索引検索部(空間索引検索部61)では非該当ROWID範囲リスト81により、副索引検索部で検索条件に該当しないことが判定できるので、副索引検索部の処理を禁止することで、検索処理の高速化を図ることができる。換言すれば、本実施例1のデータ管理装置1では、無駄な副索引検索部の処理を禁止することで、検索処理の負荷を削減することができ、計算機資源の少ない計算機でも、高速な検索処理を実現することが可能となる。
また、副索引検索部(文字列索引検索部71)では、文字列データ索引部33で管理するROWIDの順序から、検索条件に該当しない比較対象ROWIDの最小値と最大値で非該当ROWID範囲リスト81を更新する。
これにより、現在の検索条件に合致しないROWIDの範囲を学習して、次の検索処理を高速に行うことが可能となる。
また、主索引部(空間データ索引部23)では、データ管理装置1で管理する全て又は一部のオブジェクトについて、主索引部の検索順序で参照するオブジェクトの順序を、それぞれのオブジェクトのROWIDの値の昇順又は降順となるようにROWID値を割り当てる。
これにより、非該当ROWID範囲リスト81の検索及び判定処理を高速化することができる。
図13は、本発明の実施例2を示し、データ管理装置の一例を示すブロック図である。実施例2のデータ管理装置1は、前記実施例1の空間データ索引部23を、データA主索引部20に置き換え、文字列データ索引部33を複数のデータB副索引部30−1〜データN副索引部30−mに置き換え、空間索引検索部61をデータA索引検索部60に置き換え、文字列索引検索部71を複数のデータB索引検索部70−1〜データN索引検索部70−mに置き換えたものである。その他の構成は、前記実施例1と同様である。
オブジェクトを検索するための条件に用いられる属性に応じて、オブジェクトの属性データを索引化して、それぞれの索引部が構成される。本実施例2では、索引部として、1つの主索引部(データA主索引部20)と、複数の副索引部(データB副索引部30−1〜データN副索引部30−m)が構成される例を示す。
主索引部及び副索引部は、B−木インデックスやハッシュインデックスなどの汎用性の高いインデックスや、R−木を代表とする空間インデックスや、文字列の中間一致検索用の全文検索インデックスなど、後述の図14で説明する特徴を含む全ての索引部が適用でき、副索引部の数も1つ以上の任意の数を適用できる。
図14は、データ管理装置1における主索引部(データA主索引部20)、及び副索引部(データB副索引部30−1〜データN副索引部30−m)の一例を示すブロック図である。
主索引部(データA主索引部20)は索引ツリー21とオブジェクトテーブル22で構成される。データA索引検索部60は、指定された検索条件に応じて索引ツリー21を辿り、索引ツリー21にリンクされたオブジェクトテーブル22のノードを特定する。
オブジェクトテーブル22は、オブジェクト詳細テーブル90で管理される個々のオブジェクトを、前記実施例1と同様に、オブジェクト識別子(ROWID)によってリンクする。オブジェクトテーブル22の各オブジェクトノードは、1つ又は複数のROWIDを管理する。
一方、副索引部(データB副索引部30−1〜データN副索引部30−m)もデータA主索引部20と同じく、索引ツリー31−1〜31−mと、オブジェクトテーブル32−1〜32−mで構成され、データA主索引部20と同様にオブジェクト詳細テーブル90とのリンクを含む。
ただし、副索引部のオブジェクトテーブル32−1〜オブジェクトテーブル32−mで管理される1つのオブジェクトノード(キー値)の中で、ROWIDは昇順又は降順にソートされており、主索引部では1つのオブジェクトノード(キー値)の中で、ROWIDの順序は任意に配置されている。
主索引部(データA主索引部20)は、例えば、空間(座標)データの索引が設定され、副索引部のデータB副索引部30−1は、数値データの索引が設定され、データN副索引部30−mには、タイムスタンプの索引が設定される。本実施例2では、前記実施例1の空間データと文字列データの索引に加えて、数値データやタイムスタンプ等の索引を有することで、複数の種類の検索条件の論理積によるオブジェクトの検索処理を実現することが可能となる。
そして、副索引検索部(データB索引検索部70−1〜70−N)では、複数の検索条件が存在する場合には、比較対象ROWIDと候補ROWIDの判定処理を再帰的(図12AのステップS104)に実行することで、候補ROWIDが他の副索引部の検索条件に該当するか否かを判定することができる。
なお、上記実施例1、2では、オブジェクト詳細テーブル90がデータ管理装置1内の二次記憶装置93に格納される例を示したが、オブジェクト詳細テーブル90はデータ管理装置1の外部に接続されてもよいし、他の計算機に格納されてもよい。
<まとめ>
以上のように、上記実施例1、2のデータ管理装置1は、以下の構成とすることができる。
以上のように、上記実施例1、2のデータ管理装置1は、以下の構成とすることができる。
(1)プロセッサ(中央処理装置91)とメモリ(主記憶装置92)を有し、属性の異なる第1の検索条件(空間データの検索条件)と第2の検索条件(文字列データの検索条件)を受け付けて、前記第1の検索条件及び第2の検索条件を満たすオブジェクトを検索するデータ管理装置(1)であって、前記第1の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第1の索引(空間索引ツリー24)と、前記第1の索引(24)のオブジェクトノードに対応するオブジェクト識別子(ROWID)を管理する第1のオブジェクト管理情報(空間オブジェクトテーブル25)と、前記第2の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第2の索引(文字列索引ツリー34)と、前記第2の索引(34)のオブジェクトノードに対応するオブジェクト識別子(ROWID)を管理する第2のオブジェクト管理情報(文字列オブジェクトテーブル35)と、前記第1の検索条件で前記第1の索引(24)を探索してオブジェクトノードを取得し、当該オブジェクトノードで前記第1のオブジェクト管理情報(25)を探索して前記オブジェクト識別子(ROWID)を取得する主索引検索部(空間索引検索部61)と、前記第2の検索条件で前記第2の索引(34)を探索してオブジェクトノードを取得し、当該オブジェクトノードで前記第2のオブジェクト管理情報(35)を探索して前記オブジェクト識別子(ROWID)を取得する副索引検索部(文字列索引検索部71)と、を有する。
上記構成により、主索引検索部(空間索引検索部61)が位置情報(空間データ)に関する検索条件(第1の検索条件)を満たす候補ROWIDについて、副索引部(文字列データ索引部33)で文字列情報(文字列データ)に関する検索条件(第2の検索条件)を満たすROWIDを抽出できる。これにより、主索引検索部と副索引検索部では、属性の異なるデータの検索をそれぞれ実施することで、複数の属性を含む検索を高速に実行することができる。
なお、上記実施例1、2では、主索引検索部(61)で空間データの検索を実施し、副索引検索部(71)で文字列データの検索を実施する例を示したが、これに限定されるものではない。例えば、データの属性としては、空間データ(位置情報)、文字列の他に、数値データや時刻情報(タイムスタンプ)を用いることができる。
また、(2)上記(1)に記載のデータ管理装置(1)であって、前記オブジェクト識別子(ROWID)に対応するオブジェクトを格納するオブジェクト詳細情報(オブジェクト詳細テーブル90)をさらに有し、前記主索引検索部(61)は、前記第1の検索条件を満足する前記オブジェクト識別子を取得した場合に、前記副索引検索部(71)で前記第2の検索条件を満足し、かつ前記第1の検索条件を満足するオブジェクト識別子(ROWID)を検索し、当該オブジェクト識別子に対応するオブジェクトを前記オブジェクト詳細情報(90)から取得して、当該オブジェクトを検索結果として出力する。
上記構成により、主索引検索部(61)の検索結果と、副索引検索部(71)の検索結果の論理積となるオブジェクト識別子に対応するオブジェクト詳細テーブル90から取得して検索結果として出力することができる。
上記実施例1、2では、副索引検索部(71)が1つの例を示したが、これに限定されるものではない。例えば、複数の副索引検索部を有し、各副索引検索部では、数値データや時刻情報(タイムスタンプ)のデータをそれぞれ検索し、各検索結果の論理積を検索結果として出力することができる。
また、(3)上記(1)に記載のデータ管理装置(1)であって、前記主索引検索部(61)は、前記第1の検索条件を満足する前記オブジェクト識別子(ROWID)を候補オブジェクト識別子(候補ROWID)として前記副索引検索部(71)へ出力し、前記副索引検索部(71)は、前記第2の検索条件を満足する前記オブジェクト識別子を比較対象オブジェクト識別子(比較対象ROWID)として取得し、前記候補オブジェクト識別子が前記比較対象オブジェクト識別子と一致するか否かを判定し、前記主索引検索部(61)は、前記副索引検索部(71)で、比較対象オブジェクト識別子と一致する候補オブジェクト識別子を検索結果として出力する。
上記構成により、主索引検索部(61)の検索結果を候補ROWIDとして副索引検索部(71)へ入力し、副索引検索部(71)は第2の検索条件(文字列データ)の検索結果を比較対象ROWIDとして取得し、入力された候補ROWIDが比較対象ROWIDと一致すれば、複数の検索条件を満たすと判定することができる。これにより、属性の異なる複数の検索条件の論理積で検索を実施することができる。
(4)上記(3)に記載のデータ管理装置(1)であって、前記副索引検索部(71)は、当該副索引検索部(71)の検索条件に合致しない候補オブジェクト識別子(候補ROWID)の値を格納する非該当オブジェクト識別子範囲情報(非該当ROWID範囲リスト81)を管理し、前記候補オブジェクト識別子が前記比較対象オブジェクト識別子と一致しない場合には、当該候補オブジェクト識別子の値を含む範囲を前記非該当オブジェクト識別子範囲情報(81)に設定する。
副索引検索部(71)では、候補ROWID毎に比較対象ROWIDと一致するか否かを判定する度に、比較対象ROWIDと一致しない候補ROWIDの値の範囲を非該当ROWID範囲リスト81へ格納することができる。
また、(5)上記(4)に記載のデータ管理装置であって、前記主索引検索部(61)は、前記候補オブジェクト識別子の値が前記非該当オブジェクト識別子範囲情報(81)に含まれるか否かを判定し、前記候補オブジェクト識別子の値が前記非該当オブジェクト識別子範囲情報(81)に含まれる場合には、前記副索引検索部(71)の処理を省略して前記候補オブジェクト識別子を第2の検索条件に一致しないと判定する。
上記構成により、主索引検索部(空間索引検索部61)では非該当ROWID範囲リスト81により、候補ROWIDが副索引検索部(文字列索引検索部71)での検索条件に該当しないことが判定できるので、副索引検索部の処理を省略(禁止)することで、検索処理の高速化を図ることができる。無駄な副索引検索部の処理を禁止することで、検索処理の負荷を削減することができ、計算機資源の少ない計算機でも、高速な検索処理を実現することが可能となる。
また、(6)上記(1)に記載のデータ管理装置(1)であって、前記第2のオブジェクト管理情報(35)は、前記オブジェクトノードが対応するオブジェクト識別子(ROWID)の値の昇順又は降順でソートされる。
上記構成により、非該当ROWID範囲リスト81の検索及び判定処理を高速化することができる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、又は、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
1 データ管理装置
20 データA主索引部
21 索引ツリー
22 オブジェクトテーブル
23 空間データ索引部
24 空間索引ツリー
25 空間オブジェクトテーブル
30 データB副索引部
31 索引ツリー
32 オブジェクトテーブル
33 文字列データ索引部
34 文字列索引ツリー
35 文字列オブジェクトテーブル
40 データN副索引部
41 索引ツリー
42 オブジェクトテーブル
50 オブジェクト検索部
51 データN索引検索部
61 空間索引検索部
62 検索起点設定部
63 空間条件判定部
71 文字列索引検索部
72 検索初期設定部
73 文字条件判定部
81 非該当ROWID範囲リスト
82 概略判定リスト
90 オブジェクト詳細テーブル
91 中央処理装置
92 主記憶装置
93 二次記憶装置
94 入力装置
95 出力装置
20 データA主索引部
21 索引ツリー
22 オブジェクトテーブル
23 空間データ索引部
24 空間索引ツリー
25 空間オブジェクトテーブル
30 データB副索引部
31 索引ツリー
32 オブジェクトテーブル
33 文字列データ索引部
34 文字列索引ツリー
35 文字列オブジェクトテーブル
40 データN副索引部
41 索引ツリー
42 オブジェクトテーブル
50 オブジェクト検索部
51 データN索引検索部
61 空間索引検索部
62 検索起点設定部
63 空間条件判定部
71 文字列索引検索部
72 検索初期設定部
73 文字条件判定部
81 非該当ROWID範囲リスト
82 概略判定リスト
90 オブジェクト詳細テーブル
91 中央処理装置
92 主記憶装置
93 二次記憶装置
94 入力装置
95 出力装置
Claims (8)
- プロセッサとメモリを有し、属性の異なる第1の検索条件と第2の検索条件を受け付けて、前記第1の検索条件及び第2の検索条件を満たすオブジェクトを検索するデータ管理装置であって、
前記第1の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第1の索引と、
前記第1の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第1のオブジェクト管理情報と、
前記第2の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第2の索引と、
前記第2の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第2のオブジェクト管理情報と、
前記第1の検索条件で前記第1の索引を探索してオブジェクトノードを取得し、当該オブジェクトノードで前記第1のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する主索引検索部と、
前記第2の検索条件で前記第2の索引を探索してオブジェクトノードを取得し、当該オブジェクトノードで前記第2のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する副索引検索部と、を有することを特徴とするデータ管理装置。 - 請求項1に記載のデータ管理装置であって、
前記オブジェクト識別子に対応するオブジェクトを格納するオブジェクト詳細情報をさらに有し、
前記主索引検索部は、
前記第1の検索条件を満足する前記オブジェクト識別子を取得した場合に、前記副索引検索部で前記第2の検索条件を満足し、かつ前記第1の検索条件を満足するオブジェクト識別子を検索し、当該オブジェクト識別子に対応するオブジェクトを前記オブジェクト詳細情報から取得して、当該オブジェクトを検索結果として出力することを特徴とするデータ管理装置。 - 請求項1に記載のデータ管理装置であって、
前記主索引検索部は、
前記第1の検索条件を満足する前記オブジェクト識別子を候補オブジェクト識別子として前記副索引検索部へ出力し、
前記副索引検索部は、
前記第2の検索条件を満足する前記オブジェクト識別子を比較対象オブジェクト識別子として取得し、前記候補オブジェクト識別子が前記比較対象オブジェクト識別子と一致するか否かを判定し、
前記主索引検索部は、
前記副索引検索部で、比較対象オブジェクト識別子と一致する候補オブジェクト識別子を検索結果として出力することを特徴とするデータ管理装置。 - 請求項3に記載のデータ管理装置であって、
前記副索引検索部は、
当該副索引検索部の検索条件に合致しない候補オブジェクト識別子の値を格納する非該当オブジェクト識別子範囲情報を管理し、前記候補オブジェクト識別子が前記比較対象オブジェクト識別子と一致しない場合には、当該候補オブジェクト識別子の値を含む範囲を前記非該当オブジェクト識別子範囲情報に設定することを特徴とするデータ管理装置。 - 請求項4に記載のデータ管理装置であって、
前記主索引検索部は、
前記候補オブジェクト識別子の値が前記非該当オブジェクト識別子範囲情報に含まれるか否かを判定し、前記候補オブジェクト識別子の値が前記非該当オブジェクト識別子範囲情報に含まれる場合には、前記副索引検索部の処理を省略して前記候補オブジェクト識別子を第2の検索条件に一致しないと判定することを特徴とするデータ管理装置。 - 請求項1に記載のデータ管理装置であって、
前記第2のオブジェクト管理情報は、
前記オブジェクトノードが対応するオブジェクト識別子の値の昇順又は降順でソートされたことを特徴とするデータ管理装置。 - プロセッサとメモリを有する計算機で、属性の異なる第1の検索条件と第2の検索条件を受け付けて、前記第1の検索条件及び第2の検索条件を満たすオブジェクトを検索するデータ検索方法であって、
前記計算機が、前記第1の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第1の索引を読み込んで、前記第1の検索条件で前記第1の索引を探索してオブジェクトノードを取得する第1のステップと、
前記計算機が、前記第1の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第1のオブジェクト管理情報を読み込んで、前記取得されたオブジェクトノードで前記第1のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する第2のステップと、
前記計算機が、前記第2の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第2の索引を読み込んで、前記第2の検索条件で前記第2の索引を探索してオブジェクトノードを取得する第3のステップと、
前記計算機が、前記第2の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第2のオブジェクト管理情報を読み込んで、前記取得されたオブジェクトノードで前記第2のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する第4のステップと、
を含むことを特徴とするデータ検索方法。 - プロセッサとメモリを有する計算機で、属性の異なる第1の検索条件と第2の検索条件を受け付けて、前記第1の検索条件及び第2の検索条件を満たすオブジェクトを検索させるためのプログラムであって、
前記第1の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第1の索引を読み込んで、前記第1の検索条件で前記第1の索引を探索してオブジェクトノードを取得する第1のステップと、
前記第1の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第1のオブジェクト管理情報を読み込んで、前記取得されたオブジェクトノードで前記第1のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する第2のステップと、
前記第2の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第2の索引を読み込んで、前記第2の検索条件で前記第2の索引を探索してオブジェクトノードを取得する第3のステップと、
前記第2の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第2のオブジェクト管理情報を読み込んで、前記取得されたオブジェクトノードで前記第2のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する第4のステップと、
を前記計算機に実行させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019029435A JP2020135530A (ja) | 2019-02-21 | 2019-02-21 | データ管理装置、データ検索方法及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019029435A JP2020135530A (ja) | 2019-02-21 | 2019-02-21 | データ管理装置、データ検索方法及びプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2020135530A true JP2020135530A (ja) | 2020-08-31 |
Family
ID=72263384
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019029435A Pending JP2020135530A (ja) | 2019-02-21 | 2019-02-21 | データ管理装置、データ検索方法及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2020135530A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112699223A (zh) * | 2021-01-13 | 2021-04-23 | 腾讯科技(深圳)有限公司 | 数据搜索方法、装置、电子设备及存储介质 |
-
2019
- 2019-02-21 JP JP2019029435A patent/JP2020135530A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112699223A (zh) * | 2021-01-13 | 2021-04-23 | 腾讯科技(深圳)有限公司 | 数据搜索方法、装置、电子设备及存储介质 |
CN112699223B (zh) * | 2021-01-13 | 2023-09-01 | 腾讯科技(深圳)有限公司 | 数据搜索方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8112448B2 (en) | Table classification device, table classification method, and table classification program | |
JP4848317B2 (ja) | データベースのインデックス作成システム、方法及びプログラム | |
US7756859B2 (en) | Multi-segment string search | |
US20050267902A1 (en) | Database and method of generating same | |
JPH11212980A (ja) | インデクス作成方法および検索方法 | |
KR20060048488A (ko) | 질의 강제 인덱싱 | |
KR102005343B1 (ko) | 분할 공간 기반의 공간 데이터 객체 질의처리장치 및 방법, 이를 기록한 기록매체 | |
JPWO2005119516A1 (ja) | 配列の生成方法、情報処理装置、及び、プログラム | |
CN108681603B (zh) | 数据库中快速搜索树形结构数据的方法、存储介质 | |
CN109815240A (zh) | 用于管理索引的方法、装置、设备和存储介质 | |
CN114090695A (zh) | 分布式数据库的查询优化的方法和装置 | |
US20140067853A1 (en) | Data search method, information system, and recording medium storing data search program | |
CN115918110A (zh) | 使用键值存储库的空间搜索 | |
JPH09245043A (ja) | 情報検索装置 | |
US11188594B2 (en) | Wildcard searches using numeric string hash | |
CN113515517B (zh) | 一种基于树形结构数据查询数据集的方法和计算机设备 | |
CN111125216B (zh) | 数据导入Phoenix的方法及装置 | |
JP2020135530A (ja) | データ管理装置、データ検索方法及びプログラム | |
CN110990423B (zh) | Sql语句的执行方法、装置、设备和存储介质 | |
CN106980673A (zh) | 内存数据库表索引更新方法及系统 | |
US10394870B2 (en) | Search method | |
JP2004534981A (ja) | データベース・システムでデータを編成し、問合せを処理する方法、およびそのような方法を実施するためのデータベース・システムおよびソフトウェア製品 | |
EP3995972A1 (en) | Metadata processing method and apparatus, and computer-readable storage medium | |
CN111309704B (zh) | 数据库操作方法和数据库操作系统 | |
JP3859044B2 (ja) | インデクス作成方法および検索方法 |