JP2012234415A - インデックス管理方法、インデックス管理プログラムおよびインデックス管理装置 - Google Patents

インデックス管理方法、インデックス管理プログラムおよびインデックス管理装置 Download PDF

Info

Publication number
JP2012234415A
JP2012234415A JP2011103239A JP2011103239A JP2012234415A JP 2012234415 A JP2012234415 A JP 2012234415A JP 2011103239 A JP2011103239 A JP 2011103239A JP 2011103239 A JP2011103239 A JP 2011103239A JP 2012234415 A JP2012234415 A JP 2012234415A
Authority
JP
Japan
Prior art keywords
node
data
index
update
count
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.)
Granted
Application number
JP2011103239A
Other languages
English (en)
Other versions
JP5678790B2 (ja
Inventor
Shigenori Fukuda
茂紀 福田
Kazuo Sasaki
和雄 佐々木
Itaru Nakagawa
格 中川
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2011103239A priority Critical patent/JP5678790B2/ja
Publication of JP2012234415A publication Critical patent/JP2012234415A/ja
Application granted granted Critical
Publication of JP5678790B2 publication Critical patent/JP5678790B2/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)

Abstract

【課題】動的ツリー型インデックス方式によるインデックスの管理負荷を軽減することを課題とする。
【解決手段】多次元データ検索サーバは、空間を最小外接領域に分割して空間に存在するデータのインデックスをツリー構造で生成する。そして、多次元データ検索サーバは、ツリー構造を形成するノードごとに、当該ノードが検索された数を計数する。また、多次元データ検索サーバは、ノードごとに、当該ノードが管理するデータ又は当該ノードの子ノードが更新された数を計数する。その後、多次元データ検索サーバは、データの数または子ノードの数に基づいて特定したノードについて、計数した更新回数と検索回数とを用いて更新指数を算出し、算出した更新指数に基づいて、特定したノードの分割または統合処理の実行を抑止する。
【選択図】図7

Description

本発明は、インデックス管理方法、インデックス管理プログラムおよびインデックス管理装置に関する。
従来、空間内に存在する大量のデータから所望のデータを高速に検索するために、インデックスを用いたデータ管理が利用される。また、インデックスを用いた検索手法としては、範囲検索や近傍検索が一般的に利用される。範囲検索とは、所定の領域内に存在する全データを検索する手法であり、近傍検索とは、所定の点の近くにあるデータを距離や個数を指定して検索する手法である。
このようなインデックスを生成して管理する方式として、セル分割型インデックス方式が知られている。セル分割型インデックス方式は、空間をグリッド状の矩形領域に分割し、各領域に一意なIDを割り与えるとともに、各領域内のデータに別の一意なIDを付加して管理する。
この方式の場合、管理する領域が固定されるが、各領域内のデータ数が不均等となり、各領域のデータ密度に偏りが生じる。したがって、近傍検索を実施する場合には、データ数の少ない領域では高速な検索が実行できるものの、データ数の多い領域では検索に時間がかかり、全体としては検索効率が悪い。
近傍検索の検索効率を向上させる管理方式として、動的ツリー型インデックス方式が知られている。動的ツリー型インデックス方式は、多次元領域を分割領域の入れ子構造で管理するR−Tree(Rツリー)を利用した方式であり、近くに存在するデータ同士を動的にグループ化し、グループ同士をさらにグループ化して木構造で管理する。
この方式の場合、データ数が均等になるように領域が分割されるので、各領域の大きさは異なるが、各領域のデータ密度に生じる偏りは小さい。したがって、近傍検索を実施する場合にも、各領域でデータ検索を高速に実行できるので、セル分割型インデックス方式に比べて検索効率が向上する。また、動的ツリー型インデックス方式では、管理する領域を部分空間符号で圧縮することで、管理効率を上げる手法も知られている。
特開2000−200342号公報
しかしながら、従来の動的ツリー型インデックス方式では、頻繁に情報が更新される場合には、ノードの分割や統合が繰り返して実行されることになるので、インデックスの管理負荷が高いという問題がある。
例えば、1つの親ノードに子ノードが上限値である6つ関係付けられている状態、つまり、1つの矩形空間に6つの部分矩形領域が存在する状態で、1つの子ノード(部分矩形領域)を追加する場合を例にして説明する。上限値を越えてしまうため、この親ノードは分割しなければならない。一つの厳密な分割例を挙げると、子ノードを半分ずつに分割した上で新たな子ノードを追加する場合には、=20通りのうち両矩形領域面積の和が最小となる分割を選択することになる。また、子ノードが100の場合には、10050=1029通りのうち矩形領域面積の和が最小となる分割を選択することになり、処理負荷が激増する。
より簡便な別の分割例としては、例えば空間の中心点でソートして最小と最大の領域の2領域を抽出して、それぞれを含んだ2グループを生成し、残りの領域を各グループの最小外接矩形(MBR)の増分が最小になるように選んで入れる方法もある。この方法の場合、6個のソートと4×2=8回の大小比較を行うことになる。つまり、「(logN+2)×N」回の演算を実行することになり、演算量が大きなものになる。このように、いずれの方法であっても、インデックスの管理負荷が高い。
開示の技術は、上記に鑑みてなされたものであって、動的ツリー型インデックス方式によるインデックスの管理負荷を軽減することができるインデックス管理方法、インデックス管理プログラムおよびインデックス管理装置を提供することを目的とする。
本願の開示するインデックス管理方法、インデックス管理プログラムおよびインデックス管理装置は、一つの態様において、空間を最小外接領域に分割して前記空間に存在するデータのインデックスをツリー構造で生成する。そして、前記ツリー構造を形成するノードごとに、当該ノードが検索された数を計数し、前記ノードごとに、当該ノードが管理するデータ又は当該ノードの子ノードが更新された数を計数する。その後、前記データの数または子ノードの数に基づいて特定したノードについて、計数した更新回数と検索回数とを用いて更新指数を算出し、算出した更新指数に基づいて、前記特定したノードの分割または統合処理の実行を抑止する。
本願の開示するインデックス管理方法、インデックス管理プログラムおよびインデックス管理装置の一つの態様によれば、動的ツリー型インデックス方式によるインデックスの管理負荷を軽減することができるという効果を奏する。
図1は、実施例1に係るシステムの全体構成を示す図である。 図2は、Rツリーで管理するデータと矩形領域の例を示す図である。 図3は、Rツリーにノードを追加する例を示す図である。 図4は、Rツリーにデータを追加する例を示す図である。 図5は、Rツリーのノードを削除する例を示す図である。 図6は、Rツリーのデータを削除する例を示す図である。 図7は、実施例1に係る多次元データ検索サーバの構成を示すブロック図である。 図8は、インデックスDBに記憶される情報の例を示す図である。 図9は、インデックスDBに記憶されるルートノードの情報の例を示す図である。 図10は、インデックスDBに記憶されるブランチノードの情報の例を示す図である。 図11は、インデックスDBに記憶される葉ノードの情報の例を示す図である。 図12は、更新/検索回数DBに記憶される情報の例1を示す図である。 図13は、更新/検索回数DBに記憶される情報の例2を示す図である。 図14は、データ検索リクエストの例を示す図である。 図15は、データ検索リクエストの例を示す図である。 図16は、データ検索応答の例を示す図である。 図17は、実施例1に係る検索処理の流れを説明するフローチャートである。 図18は、実施例1に係る追加処理の流れを説明するフローチャートである。 図19は、実施例1に係る追加処理の流れを説明するフローチャートである。 図20は、実施例1に係る削除処理の流れを説明するフローチャートである。 図21は、実施例1に係る削除処理の流れを説明するフローチャートである。 図22は、多次元データ検索サーバを用いたサービス例1を示す図である。 図23は、多次元データ検索サーバを用いたサービス例2を示す図である。 図24は、インデックス管理プログラムを実行するコンピュータのハードウェア構成例を示す図である。
以下に、本願の開示するインデックス管理方法、インデックス管理プログラムおよびインデックス管理装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
実施例1では、多次元データ検索サーバを含むシステムの全体構成、多次元データ検索サーバの機能ブロック図、処理の流れ、効果を説明する。
[全体構成]
図1は、実施例1に係るシステムの全体構成を示す図である。図1に示すように、このシステムは、多次元データ検索サーバ10と複数の端末装置とが有線通信または無線通信で相互に通信可能に接続される。なお、図1に示した構成はあくまで例示であり、装置の台数やネットワーク構成、ネットワーク種別等を限定するものではない。
各端末装置は、所定間隔で位置情報を多次元データ検索サーバ10に送信する装置であり、例えばパーソナルコンピュータ、サーバ、携帯端末、PDA(Personal Digital Assistant)、スマートフォンなどの装置である。
一例を挙げると、端末装置は、温度や湿度などのセンサを有し、所定間隔でセンシングした値とともに、GPS(Global Positioning System)受信機等で測定した座標などの位置情報を多次元データ検索サーバ10に送信する。
多次元データ検索サーバ10は、動的ツリー型インデックス方式を用いて、端末装置の位置情報のインデックスを生成して管理するサーバ装置である。例えば、多次元データ検索サーバ10は、各端末装置から2次元の位置情報を受信して、受信した位置情報に基づいて、空間を最小外接矩形に分割して空間に存在する位置情報のインデックスをR−Tree(以下、Rツリーと表記する)で生成する。
ここで、多次元データ検索サーバ10が生成するRツリーと、生成したRツリーの管理としてノードの追加や削除を実行する例を説明する。図2は、Rツリーで管理するデータと矩形領域の例を示す図である。なお、図2に示したノード数等はあくまで例示であり、図示したものに限定されるものではない。
図2に示すように、Rツリーは、R0からR11で形成されるツリー構造であり、R0をルートノード、R5からR11を最下段の葉ノード、ルートノードと葉ノードとの間に位置するR1からR4をブランチノードとする。
ルートノードR0は、子ノードであるR1、R2、R3、R4を含む最小外接矩形であり、ブランチノードR1は、R5、R6、R7、R8を含む最小外接矩形であり、R5からR8各々は、内部に持つ座標データ(位置情報)の最小外接矩形である。また、ノードR2からノードR4は、それぞれ子ノードであるR9からR11を含む最小外接矩形である。なお、本実施例では、各ノードが子ノードを全て最小外接矩形で子ノードを管理する例で説明するが、最小外接矩形とは、例えば矩形や球など所定の形状の中で最小の領域の一例である。
つまり、図2の下図に示すように、葉ノードR5は、所定数の位置情報を全て含む最小の矩形領域である。ブランチノードR1は、子ノードであるR5、R6、R7、R8を全て含む最小の矩形領域である。ルートノードR0は、子ノードであるR1、R2、R3、R4、R5を全て含む最小の矩形領域である。なお、最小外接矩形の生成方法やRツリーの生成方法は、一般的な公知の技術を用いることができるので、詳細な説明は省略する。
このようなRツリーによってデータのインデックスを管理する多次元データ検索サーバ10は、ノードの追加、データの追加、ノードの削除、データの削除などが発生した場合に、Rツリーを動的に変更する。
ここで、図3から図6を用いてRツリーの動的変更について説明する。この例では、多次元データ検索サーバ10は、ルートノードを「R0」、ブランチノードを「R1、R2、R3、R4」、葉ノードを「R5、R6、R7、R8、R9、R10、R11」とするインデックスを管理する。また、R0の子ノードがR1からR4であり、R1の子ノードがR5からR8であり、R2の子ノードがR9であり、R3の子ノードがR10であり、R4の子ノードがR11である。なお、ノードを分割または統合するアルゴリズム等は、一般的なRツリーで使用されるものを使用できるので、詳細な説明は省略する。
図3は、Rツリーにノードを追加する例を示す図である。この例では、各ノードの子ノード数の上限値は4であるとする。図3では、多次元データ検索サーバ10が、R1の子ノードに「ノードR12」を追加する処理の一例について説明する。まず、多次元データ検索サーバ10は、R1の子ノードとしてR12を追加する。続いて、多次元データ検索サーバ10は、R1の子ノードの数がR12の追加によって管理できる上限値を超える場合、R1をR1AとR1Bとに分割する。そして、多次元データ検索サーバ10は、R1をR1AとR1Bとに分割したことで、R0の子ノードの数が上限値を超えた場合、R0をR0AとR0Bとに分割し、新たなルートノードRR0の子ノードとして管理する。
つまり、多次元データ検索サーバ10は、新たなノードを子ノードとして追加した親ノードの分割や、当該親ノードが分割された各ノードを子ノードするノードの分割等を繰り返して実行する。このように、多次元データ検索サーバ10は、ノードの追加に伴って、各ノードが管理するデータ数または各ノードの子ノード数が上限値を超えないように、ノードの分割を実行する。
図4は、Rツリーにデータを追加する例を示す図である。この例でも、各ノードの子ノード数の上限値は4であるとする。図4では、多次元データ検索サーバ10が、葉ノードのR5にデータ「D11」を追加する処理の一例について説明する。図示していないが、葉ノードR5からR11まではいずれも上限値を越えない数のデータを保持している。まず、多次元データ検索サーバ10は、R5が管理するデータにD11を追加する。続いて、多次元データ検索サーバ10は、R5が管理するデータの数がD11の追加によって上限値を超える場合、R5をR5AとR5Bとに分割する。そして、多次元データ検索サーバ10は、R5をR5AとR5Bとに分割したことで、R1の子ノードの数が上限値を超えた場合、R1をR1AとR1Bとに分割する。さらに、R1をR1AとR1Bとに分割したことで、R0の子ノードの数が上限値を超えた場合、R0をR0AとR0Bとに分割し、新たなルートノードRR0の子ノードとして管理する。
つまり、多次元データ検索サーバ10は、葉ノードに新たなデータを追加した場合も、図3と同様に、葉ノードからルートノードまでの各ノードについて、データ数や子ノード数が管理できる上限値を超えないか否かを判定する。そして、多次元データ検索サーバ10は、上限値を超えるノードの分割等を繰り返して実行する。このように、多次元データ検索サーバ10は、葉ノードへのデータの追加に伴って、各ノードが管理するデータ数または各ノードの子ノード数が上限値を超えないように、ノードの分割を実行する。
図5は、Rツリーのノードを削除する例を示す図である。この例では、各ノードの子ノード数の下限値は2であるとするために、図2から図4とは異なるツリーで説明する。具体的には、Rツリーは、R0からR12で形成されるツリー構造であり、R0をルートノード、R5からR12を最下段の葉ノード、ルートノードと葉ノードとの間に位置するR1からR4をブランチノードとする。また、R1からR4のブランチノードには、それぞれ葉ノードが2つずつぶら下がっている。図5では、多次元データ検索サーバ10が、ブランチノードR3の子ノードである「R10」を削除する処理の一例について説明する。まず、多次元データ検索サーバ10は、R3の子ノードであるR10を削除する。続いて、多次元データ検索サーバ10は、R3の子ノードの数が下限値を下回ったので、R3とR4とを統合して新たなR4をR0の子ノードとする。そして、多次元データ検索サーバ10は、新たなR4の子ノードが下限値より多く、R3が統合されてなくなることによってR0の子ノード数が下限値を下回ることもないので、処理を終了する。
つまり、多次元データ検索サーバ10は、ノードを削除した場合も、図3と同様に、葉ノードからルートノードまでの各ノードについて、データ数や子ノード数が管理できる上限値や下限値を超えないか否かを判定する。そして、多次元データ検索サーバ10は、上限値や下限値を超えるノードの分割または統合等を繰り返して実行する。このように、多次元データ検索サーバ10は、ノードの追加に伴って、各ノードが管理するデータ数または各ノードの子ノード数が上限値や下限値を超えないように、ノードの分割または統合を実行する。
図6は、Rツリーのデータを削除する例を示す図である。図6では、多次元データ検索サーバ10が、葉ノードR5が管理するデータ「D21、D22」のうち「D21」を削除する処理の一例について説明する。D21以外に図示しているデータはD22のみであるが、葉ノードR5にはちょうど下限値に等しい数のデータを管理しており、D21及びD22以外のデータはD22と同様に処理する物とする。まず、多次元データ検索サーバ10は、ノードR5が管理するD21を削除する。続いて、多次元データ検索サーバ10は、R5の管理するデータ数が下限値を下回ったので、R5とR6とを統合して新たなR6をR1の子ノードとする。そして、多次元データ検索サーバ10は、新たなR6のデータとして、元のR5のデータであるD22を追加する。そして、多次元データ検索サーバ10は、新たなR6のデータ数が下限値より多く、上限値を超えていないので、処理を終了する。なお、多次元データ検索サーバ10は、新たなR6のデータ数が上限値を超えている場合には、新たなR6の分割を実行する。
つまり、多次元データ検索サーバ10は、データを削除した場合も、図3と同様に、葉ノードからルートノードまでの各ノードについて、データ数や子ノード数が管理できる上限値や下限値を超えないか否かを判定する。そして、多次元データ検索サーバ10は、上限値や下限値を超えるノードの分割または統合等を繰り返して実行する。このように、多次元データ検索サーバ10は、データの追加に伴って、各ノードが管理するデータ数または各ノードの子ノード数が上限値や下限値を超えないように、ノードの分割または統合を実行する。
上述したように、多次元データ検索サーバ10は、データの追加や削除、ノードの追加や削除に伴って、Rツリーの構成を変更してインデックスを管理する。このような多次元データ検索サーバ10は、ツリー構造を形成するノードごとに、当該ノードが検索された数を計数する。また、多次元データ検索サーバ10は、ノードごとに、当該ノードが管理するデータ又は当該ノードの子ノードが更新された数を計数する。そして、多次元データ検索サーバ10は、データの数または子ノードの数に基づいて特定したノードについて、計数した更新回数と検索回数とを用いて更新指数を算出し、算出した更新指数に基づいて、特定したノードの分割または統合処理の実行を抑止する。
つまり、多次元データ検索サーバ10は、更新回数の割合がノードについては、インデックス管理のボトルネックとなっていたノードの分割処理またはノード統合処理を抑止することで、インデックスの管理負荷を軽減することができる。すなわち、更新指数の高い領域については、負荷の高いインデックス更新処理を避けることで、検索処理性能を向上させることができる。
[多次元データ検索サーバの構成]
図7は、実施例1に係る多次元データ検索サーバの構成を示すブロック図である。図7に示すように、多次元データ検索サーバ10は、通信インタフェース11と、記憶部12と、制御部13とを有する。
通信インタフェース11は、各端末装置との間で通信を確立して、各端末装置から位置情報やデータ検索要求等を受信したり、各端末装置にデータ検索応答を送信したりするインタフェースである。例えば、通信インタフェース11は、LAN(Local Area Network)やインターネットなどと接続するネットワークインタフェースカードや、無線アンテナを有する無線通信部などである。
記憶部12は、制御部13が実行するプログラム等を記憶するとともに、作業領域12aとインデックスDB12bと多次元データDB12cと更新/検索回数DB12dとを有する半導体素子やハードディスクなどの記憶装置である。また、この記憶部12は、葉ノードが管理できるデータの上限値および下限値、各ノードが子ノードとして管理できる子ノードの上限値および下限値を記憶する。例えば、記憶部12は、データの上限値「4」、データの下限値「1」、ノードの上限値「4」、ノードの下限値「0」などと記憶する。
作業領域12aは、制御部13または制御部13が有する各処理部が各種処理を実行する際に使用する一時領域である。
インデックスDB12bは、空間内に存在する大量のデータから所望のデータを高速に検索するための索引情報である。例えば、インデックスDB12bは、端末装置の位置情報のインデックスをRツリーで保持する。図8は、インデックスDBに記憶される情報の例を示す図である。図8に示すように、インデックスDB12bは、ノード種別としてルート、ブランチ、葉の三種のいずれかを示すデータで形成されるRツリーを記憶する。ルートノードは、Rツリーに1つのみ存在する頂点データであり、検索を開始するノードとなる。また逆に、葉ノードはRツリーの最底辺のノードであり、自らは子ノードを含まず、点・領域などの検索対象多次元データを1つ以上持つ。それ以外の木の中間に存在するノードはブランチノードであり、それぞれ子ノードを1つ以上持つ。
図8の場合、ルートノードがR0であり、R0の子ノードかつブランチノードがR1、R2、R3、R4である。ブランチノードR1の子ノードである葉ノードがR5、R6、R7、R8であり、ブランチノードR2の子ノードである葉ノードがR9である。ブランチノードR3の子ノードである葉ノードがR10であり、ブランチノードR4の子ノードである葉ノードがR11である。
インデックスDB12bは、Rツリーの実体としてルート、ブランチ、葉の各ノードの情報を記憶する。図9は、インデックスDBに記憶されるルートノードの情報の例を示す図である。図9に示すように、インデックスDB12bは、ルートノードR0の情報として、「ノード種別、矩形情報、子ノードリスト」を記憶する。ここで記憶される「ノード種別」は、ノードがルート、ブランチ、葉のいずれであるかを示す情報であり、「矩形情報」は、子ノードの担当領域をすべて含む最小外接矩形の情報であり、「子ノードリスト」は、当該ノードの子ノードへのリンクポインタのリストである。
図9の場合、ルートノードR0は、x、yの2次元データを管理し、「x1=35.50、y1=139.00」が担当領域の最小点であり、「x2=35.90、y2=139.50」が担当領域の最大点であることを示す。すなわち、R0が担当する領域は、両点を頂点として各次元軸に直交した4直線で作られる領域である。また、R0は、子ノード「R1、R2、R3、R4」へのポインタのリストを記憶する。
図10は、インデックスDBに記憶されるブランチノードの情報の例を示す図である。図10に示すように、インデックスDB12bは、ブランチノードの情報として、「ノード種別、矩形情報、子ノードリスト」を記憶する。ここで記憶される「ノード種別」、「矩形情報」、「子ノードリスト」は、図9と同様なので詳細な説明は省略する。インデックスDB12bは、R1、R2、R3、R4について、図10の情報を記憶する。
図10の場合、ブランチノードR1は、x、yの2次元データを管理し、「x1=35.50、y1=139.20」が担当領域の最小点であり、「x2=35.70、y2=139.30」が担当領域の最大点であることを示す。すなわち、ブランチノードR1が担当する領域は、両点を頂点として各次元軸に直交した4直線で作られる領域である。また、R1は、子ノード「R5、R6、R7、R8」へのポインタのリストを記憶する。
図11は、インデックスDBに記憶される葉ノードの情報の例を示す図である。図11に示すように、インデックスDB12bは、葉ノードの情報として、「ノード種別、矩形情報、データリスト」を記憶する。ここで記憶される「ノード種別」、「矩形情報」は、図9と同様なので詳細な説明は省略する。「データリスト」は、管理する多次元データである。インデックスDB12bは、R5、R6、R7、R8について、図11の情報を記憶する。
図11の場合、葉ノードR5は、x、yの2次元データを管理し、「x1=35.50、y1=139.25」が担当領域の最小点であり、「x2=35.65、y2=139.30」が担当領域の最大点であることを示す。すなわち、葉ノードR5が担当する領域は、両点を頂点として各次元軸に直交した4直線で作られる領域である。また、R5は、データ「D1、D2、D3、D4」へのポインタのリストを記憶する。各データの実体は、多次元データDB12cに格納されている。
図7に戻り、多次元データDB12cは、例えば2次元の位置情報などデータそのものを記憶する。具体的には、多次元データDB12cは、各葉ノードが保持するデータDの値そのものを記憶する。なお、データは、横(x)軸と縦(y)軸とから形成される2次元情報に限定されるものではなく、横(x)軸と縦(y)軸と時間(t)軸などの3次元情報であってもよく、3次元以上の多次元情報であってもよい。
更新/検索回数DB12dは、インデックスDB12bに記憶されるインデックスツリーの各ノードごとに、ノードが検索された回数、および、ノードが管理するデータ又は当該ノードの子ノードが更新された回数を記憶する。なお、ここで記憶される情報は、後述するデータ検索部14やデータ更新部15等によって更新される。
図12は、更新/検索回数DBに記憶される情報の例1を示す図である。図12に示すように、更新/検索回数DB12dは、「更新/変更回数計測開始時間」と「ノードID、検索回数、更新回数」を記憶する。ここで記憶される「更新/変更回数計測開始時間」は、計数が開始された時間であり、「ノードID」は、ノードを識別する識別子である。「検索回数」は、データ検索部14によって検索された回数であり、「更新回数」は、データ更新部15によって追加や削除などの更新がされた回数である。
2010/11/15 18:00:00.000に処理が開始され、ノードID=00001のノードは、現時点で145回検索され、349回更新されたことを示す。同様に、ノードID=00015のノードは、現時点で493回検索され、331回更新されたことを示す。なお、図12の場合、サーバの停止等によって、検索および更新回数をリセットしたりする。
図13は、更新/検索回数DBに記憶される情報の例2を示す図である。図13に示すように、更新/検索回数DB12dは、「最古更新/変更回数計測開始時間」と「ノードID、検索回数、更新回数」を記憶する。図12と異なる点は、各ノードごとに、例えば1時間など一定時間毎の検索および更新回数を記憶する点であり、一定期間を経過する度に各回数の値を一つずつ左方向にずらしても良い。
図13の場合、ノードID=00001の最新の情報として、現時点から1時間前までに「検索回数=145、更新回数=349」が計数されたことを示す。さらに1時間前まで、すなわち1時間前から2時間前までに「検索回数=139、更新回数=324」が計数されたことを示す。そして、最古の情報、すなわち4時間前から5時間前までに「検索回数=45、更新回数=169」が計数されたことを示す。
この場合、検索および更新指数の計算方法は、最も左の回数欄の計測開始時間と現在時刻の差で、各ノードIDの検索又は更新回数の全欄を足した値を割ることで、検索頻度及び更新指数を計算することができる。
データ検索部14は、ネットワーク経由で受信した検索リクエストに応じて、インデックスツリーを検索して応答する処理部である。図14は、データ検索リクエストの例を示す図である。図14に示すように、データ検索部14は、「多次元データ、検索範囲」として「35.4134、139.6252、100m」などを受信する。この「多次元データ」は、検索対象の位置情報であり、例えば緯度や経度の情報である。「検索範囲」は、指定された多次元データから検索対象の範囲を示す情報である。つまり、図14の場合、データ検索部14は、インデックスDB12bを参照し、「35.4134、139.6252」から100mに位置するデータを近傍検索して応答する。
また、別の例としては、図15は、データ検索リクエストの例を示す図である。図15に示すように、データ検索部14は、「多次元データ、検索データ数」として「35.4134、139.6252、10個」などを受信する。この「多次元データ」は、図14と同様であり、「検索データ数」は、指定された多次元データから近い位置に存在するデータを10個選択することを示す。つまり、図15の場合、データ検索部14は、インデックスDB12bを参照し、「35.4134、139.6252」の近くに存在する10個のデータを近傍検索して応答する。
また、図16は、データ検索応答の例を示す図である。図16に示すように、データ検索部14は、データの近傍検索結果として、ノードを特定する「ID」を応答する。つまり、図16の場合、データ検索部14は、データ検索リクエストにしたがってインデックスツリーを検索し、検索したノードのIDが「00001、00034、000097、・・・」であることを、リクエスト元に応答する。この実施例ではデータのIDを応答する例を示したが、IDではなくデータの内容にして応答しても良い。その場合は、データ検索部14は、検索されたIDに対応するデータを多次元データDB12cから取得し、取得したデータそのものを応答することもできる。
図7に戻り、データ更新部15は、インデックスDB12bに記憶されるインデックスツリーに対して、ノードの追加、ノードの削除、データの追加、データの削除を実行して、インデックスツリーを更新する処理部である。なお、ノードの追加、ノードの削除、データの追加、データの削除、さらにこれらに伴ってノードを分割または統合する処理については、図2から図6を用いて説明したので、ここでは詳細な説明は省略する。
また、データ更新部15は、データを追加または削除した場合には、インデックスDB12bに記憶される葉ノードのデータリストを更新する。また、データ更新部15は、インデックスツリーに変更があった場合には、その変更にあわせてインデックスDB12bを更新する。また、データ更新部15は、ノードを追加した場合には、「検索回数=0、更新回数=0」とする新たなレコードを更新/検索回数DB12dに作成する。データ更新部15は、ノードを削除した場合には、当該ノードに対応するレコードを更新/検索回数DB12dから削除する。
ノード制御部16は、ノードの分割または統合を実施するか否かを判定する処理部であり、分割統合判定部16aと、更新指数算出部16bと、分割統合制御部16cとを有する。
分割統合判定部16aは、データ更新部15やデータ検索部14による処理が実行され、各ノードが管理するデータ数または子ノード数が、記憶部12に記憶される上限値または下限値を満たすか否かを判定する処理部である。つまり、分割統合判定部16aは、データ更新部15やデータ検索部14の処理によって、ノードを分割する処理またはノードを統合する処理が発生したか否かを判定する。
例えば、分割統合判定部16aは、インデックスDB12bを参照し、データリストとして記憶するデータ数が上限値より多い葉ノードを分割対象として更新指数算出部16bに通知する。同様に、分割統合判定部16aは、インデックスDB12bを参照し、子ノードのポインタ数が上限値より多いブランチノードまたはルートノードを、分割対象として更新指数算出部16bに通知する。このとき、分割統合判定部16aは、ノードIDを更新指数算出部16bに通知する。
また、分割統合判定部16aは、インデックスDB12bを参照し、データリストとして記憶するデータ数が下限値より多い葉ノードを統合対象として更新指数算出部16bに通知する。同様に、分割統合判定部16aは、インデックスDB12bを参照し、子ノードのポインタ数が下限値より多いブランチノードまたはルートノードを、統合対象として更新指数算出部16bに通知する。このとき、分割統合判定部16aは、ノードIDを更新指数算出部16bに通知する。
更新指数算出部16bは、分割統合判定部16aから通知されたノードについて更新/検索回数DB12dを参照し、更新回数と検索回数とを用いて更新指数を算出する。例えば、更新指数算出部16bは、分割統合判定部16aからノードID=00001を受信した場合、図12の「ノードID」を参照して「検索回数=145、更新回数=349」を取得する。そして、更新指数算出部16bは、「更新回数(349)/検索回数(145)=2.40・・・」を更新指数として算出して分割統合制御部16cに通知する。
また、別の例としては、更新指数算出部16bは、分割統合判定部16aからノードID=00015を受信した場合、図13の「ノードID」のうち最新のデータを参照して「検索回数=493、更新回数=331」を取得する。そして、更新指数算出部16bは、「更新回数(331)/検索回数(493)=0.671・・・」を更新指数として算出して分割統合制御部16cに通知する。
分割統合制御部16cは、更新指数算出部16bの算出結果に基づいて、ノードの分割または統合を実行するか否かを判定する処理部である。例えば、分割統合制御部16cは、更新指数算出部16bが算出した更新指数が2以上であれば、更新指数が高いと判定し、当該ノードの更新を抑止すると判定する。そして、分割統合制御部16cは、データ更新部15に対して、当該ノードの分割または統合処理を抑止する指示を出力する。
また、分割統合制御部16cは、更新指数算出部16bが算出した更新指数が2未満であれば、更新指数が低いと判定し、当該ノードの更新を実行すると判定する。そして、分割統合制御部16cは、データ更新部15に対して、当該ノードの分割または統合処理を実行する指示を出力する。
なお、データ更新部15は、ノードを分割した場合、当該ノードの更新/検索回数については、分割後のそれぞれのノードが分割前のノードの回数を引き継ぐように制御してもよく、分割前の回数を半分ずつ引き継ぐようにしてもよい。また、データ更新部15は、分割後のそれぞれのノードについては、回数を0とすることもできる。つまり、ノード分割後については、ユーザやシステムの仕様によって任意に設定できる。
[処理の流れ]
次に、図17から図21を用いて、多次元データ検索サーバ10が実行する検索処理、追加処理、削除処理について説明する。
(検索処理)
図17は、実施例1に係る検索処理の流れを説明するフローチャートである。図17に示すように、検索リクエストを受信したデータ検索部14は、まず、ルートノードを選択し(S101)、選択したノードが葉ノードか否かをインデックスツリーやインデックスDB12bから判定する(S102)。
そして、データ検索部14は、選択したノードが葉ノードでないと判定した場合(S102否定)、選択ノードの子ノードに検索対象の座標を含むノードがあるか否かを、インデックスDB12bを参照して判定する(S103)。
その後、データ検索部14は、選択ノードの子ノードに検索対象の座標を含むノードがないと判定した場合(S103否定)、全ての選択候補ノードの検索を終了したか否かを、インデックスツリーやインデックスDB12bから判定する(S104)。
データ検索部14は、検索未実施の選択候補ノードが存在すると判定した場合(S104否定)、選択候補ノードの内の1つのノードを選択し、検索回数をインクリメントする(S105)。その後、データ検索部14は、S102以降の処理を繰り返す。
また、S102において、データ検索部14は、選択したノードが葉ノードであると判定した場合(S102肯定)、選択した葉ノードにある多次元データのうち、検索座標を含むデータを検索結果に追加し(S106)、S104以降の処理を実行する。例えば、データ検索部14は、選択した葉ノードが有する多次元データのIDまたはポインタを用いて多次元データDB12cを検索し、検索座標を含むデータを検索結果に追加する。
また、S103において、データ検索部14は、選択ノードの子ノードに検索対象の座標を含むノードがあると判定した場合(S103肯定)、検索座標を含む子ノードを選択候補ノードに加えて(S107)、S104以降の処理を実行する。なお、選択候補ノードのリスト等は、作業領域12aで管理される。
また、S104において、データ検索部14は、検索未実施の選択候補ノードが存在しないと判定した場合(S104肯定)、選択済みの座標データを検索結果として応答し(S108)、処理を終了する。
(追加処理)
図18と図19は、実施例1に係る追加処理の流れを説明するフローチャートである。図18に示すように、データやノードの追加を指示されたデータ更新部15は、ルートノードを選択し(S201)、インデックスDB12b等を参照して、選択した選択ノードが葉ノードか否かを判定する(S202)。
データ更新部15は、選択ノードが葉ノードではないと判定した場合(S202否定)、選択ノードの子ノードに、追加データの領域を包含するデータがあるか否かを、インデックスDB12b等を参照して判定する(S203)。
そして、データ更新部15は、追加データの領域を包含するデータがないと判定した場合(S203否定)、追加対象の多次元データを含めるために必要な拡大量が最小になる子ノードを選択ノードとして(S204)、S202以降の処理を実行する。
また、S203において、データ更新部15は、追加データの領域を包含するデータがあると判定した場合(S203肯定)、追加対象の多次元データを包含する子ノードのうち矩形面積が最小のものを選択ノードとする(S205)。その後、データ更新部15は、S202以降の処理を実行する。
一方、S202において、データ更新部15は、選択ノードが葉ノードであると判定した場合(S202肯定)、図19に示すように、選択した葉ノードに追加対象の多次元データを追加するとともに当該葉ノードの更新回数をインクリメントする(S206)。
続いて、分割統合判定部16aは、記憶部12やインデックスDB12bを参照し、選択した葉ノードの持つ多次元データ数が上限値を超えるか否かを判定し(S207)、超えない場合(S207否定)には、処理を終了する。
さらに、分割統合判定部16aが、選択した葉ノードの持つ多次元データ数が上限値を超えると判定した場合(S207肯定)、多次元データ検索サーバ10はS208を実行する。すなわち、更新指数算出部16bは、選択ノードの更新回数と検索回数とに基づいて更新指数を算出し、分割統合制御部16cは、算出された更新指数が所定値よりも大きい場合(S208否定)には、当該選択ノードの分割を抑止して処理を終了する。一方、分割統合制御部16cは、算出された更新指数が所定値よりも小さい場合(S208肯定)には、データ更新部15に当該選択ノードの分割を許可する。
分割が許可されたデータ更新部15は、分割結果の矩形の大きさの和が最小となるようにノードを2分割し、親ノードに追加する(S209)。このとき、データ更新部15は、インデックスDB12bのインデックスツリーを更新する。
続いて、データ更新部15は、更新/検索回数DB12dに分割した新ノードのデータ用の行を追加し(S210)、元ノードの更新および変更回数を半分にして、分割した新ノードの更新および変更回数にも元ノードと同じ半分にした値を更新/検索回数DB12dに登録する(S211)。
その後、分割統合判定部16aは、分割中のノードのデータ数が全て上限値以下でない場合(S212否定)、上限を超えている分割中ノードを1つ選択して(S213)、S209以降の処理を実行する。
一方、分割統合判定部16aは、分割中のノードのデータ数が全て上限値以下である場合(S212肯定)、追加する親ノードの持つ子ノード数が上限値を超えるか否かを判定する(S214)。そして、分割統合判定部16aは、追加する親ノードの持つ子ノード数が上限値を超えないと判定した場合(S214否定)、処理を終了し、追加する親ノードの持つ子ノード数が上限値を超えると判定した場合(S214肯定)、S215を実行する。
すなわち、S208と同様、分割統合制御部16cは、更新指数算出部16bが算出した更新指数が所定値よりも大きい場合(S215否定)には、当該選択ノードの分割を抑止して処理を終了する。一方、分割統合制御部16cは、算出された更新指数が所定値よりも小さい場合(S215肯定)には、データ更新部15に当該選択ノードの分割を許可する。
続いて、データ更新部15は、インデックスDB12bや多次元データDB12cを参照し、追加する親ノードがルートノードである場合に(S216肯定)、現ルートノードを分割し、その上に新ルートノードを作成して(S217)、処理を終了する。一方、データ更新部15は、追加する親ノードがルートノードでない場合に(S216否定)、親ノードを分割対象として(S218)、S209以降の処理を繰り返す。
(削除処理)
図20と図21は、実施例1に係る削除処理の流れを説明するフローチャートである。図20に示すように、データ更新部15は、データ検索部14が図17に示した処理によって特定した削除対象データを葉ノードから削除する(S301、S302)。なお、データ更新部15は、多次元データに自身が含まれる葉ノードの情報を記録し、削除時にはデータIDなどから削除対象のデータを多次元データDB12cから取得して、葉ノードを辿っても良い。この場合、データ更新部15は、葉ノードの分割・統合時にデータに記録する葉ノードを書き直すことになる。
このとき、データ更新部15は、インデックスDB12bや多次元データDB12cから、削除対象データを削除する。続いて、データ更新部15は、データを削除した葉ノードの更新回数をインクリメントする(S303)。
そして、分割統合判定部16aは、データが削除された葉ノードが保持するデータ数が下限値未満か否かを、記憶部12やインデックスDB12bを参照して判定する(S304)。分割統合判定部16aは、データ数が下限値未満でないと判定した場合(S304否定)、処理を終了し、分割統合判定部16aによってデータ数が下限値未満であると判定された場合(S304肯定)、S305が実行される。
すなわち、更新指数算出部16bは、選択ノードの更新回数と検索回数とに基づいて更新指数を算出し、分割統合制御部16cは、算出された更新指数が所定値よりも大きい場合(S305否定)には、当該選択ノードの統合を抑止して処理を終了する。一方、分割統合制御部16cは、算出された更新指数が所定値よりも小さい場合(S305肯定)には、データ更新部15に当該選択ノードの統合を許可する。
続いて、データ更新部15は、対象ノードの兄弟ノードについて、対象ノードの矩形領域を追加したときの領域増加が最小となる兄弟ノードを選択して統合する(S306)。そして、データ更新部15は、統合前のノードの更新および検索回数各々を、統合先のノードの更新および検索回数各々に追加する(S307)。
その後、データ更新部15は、統合して削除したノードのエントリを更新/検索回数DB12dから削除した後(S308)、当該ノードの親ノードの更新回数をインクリメントする(S309)。
そして、分割統合判定部16aによって統合ノードの子ノード数またはデータ数が上限値を超えると判定された場合(S310肯定)、データ更新部15は、分割結果の矩形の大きさの和が最小となるように、統合ノードを再分割する(S311)。
続いて、データ更新部15は、分割して増加したノードを親ノードに追加し(S312)、更新/検索回数DB12dに、分割ノード用の行を追加する(S313)。そして、データ更新部15は、元ノードの更新および検索回数を半分にし、分割ノードの更新および検索回数も同じ回数にした情報を更新/検索回数DB12dに記録して処理を終了する(S314)。
図21に示すように、分割統合判定部16aは、統合ノードの子ノード数またはデータ数が上限値を超えないと判定された場合(S310否定)、親ノードがルートノードであるか否かを判定する(S315)。そして、分割統合判定部16aは、親ノードがルートノードでない場合(S315否定)、親ノードの子ノード数が下限値未満か否かを判定する(S316)。
親ノードの子ノード数が下限値未満と判定された場合(S316肯定)、S317が実行される。すなわち、更新指数算出部16bは、選択ノードの更新回数と検索回数とに基づいて更新指数を算出し、分割統合制御部16cは、算出された更新指数が所定値よりも大きい場合(S317否定)には、当該選択ノードの統合を抑止して処理を終了する。一方、分割統合制御部16cは、算出された更新指数が所定値よりも小さい場合(S317肯定)には、データ更新部15に当該選択ノードの統合を許可する。データ更新部15は、親ノードを統合対象として(S318)、S306以降の処理を実行する。
また、S316において、親ノードの子ノード数が下限値以上と判定された場合(S316否定)、データ更新部15は、処理を終了する。
また、S315において、親ノードがルートノードである場合(S315肯定)、データ更新部15は、ルートノードの子ノード数が1つにならない場合(S319否定)、処理を終了する。
一方、データ更新部15は、ルートノードの子ノード数が1つになる場合(S319肯定)、現ルートノードを削除し、統合結果のノードを新規ルートノードとする(S320)。その後、データ更新部15は、前ルートノードのエントリを更新/検索回数DB12dから削除して処理を終了する(S321)。
[実施例1による効果]
実施例1によれば、更新指数の高い領域については、負荷の高いインデックス更新処理、すなわちノードの分割処理を抑止することで、多次元データ検索サーバ10の処理負荷を軽減する。この結果、多次元データ検索サーバ10は、分割処理を抑止したツリーについては、その部分だけ更新に時間がかかる場合もあるが、ツリー全体としては検索処理性能を向上させることができる。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。
(閾値例)
例えば、上記実施例では、分割または統合を実行するまたは抑止する判定に用いる子ノード数の上限値および下限値は、サーバ管理者によって予め定められた所定の値であったが、更新/検索回数の比の関数とすることもできる。例えば、更新/検索回数=Rとして、上限値Lmaxを「Lmax=2×R+5」とすることもできる。同様に、更新/検索回数=Rとして、上限値Lmaxを「Lmin=5−2×R」とすることもできる。つまり、「更新指数=更新回数/検索回数=R=2」の場合、上限値(Lmax)は9となり、下限値(Lmin)は1となる。
したがって、多次元データ検索サーバは、インデックスツリーのあるノードについて分割対象か否かを判定する場合には、まず、上限値Lmaxを算出する。続いて、多次元データ検索サーバは、ノードが管理するデータ又は当該ノードの子ノードの数が算出した上限値Lmaxよりも多い場合には、分割対象のノードとして特定し、特定したノードについて分割処理または統合処理の実行を判断することができる。また、多次元データ検索サーバは、特定したノードについて、更新指数を算出して分割を実行または抑止することもできる。
同様に、多次元データ検索サーバは、インデックスツリーのあるノードについて統合対象か否かを判定する場合には、まず、下限値Lminを算出する。続いて、多次元データ検索サーバは、ノードが管理するデータ又は当該ノードの子ノードの数が算出した下限値Lminよりも少ない場合には、統合対象のノードとして特定する。その後、多次元データ検索サーバは、特定したノードについて、更新指数を算出して統合を実行または抑止することもできる。
別の手法としては、多次元データ検索サーバは、インデックスツリーのあるノードについて分割または統合対象か否かを判定する場合には、まず、上限値Lmaxと下限値Lminを算出する。そして、多次元データ検索サーバは、ノードが管理するデータ又は当該ノードの子ノードの数が上限値から下限値の範囲内である場合には、分割または統合を抑止する。一方、多次元データ検索サーバは、ノードが管理するデータ又は当該ノードの子ノードの数が上限値から下限値の範囲内にない場合には、分割または統合を実行するようにすることもできる。つまり、多次元データ検索サーバは、上限値Lmaxと下限値Lminを、分割または統合を抑止する判断材料とすることもできる。
なお、この例では、上限値Lmaxを計算する関数を頻度比Rの一次関数としたが、高次関数や指数関数などを用いることもできる。同様に、下限値LminについてもRの高次関数や指数関数とすることもできる。この時、頻度比Rが増えるにしたがって上限値は単調増加するよう、また下限値が単調減少するように定める。
また、分割するかしないかの判断に用いられる更新指数の上限値と、統合するかしないかの判断に用いられる上限値は、同じ値であっても良いし、統合処理と分割処理の負荷を考慮して異なる値としても良い。この場合、より負荷の高い処理に対応する上限値の方を、なるべく処理を控えるべきであるので、上限値の値を小さくすることが好ましい。
また、上記実施例では、更新回数/検索回数を更新指数として算出する例について説明したが、これに限定されるものではない。例えば、上述した例と同様、指数関数などの公知の関数を用いることもできる。また、更新頻度が多いノードか否かを判定する任意にお関数等を用いることもできる。
(サービス例1)
上述した多次元データ検索サーバを用いたサービス形態の例について説明する。図22は、多次元データ検索サーバを用いたサービス例1を示す図である。図22は、事故情報共有サービスである。一例としては、事故警告サービスの利用者が月額300円などの利用料を払って、車両の位置情報を送り、周辺に事故があった際に警告情報を受け取ることができる。
具体的には、車両位置収集サーバが各車両から位置情報を収集して多次元データ検索サーバに送信する。多次元データ検索サーバは、各車両の位置情報のインデックスツリーを生成する。事故警告サービスサーバは、周辺検索(事故座標、半径100m)などの要求を多次元データ検索サーバに送信する。多次元データ検索サーバは、事故があった座標から半径100m内に存在する車両の情報を事故警告サービスサーバに送信する。事故警告サービスサーバは、多次元データ検索サーバから通知された各車両に対して運転注意を警告する。このようにすることで、車両の安全運転を促進するサービスを提供することができる。
(サービス例2)
上述した多次元データ検索サーバを用いたサービス形態の例について説明する。図23は、多次元データ検索サーバを用いたサービス例2を示す図である。図23は、業務端末管理サービスである。一例を挙げると、業務端末を管理する主体が、サーバを用意して業務管理端末の位置情報を管理する。そして、業務端末は、周囲の業務端末を検索して不足機能の補助依頼やオペレータへのヘルプ通知を送信する。
具体的には、端末位置収集サーバが各端末から位置情報を収集して多次元データ検索サーバに送信する。多次元データ検索サーバは、各端末の位置情報のインデックスツリーを生成する。業務端末は、多次元データ検索サーバに対して、自端末の周辺検索(端末座標、半径100m)を送信する。多次元データ検索サーバは、受信した端末座標から半径100mに位置する端末を特定して、業務端末に応答する。業務端末は、受信した端末に対して不足機能の補助依頼やオペレータへのヘルプ通知を送信する。
(データ例)
上記実施例では、データと2次元データの例を説明したが、これに限定されるものではなく、例えばさらに高さや時間軸を入れた3次元データであってもよい。すなわち、開示する多次元データ検索サーバで管理できるデータの次元は、2次元に限定されるものではない。
(システム)
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
(プログラム)
ところで、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、上記の実施例と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。
図24は、インデックス管理プログラムを実行するコンピュータのハードウェア構成例を示す図である。図24に示すように、コンピュータ100は、バス101に、CPU102、入力装置103、出力装置104、通信インタフェース105、記録媒体読み取り装置106、HDD(Hard Disk Drive)107、RAM(Random Access Memory)108が接続される。
入力装置103は、マウスやキーボードであり、出力装置104は、ディスプレイなどであり、通信インタフェース105は、NIC(Network Interface Card)などのインタフェースである。HDD107は、インデックス管理プログラム107aととともに、図7等に示した各テーブル等に記憶される情報を記憶する。記録媒体の例としてHDD107を例に挙げたが、ROM(Read Only Memory)、RAM(Random Access Memory)、CD−ROM等の他のコンピュータが読み取り可能な記録媒体に各種プログラムを格納しておき、コンピュータに読み取らせることとしてもよい。なお、記憶媒体を遠隔地に配置し、コンピュータが、その記憶媒体にアクセスすることでプログラムを取得して利用してもよい。また、その際、取得したプログラムをそのコンピュータ自身の記録媒体に格納して用いてもよい。
CPU102は、インデックス管理プログラム107aを読み出してRAM108に展開することで、図7等で説明した各機能を実行するインデックス管理プロセス108aを動作させる。すなわち、インデックス管理プロセス108aは、図7に記載したデータ検索部14、データ更新部15、ノード制御部16の各処理部と同様の機能を実行する。このようにコンピュータ100は、プログラムを読み出して実行することでインデックス管理方法を実行する情報処理装置として動作する。
例えば、コンピュータ100は、記録媒体読み取り装置106によって記録媒体からインデックス管理プログラムを読み出し、読み出されたインデックス管理プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、コンピュータ100によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
10 多次元データ検索サーバ
11 通信インタフェース
12 記憶部
12a 作業領域
12b インデックスDB
12c 多次元データDB
12d 更新/検索回数DB
13 制御部
14 データ検索部
15 データ更新部
16 ノード制御部
16a 分割統合判定部
16b 更新指数算出部
16c 分割統合制御部

Claims (6)

  1. コンピュータが、
    空間を最小外接領域に分割して前記空間に存在するデータのインデックスをツリー構造で生成し、
    前記ツリー構造を形成するノードごとに、当該ノードが検索された数を計数し、
    前記ノードごとに、当該ノードが管理するデータ又は当該ノードの子ノードが更新された数を計数し、
    前記データの数または子ノードの数に基づいて特定したノードについて、計数した更新回数と検索回数とを用いて更新指数を算出し、
    算出した更新指数に基づいて、前記特定したノードの分割または統合処理の実行を抑止する
    ことを実行するインデックス管理方法。
  2. 前記更新指数を算出する処理は、
    前記計数した更新回数を前記計数した検索回数で除算した値を更新指数として算出し、
    前記ノードの分割を実行または抑止する処理は、前記算出した更新指数が所定値より大きい場合には、前記特定したノードの分割または統合を抑止し、前記算出した更新指数が所定値より小さい場合には、前記特定したノードの分割または統合を実行することを特徴とする請求項1に記載のインデックス管理方法。
  3. 前記更新指数を算出する処理は、前記データの数または子ノードの数が、前記計数した更新回数と検索回数との比を用いる所定関数で算出した上限値よりも多いノード、または、前記計数した更新回数と検索回数との比を用いる所定関数で算出した下限値よりも少ないノードについて、ノードの分割または統合処理を実行または抑止することを特徴とする請求項1または2に記載のインデックス管理方法。
  4. コンピュータが、
    空間を最小外接領域に分割して前記空間に存在するデータのインデックスをツリー構造で生成し、
    前記ツリー構造を形成するノードごとに、当該ノードが検索された数を計数し、
    前記ノードごとに、当該ノードが管理するデータ又は当該ノードの子ノードが更新された数を計数し、
    前記データの数または子ノードの数が、前記計数した更新回数と検索回数との比を用いる所定関数で算出した値を満たさない場合に、前記特定したノードの分割または統合処理の実行を抑止する
    ことを実行するインデックス管理方法。
  5. コンピュータが、
    空間を最小外接領域に分割して前記空間に存在するデータのインデックスをツリー構造で生成し、
    前記ツリー構造を形成するノードごとに、当該ノードが検索された数を計数し、
    前記ノードごとに、当該ノードが管理するデータ又は当該ノードの子ノードが更新された数を計数し、
    前記データの数または子ノードの数に基づいて特定したノードについて、計数した更新回数と検索回数とを用いて更新指数を算出し、
    算出した更新指数に基づいて、前記特定したノードの分割または統合処理の実行を抑止する
    ことを実行させるインデックス管理プログラム。
  6. 空間を最小外接領域に分割して前記空間に存在するデータのインデックスをツリー構造で生成する生成部と、
    前記ツリー構造を形成するノードごとに、当該ノードが検索された数を計数する第1計数部と、
    前記ノードごとに、当該ノードが管理するデータ又は当該ノードの子ノードが更新された数を計数する第2計数部と、
    前記データの数または子ノードの数に基づいて特定されたノードについて、前記第2計数部によって計数された更新回数と前記第1計数部によって計数された検索回数とを用いて更新指数を算出する算出部と、
    前記算出部によって算出された更新指数に基づいて、前記特定されたノードの分割または統合処理の実行を抑止する実行制御部と
    を有することを特徴とするインデックス管理装置。
JP2011103239A 2011-05-02 2011-05-02 インデックス管理方法、インデックス管理プログラムおよびインデックス管理装置 Expired - Fee Related JP5678790B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011103239A JP5678790B2 (ja) 2011-05-02 2011-05-02 インデックス管理方法、インデックス管理プログラムおよびインデックス管理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011103239A JP5678790B2 (ja) 2011-05-02 2011-05-02 インデックス管理方法、インデックス管理プログラムおよびインデックス管理装置

Publications (2)

Publication Number Publication Date
JP2012234415A true JP2012234415A (ja) 2012-11-29
JP5678790B2 JP5678790B2 (ja) 2015-03-04

Family

ID=47434667

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011103239A Expired - Fee Related JP5678790B2 (ja) 2011-05-02 2011-05-02 インデックス管理方法、インデックス管理プログラムおよびインデックス管理装置

Country Status (1)

Country Link
JP (1) JP5678790B2 (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015056016A (ja) * 2013-09-11 2015-03-23 日本電信電話株式会社 データ索引装置、データ索引方法及びプログラム
WO2016178313A1 (ja) * 2015-05-07 2016-11-10 日本電気株式会社 情報処理装置、情報処理方法および情報処理プログラムを記憶する記録媒体
CN112862951A (zh) * 2021-01-28 2021-05-28 晟通科技集团有限公司 配件建模方法、计算机装置及存储介质
CN113312436A (zh) * 2020-07-27 2021-08-27 阿里巴巴集团控股有限公司 空间索引的处理方法及装置
CN113420072A (zh) * 2021-06-24 2021-09-21 深圳前海微众银行股份有限公司 数据处理方法、装置、设备及存储介质
JP2022020737A (ja) * 2016-09-15 2022-02-01 オラクル・インターナショナル・コーポレイション ストリームデータにおける空間変化検出器
CN116562923A (zh) * 2023-05-26 2023-08-08 深圳般若海科技有限公司 一种基于电商行为的大数据分析方法、系统及介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0496837A (ja) * 1990-08-14 1992-03-30 Nippon Telegr & Teleph Corp <Ntt> データベース処理装置におけるインデックス構成方法
JP2001513925A (ja) * 1997-02-27 2001-09-04 テルコンター 2次元またはそれ以上の次元のデータベース照会を最適化するシステムおよび方法
JP2002073390A (ja) * 2000-08-30 2002-03-12 Nippon Telegr & Teleph Corp <Ntt> 多次元空間データ構造を記録した記録媒体、多次元空間データ更新方法、多次元空間データ探索方法および前記方法を実施するプログラムを記録した記録媒体
JP2008123426A (ja) * 2006-11-15 2008-05-29 Hitachi Ltd インデックス処理方法及び計算機システム
JP2011060180A (ja) * 2009-09-14 2011-03-24 Fujitsu Ltd データベースシステムの制御方法、インデックスサーバ及びプログラム

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0496837A (ja) * 1990-08-14 1992-03-30 Nippon Telegr & Teleph Corp <Ntt> データベース処理装置におけるインデックス構成方法
JP2001513925A (ja) * 1997-02-27 2001-09-04 テルコンター 2次元またはそれ以上の次元のデータベース照会を最適化するシステムおよび方法
JP2002073390A (ja) * 2000-08-30 2002-03-12 Nippon Telegr & Teleph Corp <Ntt> 多次元空間データ構造を記録した記録媒体、多次元空間データ更新方法、多次元空間データ探索方法および前記方法を実施するプログラムを記録した記録媒体
JP2008123426A (ja) * 2006-11-15 2008-05-29 Hitachi Ltd インデックス処理方法及び計算機システム
JP2011060180A (ja) * 2009-09-14 2011-03-24 Fujitsu Ltd データベースシステムの制御方法、インデックスサーバ及びプログラム

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015056016A (ja) * 2013-09-11 2015-03-23 日本電信電話株式会社 データ索引装置、データ索引方法及びプログラム
WO2016178313A1 (ja) * 2015-05-07 2016-11-10 日本電気株式会社 情報処理装置、情報処理方法および情報処理プログラムを記憶する記録媒体
JPWO2016178313A1 (ja) * 2015-05-07 2018-03-15 日本電気株式会社 情報処理装置、情報処理方法および情報処理プログラムを記憶する記録媒体
JP2022020737A (ja) * 2016-09-15 2022-02-01 オラクル・インターナショナル・コーポレイション ストリームデータにおける空間変化検出器
JP7316341B2 (ja) 2016-09-15 2023-07-27 オラクル・インターナショナル・コーポレイション ストリームデータにおける空間変化検出器
CN113312436A (zh) * 2020-07-27 2021-08-27 阿里巴巴集团控股有限公司 空间索引的处理方法及装置
CN113312436B (zh) * 2020-07-27 2024-04-19 阿里巴巴集团控股有限公司 空间索引的处理方法及装置
CN112862951A (zh) * 2021-01-28 2021-05-28 晟通科技集团有限公司 配件建模方法、计算机装置及存储介质
CN113420072A (zh) * 2021-06-24 2021-09-21 深圳前海微众银行股份有限公司 数据处理方法、装置、设备及存储介质
CN113420072B (zh) * 2021-06-24 2024-04-05 深圳前海微众银行股份有限公司 数据处理方法、装置、设备及存储介质
CN116562923A (zh) * 2023-05-26 2023-08-08 深圳般若海科技有限公司 一种基于电商行为的大数据分析方法、系统及介质
CN116562923B (zh) * 2023-05-26 2023-12-22 深圳般若海科技有限公司 一种基于电商行为的大数据分析方法、系统及介质

Also Published As

Publication number Publication date
JP5678790B2 (ja) 2015-03-04

Similar Documents

Publication Publication Date Title
JP5678790B2 (ja) インデックス管理方法、インデックス管理プログラムおよびインデックス管理装置
JP6032467B2 (ja) 時空間データ管理システム、時空間データ管理方法、及びそのプログラム
US11061984B2 (en) Grid-based geofence data indexing
Benetis et al. Nearest and reverse nearest neighbor queries for moving objects
Li et al. Geo-social influence spanning maximization
Yu et al. Scalable distributed processing of K nearest neighbor queries over moving objects
Hu et al. Distance indexing on road networks
JP2020523650A (ja) ジオフェンスのインデックスグリッドを判断するための方法及び装置
Lian et al. Probabilistic top-k dominating queries in uncertain databases
Hu et al. Top-k spatio-textual similarity join
KR20040095751A (ko) 위치 및 정밀도 인코딩을 위해 그리드 인덱스를 사용하는시스템 및 방법
KR20190079354A (ko) 분할 공간 기반의 공간 데이터 객체 질의처리장치 및 방법, 이를 기록한 기록매체
KR101794883B1 (ko) 분산 파일 시스템에서의 대용량 공간 데이터의 고속 분산 색인 생성 및 저장 방법
Yuan et al. RSkNN: kNN search on road networks by incorporating social influence
Zhang et al. Effectively indexing the multi-dimensional uncertain objects for range searching
Yu et al. Efficient filtering algorithms for location-aware publish/subscribe
Deng et al. Parallel processing of dynamic continuous queries over streaming data flows
Lewis et al. Lidar data management pipeline; from spatial database population to web-application visualization
Zhang et al. Effectively indexing the uncertain space
CN107451302A (zh) 滑动窗口下基于位置top‑k关键词查询的建模方法及系统
CN113449052A (zh) 空间索引的建立方法、空间区域查询方法及装置
KR20210077975A (ko) 블록체인 기반의 지리공간 데이터를 위한 공간 데이터 인덱싱 방법 및 장치
JP2014048916A (ja) 周辺情報検索装置、周辺情報検索方法、及び周辺情報検索プログラム
US11537622B2 (en) K-nearest neighbour spatial queries on a spatial database
US9436715B2 (en) Data management apparatus and data management method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140204

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140811

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140916

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141117

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141222

R150 Certificate of patent or registration of utility model

Ref document number: 5678790

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees