(57)【要約】【課題】よりデータ長を削減することを目的とする。【解決手段】多次元空間に構築された多分木構造データに対して多次元空間上の各子ノードの座標を空間充填曲線により順序付けする順序付け手段と、順序付け手段により順序づけられた順番に従って、親ノード内の各子ノードの位置を特定する座標の各子ノード間の相対座標値を導出する第一の導出手段と、第一の導出手段により導出された相対座標値を基に子ノードの座標情報のデータ長を導出する第二の導出手段と、第二の導出手段によって算出されたデータ長で相対座標値を記憶するデータ記憶手段と、を有することによって課題を解決する。【選択図】図３
2015055914.tif 000002
【特許請求の範囲】
【請求項１】
多次元空間に構築された多分木構造データに対して多次元空間上の各子ノードの座標を空間充填曲線により順序付けする順序付け手段と、
前記順序付け手段により順序づけられた順番に従って、親ノード内の各子ノードの位置を特定する座標の各子ノード間の相対座標値を導出する第一の導出手段と、
前記第一の導出手段により導出された相対座標値を基に子ノードの座標情報のデータ長を導出する第二の導出手段と、
前記第二の導出手段によって算出されたデータ長で前記相対座標値を記憶するデータ記憶手段と、
を有する情報処理装置。
【請求項２】
前記第一の導出手段は、前記順序付け手段により順序付けされた子ノードの順番に従って、順序付けされた子ノードの前後の子ノードの内部座標間の相対座標値を導出する請求項１記載の情報処理装置。
【請求項３】
前記第二の導出手段は、前記第一の導出手段により導出された前記相対座標値を基に全ての子ノード間の前記相対座標値を格納可能な前記データ長を導出する請求項２記載の情報処理装置。
【請求項４】
前記第一の導出手段は、前記順序付け手段により順序付けされた子ノードの順番に従って前記順序付け手段で使用された各子ノードの内部座標以外の内部座標と各々の子ノードの前記順序付け手段で使用された内部座標とに基づき相対座標値を導出する請求項１記載の情報処理装置。
【請求項５】
前記第二の導出手段は、前記第一の導出手段により導出された前記相対座標値を基に全ての子ノード内の全ての内部座標の前記相対座標値を格納可能なデータ長を導出する請求項４記載の情報処理装置。
【請求項６】
前記第一の導出手段は、前記順序付け手段により順序付けされた子ノードの順番に従って、順序付けされた子ノードの前後の子ノードの内部座標間の第一の相対座標値を導出すると共に、前記順序付け手段により順序付けされた子ノードの順番に従って前記順序付け手段で使用された各子ノードの内部座標以外の内部座標と前記順序付け手段で使用された各子ノードの内部座標とに基づき第二の相対座標値を導出し、
前記第二の導出手段は、前記第一の導出手段により導出された前記第一の相対座標値を基に全ての子ノード間の前記第一の相対座標値を格納可能な第一のデータ長を導出すると共に、前記第一の導出手段により導出された前記第二の相対座標値を基に全ての子ノード内の全ての内部座標の前記第二の相対座標値を格納可能な第二のデータ長を導出し、
前記データ記憶手段は、前記第一のデータ長で前記第一の相対座標値を記憶し、前記第二のデータ長で前記第二の相対座標値を記憶する請求項１記載の情報処理装置。
【請求項７】
前記第二の導出手段により導出された各次元のデータ長を圧縮した圧縮後のデータ長をデータ長格納領域に記憶するデータ長記憶手段を更に有する請求項１乃至６何れか１項記載の情報処理装置。
【請求項８】
情報処理装置が実行する情報処理方法であって、
多次元空間に構築された多分木構造データに対して多次元空間上の各子ノードの座標を空間充填曲線により順序付けする順序付けステップと、
前記順序付けステップにより順序づけられた順番に従って、親ノード内の各子ノードの位置を特定する座標の各子ノード間の相対座標値を導出する第一の導出ステップと、
前記第一の導出ステップにより導出された相対座標値を基に子ノードの座標情報のデータ長を導出する第二の導出ステップと、
前記第二の導出ステップによって算出されたデータ長で前記相対座標値を記憶するデータ記憶ステップと、
を含む情報処理方法。
【請求項９】
コンピュータに、
多次元空間に構築された多分木構造データに対して多次元空間上の各子ノードの座標を空間充填曲線により順序付けする順序付けステップと、
前記順序付けステップにより順序づけられた順番に従って、親ノード内の各子ノードの位置を特定する座標の各子ノード間の相対座標値を導出する第一の導出ステップと、
前記第一の導出ステップにより導出された相対座標値を基に子ノードの座標情報のデータ長を導出する第二の導出ステップと、
前記第二の導出ステップによって算出されたデータ長で前記相対座標値を記憶するデータ記憶ステップと、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法及びプログラムに関する。
【背景技術】
【０００２】
従来技術において、空間検索や類似画像検索といった多次元空間のデータを管理する多次元インデックスがある。代表的なものとして、Ｒ−Ｔｒｅｅ（Ｒｅｃｔａｎｇｌｅ−Ｔｒｅｅ）、ＳＳ−Ｔｒｅｅ（Ｓｉｍｉｌａｒｉｔｙ  Ｓｅａｒｃｈ−Ｔｒｅｅ）、ＳＲ−Ｔｒｅｅ（Ｓｐｈｅｒｅ／Ｒｅｃｔａｎｇｌｅ−Ｔｒｅｅ）といった多分木構造のインデックス形式がある。
例えば、Ｒ−Ｔｒｅｅを使った場合、情報処理装置等は、階層的に入れ子になった相互に重なり合う最小外接矩形（Ｍｉｎｉｍｕｍ  Ｂｏｕｎｄｉｎｇ  Ｒｅｃｔａｎｇｌｅ：以下、ＭＢＲ）で空間を分割し、その空間の領域（座標情報）を表現する。情報処理装置等が、ＭＢＲの形状を表現するには、空間の各軸における夫々の最小座標と最大座標とが必要である。
【０００３】
各ＭＢＲを固定データ長によって絶対座標で表現する場合、位置表現のためのデータサイズのコストが高くなる。下層のＭＢＲの情報はファイルシステムのアクセス単位でまとめて格納されており、１アクセス単位に格納できるＭＢＲの情報の個数が限定される。そのため、固定データ長の座標表現を用いるとディスクアクセス数の増大を招くという課題が生じる。そこで、下位のＭＢＲの座標情報を最上位のＭＢＲの座標情報からの相対的な位置で表現して、データ長を削減し、探索の際、少ないディスクアクセスで検索する多次元空間のデータ構造が提案されている（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０００−２００３４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１記載の技術によれば、データ長が親ノードの辺の長さとなる。
本発明は、よりデータ長を削減することを目的とする。
【課題を解決するための手段】
【０００６】
そこで、本発明は、多次元空間に構築された多分木構造データに対して多次元空間上の各子ノードの座標を空間充填曲線により順序付けする順序付け手段と、前記順序付け手段により順序づけられた順番に従って、親ノード内の各子ノードの位置を特定する座標の各子ノード間の相対座標値を導出する第一の導出手段と、前記第一の導出手段により導出された相対座標値を基に子ノードの座標情報のデータ長を導出する第二の導出手段と、前記第二の導出手段によって算出されたデータ長で前記相対座標値を記憶するデータ記憶手段と、を有する。
【発明の効果】
【０００７】
本発明によれば、よりデータ長を削減することができる。
【図面の簡単な説明】
【０００８】
【図１】データ圧縮装置の構成の一例を示す図である。
【図２】二次元座標情報等、多次元情報のインデックス付けに使われるＲ−Ｔｒｅｅの木構造の一例を示す図である。
【図３】データ圧縮装置のソフトウェア構成の一例を示す図である。
【図４】データ記憶部における多次元インデックスのデータ格納構造の一例を示す図である。
【図５】二次元の座標空間のノードの木構造の一例を示す図である。
【図６】図５に示す二次元のデータに対し、空間充填曲線の１つであるＨｉｌｂｅｒｔ曲線を用いて内部座標の順序付けの一例を示した図である。
【図７】実施形態１におけるデータ圧縮処理の一例を示すフローチャートである。
【図８】座標値のデータ長の圧縮前（１）と圧縮後（２）とのノード格納領域の概念図である。
【図９】各子ノード自身の内部座標間の値を相対値で表現する一例を示す図である。
【図１０】実施形態２におけるデータ圧縮処理の一例を示すフローチャートである。
【図１１】座標値のデータ長の圧縮前（１）と圧縮後（２）とのノード格納領域の概念図である。
【図１２】実施形態１と実施形態２とを組み合わせて圧縮した場合の概念図である。
【発明を実施するための形態】
【０００９】
以下、本発明の実施形態について図面に基づいて説明する。
【００１０】
＜実施形態１＞
図１は、データ圧縮装置１００の構成の一例を示す図である。データ圧縮装置１００は、情報処理装置の一例である。
データ圧縮装置１００は、ユーザによって利用されるパーソナルコンピュータ（ＰＣ）等の装置であり、ＣＰＵ、入力部、表示部、メモリ、通信部、ローカルＩ／Ｆ、記憶部等のハードウェアが内部バスで接続されている。なお、本実施形態では、データ圧縮装置をＰＣとして説明するが、これに限定されず、携帯端末やタブレット端末等であってもよい。
ＣＰＵは、データ圧縮装置１００内の各部を制御する中央処理装置である。入力部は、キーボードやマウス等の操作装置である。表示部は、液晶モニタ等の表示装置である。メモリは、ＲＡＭ、ＲＯＭ等の記憶装置である。通信部は、ネットワーク（有線又は無線ネットワーク）に接続するためのインターフェースであり、他のデータ圧縮装置やサーバ等とデータ通信を行うことで、コンテンツデータを送受信することが可能となる。ローカルＩ／Ｆは、外部記憶媒体（ＵＳＢメモリ、ＳＤカード等）との接続に用いられるインターフェースである。記憶部は、ハードディスク等の記憶装置である。
【００１１】
次に、記憶部に格納されるプログラム等について説明を行う。記憶部にはプログラムが記憶されており、ＣＰＵがプログラムに基づき処理を実行することにより後述するソフトウェア構成やフローチャートに係る処理等が実現される。但し、以下では説明の簡略化のため、特に言及しない限り、記憶部にソフトウェアが記憶されているように説明すると共に図に記載する。
記憶部には、オペレーティングシステム、ユーザアプリケーション１１０、多次元インデックス検索エンジン１２０、データ記憶部１３０、及び他の機能に関するソフトウェアが記憶されている。以下、本実施形態に関わるもののみを説明する。
ユーザアプリケーション１１０は、ユーザから入力部を介して入力された指示により検索・登録・更新・削除要求を後述する多次元インデックス検索エンジン１２０に送る。
【００１２】
多次元インデックス検索エンジン１２０は、空間充填曲線順序付け部１２１、相対座標値算出部１２２、データ長算出部１２３を備える。
空間充填曲線順序付け部１２１は、多次元空間に構築された多分木構造データに対して多次元空間上の各子ノードの座標を空間充填曲線により順序付けする。
相対座標値算出部１２２は、空間充填曲線順序付け部１２１によって順序づけられた順番に従って、親ノード内の各子ノードの位置を特定する座標の各子ノード間の相対座標値を算出する。
データ長算出部１２３は、相対座標値算出部１２２によって算出された相対座標値を基に子ノードの座標情報のデータ長を算出する。
データ記憶部１３０は、後述する多次元インデックスの階層構造、後述するノード情報、相対座標値算出部１２２によって算出された相対座標値、データ長算出部１２３によって算出されたデータ長等を記憶する。
【００１３】
次に本実施形態で対象とする多次元空間の中にある座標情報を管理する多次元インデックスの階層構造とノード情報とについて説明する。
図２は、二次元座標情報等、多次元情報のインデックス付けに使われるＲ−Ｔｒｅｅの木構造の一例を示す図である。本実施形態はＲ−Ｔｒｅｅに限定されるものではなく、多次元インデックス構造一般に適用できる。
Ｒ−Ｔｒｅｅでは階層的に入れ子になった相互に重なり合う最小外接矩形（以下、ＭＢＲという）により空間を分割する。本例では三階層で管理する場合を例に説明する。親ノードになる一階層目のＭＢＲ「Ｎ１」で囲まれている空間（範囲）を、子ノードであるＭＢＲ「Ｎ１１」、「Ｎ１２」で分割している。更に「Ｎ１１」を「Ｎ１１１」、「Ｎ１１２」、「Ｎ１１３」、「Ｎ１１４」で、「Ｎ１２」を「Ｎ１２１」、「Ｎ１２２」、「Ｎ１２３」で夫々分割している。データ圧縮装置１００は、このようにＭＢＲで分割された空間を階層化して管理する。最下層のノード（葉ノード）にはユーザが登録した領域（空間オブジェクト）が格納されている。
【００１４】
各ＭＢＲは、識別番号（以下、ノード番号という）と座標とが対応付けられて管理されている。一階層目は親ノードのＭＢＲ「Ｎ１」のノード番号と座標とが対応付けられている。二階層目には、親ノードＭＢＲ「Ｎ１」の空間を分割している子ノードＭＢＲ「Ｎ１１」とＭＢＲ「Ｎ１２」とにそれぞれのノード番号と座標とが対応付けられて管理されている。三階層目には、二階層目の子ノードのＭＢＲ「Ｎ１１」の空間に属している子ノード「Ｎ１１１」、「Ｎ１１２」、「Ｎ１１３」、「Ｎ１１４」のそれぞれにノード番号と座標とが対応付けられて管理されている。同じく、二階層目の子ノードＭＢＲ「Ｎ１２」の空間に属している子ノードＭＢＲ「Ｎ１２１」、「Ｎ１２２」、「Ｎ１２３」のそれぞれにノード番号と座標とが対応付けられて管理されている。
【００１５】
（検索概要）
上記のように三階層で管理されている親ノードのＭＢＲ「Ｎ１」の空間（範囲）を多次元インデックス検索エンジン１２０が検索する場合について説明する。例えば、「現在地から５００ｍ以内のコンビニエンスストアを探す」というような場合、多次元インデックス検索エンジン１２０は次の手順で検索を行う。
１．ユーザからの入力に従い、現在地から５００ｍ範囲に相当する矩形を設定し、検索領域とする。
２．検索時に各階層の座標情報をデータ記憶部の記録単位分（親ノードの中に格納されている子ノードの分）読み込み、検索領域と比較する。
３．検索領域と重なる子ノードを最下層のノード（葉ノード）に到達するまで再帰的に読み込んでいく。
４．葉ノード内に格納されているユーザが登録した領域（空間オブジェクト）が検索領域の検索条件（範囲検索、交差検索、包含検索）に合致するか否かを判定する。
５．検索条件に合致した空間オブジェクトを検索結果としてユーザアプリケーション１１０に返す。
【００１６】
図３は、データ圧縮装置１００のソフトウェア構成の一例を示す図である。
データ圧縮装置１００のソフトウェア構成は、ユーザアプリケーション１１０と、多次元インデックス検索エンジン１２０と、データ記憶部１３０と、を含む。
ユーザアプリケーション１１０は、ユーザからの指示により検索・登録・更新・削除要求を多次元インデックス検索エンジン１２０に送る。例えば、検索要求であれば、ユーザアプリケーション１１０は、検索範囲を指定した領域（Ｒ−Ｔｒｅｅであれば矩形）の座標を多次元インデックス検索エンジン１２０に送る。登録、更新系であれば、ユーザアプリケーション１１０は、登録、更新を行う領域（以下、空間オブジェクトという）のＩＤ番号と座標情報とを多次元インデックス検索エンジン１２０に送る。ＩＤ番号は空間オブジェクトを特定する一意な番号であり、座標情報は空間オブジェクトの領域を定義する値である（Ｒ−Ｔｒｅｅの場合は最小座標の座標値及び最大座標の座標値）。削除要求であれば、ユーザアプリケーション１１０は、ＩＤを指定することで、対象の空間オブジェクトを削除する。
【００１７】
多次元インデックス検索エンジン１２０は、所定の方式、例えばＲ−Ｔｒｅｅの検索・登録・更新・削除アルゴリズムで要求を実行するため、データ記憶部１３０に構築されたインデックスにアクセスし、その結果をユーザアプリケーション１１０に返す。
データ記憶部１３０（例えば、関係データベースやＫＶＳ（Ｋｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅ）やファイルシステム）には、多次元インデックスの情報として親ノードと子ノードとが対応付けられて記憶され、多次元インデックスの階層構造を表現している。
データ記憶部１３０には、図３に例示するように、親ノードを識別する「ノード番号」とその親ノードに含まれている１つ以上の子ノードの「子ノード番号」と各子ノードの「座標情報」（「座標値１」、「座標値２」・・・）とが対応づけて記憶されている。親ノードと子ノードとの対応付けは、データ記憶部１３０の１記憶単位（関係データベースであれば１ページサイズ、ファイルシステムであれば１クラスタ）に格納されており、データ長は固定長である。
【００１８】
図４は、データ記憶部１３０における多次元インデックスのデータ格納構造の一例を示す図である。１つの親ノードに含まれる子ノードの座標情報を格納する領域を概念的に示したものである。データ記憶部１３０で規定される１記憶単位（関係データベースであれば１ページサイズ、ファイルシステムであれば１クラスタ）を示しており、データ長は固定長である。
図４の例では、先頭の２Ｂｙｔｅに親ノードの位置する階層数、次の２Ｂｙｔｅに親ノードに格納される子ノードの数が格納される。これに続いて、子ノードの個数に応じた領域情報がデータ記憶部１３０の１記憶単位で規定されるデータ長（固定長）まで順次格納される。
領域情報は、先頭８Ｂｙｔｅに子ノードを特定するノード番号が格納され、次に、次元数に応じた子ノードの座標値が格納される。本実施形態は二次元であり、各子ノードの座標値を格納する領域には４Ｂｙｔｅで表現される４つの座標（計１６Ｂｙｔｅ）、即ち、Ｘ座標、Ｙ座標の最小値と最大値と（Ｘｍｉｎ、Ｘｍａｘ、Ｙｍｉｎ、Ｙｍａｘ）が格納される。例えば、三次元の場合は、更にＺ座標の最小値と最大値と（Ｚｍｉｎ、Ｚｍａｘ）が追加されるというように、次元数に応じた値が格納される。
【００１９】
多次元インデックス検索エンジン１２０は、多次元インデックスの検索時は、図２に示す上位階層から順に各ノードが検索範囲に含まれるかどうかを判定していく。この際、多次元インデックス検索エンジン１２０は、１階層下のノードを参照する際にノード格納領域にアクセスする。
この検索を高速化するには、多次元インデックス検索エンジン１２０によるノード格納領域の読み込みの回数を減らし、Ｉ／Ｏへのアクセス回数を削減可能とすることが必要である。そのために、ノード格納領域により多くの子ノード情報を格納し、一度に多くの子ノードの情報を参照できるようにすることが有用である。しかし、ノード格納領域はデータ記憶部１３０で規定されるので、データ長は固定であり、このノード格納領域により多くの子ノードの情報を格納するには子ノードの持つ情報（座標値等）を圧縮することが必要である。
そこで、本実施形態は、親ノード内の子ノード座標を表現するのに必要な最小限のデータ長（以下、最小データ長という）を算出し、算出した最小データ長で子ノードの座標情報（Ｘｍｉｎ、Ｘｍａｘ、Ｙｍｉｎ、Ｙｍａｘ）を表現する。即ち、データ長を圧縮することで、ノード格納領域に格納できる子ノード数が増加させて、同じ子ノード数を参照する際のＩ／Ｏ回数を削減可能としている。
【００２０】
より具体的には、本実施形態では、親ノードに含まれる子ノードについて、子ノード間の最小座標を相対座標によって表現することにより、子ノードの座標を表現するためのデータ長を削減（圧縮）している。
本実施形態では、各子ノードのある内部座標を子ノード間の相対座標で順番に表現する。内部座標はノードの領域形状を表す座標を指し、本実施形態で示すＲ−Ｔｒｅｅインデックス方式ではＸ、Ｙ座標それぞれの軸の最小値を示す最小座標と最大値を示す最大座標とがある。本実施形態では、Ｒ−Ｔｒｅｅ、子ノード間相対座標で表現する座標に最小座標を採用する。なお、採用する内部座標は絶対座標に復元でき、各子ノードで同じ種類のものを採用すればよく、最大座標を採用してもよい。また、内部座標の表現は直交座標だけでなく一般化座標による表現でもよい。
【００２１】
図５は、二次元の座標空間のノードの木構造の一例を示す図である。各子ノードの最小座標を用いて、子ノード間の相対座標を表現した場合の一例であり、親ノードのＭＢＲ「Ｍ０」に子ノードのＭＢＲとしてＭ１、Ｍ２、Ｍ３、Ｍ４、Ｍ５が登録されている。各子ノードの内部座標、ここでは最小座標をｘ１、ｘ２、ｘ３、ｘ４、ｘ５とし、各最小座標間の相対座標（Ｒ１、Ｒ２、Ｒ３、Ｒ４）として説明する。
このような場合、格納する子ノードのデータ長を短くする（圧縮する）には、各子ノードの内部座標間の距離が短くなる順序で相対座標を計算する必要がある。本実施形態では、子ノードの（内部座標の）順序付けには、曲線上の距離が近いほど実空間での距離も近くなる性質を持つ空間充填（充満）曲線によって得られた順序で子ノードの並び替えを行う。なお、空間充填（充満）曲線については、参考文献参照。
参考文献：Ｈ．ザーガン著、Ｈ．Ｓａｇａｎ原著、鎌田  清一郎  翻訳、「空間充填曲線とフラクタル」、シュプリンガー・フェアラーク東京、１９９８年１２月
【００２２】
図６は、図５に示す二次元のデータに対し、空間充填曲線の１つであるＨｉｌｂｅｒｔ曲線を用いて内部座標の順序付けの一例を示した図である。
まず、多次元インデックス検索エンジン１２０は、親ノードＭ０内の空間を空間充填曲線の次数に応じてブロックに分割する（図６では次数を４とした場合のＨｉｌｂｅｒｔ曲線でＭ０の領域を１６×１６ブロックに分割）。ここで空間充填曲線の次数は領域の分割の細かさに相当し、次数が高くなるにしたがって分割が細かくなる。
なお、多次元インデックス検索エンジン１２０は、空間充填曲線の次数として、計算コスト、圧縮率、実測値等を基に最適な次数を選択する。
親ノードＭ０内の空間を分割した後、多次元インデックス検索エンジン１２０は、各子ノードの内部座標を空間充填曲線で分割した１６×１６内の各ブロックに対応付けて、この内部座標（ｘ１〜ｘ５）の空間充填曲線値（曲線の長さ）を計算する。
その後、多次元インデックス検索エンジン１２０は、各内部座標（ｘ１〜ｘ５）を空間充填曲線値（曲線の長さ）に基づいて並び替える。
多次元インデックス検索エンジン１２０は、並び替えた順番（ｘ１、ｘ２、ｘ３、ｘ４、ｘ５の順序）で内部座標の相対座標値Ｒijを、数式１を用いて順次計算し、その相対座標値群（Ｒ１、Ｒ２、Ｒ３、Ｒ４）をメモリ上の一時領域に格納する。
子ノード間相対座標Ｒij（ｊ＝ｘ，ｙ）
Ｒij＝ｘi+1j−ｘij                                              （数式１）
【００２３】
多次元インデックス検索エンジン１２０は、この相対座標値の計算を行うと共に、数式２を用いて、全相対座標値（Ｒ１、Ｒ２、Ｒ３、Ｒ４）を精度の低下なく復元することが可能な最小のデータ長Ｌjを計算する。
データ長Ｌj（ｊ＝ｘ，ｙ  単位：ｂｉｔ）
Ｌj＝ｍａｘｌｏｇ2（｜Ｒij｜＋１）                                （数式２）
i
【００２４】
そして、多次元インデックス検索エンジン１２０は、図３で示すデータ記憶部１３０に対して、最小データ長Ｌjの値と、このデータ長Ｌjで表現した全ての子ノードの相対座標値（Ｒ１、Ｒ２、Ｒ３、Ｒ４）と、を書き込む。多次元インデックス検索エンジン１２０は、データ記憶部１３０に対する書き込みは、数式１で計算した順番で書き込む。
例えば、関係データベースの場合、多次元インデックス検索エンジン１２０は、親ノードのノード番号を主キーとして各子ノードのノード番号と相対座標値群（Ｒ１、Ｒ２、Ｒ３、Ｒ４）とをまとめてバイナリデータとして１レコードで書き込む。
【００２５】
図７は、実施形態１におけるデータ圧縮処理の一例を示すフローチャートである。
空間充填曲線順序付け部１２１は、上述した多次元インデックスの親ノード内の空間を空間充填曲線の次数に応じてブロックに分割する（ステップＳ１０１）。
空間充填曲線順序付け部１２１は、ステップＳ１０１で分割した各ブロックに子ノードの位置を特定する内部座標を対応付ける（ステップＳ１０２）。なお、空間充填曲線順序付け部１２１は、本ステップの処理を、子ノードの数だけ繰り返す。
空間充填曲線順序付け部１２１は、各子ノードの内部座標の空間充填曲線値を算出し、各子ノードの内部座標に各ブロックに対応付けた空間充填曲線値を割り当てる（ステップＳ１０３）。なお、空間充填曲線順序付け部１２１は、本ステップの処理を、子ノードの数だけ繰り返す。
【００２６】
空間充填曲線順序付け部１２１は、ステップＳ１０３で各子ノードに割り当てた空間充填曲線値に基づいて、子ノードをソート（順序付け）する（ステップＳ１０４）。
ステップＳ１０５において、相対座標値算出部１２２は、ステップＳ１０４で順序付けされた子ノードの順番（順列）に従って、２つの子ノード（順序付けの前後の子ノード）の内部座標間の相対座標値（第一の相対座標値）を算出する（第一の導出）。その後、データ長算出部１２３は、相対座標値算出部１２２によって算出された相対座標値Ｒijからデータ長Ｌj（第一のデータ長）を算出する（第二の導出）。なお、相対座標値算出部１２２及びデータ長算出部１２３は、本ステップの処理を、子ノードの数だけ繰り返す。
データ記憶部１３０は、ステップＳ１０５で算出された相対座標値ＲijをステップＳ１０５で算出されたデータ長Ｌｊで表現し、記憶する（ステップＳ１０６）。なお、データ記憶部１３０は、本ステップの処理を、子ノードの数だけ繰り返す。
ステップＳ１０６の処理終了後、多次元インデックス検索エンジン１２０は、図７に示す処理を終了する。
【００２７】
（多次元インデックスのデータ圧縮（削減）の概念図）
図８は、座標値のデータ長の圧縮前（１）と圧縮後（２）とのノード格納領域の概念図である。
図８の（１）は、図４で示した圧縮前のデータを格納した状態を示しており、各子ノードのＸ座標、Ｙ座標の最小値と最大値と（Ｘｍｉｎ、Ｘｍａｘ、Ｙｍｉｎ、Ｙｍａｘ）の４つの座標を４Ｂｙｔｅ（計１６Ｂｙｔｅ）で表現して格納される。
図８の（２）は、上述した相対座標値群（Ｒ１、Ｒ２、Ｒ３、Ｒ４）を最小のデータ長Ｌｊで表現して格納した状態を示す。ここでは、Ｘ座標の値ＸｍｉｎをＲｉｘ、Ｙ座標の値ＹｍｉｎをＲｉｙで表現することでデータ長を圧縮して格納できるため、圧縮前よりも多くの子ノードの座標情報を格納することができる。
また、データ記憶部１３０は、データ検索時に座標情報を復元するためにデータ長格納領域を設けてある。多次元インデックス検索エンジン１２０は、データ長格納領域に、各次元の圧縮後のデータ長（ここではＸ座標、Ｙ座標のデータ長）を記憶しておく（データ長記憶）。
【００２８】
（検索時）
多次元インデックス検索エンジン１２０は、多次元インデックス検索時は、図８の（２）に示すデータ長格納領域から各軸（ｘ軸、ｙ軸）のデータ長値を取得し、そのデータ長で順次、子ノードの相対座標を読み込む。そして、多次元インデックス検索エンジン１２０は、子ノードの相対座標を読み込みながら順次、絶対座標に復元していく。
【００２９】
他の木（Ｔｒｅｅ）構造のインデックス形式においても、子ノード位置を特定する内部座標であれば、最小座標以外の内部座標を採用してもよい。
実施形態１によれば、親ノード（１記憶単位）に格納する子ノードの座標情報のデータ長を圧縮することで、格納可能な子ノード数が増加し、それに伴い、データ記憶部への一回のアクセスで取得できる子ノードの数が増加する。その結果Ｉ／Ｏアクセス数が減少し、検索時間が短縮される。また、データ長が圧縮されるので、記憶装置に記録するデータ量が削減される。
【００３０】
＜実施形態２＞
実施形態１は、親ノードに含まれる子ノードについて、子ノード間の最小座標を相対座標によって表現する例について説明した。本実施形態では、各子ノード自身の内部座標間の値を相対値で表現する例を説明する。これによれば、子ノードの座標を表現するためのデータ長を削減（圧縮）することができる。
なお、システム構成等は実施形態１と同じであり、主に実施形態１と異なる点について説明を行う。
図９は、各子ノード自身の内部座標間の値を相対値で表現する一例を示す図である。上述した図５と同じデータ構造であり、親ノードのＭＢＲ「Ｍ０」に子ノードのＭＢＲとしてＭ１、Ｍ２、Ｍ３、Ｍ４、Ｍ５が登録されている。各子ノードの内部座標で、最小座標をｘ１〜ｘ５とし、実施形態１で説明した子ノード間の順序付けに使用しなかった内部座標、ここでは各子ノードの最大座標Ｘ１〜Ｘ５を、最小座標ｘ１〜ｘ５からの相対座標をｒ１〜ｒ５として説明する。
本実施形態では、各子ノード自身の各内部座標を内部座標間（最小座標と最大座標との間）の相対座標で表現することで、絶対座標表現よりもデータ長を短く（圧縮）して座標値を記録することができる。なお、相対座標で表現する際に用いる内部座標のうちの一つは絶対座標に復元できることが必要であるため、本実施形態では、最小座標値を絶対座標に復元できる場合を例に説明する。実施形態１と同様、内部座標の表現は直交座標だけでなく一般化座標による表現でもよい。
【００３１】
まず、多次元インデックス検索エンジン１２０は、子ノード内の相対座標を表現できる子ノード内相対座標ｒij（ｊ＝ｘ，ｙ）を数式３によって算出する。
子ノード内相対座標ｒij（ｊ＝ｘ，ｙ）
ｒij＝ｘi+j−ｘij                                              （数式３）
【００３２】
多次元インデックス検索エンジン１２０は、この子ノード内相対座標の計算を行うと共に、数式４を用いて、全相対座標ｒ１、ｒ２、ｒ３、ｒ４を精度の低下なく復元可能とするために必要な最小のデータ長ｌjを算出する。
データ長ｌj（ｊ＝ｘ，ｙ  単位：ｂｉｔ）
ｌj＝ｍａｘｌｏｇ2（｜ｒij｜＋１）                                （数式４）
i
【００３３】
そして、多次元インデックス検索エンジン１２０は、図３で示すデータ記憶部１３０に対して、最小データ長ｌjの値と、このデータ長ｌjで表現した全ての子ノードの相対座標値（Ｒ１、Ｒ２、Ｒ３、Ｒ４）と、を書き込む。
【００３４】
図１０は、実施形態２におけるデータ圧縮処理の一例を示すフローチャートである。
ステップＳ２０１〜ステップＳ２０４の処理は、実施形態１で説明した図７のステップＳ１０１〜ステップＳ１０４の処理と同様であるため、説明を省略する。
相対座標値算出部１２２は、順序付けに使った各子ノードの内部座標以外の内部座標と夫々の子ノードの順序付けに使った内部座標との相対座標値（第二の相対座標値）を算出する。その後、データ長算出部１２３は、相対座標値算出部１２２によって算出された相対座標値ｒijからデータ長ｌj（第二のデータ長）を算出する（ステップＳ２０５）。なお、相対座標値算出部１２２及びデータ長算出部１２３は、本ステップの処理を、子ノードの数だけ繰り返す。
データ記憶部１３０は、ステップＳ２０５で算出された相対座標値ｒijをステップＳ２０５で算出されたデータ長ｌjで表現し、記憶する（ステップＳ２０６）。なお、データ記憶部１３０は、本ステップの処理を、子ノードの数だけ繰り返す。
ステップＳ２０６の処理終了後、多次元インデックス検索エンジン１２０は、図１０に示す処理を終了する。
【００３５】
なお、本実施形態において、ステップＳ２０３及びステップＳ２０４の処理（子ノードの順序付けに関する処理）は必須ではないため、省略可能である。
その場合、ステップＳ２０５において、相対座標値算出部１２２は、各子ノードの内部座標間（例：最小座標と最大座標との間）の相対座標を算出する。
その後、データ長算出部１２３は、相対座標値算出部１２２によって算出された相対座標値ｒijからデータ長ｌjを算出する。
【００３６】
（多次元インデックスのデータ圧縮（削減）の概念図）
図１１は、座標値のデータ長の圧縮前（１）と圧縮後（２）とのノード格納領域の概念図である。
図１１の（１）は、図４で示した圧縮前のデータを格納した状態を示しており、各子ノードのＸ座標、Ｙ座標の最小値と最大値と（Ｘｍｉｎ、Ｘｍａｘ、Ｙｍｉｎ、Ｙｍａｘ）の４つの座標を４Ｂｙｔｅ（計１６Ｂｙｔｅ）で表現して格納される。
図１１の（２）は、上述した相対座標値群（Ｒ１、Ｒ２、Ｒ３、Ｒ４）を最小のデータ長Ｌjで表現して格納した状態を示す。ここでは、Ｘ座標の値Ｘｍａｘをｒｉｘ、Ｙ座標の値Ｙｍａｘをｒｉｙで表現することでデータ長を圧縮して格納できるため、圧縮前よりも多くの子ノードの座標情報を格納することができる。
また、データ検索時に座標情報を復元するためにデータ長値格納領域を設けてある。多次元インデックス検索エンジン１２０は、データ長格納領域に、圧縮後の各次元のデータ長（ここではｘ座標、Ｙ座標のデータ長）を記憶しておく。
【００３７】
（検索時）
多次元インデックス検索エンジン１２０は、多次元インデックス検索時は、図１１の（２）に示すデータ長値格納領域から各軸（Ｘ軸、Ｙ軸）のデータ長値を取得し、そのデータ長で順次、子ノードの相対座標を読み込む。そして、多次元インデックス検索エンジン１２０は、子ノードの相対座標を読み込みながら順次、絶対座標に復元していく。
【００３８】
他の木（Ｔｒｅｅ）構造のインデックス形式においても、子ノード位置を特定する内部座標であれば、最小座標以外の内部座標を採用してもよい。
実施形態１と同様、親ノード（１記憶単位）に格納する子ノードの座標情報のデータ長を圧縮することで、格納可能な子ノード数が増加し、それに伴い、データ記憶部への一回のアクセスで取得できる子ノードの数が増加する。その結果Ｉ／Ｏアクセス数が減少し、検索時間が短縮される。また、データ長が圧縮されるので、記憶装置に記録するデータ量が削減される。
【００３９】
＜実施形態３＞
また、上述した実施形態１と実施形態２とを組み合わせて、更にデータ長を圧縮することもできる。
図１２は、実施形態１と実施形態２とを組み合わせて圧縮した場合の概念図である。（１）に圧縮前のデータ格納状態、（２）に子ノード間相対座標による圧縮したときのデータ格納状態（実施形態１）、（３）に子ノード内相対座標による圧縮したときのデータ格納状態（実施形態２）を示している。
実施形態１と実施形態２とのデータ圧縮方法を組み合わせることにより、圧縮前の子ノードの座標情報（Ｘｍｉｎ、Ｘｍａｘ、Ｙｍｉｎ、Ｙｍａｘ）を夫々の、圧縮して表現した座標情報（Ｒｉｘ、ｒｉｘ、Ｒｉｙ、ｒｉｙ）で表現可能となる。よって、座標値のデータ長が更に短くなる（圧縮される）ので、１つの親ノードに格納できる子ノードの数を更に増加させることができる。
【００４０】
＜その他の実施形態＞
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（又はＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【００４１】
以上、上述した各実施形態によれば、１つの親ノードに格納できる子ノードの数を増加させることで、データ記憶部への一回のアクセスで取得できる子ノードの数を増やし、データ記憶部のアクセス回数を減少させ、検索を高速化することができる。
また、従来の技術よりデータ長を削減することができる。
【００４２】
以上、本発明の好ましい実施形態について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
上述した実施形態１のデータ圧縮方法と実施形態２のデータ圧縮方法とは、それぞれ個別に用いた場合であっても圧縮効果を得ることができる。例えば、実施形態１のデータ圧縮方法はＳＳ−Ｔｒｅｅのインデックス形式に適用することができる。また、実施形態２のデータ圧縮方法は、Ｒ−Ｔｒｅｅ及びその派生形のインデックス形式全般に適用することができる。
図１で説明した各機能部に対応するプログラムを書き換え可能な記憶部に記憶すると説明した。しかし、これに限定されず、書き換え不可能な記憶部（ＲＯＭ等）に各機能部に対応するプログラムを記憶するようにしてもよい。
また、データ圧縮装置１００内のデータ記憶部１３０に各種データを記憶すると説明したが、これに限定されず、データ圧縮装置１００以外の装置（例えば、サーバやクラウド上の記憶装置）が有するデータ記憶部に各種データを記憶してもよい。
【符号の説明】
【００４３】
１００  データ圧縮装置、１１０  ユーザアプリケーション、１２０  多次元インデックス検索エンジン、１２１  空間充填曲線順序付け部、１２２  相対座標値算出部、１２３  データ長算出部、１３０  データ記憶部
【図１】
2015055914.tif 000003
【図２】
2015055914.tif 000004
【図３】
2015055914.tif 000005
【図４】
2015055914.tif 000006
【図５】
2015055914.tif 000007
【図６】
2015055914.tif 000008
【図７】
2015055914.tif 000009
【図８】
2015055914.tif 000010
【図９】
2015055914.tif 000011
【図１０】
2015055914.tif 000012
【図１１】
2015055914.tif 000013
【図１２】
2015055914.tif 000014