JP2015176407A - 検索装置、検索方法、検索用プログラムおよび検索用データ構造 - Google Patents
検索装置、検索方法、検索用プログラムおよび検索用データ構造 Download PDFInfo
- Publication number
- JP2015176407A JP2015176407A JP2014052971A JP2014052971A JP2015176407A JP 2015176407 A JP2015176407 A JP 2015176407A JP 2014052971 A JP2014052971 A JP 2014052971A JP 2014052971 A JP2014052971 A JP 2014052971A JP 2015176407 A JP2015176407 A JP 2015176407A
- Authority
- JP
- Japan
- Prior art keywords
- data
- index
- key
- semantic
- prefix
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】キー値に対するバリューを取得する処理が行われる場合に、メモリの使用効率を向上させることができ、かつ、検索回数を低減できる検索装置を提供する。
【解決手段】インデックス記憶手段81は、対象データまたはその対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、そのキーと意味づけプレフィックスを含む1以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックスを記憶する。特定手段82は、インデックスを用いて、検索条件に指定される意味づけプレフィックスからデータ構造を特定し、特定されたデータ構造を用いて検索条件を満たす対象データを特定する。ここで、データ構造において、対象データを特定するためのキーは、インデックスのキーとして用いられる意味づけプレフィックスを含まない。
【選択図】図13
【解決手段】インデックス記憶手段81は、対象データまたはその対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、そのキーと意味づけプレフィックスを含む1以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックスを記憶する。特定手段82は、インデックスを用いて、検索条件に指定される意味づけプレフィックスからデータ構造を特定し、特定されたデータ構造を用いて検索条件を満たす対象データを特定する。ここで、データ構造において、対象データを特定するためのキーは、インデックスのキーとして用いられる意味づけプレフィックスを含まない。
【選択図】図13
Description
本発明は、インデックス構造を利用して検索を行うための検索装置、検索方法、検索用プログラムおよび検索用データ構造に関する。
データベースマネジメントシステム(以下、データベースと記す。)では、データを管理するために、インデックス構造を採用している。インデックス構造には、例えば、ハッシュインデックスが用いられる。
インデックス構造を用いて管理されるデータベースに対し、例えば、データを挿入する場合にはキーとバリューを指定し、データを取得する場合にはキーを指定する必要がある。なお、インデックス構造を用いてデータの挿入や取得が行えることから、以下の説明では、インデックス構造のことをデータ構造と記すこともある。
一方、データベースに対して範囲検索が要求されることがある。範囲検索が要求される場合、例えば、キーの範囲(Key1〜Key2)が指定されると、データベースでは、指定されたキーに対応するバリューを順次検索する。
図14は、検索処理の一例を示す説明図である。例えば、プログラムに従って動作するクライアントから、範囲が指定された検索指示を受け取ると、マネジメントプログラムに従って動作するサーバは、キー順に並んだインデックス構造を有するデータベースに問い合わせを行い、順次データを取得し、取得したデータをクライアントに返却する。図14に例示する矢印は、検索する方向を示す。
一方、ハッシュインデックスは、範囲検索を行うのが困難な構造であるため、範囲検索が行われる場合、セカンダリインデックスを作成する必要がある。なお、索引を生成する方法は、各種知られている。
例えば、特許文献1には、検索対象項目内の任意の位置から始まる検索キー値を作成する方式が記載されている。特許文献1に記載された方式では、レコードの追加、変更、削除が行われる際、検索対象項目から抽出した検索キー値と、その桁数および検索対象項目の先頭からの文字列位置を有する索引ファイルを作成する。
また、特許文献2には、レコード中で索引を定義した項目内の任意の位置から始まる部分キー値でレコード検索を行う方式が記載されている。特許文献2に記載された方式では、部分キー検索要求で指定される部分キー値のみを含む部分キー索引を作成することで、索引の蓄積コストを削減している。
範囲検索を行う場合に指定されるキーには様々なタイプが想定されるため、指定されるキーに応じて、複数のデータ構造(インデックス)を作成する必要がある。図15は、複数のデータ構造を有するデータベースの例を示す説明図である。図15に示す例では、データベースは、キーのタイプが「社員番号」であるデータ構造(インデックス)と、キーのタイプが「テーブル名.時間」であるデータ構造(インデックス)とを有している。
ここでは、キーのタイプが「社員番号」であるデータ構造(図15における「社員番号によるデータ構造」)は、ハッシュインデックスであり、バリューが氏名であるとする。また、キーのタイプが「テーブル名.時間」であるデータ構造(図15における「時間によるデータ構造」)は、B木インデックスであり、バリューが社員番号であるとする。
例えば、あるテーブルに含まれる社員のうち、ある期間にログインした社員のユーザデータを図15に例示するデータベースから取得するとする。この場合、「時間によるデータ構造」のキーに対してテーブル名で前方一致検索を行って社員番号を取得する処理と、「社員番号によるデータ構造」のキーに対して、取得した社員番号で検索を行って氏名を取得する処理が行われる。
図15に例示するようなテーブル名は、データベース内で多くの種類が存在するものではない。「時間によるデータ構造」に例示するキーのタイプは、「テーブル名.時間」であるため、同じ「テーブル名.時間」を含むキーが大量に作成されることになる。上述する「テーブル名」のような同じようなキーが大量に含まれると、メモリ効率が悪化し、また、テーブル名を検索する際の前方一致処理回数も増大してしまう。
なお、特許文献1に記載された方式では、検索対象項目から想定される全ての検索キー値を分割して生成し、管理する必要がある。そのため、索引として用いられる検索キー値が確定していない場合には、全ての検索キー値を作成しなければならず、現実的とは言えない。
また、特許文献2に記載された方式も、実運用で必要な部分を分割した部分キーのみを含む索引を作成することを想定しているため、索引として用いられる部分キーが確定していない場合には、全ての検索キー値を作成しなければならず、やはり、現実的とは言えない。
そのため、システムをスケールアウトする場合や、検索条件として想定されるキー値が増える場合を考慮すると、メモリの使用効率を向上させることができ、かつ、検索回数を低減できるようなデータ構造を用いて処理を行えることが望ましい。
そこで、本発明は、キー値に対するバリューを取得する処理が行われる場合に、メモリの使用効率を向上させることができ、かつ、検索回数を低減できる検索装置、検索方法、検索用プログラムおよび検索用データ構造を提供することを目的とする。
本発明による検索装置は、対象データまたはその対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、そのキーと意味づけプレフィックスを含む1以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックスを記憶するインデックス記憶手段と、インデックスを用いて、検索条件に指定される意味づけプレフィックスからデータ構造を特定し、特定されたデータ構造を用いて検索条件を満たす対象データを特定する特定手段とを備え、データ構造において、対象データを特定するためのキーは、インデックスのキーとして用いられる意味づけプレフィックスを含まないことを特徴とする。
本発明による検索方法は、対象データまたはその対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、そのキーと意味づけプレフィックスを含む1以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックスを用いて、検索条件に指定される意味づけプレフィックスからデータ構造を特定し、特定されたデータ構造を用いて検索条件を満たす対象データを特定し、データ構造において、対象データを特定するためのキーは、インデックスのキーとして用いられる意味づけプレフィックスを含まないことを特徴とする。
本発明による検索用プログラムは、コンピュータに、対象データまたはその対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、そのキーと意味づけプレフィックスを含む1以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックスを用いて、検索条件に指定される意味づけプレフィックスからデータ構造を特定するデータ構造特定処理、および、特定されたデータ構造を用いて検索条件を満たす対象データを特定する対象データ特定処理を実行させ、データ構造において、対象データを特定するためのキーは、インデックスのキーとして用いられる意味づけプレフィックスを含まないことを特徴とする。
本発明による検索用データ構造は、指定された検索条件を満たす対象データをコンピュータに特定させるための検索用データ構造であって、対象データまたはその対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、そのキーと意味づけプレフィックスを含む1以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックス構造を有し、対象データの特定に用いられるデータ構造は、その対象データを特定するためのキーとして意味づけプレフィックスを含まず、インデックス構造のキーは、検索条件に意味づけプレフィックスが指定されたときに、その意味づけプレフィックスに対応するデータ構造を特定するために用いられることを特徴とする。
本発明によれば、キー値に対するバリューを取得する処理が行われる場合に、メモリの使用効率を向上させることができ、かつ、検索回数を低減できる。
以下、本発明の実施形態を図面を参照して説明する。
実施形態1.
図1は、本発明による検索装置の一実施形態を示すブロック図である。本実施形態の検索装置10は、制御部20と、記憶部30とを備えている。
図1は、本発明による検索装置の一実施形態を示すブロック図である。本実施形態の検索装置10は、制御部20と、記憶部30とを備えている。
制御部20は、指定された検索条件を満たすデータを特定する。制御部20は、プログラム(検索用プログラム)に従って動作するコンピュータのCPUによって実現される。例えば、プログラムは、検索装置10の記憶部(図示せず)に記憶され、CPUは、そのプログラムを読み込み、プログラムに従って、制御部20として動作する。なお、制御部20が検索条件を満たすデータを特定する方法は、後述される。
記憶部30は、検索対象のデータ(対象データ)を記憶する。なお、検索対象のデータ(対象データ)は、ユーザによって所望されるデータを表すことから、以下の説明では、検索対象のデータ(対象データ)のことを、ユーザデータと記す。
ユーザデータは、ストアに格納されるデータの単位であり、本実施形態では、例えば、キーバリュー形式で格納される。ユーザデータのキーには、後述するインデックスを用いて探索するための値が設定され、ユーザデータのバリューには、キーに対応付けられているストアの行の情報が設定される。
また、記憶部30は、ユーザデータの大きさや、ユーザデータを更新した時間など、ユーザデータに付随する情報を、ユーザデータと対応付けて記憶していてもよい。このユーザデータに付随する情報は、ユーザデータ以外の情報であってプログラムの制御等に用いられる情報であるため、以下の説明では、この情報のことを制御データまたは制御情報と記す。
なお、制御データは、ユーザデータの大きさや、ユーザデータを更新した時間に限定されず、例えば、ユーザデータが格納されるデータベース名や、パーティション情報を含んでいてもよい。
また、記憶部30は、ユーザデータの検索に用いられるインデックスを記憶する。図2は、ユーザデータの検索に用いられるインデックスの例を示す説明図である。図2に例示するインデックスは、B木インデックスであり、ツリーの先頭に位置するヘッダブロックが、キー値の範囲および下層のブロックのポインタを管理する。また、ツリーの最下層に位置するリーフブロックが、キー値と各ユーザデータの物理的な位置を管理する。
本実施形態では、検索条件に用いられるキーは予め把握されているものとする。ユーザデータの検索に用いられるインデックスは、予め把握されているキーに応じて作成される。
図3は、ユーザデータと制御データの例を示す説明図である。図3に示す例では、キーバリュー形式で格納されたユーザデータと、そのユーザデータに付随する制御データにデータベース名と更新時間とが含まれていることを示す。
なお、ユーザデータの検索に用いられるデータ構造は、B木インデックスに限定されず、ハッシュインデックスであってもよい。なお、B木インデックスの場合、ヘッダブロックやブランチブロックでキー値の範囲を管理し、リーフブロックに前後のリーフブロックへのポインタが含まれるため、範囲検索を行いやすいという利点がある。
さらに、本実施形態の記憶部30は、ユーザデータまたは制御データから共通する意味単位で抽出されるデータをキーとし、そのキーと、そのデータを含むユーザデータの特定に用いられるデータ構造への参照とを対応付けたインデックスを記憶する。具体的には、このインデックスでは、ユーザデータまたは制御データから共通する意味単位で抽出されるデータがキーに対応し、抽出されたデータを含むユーザデータの特定に用いられるデータ構造への参照がバリューに対応する。また、このインデックスは、セカンダリインデックスの仕組みに着目したものである。ユーザデータの特定に用いられるデータ構造として、上述するB木インデックスが挙げられる。
本実施形態で用いられるインデックスのキーは、共通する意味単位で抽出されるデータであり、共通するユーザデータを特定するために用いられる情報であることから、意味づけプレフィックスキーと呼ぶことができる。すなわち、意味づけプレフィックスキーは、ユーザデータまたは制御データから共通する意味単位で抽出されるデータと言える。
意味づけプレフィックスの例として、例えば、ユーザデータに含まれるデータベース名やテーブル名、制御データに含まれるパーティション情報や更新時間などが挙げられる。
図4は、本実施形態で用いられるインデックスの例を示す説明図である。図4に例示するインデックスは、意味づけプレフィックスキーとしてテーブル名が用いられ、そのテーブル名を含むユーザデータを特定するデータ構造への参照(ポインタ)がキーに対応付けられていることを示す。
図4に示す例では、「日本電気」と「日本電気ソフト」がテーブル名という共通する意味単位で抽出されており、各テーブル名と、その各テーブル名を含むユーザデータのデータ構造へのポインタとが対応付けられている。
意味づけプレフィックスキーを含むインデックスは、ユーザデータのデータ構造の上位層のインデックスと言うことができる。そこで、ユーザデータを特定するためのデータ構造を含む層をユーザデータレイヤと記す。また、意味づけプレフィックスキーを含むインデックスを含む層を意味レイヤと記す。図4に示す例では、意味づけプレフィックスキーとしてテーブル名を用いているため、この意味レイヤをテーブル名レイヤと記している。
本実施形態では、意味づけプレフィックスキーにより該当するユーザデータを絞り込むため、ユーザデータを特定するためのデータ構造のキーは、意味レイヤにおけるインデックスのキーとして用いられる意味づけプレフィックスを含まない。意味づけプレフィックスの内容を含むユーザデータは意味レイヤにおけるインデックスにより特定されるため、ユーザデータを特定するためのデータ構造のキーに意味づけプレフィックスキーの内容は不要だからである。
例えば、あるテーブルに含まれる社員のうち、ある期間にログインした社員のユーザデータを検索するとする。この場合、検索条件には、テーブル名および期間が指定される。そのため、本実施形態で示すような意味レイヤにおけるインデックスが存在しない場合、図15に例示するように、キーのタイプが「テーブル名.時間」であるデータ構造を準備する必要がある。
一方、本実施形態では、意味レイヤにおいて意味単位の情報をまとめたデータ構造を用意することで、データを重複して保持することを抑制できるため、メモリの使用効率を向上させることができる。
例えば、キーバリューストア形式のデータが10億件存在し、テーブル名とユーザ名とを組み合わせたキーが、テーブル名とユーザ名とでそれぞれ4バイトの空間を使用するものとする。この場合、一般的なデータ構造では、テーブル名とユーザ名とを組み合わせた全てのキーを保持する必要があるため、(4バイト+4バイト)×1G(ギガ)=8ギガバイトのメモリを使用する。一方、本実施形態のデータ構造をでは、重複するテーブル名をキーに保持する必要がないため、4バイト×1G(ギガ)=4ギガバイトのメモリを使用するだけで済むことになる。
また、本実施形態では、検索条件に一致するキーの検索が、意味レイヤにおける検索のみで済むため、キー値の検索回数を大幅に削減できる。また、データの範囲検索を行う場合にも、意味を付与したデータ構造(意味レイヤのインデックス)を参照することで、効率よくデータを検索できる。
例えば、キーバリューストア形式のデータが10億件存在し、テーブル名が「日本電気」のデータが5億件、テーブル名が「日本電気ソフト」のデータが5億件存在するものとする。ここで、テーブル名が「日本電気」のデータを検索する場合、一般的なデータ構造では、テーブル名が「日本電気」で前方一致する10億件のデータをすべて検索する必要があるため、検索回数は10億回必要になる。一方、本実施形態のデータ構造をでは、意味レイヤでテーブル名が一致するインデックスのみ特定すればよいため、検索回数は1回で済むことになる。
なお、意味レイヤにおけるインデックスのキーには、ユーザデータに含まれるデータだけでなく、制御データに含まれる更新時間やパーティション情報などのデータが用いられてもよい。また、各レイヤのキーは、ソートされていてもよく、ソートされていなくてもよい。
また、意味レイヤにおけるインデックスを表現する方法には、1次元配列やハッシュインデックス、B木インデックスなど、任意の方法を用いることが可能である。図5は、本実施形態で用いられるインデックスの他の例を示す説明図である。図5に示す例では、1次元配列を用いて意味レイヤにおけるインデックスが表現され、ハッシュインデックスを用いてユーザデータを特定するためのデータ構造が表現されていることを示す。
制御部20は、意味レイヤにおけるインデックスを用いて、検索条件に指定される意味づけプレフィックスからデータ構造を特定する。そして、制御部20は、特定されたデータ構造を用いて検索条件を満たす対象データを特定し、特定した結果を検索結果として返却する。
なお、上記説明では、意味レイヤが1段の場合について例示しているが、意味レイヤの階層は1段に限定されず、2段以上であってもよい。すなわち、記憶部30は、キーである意味づけプレフィックスと下位のインデックスへの参照とを対応付けた上位インデックスを記憶してもよい。このとき、制御部20は、上位インデックスを用いて、検索条件に指定される意味づけプレフィックスから下位のインデックスを特定し、特定された下位のインデックスにより特定されるデータ構造を用いて検索条件を満たす対象データを特定する。
より詳しくは、上位インデックスに設定される意味づけプレフィックスキーは、参照する下位のインデックスにより特定されるユーザデータまたはそのユーザデータに付随する制御データから共通する意味単位で抽出されるデータである。インデックスの階層の順序は、検索条件に指定される意味づけプレフィックスの順序に応じて定めておけばよい。
図6は、本実施形態で用いられるインデックスのさらに他の例を示す説明図である。図6に示す例は、2段の意味レイヤが存在し、パーティション情報が上位インデックスとして、また、データベース名が下位インデックスとして階層化されている。
例えば、図6に例示する状況で、パーティション情報が「1」で、データベース名が「A」のユーザデータを検索する旨を指定した検索条件が入力されたとする。このとき、制御部20は、パーティション情報レイヤにおけるインデックス(上位インデックス)を用いて、検索条件に指定されたパーティション情報「1」から下位のインデックスを特定する。さらに、制御部20は、特定されたインデックスを用いて、検索条件に指定されたデータベース名「A」からユーザデータのデータ構造を特定する。この結果、図6に例示する網掛けの部分のデータが検索されることになる。
このように、上位レイヤから下位レイヤに探索処理が移動することは、各レイヤにおいて対象データを絞り込むことに対応する。言い換えると、各レイヤでは、データのフィルタ処理が行われていると言えるため、このように構築されたインデックスを有する装置は、前方一致機能を有していると言える。
したがって、意味レイヤを適切に増加させることで、ユーザデータのキーに対する前方一致検索の回数を低減できるため、範囲検索における絞り込みを効率的に行うことが可能になる。例えば、図6に示す例では、パーティション情報とデータベース名とを組み合わせた範囲検索を効率的に行うことが可能になる。
なお、図6に例示する状況において、データベース名のみを指定する検索条件が入力された場合、制御部20は、データベース名レイヤにおけるインデックスのみを用いて、ユーザデータを特定するためのデータ構造を特定してもよい。
例えば、図6に例示する状況で、データベース名が「A」のユーザデータを検索する旨を指定した検索条件が入力されたとする。このとき、制御部20は、データベース名レイヤにおけるインデックスを用いて、検索条件に指定されたデータベース名「A」からユーザデータのデータ構造を特定してもよい。
次に、本実施形態の検索装置の動作を説明する。図7は、本実施形態の検索装置の動作例を示すフローチャートである。制御部20は、キーである意味づけプレフィックスとユーザデータの特定に用いられるデータ構造への参照とを対応付けたインデックスを用いて、ユーザデータのデータ構造を特定する(ステップS11)。そして、制御部20は、特定されたデータ構造を用いて検索条件を満たすユーザデータを特定する(ステップS12)。
次に、本実施形態の検索装置が行う処理を具体例を用いて説明する。図8は、本実施形態の検索装置が行う処理の例を示す説明図である。図8に示す例では、 ユーザデータの特定に必要なキー値が「データベース名.ユーザデータ」であるとする。この場合、図8に例示するように、データベース名を意味づけプレフィックスとするインデックスを作成する。図8に例示するインデックスにおいて、キーはデータベース名(「日本電気」および「日本電気ソフト」)であり、バリューはデータ構造への矢印(参照)である。
また、データベース名レイヤにおけるインデックスのキーにデータベース名が含まれるため、ユーザデータのキーにデータベース名は不要である。例えば、図8に示すように、キーである「社員番号」とバリューである「氏名」のみを対応付けておけばよい。
このようなインデックスおよびデータ構造を準備しておくことで、制御部20は、データベース名レイヤとユーザデータレイヤを順に探索することで、検索条件を満たすユーザデータを特定することが可能になる。
さらに、本実施形態では、あるデータベースに格納された全てのユーザデータを取得することも容易である。例えば、図8に示す例で、検索条件としてデータベース名のみ指定されたとする。その場合、制御部20は、指定されたデータベース名に対応する参照を特定するだけでよく、個々のユーザデータを検索する必要がない。このような探索により検索条件を満たすユーザデータをすべて取得することが可能になるため、検索のコストをより低減できる。
本実施形態のインデックスは、範囲検索を苦手とするハッシュインデックスタイプのデータベースシステムに適用した場合、より効果的に機能する。例えば、オープンソースソフトウェアであるKratiは、ハッシュインデックスのキーバリューストアを用いている。すなわち、Kratiは、ハッシュインデックス型のデータベースにより実現されるため、キーを指定した1データへのアクセスは高速であるが、範囲検索は非常に遅い。また、Kratiでサポートするキーはユニークキーのみであり、重複キーはサポートしていない。このようなデータベースであっても、本実施形態のインデックスを範囲検索用のセカンダリインデックスとして作成することで、範囲検索を向上させることができる。
このように、ユーザデータがハッシュインデックス型のキーバリューストアで表されるデータ構造の場合、本実施形態のインデックスを用いることで、苦手とする範囲検索の処理速度を向上させることができる。
例えば、図8に示す例のように、ある範囲のデータをすべて取得するような場合を考える。この場合、制御部20は、検索条件に指定される意味づけプレフィックスキーから、ハッシュインデックス型のキーバリューストア形式で表されるデータ構造を特定する。ここで特定されたデータ構造により特定されるユーザデータは、検索条件を満たすユーザデータであるため、制御部20は、このユーザデータをすべて取得してもよい。このような処理を行うことで、個々のユーザデータの検索を行う必要がないため、ハッシュインデックスの特徴を生かしつつ、範囲検索の処理速度を向上できる。
以下、本実施形態のインデックスを用いた場合のユーザデータアクセス方法(挿入、検索、削除および更新)を説明する。以下の説明では、時間をキーとするインデックスを利用するものとする。
まず、ユーザデータの挿入手順を説明する。図9は、ユーザデータを挿入する処理の例を示す説明図である。図9に例示するデータベースにデータを挿入する場合、時間とユーザデータのキーとが指定される。まず、制御部20は、指定された時間が時間レイヤのインデックスのキーに存在するか確認する。なお、時間レイヤのキーは、ソートされていてもよく、ソートされていなくてもよい。
インデックスのキーがソートされている場合、制御部20は、インデックスの順番にキーを探索する。この場合、インデックスの検索を二分探索などにより高速化することが可能である。指定された時間が存在する場合、制御部20は、そのキーに対応する参照が示すユーザデータのデータ構造に対してユーザデータを挿入する。一方、指定された時間が存在しない場合、制御部20は、インデックスに指定された時間を新しいキーとして挿入し、挿入したキーに対応する参照が示す位置にユーザデータを挿入する。
一方、インデックスがソートされていない場合、制御部20は、キーが見つかるまでインデックスの順番にキーを検索する。そのため、場合によりキーの全件検索が行われる。指定された時間が存在する場合、制御部20は、そのキーに対応する参照が示すユーザデータのデータ構造に対してユーザデータを挿入する。一方、指定された時間が存在しない場合、制御部20は、インデックスの最後に指定された時間を新しいキーとして挿入し、挿入したキーに対応する参照が示す位置にユーザデータを挿入する。
次に、ユーザデータの検索手順を説明する。図10は、ユーザデータを検索する処理の例を示す説明図である。データを検索する場合も、時間とユーザデータのキーとが指定される。まず、制御部20は、上位のレイヤから順に探索を実施する。図10に示す例では、制御部20は、まず、指定された時間がインデックスのキーに存在するか検索する。指定された時間がキーに存在しない場合、制御部20は、データが存在しない旨の情報を返却する。
一方、指定された時間がキーに存在する場合、制御部20は、指定された時間に対応する参照が示すユーザデータのデータ構造から、指定されたユーザデータのキーに対応するデータを検索し、特定したデータを1件または複数件返却する。
次に、ユーザデータの削除手順を説明する。データを削除する場合も、時間とユーザデータのキーとが指定される。削除する場合には、上述する検索手順と同様に、制御部20は、まず指定された時間が時間レイヤのインデックスのキーに存在するか検索し、その後、ユーザデータレイヤにおけるユーザデータの有無を検索する。ユーザデータが存在する場合、制御部20は、そのデータが存在しないものとする処理を行う。制御部20は、そのデータを物理的に削除してもよく、論理的に削除してもよい。
次に、ユーザデータの更新手順を説明する。図11は、ユーザデータを更新する処理の例を示す説明図である。データを更新する場合も、時間とユーザデータのキーとが指定される。更新する場合にも、上述する検索手順と同様に、制御部20は、ユーザデータの有無を検索する。ユーザデータが存在する場合、上述する削除手順と同様に、制御部20は、そのデータが存在しないものとする処理を行う(図11における破線)。そして、制御部20は、上述する挿入手順と同様に、更新後の新しいデータの挿入処理を行う(図11における一点鎖線)。
以上のように、本実施形態では、制御部20が、キーである意味づけプレフィックスと、ユーザデータの特定に用いられるデータ構造への参照とを対応付けたインデックスを用いて、検索条件に指定される意味づけプレフィックスからデータ構造を特定する。このデータ構造において、ユーザデータを特定するためのキーには、インデックスのキーとして用いられる意味づけプレフィックスを含まれない。そして、制御部20が、特定されたデータ構造を用いて、検索条件を満たすユーザデータを特定する。
そのため、キー値に対するバリューを取得する処理が行われる場合に、メモリの使用効率を向上させることができ、かつ、検索回数を低減できる。
また、本実施形態のインデックスを用いることで、汎用的に使用されているデータベースであっても、ユーザごとに検索処理のチューニングを行うことができる。したがって、汎用データベースであっても、特化データベースのように扱うことができるため、性能を大幅に向上させることが可能になる。
なお、例えば、メモリの使用効率を向上させる方法として、ユーザデータのキーのうち、先頭部分が共通するキーを1つにまとめる方法も考えられる。図12は、ユーザデータのキーをまとめる方法の例を示す説明図である。
図12に示す例では、2つのキー「aaabbbcccd」と「aabbbbcc」が存在する場合に、共通する文字列の一部である「aa」でキーをまとめている。しかし、この方法は、共通する部分を範囲検索される文字でまとめるのは難しく、また、前方一致する文字列が共通しなければ適用できない。
しかし、本実施形態では、ユーザデータまたはその対象データに付随する制御データから共通する意味単位で抽出した意味づけプレフィックスキーを有するインデックスを作成している。意味単位で共通する情報は、ユーザが範囲検索の際に用いる情報との相性がよいため、メモリの使用効率を上げるだけでなく、検索処理も低減できる。
次に、本発明の概要を説明する。図13は、本発明による検索装置の概要を示すブロック図である。本発明による検索装置は、対象データ(例えば、ユーザデータ)またはその対象データに付随する制御情報(例えば、制御データ)から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、そのキーと意味づけプレフィックスを含む1以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックス(例えば、意味レイヤにおけるインデックス)を記憶するインデックス記憶手段81(例えば、記憶部30)と、インデックスを用いて、検索条件に指定される意味づけプレフィックスからデータ構造(例えば、ユーザレイヤにおけるデータ構造)を特定し、特定されたデータ構造を用いて検索条件を満たす対象データを特定する特定手段82(例えば、制御部20)とを備えている。
ここで、データ構造において、対象データを特定するためのキーは、インデックスのキーとして用いられる意味づけプレフィックスを含まない。
そのような構成により、キー値に対するバリューを取得する処理が行われる場合に、メモリの使用効率を向上させることができ、かつ、検索回数を低減できる。すなわち、ユーザデータの共通するキーの一部を、インデックスのキーとしてまとめているため、メモリ使用効率を向上できる。また、インデックスのキーを特定することでユーザデータの範囲を特定できるため、キー値の検索回数も低減できる。
また、インデックス記憶手段81は、キーである意味づけプレフィックスと下位のインデックスへの参照とを対応付けた上位インデックスを記憶してもよい。そして、特定手段82は、上位インデックスを用いて、検索条件に指定される意味づけプレフィックスから下位のインデックスを特定し、特定された下位のインデックスにより特定されるデータ構造を用いて検索条件を満たす対象データを特定してもよい。
このような構成により、各インデックスが示す意味レイヤを適切に増加させることができるため、ユーザデータのキーに対する前方一致検索の回数を低減でき、範囲検索における絞り込みを効率的に行うことが可能になる。
また、対象データのデータ構造は、ハッシュインデックス型のキーバリューストア形式で表されていてもよい。一般に、ハッシュインデックス型のキーバリューストア形式のデータ構造では、範囲検索は困難である。しかし、本実施形態のインデックスを用いることで範囲検索を可能にしつつ、ハッシュインデックスの利点も生かすことが可能になる。
また、特定手段82は、検索条件に指定される意味づけプレフィックスから、ハッシュインデックス型のキーバリューストア形式で表されるデータ構造を特定し、特定されたデータ構造により特定される対象データの全てを取得してもよい。この場合、特定手段82は、指定された検索条件に対応する参照を特定するだけでよく、個々のユーザデータを検索する必要がない。このような探索により検索条件を満たす対象データをすべて取得することが可能になるため、検索のコストをより低減できる。
本発明は、インデックス構造を利用して検索を行うための検索装置に好適に適用される。また、本発明は、ストレージのインデックス構造を利用した者であり、例えば、Kratiが利用するインデックス構造を有するストレージ全般に適用可能である。
10 検索装置
20 制御部
30 記憶部
20 制御部
30 記憶部
Claims (11)
- 対象データまたは当該対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、当該キーと前記意味づけプレフィックスを含む1以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックスを記憶するインデックス記憶手段と、
前記インデックスを用いて、検索条件に指定される意味づけプレフィックスから前記データ構造を特定し、特定されたデータ構造を用いて前記検索条件を満たす対象データを特定する特定手段とを備え、
前記データ構造において、対象データを特定するためのキーは、前記インデックスのキーとして用いられる意味づけプレフィックスを含まない
ことを特徴とする検索装置。 - インデックス記憶手段は、キーである意味づけプレフィックスと下位のインデックスへの参照とを対応付けた上位インデックスを記憶し、
特定手段は、前記上位インデックスを用いて、検索条件に指定される意味づけプレフィックスから下位のインデックスを特定し、特定された下位のインデックスにより特定されるデータ構造を用いて検索条件を満たす対象データを特定する
請求項1記載の検索装置。 - 対象データのデータ構造は、ハッシュインデックス型のキーバリューストア形式で表される
請求項1または請求項2記載の検索装置。 - 特定手段は、検索条件に指定される意味づけプレフィックスから、ハッシュインデックス型のキーバリューストア形式で表されるデータ構造を特定し、特定されたデータ構造により特定される対象データの全てを取得する
請求項1から請求項3のうちのいずれか1項に記載の検索装置。 - 対象データまたは当該対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、当該キーと前記意味づけプレフィックスを含む1以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックスを用いて、検索条件に指定される意味づけプレフィックスから前記データ構造を特定し、
特定されたデータ構造を用いて検索条件を満たす対象データを特定し、
前記データ構造において、対象データを特定するためのキーは、前記インデックスのキーとして用いられる意味づけプレフィックスを含まない
ことを特徴とする検索方法。 - キーである意味づけプレフィックスと下位のインデックスへの参照とを対応付けた上位インデックスを用いて、検索条件に指定される意味づけプレフィックスから下位のインデックスを特定し、
特定された下位のインデックスにより特定されるデータ構造を用いて検索条件を満たす対象データを特定する
請求項5記載の検索方法。 - 検索条件に指定される意味づけプレフィックスから、ハッシュインデックス型のキーバリューストア形式で表されるデータ構造を特定し、
特定されたデータ構造により特定される対象データの全てを取得する
請求項5または請求項6記載の検索方法。 - コンピュータに、
対象データまたは当該対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、当該キーと前記意味づけプレフィックスを含む1以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックスを用いて、検索条件に指定される意味づけプレフィックスから前記データ構造を特定するデータ構造特定処理、および、
特定されたデータ構造を用いて検索条件を満たす対象データを特定する対象データ特定処理を実行させ、
前記データ構造において、対象データを特定するためのキーは、前記インデックスのキーとして用いられる意味づけプレフィックスを含まない
ことを特徴とする検索用プログラム。 - コンピュータに、
データ構造特定処理で、キーである意味づけプレフィックスと下位のインデックスへの参照とを対応付けた上位インデックスを用いて、検索条件に指定される意味づけプレフィックスから下位のインデックスを特定させ、
対象データ特定処理で、特定された下位のインデックスにより特定されるデータ構造を用いて検索条件を満たす対象データを特定させる
請求項8記載の検索用プログラム。 - 指定された検索条件を満たす対象データをコンピュータに特定させるための検索用データ構造であって、
前記対象データまたは当該対象データに付随する制御情報から共通する意味単位で抽出されるデータである意味づけプレフィックスをキーとし、当該キーと前記意味づけプレフィックスを含む1以上の対象データの特定に用いられるデータ構造への参照とを対応付けたインデックス構造を有し、
対象データの特定に用いられるデータ構造は、当該対象データを特定するためのキーとして前記意味づけプレフィックスを含まず、
前記インデックス構造のキーは、検索条件に前記意味づけプレフィックスが指定されたときに、当該意味づけプレフィックスに対応する前記データ構造を特定するために用いられる
ことを特徴とする検索用データ構造。 - 対象データのデータ構造は、ハッシュインデックス型のキーバリューストア形式で表される
請求項10記載の検索用データ構造。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014052971A JP2015176407A (ja) | 2014-03-17 | 2014-03-17 | 検索装置、検索方法、検索用プログラムおよび検索用データ構造 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014052971A JP2015176407A (ja) | 2014-03-17 | 2014-03-17 | 検索装置、検索方法、検索用プログラムおよび検索用データ構造 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2015176407A true JP2015176407A (ja) | 2015-10-05 |
Family
ID=54255532
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014052971A Pending JP2015176407A (ja) | 2014-03-17 | 2014-03-17 | 検索装置、検索方法、検索用プログラムおよび検索用データ構造 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2015176407A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016177688A (ja) * | 2015-03-20 | 2016-10-06 | 株式会社東芝 | データ処理装置、データ処理方法およびコンピュータプログラム |
KR20200102337A (ko) * | 2019-02-21 | 2020-08-31 | 성균관대학교산학협력단 | 캐시라인 컨시어스 익스텐더블 해싱 방법 및 장치 |
KR20210052148A (ko) * | 2019-10-31 | 2021-05-10 | 울산과학기술원 | 데이터 키 값 변환 방법 및 장치 |
-
2014
- 2014-03-17 JP JP2014052971A patent/JP2015176407A/ja active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016177688A (ja) * | 2015-03-20 | 2016-10-06 | 株式会社東芝 | データ処理装置、データ処理方法およびコンピュータプログラム |
KR20200102337A (ko) * | 2019-02-21 | 2020-08-31 | 성균관대학교산학협력단 | 캐시라인 컨시어스 익스텐더블 해싱 방법 및 장치 |
KR102360879B1 (ko) * | 2019-02-21 | 2022-02-10 | 성균관대학교산학협력단 | 캐시라인 컨시어스 익스텐더블 해싱 방법 및 장치 |
KR20210052148A (ko) * | 2019-10-31 | 2021-05-10 | 울산과학기술원 | 데이터 키 값 변환 방법 및 장치 |
KR102388458B1 (ko) | 2019-10-31 | 2022-04-21 | 울산과학기술원 | 데이터 키 값 변환 방법 및 장치 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI682274B (zh) | 鍵值儲存樹 | |
TWI702506B (zh) | 用於合併樹廢棄項目指標之系統、機器可讀媒體及機器實施之方法 | |
US10733055B1 (en) | Methods and apparatus related to graph transformation and synchronization | |
US9830324B2 (en) | Content based organization of file systems | |
EP2784665B1 (en) | Program and version control method | |
JP5922716B2 (ja) | 個別にアクセス可能なデータユニットの記憶の取り扱い方法 | |
KR20200053512A (ko) | Kvs 트리 데이터베이스 | |
US20100281005A1 (en) | Asynchronous Database Index Maintenance | |
TW201837720A (zh) | 用於多串流儲存裝置之串流選擇 | |
EP3362916B1 (en) | Signature-based cache optimization for data preparation | |
TW201841123A (zh) | 用於維護操作之合併樹修改 | |
KR101740271B1 (ko) | 온라인 상에서 실시간으로 업데이트되는 대규모 오디오 핑거프린트 데이터베이스의 구축 방법 및 장치 | |
JP2005122702A5 (ja) | ||
EP3825863A1 (en) | Distributed computer system for delivering data | |
US10664460B2 (en) | Index B-tree maintenance for linear sequential insertion | |
JP2015176407A (ja) | 検索装置、検索方法、検索用プログラムおよび検索用データ構造 | |
US20220222146A1 (en) | Versioned backup on an object addressable storage system | |
JP5377672B2 (ja) | データベース管理システム | |
JP2007048318A (ja) | リレーショナルデータベースの処理方法およびリレーショナルデータベース処理装置 | |
JP2016062522A (ja) | データベース管理システム、データベースシステム、データベース管理方法およびデータベース管理プログラム | |
JP4825504B2 (ja) | データ登録・検索システムおよびデータ登録・検索方法 | |
KR20130078594A (ko) | 해시 함수 기반의 인덱스를 이용한 텍스트 검색 장치 및 방법 | |
US11119999B2 (en) | Zero-overhead hash filters | |
JP7540830B2 (ja) | データセットのためのデータ記憶方法およびシステム | |
KR101816251B1 (ko) | 파일 검색용 메타데이터 동기화 장치 및 방법 |