(57)【要約】    インデックスキー生成装置（１００）は、インデックス対象の複数の属性に関する複数の属性値を取得するデータ取得部（１０１）と、インデックス対象の各属性について、その属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報（１０５）を取得する定義取得部（１０２）と、定義取得部（１０２）により取得されるインデックス定義情報（１０５）に基づいて、データ取得部（１０１）により取得される複数の属性値をビット単位で配置することによりインデックスキーを生成するビット処理部（１０３）と、を有する。
2014109109.tif 000002
【特許請求の範囲】
【請求項１】
インデックス対象の複数の属性に関する複数の属性値を取得するデータ取得部と、
インデックス対象の各属性について、該属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報を取得する定義取得部と、
前記定義取得部により取得されるインデックス定義情報に基づいて、前記データ取得部により取得される複数の属性値をビット単位で配置することによりインデックスキーを生成するビット処理部と、
を備えるインデックスキー生成装置。
【請求項２】
前記インデックス定義情報は、インデックス対象の各属性について、インデックスキーと同じビット長のビット列における、該属性の各ビットが配置されるビット位置がマスクされたスキャッタマスクをそれぞれ含み、
前記ビット処理部は、前記データ取得部により取得される各属性値に対して、該属性値の属性に対応するスキャッタマスクを用いたスキャッタ演算をそれぞれ適用し、該スキャッタ演算で得られた該属性毎のビット列をＯＲ演算で集約することにより前記インデックスキーを生成する、
請求項１に記載のインデックスキー生成装置。
【請求項３】
前記定義取得部は、インデックス対象の属性の各組み合わせに対応する複数のインデックス定義情報の中から、前記データ取得部により取得される複数の属性値の属性の組み合わせに対応するインデックス定義情報を選択的に取得する、
請求項１又は２に記載のインデックスキー生成装置。
【請求項４】
前記複数のインデックス定義情報は、インデックス対象の各属性についてそれぞれ示されるインデックスキー中のビット配置がインデックス定義情報間で異なる少なくとも２つのインデックス定義情報を含む、
請求項３に記載のインデックスキー生成装置。
【請求項５】
インデックス対象の少なくとも１つの属性について該属性の各ビットのインデックスキー中の配置を示す設定データを取得し、該設定データの内容を前記インデックス定義情報に反映する定義設定部、
を更に備える請求項１から４のいずれか１項に記載のインデックスキー生成装置。
【請求項６】
前記インデックス定義情報により示されるインデックス対象の各属性についてのインデックスキー中のビット配置に基づいて、該インデックス定義情報の妥当性を検査する定義検査部、
を更に備える請求項１から５のいずれか１項に記載のインデックスキー生成装置。
【請求項７】
前記インデックス定義情報は、前記各属性のビット列の並び順をそれぞれ維持し、かつ、前記各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むことを示す、
請求項１から６のいずれか１項に記載のインデックスキー生成装置。
【請求項８】
インデックス対象の複数の属性に関する複数の属性値を取得するデータ取得部と、
前記データ取得部により取得される複数の属性に関する複数の属性値を、ビット単位で配置することによりインデックスキーを生成するビット処理部と、
を備え、
前記ビット処理部は、
前記各属性のビット列の並び順がそれぞれ維持され、かつ、
前記複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、
前記各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むように、
前記複数の属性値をビット単位で配置する、
インデックスキー生成装置。
【請求項９】
請求項１から８のいずれか１項に記載のインデックスキー生成装置で生成されるインデックスキーがソートされたインデックスを用いる検索装置において、
検索対象の複数の属性に基づく検索範囲が指定されたクエリデータを取得するクエリ取得部と、
前記クエリ取得部により取得されるクエリデータにより指定される複数の属性に対応する前記インデックス定義情報を取得する定義取得部と、
前記定義取得部により取得されるインデックス定義情報に基づいて、前記クエリデータにより指定される検索範囲を示す、前記クエリデータにより指定される複数の属性に対応する検索キーを生成する検索キー生成部と、
を備える検索装置。
【請求項１０】
インデックス対象の複数の属性に関する複数の属性値を取得し、
インデックス対象の各属性について、該属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報を取得し、
前記取得されたインデックス定義情報に基づいて、前記取得された複数の属性値をビット単位で配置することによりインデックスキーを生成する、
ことを含むインデックスキー生成方法。
【請求項１１】
前記インデックス定義情報は、インデックス対象の各属性について、インデックスキーと同じビット長のビット列における、該属性の各ビットが配置されるビット位置がマスクされたスキャッタマスクをそれぞれ含み、
前記インデックスキーの生成は、
前記取得された各属性値に対して、該属性値の属性に対応するスキャッタマスクを用いたスキャッタ演算をそれぞれ適用し、該スキャッタ演算で得られた該属性毎のビット列をＯＲ演算で集約することにより前記インデックスキーを生成する、
請求項１０に記載のインデックスキー生成方法。
【請求項１２】
前記インデックス定義情報の取得は、インデックス対象の属性の各組み合わせに対応する複数のインデックス定義情報の中から、前記データ取得部により取得される複数の属性値の属性の組み合わせに対応するインデックス定義情報を選択的に取得する、
請求項１０又は１１に記載のインデックスキー生成方法。
【請求項１３】
前記複数のインデックス定義情報は、インデックス対象の各属性についてそれぞれ示されるインデックスキー中のビット配置がインデックス定義情報間で異なる少なくとも２つのインデックス定義情報を含む、
請求項１２に記載のインデックスキー生成方法。
【請求項１４】
インデックス対象の少なくとも１つの属性について該属性の各ビットのインデックスキー中の配置を示す設定データを取得し、
前記設定データの内容を前記インデックス定義情報に反映する、
ことを更に含む請求項１０から１３のいずれか１項に記載のインデックスキー生成方法。
【請求項１５】
前記インデックス定義情報により示されるインデックス対象の各属性についてのインデックスキー中のビット配置に基づいて、該インデックス定義情報の妥当性を検査する、
ことを更に含む請求項１０から１４のいずれか１項に記載のインデックスキー生成方法。
【請求項１６】
前記インデックス定義情報は、前記各属性のビット列の並び順をそれぞれ維持し、かつ、前記各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むことを示す、
請求項１０から１５のいずれか１項に記載のインデックスキー生成方法。
【請求項１７】
インデックス対象の複数の属性に関する複数の属性値を取得し、
前記取得された複数の属性に関する複数の属性値をビット単位で配置することによりインデックスキーを生成する、
ことを含み、
前記インデックスキーの生成は、前記各属性のビット列の並び順がそれぞれ維持され、かつ、前記複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、前記各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むように、前記複数の属性値をビット単位で配置する、
インデックスキー生成方法。
【請求項１８】
請求項１０から１７のいずれか１項に記載のインデックスキー生成方法により生成されたインデックスキーがソートされたインデックスを用いる検索方法において、
検索対象の複数の属性に基づく検索範囲が指定されたクエリデータを取得し、
前記取得されたクエリデータにより指定される複数の属性に対応する前記インデックス定義情報を取得し、
前記取得されたインデックス定義情報に基づいて、前記クエリデータにより指定される検索範囲を示す、前記クエリデータにより指定される複数の属性に対応する検索キーを生成する、
ことを更に含む検索方法。
【請求項１９】
請求項１０から１７のいずれか１項に記載のインデックスキー生成方法を少なくとも１つのコンピュータに実行させるプログラム。
【請求項２０】
請求項１８に記載の検索方法を少なくとも１つのコンピュータに実行させるプログラム。
【請求項２１】
複数の属性に関する複数の属性値がビット単位で配置されることにより形成されるインデックスキーのデータ構造において、
前記インデックスキーは、
前記各属性のビット列の並び順をそれぞれ維持し、かつ、前記複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、前記各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含み、
コンピュータが、
前記インデックスキーがソートされることで形成されるインデックスの中から、クエリデータにより指定される検索対象の複数の属性に基づく検索範囲に適合するインデックスキー集合を特定するために参照する、
インデックスキーのデータ構造。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数次元インデックスキーの生成技術に関する。ここで、複数次元インデックスキーとは、インデックス対象となる複数の属性の値から生成されるインデックスキーを意味する。
【背景技術】
【０００２】
複数の属性に関する条件を指定したデータベース検索を高速化するために、これら属性に対してインデックスを生成することはよく行われている。複数の属性に対してインデックスを生成する方法として、以下の二つの技術が知られている。【０００３】
第１に、複合インデックスと呼ばれる方法が存在する（下記非特許文献１参照）。複合インデックスは、インデックスを生成したい複数の属性に対して優先順位を指定させ、その優先順位の順序でそれぞれの属性をソートして保持する。即ち、属性Ａの属性値のビット列が「Ａ１Ａ２Ａ３Ａ４」、属性Ｂの属性値のビット列が「Ｂ１Ｂ２Ｂ３Ｂ４」である場合、各属性値を区切り記号「｜」で連結したインデックスキー「Ａ１Ａ２Ａ３Ａ４｜Ｂ１Ｂ２Ｂ３Ｂ４」がソートされ、そのソート結果が保持される。複合インデックスは、各属性値を優先順位でソートするため、各属性の属性値のビット長が異なっていても生成することができる。また、各属性値が離散値である場合において、これら属性値の一致条件を指定した問い合わせ処理は効率化され得る。【０００４】
第２に、ＵＢ−Ｔｒｅｅと呼ばれる方法が存在する（下記非特許文献２参照）。ＵＢ−Ｔｒｅｅは、インデックスを生成したい複数の属性に対して、各属性値をビットごとに交互に混ぜ合わせたインデックスキーを生成し、ソートされた当該インデックスキーを保持する。即ち、属性Ａの属性値のビット列が「Ａ１Ａ２Ａ３Ａ４」、属性Ｂの属性値のビット列が「Ｂ１Ｂ２Ｂ３Ｂ４」である場合、各属性値をビットごとに交互に混ぜ合わせることで、インデックスキー「Ａ１Ｂ１Ａ２Ｂ２Ａ３Ｂ３Ａ４Ｂ４」を生成し、このインデックスキーをソートした結果がインデックスとして保持される。ＵＢ−Ｔｒｅｅによれば、ビット単位で各属性値が交互に混ぜ合わされるため、各属性について比較的連続性が保たれ易くなり、その結果、範囲検索の効率が上述の複合インデックスより高い傾向にある。ＵＢ−Ｔｒｅｅで用いられるインデックスキーの生成手法は、ビットインタリービング、Ｚオーダリング等とも呼ばれる。以降、各属性値をビットごとに交互に混ぜ合わせることでインデックスキーを生成する手法を代表的にビットインタリービングと表記する。【０００５】
ＵＢ−Ｔｒｅｅは、各属性値をビットごとに交互に混ぜ合わせるため、各属性値のビット長が一致していることを前提とする。データ間のビット長を合せるために、ゼロパディングがよく用いられる。しかし、ゼロパディングは、インデックスキーのサイズを増大させる原因となる。【０００６】
そこで、非特許文献２の提案手法は、ビットの混ぜ合わせ順序を属性値のビット長の長い順に限定し、或る属性値のビット長を超えたら、その属性をスキップすることでインデックスキーを生成する。即ち、この提案手法は、各属性値のビット列を左詰めで交互に混ぜ合わせることでインデックスキーを生成するというように、生成方法を制限することで各属性値のビット長の違いを解消している。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Sam Lightstone, Toby Teorey, Tom Nadeau、 "Physical Database Design: the database professional's guide to exploiting indexes, view, storage, and more"、lines 22-24, page 21， page 22, Figures 2 and 3、 2006年
【非特許文献２】Vorker Markl、 "MISTRAL: Processing Relational Queries using a Multidimensional Access Technique"、 page 103(Algorithm 5-1)、 1999年7月25日
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上述の複合インデックス及びビットインタリービングは、ビット列どうしを連結するだけ、規則的にビットを交互に混ぜ合わせるだけの、単純な方法で、複数の属性により示される複数次元空間をインデックスキーの一次元空間に変換する。即ち、これら手法は、インデックスキーの生成パターンをかなり限定してしまっていた。これにより、範囲検索の指定内容やインデックス対象のデータの分布によっては、範囲検索処理の効率が低下してしまう可能性があった。【０００９】
例えば、上述の複合インデックスを用いる場合、連続値を持つ各属性が指定された範囲検索処理の効率が低下し易い。優先順位が高い属性についてはインデックスキーが連続して配置されるが、優先順位が低い属性についてはインデックスキーがとびとびに配置されるからである。【００１０】
また、上述のビットインタリービングを用いる場合、属性毎の検索範囲の幅が大きく異なる又はそれぞれ独立して指定された範囲検索処理の効率が低下し易い。これは、ビットインタリービングが、緯度及び経度で示される位置情報の範囲指定のように、各属性の検索範囲の幅が略同じになるように指定された範囲検索を前提とした技術であるからと言える。例えば、位置情報の範囲指定は、一キロ四方、或る地点から１０キロの範囲等のように指定されることが多い。【００１１】
本発明は、このような事情に鑑みてなされたものであり、どのような検索環境においても高い検索効率を実現する複数次元インデックスキーの生成技術を提供することにある。ここで、検索環境とは、検索に関連する事象全般を意味し、例えば、検索対象となる複数の属性の値分布や、その検索対象となる複数の属性に対する検索特性（検索状況）等を含む。
【課題を解決するための手段】
【００１２】
本発明の各側面では、上述した課題を解決するために、それぞれ以下の構成を採用する。【００１３】
第１の側面は、インデックスキー生成装置に関する。第１の側面に係るインデックスキー生成装置は、インデックス対象の複数の属性に関する複数の属性値を取得するデータ取得部と、インデックス対象の各属性について、その属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報を取得する定義取得部と、定義取得部により取得されるインデックス定義情報に基づいて、データ取得部により取得される複数の属性値をビット単位で配置することによりインデックスキーを生成するビット処理部と、を有する。【００１４】
第２の側面は、インデックスキー生成装置に関する。第２の側面に係るインデックスキー生成装置は、インデックス対象の複数の属性に関する複数の属性値を取得するデータ取得部と、データ取得部により取得される複数の属性に関する複数の属性値をビット単位で配置することによりインデックスキーを生成するビット処理部と、を有し、ビット処理部は、各属性のビット列の並び順がそれぞれ維持され、かつ、複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むように、複数の属性値をビット単位で配置する。【００１５】
第３の側面は、インデックスキー生成方法に関する。第３の側面に係るインデックスキー生成方法は、インデックス対象の複数の属性に関する複数の属性値を取得し、インデックス対象の各属性について、その属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報を取得し、取得されたインデックス定義情報に基づいて、上記取得された複数の属性値をビット単位で配置することによりインデックスキーを生成する、ことを含む。【００１６】
第４の側面は、インデックスキー生成方法に関する。第４の側面に係るインデックスキー生成方法は、インデックス対象の複数の属性に関する複数の属性値を取得し、取得された複数の属性に関する複数の属性値をビット単位で配置することによりインデックスキーを生成する、ことを含み、そのインデックスキーの生成は、各属性のビット列の並び順がそれぞれ維持され、かつ、複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むように、複数の属性値をビット単位で配置する。【００１７】
第５の側面は、複数の属性に関する複数の属性値がビット単位で配置されることにより形成されるインデックスキーのデータ構造に関する。第５の側面に係るインデックスキーのデータ構造において、当該インデックスキーは、各属性のビット列の並び順をそれぞれ維持し、かつ、複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含み、コンピュータが、当該インデックスキーがソートされることで形成されるインデックスの中から、クエリデータにより指定される検索対象の複数の属性に基づく検索範囲に適合するインデックスキー集合を特定するために参照する。【００１８】
なお、本発明の他の側面としては、上記第３の側面の方法又は上記第４の側面の方法を少なくとも１つのコンピュータに実行させるプログラムであってもよいし、このようなプログラムを記録したコンピュータが読み取り可能な記録媒体であってもよい。この記録媒体は、非一時的な有形の媒体を含む。また、上記各側面の装置又は方法により生成されたインデックスキーがソートされたインデックスを用いる検索方法であってもよい。
【発明の効果】
【００１９】
上記各側面によれば、どのような検索環境においても高い検索効率を実現する複数次元インデックスキーの生成技術を提供することができる。
【図面の簡単な説明】
【００２０】
上述した目的、およびその他の目的、特徴および利点は、以下に述べる好適な実施の形態、およびそれに付随する以下の図面によってさらに明らかになる。【００２１】
【図１】本発明の実施の形態に係るインデックスキー生成装置の構成例を概念的に示す図である。
【図２】インデックスキーの生成例を示す図である。
【図３】他の実施形態に係るインデックスキー生成装置の構成例を概念的に示す図である。
【図４Ａ】他の実施形態に係るインデックスキーの生成例を示す図である。
【図４Ｂ】他の実施形態に係るインデックスキーの生成例を示す図である。
【図４Ｃ】他の実施形態に係るインデックスキーの生成例を示す図である。
【図４Ｄ】他の実施形態に係るインデックスキーの生成例を示す図である。
【図４Ｅ】他の実施形態に係るインデックスキーの生成例を示す図である。
【図４Ｆ】他の実施形態に係るインデックスキーの生成例を示す図である。
【図５】第１実施形態における検索装置のハードウェア構成例を概念的に示す図である。
【図６】第１実施形態における検索装置の処理構成例を概念的に示す図である。
【図７】第１実施形態におけるインデックスキーの生成過程を概念的に示す図である。
【図８】インデックスキー生成処理に関する第１実施形態における検索装置の動作例を示すフローチャートである。
【図９】検索処理に関する第１実施形態における検索装置の動作例を示すフローチャートである。
【図１０】第２実施形態における検索装置の処理構成例を概念的に示す図である。
【図１１】インデックスキー生成処理に関する第２実施形態における検索装置の動作例を示すフローチャートである。
【発明を実施するための形態】
【００２２】
以下、本発明の実施の形態について説明する。なお、以下に挙げる実施形態は例示であり、本発明は以下の実施形態の構成に限定されない。
【００２３】
図１は、本発明の実施の形態に係るインデックスキー生成装置１００の構成例を概念的に示す図である。図１に示されるように、インデックスキー生成装置１００は、インデックス対象の複数の属性に関する複数の属性値を取得するデータ取得部１０１と、インデックス対象の各属性について、その属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報１０５を取得する定義取得部１０２と、定義取得部１０２により取得されるインデックス定義情報１０５に基づいて、データ取得部１０１により取得される複数の属性値をビット単位で配置することによりインデックスキーを生成するビット処理部１０３と、を有する。
【００２４】
インデックスキー生成装置１００は、例えば、後述する詳細実施形態における検索装置１と同様のハードウェア構成を有し、その検索装置１と同様にプログラムが処理されることで、上述の各処理部が実現される。
【００２５】
また、本発明の実施の形態に係るインデックスキー生成方法は、インデックス対象の複数の属性に関する複数の属性値を取得し、インデックス対象の各属性について、その属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報を取得し、取得されたインデックス定義情報に基づいて、上記取得された複数の属性値をビット単位で配置することによりインデックスキーを生成する、ことを含む。但し、本インデックスキー生成方法に含まれる各工程は、順不同に逐次的に実行されてもよいし、同時に実行されてもよい。本インデックスキー生成方法は、上述のインデックスキー生成装置１００のような少なくとも１つのコンピュータにより実行される。
【００２６】
このように、本実施形態では、インデックス対象の各属性について、その属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報１０５が取得され、このインデックス定義情報１０５に基づいて、各属性の各ビットが配置される。これにより、データ取得部１０１により取得されたインデックス対象の複数の属性に関する複数の属性値に対応する複数次元インデックスキーが生成される。
【００２７】
上述のように、既存の２つのインデックスキー生成方法がインデックスキーの生成パターンをかなり限定しているため、各方法には範囲検索の効率を低下させる検索環境がそれぞれ存在する。更に、その２つの方法だけでは、インデックス対象となる属性の数が増加すると、インデックス空間の中の検索範囲に対応する検索空間がより広がるため、検索効率が低下してしまう。これは、インデックスキー内の検索範囲に対応するビット幅に、検索範囲に影響を与えないビットが含まれる可能性が増えるからである。
【００２８】
このような知見に基づいて、本発明者は、既存の２つの方法のみでなく、各検索環境により適合したインデックスキーの生成パターンが更に存在し得ることを見出した。
【００２９】
データレコードをインデックスキーに従って整列する場合、インデックスキーは、インデックスされた属性の組み合わせどうしの近さの指標となる。即ち、インデックスキーが整列された順序上で近いレコードは、記憶媒体上でも近くに配置されやすくなる。一方、範囲検索は、属性値が指定された範囲内にあるレコードを取得する操作である。このため、取得するレコード群が記憶媒体上で塊になって配置されていると、それらを一括で取得することができるため、範囲検索の性能が向上する。
【００３０】
本発明者は、範囲検索により抽出されるレコードの属性値のビットパターンに着目した。当該抽出されたレコードの属性値をソートした属性値列は、その検索範囲内での連続値になるため、各属性値の上位ビットのパターンは略同じで、下位ビットのパターンが異なっていることが期待される。このことから、連続値や、連続的な意味合いを持つ離散値を取る属性から生成されるインデックスキーの範囲検索は、インデックスキーの下位数ビットの幅の変化を参照していることと等価であると捉えることができる。本発明者は、各属性のビット列におけるその属性の検索範囲の幅に相当するビット長分の下位ビットをインデックスキーの中でできる限り下位ビット側（右側）に配置することで、記憶媒体上で当該検索範囲に対応するインデックスキーどうしが近くに配置され易くなり、検索性能を向上させることができると考えた。
【００３１】
図２は、インデックスキーの生成例を示す図である。図２は、「性別」及び「年齢」がインデックス対象の属性に設定されており、属性「年齢」の「２０代及び３０代」が検索範囲として指定される頻度が高い場合の例を示す。この場合、属性「年齢」における「２０代及び３０代」の検索範囲は、属性「年齢」の下位６ビットに対応する。そこで、例えば、属性「年齢」の下位６ビットをインデックスキー中の下位ビット側に配置させ、その上位ビットに属性「性別」の１ビットを配置し、属性「年齢」の残り２ビットをインデックスキー中の残りのビット位置に配置する。これにより、「男性」かつ「２０代及び３０代」に対応するインデックスキー列と、「女性」かつ「２０代及び３０代」に対応するインデックスキー列とが連続で並ぶため、検索効率が向上し易い。一方、図２の例において複合インデックスの方法でインデックスキーを生成した場合、「男性」かつ「全年齢」及び「女性」かつ「全年齢」といった順でインデックスキー列が並ぶため、「全性別」の「２０代及び３０代」の検索範囲に対応するインデックスキー空間の範囲は、図２の例に比べて拡がり、検索効率が低下し易くなる。
【００３２】
このように、検索効率を向上させ得るインデックスキー内でのビット配置は、検索対象となる複数の属性の値分布や、その検索対象となる複数の属性に対する検索特性（検索状況）等のような検索環境によって変わってくる。そこで、本発明者は、検索環境に適合したインデックスキーの生成パターンを用いること、即ち、インデックスキーのデザイン手法の自由度を上げることが、検索効率の向上に繋がるとの着想を得た。
【００３３】
そこで、本実施形態では、インデックス対象の各属性のインデックスキー中のビット配置を自由に設定可能なインデックス定義情報１０５が用いられ、このインデックス定義情報１０５の設定内容に応じて各属性値がビット単位で配置されたインデックスキーが生成される。これにより、各属性の各ビットのインデックスキー中における位置を細やかに調整できるため、本実施形態によれば、性能を向上させたい範囲検索に合わせたインデックスキーを生成することができる。即ち、本実施形態によれば、検索環境に適合するインデックスキーのデザイン手法を自由に用いることができ、ひいては、検索効率を向上させることができる。特に、本実施形態は、多次元範囲検索で、属性ごとに典型的な検索範囲の幅を持っている場合、より効果を発揮する。
【００３４】
上述の本実施形態は、上述のような技術的思想の下、次のように変形させることもできる。図３は、他の実施形態に係るインデックスキー生成装置１００の構成例を概念的に示す図である。他の実施形態に係るインデックスキー生成装置１００は、上述の形態と、定義取得部１０２を持たない点において相違する。図３の例では、ビット処理部１０３は、インデックスキーを生成するにあたり、各属性のビット列の並び順をそれぞれ維持し、かつ、複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むように、データ取得部１０１により取得される複数の属性に関する複数の属性値をビット単位で配置する。
【００３５】
また、他の実施形態に係るインデックスキー生成方法は、インデックス対象の複数の属性に関する複数の属性値を取得し、各属性のビット列の並び順をそれぞれ維持し、かつ、複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むように、当該取得された複数の属性に関する複数の属性値をビット単位で配置することによりインデックスキーを生成することを含む。
【００３６】
図４Ａ及び図４Ｂは、他の実施形態に係るインデックスキーの生成例を示す図である。図４Ａの例で生成されるインデックスキーは、第１ビット列「Ａ１Ｂ１Ａ２」及び第１ビット列「Ａ３Ｂ５Ａ４」が、第２ビット列「Ｂ２Ｂ３Ｂ４」を挟むビット配置を持つ。図４Ｂの例で生成されるインデックスキーは、第２ビット列「Ａ１Ａ２」及び第２ビット列「Ｂ２Ｂ３」が、第１ビット列「Ｂ１Ａ３」を挟む。
【００３７】
また、他の実施形態に係るインデックスキーの生成方法は、インデックス対象の複数の属性に関する複数の属性値を取得し、各属性のビット列の並び順をそれぞれ維持し、かつ、複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、インデックスキー上に配置する順番で各属性のｉ桁目のビット値をそれぞれ並べた複数のビット列の中に、２以上の属性を含みかつ異なる属性構成を持つビット列が２つ以上含まれるように、当該取得された複数の属性に関する複数の属性値をビット単位で配置することによりインデックスキーを生成することを含む。ここで、異なる属性構成を持つビット列とは、含まれる属性の数が異なるビット列、又は、同数の属性が異なる順序で並ぶビット列を示す。
【００３８】
図４Ｃ、図４Ｄ及び図４Ｅは、他の実施形態に係るインデックスキーの生成例を示す図である。上述のインデックスキー生成方法によれば、図４Ｃ、図４Ｄ及び図４Ｅに示されるようなビット配置を持つインデックスキーを生成することができる。図４Ｃでは、各属性のｉ桁目のビット値をそれぞれ並べた複数のビット列は、「Ａ１Ｂ１」、「Ｂ２Ａ２」、「Ｂ３」及び「Ｂ４」であり、２以上の属性を含みかつ異なる属性構成を持つビット列「Ａ１Ｂ１」及び「Ｂ２Ａ２」が存在する。図４Ｄでは、当該複数のビット列は、「Ａ１Ｂ１Ｃ１」、「Ａ２Ｃ２Ｂ２」及び「Ａ３Ｂ３Ｃ３」であり、２以上の属性を含みかつ異なる属性構成を持つビット列「Ａ１Ｂ１Ｃ１」及び「Ａ２Ｃ２Ｂ２」が存在する。図４Ｅでは、当該複数のビット列は、「Ａ１Ｂ１Ｃ１」、「Ａ２Ｂ２Ｃ２」、「Ａ３Ｂ３」及び「Ａ４Ｂ４」であり、２以上の属性を含みかつ異なる属性構成を持つビット列「Ａ１Ｂ１Ｃ１」及び「Ａ３Ｂ３」が存在する。
【００３９】
また、他の実施形態に係るインデックスキーの生成方法によれば、例えば図４Ｆに示されるようなビット配置を持つインデックスキーを生成することもできる。図４Ｆは、他の実施形態に係るインデックスキーの生成例を示す図である。
【００４０】
更に、他の実施形態に係るインデックスキーの生成方法によれば、属性Ａの属性値のビット列が「Ａ１Ａ２」、属性Ｂの属性値のビット列が「Ｂ１Ｂ２Ｂ３Ｂ４」である場合、インデックスキーを「Ａ１Ｂ１Ａ２Ｂ２Ｂ３Ｂ４」、「Ｂ１Ａ１Ｂ２Ａ２Ｂ３Ｂ４」、「Ｂ１Ｂ２Ａ１Ｂ３Ａ２Ｂ４」または「Ｂ１Ｂ２Ｂ３Ａ１Ｂ４Ａ２」のように生成することもできる。
【００４１】
このように、当該他の実施形態では、複合インデックス及びビットインタリーブの各手法とは異なるインデックスキー生成手法が用いられる。この用法で生成されたインデックスキーが用いられれば、複合インデックス及びビットインタリーブの各手法で生成されたインデックスキーでは検索効率を向上させることができない検索環境において、検索効率を向上させることができる可能性が増す。
【００４２】
以下、上述の実施形態について更に詳細を説明する。以下には、詳細実施形態として、第１実施形態及び第２実施形態を例示する。以下の各実施形態は、上述のインデックスキー生成装置及びインデックスキー生成方法を検索装置に適用した場合の例である。なお、検索装置で扱われるデータ自体は制限されない。
【００４３】
［第１実施形態］
〔装置構成〕
図５は、第１実施形態における検索装置１のハードウェア構成例を概念的に示す図である。第１実施形態における検索装置１は、図５に示されるように、ハードウェア構成として、相互にバス１５により接続される、ＣＰＵ（Central Processing Unit）１０、メモリ１１、入出力インタフェース（Ｉ／Ｆ）１２、通信装置１３等を有する。メモリ１１は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、ハードディスク、可搬型記憶（記録）媒体等である。入出力Ｉ／Ｆ１２は、キーボード、マウス等のようなユーザ操作の入力を受け付ける入力装置（図示せず）、表示装置やプリンタ等のようなユーザに情報を提供する出力装置（図示せず）などと接続可能である。通信装置１３は、他のノードと通信を行う。なお、検索装置１は、入力装置や出力装置を持たなくてもよく、検索装置１のハードウェア構成は制限されない。
【００４４】
検索装置１は、上述の実施形態で示されるように、インデックス対象の複数の属性に関する複数の属性値を取得し、それら属性値に対応する複数次元インデックスキーを生成する。また、検索装置１は、クエリデータを取得し、上述のように生成されたインデックスキーがソートされたインデックスを用いて、クエリデータで示される検索範囲に対応するデータを検索する。検索装置１の一部が上述のインデックスキー生成装置１００に相当する。
【００４５】
〔処理構成〕
図６は、第１実施形態における検索装置１の処理構成例を概念的に示す図である。第１実施形態における検索装置１は、データ取得部２０、定義取得部２１、インデックスキー生成部２２、インデックス定義格納部２６、検索部３０、データベース３５等を有する。インデックスキー生成部２２は、上述のビット処理部に相当する。これら各処理部は、例えば、ＣＰＵ１０によりメモリ１１に格納されるプログラムが実行されることにより実現される。また、当該プログラムは、例えば、ＣＤ（Compact Disc）、メモリカード等のような可搬型記録媒体やネットワーク上の他のコンピュータから入出力Ｉ／Ｆ１２を介してインストールされ、メモリ１１に格納されてもよい。
【００４６】
データ取得部２０は、インデックス対象の複数の属性に関する複数の属性値を取得する。インデックス対象の複数の属性に関する複数の属性値は、データベース３５から取得されてもよいし、入力画面等に基づいて入力装置をユーザが操作することにより入力されてもよいし、可搬型記録媒体、他のコンピュータ等から入出力Ｉ／Ｆ１２又は通信装置１３を経由して取得されてもよい。また、データ取得部２０は、１つのデータレコードを取得し、このデータレコードの中から、インデックス対象となる複数の属性に関する複数の属性値を取得するようにしてもよい。この場合、データ取得部２０は、当該データレコードのスキーマ情報を取得し、このスキーマ情報に基づいて、データレコードを形成する複数の属性の中から、インデックス対象となる属性を特定するようにしてもよい。
【００４７】
インデックス定義格納部２６は、上述したインデックス定義情報１０５を格納する。本実施形態では、インデックス定義情報１０５は、インデックス対象の各属性について、インデックスキーと同じビット長のビット列における、その属性の各ビットが配置されるビット位置がマスクされたスキャッタマスクをそれぞれ含む。インデックス定義情報１０５は、インデックス対象の各属性に対応するスキャッタマスクをそれぞれ特定し得る情報を含む。例えば、インデックス定義情報１０５は、属性ＩＤとスキャッタマスクとの対応関係を含んでもよい。スキャッタマスクは、インデックス定義情報１０５の好ましい実現形態である。但し、本実施形態は、インデックス対象の各属性について、その属性の各ビットの、インデックスキー中の配置をそれぞれ示す情報であれば、インデックス定義情報１０５の実現形態をスキャッタマスクのみに限定しない。
【００４８】
本実施形態では、インデックス定義情報１０５に含まれるスキャッタマスクのセットがそれぞれ示すインデックスキーの生成パターン自体は、検索環境に適合するように設定されていれば、特に制限されない。よって、インデックス定義格納部２６は、図４Ａ及び図４Ｂに例示されたインデックスキーの生成パターンを示すインデックス定義情報１０５を格納していてもよい。具体的には、そのインデックス定義情報１０５は、各属性のビット列の並び順をそれぞれ維持し、かつ、各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むことを示す。また、インデックスキー及びスキャッタマスクのビット長に関しても、インデックス対象の各属性のデータサイズに対応するビット長の合計以上であれば、特に制限されない。
【００４９】
インデックス定義格納部２６は、インデックス対象の属性の各組み合わせに対応する複数のインデックス定義情報１０５を格納していてもよい。この場合、インデックス定義格納部２６に格納される複数のインデックス定義情報は、インデックス対象の各属性についてそれぞれ示されるインデックスキー中のビット配置がインデックス定義情報間で異なる少なくとも２つのインデックス定義情報を含んでいてもよい。即ち、当該複数のインデックス定義情報には、インデックス対象となる属性の組み合わせ毎に、異なるインデックスキーの生成パターンが設定されていてもよい。
【００５０】
定義取得部２１は、データ取得部２０により取得される複数の属性値の属性の組み合わせに対応するインデックス定義情報１０５をインデックス定義格納部２６から取得する。インデックス定義格納部２６が複数のインデックス定義情報１０５を格納する場合、定義取得部２１は、インデックス定義格納部２６に格納される複数のインデックス定義情報１０５の中から、データ取得部２０により取得される複数の属性値の属性の組み合わせに対応するインデックス定義情報１０５を選択的に取得する。定義取得部２１により取得されるインデックス定義情報１０５は、スキャッタマスクセットと表記される場合もある。
【００５１】
インデックスキー生成部２２は、定義取得部２１により取得されたスキャッタマスクセットに基づいて、データ取得部２０により取得された複数の属性値をビット単位で配置することによりインデックスキーを生成する。生成されたインデックスキーは、データベース３５に格納される。インデックスキー生成部２２は、図６に示されるように、スキャッタ演算部２３及びＯＲ演算部２４を有し、これら処理部を動作させることで、上述のようにインデックスキーを生成する。
【００５２】
スキャッタ演算部２３は、データ取得部２０により取得された各属性値に対して、属性値の属性に対応するスキャッタマスクを用いたスキャッタ演算をそれぞれ適用する。
ＯＲ演算部２４は、スキャッタ演算部２３によるスキャッタ演算で得られた属性毎のビット列をＯＲ演算で集約する。集約されたビット列がインデックスキーである。
【００５３】
図７は、第１実施形態におけるインデックスキーの生成過程を概念的に示す図である。図７の例では、符号Ｓ０が属性０のスキャッタマスクを示し、符号ＳＮが属性Ｎのスキャッタマスクを示す。各スキャッタマスクでは、対応する属性の各ビットが配置されるビット位置に「１」がセットされている。なお、図７では、図面スペースの関係により示されていないが、各スキャッタマスクの「１」以外の箇所には「０」が設定される。
スキャッタ演算部２３は、各属性の各ビットを、その属性に対応するスキャッタマスクの「１」が設定されているビット位置のうち、その属性のビットの並び順から特定されるビット位置に配置する。ＯＲ演算部２４は、各属性のビット列に対するスキャッタ演算により得られる各ビット列をＯＲ演算することで、インデックスキーを生成する。
【００５４】
データベース３５は、インデックス対象となる複数の属性に関する複数の属性値を含むデータ群、インデックスキー生成部２２により生成されたインデックスキーがソートされることで形成されるインデックスを格納する。本実施形態で生成される各インデックスキーでは、各属性のビット列におけるその属性の検索範囲の幅に相当するビット長分の下位ビットがインデックスキーの中でできる限り下位ビット側（右側）に配置される。これにより、当該インデックスでは、記憶媒体上で当該検索範囲に対応するインデックスキーどうしが近くに配置される。データベース３５は、メモリ１１に含まれるハードディスク等のような外部メモリ上に実現される。
【００５５】
検索部３０は、インデックスキー生成部２２により生成されたインデックスキーがソートされることで形成されるインデックスの中から、後述の検索キーに適合するインデックスキー集合を特定し、データベース３５から、この特定されたインデックスキー集合に対応するデータレコードを抽出する。週出されたデータレコードは、入出力Ｉ／Ｆ１２を介して表示装置や印刷装置に出力されてもよいし、入出力Ｉ／Ｆ１２を介して可搬型記録媒体に格納されてもよいし、通信装置１３を介して他のコンピュータに送信されてもよい。
【００５６】
検索部３０は、図６に示されるように、クエリ取得部３１、定義取得部３２及び検索キー生成部３３を含む。
【００５７】
クエリ取得部３１は、検索対象の複数の属性に基づく検索範囲が指定されたクエリデータを取得する。クエリデータは、入力画面等に基づいて入力装置をユーザが操作することにより入力された情報であってもよいし、可搬型記録媒体、他のコンピュータ等から入出力Ｉ／Ｆ１２又は通信装置１３を経由して取得された情報であってもよい。
【００５８】
定義取得部３２は、クエリ取得部３１により取得されたクエリデータにより指定される複数の属性に対応するインデックス定義情報１０５（スキャッタマスクセット）をインデックス定義格納部２６から取得する。
【００５９】
検索キー生成部３３は、定義取得部３２により取得されるインデックス定義情報１０５に基づいて、クエリデータにより指定される検索範囲を示す、クエリデータにより指定される複数の属性に対応する検索キーを生成する。生成される検索キーは、当該検索範囲を示す複数のインデックスキーである。検索キー生成部３３は、インデックスキー生成部２２と同様の手法により、当該検索範囲を示す複数のインデックスキーを生成する。例えば、検索キー生成部３３は、クエリデータから、当該検索範囲の下限を示す各属性値、及び、当該検索範囲の上限を示す各属性値をそれぞれ取得し、これら属性値を各属性に対応するスキャッタマスクに基づいてスキャッタ演算し、このスキャッタ演算で得られたビット列をＯＲ演算で集約することにより、当該検索範囲の下限に対応するインデックスキー及び当該検索範囲の上限に対応するインデックスキーを生成する。このように生成されたインデックスキーが検索キーである。
【００６０】
〔動作例〕
次に、第１実施形態におけるインデックスキー生成方法について図８を用いて説明する。以下の説明では、検索装置１が当該方法の実行主体となるが、検索装置１に含まれる上述の各処理部が実行主体となってもよい。
【００６１】
図８は、インデックスキー生成処理に関する第１実施形態における検索装置１の動作例を示すフローチャートである。検索装置１は、インデックス対象となる複数の属性に関する複数の属性値を取得する（Ｓ８０）。
【００６２】
続いて、検索装置１は、インデックス対象となる属性の組み合わせに対応するインデックス定義情報を取得する（Ｓ８１）。これにより、当該各属性についてのスキャッタマスクがそれぞれ取得される。
【００６３】
検索装置１は、（Ｓ８０）で取得された複数の属性値の中で未処理の属性値が存在しなくなるまで以下の処理を繰り返す（Ｓ８２）。
検索装置１は、（Ｓ８０）で取得された複数の属性値の中から未処理の１つの属性値を選択する（Ｓ８３）。検索装置１は、その選択された属性値の属性に対応するスキャッタマスクを用いて、その選択された属性値に対してスキャッタ演算を適用する（Ｓ８４）。
【００６４】
検索装置１は、（Ｓ８０）で取得された全ての属性値に対して処理が終わると（Ｓ８２；ＮＯ）、スキャッタされたビット列群をＯＲ演算することでインデックスキーを生成する（Ｓ８５）。
【００６５】
更に、第１実施形態における検索方法について図９を用いて説明する。以下の説明では、検索装置１が当該方法の実行主体となるが、検索装置１に含まれる上述の各処理部が実行主体となってもよい。
【００６６】
図９は、検索処理に関する第１実施形態における検索装置１の動作例を示すフローチャートである。検索装置１は、クエリデータを取得する（Ｓ９０）。クエリデータでは、検索対象の複数の属性に基づく検索範囲が指定されている。例えば、検索対象の複数の属性として「性別」及び「年齢」が指定されている場合、検索範囲としては、「男」かつ「２０歳以上４０歳未満」が指定される。
【００６７】
続いて、検索装置１は、クエリデータにより指定される複数の属性に対応するインデックス定義情報をインデックス定義格納部２６から取得する（Ｓ９１）。これにより、当該各属性についてのスキャッタマスクがそれぞれ取得される。
【００６８】
検索装置１は、（Ｓ９０）で取得されたクエリデータで指定される複数の属性値の中で未処理の属性が存在しなくなるまで以下の処理を繰り返す（Ｓ９２）。
検索装置１は、当該クエリデータで指定される複数の属性の中から未処理の１つの属性を選択する（Ｓ９３）。
【００６９】
検索装置１は、その選択された属性に対応するスキャッタマスクを用いて、その選択された属性の検索範囲を示す少なくとも１つの属性値に対してスキャッタ演算を適用する（Ｓ９４）。上記クエリデータの具体例によれば、属性「年齢」が選択された場合、検索装置１は、属性「年齢」の検索範囲を示す２つの属性値「２０歳」及び「４０歳」に対してスキャッタ演算を適用する。
【００７０】
検索装置１は、当該クエリデータで指定される全ての属性に対して処理が終わると（Ｓ９２；ＮＯ）、当該クエリデータで指定される属性の組み合わせ毎に、スキャッタされたビット列群をＯＲ演算することにより、検索キーを生成する（Ｓ９５）。上記具体例によれば、属性「性別」及び属性「年齢」の組み合わせに関し、属性値「男」に対するスキャッタ演算結果と、属性値「２０歳」に対応するスキャッタ演算結果とのＯＲ演算により１つの検索キーが生成される。更に、属性値「男」に対するスキャッタ演算結果と、属性値「４０歳」に対応するスキャッタ演算結果とのＯＲ演算により１つの検索キーが生成される。
【００７１】
検索装置１は、上述のインデックスキー生成方法で生成されたインデックスキーがソートされたインデックスの中から、生成された検索キーに適合するインデックスキー集合を特定し、この特定されたインデックスキー集合に対応するデータレコードをデータベース３５から抽出する（Ｓ９６）。本実施形態では、検索環境に適合するようにインデックスキーが生成されているため、（Ｓ９６）で特定されるインデックスキー集合は、記憶媒体上の連続した領域に配置されている可能性が高くなる。
【００７２】
〔第１実施形態の作用及び効果〕
上述したように第１実施形態では、インデックス定義情報１０５には、インデックス対象の複数の属性の各々に対応する複数のスキャッタマスクが含まれる。各スキャッタマスクは、インデックスキーと同じビット長のビット列であり、そのビット列において、対応する属性の各ビットが配置されるビット位置がマスクされている。第１実施形態では、各属性に対応する各スキャッタマスクに基づいて、各属性値がそれぞれスキャッタ演算され、スキャッタ演算で得られた各ビット列がＯＲ演算で集約されることで、インデックスキーが生成される。
【００７３】
従って、本実施形態によれば、インデックス定義情報１０５に含まれるスキャッタマスクセットを適切に設定すれば、検索環境に適合するインデックスキーを生成することができ、ひいては、検索効率を向上させることができる。
【００７４】
更に、本実施形態によれば、インデックス対象の属性の組み合わせ毎に、それぞれインデックス定義情報を持つことができるため、属性の各組み合わせに応じたインデックスキーの生成パターンを用いることができる。これにより、例えば、データベース３５内のテーブル毎に異なるインデックス生成パターンを用いることができるため、インデックスキーを検索環境に一層適合させることができ、検索効率を向上させやすくなる。
【００７５】
本実施形態によれば、スキャッタマスクというインデックス定義情報を用いることで、インデックスの生成パターンが一般化された。これにより、従来、全く別個の手法として用いられていた複合インデックス及びビットインタリービングの両方を１つのデータベース３５で使用することも可能となる。
【００７６】
また、本実施形態によれば、生成されるインデックスキーのビット長は、インデックス対象となる各属性のビット長の合計以上であればよく、属性間のビット長を無理に合わせる必要がないため、インデックスキーのサイズの増大を防ぐことができる。
【００７７】
更に、本実施形態によれば、インデックスキーの生成をスキャッタ演算及びＯＲ演算で実現しているため、インデックスキーの生成処理を高速化し易い。例えば、スキャッタ演算は、基本的なビット操作であるため、スキャッタ演算専用のハードウェアを持つＣＰＵが既に提供されていたり、スキャッタ演算に関する効率的なアルゴリズムが知られたりしている。また、本実施形態では、複数のビット列をまとめてビット操作する方法でインデックスキーが生成されるため、並列化がしやすく、ＳＩＭＤ（Single Instruction Multiple Data）命令を用いることもできる。
【００７８】
［第２実施形態］
第２実施形態における検索装置１は、更に、インデックス定義情報の外部からの設定、及び、インデックス定義情報の検査を可能とする。以下、第２実施形態における検索装置１について、第１実施形態と異なる内容を中心に説明し、第１実施形態と同様の内容については適宜省略する。
【００７９】
〔処理構成〕
図１０は、第２実施形態における検索装置１の処理構成例を概念的に示す図である。第２実施形態における検索装置１は、第１実施形態の処理部に加えて、更に、定義設定部４１及び定義検査部４２を有する。これら各処理部についても、他の処理部と同様に、ＣＰＵ１０によりメモリ１１に格納されるプログラムが実行されることにより実現される。
【００８０】
定義設定部４１は、インデックス対象の少なくとも１つの属性についてその属性の各ビットのインデックスキー中の配置を示す設定データを取得し、その取得された設定データの内容をインデックス定義格納部２６に格納する。設定データがインデックス定義格納部２６に既に格納されるインデックス定義情報を変更するためのデータである場合、定義設定部４１は、その設定データの内容をインデックス定義格納部２６に格納されるインデックス定義情報に反映する。
【００８１】
定義設定部４１は、設定データをデータベース３５の管理者等に入力させるための画面を検索装置１又は管理者端末に表示させ、その画面を介して管理者等により入力された設定データを取得するようにしてもよい。その画面は、例えば、管理者等に、各属性のビット列の、インデックスキー中のビット配置をそれぞれ指定させる画面である。例えば、インデックスキーの桁ごとに、どの属性のビットを割り当てるかの指定を受け付けるような画面であっても良い。また、設定データは、可搬型記録媒体、他のコンピュータ等から入出力Ｉ／Ｆ１２を経由して取得されてもよい。
【００８２】
定義設定部４１は、当該設定データを取得し、その設定データに基づいて各属性のスキャッタマスクをそれぞれ生成し、生成されたスキャッタマスクセットをインデックス定義格納部２６に格納する。定義設定部４１は、属性を特定し得る属性ＩＤと共にスキャッタマスクを取得し、その属性ＩＤ及びスキャッタマスクをインデックス定義格納部２６に格納するようにしてもよい。
【００８３】
定義検査部４２は、インデックス定義格納部２６に格納されるインデックス定義情報の妥当性を、当該インデックス定義情報により示されるインデックス対象の各属性についてのインデックスキー中のビット配置に基づいて、検査する。具体的には、定義検査部４２は、各属性の全ビットが、漏れなくインデックスキー中に配置されており、かつ、各属性の各ビットのインデックスキー中のビット位置が重複していないことを確認する。ここで、定義検査部４２により実行される当該検査のタイミングは、何ら制限されない。
【００８４】
例えば、インデックス定義情報がスキャッタマスクにより実現されている場合、定義検査部４２は、インデックス定義情報１０５に含まれる各属性のスキャッタマスクをＯＲ演算及びＡＮＤ演算することにより、全てのスキャッタマスクの妥当性を検査することができる。定義検査部４２は、ＯＲ演算の結果で１が設定されているビットの数をカウントし、カウントされたビット数と各属性のビット長の合計とが一致するか否かを確認する。定義検査部４２は、カウントされたビット数と各属性のビット長の合計とが一致し、かつ、ＡＮＤ演算の結果がゼロ（０）を示す場合、全てのスキャッタマスクが妥当と判断し、それ以外の場合、妥当でないスキャッタマスクが存在すると判断することができる。このようにインデックス定義情報がスキャッタマスクにより実現されている場合、定義検査部４２は、簡単なビット操作により、インデックス定義情報の妥当性を確認することができる。
【００８５】
〔動作例〕
次に、第２実施形態におけるインデックスキー生成方法について図１１を用いて説明する。図１１は、インデックスキー生成処理に関する第２実施形態における検索装置１の動作例を示すフローチャートである。第２実施形態では、（Ｓ１０１）、（Ｓ１０２）及び（Ｓ１０３）が追加されている点で、第１実施形態と異なる。
【００８６】
検索装置１は、インデックス対象となる属性の組み合わせに対応するインデックス定義情報を取得すると（Ｓ８１）、取得されたインデックス定義情報の妥当性を検査する（Ｓ１０１）。この妥当性の検査は、上述の定義検査部４２と同様であるため、ここでは説明を省略する。検索装置１は、インデックス定義情報が妥当である、即ち、全スキャッタマスクが妥当である場合（Ｓ１０２；ＹＥＳ）、第１実施形態と同様の手法によりインデックスキーを生成する。
【００８７】
一方、検索装置１は、インデックス定義情報が妥当でない、即ち、少なくとも１つのスキャッタマスクが妥当でない場合（Ｓ１０２；ＮＯ）、エラーを出力し（Ｓ１０３）、処理を終了する。ここで、本実施形態は、エラーの出力形態を制限しない。
【００８８】
〔第２実施形態の作用及び効果〕
上述のように、第２実施形態では、外部から設定データが取得され、その設定データの内容に基づいてインデックス定義情報が生成又は更新される。従って、本実施形態によれば、データベース３５の管理者等に、インデックスキーの生成パターンを設計し易くすることができる。また、本実施形態によれば、検索環境の把握状況等に応じてインデックスキーの生成パターンを調整（変更）したい場合にも、柔軟に対応可能である。
【００８９】
また、第２実施形態では、インデックス定義情報が自動で検査される。従って、第２実施形態によれば、外部からのインデックス定義情報の設定ミス等による不当なインデックスキーが生成されるのを防ぐことができる。更に、インデックス定義情報がスキャッタマスクセットで実現される場合には、各スキャッタマスクに対する単純なビット演算で妥当性の検査を行うことができるため、インデックス定義情報の自動検査を容易かつ高速に実行することができる。
【００９０】
［変形例］
上述の第２実施形態では、定義検査部４２が設けられ、自動でインデックス定義情報の検査が行われた。しかしながら、定義検査部４２が設けられなくてもよい。インデックス定義情報をスキャッタマスクセットで実現すれば、スキャッタマスク自体は、各属性の各ビットのインデックスキー中のビット配置を人に視認させ易いデータ形態である。そこで、スキャッタマスクセットを表示させることで、管理者等は、スキャッタマスクセットの妥当性を容易に判断することができる。
【００９１】
また、上述の各実施形態では、検索装置１は、１つの装置（コンピュータ）として実現されたが、複数の装置として実現されてもよい。上述の各実施形態は、例えば、インデックスキーを生成するインデックスキー生成装置と、検索を行う検索装置とから構成されてもよい。この場合、インデックスキー生成装置は、データ取得部２０、定義取得部２１、インデックス定義格納部２６を含み、検索装置は、クエリ取得部３１、定義取得部３２、検索キー生成部３３及びデータベース３５を含む。更に、各実施形態は、インデックス生成装置、検索装置、及び、データベース３５を格納するデータベース装置から構成されてもよい。
以下に実施例を挙げ、上述の各実施形態を更に詳細に説明する。本発明は以下の実施例に制限されない。
【実施例】
【００９２】
本実施例では、４ビットの属性Ａと２ビットの属性Ｂの２つの属性の組に対してインデックスキーを生成する例が挙げられる。以下の説明では、属性Ａのビット列が［Ａ１Ａ２Ａ３Ａ４］と表記され、属性Ｂのビット列が［Ｂ１Ｂ２］と表記される。また、インデックス定義情報１０５としてスキャッタマスクが利用される形態が例示される。【００９３】
インデックスキーのビット配置を［Ａ１Ａ２Ｂ１Ａ３Ａ４Ｂ２］とする場合、属性Ａのスキャッタマスクは［１１０１１０］に設定され、属性Ｂのスキャッタマスクは［００１００１］に設定される。
また、上述の非特許文献１に示される複合インデックスでは、インデックスキーのビット配置は［Ａ１Ａ２Ａ３Ａ４Ｂ１Ｂ２］であるため、属性Ａのスキャッタマスクは［１１１１００］に設定され、属性Ｂのスキャッタマスクは［００００１１］に設定される。
上述の非特許文献２に示される左詰めのビットインタリーブでは、インデックスキーのビット配置は［Ａ１Ｂ１Ａ２Ｂ２Ａ３Ａ４］であるため、属性Ａのスキャッタマスクは［１０１０１１］に設定され、属性Ｂのスキャッタマスクは［０１０１００］に設定される。【００９４】
上述の各実施形態によれば、このように、各属性の各ビットのインデックスキー中のビット配置を汎用的に細かく定義することができる。即ち、上述の各実施形態によれば、高速な範囲検索を実現するべく、範囲検索で取得されるレコード群が記憶媒体上で近くに配置されるようなインデックスキーを定義することができる。【００９５】
本実施例では、インデックス定義情報１０５の好ましい実現形態としてスキャッタマスクが例示されたが、インデックス定義情報１０５は、間接的にスキャッタマスクのビット列のセットを生成しうるデータであってもよい。例えば、属性名とビット数の組を並べたデータとして、上記例のインデックス定義情報１０５は、［Ａ：２，Ｂ：１，Ａ：２，Ｂ：１］のように定義されてもよい。この場合、インデックスキーは、属性Ａから先頭２ビット、属性Ｂから先頭１ビット、属性Ａからその次の２ビット、属性Ｂからその次の１ビットより構成される。他にもインデックス定義情報１０５の実現形態は様々存在し得る。インデックス定義情報１０５は、上述したように、各属性の各ビットがインデックスキーにおいてどの位置にくるかを一意に示されているものであれば、その実現形態は制限されない。このようなインデックス定義情報１０５から、各属性のスキャッタマスクが生成されるようにしてもよい。【００９６】
次に、インデックスキーの生成方法の具体例について図８を参照しながら説明する。
検索装置１は、属性Ａの属性値［Ａ１Ａ２Ａ３Ａ４］及び属性Ｂの属性値［Ｂ１Ｂ２］を取得し（Ｓ８０）、更に、属性Ａのスキャッタマスク［１１０１１０］及び属性Ｂのスキャッタマスク［００１００１］を取得する（Ｓ８１）。【００９７】
検索装置１は、属性Ａのスキャッタマスク［１１０１１０］を用いて、属性Ａの属性値［Ａ１Ａ２Ａ３Ａ４］に対してスキャッタ演算を適用する（Ｓ８４）。このスキャッタ演算により、ビット列［Ａ１Ａ２０Ａ３Ａ４０］が生成される。更に、検索装置１は、属性Ｂのスキャッタマスク［００１００１］を用いて、属性Ｂの属性値［Ｂ１Ｂ２］に対してスキャッタ演算を適用する（Ｓ８４）。このスキャッタ演算により、ビット列［００Ｂ１００Ｂ２］が生成される。【００９８】
スキャッタ操作（演算）は、基本的なビット操作であるため、スキャッタ操作に関し、専用のハードウェアを備えたＣＰＵがあったり、汎用的なビット演算の組み合わせで効率的なアルゴリズムが知られたりしている。ここでは、後者の既知のアルゴリズムの１つである並列プリフィックス法によるスキャッタ操作が例示される。【００９９】
並列プリフィックス法は、再帰的なアルゴリズムであり、１ステップで全ビットを大まかな位置に移動させていくことでスキャッタ操作を実現する。ここでは、説明の便宜のため、２のべき乗数の一つである８ビットに拡幅したスキャッタマスクを用いたスキャッタ操作を例示する。この例では、属性Ａの属性値が［００００Ａ１Ａ２Ａ３Ａ４］と表記され、このビット列が属性Ａのスキャッタマスク［００１１０１１０］を用いてスキャッタ演算される。【０１００】
まず、スキャッタマスクが２等分される。ここでは、スキャッタマスク［００１１０１１０］が上位ビット列［００１１］と下位ビット列［０１１０］とに分割される。
次に、上位ビット列［００１１］に含まれる１が設定されるビットの数がカウントされる。ここでは、ビット数２が得られる。【０１０１】
次に、スキャッタ対象のビット列が２等分された下位ビット列の上位ビットから、カウントされたビット数（２）分が、上位ビット列に移動される。ここでは、スキャッタ対象の［００００Ａ１Ａ２Ａ３Ａ４］の下位ビット列［Ａ１Ａ２Ａ３Ａ４］の上位２ビット（カウントにより取得されたビット数分）、即ち、［Ａ１Ａ２］が上位に移動される。これにより、［００Ａ１Ａ２００Ａ３Ａ４］が取得される。【０１０２】
そして、この取得されたビット列［００Ａ１Ａ２００Ａ３Ａ４］が［００Ａ１Ａ２］と［００Ａ３Ａ４］とに２等分される。これにより、スキャッタ対象［００Ａ１Ａ２］をスキャッタマスク［００１１］を用いてスキャッタ操作する第１の問題と、スキャッタ対象［００Ａ３Ａ４］をスキャッタマスク［０１１０］を用いてスキャッタ操作する第２の問題とに帰着する。【０１０３】
次に、当該２つの問題の各々について、上述と同様の手順を再帰的に繰り返す。これら各スキャッタ操作は、それぞれ別のデータに対する操作であるため、並列に実行することができる。【０１０４】
上記第１の問題については、ビット移動は生じず、ビット列［００Ａ１Ａ２］が［００］と［Ａ１Ａ２］とに２等分される。これにより、第１の問題は、スキャッタ対象［００］をスキャッタマスク［００］を用いてスキャッタ操作する第３の問題と、スキャッタ対象［Ａ１Ａ２］をスキャッタマスク［１１］を用いてスキャッタ操作する第４の問題とに帰着する。【０１０５】
一方、上記第２の問題については、下位ビット列［Ａ３Ａ４］の上位１ビットが上位ビット列に移動され、ビット列［０Ａ３０Ａ４］が取得され、このビット列が［０Ａ３］と［０Ａ４］とに２等分される。これにより、第２の問題は、スキャッタ対象［０Ａ３］をスキャッタマスク「０１」を用いてスキャッタ操作する第５の問題と、スキャッタ対象［０Ａ４］をスキャッタマスク「１０」を用いてスキャッタ操作する第６の問題とに帰着する。【０１０６】
更に、各問題がそれぞれ再帰的に処理される。これにより、上記第３の問題は、スキャッタ対象［０］をスキャッタマスク［０］を用いてスキャッタ操作する２つの問題に帰着する。上記第４の問題は、スキャッタ対象［Ａ１］をスキャッタマスク［１］を用いてスキャッタ操作する問題と、スキャッタ対象［Ａ２］をスキャッタマスク［１］を用いてスキャッタ操作する問題とに帰着する。上記第５の問題は、スキャッタ対象［０］をスキャッタマスク［０］を用いてスキャッタ操作する問題と、スキャッタ対象［Ａ３］をスキャッタマスク［１］を用いてスキャッタ操作する問題とに帰着する。上記第６の問題では、下位ビット［Ａ４］の１ビットが上位ビットに移動され、ビット列［Ａ４０］が取得され、このビット列が［Ａ４］と［０］とに２等分される。これにより、第６の問題は、スキャッタ対象［Ａ４］をスキャッタマスク［１］を用いてスキャッタ操作する問題と、スキャッタ対象［０］をスキャッタマスク［０］を用いてスキャッタ操作する問題とに帰着する。【０１０７】
スキャッタマスクのビット長が１になると、それ以上は分割できないため、再帰処理は終了する。結果、［００Ａ１Ａ２０Ａ３Ａ４０］が取得される。従って、スキャッタマスクのビット長ｎ（＝８）に対して、Ｏ（ｌｏｇ  ｎ）ステップ（＝３）によりスキャッタ操作が可能となるため、並列プリフィックス法を用いれば、効率的にスキャッタ操作をすることができる。ここで、元の属性値が２のべき乗でない場合、上述のように２のべき乗数になるように０でパディングし、スキャッタ操作の結果からパディングされた０を取り除けば、所望の結果を得ることが出来る。【０１０８】
上述のように各スキャッタ演算により、属性Ａについてビット列［Ａ１Ａ２０Ａ３Ａ４０］が生成され、属性Ｂについてビット列［００Ｂ１００Ｂ２］が生成される。検索装置１は、各スキャッタ演算の結果をＯＲ演算で１つのビット列に集約する（Ｓ８５）。これにより、［Ａ１Ａ２Ｂ１Ａ３Ａ４Ｂ２］がインデックスキーとして取得される。ＯＲ演算は、ＨＷで用意されている演算であることから高速に実行をすることができる。【０１０９】
更に、上記のアルゴリズムは、ＳＩＭＤ命令と呼ばれる複数のデータに対して同一操作を同時に実行できる機能を備えているＣＰＵと相性がよい。なぜなら、ＳＩＭＤ命令により一度に長いビット列に対して並列に処理できるからである。本実施例は、このように、上述の各実施形態によれば、汎用性の高いインデックスキー定義をすることができ、かつ、効率的にインデックスキーを生成できることを示した。【０１１０】
本実施例では、４ビット長の属性Ａ及び２ビットの属性Ｂが例示されたが、各属性のビット長は制限されない。インデックスキーは、レコードのスキーマ単位で用意されるため、レコードのスキーマ名と関連付けてインデックス定義情報１０５が保持されてもよい。このようにすれば、或るスキーマのレコードに対してインデックス定義情報１０５を参照する場合、そのスキーマ名に基づいて当該インデックス定義情報１０５が特定され得る。【０１１１】
なお、上述の説明で用いた複数のフローチャートでは、複数の工程（処理）が順番に記載されているが、各実施形態で実行される工程の実行順序は、その記載の順番に制限されない。各実施形態では、図示される工程の順番を内容的に支障のない範囲で変更することができる。また、上述の各実施形態及び変形例は、内容が相反しない範囲で組み合わせることができる。【０１１２】
この出願は、２０１３年１月１１日に出願された日本出願特願２０１３−００３８４２号を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１】
2014109109.tif 000003
【図２】
2014109109.tif 000004
【図３】
2014109109.tif 000005
【図４Ａ】
2014109109.tif 000006
【図４Ｂ】
2014109109.tif 000007
【図４Ｃ】
2014109109.tif 000008
【図４Ｄ】
2014109109.tif 000009
【図４Ｅ】
2014109109.tif 000010
【図４Ｆ】
2014109109.tif 000011
【図５】
2014109109.tif 000012
【図６】
2014109109.tif 000013
【図７】
2014109109.tif 000014
【図８】
2014109109.tif 000015
【図９】
2014109109.tif 000016
【図１０】
2014109109.tif 000017
【図１１】
2014109109.tif 000018
【手続補正書】
【提出日】平成27年6月23日(2015.6.23)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
インデックス対象の複数の属性に関する複数の属性値を取得するデータ取得部と、
インデックス対象の各属性について、該属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報を取得する定義取得部と、
前記定義取得部により取得されるインデックス定義情報に基づいて、前記データ取得部により取得される複数の属性値をビット単位で配置することによりインデックスキーを生成するビット処理部と、
を備えるインデックスキー生成装置。
【請求項２】
前記インデックス定義情報は、インデックス対象の各属性について、インデックスキーと同じビット長のビット列における、該属性の各ビットが配置されるビット位置がマスクされたスキャッタマスクをそれぞれ含み、
前記ビット処理部は、前記データ取得部により取得される各属性値に対して、該属性値の属性に対応するスキャッタマスクを用いたスキャッタ演算をそれぞれ適用し、該スキャッタ演算で得られた該属性毎のビット列をＯＲ演算で集約することにより前記インデックスキーを生成する、
請求項１に記載のインデックスキー生成装置。
【請求項３】
前記定義取得部は、インデックス対象の属性の各組み合わせに対応する複数のインデックス定義情報の中から、前記データ取得部により取得される複数の属性値の属性の組み合わせに対応するインデックス定義情報を選択的に取得する、
請求項１又は２に記載のインデックスキー生成装置。
【請求項４】
前記複数のインデックス定義情報は、インデックス対象の各属性についてそれぞれ示されるインデックスキー中のビット配置がインデックス定義情報間で異なる少なくとも２つのインデックス定義情報を含む、
請求項３に記載のインデックスキー生成装置。
【請求項５】
インデックス対象の少なくとも１つの属性について該属性の各ビットのインデックスキー中の配置を示す設定データを取得し、該設定データの内容を前記インデックス定義情報に反映する定義設定部、
を更に備える請求項１から４のいずれか１項に記載のインデックスキー生成装置。
【請求項６】
前記インデックス定義情報により示されるインデックス対象の各属性についてのインデックスキー中のビット配置に基づいて、該インデックス定義情報の妥当性を検査する定義検査部、
を更に備える請求項１から５のいずれか１項に記載のインデックスキー生成装置。
【請求項７】
前記インデックス定義情報は、前記各属性のビット列の並び順をそれぞれ維持し、かつ、前記各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むことを示す、
請求項１から６のいずれか１項に記載のインデックスキー生成装置。
【請求項８】
請求項１から７のいずれか１項に記載のインデックスキー生成装置で生成されるインデックスキーがソートされたインデックスを用いる検索装置において、
検索対象の複数の属性に基づく検索範囲が指定されたクエリデータを取得するクエリ取得部と、
前記クエリ取得部により取得されるクエリデータにより指定される複数の属性に対応する前記インデックス定義情報を取得する定義取得部と、
前記定義取得部により取得されるインデックス定義情報に基づいて、前記クエリデータにより指定される検索範囲を示す、前記クエリデータにより指定される複数の属性に対応する検索キーを生成する検索キー生成部と、
を備える検索装置。
【請求項９】
インデックス対象の複数の属性に関する複数の属性値を取得し、
インデックス対象の各属性について、該属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報を取得し、
前記取得されたインデックス定義情報に基づいて、前記取得された複数の属性値をビット単位で配置することによりインデックスキーを生成する、
ことを含むインデックスキー生成方法。
【請求項１０】
請求項９に記載のインデックスキー生成方法により生成されたインデックスキーがソートされたインデックスを用いる検索方法において、
検索対象の複数の属性に基づく検索範囲が指定されたクエリデータを取得し、
前記取得されたクエリデータにより指定される複数の属性に対応する前記インデックス定義情報を取得し、
前記取得されたインデックス定義情報に基づいて、前記クエリデータにより指定される検索範囲を示す、前記クエリデータにより指定される複数の属性に対応する検索キーを生成する、
ことを更に含む検索方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数次元インデックスキーの生成技術に関する。ここで、複数次元インデックスキーとは、インデックス対象となる複数の属性の値から生成されるインデックスキーを意味する。
【背景技術】
【０００２】
複数の属性に関する条件を指定したデータベース検索を高速化するために、これら属性に対してインデックスを生成することはよく行われている。複数の属性に対してインデックスを生成する方法として、以下の二つの技術が知られている。
【０００３】
第１に、複合インデックスと呼ばれる方法が存在する（下記非特許文献１参照）。複合インデックスは、インデックスを生成したい複数の属性に対して優先順位を指定させ、その優先順位の順序でそれぞれの属性をソートして保持する。即ち、属性Ａの属性値のビット列が「Ａ１Ａ２Ａ３Ａ４」、属性Ｂの属性値のビット列が「Ｂ１Ｂ２Ｂ３Ｂ４」である場合、各属性値を区切り記号「｜」で連結したインデックスキー「Ａ１Ａ２Ａ３Ａ４｜Ｂ１Ｂ２Ｂ３Ｂ４」がソートされ、そのソート結果が保持される。複合インデックスは、各属性値を優先順位でソートするため、各属性の属性値のビット長が異なっていても生成することができる。また、各属性値が離散値である場合において、これら属性値の一致条件を指定した問い合わせ処理は効率化され得る。
【０００４】
第２に、ＵＢ−Ｔｒｅｅと呼ばれる方法が存在する（下記非特許文献２参照）。ＵＢ−Ｔｒｅｅは、インデックスを生成したい複数の属性に対して、各属性値をビットごとに交互に混ぜ合わせたインデックスキーを生成し、ソートされた当該インデックスキーを保持する。即ち、属性Ａの属性値のビット列が「Ａ１Ａ２Ａ３Ａ４」、属性Ｂの属性値のビット列が「Ｂ１Ｂ２Ｂ３Ｂ４」である場合、各属性値をビットごとに交互に混ぜ合わせることで、インデックスキー「Ａ１Ｂ１Ａ２Ｂ２Ａ３Ｂ３Ａ４Ｂ４」を生成し、このインデックスキーをソートした結果がインデックスとして保持される。ＵＢ−Ｔｒｅｅによれば、ビット単位で各属性値が交互に混ぜ合わされるため、各属性について比較的連続性が保たれ易くなり、その結果、範囲検索の効率が上述の複合インデックスより高い傾向にある。ＵＢ−Ｔｒｅｅで用いられるインデックスキーの生成手法は、ビットインタリービング、Ｚオーダリング等とも呼ばれる。以降、各属性値をビットごとに交互に混ぜ合わせることでインデックスキーを生成する手法を代表的にビットインタリービングと表記する。
【０００５】
ＵＢ−Ｔｒｅｅは、各属性値をビットごとに交互に混ぜ合わせるため、各属性値のビット長が一致していることを前提とする。データ間のビット長を合せるために、ゼロパディングがよく用いられる。しかし、ゼロパディングは、インデックスキーのサイズを増大させる原因となる。
【０００６】
そこで、非特許文献２の提案手法は、ビットの混ぜ合わせ順序を属性値のビット長の長い順に限定し、或る属性値のビット長を超えたら、その属性をスキップすることでインデックスキーを生成する。即ち、この提案手法は、各属性値のビット列を左詰めで交互に混ぜ合わせることでインデックスキーを生成するというように、生成方法を制限することで各属性値のビット長の違いを解消している。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Sam Lightstone, Toby Teorey, Tom Nadeau、 "Physical Database Design: the database professional's guide to exploiting indexes, view, storage, and more"、lines 22-24, page 21， page 22, Figures 2 and 3、 2006年
【非特許文献２】Vorker Markl、 "MISTRAL: Processing Relational Queries using a Multidimensional Access Technique"、 page 103(Algorithm 5-1)、 1999年7月25日
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上述の複合インデックス及びビットインタリービングは、ビット列どうしを連結するだけ、規則的にビットを交互に混ぜ合わせるだけの、単純な方法で、複数の属性により示される複数次元空間をインデックスキーの一次元空間に変換する。即ち、これら手法は、インデックスキーの生成パターンをかなり限定してしまっていた。これにより、範囲検索の指定内容やインデックス対象のデータの分布によっては、範囲検索処理の効率が低下してしまう可能性があった。
【０００９】
例えば、上述の複合インデックスを用いる場合、連続値を持つ各属性が指定された範囲検索処理の効率が低下し易い。優先順位が高い属性についてはインデックスキーが連続して配置されるが、優先順位が低い属性についてはインデックスキーがとびとびに配置されるからである。
【００１０】
また、上述のビットインタリービングを用いる場合、属性毎の検索範囲の幅が大きく異なる又はそれぞれ独立して指定された範囲検索処理の効率が低下し易い。これは、ビットインタリービングが、緯度及び経度で示される位置情報の範囲指定のように、各属性の検索範囲の幅が略同じになるように指定された範囲検索を前提とした技術であるからと言える。例えば、位置情報の範囲指定は、一キロ四方、或る地点から１０キロの範囲等のように指定されることが多い。
【００１１】
本発明は、このような事情に鑑みてなされたものであり、どのような検索環境においても高い検索効率を実現する複数次元インデックスキーの生成技術を提供することにある。ここで、検索環境とは、検索に関連する事象全般を意味し、例えば、検索対象となる複数の属性の値分布や、その検索対象となる複数の属性に対する検索特性（検索状況）等を含む。
【課題を解決するための手段】
【００１２】
本発明の各側面では、上述した課題を解決するために、それぞれ以下の構成を採用する。
【００１３】
第１の側面は、インデックスキー生成装置に関する。第１の側面に係るインデックスキー生成装置は、インデックス対象の複数の属性に関する複数の属性値を取得するデータ取得部と、インデックス対象の各属性について、その属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報を取得する定義取得部と、定義取得部により取得されるインデックス定義情報に基づいて、データ取得部により取得される複数の属性値をビット単位で配置することによりインデックスキーを生成するビット処理部と、を有する。
【００１４】
第２の側面は、インデックスキー生成装置に関する。第２の側面に係るインデックスキー生成装置は、インデックス対象の複数の属性に関する複数の属性値を取得するデータ取得部と、データ取得部により取得される複数の属性に関する複数の属性値をビット単位で配置することによりインデックスキーを生成するビット処理部と、を有し、ビット処理部は、各属性のビット列の並び順がそれぞれ維持され、かつ、複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むように、複数の属性値をビット単位で配置する。
【００１５】
第３の側面は、インデックスキー生成方法に関する。第３の側面に係るインデックスキー生成方法は、インデックス対象の複数の属性に関する複数の属性値を取得し、インデックス対象の各属性について、その属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報を取得し、取得されたインデックス定義情報に基づいて、上記取得された複数の属性値をビット単位で配置することによりインデックスキーを生成する、ことを含む。
【００１６】
第４の側面は、インデックスキー生成方法に関する。第４の側面に係るインデックスキー生成方法は、インデックス対象の複数の属性に関する複数の属性値を取得し、取得された複数の属性に関する複数の属性値をビット単位で配置することによりインデックスキーを生成する、ことを含み、そのインデックスキーの生成は、各属性のビット列の並び順がそれぞれ維持され、かつ、複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むように、複数の属性値をビット単位で配置する。
【００１７】
第５の側面は、複数の属性に関する複数の属性値がビット単位で配置されることにより形成されるインデックスキーのデータ構造に関する。第５の側面に係るインデックスキーのデータ構造において、当該インデックスキーは、各属性のビット列の並び順をそれぞれ維持し、かつ、複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含み、コンピュータが、当該インデックスキーがソートされることで形成されるインデックスの中から、クエリデータにより指定される検索対象の複数の属性に基づく検索範囲に適合するインデックスキー集合を特定するために参照する。
【００１８】
なお、本発明の他の側面としては、上記第３の側面の方法又は上記第４の側面の方法を少なくとも１つのコンピュータに実行させるプログラムであってもよいし、このようなプログラムを記録したコンピュータが読み取り可能な記録媒体であってもよい。この記録媒体は、非一時的な有形の媒体を含む。また、上記各側面の装置又は方法により生成されたインデックスキーがソートされたインデックスを用いる検索方法であってもよい。
【発明の効果】
【００１９】
上記各側面によれば、どのような検索環境においても高い検索効率を実現する複数次元インデックスキーの生成技術を提供することができる。
【図面の簡単な説明】
【００２０】
上述した目的、およびその他の目的、特徴および利点は、以下に述べる好適な実施の形態、およびそれに付随する以下の図面によってさらに明らかになる。
【００２１】
【図１】本発明の実施の形態に係るインデックスキー生成装置の構成例を概念的に示す図である。
【図２】インデックスキーの生成例を示す図である。
【図３】他の実施形態に係るインデックスキー生成装置の構成例を概念的に示す図である。
【図４Ａ】他の実施形態に係るインデックスキーの生成例を示す図である。
【図４Ｂ】他の実施形態に係るインデックスキーの生成例を示す図である。
【図４Ｃ】他の実施形態に係るインデックスキーの生成例を示す図である。
【図４Ｄ】他の実施形態に係るインデックスキーの生成例を示す図である。
【図４Ｅ】他の実施形態に係るインデックスキーの生成例を示す図である。
【図４Ｆ】他の実施形態に係るインデックスキーの生成例を示す図である。
【図５】第１実施形態における検索装置のハードウェア構成例を概念的に示す図である。
【図６】第１実施形態における検索装置の処理構成例を概念的に示す図である。
【図７】第１実施形態におけるインデックスキーの生成過程を概念的に示す図である。
【図８】インデックスキー生成処理に関する第１実施形態における検索装置の動作例を示すフローチャートである。
【図９】検索処理に関する第１実施形態における検索装置の動作例を示すフローチャートである。
【図１０】第２実施形態における検索装置の処理構成例を概念的に示す図である。
【図１１】インデックスキー生成処理に関する第２実施形態における検索装置の動作例を示すフローチャートである。
【発明を実施するための形態】
【００２２】
以下、本発明の実施の形態について説明する。なお、以下に挙げる実施形態は例示であり、本発明は以下の実施形態の構成に限定されない。
【００２３】
図１は、本発明の実施の形態に係るインデックスキー生成装置１００の構成例を概念的に示す図である。図１に示されるように、インデックスキー生成装置１００は、インデックス対象の複数の属性に関する複数の属性値を取得するデータ取得部１０１と、インデックス対象の各属性について、その属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報１０５を取得する定義取得部１０２と、定義取得部１０２により取得されるインデックス定義情報１０５に基づいて、データ取得部１０１により取得される複数の属性値をビット単位で配置することによりインデックスキーを生成するビット処理部１０３と、を有する。
【００２４】
インデックスキー生成装置１００は、例えば、後述する詳細実施形態における検索装置１と同様のハードウェア構成を有し、その検索装置１と同様にプログラムが処理されることで、上述の各処理部が実現される。
【００２５】
また、本発明の実施の形態に係るインデックスキー生成方法は、インデックス対象の複数の属性に関する複数の属性値を取得し、インデックス対象の各属性について、その属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報を取得し、取得されたインデックス定義情報に基づいて、上記取得された複数の属性値をビット単位で配置することによりインデックスキーを生成する、ことを含む。但し、本インデックスキー生成方法に含まれる各工程は、順不同に逐次的に実行されてもよいし、同時に実行されてもよい。本インデックスキー生成方法は、上述のインデックスキー生成装置１００のような少なくとも１つのコンピュータにより実行される。
【００２６】
このように、本実施形態では、インデックス対象の各属性について、その属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報１０５が取得され、このインデックス定義情報１０５に基づいて、各属性の各ビットが配置される。これにより、データ取得部１０１により取得されたインデックス対象の複数の属性に関する複数の属性値に対応する複数次元インデックスキーが生成される。
【００２７】
上述のように、既存の２つのインデックスキー生成方法がインデックスキーの生成パターンをかなり限定しているため、各方法には範囲検索の効率を低下させる検索環境がそれぞれ存在する。更に、その２つの方法だけでは、インデックス対象となる属性の数が増加すると、インデックス空間の中の検索範囲に対応する検索空間がより広がるため、検索効率が低下してしまう。これは、インデックスキー内の検索範囲に対応するビット幅に、検索範囲に影響を与えないビットが含まれる可能性が増えるからである。
【００２８】
このような知見に基づいて、本発明者は、既存の２つの方法のみでなく、各検索環境により適合したインデックスキーの生成パターンが更に存在し得ることを見出した。
【００２９】
データレコードをインデックスキーに従って整列する場合、インデックスキーは、インデックスされた属性の組み合わせどうしの近さの指標となる。即ち、インデックスキーが整列された順序上で近いレコードは、記憶媒体上でも近くに配置されやすくなる。一方、範囲検索は、属性値が指定された範囲内にあるレコードを取得する操作である。このため、取得するレコード群が記憶媒体上で塊になって配置されていると、それらを一括で取得することができるため、範囲検索の性能が向上する。
【００３０】
本発明者は、範囲検索により抽出されるレコードの属性値のビットパターンに着目した。当該抽出されたレコードの属性値をソートした属性値列は、その検索範囲内での連続値になるため、各属性値の上位ビットのパターンは略同じで、下位ビットのパターンが異なっていることが期待される。このことから、連続値や、連続的な意味合いを持つ離散値を取る属性から生成されるインデックスキーの範囲検索は、インデックスキーの下位数ビットの幅の変化を参照していることと等価であると捉えることができる。本発明者は、各属性のビット列におけるその属性の検索範囲の幅に相当するビット長分の下位ビットをインデックスキーの中でできる限り下位ビット側（右側）に配置することで、記憶媒体上で当該検索範囲に対応するインデックスキーどうしが近くに配置され易くなり、検索性能を向上させることができると考えた。
【００３１】
図２は、インデックスキーの生成例を示す図である。図２は、「性別」及び「年齢」がインデックス対象の属性に設定されており、属性「年齢」の「２０代及び３０代」が検索範囲として指定される頻度が高い場合の例を示す。この場合、属性「年齢」における「２０代及び３０代」の検索範囲は、属性「年齢」の下位６ビットに対応する。そこで、例えば、属性「年齢」の下位６ビットをインデックスキー中の下位ビット側に配置させ、その上位ビットに属性「性別」の１ビットを配置し、属性「年齢」の残り２ビットをインデックスキー中の残りのビット位置に配置する。これにより、「男性」かつ「２０代及び３０代」に対応するインデックスキー列と、「女性」かつ「２０代及び３０代」に対応するインデックスキー列とが連続で並ぶため、検索効率が向上し易い。一方、図２の例において複合インデックスの方法でインデックスキーを生成した場合、「男性」かつ「全年齢」及び「女性」かつ「全年齢」といった順でインデックスキー列が並ぶため、「全性別」の「２０代及び３０代」の検索範囲に対応するインデックスキー空間の範囲は、図２の例に比べて拡がり、検索効率が低下し易くなる。
【００３２】
このように、検索効率を向上させ得るインデックスキー内でのビット配置は、検索対象となる複数の属性の値分布や、その検索対象となる複数の属性に対する検索特性（検索状況）等のような検索環境によって変わってくる。そこで、本発明者は、検索環境に適合したインデックスキーの生成パターンを用いること、即ち、インデックスキーのデザイン手法の自由度を上げることが、検索効率の向上に繋がるとの着想を得た。
【００３３】
そこで、本実施形態では、インデックス対象の各属性のインデックスキー中のビット配置を自由に設定可能なインデックス定義情報１０５が用いられ、このインデックス定義情報１０５の設定内容に応じて各属性値がビット単位で配置されたインデックスキーが生成される。これにより、各属性の各ビットのインデックスキー中における位置を細やかに調整できるため、本実施形態によれば、性能を向上させたい範囲検索に合わせたインデックスキーを生成することができる。即ち、本実施形態によれば、検索環境に適合するインデックスキーのデザイン手法を自由に用いることができ、ひいては、検索効率を向上させることができる。特に、本実施形態は、多次元範囲検索で、属性ごとに典型的な検索範囲の幅を持っている場合、より効果を発揮する。
【００３４】
上述の本実施形態は、上述のような技術的思想の下、次のように変形させることもできる。図３は、他の実施形態に係るインデックスキー生成装置１００の構成例を概念的に示す図である。他の実施形態に係るインデックスキー生成装置１００は、上述の形態と、定義取得部１０２を持たない点において相違する。図３の例では、ビット処理部１０３は、インデックスキーを生成するにあたり、各属性のビット列の並び順をそれぞれ維持し、かつ、複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むように、データ取得部１０１により取得される複数の属性に関する複数の属性値をビット単位で配置する。
【００３５】
また、他の実施形態に係るインデックスキー生成方法は、インデックス対象の複数の属性に関する複数の属性値を取得し、各属性のビット列の並び順をそれぞれ維持し、かつ、複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むように、当該取得された複数の属性に関する複数の属性値をビット単位で配置することによりインデックスキーを生成することを含む。
【００３６】
図４Ａ及び図４Ｂは、他の実施形態に係るインデックスキーの生成例を示す図である。図４Ａの例で生成されるインデックスキーは、第１ビット列「Ａ１Ｂ１Ａ２」及び第１ビット列「Ａ３Ｂ５Ａ４」が、第２ビット列「Ｂ２Ｂ３Ｂ４」を挟むビット配置を持つ。図４Ｂの例で生成されるインデックスキーは、第２ビット列「Ａ１Ａ２」及び第２ビット列「Ｂ２Ｂ３」が、第１ビット列「Ｂ１Ａ３」を挟む。
【００３７】
また、他の実施形態に係るインデックスキーの生成方法は、インデックス対象の複数の属性に関する複数の属性値を取得し、各属性のビット列の並び順をそれぞれ維持し、かつ、複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、インデックスキー上に配置する順番で各属性のｉ桁目のビット値をそれぞれ並べた複数のビット列の中に、２以上の属性を含みかつ異なる属性構成を持つビット列が２つ以上含まれるように、当該取得された複数の属性に関する複数の属性値をビット単位で配置することによりインデックスキーを生成することを含む。ここで、異なる属性構成を持つビット列とは、含まれる属性の数が異なるビット列、又は、同数の属性が異なる順序で並ぶビット列を示す。
【００３８】
図４Ｃ、図４Ｄ及び図４Ｅは、他の実施形態に係るインデックスキーの生成例を示す図である。上述のインデックスキー生成方法によれば、図４Ｃ、図４Ｄ及び図４Ｅに示されるようなビット配置を持つインデックスキーを生成することができる。図４Ｃでは、各属性のｉ桁目のビット値をそれぞれ並べた複数のビット列は、「Ａ１Ｂ１」、「Ｂ２Ａ２」、「Ｂ３」及び「Ｂ４」であり、２以上の属性を含みかつ異なる属性構成を持つビット列「Ａ１Ｂ１」及び「Ｂ２Ａ２」が存在する。図４Ｄでは、当該複数のビット列は、「Ａ１Ｂ１Ｃ１」、「Ａ２Ｃ２Ｂ２」及び「Ａ３Ｂ３Ｃ３」であり、２以上の属性を含みかつ異なる属性構成を持つビット列「Ａ１Ｂ１Ｃ１」及び「Ａ２Ｃ２Ｂ２」が存在する。図４Ｅでは、当該複数のビット列は、「Ａ１Ｂ１Ｃ１」、「Ａ２Ｂ２Ｃ２」、「Ａ３Ｂ３」及び「Ａ４Ｂ４」であり、２以上の属性を含みかつ異なる属性構成を持つビット列「Ａ１Ｂ１Ｃ１」及び「Ａ３Ｂ３」が存在する。
【００３９】
また、他の実施形態に係るインデックスキーの生成方法によれば、例えば図４Ｆに示されるようなビット配置を持つインデックスキーを生成することもできる。図４Ｆは、他の実施形態に係るインデックスキーの生成例を示す図である。
【００４０】
更に、他の実施形態に係るインデックスキーの生成方法によれば、属性Ａの属性値のビット列が「Ａ１Ａ２」、属性Ｂの属性値のビット列が「Ｂ１Ｂ２Ｂ３Ｂ４」である場合、インデックスキーを「Ａ１Ｂ１Ａ２Ｂ２Ｂ３Ｂ４」、「Ｂ１Ａ１Ｂ２Ａ２Ｂ３Ｂ４」、「Ｂ１Ｂ２Ａ１Ｂ３Ａ２Ｂ４」または「Ｂ１Ｂ２Ｂ３Ａ１Ｂ４Ａ２」のように生成することもできる。
【００４１】
このように、当該他の実施形態では、複合インデックス及びビットインタリーブの各手法とは異なるインデックスキー生成手法が用いられる。この用法で生成されたインデックスキーが用いられれば、複合インデックス及びビットインタリーブの各手法で生成されたインデックスキーでは検索効率を向上させることができない検索環境において、検索効率を向上させることができる可能性が増す。
【００４２】
以下、上述の実施形態について更に詳細を説明する。以下には、詳細実施形態として、第１実施形態及び第２実施形態を例示する。以下の各実施形態は、上述のインデックスキー生成装置及びインデックスキー生成方法を検索装置に適用した場合の例である。なお、検索装置で扱われるデータ自体は制限されない。
【００４３】
［第１実施形態］
〔装置構成〕
図５は、第１実施形態における検索装置１のハードウェア構成例を概念的に示す図である。第１実施形態における検索装置１は、図５に示されるように、ハードウェア構成として、相互にバス１５により接続される、ＣＰＵ（Central Processing Unit）１０、メモリ１１、入出力インタフェース（Ｉ／Ｆ）１２、通信装置１３等を有する。メモリ１１は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、ハードディスク、可搬型記憶（記録）媒体等である。入出力Ｉ／Ｆ１２は、キーボード、マウス等のようなユーザ操作の入力を受け付ける入力装置（図示せず）、表示装置やプリンタ等のようなユーザに情報を提供する出力装置（図示せず）などと接続可能である。通信装置１３は、他のノードと通信を行う。なお、検索装置１は、入力装置や出力装置を持たなくてもよく、検索装置１のハードウェア構成は制限されない。
【００４４】
検索装置１は、上述の実施形態で示されるように、インデックス対象の複数の属性に関する複数の属性値を取得し、それら属性値に対応する複数次元インデックスキーを生成する。また、検索装置１は、クエリデータを取得し、上述のように生成されたインデックスキーがソートされたインデックスを用いて、クエリデータで示される検索範囲に対応するデータを検索する。検索装置１の一部が上述のインデックスキー生成装置１００に相当する。
【００４５】
〔処理構成〕
図６は、第１実施形態における検索装置１の処理構成例を概念的に示す図である。第１実施形態における検索装置１は、データ取得部２０、定義取得部２１、インデックスキー生成部２２、インデックス定義格納部２６、検索部３０、データベース３５等を有する。インデックスキー生成部２２は、上述のビット処理部に相当する。これら各処理部は、例えば、ＣＰＵ１０によりメモリ１１に格納されるプログラムが実行されることにより実現される。また、当該プログラムは、例えば、ＣＤ（Compact Disc）、メモリカード等のような可搬型記録媒体やネットワーク上の他のコンピュータから入出力Ｉ／Ｆ１２を介してインストールされ、メモリ１１に格納されてもよい。
【００４６】
データ取得部２０は、インデックス対象の複数の属性に関する複数の属性値を取得する。インデックス対象の複数の属性に関する複数の属性値は、データベース３５から取得されてもよいし、入力画面等に基づいて入力装置をユーザが操作することにより入力されてもよいし、可搬型記録媒体、他のコンピュータ等から入出力Ｉ／Ｆ１２又は通信装置１３を経由して取得されてもよい。また、データ取得部２０は、１つのデータレコードを取得し、このデータレコードの中から、インデックス対象となる複数の属性に関する複数の属性値を取得するようにしてもよい。この場合、データ取得部２０は、当該データレコードのスキーマ情報を取得し、このスキーマ情報に基づいて、データレコードを形成する複数の属性の中から、インデックス対象となる属性を特定するようにしてもよい。
【００４７】
インデックス定義格納部２６は、上述したインデックス定義情報１０５を格納する。本実施形態では、インデックス定義情報１０５は、インデックス対象の各属性について、インデックスキーと同じビット長のビット列における、その属性の各ビットが配置されるビット位置がマスクされたスキャッタマスクをそれぞれ含む。インデックス定義情報１０５は、インデックス対象の各属性に対応するスキャッタマスクをそれぞれ特定し得る情報を含む。例えば、インデックス定義情報１０５は、属性ＩＤとスキャッタマスクとの対応関係を含んでもよい。スキャッタマスクは、インデックス定義情報１０５の好ましい実現形態である。但し、本実施形態は、インデックス対象の各属性について、その属性の各ビットの、インデックスキー中の配置をそれぞれ示す情報であれば、インデックス定義情報１０５の実現形態をスキャッタマスクのみに限定しない。
【００４８】
本実施形態では、インデックス定義情報１０５に含まれるスキャッタマスクのセットがそれぞれ示すインデックスキーの生成パターン自体は、検索環境に適合するように設定されていれば、特に制限されない。よって、インデックス定義格納部２６は、図４Ａ及び図４Ｂに例示されたインデックスキーの生成パターンを示すインデックス定義情報１０５を格納していてもよい。具体的には、そのインデックス定義情報１０５は、各属性のビット列の並び順をそれぞれ維持し、かつ、各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むことを示す。また、インデックスキー及びスキャッタマスクのビット長に関しても、インデックス対象の各属性のデータサイズに対応するビット長の合計以上であれば、特に制限されない。
【００４９】
インデックス定義格納部２６は、インデックス対象の属性の各組み合わせに対応する複数のインデックス定義情報１０５を格納していてもよい。この場合、インデックス定義格納部２６に格納される複数のインデックス定義情報は、インデックス対象の各属性についてそれぞれ示されるインデックスキー中のビット配置がインデックス定義情報間で異なる少なくとも２つのインデックス定義情報を含んでいてもよい。即ち、当該複数のインデックス定義情報には、インデックス対象となる属性の組み合わせ毎に、異なるインデックスキーの生成パターンが設定されていてもよい。
【００５０】
定義取得部２１は、データ取得部２０により取得される複数の属性値の属性の組み合わせに対応するインデックス定義情報１０５をインデックス定義格納部２６から取得する。インデックス定義格納部２６が複数のインデックス定義情報１０５を格納する場合、定義取得部２１は、インデックス定義格納部２６に格納される複数のインデックス定義情報１０５の中から、データ取得部２０により取得される複数の属性値の属性の組み合わせに対応するインデックス定義情報１０５を選択的に取得する。定義取得部２１により取得されるインデックス定義情報１０５は、スキャッタマスクセットと表記される場合もある。
【００５１】
インデックスキー生成部２２は、定義取得部２１により取得されたスキャッタマスクセットに基づいて、データ取得部２０により取得された複数の属性値をビット単位で配置することによりインデックスキーを生成する。生成されたインデックスキーは、データベース３５に格納される。インデックスキー生成部２２は、図６に示されるように、スキャッタ演算部２３及びＯＲ演算部２４を有し、これら処理部を動作させることで、上述のようにインデックスキーを生成する。
【００５２】
スキャッタ演算部２３は、データ取得部２０により取得された各属性値に対して、属性値の属性に対応するスキャッタマスクを用いたスキャッタ演算をそれぞれ適用する。
ＯＲ演算部２４は、スキャッタ演算部２３によるスキャッタ演算で得られた属性毎のビット列をＯＲ演算で集約する。集約されたビット列がインデックスキーである。
【００５３】
図７は、第１実施形態におけるインデックスキーの生成過程を概念的に示す図である。図７の例では、符号Ｓ０が属性０のスキャッタマスクを示し、符号ＳＮが属性Ｎのスキャッタマスクを示す。各スキャッタマスクでは、対応する属性の各ビットが配置されるビット位置に「１」がセットされている。なお、図７では、図面スペースの関係により示されていないが、各スキャッタマスクの「１」以外の箇所には「０」が設定される。
スキャッタ演算部２３は、各属性の各ビットを、その属性に対応するスキャッタマスクの「１」が設定されているビット位置のうち、その属性のビットの並び順から特定されるビット位置に配置する。ＯＲ演算部２４は、各属性のビット列に対するスキャッタ演算により得られる各ビット列をＯＲ演算することで、インデックスキーを生成する。
【００５４】
データベース３５は、インデックス対象となる複数の属性に関する複数の属性値を含むデータ群、インデックスキー生成部２２により生成されたインデックスキーがソートされることで形成されるインデックスを格納する。本実施形態で生成される各インデックスキーでは、各属性のビット列におけるその属性の検索範囲の幅に相当するビット長分の下位ビットがインデックスキーの中でできる限り下位ビット側（右側）に配置される。これにより、当該インデックスでは、記憶媒体上で当該検索範囲に対応するインデックスキーどうしが近くに配置される。データベース３５は、メモリ１１に含まれるハードディスク等のような外部メモリ上に実現される。
【００５５】
検索部３０は、インデックスキー生成部２２により生成されたインデックスキーがソートされることで形成されるインデックスの中から、後述の検索キーに適合するインデックスキー集合を特定し、データベース３５から、この特定されたインデックスキー集合に対応するデータレコードを抽出する。週出されたデータレコードは、入出力Ｉ／Ｆ１２を介して表示装置や印刷装置に出力されてもよいし、入出力Ｉ／Ｆ１２を介して可搬型記録媒体に格納されてもよいし、通信装置１３を介して他のコンピュータに送信されてもよい。
【００５６】
検索部３０は、図６に示されるように、クエリ取得部３１、定義取得部３２及び検索キー生成部３３を含む。
【００５７】
クエリ取得部３１は、検索対象の複数の属性に基づく検索範囲が指定されたクエリデータを取得する。クエリデータは、入力画面等に基づいて入力装置をユーザが操作することにより入力された情報であってもよいし、可搬型記録媒体、他のコンピュータ等から入出力Ｉ／Ｆ１２又は通信装置１３を経由して取得された情報であってもよい。
【００５８】
定義取得部３２は、クエリ取得部３１により取得されたクエリデータにより指定される複数の属性に対応するインデックス定義情報１０５（スキャッタマスクセット）をインデックス定義格納部２６から取得する。
【００５９】
検索キー生成部３３は、定義取得部３２により取得されるインデックス定義情報１０５に基づいて、クエリデータにより指定される検索範囲を示す、クエリデータにより指定される複数の属性に対応する検索キーを生成する。生成される検索キーは、当該検索範囲を示す複数のインデックスキーである。検索キー生成部３３は、インデックスキー生成部２２と同様の手法により、当該検索範囲を示す複数のインデックスキーを生成する。例えば、検索キー生成部３３は、クエリデータから、当該検索範囲の下限を示す各属性値、及び、当該検索範囲の上限を示す各属性値をそれぞれ取得し、これら属性値を各属性に対応するスキャッタマスクに基づいてスキャッタ演算し、このスキャッタ演算で得られたビット列をＯＲ演算で集約することにより、当該検索範囲の下限に対応するインデックスキー及び当該検索範囲の上限に対応するインデックスキーを生成する。このように生成されたインデックスキーが検索キーである。
【００６０】
〔動作例〕
次に、第１実施形態におけるインデックスキー生成方法について図８を用いて説明する。以下の説明では、検索装置１が当該方法の実行主体となるが、検索装置１に含まれる上述の各処理部が実行主体となってもよい。
【００６１】
図８は、インデックスキー生成処理に関する第１実施形態における検索装置１の動作例を示すフローチャートである。検索装置１は、インデックス対象となる複数の属性に関する複数の属性値を取得する（Ｓ８０）。
【００６２】
続いて、検索装置１は、インデックス対象となる属性の組み合わせに対応するインデックス定義情報を取得する（Ｓ８１）。これにより、当該各属性についてのスキャッタマスクがそれぞれ取得される。
【００６３】
検索装置１は、（Ｓ８０）で取得された複数の属性値の中で未処理の属性値が存在しなくなるまで以下の処理を繰り返す（Ｓ８２）。
検索装置１は、（Ｓ８０）で取得された複数の属性値の中から未処理の１つの属性値を選択する（Ｓ８３）。検索装置１は、その選択された属性値の属性に対応するスキャッタマスクを用いて、その選択された属性値に対してスキャッタ演算を適用する（Ｓ８４）。
【００６４】
検索装置１は、（Ｓ８０）で取得された全ての属性値に対して処理が終わると（Ｓ８２；ＮＯ）、スキャッタされたビット列群をＯＲ演算することでインデックスキーを生成する（Ｓ８５）。
【００６５】
更に、第１実施形態における検索方法について図９を用いて説明する。以下の説明では、検索装置１が当該方法の実行主体となるが、検索装置１に含まれる上述の各処理部が実行主体となってもよい。
【００６６】
図９は、検索処理に関する第１実施形態における検索装置１の動作例を示すフローチャートである。検索装置１は、クエリデータを取得する（Ｓ９０）。クエリデータでは、検索対象の複数の属性に基づく検索範囲が指定されている。例えば、検索対象の複数の属性として「性別」及び「年齢」が指定されている場合、検索範囲としては、「男」かつ「２０歳以上４０歳未満」が指定される。
【００６７】
続いて、検索装置１は、クエリデータにより指定される複数の属性に対応するインデックス定義情報をインデックス定義格納部２６から取得する（Ｓ９１）。これにより、当該各属性についてのスキャッタマスクがそれぞれ取得される。
【００６８】
検索装置１は、（Ｓ９０）で取得されたクエリデータで指定される複数の属性値の中で未処理の属性が存在しなくなるまで以下の処理を繰り返す（Ｓ９２）。
検索装置１は、当該クエリデータで指定される複数の属性の中から未処理の１つの属性を選択する（Ｓ９３）。
【００６９】
検索装置１は、その選択された属性に対応するスキャッタマスクを用いて、その選択された属性の検索範囲を示す少なくとも１つの属性値に対してスキャッタ演算を適用する（Ｓ９４）。上記クエリデータの具体例によれば、属性「年齢」が選択された場合、検索装置１は、属性「年齢」の検索範囲を示す２つの属性値「２０歳」及び「４０歳」に対してスキャッタ演算を適用する。
【００７０】
検索装置１は、当該クエリデータで指定される全ての属性に対して処理が終わると（Ｓ９２；ＮＯ）、当該クエリデータで指定される属性の組み合わせ毎に、スキャッタされたビット列群をＯＲ演算することにより、検索キーを生成する（Ｓ９５）。上記具体例によれば、属性「性別」及び属性「年齢」の組み合わせに関し、属性値「男」に対するスキャッタ演算結果と、属性値「２０歳」に対応するスキャッタ演算結果とのＯＲ演算により１つの検索キーが生成される。更に、属性値「男」に対するスキャッタ演算結果と、属性値「４０歳」に対応するスキャッタ演算結果とのＯＲ演算により１つの検索キーが生成される。
【００７１】
検索装置１は、上述のインデックスキー生成方法で生成されたインデックスキーがソートされたインデックスの中から、生成された検索キーに適合するインデックスキー集合を特定し、この特定されたインデックスキー集合に対応するデータレコードをデータベース３５から抽出する（Ｓ９６）。本実施形態では、検索環境に適合するようにインデックスキーが生成されているため、（Ｓ９６）で特定されるインデックスキー集合は、記憶媒体上の連続した領域に配置されている可能性が高くなる。
【００７２】
〔第１実施形態の作用及び効果〕
上述したように第１実施形態では、インデックス定義情報１０５には、インデックス対象の複数の属性の各々に対応する複数のスキャッタマスクが含まれる。各スキャッタマスクは、インデックスキーと同じビット長のビット列であり、そのビット列において、対応する属性の各ビットが配置されるビット位置がマスクされている。第１実施形態では、各属性に対応する各スキャッタマスクに基づいて、各属性値がそれぞれスキャッタ演算され、スキャッタ演算で得られた各ビット列がＯＲ演算で集約されることで、インデックスキーが生成される。
【００７３】
従って、本実施形態によれば、インデックス定義情報１０５に含まれるスキャッタマスクセットを適切に設定すれば、検索環境に適合するインデックスキーを生成することができ、ひいては、検索効率を向上させることができる。
【００７４】
更に、本実施形態によれば、インデックス対象の属性の組み合わせ毎に、それぞれインデックス定義情報を持つことができるため、属性の各組み合わせに応じたインデックスキーの生成パターンを用いることができる。これにより、例えば、データベース３５内のテーブル毎に異なるインデックス生成パターンを用いることができるため、インデックスキーを検索環境に一層適合させることができ、検索効率を向上させやすくなる。
【００７５】
本実施形態によれば、スキャッタマスクというインデックス定義情報を用いることで、インデックスの生成パターンが一般化された。これにより、従来、全く別個の手法として用いられていた複合インデックス及びビットインタリービングの両方を１つのデータベース３５で使用することも可能となる。
【００７６】
また、本実施形態によれば、生成されるインデックスキーのビット長は、インデックス対象となる各属性のビット長の合計以上であればよく、属性間のビット長を無理に合わせる必要がないため、インデックスキーのサイズの増大を防ぐことができる。
【００７７】
更に、本実施形態によれば、インデックスキーの生成をスキャッタ演算及びＯＲ演算で実現しているため、インデックスキーの生成処理を高速化し易い。例えば、スキャッタ演算は、基本的なビット操作であるため、スキャッタ演算専用のハードウェアを持つＣＰＵが既に提供されていたり、スキャッタ演算に関する効率的なアルゴリズムが知られたりしている。また、本実施形態では、複数のビット列をまとめてビット操作する方法でインデックスキーが生成されるため、並列化がしやすく、ＳＩＭＤ（Single Instruction Multiple Data）命令を用いることもできる。
【００７８】
［第２実施形態］
第２実施形態における検索装置１は、更に、インデックス定義情報の外部からの設定、及び、インデックス定義情報の検査を可能とする。以下、第２実施形態における検索装置１について、第１実施形態と異なる内容を中心に説明し、第１実施形態と同様の内容については適宜省略する。
【００７９】
〔処理構成〕
図１０は、第２実施形態における検索装置１の処理構成例を概念的に示す図である。第２実施形態における検索装置１は、第１実施形態の処理部に加えて、更に、定義設定部４１及び定義検査部４２を有する。これら各処理部についても、他の処理部と同様に、ＣＰＵ１０によりメモリ１１に格納されるプログラムが実行されることにより実現される。
【００８０】
定義設定部４１は、インデックス対象の少なくとも１つの属性についてその属性の各ビットのインデックスキー中の配置を示す設定データを取得し、その取得された設定データの内容をインデックス定義格納部２６に格納する。設定データがインデックス定義格納部２６に既に格納されるインデックス定義情報を変更するためのデータである場合、定義設定部４１は、その設定データの内容をインデックス定義格納部２６に格納されるインデックス定義情報に反映する。
【００８１】
定義設定部４１は、設定データをデータベース３５の管理者等に入力させるための画面を検索装置１又は管理者端末に表示させ、その画面を介して管理者等により入力された設定データを取得するようにしてもよい。その画面は、例えば、管理者等に、各属性のビット列の、インデックスキー中のビット配置をそれぞれ指定させる画面である。例えば、インデックスキーの桁ごとに、どの属性のビットを割り当てるかの指定を受け付けるような画面であっても良い。また、設定データは、可搬型記録媒体、他のコンピュータ等から入出力Ｉ／Ｆ１２を経由して取得されてもよい。
【００８２】
定義設定部４１は、当該設定データを取得し、その設定データに基づいて各属性のスキャッタマスクをそれぞれ生成し、生成されたスキャッタマスクセットをインデックス定義格納部２６に格納する。定義設定部４１は、属性を特定し得る属性ＩＤと共にスキャッタマスクを取得し、その属性ＩＤ及びスキャッタマスクをインデックス定義格納部２６に格納するようにしてもよい。
【００８３】
定義検査部４２は、インデックス定義格納部２６に格納されるインデックス定義情報の妥当性を、当該インデックス定義情報により示されるインデックス対象の各属性についてのインデックスキー中のビット配置に基づいて、検査する。具体的には、定義検査部４２は、各属性の全ビットが、漏れなくインデックスキー中に配置されており、かつ、各属性の各ビットのインデックスキー中のビット位置が重複していないことを確認する。ここで、定義検査部４２により実行される当該検査のタイミングは、何ら制限されない。
【００８４】
例えば、インデックス定義情報がスキャッタマスクにより実現されている場合、定義検査部４２は、インデックス定義情報１０５に含まれる各属性のスキャッタマスクをＯＲ演算及びＡＮＤ演算することにより、全てのスキャッタマスクの妥当性を検査することができる。定義検査部４２は、ＯＲ演算の結果で１が設定されているビットの数をカウントし、カウントされたビット数と各属性のビット長の合計とが一致するか否かを確認する。定義検査部４２は、カウントされたビット数と各属性のビット長の合計とが一致し、かつ、ＡＮＤ演算の結果がゼロ（０）を示す場合、全てのスキャッタマスクが妥当と判断し、それ以外の場合、妥当でないスキャッタマスクが存在すると判断することができる。このようにインデックス定義情報がスキャッタマスクにより実現されている場合、定義検査部４２は、簡単なビット操作により、インデックス定義情報の妥当性を確認することができる。
【００８５】
〔動作例〕
次に、第２実施形態におけるインデックスキー生成方法について図１１を用いて説明する。図１１は、インデックスキー生成処理に関する第２実施形態における検索装置１の動作例を示すフローチャートである。第２実施形態では、（Ｓ１０１）、（Ｓ１０２）及び（Ｓ１０３）が追加されている点で、第１実施形態と異なる。
【００８６】
検索装置１は、インデックス対象となる属性の組み合わせに対応するインデックス定義情報を取得すると（Ｓ８１）、取得されたインデックス定義情報の妥当性を検査する（Ｓ１０１）。この妥当性の検査は、上述の定義検査部４２と同様であるため、ここでは説明を省略する。検索装置１は、インデックス定義情報が妥当である、即ち、全スキャッタマスクが妥当である場合（Ｓ１０２；ＹＥＳ）、第１実施形態と同様の手法によりインデックスキーを生成する。
【００８７】
一方、検索装置１は、インデックス定義情報が妥当でない、即ち、少なくとも１つのスキャッタマスクが妥当でない場合（Ｓ１０２；ＮＯ）、エラーを出力し（Ｓ１０３）、処理を終了する。ここで、本実施形態は、エラーの出力形態を制限しない。
【００８８】
〔第２実施形態の作用及び効果〕
上述のように、第２実施形態では、外部から設定データが取得され、その設定データの内容に基づいてインデックス定義情報が生成又は更新される。従って、本実施形態によれば、データベース３５の管理者等に、インデックスキーの生成パターンを設計し易くすることができる。また、本実施形態によれば、検索環境の把握状況等に応じてインデックスキーの生成パターンを調整（変更）したい場合にも、柔軟に対応可能である。
【００８９】
また、第２実施形態では、インデックス定義情報が自動で検査される。従って、第２実施形態によれば、外部からのインデックス定義情報の設定ミス等による不当なインデックスキーが生成されるのを防ぐことができる。更に、インデックス定義情報がスキャッタマスクセットで実現される場合には、各スキャッタマスクに対する単純なビット演算で妥当性の検査を行うことができるため、インデックス定義情報の自動検査を容易かつ高速に実行することができる。
【００９０】
［変形例］
上述の第２実施形態では、定義検査部４２が設けられ、自動でインデックス定義情報の検査が行われた。しかしながら、定義検査部４２が設けられなくてもよい。インデックス定義情報をスキャッタマスクセットで実現すれば、スキャッタマスク自体は、各属性の各ビットのインデックスキー中のビット配置を人に視認させ易いデータ形態である。そこで、スキャッタマスクセットを表示させることで、管理者等は、スキャッタマスクセットの妥当性を容易に判断することができる。
【００９１】
また、上述の各実施形態では、検索装置１は、１つの装置（コンピュータ）として実現されたが、複数の装置として実現されてもよい。上述の各実施形態は、例えば、インデックスキーを生成するインデックスキー生成装置と、検索を行う検索装置とから構成されてもよい。この場合、インデックスキー生成装置は、データ取得部２０、定義取得部２１、インデックス定義格納部２６を含み、検索装置は、クエリ取得部３１、定義取得部３２、検索キー生成部３３及びデータベース３５を含む。更に、各実施形態は、インデックス生成装置、検索装置、及び、データベース３５を格納するデータベース装置から構成されてもよい。
以下に実施例を挙げ、上述の各実施形態を更に詳細に説明する。本発明は以下の実施例に制限されない。
【実施例】
【００９２】
本実施例では、４ビットの属性Ａと２ビットの属性Ｂの２つの属性の組に対してインデックスキーを生成する例が挙げられる。以下の説明では、属性Ａのビット列が［Ａ１Ａ２Ａ３Ａ４］と表記され、属性Ｂのビット列が［Ｂ１Ｂ２］と表記される。また、インデックス定義情報１０５としてスキャッタマスクが利用される形態が例示される。
【００９３】
インデックスキーのビット配置を［Ａ１Ａ２Ｂ１Ａ３Ａ４Ｂ２］とする場合、属性Ａのスキャッタマスクは［１１０１１０］に設定され、属性Ｂのスキャッタマスクは［００１００１］に設定される。
また、上述の非特許文献１に示される複合インデックスでは、インデックスキーのビット配置は［Ａ１Ａ２Ａ３Ａ４Ｂ１Ｂ２］であるため、属性Ａのスキャッタマスクは［１１１１００］に設定され、属性Ｂのスキャッタマスクは［００００１１］に設定される。
上述の非特許文献２に示される左詰めのビットインタリーブでは、インデックスキーのビット配置は［Ａ１Ｂ１Ａ２Ｂ２Ａ３Ａ４］であるため、属性Ａのスキャッタマスクは［１０１０１１］に設定され、属性Ｂのスキャッタマスクは［０１０１００］に設定される。
【００９４】
上述の各実施形態によれば、このように、各属性の各ビットのインデックスキー中のビット配置を汎用的に細かく定義することができる。即ち、上述の各実施形態によれば、高速な範囲検索を実現するべく、範囲検索で取得されるレコード群が記憶媒体上で近くに配置されるようなインデックスキーを定義することができる。
【００９５】
本実施例では、インデックス定義情報１０５の好ましい実現形態としてスキャッタマスクが例示されたが、インデックス定義情報１０５は、間接的にスキャッタマスクのビット列のセットを生成しうるデータであってもよい。例えば、属性名とビット数の組を並べたデータとして、上記例のインデックス定義情報１０５は、［Ａ：２，Ｂ：１，Ａ：２，Ｂ：１］のように定義されてもよい。この場合、インデックスキーは、属性Ａから先頭２ビット、属性Ｂから先頭１ビット、属性Ａからその次の２ビット、属性Ｂからその次の１ビットより構成される。他にもインデックス定義情報１０５の実現形態は様々存在し得る。インデックス定義情報１０５は、上述したように、各属性の各ビットがインデックスキーにおいてどの位置にくるかを一意に示されているものであれば、その実現形態は制限されない。このようなインデックス定義情報１０５から、各属性のスキャッタマスクが生成されるようにしてもよい。
【００９６】
次に、インデックスキーの生成方法の具体例について図８を参照しながら説明する。
検索装置１は、属性Ａの属性値［Ａ１Ａ２Ａ３Ａ４］及び属性Ｂの属性値［Ｂ１Ｂ２］を取得し（Ｓ８０）、更に、属性Ａのスキャッタマスク［１１０１１０］及び属性Ｂのスキャッタマスク［００１００１］を取得する（Ｓ８１）。
【００９７】
検索装置１は、属性Ａのスキャッタマスク［１１０１１０］を用いて、属性Ａの属性値［Ａ１Ａ２Ａ３Ａ４］に対してスキャッタ演算を適用する（Ｓ８４）。このスキャッタ演算により、ビット列［Ａ１Ａ２０Ａ３Ａ４０］が生成される。更に、検索装置１は、属性Ｂのスキャッタマスク［００１００１］を用いて、属性Ｂの属性値［Ｂ１Ｂ２］に対してスキャッタ演算を適用する（Ｓ８４）。このスキャッタ演算により、ビット列［００Ｂ１００Ｂ２］が生成される。
【００９８】
スキャッタ操作（演算）は、基本的なビット操作であるため、スキャッタ操作に関し、専用のハードウェアを備えたＣＰＵがあったり、汎用的なビット演算の組み合わせで効率的なアルゴリズムが知られたりしている。ここでは、後者の既知のアルゴリズムの１つである並列プリフィックス法によるスキャッタ操作が例示される。
【００９９】
並列プリフィックス法は、再帰的なアルゴリズムであり、１ステップで全ビットを大まかな位置に移動させていくことでスキャッタ操作を実現する。ここでは、説明の便宜のため、２のべき乗数の一つである８ビットに拡幅したスキャッタマスクを用いたスキャッタ操作を例示する。この例では、属性Ａの属性値が［００００Ａ１Ａ２Ａ３Ａ４］と表記され、このビット列が属性Ａのスキャッタマスク［００１１０１１０］を用いてスキャッタ演算される。
【０１００】
まず、スキャッタマスクが２等分される。ここでは、スキャッタマスク［００１１０１１０］が上位ビット列［００１１］と下位ビット列［０１１０］とに分割される。
次に、上位ビット列［００１１］に含まれる１が設定されるビットの数がカウントされる。ここでは、ビット数２が得られる。
【０１０１】
次に、スキャッタ対象のビット列が２等分された下位ビット列の上位ビットから、カウントされたビット数（２）分が、上位ビット列に移動される。ここでは、スキャッタ対象の［００００Ａ１Ａ２Ａ３Ａ４］の下位ビット列［Ａ１Ａ２Ａ３Ａ４］の上位２ビット（カウントにより取得されたビット数分）、即ち、［Ａ１Ａ２］が上位に移動される。これにより、［００Ａ１Ａ２００Ａ３Ａ４］が取得される。
【０１０２】
そして、この取得されたビット列［００Ａ１Ａ２００Ａ３Ａ４］が［００Ａ１Ａ２］と［００Ａ３Ａ４］とに２等分される。これにより、スキャッタ対象［００Ａ１Ａ２］をスキャッタマスク［００１１］を用いてスキャッタ操作する第１の問題と、スキャッタ対象［００Ａ３Ａ４］をスキャッタマスク［０１１０］を用いてスキャッタ操作する第２の問題とに帰着する。
【０１０３】
次に、当該２つの問題の各々について、上述と同様の手順を再帰的に繰り返す。これら各スキャッタ操作は、それぞれ別のデータに対する操作であるため、並列に実行することができる。
【０１０４】
上記第１の問題については、ビット移動は生じず、ビット列［００Ａ１Ａ２］が［００］と［Ａ１Ａ２］とに２等分される。これにより、第１の問題は、スキャッタ対象［００］をスキャッタマスク［００］を用いてスキャッタ操作する第３の問題と、スキャッタ対象［Ａ１Ａ２］をスキャッタマスク［１１］を用いてスキャッタ操作する第４の問題とに帰着する。
【０１０５】
一方、上記第２の問題については、下位ビット列［Ａ３Ａ４］の上位１ビットが上位ビット列に移動され、ビット列［０Ａ３０Ａ４］が取得され、このビット列が［０Ａ３］と［０Ａ４］とに２等分される。これにより、第２の問題は、スキャッタ対象［０Ａ３］をスキャッタマスク「０１」を用いてスキャッタ操作する第５の問題と、スキャッタ対象［０Ａ４］をスキャッタマスク「１０」を用いてスキャッタ操作する第６の問題とに帰着する。
【０１０６】
更に、各問題がそれぞれ再帰的に処理される。これにより、上記第３の問題は、スキャッタ対象［０］をスキャッタマスク［０］を用いてスキャッタ操作する２つの問題に帰着する。上記第４の問題は、スキャッタ対象［Ａ１］をスキャッタマスク［１］を用いてスキャッタ操作する問題と、スキャッタ対象［Ａ２］をスキャッタマスク［１］を用いてスキャッタ操作する問題とに帰着する。上記第５の問題は、スキャッタ対象［０］をスキャッタマスク［０］を用いてスキャッタ操作する問題と、スキャッタ対象［Ａ３］をスキャッタマスク［１］を用いてスキャッタ操作する問題とに帰着する。上記第６の問題では、下位ビット［Ａ４］の１ビットが上位ビットに移動され、ビット列［Ａ４０］が取得され、このビット列が［Ａ４］と［０］とに２等分される。これにより、第６の問題は、スキャッタ対象［Ａ４］をスキャッタマスク［１］を用いてスキャッタ操作する問題と、スキャッタ対象［０］をスキャッタマスク［０］を用いてスキャッタ操作する問題とに帰着する。
【０１０７】
スキャッタマスクのビット長が１になると、それ以上は分割できないため、再帰処理は終了する。結果、［００Ａ１Ａ２０Ａ３Ａ４０］が取得される。従って、スキャッタマスクのビット長ｎ（＝８）に対して、Ｏ（ｌｏｇ  ｎ）ステップ（＝３）によりスキャッタ操作が可能となるため、並列プリフィックス法を用いれば、効率的にスキャッタ操作をすることができる。ここで、元の属性値が２のべき乗でない場合、上述のように２のべき乗数になるように０でパディングし、スキャッタ操作の結果からパディングされた０を取り除けば、所望の結果を得ることが出来る。
【０１０８】
上述のように各スキャッタ演算により、属性Ａについてビット列［Ａ１Ａ２０Ａ３Ａ４０］が生成され、属性Ｂについてビット列［００Ｂ１００Ｂ２］が生成される。検索装置１は、各スキャッタ演算の結果をＯＲ演算で１つのビット列に集約する（Ｓ８５）。これにより、［Ａ１Ａ２Ｂ１Ａ３Ａ４Ｂ２］がインデックスキーとして取得される。ＯＲ演算は、ＨＷで用意されている演算であることから高速に実行をすることができる。
【０１０９】
更に、上記のアルゴリズムは、ＳＩＭＤ命令と呼ばれる複数のデータに対して同一操作を同時に実行できる機能を備えているＣＰＵと相性がよい。なぜなら、ＳＩＭＤ命令により一度に長いビット列に対して並列に処理できるからである。本実施例は、このように、上述の各実施形態によれば、汎用性の高いインデックスキー定義をすることができ、かつ、効率的にインデックスキーを生成できることを示した。
【０１１０】
本実施例では、４ビット長の属性Ａ及び２ビットの属性Ｂが例示されたが、各属性のビット長は制限されない。インデックスキーは、レコードのスキーマ単位で用意されるため、レコードのスキーマ名と関連付けてインデックス定義情報１０５が保持されてもよい。このようにすれば、或るスキーマのレコードに対してインデックス定義情報１０５を参照する場合、そのスキーマ名に基づいて当該インデックス定義情報１０５が特定され得る。
【０１１１】
なお、上述の説明で用いた複数のフローチャートでは、複数の工程（処理）が順番に記載されているが、各実施形態で実行される工程の実行順序は、その記載の順番に制限されない。各実施形態では、図示される工程の順番を内容的に支障のない範囲で変更することができる。また、上述の各実施形態及び変形例は、内容が相反しない範囲で組み合わせることができる。
【０１１２】
この出願は、２０１３年１月１１日に出願された日本出願特願２０１３−００３８４２号を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【０１１３】
［付記1］
インデックス対象の複数の属性に関する複数の属性値を取得するデータ取得部と、
インデックス対象の各属性について、該属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報を取得する定義取得部と、
前記定義取得部により取得されるインデックス定義情報に基づいて、前記データ取得部により取得される複数の属性値をビット単位で配置することによりインデックスキーを生成するビット処理部と、
を備えるインデックスキー生成装置。
［付記2］
前記インデックス定義情報は、インデックス対象の各属性について、インデックスキーと同じビット長のビット列における、該属性の各ビットが配置されるビット位置がマスクされたスキャッタマスクをそれぞれ含み、
前記ビット処理部は、前記データ取得部により取得される各属性値に対して、該属性値の属性に対応するスキャッタマスクを用いたスキャッタ演算をそれぞれ適用し、該スキャッタ演算で得られた該属性毎のビット列をＯＲ演算で集約することにより前記インデックスキーを生成する、
付記１に記載のインデックスキー生成装置。
［付記3］
前記定義取得部は、インデックス対象の属性の各組み合わせに対応する複数のインデックス定義情報の中から、前記データ取得部により取得される複数の属性値の属性の組み合わせに対応するインデックス定義情報を選択的に取得する、
付記１又は２に記載のインデックスキー生成装置。
［付記4］
前記複数のインデックス定義情報は、インデックス対象の各属性についてそれぞれ示されるインデックスキー中のビット配置がインデックス定義情報間で異なる少なくとも２つのインデックス定義情報を含む、
付記３に記載のインデックスキー生成装置。
［付記5］
インデックス対象の少なくとも１つの属性について該属性の各ビットのインデックスキー中の配置を示す設定データを取得し、該設定データの内容を前記インデックス定義情報に反映する定義設定部、
を更に備える付記１から４のいずれか１項に記載のインデックスキー生成装置。
［付記6］
前記インデックス定義情報により示されるインデックス対象の各属性についてのインデックスキー中のビット配置に基づいて、該インデックス定義情報の妥当性を検査する定義検査部、
を更に備える付記１から５のいずれか１項に記載のインデックスキー生成装置。
［付記7］
前記インデックス定義情報は、前記各属性のビット列の並び順をそれぞれ維持し、かつ、前記各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むことを示す、
付記１から６のいずれか１項に記載のインデックスキー生成装置。
［付記8］
インデックス対象の複数の属性に関する複数の属性値を取得するデータ取得部と、
前記データ取得部により取得される複数の属性に関する複数の属性値を、ビット単位で配置することによりインデックスキーを生成するビット処理部と、
を備え、
前記ビット処理部は、
前記各属性のビット列の並び順がそれぞれ維持され、かつ、
前記複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、
前記各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むように、
前記複数の属性値をビット単位で配置する、
インデックスキー生成装置。
［付記9］
付記１から８のいずれか１項に記載のインデックスキー生成装置で生成されるインデックスキーがソートされたインデックスを用いる検索装置において、
検索対象の複数の属性に基づく検索範囲が指定されたクエリデータを取得するクエリ取得部と、
前記クエリ取得部により取得されるクエリデータにより指定される複数の属性に対応する前記インデックス定義情報を取得する定義取得部と、
前記定義取得部により取得されるインデックス定義情報に基づいて、前記クエリデータにより指定される検索範囲を示す、前記クエリデータにより指定される複数の属性に対応する検索キーを生成する検索キー生成部と、
を備える検索装置。
［付記10］
インデックス対象の複数の属性に関する複数の属性値を取得し、
インデックス対象の各属性について、該属性の各ビットの、インデックスキー中の配置をそれぞれ示すインデックス定義情報を取得し、
前記取得されたインデックス定義情報に基づいて、前記取得された複数の属性値をビット単位で配置することによりインデックスキーを生成する、
ことを含むインデックスキー生成方法。
［付記11］
前記インデックス定義情報は、インデックス対象の各属性について、インデックスキーと同じビット長のビット列における、該属性の各ビットが配置されるビット位置がマスクされたスキャッタマスクをそれぞれ含み、
前記インデックスキーの生成は、
前記取得された各属性値に対して、該属性値の属性に対応するスキャッタマスクを用いたスキャッタ演算をそれぞれ適用し、該スキャッタ演算で得られた該属性毎のビット列をＯＲ演算で集約することにより前記インデックスキーを生成する、
付記１０に記載のインデックスキー生成方法。
［付記12］
前記インデックス定義情報の取得は、インデックス対象の属性の各組み合わせに対応する複数のインデックス定義情報の中から、前記データ取得部により取得される複数の属性値の属性の組み合わせに対応するインデックス定義情報を選択的に取得する、
付記１０又は１１に記載のインデックスキー生成方法。
［付記13］
前記複数のインデックス定義情報は、インデックス対象の各属性についてそれぞれ示されるインデックスキー中のビット配置がインデックス定義情報間で異なる少なくとも２つのインデックス定義情報を含む、
付記１２に記載のインデックスキー生成方法。
［付記14］
インデックス対象の少なくとも１つの属性について該属性の各ビットのインデックスキー中の配置を示す設定データを取得し、
前記設定データの内容を前記インデックス定義情報に反映する、
ことを更に含む付記１０から１３のいずれか１項に記載のインデックスキー生成方法。
［付記15］
前記インデックス定義情報により示されるインデックス対象の各属性についてのインデックスキー中のビット配置に基づいて、該インデックス定義情報の妥当性を検査する、
ことを更に含む付記１０から１４のいずれか１項に記載のインデックスキー生成方法。
［付記16］
前記インデックス定義情報は、前記各属性のビット列の並び順をそれぞれ維持し、かつ、前記各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むことを示す、
付記１０から１５のいずれか１項に記載のインデックスキー生成方法。
［付記17］
インデックス対象の複数の属性に関する複数の属性値を取得し、
前記取得された複数の属性に関する複数の属性値をビット単位で配置することによりインデックスキーを生成する、
ことを含み、
前記インデックスキーの生成は、前記各属性のビット列の並び順がそれぞれ維持され、かつ、前記複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、前記各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含むように、前記複数の属性値をビット単位で配置する、
インデックスキー生成方法。
［付記18］
付記１０から１７のいずれか１項に記載のインデックスキー生成方法により生成されたインデックスキーがソートされたインデックスを用いる検索方法において、
検索対象の複数の属性に基づく検索範囲が指定されたクエリデータを取得し、
前記取得されたクエリデータにより指定される複数の属性に対応する前記インデックス定義情報を取得し、
前記取得されたインデックス定義情報に基づいて、前記クエリデータにより指定される検索範囲を示す、前記クエリデータにより指定される複数の属性に対応する検索キーを生成する、
ことを更に含む検索方法。
［付記19］
付記１０から１７のいずれか１項に記載のインデックスキー生成方法を少なくとも１つのコンピュータに実行させるプログラム。
［付記20］
付記１８に記載の検索方法を少なくとも１つのコンピュータに実行させるプログラム。
［付記21］
複数の属性に関する複数の属性値がビット単位で配置されることにより形成されるインデックスキーのデータ構造において、
前記インデックスキーは、
前記各属性のビット列の並び順をそれぞれ維持し、かつ、前記複数の属性の中の少なくとも一つの属性のビット列が不連続に並び、かつ、前記各属性のビット値が交互に並ぶ第１ビット列と、同じ属性のビット値が少なくとも２つ連続して並ぶ第２ビット列とのいずれか一方が他方を挟むビット配置を少なくとも一部に含み、
コンピュータが、
前記インデックスキーがソートされることで形成されるインデックスの中から、クエリデータにより指定される検索対象の複数の属性に基づく検索範囲に適合するインデックスキー集合を特定するために参照する、
インデックスキーのデータ構造。
【国際調査報告】
2014109109.tif 000019
2014109109.tif 000020
2014109109.tif 000021
2014109109.tif 000022