(57)【要約】計算機システムは、データベースと処理装置とを有する。データベースは、データを記憶するデータ部とデータの不完全な索引を記憶する索引部とを有する。処理装置は、クライアントからの問合せを受信し、不完全な索引を使用して問合せを処理し、問合せに対する応答を前記クライアントに送信する。
2014141594.tif 000002
【特許請求の範囲】
【請求項１】
計算機システムであって、
データを記憶するデータ部と前記データの不完全な索引を記憶する索引部とを有するデータベースと、
クライアントからの問合せを受信し、前記不完全な索引を使用して前記問合せを処理し、前記問合せに対する応答を前記クライアントに送信する処理装置と
を有する計算機システム。
【請求項２】
前記処理装置は、前記問合せの種別を判定し、該判定した種別が予め定められた種別でない場合には前記不完全な索引を使用した前記問合せの処理は行わない
請求項１に記載の計算機システム。
【請求項３】
前記処理装置は、前記問合せに含まれるユーザ指定情報を解析し、前記不完全な索引の使用が前記ユーザ指定情報において許容されていない場合には前記不完全な索引を使用した前記問合せの処理は行わない
請求項１または２に記載の計算機システム。
【請求項４】
前記処理装置は、前記不完全な索引の完成度合いを算出し、該算出した完成度合いが閾値を超えない場合には前記不完全な索引を使用した前記問合せの処理は行わない
請求項１乃至３の何れかに記載の計算機システム。
【請求項５】
前記処理装置は、前記不完全な索引の完成度合いと前記不完全な索引を使用して前記データ部をアクセスするのに要するコストとを算出し、該算出した前記完成度合いと前記コストとに基づいて前記不完全な索引を選択する指標値を算出し、該算出した指標値が閾値より優れていない場合には前記不完全な索引を使用した前記問合せの処理は行わない
請求項１乃至３の何れかに記載の計算機システム。
【請求項６】
前記索引部は、完全な索引である旧索引を記憶し、
前記不完全な索引は、前記旧索引に代えて使用するために再構築中の新索引であり、
前記処理装置は、前記不完全な索引を使用した前記問合せの処理を行わない場合、前記旧索引を使用して前記問合せを処理し、前記問合せに対する応答を前記クライアントに送信する
請求項１乃至５の何れかに記載の計算機システム。
【請求項７】
前記処理装置は、前記データ部に記憶された前記データを順に参照して、前記新索引をより完成度の高い索引へと更新し、前記新索引を完全な索引に更新し終えたときに、前記旧索引を無効にする
請求項６に記載の計算機システム。
【請求項８】
前記旧索引と前記新索引とは同じ識別名を有し、
前記データベースは、前記識別名に対応付けて、前記旧索引に関する情報と前記新索引に関する情報とを記憶する索引情報を有し、
前記処理装置は、前記問合せに対する有効な索引があるか否か、前記新索引に対応する前記旧索引が有効か否かを前記索引情報を参照して決定する
請求項６または７に記載の計算機システム。
【請求項９】
前記データベースは、キーバリューストアである
請求項１乃至８の何れかに記載の計算機システム。
【請求項１０】
前記予め定められた種別は、集計関数ＭＡＸ（最大値）、ＭＩＮ（最小値）、ＡＶＧ（平均値）のうちの何れかである
請求項２に記載の計算機システム。
【請求項１１】
前記処理装置は、前記不完全な索引の完成度合いの算出では、前記不完全な索引に登録済みの前記データの件数、または前記データ部に記憶される前記データの件数に対する前記不完全な索引に登録済みの前記データの件数の割合を用いる
請求項４または５に記載の計算機システム。
【請求項１２】
前記処理装置は、前記不完全な索引の完成度合いの算出では、前記データ部が複数のサブデータ部から構成されている場合、前記複数のサブデータ部のうち、全データが前記不完全な索引に登録されている前記サブデータ部の数、または前記サブデータ部の総数に対する全データが前記不完全な索引に登録されている前記サブデータ部の数の割合を用いる
請求項４または５に記載の計算機システム。
【請求項１３】
前記処理装置は、前記コストの算出では、前記不完全な索引がツリー構造を有する索引の場合には前記ツリー構造の高さを用いる
請求項５に記載の計算機システム。
【請求項１４】
前記処理装置は、前記不完全は索引が前記索引部に記憶されている旧索引に代えて使用するために再構築中の新索引である場合、前記旧索引の完成度合いと前記旧索引を使用して前記データ部をアクセスするのに要するコストとを算出し、該算出した前記完成度合いと前記コストとに基づいて前記旧索引を選択する指標値を算出し、該算出した指標値を前記閾値とする
請求項５に記載の計算機システム。
【請求項１５】
データを記憶するデータ部と前記データの不完全な索引を記憶する索引部とを有するデータベースと、処理装置とを有する計算機システムが実行する問合せ処理方法であって、
前記処理装置が、クライアントからの問合せを受信し、前記不完全な索引を使用して前記問合せを処理し、前記問合せに対する応答を前記クライアントに送信する
問合せ処理方法。
【請求項１６】
データを記憶するデータ部と前記データの不完全な索引を記憶する索引部とを有するデータベースに接続されたプロセッサに、
クライアントからの問合せを受信するステップと、
前記不完全な索引を使用して前記問合せを処理するステップと、
前記問合せに対する応答を前記クライアントに送信するステップと
を行わせるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クライアントからの問合せを索引を使用して処理する計算機システム、問合せ処理方法、および、プログラムに関する。
【背景技術】
【０００２】
データベースを有する計算機システムでは、記憶するデータへの処理を高速化するために索引（インデックス）を作成し、また記憶するデータの削除、更新、追加にあわせて索引を更新している。データベースに記憶されている索引対象データの全てをサポートしている索引は、完全な索引と呼ばれる。他方、データ構造的には不完全さは存在しないが、索引対象データの一部しかサポートしていない索引は、不完全な索引と呼ばれる。【０００３】
索引を使用してクライアントからの問合せを処理する計算機システムにおいて、問合せに対応する索引が不完全であった場合の処理方法として、以下の２通りの何れかを選択することが本発明に関連する第１の関連技術として提案されている（例えば特許文献１参照）。
（１）問合せを異常終了させる。
（２）問合せの処理を一時的に中断し、完全な索引になるように索引の作成処理を実行した後、中断した問合せの処理を再開する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−９４４７５号公報
【非特許文献】
【０００５】
【非特許文献１】Junichi Tatemura, Oliver Po, Wang-Pin Hsiung, and Hakan Hacigumus. 2012. Partiqle: an elastic SQL engine over key-value stores. In Proceedings of the 2012 ACM SIGMOD International Conference on Management of Data
【非特許文献２】Pouria Pirzadeh, Junichi Tatemura, Hakan Hacigumus, "Performance Evaluation of Range Queries in Key Value Stores," 2012 IEEE 26th International Parallel and Distributed Processing Symposium Workshops & PhD Forum, pp. 1092-1101
【発明の概要】
【発明が解決しようとする課題】
【０００６】
不完全な索引は、サポートするデータ量が少ないために完全な索引を使用した場合と同じ結果を得ることは困難であるけれども、データ構造的に不完全さは存在しないため、問合せに使用しても処理は破たんしない。このため、問合せが一律に異常終了させられたり、或いは不完全な索引が完全な索引になるまで長く待たされたりするよりも、不完全な索引を使用して問合せが速やかに処理された方がクライアントにとってメリットのあるケースが考えられる。しかるに、本発明に関連する第１の関連技術では、不完全な索引をそのまま使用して問合せを処理する考えは一切ない。【０００７】
本発明の目的は、上述した課題、すなわち、不完全な索引が有効利用されていない、という課題を解決する計算機システムを提供することにある。
【課題を解決するための手段】
【０００８】
本発明の第１の観点に係る計算機システムは、
データを記憶するデータ部と上記データの不完全な索引を記憶する索引部とを有するデータベースと、
クライアントからの問合せを受信し、上記不完全な索引を使用して上記問合せを処理し、上記問合せに対する応答を上記クライアントに送信する処理装置と
を有する。【０００９】
また本発明の第２の観点に係る問合せ処理方法は、
データを記憶するデータ部と上記データの不完全な索引を記憶する索引部とを有するデータベースと、処理装置とを有する計算機システムが実行する問合せ処理方法であって、
上記処理装置が、クライアントからの問合せを受信し、上記不完全な索引を使用して上記問合せを処理し、上記問合せに対する応答を上記クライアントに送信する。
また本発明の第３の観点に係るプログラムは、
データを記憶するデータ部と上記データの不完全な索引を記憶する索引部とを有するデータベースに接続されたプロセッサに、
クライアントからの問合せを受信するステップと、
上記不完全な索引を使用して上記問合せを処理するステップと、
上記問合せに対する応答を上記クライアントに送信するステップと
を行わせる。
【発明の効果】
【００１０】
本発明は、不完全な索引を利用してクライアントからの問合せを処理するため、不完全な索引の有効利用が可能になる。
【図面の簡単な説明】
【００１１】
【図１】本発明の第１の実施形態に係る計算機システムのブロック図である。
【図２】本発明の第１の実施形態に係る計算機システムにおける問合せ処理の手順を示すフローチャートである。
【図３】本発明の第２の実施形態に係る計算機システムのブロック図である。
【図４】本発明の第２の実施形態に係る計算機システムにおける問合せ処理の手順を示すフローチャートである。
【図５】表形式のデータをＫＶ形式のデータとして格納する例と索引の例を示す図である。
【図６】Ｂ−ｔｒｅｅ構造の索引の例とそれをＫＶペアによって表現したハッシュ索引の例とを示す図である。
【図７】本発明の第３の実施形態に係る計算機システムのブロック図である。
【図８】本発明の第３の実施形態に係る計算機システムにおける索引情報の構成例を示す図である。
【図９】本発明の第３の実施形態に係る計算機システムにおける統計情報の構成例を示す図である。
【図１０】本発明の第３の実施形態に係る計算機システムにおける問合せ処理部の処理例を示すフローチャートである。
【図１１】本発明の第３の実施形態に係る計算機システムにおける索引選択部の処理例を示すフローチャートである。
【図１２】本発明の第３の実施形態に係る計算機システムにおける索引作成部の処理例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第１の実施形態]
図１を参照すると、本発明の第１の実施形態に係る計算機システム１００は、データベース１１０と処理装置１２０とを有する。データベース１１０の種類は任意である。例えばデータベース１１０は、キーバリューストア（ＫＶＳ）であってよい。或いはデータベース１１０は、リレーショナルデータベース（ＲＤＢ）であってよい。
【００１３】
データベース１１０は、データ部１１１と索引部１１２とを有する。データ部１１１は、データ１１１１を記憶する機能を有する。また索引部１１２は、データ１１１１の不完全な索引１１２１を記憶する機能を有する。不完全な索引１１２１は、データ構造的には不完全さは存在しないが、データ部１１１に記憶されている索引対象データしかサポートしていない索引を意味する。
【００１４】
処理装置１２０は、クライアント１３０からの問合せを受信する機能と、不完全な索引１１２１を使用して上記問合せを処理する機能と、上記問合せに対する応答をクライアント１３０に送信する機能とを有する。処理装置１２０は、一般的にはプロセッサとメモリと通信装置とを有し、メモリに記憶されたプログラムを実行することによって所定の処理を実行する。
【００１５】
図２は本実施形態における問合せ処理の手順を示すフローチャートである。以下、図２を参照して本実施形態の動作を説明する。
【００１６】
計算機システム１００の処理装置１２０は、まず、クライアント１３０から図示しないネットワークを通じて送信された問合せを受信する（ステップＳ１０１）。次に、処理装置１２０は、索引部１１２に記憶されている不完全な索引１１２１を使用してデータ部１１１のデータ１１１１をアクセスすることにより、受信した問合せを処理する（ステップＳ１０２）。そして、処理装置１２０は、処理結果を問合せに対する応答としてクライアント１３０へ送信する（ステップＳ１０３）。
【００１７】
このように本実施形態によれば、不完全な索引１１２１を利用してクライアント１３０からの問合せを処理するため、不完全な索引の有効利用が可能になる。
【００１８】
本実施形態は上記の構成および動作を基本としつつ、以下のような付加変更が可能である。
【００１９】
例えば処理装置１２０は、問合せの種別を判定し、判定した種別が予め定められた種別でない場合には不完全な索引１１２１を使用した上記問合せの処理は行わない機能を有していてよい。或いは処理装置１２０は、問合せの種別を判定し、判定した種別が予め定められた種別である場合に限り、不完全な索引１１２１を使用して上記問合せの処理を行い、それ以外は上記問合せを実行不可としてよい。ここで、上記予め定められた種別としては、例えば、集計関数ＭＡＸ（最大値）、ＭＩＮ（最小値）、ＡＶＧ（平均値）のうちの何れかを返す問合せであってよい。その理由は、最大値、最小値、平均値といった統計的な傾向を見る問合せ処理は、データ部１１１に記憶されている全てのデータ１１１１を使用しなくても一部分のデータ１１１１を使用すれば、或る程度の精度で結果が得られるためである。
【００２０】
また処理装置１２０は、問合せに含まれるユーザ指定情報を解析し、不完全な索引１１２１の使用がユーザ指定情報において許容されていない場合には不完全な索引１１２１を使用した上記問合せの処理は行わない機能を有していてよい。或いは処理装置１２０は、問合せに含まれるユーザ指定情報を解析し、不完全な索引１１２１の使用がユーザ指定情報において許容されている場合に限り、不完全な索引１１２１を使用して上記問合せの処理を行い、それ以外は上記問合せを実行不可としてよい。
【００２１】
また処理装置１２０は、不完全な索引１１２１の完成度合いを算出し、この算出した完成度合いが閾値を超えない場合には不完全な索引１１２１を使用した上記問合せの処理は行わない機能を有していてよい。或いは処理装置１２０は、不完全な索引１１２１の完成度合いを算出し、この算出した完成度合いが閾値を超えている場合に限り、不完全な索引１１２１を使用して上記問合せの処理を行い、それ以外は上記問合せを実行不可としてよい。ここで処理装置１２０は、不完全な索引１１２１の完成度合いとして、例えば、不完全な索引１１２１に登録済みのデータ１１１１の件数、またはデータ部１１１に記憶されるデータ１１１１の件数に対する不完全な索引１１２１に登録済みのデータ１１１１の件数の割合を用いてよい。あるいは、処理装置１２０は、不完全な索引１１２１の完成度合いとして、データ部１１１が複数のサブデータ部から構成されている場合、複数のサブデータ部のうち、全データが不完全な索引１１２１に登録されているサブデータ部の数、またはサブデータ部の総数に対する全データが不完全な索引１１２１に登録されているサブデータ部の数の割合を用いてよい。
【００２２】
また処理装置１２０は、不完全な索引１１２１の完成度合いと、不完全な索引１１２１を使用してデータ部１１１をアクセスするのに要するコストとを算出し、この算出した完成度合いとコストとに基づいて不完全な索引１１２１を選択する指標値を算出し、この算出した指標値が閾値より優れていない場合には不完全な索引１１２１を使用した上記問合せの処理は行わない機能を有していてよい。或いは処理装置１２０は、上記のように算出した指標値が閾値より優れている場合に限り、不完全な索引１１２１を使用して上記問合せの処理を行い、それ以外は上記問合せを実行不可としてよい。ここで処理装置１２０は、上記コストとして、不完全な索引１１２１がツリー構造を有する索引の場合にはツリー構造の高さを用いてよい。また、処理装置１２０は、不完全は索引１１２１が索引部１１２に記憶されている旧索引に代えて使用するために再構築中の新索引である場合、旧索引の完成度合いと、旧索引を使用してデータ部１１１をアクセスするのに要するコストとを算出し、この算出した完成度合いとコストとに基づいて旧索引を選択する指標値を算出し、この算出した指標値を上記閾値としてよい。
【００２３】
また処理装置１２０は、不完全な索引１１２１が存在する場合、或いは不完全な索引１１２１が上記の所望の条件を満たさない場合、問合せを実行不可とする代わりに、不完全な索引１１２１を使用して問合せを処理し、統計的手法に基づき予測区間や信頼区間を算出して応答に含めるようにしてよい。信頼水準は、９０％、９５％等、任意でよい。例えば信頼水準を９０％、信頼区間を２０〜３０とすると、処理装置は、例えば「信頼水準９０％で、問合せ結果は２０から３０の間にある」という応答を返す。
【００２４】
[第２の実施形態]
図３を参照すると、本発明の第２の実施形態に係る計算機システム２００は、データベース２１０と処理装置２２０とを有する。データベース２１０の種類は任意である。例えばデータベース２１０は、キーバリューストア（ＫＶＳ）であってよい。或いはデータベース２１０は、リレーショナルデータベース（ＲＤＢ）であってよい。
【００２５】
データベース２１０は、データ部２１１と索引部２１２と索引情報２１３とを有する。データ部２１１は、データ２１１１を記憶する機能を有する。また索引部２１２は、データ２１１１の完全な索引である旧索引２１２１と不完全な索引である新索引２１２２とを記憶する機能を有する。新索引２１２２は、データ構造的には不完全さは存在しないが、データ部２１１に記憶されている索引対象データの一部しか登録されていない状態の索引を意味する。例えば、新索引２１２２は、アクセス効率の低下した旧索引２１２１の代わりに使用するために再構築中の索引である。索引情報２１３は、旧索引２１２１と新索引２１２２とに関する管理情報を表す。索引情報２１３では、旧索引２１２１と新索引２１２２とがデータ２１１１のどの表のどの列に対する索引であるのかや、新索引２１２２が不完全な状態であるのかや、旧索引２１２１が未だ有効であるのかなどの情報を有する。
【００２６】
処理装置２２０は、クライアント２３０からの問合せを受信する機能と、受信した問合せの処理に新索引２１２２を使用するか否かを決定する機能と、新索引２１２２を使用すると決定した場合に新索引２１２２を使用して上記問合せを処理し、新索引２１２２を使用しないと決定した場合に旧索引２１２１を使用して上記問合せを処理する機能と、上記問合せに対する応答をクライアント２３０に送信する機能とを有する。また処理装置２２０は、一般的にはプロセッサとメモリと通信装置とを有し、メモリに記憶されたプログラムを実行することによって所定の処理を実行する。
【００２７】
図４は本実施形態における問合せ処理の手順を示すフローチャートである。以下、図４を参照して本実施形態の動作を説明する。
【００２８】
計算機システム２００の処理装置２２０は、まず、クライアント２３０から図示しないネットワークを通じて送信された問合せを受信する（ステップＳ２０１）。次に、処理装置２２０は、索引情報２１３を参照して、受信した問合せの処理に使用できる索引の中に新索引２１２２が存在するか否かを判定する（ステップＳ２０２）。新索引２１２２が存在しなければ、処理装置２２０は、索引部２１２に記憶されている旧索引２１２１を使用してデータ部２１１のデータ２１１１をアクセスすることにより、受信した問合せを処理する（ステップＳ２０３）。そして、処理装置２２０は、処理結果を問合せに対する応答としてクライアント２３０へ送信する（ステップＳ２０７）。
【００２９】
また新索引２１２２が存在すれば、処理装置２２０は、新索引２１２２の使用の可否を判断する（ステップＳ２０４）。例えば処理装置２２０は、以下の条件１〜４のうちの何れか１つの条件が成立すれば新索引２１２２を使用可とし、それ以外は使用不可とする。或いは以下の条件１〜４のうちの何れか２つの条件が成立すれば新索引２１２２を使用可とし、それ以外は使用不可とする。或いは以下の条件１〜４のうちの何れか３つの条件が成立すれば新索引２１２２を使用可とし、それ以外は使用不可とする。或いは以下の全ての条件１〜４の全てが成立すれば新索引２１２２を使用可とし、それ以外は使用不可とする。
【００３０】
条件１：
問合せの種別が予め定められた種別であること。上記予め定められた種別としては、例えば、集計関数ＭＡＸ（最大値）とＭＩＮ（最小値）とＡＶＧ（平均値）としてよい。例えば、「SELECT c1, AVG(value) FROM t1 WHERE c2=3 GROUP BY c1」のような問合せは、AVG(value)の文字列を検出することで、ＡＶＧ（平均値）を返す集計関数であることがわかる。このような問合せは、列c1が分類名のようなものであると想定すれば、傾向を見るものであり、必ずしも正確な結果は要求されない可能性が高い。この条件１を考慮して新索引２１２２の使用可否を決定することにより、旧索引２１２１を使用した場合と問合せ結果に大きな違いがでないような問合せに関してのみ新索引２１２２の有効活用が可能になる。
【００３１】
条件２：
問合せに含まれるユーザ指定情報において、不完全な索引である新索引２１２２の使用が許容されていること。この条件２を考慮して新索引２１２２の使用可否を決定することにより、新索引２１２２の使用可否の判断をユーザ側に委ねることが可能になる。
【００３２】
条件３：
新索引２１２２の完成度合いが閾値を超えていること。新索引２１２２の完成度合いの算出方法は、第１の実施形態における不完全な索引１１２１の完成度合いの算出方法と同じでよい。この条件３を考慮して新索引２１２２の使用可否を決定することにより、再構築開始直後の完成度の極めて低い新索引２１２２の使用を防止することが可能になる。
【００３３】
条件４：
新索引２１２２の完成度合いと新索引２１２２を使用してデータ部２１１をアクセスするのに要するコストとに基づいて算出した、新索引２１２２を選択する指標値が閾値より優れていること。上記コストの算出方法は、第１の実施形態における不完全な索引１１２１のコストの算出方法と同じでよい。また、旧索引２１２１について新索引２１２２と同じ方法で算出した指標値を上記閾値として使用してよい。この条件４を考慮して新索引２１２２の使用可否を決定することにより、再構築開始直後の完成度の極めて低い新索引２１２２の使用を防止することが可能になる。また、旧索引２１２１について新索引２１２２と同じ方法で算出した指標値を上記閾値として使用する方法によれば、完成度合いと利用コストとを統合した観点から、旧索引２１２１と新索引２１２２とのうちのより好ましい方を選択して使用することが可能になる。
【００３４】
次に処理装置２２０は、新索引２１２２を使用不可と判断した場合（ステップＳ２０５でＮＯ）、旧索引２１２１を使用して問合せを処理し（ステップＳ２０３）、処理結果を問合せに対する応答としてクライアント２３０へ送信する（ステップＳ２０７）。
【００３５】
他方、処理装置２２０は、新索引２１２２を使用可と判断した場合（ステップＳ２０５でＹＥＳ）、索引部２１２に記憶された新索引２１２２を使用してデータ部２１１のデータ２１１１をアクセスすることにより、受信した問合せを処理する（ステップＳ２０６）。そして、その処理結果を問合せに対する応答としてクライアント２３０へ送信する（ステップＳ２０７）。
【００３６】
このように本実施形態によれば、再構築中の不完全な新索引２１２２を利用してクライアント２３０からの問合せを処理するため、不完全な索引の有効利用が可能になる。
【００３７】
また本実施形態によれば、再構築中の不完全な新索引２１２２の使用可否を判断し、使用不可ならば旧索引２１２１を利用してクライアント２３０からの問合せを処理することができる。
【００３８】
[第３の実施形態]
次に本発明の第３の実施形態について詳細に説明する。本実施形態は、分散キーバリューストア（以下、ＫＶＳと記す）に本発明を適用する。このため、まず、分散ＫＶＳについて簡単に説明する。
【００３９】
極めて大量のデータを保管するために、近年、分散ＫＶＳが注目されている。例えばVoldemort（http://www.project-voldemort.com/）はその実装の一つである。一般にＫＶＳは、スケーラビリティとスループットを重視し、少数のノードからなる構成から、必要に応じてノードを追加することでシステムを拡張し、膨大なデータに対する多数の同時要求を処理することが期待されている。
【００４０】
ただし、ＫＶＳはスケーラビリティを重視するために、データはキーとバリューからなる単純な構造（以下キーバリューペア、ＫＶペアと言う）で表現されなければならず、対応できる原始的な操作はＫＶペアのキーを指定してバリューを取得（get）、ＫＶペアを格納（put）、キーを指定してＫＶペアを削除（delete）のみである。本実施形態における後述する索引の再構築では、格納された全データの走査を用いるが、これはいくつか制約のある操作である。
【００４１】
一方、コンピュータシステムにおいてデータを格納する場合はリレーショナルデータベース（以下ＲＤＢ）が広く利用されている。ＲＤＢは柔軟な表形式のデータ構造と多くの機能を備えるが、スケーラビリティは限られる。そこで、ＲＤＢの表形式でのデータ管理をＫＶＳ上で実現し、スケーラビリティに優れたものにする試みとしてマイクロシャーディング（Ｍｉｃｒｏｓｈａｒｄｉｎｇ）がある（例えば非特許文献１参照）。マイクロシャーディングでは、すべてのデータをキーバリュー形式で表現してＫＶＳに格納する。
【００４２】
図５は表形式のデータ（同図（Ａ））をＫＶ形式のデータ（同図（Ｂ））として格納する例を示す。ＫＶＳは基本的にキーの値を指定したＫＶペアの取得しか行えないため、図５に示すように、キーとして表の任意の列の値（図の例ではＩＤ）を使用し、バリューに１行のすべての列の値を格納する。例えば、表形式のデータの１行目は、キー値＝「１」、バリュー＝「１，鈴木，東京都，ＡＡＡ，３」を有するＫＶ形式のデータとして格納される。そのため、キーとした列以外の値でアクセスするためには、索引と呼ぶ別の外部構造が必要になる。例えば、佐藤や鈴木といった名前でアクセスする場合、図５（Ｃ）に示されるような索引が必要になる。
【００４３】
通常、１つの索引構造は複数のＫＶペアにより構成される。ＫＶペアを「{キー，バリュー}」と表現するとしたとき、図５（Ｃ）に示される索引のように、索引を｛索引対象列の値，元データのキーの値｝の形式で表す索引を、ハッシュ索引と言う。ハッシュ索引では、１つの検索対象列の値ごとにＫＶＳにＫＶペアとして表現される。他方、Ｂ−ｔｒｅｅ或いはそれに類似する構造の索引がある。図６はＢ−ｔｒｅｅ構造の索引の例（同図（Ａ））と、それをＫＶペアによって表現したハッシュ索引の例（同図（Ｂ））とを示す。Ｂ−ｔｒｅｅ構造の索引では、木を構成する各ノードがそれぞれＫＶペアとなる。
【００４４】
ただし、索引を構築すると定期的な再構築が必要になる。例えば、Ｂ−ｔｒｅｅにおける要素の削除操作を考えたとき、Ｂ−ｔｒｅｅ自体は削除操作をサポートしているものの、木の構造変更がコストの高い操作であるため、単に削除フラグを立てて削除完了とすることが多い（図６（Ａ）では斜めの線が削除を示し、図６（Ｂ）では「Ｄ」が削除を示す）。このため、要素の削除を繰り返すと無効なデータが蓄積し、木の高さ（＝階層の深さ）が高くなることでアクセス効率が悪くなる。従って、パファーマンスを高めるため、定期的に索引を再構築することが要求される。例えばOracle DatabaseではALTER INDEX REBUILD文により索引を再構築する。
【００４５】
ところが、ＫＶＳはそのスケーラビリティから極めて大量のデータを格納するために用いられる。索引を再構築するためには索引対象のデータをすべて走査することが必須であり、ＫＶＳのように対象データを大量に格納していれば、再構築には長い時間がかかっているのが現状である。この再構築中の索引が有効に活用されていない、という課題を解決することが本実施形態の目的である。
【００４６】
図７を参照すると、本実施形態に係る計算機システム３００は、ＫＶＳ３１０と処理装置３２０とを有する。
【００４７】
ＫＶＳ３１０は、データ部３１１と索引部３１２と索引情報３１３と統計情報３１４とを有する。
【００４８】
データ部３１１は、データ３１１１を記憶する機能を有する。データ３１１１は、ユーザが作成したユーザデータである。個々のデータ３１１１は、例えば図５（Ｂ）に示したＫＶ形式のデータのような内容と形式を有する。
【００４９】
索引部３１２は、データ３１１１の完全な索引である旧索引３１２１と再構築中の不完全な索引である新索引３１２２とを記憶する機能を有する。新索引３１２２は、データ構造的には不完全さは存在しないが、データ部３１１に記憶されている索引対象データの全てが登録されておらず、一部のデータが登録されている索引を意味する。
【００５０】
索引情報３１３は、有効な索引の情報を管理するＫＶペアである。図８は索引情報３１３の構成例を示す。索引情報３１３を構成するＫＶペアのキーには、当該索引情報３１３によって管理する索引が、どの表のどの列に係る索引であるかを表す文字列が記録される。例えば、図５（Ｂ）に示される索引に対応する索引情報３１３では、図８に示されるように、表形式のデータを識別する文字列と名前の列を識別する文字列との組み合わせがキー値となる。一方、索引情報３１３を構成するＫＶペアのバリューには、有効な索引を識別する情報が記録される。例えば、再構築中の新索引３１２２がなく旧索引３１２１が存在する状態では、図８（Ａ）に示されるように、旧索引を識別する情報とその状態（作成完了）とがバリューに記録される。また、新索引３１２２の作成が開始されると、図８（Ｂ）に示されるように、旧索引３１２１に関する情報に加えて、新索引３１２２を識別する情報とその状態（作成中）とがバリューに記録される。さらに、新索引３１２２の作成が完了し、もはや旧索引３１２１が不要になると、図８（Ｃ）に示されるように、旧索引３１２１の状態が「無効」とされ、新索引３１２２の状態が「作成完了」とされる。
【００５１】
統計情報３１４は、新索引３１２２に登録されているレコード件数等の各種情報を格納しているデータである。図９は統計情報３１４の構成例である。この例の統計情報３１４は、旧索引３１２１に登録されているレコード件数を記録するＫＶペアと、新索引３１２２に登録されているレコード件数を記録するＫＶペアとから構成される。それぞれのＫＶペアのキーには、旧索引３１２１または新索引３１２２を特定する情報が記録される。また旧索引３１２１のＫＶペアのバリューには、旧索引３１２１に登録されているデータ件数が記録される。さらに新索引３１２２のＫＶペアのバリューには、新索引３１２２に登録されているデータ件数が記録される。
【００５２】
なお、一般的にＫＶＳ３１０は、複数のノード（コンピュータ）で構築され、ＫＶＳ３１０に格納されるＫＶペアは、複数のノードに分散して格納される。従って、上述したデータ部３１１中の個々のデータ２１１１を構成するＫＶペア、索引部３１２中の旧索引３１２１と新索引３１２２を構成するＫＶペア、索引情報３１３を構成するＫＶペア、統計情報３１４を構成するＫＶペアは、複数のノードに分散して格納されている。
【００５３】
処理装置３２０は、ＭＰＵなどのプロセッサとメモリや通信装置などの周辺回路とを有し、上記プロセッサが上記メモリに記憶されたプログラムを読み込んで実行することにより、上記ハードウェアとプログラムとを協働させて各種処理部を実現する機能を有している。処理装置３２０で実現される主な処理部として、問合せ処理部３２１と索引選択部３２２と索引作成部３２３とがある。
【００５４】
問合せ処理部３２１は、クライアント３３０からの問合せを図示しないネットワーク等を通じて受信して処理し、その応答をクライアント３３０へ送信する機能を有する。問合せ処理部３２１は、問合せを処理するための索引を決定するために、受信した問合せを索引選択部３２２へ通知し、索引選択部３２２で決定された索引を使用して上記問合せを処理する。
【００５５】
索引選択部３２２は、問合せ処理部３２１から受け取った問合せの処理に使用する索引を決定し、問合せ処理部３２１へ通知する機能を有する。より具体的には、まず索引選択部３２２は、問合せの処理に使用する索引の候補を索引情報３１３を参照して決定する。次に索引選択部３２２は、索引の候補の中に、状態が作成中の新索引３１２２が含まれていれば、問合せ種別判定部３２２１、ユーザ指定情報判定部３２２２および指標値算出比較部３２２３を用いて、新索引３１２２の使用可否を決定する。そして、新索引３１２２を使用可と判断したならば、索引選択部３２２は、問合せ処理部３２１に対して新索引３１２２を通知する。他方、新索引３１２２を使用不可と判断したならば、索引選択部３２２は、問合せ処理部３２１に対して旧索引３１２１を通知する。
【００５６】
問合せ種別判定部３２２１は、問合せの種別を判定し、予め定められた種別でなければ、新索引３１２２は使用不可と判定する。ここで、予め定められた種別は、例えば、集計関数ＭＡＸ（最大値）とＭＩＮ（最小値）とＡＶＧ（平均値）を返す問合せである。
【００５７】
ユーザ指定情報判定部３２２２は、問合せに含まれるユーザ指定情報を解析し、新索引３１２２の使用を許可する旨がユーザ指定情報中に記述されていなければ、新索引３１２２は使用不可と判定する。
【００５８】
指標値算出比較部３２２３は、新索引３１２２に係る指標値を算出し、この算出した指標値が閾値より優れていなければ、新索引３１２２は使用不可と判定する。索引に係る指標値は、例えば次式を用いて算出する。この算出方法によれば、より値の小さな指標値ほど、より優れた指標値となる。
指標値＝利用コスト＋α（１−索引の完成度）      …（１）
【００５９】
上記式１において、利用コストとは、索引を使用してデータ部３１１のデータをアクセスするのに要するコストである。例えばＢ−ｔｒｅｅ構造による索引であれば、木の高さ（階層の深さ）を利用コストとすることができる。また、索引の完成度とは、索引の完全さの程度であり、０から１の値をとる（１に近づくほど完全さの程度が高くなる）。索引の完成度は、例えば次式を用いて算出する。
索引の完成度
＝現在索引に存在するレコード数／索引の対象となるレコード数  …（２）
【００６０】
新索引３１２２の場合、現在索引に存在するレコード数は、図９に示した統計情報３１４における新索引のＫＶペアのバリューの値を使用する。また、新索引３１２２の場合、索引の対象となるレコード数は、図９に示した統計情報３１４における旧索引のＫＶペアのバリューの値を使用する。
【００６１】
上記式１において、αは、利用コストと索引の完成度との重み付け係数である。利用コストに比べて索引の完成度をより重視したければ、αをより大きな値とし、そうでなければより小さな値とする。
【００６２】
索引作成部３２３は、索引を再構築する機能を有する。以下、索引の再構築に関して説明する。
【００６３】
ＫＶＳは一般に多数のクライアントが同時に接続した際に高いスループットで処理できることが特徴であり、索引の再構築中もクライアントが一貫した情報にアクセスできなければならない。この一貫した情報を見せるという目的のために、例えば原子的な操作が保証された単一ＫＶペアに索引のすべての情報を格納することも可能ではあるが、ＫＶペアのサイズが拡大することによって転送時間が増加すること、大量の要素が含まれることで対象要素の検索処理が必要となること、１つの要素でも書き換われば全体を格納しなければならないなど性能上不利となるため、この方式は現実的ではない。したがって、通常は前述したように１つ索引構造は複数のＫＶペアにより構成される。即ち、ハッシュ索引では、１つの検索対象列の値ごとにＫＶＳ上でＫＶペアとして表現される。また、Ｂ−ｔｒｅｅ構造の索引では、木を構成する各ノードがそれぞれＫＶペアとなる。
【００６４】
複数のＫＶペアで１つの索引を構成するとき、ＫＶＳにおいて単一ＫＶペアにしか原子的な更新が行えないという点が問題となる。一般的にＫＶＳは複数のノード（このノードとは前述の木を構成するノードのことではなく、１台のコンピュータなどのことである）で構築され、ここに格納されるＫＶペアは、ＫＶＳの外からはそれぞれがどのノードに格納されているかを意識されない状態で分散して管理される。そのため、原子的な更新は１つのＫＶペアに限定される。ここで単に索引の各ノード（これは木のノードのことである）をＫＶペアにしてしまうだけでは、索引に対して操作を行っている途中に他のクライアントが更新中の中途半端な木の状態を参照してしまう。この問題は、索引構造単体においては例えばＢ−ｔｒｅｅであれば、非特許文献２に記載されるような構造、手続きをとることで解決が可能である。索引作成部３２３は、非特許文献２に記載されるような仕組みで索引の再構成を行うことにより、再構築中の中途半端な新索引３１２２を使用しても問題が生じないようにしている。
【００６５】
また索引作成部３２３は、ＫＶＳ３１０のデータ部３１１からデータ２１１１を順に取得し（走査）、索引対象のデータであれば再構築中の新索引３１２２にそのデータへの参照を追加していくが、併せて統計情報３１４を更新する。統計情報３１４の更新は必ずしも１件単位である必要はなく、例えばレコードを１０件だけ索引に登録するたびにまとめて行ってもよい。
【００６６】
さらに索引作成部３２３は、旧索引３１２１だけしか存在しない状態において、旧索引３１２１に代えて新たに使用する新索引３１２２を作成する際、索引情報３１３を図８（Ａ）に示されるような状態から図８（Ｂ）に示されるような状態へ変更する。また、索引作成部３２３は、新索引３１２２の作成を完了すると、索引情報３１３を図８（Ｂ）に示されるような状態から図８（Ｃ）に示されるような状態へ変更する。前述したように索引情報３１３は、１つのＫＶペアであるため、索引情報３１３の更新はＣＡＳ（Ｃｏｍｐａｒｅ  Ａｎｄ  Ｓｗａｐ）操作により行われる。このため、旧索引だけの状態から旧索引と新索引とが併存する状態への切替えや、旧索引と新索引とが併存する状態から新索引だけの状態への切替えを、原子的に行うことが可能である。
【００６７】
次に本実施形態に係る計算機システム３００の動作を説明する。最初にクライアント３３０から問合せがあった際の動作を、図１０および図１１のフローチャートを参照して説明する。
【００６８】
計算機システム３００の処理装置３２０における問合せ処理部３２１は、まず、クライアント３３０から図示しないネットワークを通じて送信された問合せを受信する（図１０のステップＳ３０１）。次に、問合せ処理部３２１は、受信した問合せの処理に使用する索引を選択するために、受信した問合せを索引選択部３２２へ通知する（ステップＳ３０２）。
【００６９】
索引選択部３２２は、問合せ処理部３２１から受け取った問合せを解析し、索引情報３１３を参照して、問合せに有効な索引があるか否かを確認する（図１１のステップＳ３１１）。問合せに対する索引とは、例えばデータベースに対する問合せ言語として標準的なＳＱＬで「SELECT * FROM t1 WHERE c2 = 3」と表されるような問合せであれば、表t1の列c2のように問合せの処理の際にＫＶＳからデータを取得する際にキーとなる列に対する索引のことである。索引情報３１３がどのような表のどのような列に対する索引に関する情報であるかは、索引情報３１３のキーの値で判明できるようになっている。従って、表t1の列c2によって定まるキー値に対応する索引情報３１３を取得できる否かによって、索引があるか否かを確認することができる。また、索引が有効であるとは、索引情報３１３に状態が「無効」である旨の記載がないことである。索引選択部３２２は、問合せに有効な索引がなければ、その旨を問合せ処理部３２１へ通知する（ステップＳ３１２）。前述の通りＫＶＳは基本的にキーを指定して取得するしかデータを取得する方法はない。このため、もともとc2のような列をキーにしてＫＶＳに格納されているか、あるいは他の列がキーとなっているのであれば索引が用意されていなければならない。したがって有効な索引がなければ、後述するように、その問合せは実行不可となる。
【００７０】
一方、問合せに有効な索引が存在すれば、索引選択部３２２は、取得した索引情報３１３をさらに参照して、状態が作成中の新索引３１２２があるか否かを確認する（ステップＳ３１３）。そして、新索引３１２２が存在しなければ、索引選択部３２２は、索引情報３１３に記載されている旧索引３１２１を問合せ処理部３２１へ通知する（ステップＳ３１４）。また、新索引３１２２が存在していれば、索引選択部３２２は、その新索引３１２２を使用するか否かを以下のようにして決定する（ステップＳ３１５〜Ｓ３１８）。
【００７１】
まず索引選択部３２２は、問合せ種別判定部３２１１を用いて、問合せの種別を判定する（ステップＳ３１５）。問合せの種別が集計関数ＭＡＸ（最大値）、ＭＩＮ（最小値）、ＡＶＧ（平均値）を返すものでなければ、索引選択部３２２は、新索引３１２２は使用しないと決定し、索引情報３１３に記載されている旧索引３１２１を問合せ処理部３２１へ通知する（ステップＳ３１４）。
【００７２】
問合せの種別が集計関数ＭＡＸ（最大値）、ＭＩＮ（最小値）、ＡＶＧ（平均値）を返すものであれば、索引選択部３２２は、ユーザ指定情報判定部３２２２を用いて、問合せ中に再構築中の不完全な新索引３１２２を使用してよい旨のユーザ指定情報が記述されているか否かを判定する（ステップＳ３１６）。新索引３１２２の使用を許可する所定の文字列等が問合せ中に存在しない場合、索引選択部３２２は、新索引３１２２は使用しないと決定し、索引情報３１３に記載されている旧索引３１２１を問合せ処理部３２１へ通知する（ステップＳ３１４）。
【００７３】
ユーザ指定情報で使用が許可されている場合、索引選択部３２２は、指標値算出比較部３２２３を用いて、新索引３１２２の指標値を上述した式１により算出し（ステップＳ３１７）、この算出した指標値を旧索引３１２１について上述した式１により算出した指標値と比較する（ステップＳ３１８）。そして、索引選択部３２２は、新索引３１２２の指標値が旧索引３１２１の指標値を下回っていなければ（即ち新索引３１２２の指標値が旧索引３１２１の指標値以上であれば）、新索引３１２２は使用しないと決定し、索引情報３１３に記載されている旧索引３１２１を問合せ処理部３２１へ通知する（ステップＳ３１４）。反対に、新索引３１２２の指標値が旧索引３１２１の指標値を下回っていれば（即ち新索引３１２２の指標値が旧索引３１２１の指標値未満であれば）、新索引３１２２を使用すると決定し、索引情報３１３に記載されている新索引３１２２を問合せ処理部３２１へ通知する（ステップＳ３１９）。
【００７４】
問合せ処理部３２１は、使用する索引に関する情報を索引選択部３２２から受け取ると（図１０のステップＳ３０３）、その情報を解析する。問合せ処理部３２１は、使用する有効な索引が存在しない旨の情報を索引選択部３２２から受け取った場合には、今回受信した問合せは実行不可と判断し、エラーメッセージ等をクライアント３３０へ送信する（ステップＳ３０４、Ｓ３０５）。
【００７５】
他方、問合せ処理部３２１は、使用する索引として新索引３１２２の情報を索引選択部３２２から受け取ると、新索引３１２２を使用して問合せを処理する（ステップＳ３０４、Ｓ３０６）。また問合せ処理部３２１は、使用する索引として旧索引３１２１の情報を索引選択部３２２から受け取ると、旧索引３１２１を使用して問合せを処理する（ステップＳ３０４、Ｓ３０７）。そして、問合せ処理部３２１は、処理結果を問合せに対する応答としてクライアント３３０へ送信する（ステップＳ３０８）。
【００７６】
次に、索引作成部３２３による新索引３１２２の作成に関する動作を、図１２のフローチャートを参照して説明する。
【００７７】
索引作成部３２３は、まず、旧索引３１２１の索引情報を管理している索引情報３１３に新索引３１２２の情報を追加し、索引情報３１３を図８（Ａ）に示されるような状態から図８（Ｂ）に示されるような状態へ変更する（ステップＳ３２１）。
【００７８】
次に索引作成部３２３は、ＫＶＳ３１０のデータ部３１１からデータ３１１１を１件ずつ順次取得し、以下の処理を実行する（ステップＳ３２２〜Ｓ３２６）。まず、取得したデータ３１１１が索引対象のデータか否かを判定し（ステップＳ３２３）、索引対象のデータでなければ次のデータ３１１１の処理へ進む。取得したデータ３１１１が索引対象のデータであれば、新索引３１２２にデータ３１１１への参照を追加する（ステップＳ３２４）。次に、新索引３１２２に対応する統計情報３１４を更新する（ステップＳ３２５）。そして次のデータ３１１１の処理へ進む。
【００７９】
索引作成部３２３は、ＫＶＳ３１０のデータ部３１１の全てのデータ３１１１についての処理を終えると、索引情報３１３の情報を更新し、索引情報３１３を図８（Ｂ）に示される状態から図８（Ｃ）に示される状態へ変更する（ステップＳ３２７）。
【００８０】
なお、索引作成部３２３の上記動作は、ＫＶＳ３１０において内部のデータを全走査する機能があることを前提としている。一般にこうした機能は管理機能として実装されており、走査中に取得したデータに一貫性があることを保証していない。従って全走査中に取得したデータについて、あるデータはある時刻における更新を反映しているが別のデータは同じ時刻の更新を反映していないことがありうる。そのため、一貫性のある索引を構築するためには、索引作成対象オブジェクトを静止させる（更新をさせない）ことが必要である。但し、更新を伴わない問合せは実施可能である。
【００８１】
このように本実施形態によれば、再構築中の不完全な新索引３１２２を利用してクライアント３３０からの問合せを処理するため、不完全な索引の有効利用が可能になる。
【００８２】
また本実施形態によれば、再構築中の不完全な新索引３１２２の使用可否を判断し、使用不可ならば旧索引３１２１を利用してクライアント３３０からの問合せを処理することができる。
【００８３】
さらに本実施形態によれば、新索引３１２２を作成し終えた時点で、旧索引３１２１と新索引３１２２とを併用している状態から、新索引３１２２のみを使用する状態へと原子的に切り替えることができる。
【００８４】
本実施形態は、上述した構成および動作を基本としつつ、以下のような各種の付加変更が可能である。
【００８５】
問合せ処理部３２１と索引選択部３２２と索引作成部３２３とは同一の処理装置３２０上に存在する必要はなく、異なる処理装置３２０上に存在していてもかまわない。
【００８６】
また、索引３１２１、３１２２の構造としてB-treeやハッシュ索引を例示したが、本発明で対象とする索引はこれらに限定されず、その他の構造であってもよい。
【００８７】
さらにＫＶＳ３１０に格納されるデータは、Microshardingが対象とする表形式に限定されず、広く一般にキーバリュー形式に表現できるものとその索引とすることができる。
【００８８】
また、一般にＫＶＳが複数ノードで構成されていることを踏まえ、統計情報３１４として何台のノードのデータに対して索引の構築が完了したかを記録し、索引の完成度を求める式として、次式を使用してもよい。
索引の完成度
＝完了ノード数／総ノード数    …（３）
【００８９】
なお、本発明は、日本国にて２０１３年３月１５日に特許出願された特願２０１３−０５３３９２の特許出願に基づく優先権主張の利益を享受するものであり、当該特許出願に記載された内容は、全て本明細書に含まれるものとする。
【産業上の利用可能性】
【００９０】
本発明はクライアントからの問合せを索引を使用して処理する計算機システム、特にＫＶＳに利用することができる。【００９１】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
［付記１］
計算機システムであって、
データを記憶するデータ部と前記データの不完全な索引を記憶する索引部とを有するデータベースと、
クライアントからの問合せを受信し、前記不完全な索引を使用して前記問合せを処理し、前記問合せに対する応答を前記クライアントに送信する処理装置と
を有する計算機システム。
［付記２］
前記処理装置は、前記問合せの種別を判定し、該判定した種別が予め定められた種別でない場合には前記不完全な索引を使用した前記問合せの処理は行わない
付記１に記載の計算機システム。
［付記３］
前記処理装置は、前記問合せに含まれるユーザ指定情報を解析し、前記不完全な索引の使用が前記ユーザ指定情報において許容されていない場合には前記不完全な索引を使用した前記問合せの処理は行わない
付記１または２に記載の計算機システム。
［付記４］
前記処理装置は、前記不完全な索引の完成度合いを算出し、該算出した完成度合いが閾値を超えない場合には前記不完全な索引を使用した前記問合せの処理は行わない
付記１乃至３の何れかに記載の計算機システム。
［付記５］
前記処理装置は、前記不完全な索引の完成度合いと前記不完全な索引を使用して前記データ部をアクセスするのに要するコストとを算出し、該算出した前記完成度合いと前記コストとに基づいて前記不完全な索引を選択する指標値を算出し、該算出した指標値が閾値より優れていない場合には前記不完全な索引を使用した前記問合せの処理は行わない
付記１乃至３の何れかに記載の計算機システム。
［付記６］
前記索引部は、完全な索引である旧索引を記憶し、
前記不完全な索引は、前記旧索引に代えて使用するために再構築中の新索引であり、
前記処理装置は、前記不完全な索引を使用した前記問合せの処理を行わない場合、前記旧索引を使用して前記問合せを処理し、前記問合せに対する応答を前記クライアントに送信する
付記１乃至５の何れかに記載の計算機システム。
［付記７］
前記処理装置は、前記データ部に記憶された前記データを順に参照して、前記新索引をより完成度の高い索引へと更新し、前記新索引を完全な索引に更新し終えたときに、前記旧索引を無効にする
付記６に記載の計算機システム。
［付記８］
前記旧索引と前記新索引とは同じ識別名を有し、
前記データベースは、前記識別名に対応付けて、前記旧索引に関する情報と前記新索引に関する情報とを記憶する索引情報を有し、
前記処理装置は、前記問合せに対する有効な索引があるか否か、前記新索引に対応する前記旧索引が有効か否かを前記索引情報を参照して決定する
付記６または７に記載の計算機システム。
［付記９］
前記データベースは、キーバリューストアである
付記１乃至８の何れかに記載の計算機システム。
［付記１０］
前記予め定められた種別は、集計関数ＭＡＸ（最大値）、ＭＩＮ（最小値）、ＡＶＧ（平均値）のうちの何れかである
付記２に記載の計算機システム。
［付記１１］
前記処理装置は、前記不完全な索引の完成度合いの算出では、前記不完全な索引に登録済みの前記データの件数、または前記データ部に記憶される前記データの件数に対する前記不完全な索引に登録済みの前記データの件数の割合を用いる
付記４または５に記載の計算機システム。
［付記１２］
前記処理装置は、前記不完全な索引の完成度合いの算出では、前記データ部が複数のサブデータ部から構成されている場合、前記複数のサブデータ部のうち、全データが前記不完全な索引に登録されている前記サブデータ部の数、または前記サブデータ部の総数に対する全データが前記不完全な索引に登録されている前記サブデータ部の数の割合を用いる
付記４または５に記載の計算機システム。
［付記１３］
前記処理装置は、前記コストの算出では、前記不完全な索引がツリー構造を有する索引の場合には前記ツリー構造の高さを用いる
付記５に記載の計算機システム。
［付記１４］
前記処理装置は、前記不完全は索引が前記索引部に記憶されている旧索引に代えて使用するために再構築中の新索引である場合、前記旧索引の完成度合いと前記旧索引を使用して前記データ部をアクセスするのに要するコストとを算出し、該算出した前記完成度合いと前記コストとに基づいて前記旧索引を選択する指標値を算出し、該算出した指標値を前記閾値とする
付記５に記載の計算機システム。
［付記１５］
データを記憶するデータ部と前記データの不完全な索引を記憶する索引部とを有するデータベースと、処理装置とを有する計算機システムが実行する問合せ処理方法であって、
前記処理装置が、クライアントからの問合せを受信し、前記不完全な索引を使用して前記問合せを処理し、前記問合せに対する応答を前記クライアントに送信する
問合せ処理方法。
［付記１６］
前記処理装置は、前記問合せの種別を判定し、該判定した種別が予め定められた種別でない場合には前記不完全な索引を使用した前記問合せの処理は行わない
付記１５に記載の問合せ処理方法。
［付記１７］
前記処理装置は、前記問合せに含まれるユーザ指定情報を解析し、前記不完全な索引の使用が前記ユーザ指定情報において許容されていない場合には前記不完全な索引を使用した前記問合せの処理は行わない
付記１５または１６に記載の問合せ処理方法。
［付記１８］
前記処理装置は、前記不完全な索引の完成度合いを算出し、該算出した完成度合いが閾値を超えない場合には前記不完全な索引を使用した前記問合せの処理は行わない
付記１５乃至１７の何れかに記載の問合せ処理方法。
［付記１９］
前記処理装置は、前記不完全な索引の完成度合いと前記不完全な索引を使用して前記データ部をアクセスするのに要するコストとを算出し、該算出した前記完成度合いと前記コストとに基づいて前記不完全な索引を選択する指標値を算出し、該算出した指標値が閾値より優れていない場合には前記不完全な索引を使用した前記問合せの処理は行わない
付記１５乃至１７の何れかに記載の問合せ処理方法。
［付記２０］
前記索引部は、完全な索引である旧索引を記憶し、
前記不完全な索引は、前記旧索引に代えて使用するために再構築中の新索引であり、
前記処理装置は、前記不完全な索引を使用した前記問合せの処理を行わない場合、前記旧索引を使用して前記問合せを処理し、前記問合せに対する応答を前記クライアントに送信する
付記１５乃至１９の何れかに記載の問合せ処理方法。
［付記２１］
前記処理装置は、前記データ部に記憶された前記データを順に参照して、前記新索引をより完成度の高い索引へと更新し、前記新索引を完全な索引に更新し終えたときに、前記旧索引を無効にする
付記２０に記載の問合せ処理方法。
［付記２２］
前記旧索引と前記新索引とは同じ識別名を有し、
前記データベースは、前記識別名に対応付けて、前記旧索引に関する情報と前記新索引に関する情報とを記憶する索引情報を有し、
前記処理装置は、前記問合せに対する有効な索引があるか否か、前記新索引に対応する前記旧索引が有効か否かを前記索引情報を参照して決定する
付記２０または２１に記載の問合せ処理方法。
［付記２３］
前記データベースは、キーバリューストアである
付記１５乃至２２の何れかに記載の問合せ処理方法。
［付記２４］
前記予め定められた種別は、集計関数ＭＡＸ（最大値）、ＭＩＮ（最小値）、ＡＶＧ（平均値）のうちの何れかである
付記１６に記載の問合せ処理方法。
［付記２５］
前記処理装置は、前記不完全な索引の完成度合いの算出では、前記不完全な索引に登録済みの前記データの件数、または前記データ部に記憶される前記データの件数に対する前記不完全な索引に登録済みの前記データの件数の割合を用いる
付記１８または１９に記載の問合せ処理方法。
［付記２６］
前記処理装置は、前記不完全な索引の完成度合いの算出では、前記データ部が複数のサブデータ部から構成されている場合、前記複数のサブデータ部のうち、全データが前記不完全な索引に登録されている前記サブデータ部の数、または前記サブデータ部の総数に対する全データが前記不完全な索引に登録されている前記サブデータ部の数の割合を用いる
付記１８または１９に記載の問合せ処理方法。
［付記２７］
前記処理装置は、前記コストの算出では、前記不完全な索引がツリー構造を有する索引の場合には前記ツリー構造の高さを用いる
付記１９に記載の問合せ処理方法。
［付記２８］
前記処理装置は、前記不完全は索引が前記索引部に記憶されている旧索引に代えて使用するために再構築中の新索引である場合、前記旧索引の完成度合いと前記旧索引を使用して前記データ部をアクセスするのに要するコストとを算出し、該算出した前記完成度合いと前記コストとに基づいて前記旧索引を選択する指標値を算出し、該算出した指標値を前記閾値とする
付記１９に記載の問合せ処理方法。
［付記２９］
データを記憶するデータ部と前記データの不完全な索引を記憶する索引部とを有するデータベースに接続されたプロセッサに、
クライアントからの問合せを受信するステップと、
前記不完全な索引を使用して前記問合せを処理するステップと、
前記問合せに対する応答を前記クライアントに送信するステップと
を行わせるためのプログラム。
【符号の説明】
【００９２】
１００…計算機システム
１１０…データベース
１１１…データ部
１１２…索引部
１２０…処理装置
１３０…クライアント
１１１１…データ
１１２１…索引（不完全）
【図１】
2014141594.tif 000003
【図２】
2014141594.tif 000004
【図３】
2014141594.tif 000005
【図４】
2014141594.tif 000006
【図５】
2014141594.tif 000007
【図６】
2014141594.tif 000008
【図７】
2014141594.tif 000009
【図８】
2014141594.tif 000010
【図９】
2014141594.tif 000011
【図１０】
2014141594.tif 000012
【図１１】
2014141594.tif 000013
【図１２】
2014141594.tif 000014
【国際調査報告】
2014141594.tif 000015
2014141594.tif 000016
2014141594.tif 000017
2014141594.tif 000018