(57)【要約】【課題】キー値に対するバリューを取得する処理が行われる場合に、メモリの使用効率を向上させることができ、かつ、検索回数を低減できる検索装置を提供する。【解決手段】インデックス記憶手段８１は、対象データまたはその対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、そのキーと意味づけプレフィックスを含む１以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックスを記憶する。特定手段８２は、インデックスを用いて、検索条件に指定される意味づけプレフィックスからデータ構造を特定し、特定されたデータ構造を用いて検索条件を満たす対象データを特定する。ここで、データ構造において、対象データを特定するためのキーは、インデックスのキーとして用いられる意味づけプレフィックスを含まない。【選択図】図１３
2015176407.tif 000002
【特許請求の範囲】
【請求項１】
対象データまたは当該対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、当該キーと前記意味づけプレフィックスを含む１以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックスを記憶するインデックス記憶手段と、
前記インデックスを用いて、検索条件に指定される意味づけプレフィックスから前記データ構造を特定し、特定されたデータ構造を用いて前記検索条件を満たす対象データを特定する特定手段とを備え、
前記データ構造において、対象データを特定するためのキーは、前記インデックスのキーとして用いられる意味づけプレフィックスを含まない
ことを特徴とする検索装置。
【請求項２】
インデックス記憶手段は、キーである意味づけプレフィックスと下位のインデックスへの参照とを対応付けた上位インデックスを記憶し、
特定手段は、前記上位インデックスを用いて、検索条件に指定される意味づけプレフィックスから下位のインデックスを特定し、特定された下位のインデックスにより特定されるデータ構造を用いて検索条件を満たす対象データを特定する
請求項１記載の検索装置。
【請求項３】
対象データのデータ構造は、ハッシュインデックス型のキーバリューストア形式で表される
請求項１または請求項２記載の検索装置。
【請求項４】
特定手段は、検索条件に指定される意味づけプレフィックスから、ハッシュインデックス型のキーバリューストア形式で表されるデータ構造を特定し、特定されたデータ構造により特定される対象データの全てを取得する
請求項１から請求項３のうちのいずれか１項に記載の検索装置。
【請求項５】
対象データまたは当該対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、当該キーと前記意味づけプレフィックスを含む１以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックスを用いて、検索条件に指定される意味づけプレフィックスから前記データ構造を特定し、
特定されたデータ構造を用いて検索条件を満たす対象データを特定し、
前記データ構造において、対象データを特定するためのキーは、前記インデックスのキーとして用いられる意味づけプレフィックスを含まない
ことを特徴とする検索方法。
【請求項６】
キーである意味づけプレフィックスと下位のインデックスへの参照とを対応付けた上位インデックスを用いて、検索条件に指定される意味づけプレフィックスから下位のインデックスを特定し、
特定された下位のインデックスにより特定されるデータ構造を用いて検索条件を満たす対象データを特定する
請求項５記載の検索方法。
【請求項７】
検索条件に指定される意味づけプレフィックスから、ハッシュインデックス型のキーバリューストア形式で表されるデータ構造を特定し、
特定されたデータ構造により特定される対象データの全てを取得する
請求項５または請求項６記載の検索方法。
【請求項８】
コンピュータに、
対象データまたは当該対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、当該キーと前記意味づけプレフィックスを含む１以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックスを用いて、検索条件に指定される意味づけプレフィックスから前記データ構造を特定するデータ構造特定処理、および、
特定されたデータ構造を用いて検索条件を満たす対象データを特定する対象データ特定処理を実行させ、
前記データ構造において、対象データを特定するためのキーは、前記インデックスのキーとして用いられる意味づけプレフィックスを含まない
ことを特徴とする検索用プログラム。
【請求項９】
コンピュータに、
データ構造特定処理で、キーである意味づけプレフィックスと下位のインデックスへの参照とを対応付けた上位インデックスを用いて、検索条件に指定される意味づけプレフィックスから下位のインデックスを特定させ、
対象データ特定処理で、特定された下位のインデックスにより特定されるデータ構造を用いて検索条件を満たす対象データを特定させる
請求項８記載の検索用プログラム。
【請求項１０】
指定された検索条件を満たす対象データをコンピュータに特定させるための検索用データ構造であって、
前記対象データまたは当該対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、当該キーと前記意味づけプレフィックスを含む１以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックス構造を有し、
対象データの特定に用いられるデータ構造は、当該対象データを特定するためのキーとして前記意味づけプレフィックスを含まず、
前記インデックス構造のキーは、検索条件に前記意味づけプレフィックスが指定されたときに、当該意味づけプレフィックスに対応する前記データ構造を特定するために用いられる
ことを特徴とする検索用データ構造。
【請求項１１】
対象データのデータ構造は、ハッシュインデックス型のキーバリューストア形式で表される
請求項１０記載の検索用データ構造。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インデックス構造を利用して検索を行うための検索装置、検索方法、検索用プログラムおよび検索用データ構造に関する。
【背景技術】
【０００２】
データベースマネジメントシステム（以下、データベースと記す。）では、データを管理するために、インデックス構造を採用している。インデックス構造には、例えば、ハッシュインデックスが用いられる。
【０００３】
インデックス構造を用いて管理されるデータベースに対し、例えば、データを挿入する場合にはキーとバリューを指定し、データを取得する場合にはキーを指定する必要がある。なお、インデックス構造を用いてデータの挿入や取得が行えることから、以下の説明では、インデックス構造のことをデータ構造と記すこともある。
【０００４】
一方、データベースに対して範囲検索が要求されることがある。範囲検索が要求される場合、例えば、キーの範囲（Ｋｅｙ１〜Ｋｅｙ２）が指定されると、データベースでは、指定されたキーに対応するバリューを順次検索する。
【０００５】
図１４は、検索処理の一例を示す説明図である。例えば、プログラムに従って動作するクライアントから、範囲が指定された検索指示を受け取ると、マネジメントプログラムに従って動作するサーバは、キー順に並んだインデックス構造を有するデータベースに問い合わせを行い、順次データを取得し、取得したデータをクライアントに返却する。図１４に例示する矢印は、検索する方向を示す。
【０００６】
一方、ハッシュインデックスは、範囲検索を行うのが困難な構造であるため、範囲検索が行われる場合、セカンダリインデックスを作成する必要がある。なお、索引を生成する方法は、各種知られている。
【０００７】
例えば、特許文献１には、検索対象項目内の任意の位置から始まる検索キー値を作成する方式が記載されている。特許文献１に記載された方式では、レコードの追加、変更、削除が行われる際、検索対象項目から抽出した検索キー値と、その桁数および検索対象項目の先頭からの文字列位置を有する索引ファイルを作成する。
【０００８】
また、特許文献２には、レコード中で索引を定義した項目内の任意の位置から始まる部分キー値でレコード検索を行う方式が記載されている。特許文献２に記載された方式では、部分キー検索要求で指定される部分キー値のみを含む部分キー索引を作成することで、索引の蓄積コストを削減している。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平２−４３６７７号公報
【特許文献２】特開平２−１２２３７４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
範囲検索を行う場合に指定されるキーには様々なタイプが想定されるため、指定されるキーに応じて、複数のデータ構造（インデックス）を作成する必要がある。図１５は、複数のデータ構造を有するデータベースの例を示す説明図である。図１５に示す例では、データベースは、キーのタイプが「社員番号」であるデータ構造（インデックス）と、キーのタイプが「テーブル名．時間」であるデータ構造（インデックス）とを有している。
【００１１】
ここでは、キーのタイプが「社員番号」であるデータ構造（図１５における「社員番号によるデータ構造」）は、ハッシュインデックスであり、バリューが氏名であるとする。また、キーのタイプが「テーブル名．時間」であるデータ構造（図１５における「時間によるデータ構造」）は、Ｂ木インデックスであり、バリューが社員番号であるとする。
【００１２】
例えば、あるテーブルに含まれる社員のうち、ある期間にログインした社員のユーザデータを図１５に例示するデータベースから取得するとする。この場合、「時間によるデータ構造」のキーに対してテーブル名で前方一致検索を行って社員番号を取得する処理と、「社員番号によるデータ構造」のキーに対して、取得した社員番号で検索を行って氏名を取得する処理が行われる。
【００１３】
図１５に例示するようなテーブル名は、データベース内で多くの種類が存在するものではない。「時間によるデータ構造」に例示するキーのタイプは、「テーブル名．時間」であるため、同じ「テーブル名．時間」を含むキーが大量に作成されることになる。上述する「テーブル名」のような同じようなキーが大量に含まれると、メモリ効率が悪化し、また、テーブル名を検索する際の前方一致処理回数も増大してしまう。
【００１４】
なお、特許文献１に記載された方式では、検索対象項目から想定される全ての検索キー値を分割して生成し、管理する必要がある。そのため、索引として用いられる検索キー値が確定していない場合には、全ての検索キー値を作成しなければならず、現実的とは言えない。
【００１５】
また、特許文献２に記載された方式も、実運用で必要な部分を分割した部分キーのみを含む索引を作成することを想定しているため、索引として用いられる部分キーが確定していない場合には、全ての検索キー値を作成しなければならず、やはり、現実的とは言えない。
【００１６】
そのため、システムをスケールアウトする場合や、検索条件として想定されるキー値が増える場合を考慮すると、メモリの使用効率を向上させることができ、かつ、検索回数を低減できるようなデータ構造を用いて処理を行えることが望ましい。
【００１７】
そこで、本発明は、キー値に対するバリューを取得する処理が行われる場合に、メモリの使用効率を向上させることができ、かつ、検索回数を低減できる検索装置、検索方法、検索用プログラムおよび検索用データ構造を提供することを目的とする。
【課題を解決するための手段】
【００１８】
本発明による検索装置は、対象データまたはその対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、そのキーと意味づけプレフィックスを含む１以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックスを記憶するインデックス記憶手段と、インデックスを用いて、検索条件に指定される意味づけプレフィックスからデータ構造を特定し、特定されたデータ構造を用いて検索条件を満たす対象データを特定する特定手段とを備え、データ構造において、対象データを特定するためのキーは、インデックスのキーとして用いられる意味づけプレフィックスを含まないことを特徴とする。
【００１９】
本発明による検索方法は、対象データまたはその対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、そのキーと意味づけプレフィックスを含む１以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックスを用いて、検索条件に指定される意味づけプレフィックスからデータ構造を特定し、特定されたデータ構造を用いて検索条件を満たす対象データを特定し、データ構造において、対象データを特定するためのキーは、インデックスのキーとして用いられる意味づけプレフィックスを含まないことを特徴とする。
【００２０】
本発明による検索用プログラムは、コンピュータに、対象データまたはその対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、そのキーと意味づけプレフィックスを含む１以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックスを用いて、検索条件に指定される意味づけプレフィックスからデータ構造を特定するデータ構造特定処理、および、特定されたデータ構造を用いて検索条件を満たす対象データを特定する対象データ特定処理を実行させ、データ構造において、対象データを特定するためのキーは、インデックスのキーとして用いられる意味づけプレフィックスを含まないことを特徴とする。
【００２１】
本発明による検索用データ構造は、指定された検索条件を満たす対象データをコンピュータに特定させるための検索用データ構造であって、対象データまたはその対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、そのキーと意味づけプレフィックスを含む１以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックス構造を有し、対象データの特定に用いられるデータ構造は、その対象データを特定するためのキーとして意味づけプレフィックスを含まず、インデックス構造のキーは、検索条件に意味づけプレフィックスが指定されたときに、その意味づけプレフィックスに対応するデータ構造を特定するために用いられることを特徴とする。
【発明の効果】
【００２２】
本発明によれば、キー値に対するバリューを取得する処理が行われる場合に、メモリの使用効率を向上させることができ、かつ、検索回数を低減できる。
【図面の簡単な説明】
【００２３】
【図１】本発明による検索装置の一実施形態を示すブロック図である。
【図２】ユーザデータの検索に用いられるインデックスの例を示す説明図である。
【図３】ユーザデータと制御データの例を示す説明図である。
【図４】インデックスの例を示す説明図である。
【図５】インデックスの他の例を示す説明図である。
【図６】インデックスのさらに他の例を示す説明図である。
【図７】検索装置の動作例を示すフローチャートである。
【図８】検索装置が行う処理の例を示す説明図である。
【図９】ユーザデータを挿入する処理の例を示す説明図である。
【図１０】ユーザデータを検索する処理の例を示す説明図である。
【図１１】ユーザデータを更新する処理の例を示す説明図である。
【図１２】ユーザデータのキーをまとめる方法の例を示す説明図である。
【図１３】本発明による検索装置の概要を示すブロック図である。
【図１４】検索処理の一例を示す説明図である。
【図１５】複数のデータ構造を有するデータベースの例を示す説明図である。
【発明を実施するための形態】
【００２４】
以下、本発明の実施形態を図面を参照して説明する。
【００２５】
実施形態１．
図１は、本発明による検索装置の一実施形態を示すブロック図である。本実施形態の検索装置１０は、制御部２０と、記憶部３０とを備えている。
【００２６】
制御部２０は、指定された検索条件を満たすデータを特定する。制御部２０は、プログラム（検索用プログラム）に従って動作するコンピュータのＣＰＵによって実現される。例えば、プログラムは、検索装置１０の記憶部（図示せず）に記憶され、ＣＰＵは、そのプログラムを読み込み、プログラムに従って、制御部２０として動作する。なお、制御部２０が検索条件を満たすデータを特定する方法は、後述される。
【００２７】
記憶部３０は、検索対象のデータ（対象データ）を記憶する。なお、検索対象のデータ（対象データ）は、ユーザによって所望されるデータを表すことから、以下の説明では、検索対象のデータ（対象データ）のことを、ユーザデータと記す。
【００２８】
ユーザデータは、ストアに格納されるデータの単位であり、本実施形態では、例えば、キーバリュー形式で格納される。ユーザデータのキーには、後述するインデックスを用いて探索するための値が設定され、ユーザデータのバリューには、キーに対応付けられているストアの行の情報が設定される。
【００２９】
また、記憶部３０は、ユーザデータの大きさや、ユーザデータを更新した時間など、ユーザデータに付随する情報を、ユーザデータと対応付けて記憶していてもよい。このユーザデータに付随する情報は、ユーザデータ以外の情報であってプログラムの制御等に用いられる情報であるため、以下の説明では、この情報のことを制御データまたは制御情報と記す。
【００３０】
なお、制御データは、ユーザデータの大きさや、ユーザデータを更新した時間に限定されず、例えば、ユーザデータが格納されるデータベース名や、パーティション情報を含んでいてもよい。
【００３１】
また、記憶部３０は、ユーザデータの検索に用いられるインデックスを記憶する。図２は、ユーザデータの検索に用いられるインデックスの例を示す説明図である。図２に例示するインデックスは、Ｂ木インデックスであり、ツリーの先頭に位置するヘッダブロックが、キー値の範囲および下層のブロックのポインタを管理する。また、ツリーの最下層に位置するリーフブロックが、キー値と各ユーザデータの物理的な位置を管理する。
【００３２】
本実施形態では、検索条件に用いられるキーは予め把握されているものとする。ユーザデータの検索に用いられるインデックスは、予め把握されているキーに応じて作成される。
【００３３】
図３は、ユーザデータと制御データの例を示す説明図である。図３に示す例では、キーバリュー形式で格納されたユーザデータと、そのユーザデータに付随する制御データにデータベース名と更新時間とが含まれていることを示す。
【００３４】
なお、ユーザデータの検索に用いられるデータ構造は、Ｂ木インデックスに限定されず、ハッシュインデックスであってもよい。なお、Ｂ木インデックスの場合、ヘッダブロックやブランチブロックでキー値の範囲を管理し、リーフブロックに前後のリーフブロックへのポインタが含まれるため、範囲検索を行いやすいという利点がある。
【００３５】
さらに、本実施形態の記憶部３０は、ユーザデータまたは制御データから共通する意味単位で抽出されるデータをキーとし、そのキーと、そのデータを含むユーザデータの特定に用いられるデータ構造への参照とを対応付けたインデックスを記憶する。具体的には、このインデックスでは、ユーザデータまたは制御データから共通する意味単位で抽出されるデータがキーに対応し、抽出されたデータを含むユーザデータの特定に用いられるデータ構造への参照がバリューに対応する。また、このインデックスは、セカンダリインデックスの仕組みに着目したものである。ユーザデータの特定に用いられるデータ構造として、上述するＢ木インデックスが挙げられる。
【００３６】
本実施形態で用いられるインデックスのキーは、共通する意味単位で抽出されるデータであり、共通するユーザデータを特定するために用いられる情報であることから、意味づけプレフィックスキーと呼ぶことができる。すなわち、意味づけプレフィックスキーは、ユーザデータまたは制御データから共通する意味単位で抽出されるデータと言える。
【００３７】
意味づけプレフィックスの例として、例えば、ユーザデータに含まれるデータベース名やテーブル名、制御データに含まれるパーティション情報や更新時間などが挙げられる。
【００３８】
図４は、本実施形態で用いられるインデックスの例を示す説明図である。図４に例示するインデックスは、意味づけプレフィックスキーとしてテーブル名が用いられ、そのテーブル名を含むユーザデータを特定するデータ構造への参照（ポインタ）がキーに対応付けられていることを示す。
【００３９】
図４に示す例では、「日本電気」と「日本電気ソフト」がテーブル名という共通する意味単位で抽出されており、各テーブル名と、その各テーブル名を含むユーザデータのデータ構造へのポインタとが対応付けられている。
【００４０】
意味づけプレフィックスキーを含むインデックスは、ユーザデータのデータ構造の上位層のインデックスと言うことができる。そこで、ユーザデータを特定するためのデータ構造を含む層をユーザデータレイヤと記す。また、意味づけプレフィックスキーを含むインデックスを含む層を意味レイヤと記す。図４に示す例では、意味づけプレフィックスキーとしてテーブル名を用いているため、この意味レイヤをテーブル名レイヤと記している。
【００４１】
本実施形態では、意味づけプレフィックスキーにより該当するユーザデータを絞り込むため、ユーザデータを特定するためのデータ構造のキーは、意味レイヤにおけるインデックスのキーとして用いられる意味づけプレフィックスを含まない。意味づけプレフィックスの内容を含むユーザデータは意味レイヤにおけるインデックスにより特定されるため、ユーザデータを特定するためのデータ構造のキーに意味づけプレフィックスキーの内容は不要だからである。
【００４２】
例えば、あるテーブルに含まれる社員のうち、ある期間にログインした社員のユーザデータを検索するとする。この場合、検索条件には、テーブル名および期間が指定される。そのため、本実施形態で示すような意味レイヤにおけるインデックスが存在しない場合、図１５に例示するように、キーのタイプが「テーブル名．時間」であるデータ構造を準備する必要がある。
【００４３】
一方、本実施形態では、意味レイヤにおいて意味単位の情報をまとめたデータ構造を用意することで、データを重複して保持することを抑制できるため、メモリの使用効率を向上させることができる。
【００４４】
例えば、キーバリューストア形式のデータが１０億件存在し、テーブル名とユーザ名とを組み合わせたキーが、テーブル名とユーザ名とでそれぞれ４バイトの空間を使用するものとする。この場合、一般的なデータ構造では、テーブル名とユーザ名とを組み合わせた全てのキーを保持する必要があるため、（４バイト＋４バイト）×１Ｇ（ギガ）＝８ギガバイトのメモリを使用する。一方、本実施形態のデータ構造をでは、重複するテーブル名をキーに保持する必要がないため、４バイト×１Ｇ（ギガ）＝４ギガバイトのメモリを使用するだけで済むことになる。
【００４５】
また、本実施形態では、検索条件に一致するキーの検索が、意味レイヤにおける検索のみで済むため、キー値の検索回数を大幅に削減できる。また、データの範囲検索を行う場合にも、意味を付与したデータ構造（意味レイヤのインデックス）を参照することで、効率よくデータを検索できる。
【００４６】
例えば、キーバリューストア形式のデータが１０億件存在し、テーブル名が「日本電気」のデータが５億件、テーブル名が「日本電気ソフト」のデータが５億件存在するものとする。ここで、テーブル名が「日本電気」のデータを検索する場合、一般的なデータ構造では、テーブル名が「日本電気」で前方一致する１０億件のデータをすべて検索する必要があるため、検索回数は１０億回必要になる。一方、本実施形態のデータ構造をでは、意味レイヤでテーブル名が一致するインデックスのみ特定すればよいため、検索回数は１回で済むことになる。
【００４７】
なお、意味レイヤにおけるインデックスのキーには、ユーザデータに含まれるデータだけでなく、制御データに含まれる更新時間やパーティション情報などのデータが用いられてもよい。また、各レイヤのキーは、ソートされていてもよく、ソートされていなくてもよい。
【００４８】
また、意味レイヤにおけるインデックスを表現する方法には、１次元配列やハッシュインデックス、Ｂ木インデックスなど、任意の方法を用いることが可能である。図５は、本実施形態で用いられるインデックスの他の例を示す説明図である。図５に示す例では、１次元配列を用いて意味レイヤにおけるインデックスが表現され、ハッシュインデックスを用いてユーザデータを特定するためのデータ構造が表現されていることを示す。
【００４９】
制御部２０は、意味レイヤにおけるインデックスを用いて、検索条件に指定される意味づけプレフィックスからデータ構造を特定する。そして、制御部２０は、特定されたデータ構造を用いて検索条件を満たす対象データを特定し、特定した結果を検索結果として返却する。
【００５０】
なお、上記説明では、意味レイヤが１段の場合について例示しているが、意味レイヤの階層は１段に限定されず、２段以上であってもよい。すなわち、記憶部３０は、キーである意味づけプレフィックスと下位のインデックスへの参照とを対応付けた上位インデックスを記憶してもよい。このとき、制御部２０は、上位インデックスを用いて、検索条件に指定される意味づけプレフィックスから下位のインデックスを特定し、特定された下位のインデックスにより特定されるデータ構造を用いて検索条件を満たす対象データを特定する。
【００５１】
より詳しくは、上位インデックスに設定される意味づけプレフィックスキーは、参照する下位のインデックスにより特定されるユーザデータまたはそのユーザデータに付随する制御データから共通する意味単位で抽出されるデータである。インデックスの階層の順序は、検索条件に指定される意味づけプレフィックスの順序に応じて定めておけばよい。
【００５２】
図６は、本実施形態で用いられるインデックスのさらに他の例を示す説明図である。図６に示す例は、２段の意味レイヤが存在し、パーティション情報が上位インデックスとして、また、データベース名が下位インデックスとして階層化されている。
【００５３】
例えば、図６に例示する状況で、パーティション情報が「１」で、データベース名が「Ａ」のユーザデータを検索する旨を指定した検索条件が入力されたとする。このとき、制御部２０は、パーティション情報レイヤにおけるインデックス（上位インデックス）を用いて、検索条件に指定されたパーティション情報「１」から下位のインデックスを特定する。さらに、制御部２０は、特定されたインデックスを用いて、検索条件に指定されたデータベース名「Ａ」からユーザデータのデータ構造を特定する。この結果、図６に例示する網掛けの部分のデータが検索されることになる。
【００５４】
このように、上位レイヤから下位レイヤに探索処理が移動することは、各レイヤにおいて対象データを絞り込むことに対応する。言い換えると、各レイヤでは、データのフィルタ処理が行われていると言えるため、このように構築されたインデックスを有する装置は、前方一致機能を有していると言える。
【００５５】
したがって、意味レイヤを適切に増加させることで、ユーザデータのキーに対する前方一致検索の回数を低減できるため、範囲検索における絞り込みを効率的に行うことが可能になる。例えば、図６に示す例では、パーティション情報とデータベース名とを組み合わせた範囲検索を効率的に行うことが可能になる。
【００５６】
なお、図６に例示する状況において、データベース名のみを指定する検索条件が入力された場合、制御部２０は、データベース名レイヤにおけるインデックスのみを用いて、ユーザデータを特定するためのデータ構造を特定してもよい。
【００５７】
例えば、図６に例示する状況で、データベース名が「Ａ」のユーザデータを検索する旨を指定した検索条件が入力されたとする。このとき、制御部２０は、データベース名レイヤにおけるインデックスを用いて、検索条件に指定されたデータベース名「Ａ」からユーザデータのデータ構造を特定してもよい。
【００５８】
次に、本実施形態の検索装置の動作を説明する。図７は、本実施形態の検索装置の動作例を示すフローチャートである。制御部２０は、キーである意味づけプレフィックスとユーザデータの特定に用いられるデータ構造への参照とを対応付けたインデックスを用いて、ユーザデータのデータ構造を特定する（ステップＳ１１）。そして、制御部２０は、特定されたデータ構造を用いて検索条件を満たすユーザデータを特定する（ステップＳ１２）。
【００５９】
次に、本実施形態の検索装置が行う処理を具体例を用いて説明する。図８は、本実施形態の検索装置が行う処理の例を示す説明図である。図８に示す例では、  ユーザデータの特定に必要なキー値が「データベース名．ユーザデータ」であるとする。この場合、図８に例示するように、データベース名を意味づけプレフィックスとするインデックスを作成する。図８に例示するインデックスにおいて、キーはデータベース名（「日本電気」および「日本電気ソフト」）であり、バリューはデータ構造への矢印（参照）である。
【００６０】
また、データベース名レイヤにおけるインデックスのキーにデータベース名が含まれるため、ユーザデータのキーにデータベース名は不要である。例えば、図８に示すように、キーである「社員番号」とバリューである「氏名」のみを対応付けておけばよい。
【００６１】
このようなインデックスおよびデータ構造を準備しておくことで、制御部２０は、データベース名レイヤとユーザデータレイヤを順に探索することで、検索条件を満たすユーザデータを特定することが可能になる。
【００６２】
さらに、本実施形態では、あるデータベースに格納された全てのユーザデータを取得することも容易である。例えば、図８に示す例で、検索条件としてデータベース名のみ指定されたとする。その場合、制御部２０は、指定されたデータベース名に対応する参照を特定するだけでよく、個々のユーザデータを検索する必要がない。このような探索により検索条件を満たすユーザデータをすべて取得することが可能になるため、検索のコストをより低減できる。
【００６３】
本実施形態のインデックスは、範囲検索を苦手とするハッシュインデックスタイプのデータベースシステムに適用した場合、より効果的に機能する。例えば、オープンソースソフトウェアであるＫｒａｔｉは、ハッシュインデックスのキーバリューストアを用いている。すなわち、Ｋｒａｔｉは、ハッシュインデックス型のデータベースにより実現されるため、キーを指定した１データへのアクセスは高速であるが、範囲検索は非常に遅い。また、Ｋｒａｔｉでサポートするキーはユニークキーのみであり、重複キーはサポートしていない。このようなデータベースであっても、本実施形態のインデックスを範囲検索用のセカンダリインデックスとして作成することで、範囲検索を向上させることができる。
【００６４】
このように、ユーザデータがハッシュインデックス型のキーバリューストアで表されるデータ構造の場合、本実施形態のインデックスを用いることで、苦手とする範囲検索の処理速度を向上させることができる。
【００６５】
例えば、図８に示す例のように、ある範囲のデータをすべて取得するような場合を考える。この場合、制御部２０は、検索条件に指定される意味づけプレフィックスキーから、ハッシュインデックス型のキーバリューストア形式で表されるデータ構造を特定する。ここで特定されたデータ構造により特定されるユーザデータは、検索条件を満たすユーザデータであるため、制御部２０は、このユーザデータをすべて取得してもよい。このような処理を行うことで、個々のユーザデータの検索を行う必要がないため、ハッシュインデックスの特徴を生かしつつ、範囲検索の処理速度を向上できる。
【００６６】
以下、本実施形態のインデックスを用いた場合のユーザデータアクセス方法（挿入、検索、削除および更新）を説明する。以下の説明では、時間をキーとするインデックスを利用するものとする。
【００６７】
まず、ユーザデータの挿入手順を説明する。図９は、ユーザデータを挿入する処理の例を示す説明図である。図９に例示するデータベースにデータを挿入する場合、時間とユーザデータのキーとが指定される。まず、制御部２０は、指定された時間が時間レイヤのインデックスのキーに存在するか確認する。なお、時間レイヤのキーは、ソートされていてもよく、ソートされていなくてもよい。
【００６８】
インデックスのキーがソートされている場合、制御部２０は、インデックスの順番にキーを探索する。この場合、インデックスの検索を二分探索などにより高速化することが可能である。指定された時間が存在する場合、制御部２０は、そのキーに対応する参照が示すユーザデータのデータ構造に対してユーザデータを挿入する。一方、指定された時間が存在しない場合、制御部２０は、インデックスに指定された時間を新しいキーとして挿入し、挿入したキーに対応する参照が示す位置にユーザデータを挿入する。
【００６９】
一方、インデックスがソートされていない場合、制御部２０は、キーが見つかるまでインデックスの順番にキーを検索する。そのため、場合によりキーの全件検索が行われる。指定された時間が存在する場合、制御部２０は、そのキーに対応する参照が示すユーザデータのデータ構造に対してユーザデータを挿入する。一方、指定された時間が存在しない場合、制御部２０は、インデックスの最後に指定された時間を新しいキーとして挿入し、挿入したキーに対応する参照が示す位置にユーザデータを挿入する。
【００７０】
次に、ユーザデータの検索手順を説明する。図１０は、ユーザデータを検索する処理の例を示す説明図である。データを検索する場合も、時間とユーザデータのキーとが指定される。まず、制御部２０は、上位のレイヤから順に探索を実施する。図１０に示す例では、制御部２０は、まず、指定された時間がインデックスのキーに存在するか検索する。指定された時間がキーに存在しない場合、制御部２０は、データが存在しない旨の情報を返却する。
【００７１】
一方、指定された時間がキーに存在する場合、制御部２０は、指定された時間に対応する参照が示すユーザデータのデータ構造から、指定されたユーザデータのキーに対応するデータを検索し、特定したデータを１件または複数件返却する。
【００７２】
次に、ユーザデータの削除手順を説明する。データを削除する場合も、時間とユーザデータのキーとが指定される。削除する場合には、上述する検索手順と同様に、制御部２０は、まず指定された時間が時間レイヤのインデックスのキーに存在するか検索し、その後、ユーザデータレイヤにおけるユーザデータの有無を検索する。ユーザデータが存在する場合、制御部２０は、そのデータが存在しないものとする処理を行う。制御部２０は、そのデータを物理的に削除してもよく、論理的に削除してもよい。
【００７３】
次に、ユーザデータの更新手順を説明する。図１１は、ユーザデータを更新する処理の例を示す説明図である。データを更新する場合も、時間とユーザデータのキーとが指定される。更新する場合にも、上述する検索手順と同様に、制御部２０は、ユーザデータの有無を検索する。ユーザデータが存在する場合、上述する削除手順と同様に、制御部２０は、そのデータが存在しないものとする処理を行う（図１１における破線）。そして、制御部２０は、上述する挿入手順と同様に、更新後の新しいデータの挿入処理を行う（図１１における一点鎖線）。
【００７４】
以上のように、本実施形態では、制御部２０が、キーである意味づけプレフィックスと、ユーザデータの特定に用いられるデータ構造への参照とを対応付けたインデックスを用いて、検索条件に指定される意味づけプレフィックスからデータ構造を特定する。このデータ構造において、ユーザデータを特定するためのキーには、インデックスのキーとして用いられる意味づけプレフィックスを含まれない。そして、制御部２０が、特定されたデータ構造を用いて、検索条件を満たすユーザデータを特定する。
【００７５】
そのため、キー値に対するバリューを取得する処理が行われる場合に、メモリの使用効率を向上させることができ、かつ、検索回数を低減できる。
【００７６】
また、本実施形態のインデックスを用いることで、汎用的に使用されているデータベースであっても、ユーザごとに検索処理のチューニングを行うことができる。したがって、汎用データベースであっても、特化データベースのように扱うことができるため、性能を大幅に向上させることが可能になる。
【００７７】
なお、例えば、メモリの使用効率を向上させる方法として、ユーザデータのキーのうち、先頭部分が共通するキーを１つにまとめる方法も考えられる。図１２は、ユーザデータのキーをまとめる方法の例を示す説明図である。
【００７８】
図１２に示す例では、２つのキー「ａａａｂｂｂｃｃｃｄ」と「ａａｂｂｂｂｃｃ」が存在する場合に、共通する文字列の一部である「ａａ」でキーをまとめている。しかし、この方法は、共通する部分を範囲検索される文字でまとめるのは難しく、また、前方一致する文字列が共通しなければ適用できない。
【００７９】
しかし、本実施形態では、ユーザデータまたはその対象データに付随する制御データから共通する意味単位で抽出した意味づけプレフィックスキーを有するインデックスを作成している。意味単位で共通する情報は、ユーザが範囲検索の際に用いる情報との相性がよいため、メモリの使用効率を上げるだけでなく、検索処理も低減できる。
【００８０】
次に、本発明の概要を説明する。図１３は、本発明による検索装置の概要を示すブロック図である。本発明による検索装置は、対象データ（例えば、ユーザデータ）またはその対象データに付随する制御情報（例えば、制御データ）から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、そのキーと意味づけプレフィックスを含む１以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックス（例えば、意味レイヤにおけるインデックス）を記憶するインデックス記憶手段８１（例えば、記憶部３０）と、インデックスを用いて、検索条件に指定される意味づけプレフィックスからデータ構造（例えば、ユーザレイヤにおけるデータ構造）を特定し、特定されたデータ構造を用いて検索条件を満たす対象データを特定する特定手段８２（例えば、制御部２０）とを備えている。
【００８１】
ここで、データ構造において、対象データを特定するためのキーは、インデックスのキーとして用いられる意味づけプレフィックスを含まない。
【００８２】
そのような構成により、キー値に対するバリューを取得する処理が行われる場合に、メモリの使用効率を向上させることができ、かつ、検索回数を低減できる。すなわち、ユーザデータの共通するキーの一部を、インデックスのキーとしてまとめているため、メモリ使用効率を向上できる。また、インデックスのキーを特定することでユーザデータの範囲を特定できるため、キー値の検索回数も低減できる。
【００８３】
また、インデックス記憶手段８１は、キーである意味づけプレフィックスと下位のインデックスへの参照とを対応付けた上位インデックスを記憶してもよい。そして、特定手段８２は、上位インデックスを用いて、検索条件に指定される意味づけプレフィックスから下位のインデックスを特定し、特定された下位のインデックスにより特定されるデータ構造を用いて検索条件を満たす対象データを特定してもよい。
【００８４】
このような構成により、各インデックスが示す意味レイヤを適切に増加させることができるため、ユーザデータのキーに対する前方一致検索の回数を低減でき、範囲検索における絞り込みを効率的に行うことが可能になる。
【００８５】
また、対象データのデータ構造は、ハッシュインデックス型のキーバリューストア形式で表されていてもよい。一般に、ハッシュインデックス型のキーバリューストア形式のデータ構造では、範囲検索は困難である。しかし、本実施形態のインデックスを用いることで範囲検索を可能にしつつ、ハッシュインデックスの利点も生かすことが可能になる。
【００８６】
また、特定手段８２は、検索条件に指定される意味づけプレフィックスから、ハッシュインデックス型のキーバリューストア形式で表されるデータ構造を特定し、特定されたデータ構造により特定される対象データの全てを取得してもよい。この場合、特定手段８２は、指定された検索条件に対応する参照を特定するだけでよく、個々のユーザデータを検索する必要がない。このような探索により検索条件を満たす対象データをすべて取得することが可能になるため、検索のコストをより低減できる。
【産業上の利用可能性】
【００８７】
本発明は、インデックス構造を利用して検索を行うための検索装置に好適に適用される。また、本発明は、ストレージのインデックス構造を利用した者であり、例えば、Ｋｒａｔｉが利用するインデックス構造を有するストレージ全般に適用可能である。
【符号の説明】
【００８８】
１０  検索装置
２０  制御部
３０  記憶部
【図１】
2015176407.tif 000003
【図２】
2015176407.tif 000004
【図３】
2015176407.tif 000005
【図４】
2015176407.tif 000006
【図５】
2015176407.tif 000007
【図６】
2015176407.tif 000008
【図７】
2015176407.tif 000009
【図８】
2015176407.tif 000010
【図９】
2015176407.tif 000011
【図１０】
2015176407.tif 000012
【図１１】
2015176407.tif 000013
【図１２】
2015176407.tif 000014
【図１３】
2015176407.tif 000015
【図１４】
2015176407.tif 000016
【図１５】
2015176407.tif 000017