(57)【要約】【課題】適切なインデックスを使用して問合せを効率良く処理するためには、事前にインデックス選択の判断材料となる統計情報を収集しておく必要があること。【解決手段】データ部は、複数の属性の値のセットと、複数の属性の値のうちの特定の一つからなるデータ識別情報とを、一対のデータとして記憶する。インデックスは、特定の一つ以外の複数の属性のそれぞれに対応して、属性の値をセットに含む一対のデータのデータ識別情報を記憶する。情報処理装置は、問合せで指定された検索対象となる属性の値ごとに、属性の値に対応するインデックスに記憶されたデータ識別情報の個数を算出し、その個数に基づいて属性の値に対応する指標値を算出する。そして、情報処理装置は、指標値に基づいて、問合せの処理に使用するインデックスを選択し、問合せを処理する。【選択図】図１４
2017142672.tif 000002
【特許請求の範囲】
【請求項１】
複数の属性の値のセットと、前記複数の属性の値のうちの特定の一つからなるデータ識別情報とを、一対のデータとして記憶するデータ部と、前記特定の一つ以外の複数の前記属性のそれぞれに対応して、前記属性の値を前記セットに含む前記一対のデータの前記データ識別情報を記憶する複数のインデックスと、を記憶するように構成された、記憶装置に対して発行された問合せを入力し、前記問合せの結果を出力する情報処理装置であって、
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記インデックスに記憶された前記データ識別情報の個数を算出し、前記個数に基づいて前記属性の値に対応する指標値を算出する指標値算出手段と、
前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する第１のインデックス選択手段と、を有する、
情報処理装置。
【請求項２】
前記算出された前記指標値を前記属性の値に対応付けて記憶する指標値記憶手段を有する、
請求項１に記載の情報処理装置。
【請求項３】
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記指標値を前記指標値記憶手段から取得し、該取得した前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する第２のインデックス選択手段、を有し、
前記指標値算出手段と前記指標値記憶手段と前記第１のインデックス選択手段とを使用して前記問合せを処理する第１の運用フェーズから、前記指標値記憶手段と前記第２のインデックス選択手段とを使用して前記問合せを処理する第２の運用フェーズへ切り替え可能に構成されている、
請求項２に記載の情報処理装置。
【請求項４】
前記第２のインデックス選択手段は、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、前記属性の値以外の前記属性の値に対応する前記指標値を前記指標値記憶手段から取得し、該取得した前記指標値に基づいて、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値の推定値を計算する、
請求項３に記載の情報処理装置。
【請求項５】
前記第２のインデックス選択手段は、前記属性の値以外の前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、予め定められた初期値を、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値の推定値とする、
請求項４に記載の情報処理装置。
【請求項６】
前記指標値記憶手段は、前記指標値を前記指標値の算出時刻に対応付けて記憶し、
前記指標値算出手段は、前記第２の運用フェーズにおいて、前記指標値記憶手段に記憶された前記算出時刻に基づいて、一定時間以上経過した前記指標値を再計算あるいは無効にする、
請求項３乃至５の何れかに記載の情報処理装置。
【請求項７】
前記指標値記憶手段は、前記指標値を前記指標値の算出時刻に対応付けて記憶し、
前記第２のインデックス選択手段は、前記第２の運用フェーズにおいて、前記属性の値に対応する前記指標値を前記指標値記憶手段から取得したときに前記算出時刻に基づいて、一定時間以上経過した前記指標値を再計算あるいは無効にする、
請求項３乃至５の何れかに記載の情報処理装置。
【請求項８】
複数の属性の値のセットと、前記複数の属性の値のうちの特定の一つからなるデータ識別情報とを、一対のデータとして記憶するデータ部と、前記特定の一つ以外の複数の前記属性のそれぞれに対応して、前記属性の値を前記セットに含む前記一対のデータの前記データ識別情報を記憶する複数のインデックスと、を記憶するように構成された、記憶装置に対して発行された問合せを入力し、前記問合せの結果を出力する情報処理装置が実行する問合せ処理方法であって、
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記インデックスに記憶された前記データ識別情報の個数を算出し、前記個数に基づいて前記属性の値に対応する指標値を算出し、
前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する、
問合せ処理方法。
【請求項９】
複数の属性の値のセットと、前記複数の属性の値のうちの特定の一つからなるデータ識別情報とを、一対のデータとして記憶するデータ部と、前記特定の一つ以外の複数の前記属性のそれぞれに対応して、前記属性の値を前記セットに含む前記一対のデータの前記データ識別情報を記憶する複数のインデックスと、を記憶するように構成された、記憶装置に対して発行された問合せを入力し、前記問合せの結果を出力するコンピュータを、
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記インデックスに記憶された前記データ識別情報の個数を算出し、前記個数に基づいて前記属性の値に対応する指標値を算出する指標値算出手段と、
前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する第１のインデックス選択手段と、
して機能させるためのプログラム。
【請求項１０】
データベースシステムであって、
複数の属性の値のセットと、前記複数の属性の値のうちの特定の一つからなるデータ識別情報とを、一対のデータとして記憶するデータ部と、前記特定の一つ以外の複数の前記属性のそれぞれに対応して、前記属性の値を前記セットに含む前記一対のデータの前記データ識別情報を記憶する複数のインデックスと、を記憶する記憶装置と、
前記記憶装置に対して発行された問合せを入力し、前記問合せの結果を出力する情報処理装置と、を備え、
前記情報処理装置は、
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記インデックスに記憶された前記データ識別情報の個数を算出し、前記個数に基づいて前記属性の値に対応する指標値を算出する指標値算出手段と、
前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する第１のインデックス選択手段と、を有する、
データベースシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースシステム、情報処理装置、問合せ方法、およびプログラムに関する。
【背景技術】
【０００２】
極めて大量のデータを保管するために、近年、分散キーバリューストア（以下、ＫＶＳと記す）が注目されている。例えば、Ｖｏｌｄｅｍｏｒｔ（http://www.project-voldemort.com/）は、その実装のひとつである。一般に、ＫＶＳは、スケーラビリティとスループットを重視し、少数のノードからなる構成から、必要に応じてノードを追加することで、システムを拡張し、膨大なデータに対する多数の同時要求を処理することが期待されている。
【０００３】
ただし、ＫＶＳは、スケーラビリティを重視する。そのために、ＫＶＳでは、データはキーとバリューからなる単純な構造（以下、キーバリューペア、あるいは、ＫＶペアと記す）で表現され、使用できる操作は、ＫＶペアのキーを指定してバリューを取得（ｇｅｔ）、ＫＶペアを格納（ｐｕｔ）、キーを指定してＫＶペアを削除（ｄｅｌｅｔｅ）のみである。
【０００４】
一方、コンピュータシステムにおいて、データを格納する場合は、リレーショナルデータベース（以下、ＲＤＢと記す）が広く利用されている。ＲＤＢは、柔軟な表形式のデータ構造と多くの機能を備えるが、スケーラビリティは限られる。このため、ＲＤＢの表形式でのデータ管理をＫＶＳ上で実現し、スケーラビリティに優れたものにする試みとして、マイクロシャーディング（Ｍｉｃｒｏｓｈａｒｄｉｎｇ）がある（非特許文献１参照）。マイクロシャーディングでは、すべてのデータをキーバリュー形式で表現してＫＶＳに格納する。
【０００５】
また、ＫＶＳは、基本的にキーの値を指定したＫＶペアの取得しか行えない。ＫＶＳでは、キーとして表の任意の列の値を使用し、バリューとして１行のすべての列の値を使用する。このため、ＫＶＳでは、キーとした列以外の列の値でアクセスするためには、別に外部構造が必要である。このとき、１行のデータを含むＫＶペアを「表データ」、キーとした列以外の列の値でアクセスするための外部構造を「索引（インデックス）」と呼ぶ。索引は、一つの表に対し複数作成することができる。
【０００６】
問合せで指定された検索条件が複数存在するために複数のインデックスが使用可能なとき、どのインデックスを使用して問合せを処理するかが問題になる。例えば、ＳＱＬで表現された図１５に示すような問合せを処理することを考える。この問合せは、購入履歴テーブルから、都道府県の列の値が東京都であり、且つ、商品の列の値がＡＡＡである表データを取得する問合せである。この問合せに対しては、以下の２つの処理方法が考えられる。何れの処理方法も、一方のインデックスを使用して一つの検索条件を満足する行を取得し、その取得した行から残り一つの検索条件を満足する行を取得するものである。
【０００７】
処理方法１
都道府県の列のインデックスを使用し、東京都の列を有する全ての行を取得する。その後、取得した行の中から、商品の列の値がＡＡＡである行を取得する。
処理方法２
商品の列のインデックスを使用し、ＡＡＡの列を有する全ての行を取得する。その後、取得した行の中から、都道府県の列の値が東京都である行を取得する。
【０００８】
問合せを高速に処理するためには、処理の過程で取得するデータ量を最小限とすべきである。すなわち、上記の例では、インデックスを使用して取得した行の数がより少なくなるように、インデックスを選択すべきである。
【０００９】
従来のリレーショナルデータベース（ＲＤＢ）では、事前にデータの分布（これは統計情報と呼ばれる）を算出して記憶しておき、問合せが入力されると、上記統計情報を参照して、上記問合せの処理に使用するインデックスを選択する仕組みがある。例えば、都道府県のインデックスで東京都の列を有する行は全体の約３０％であり、商品のインデックスでＡＡＡの列を有する行は全体の約１％であるというような統計情報や、あるいはそれぞれ何件あるというような統計情報を事前に算出して記憶しておく。そして、例えば図１５に示したような問合せが入力されると、上記統計情報を参照して、商品のインデックスを使用すれば、都道府県のインデックスを使用する場合に比べて、取得する行が少なくなることを判断し、上記の処理方法２を使用して上記問合せを処理する。
【００１０】
他方、本発明に関連する技術として、ＫＶＳにおいてインデックスを使用してキー以外の属性の値による検索を行う情報処理システムにおいて、指標値としてアクセスパスの利用回数を用い、或るＫＶペアにおいて何れの属性がキーとして最適かを判定し、判定結果に基づいてＫＶペアの構造を書き換えることにより、頻繁に利用されるアクセスパスの処理速度を改善する技術がある（例えば特許文献１参照）。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２０１５−６９２６９号公報
【非特許文献】
【００１２】
【非特許文献１】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
【発明の概要】
【発明が解決しようとする課題】
【００１３】
上述したように、適切なインデックスを使用して問合せを効率良く処理するためには、事前にインデックス選択の判断材料となる統計情報を収集しておく必要がある。このため、統計情報を収集し終える迄、問合せの処理を開始することができない。また、統計情報の採取にはデータをフルスキャンする必要がある。ＲＤＢはＫＶＳと異なり、データのフルスキャンが可能であり、アナライズと呼ばれる操作でデータをフルスキャンあるいはランダムにサンプリングしてデータの分布を採取し、インデックスの選択に利用している。しかし、ＫＶＳではフルスキャンはサポートされていないため、ＲＤＢと同じ手法は使用できない。
【００１４】
本発明の目的は、上述した課題、すなわち、適切なインデックスを使用して問合せを効率良く処理するためには、事前にインデックス選択の判断材料となる統計情報を収集しておく必要がある、という課題を解決するデータベースシステムを提供することにある。
【課題を解決するための手段】
【００１５】
本発明の一実施形態に係るデータベースシステムは、
データベースシステムであって、
複数の属性の値のセットと、前記複数の属性の値のうちの特定の一つからなるデータ識別情報とを、一対のデータとして記憶するデータ部と、前記特定の一つ以外の複数の前記属性のそれぞれに対応して、前記属性の値を前記セットに含む前記一対のデータの前記データ識別情報を記憶する複数のインデックスと、を記憶する記憶装置と、
前記記憶装置に対して発行された問合せを入力し、前記問合せの結果を出力する情報処理装置と、を備え、
前記情報処理装置は、
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記インデックスに記憶された前記データ識別情報の個数を算出し、前記個数に基づいて前記属性の値に対応する指標値を算出する指標値算出手段と、
前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する第１のインデックス選択手段と、を有する。
【００１６】
本発明の他の実施形態に係る情報処理装置は、
複数の属性の値のセットと、前記複数の属性の値のうちの特定の一つからなるデータ識別情報とを、一対のデータとして記憶するデータ部と、前記特定の一つ以外の複数の前記属性のそれぞれに対応して、前記属性の値を前記セットに含む前記一対のデータの前記データ識別情報を記憶する複数のインデックスと、を記憶するように構成された、記憶装置に対して発行された問合せを入力し、前記問合せの結果を出力する情報処理装置であって、
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記インデックスに記憶された前記データ識別情報の個数を算出し、前記個数に基づいて前記属性の値に対応する指標値を算出する指標値算出手段と、
前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する第１のインデックス選択手段と、を有する。
【００１７】
本発明の他の実施形態に係る問合せ処理方法は、
複数の属性の値のセットと、前記複数の属性の値のうちの特定の一つからなるデータ識別情報とを、一対のデータとして記憶するデータ部と、前記特定の一つ以外の複数の前記属性のそれぞれに対応して、前記属性の値を前記セットに含む前記一対のデータの前記データ識別情報を記憶する複数のインデックスと、を記憶するように構成された、記憶装置に対して発行された問合せを入力し、前記問合せの結果を出力する情報処理装置が実行する問合せ処理方法であって、
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記インデックスに記憶された前記データ識別情報の個数を算出し、前記個数に基づいて前記属性の値に対応する指標値を算出し、
前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する。
【００１８】
本発明の他の実施形態に係るプログラムは、
複数の属性の値のセットと、前記複数の属性の値のうちの特定の一つからなるデータ識別情報とを、一対のデータとして記憶するデータ部と、前記特定の一つ以外の複数の前記属性のそれぞれに対応して、前記属性の値を前記セットに含む前記一対のデータの前記データ識別情報を記憶する複数のインデックスと、を記憶するように構成された、記憶装置に対して発行された問合せを入力し、前記問合せの結果を出力するコンピュータを、
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記インデックスに記憶された前記データ識別情報の個数を算出し、前記個数に基づいて前記属性の値に対応する指標値を算出する指標値算出手段と、
前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する第１のインデックス選択手段と、
して機能させる。
【発明の効果】
【００１９】
本発明は上述した構成を有するため、適切なインデックスを使用して問合せを効率良く処理することができ、また、事前にインデックス選択の判断材料となる統計情報を収集しておく必要がない。
【図面の簡単な説明】
【００２０】
【図１】本発明の第１の実施形態に係るデータベースシステムのブロック図である。
【図２】キーバリューストアに格納されるデータ部とインデックスの一例を示す図である。
【図３】本発明の第１の実施形態に係る情報処理装置のハードウェア構成の一例を示す図である。
【図４】本発明の第１の実施形態に係る情報処理装置が第１の運用フェーズで実行する問合せ処理方法の手順を示すフローチャートである。
【図５】本発明の第１の実施形態に係る情報処理装置の指標値計算装置が使用する指標値を計算する式の一例を示す図である。
【図６】本発明の第１の実施形態に係る情報処理装置の指標値記憶装置の一例を示す図である。
【図７】本発明の第１の実施形態に係る情報処理装置が第２の運用フェーズで実行する問合せ処理方法の手順を示すフローチャートである。
【図８】本発明の第１の実施形態に係る情報処理装置が第２の運用フェーズで実行する指標値の推定方法の手順を示すフローチャートである。
【図９】本発明の第１の実施形態に係る情報処理装置の第２のインデックス選択手段が使用する指標値の推定値を計算する式の一例を示す図である。
【図１０】本発明の第１の実施形態の変形例における指標値記憶装置の一例を示す図である。
【図１１】本発明の第１の実施形態の変形例における指標値計算装置が定期的に実行する指標値メンテナンス処理の手順の一例を示す図である。
【図１２】本発明の第１の実施形態の変形例におけるデータ部の一例を示す図である。
【図１３】本発明の第１の実施形態の変形例における指標値計算装置が定期的に実行する指標値メンテナンス処理の手順の一例を示す図である。
【図１４】本発明の第２の実施形態に係るデータベースシステムのブロック図である。
【図１５】データベースシステムに対する問合せの一例を示す図である。
【発明を実施するための形態】
【００２１】
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第１の実施形態]
図１を参照すると、本発明の第１の実施形態に係るデータベースシステム１００は、情報処理装置１１０とキーバリューストア１２０とクライアント装置１３０とから構成される。
【００２２】
キーバリューストア１２０は、データ部１２１とインデックス１２２とを有するデータベースである。データ部１２１は、データベースで保存する対象となるデータであり、インデックス１２２は、データベースに保存されたデータのインデックスである。データ部１２１は、複数の属性の値のセットと、それら複数の属性の値のうちの特定の一つからなるデータ識別情報とを、一対のデータとして記憶する。また、インデックス１２２は、上記特定の一つ以外の属性に対応して、その属性の値をセットに含む一対のデータのデータ識別情報を記憶する。キーバリューストア１２０は、単一のノード（情報処理装置）により構成されていてもよいし、複数のノードにより構成された分散キーバリューストアであってもよい。
【００２３】
図２（Ａ）、（Ｂ）、（Ｃ）は、データ部１２１とインデックス１２２の例を示す。この例のデータ部１２１とインデックス１２２は、何れもキーバリュー形式で格納されている。データ部１２１のバリューには、図２（Ａ）に示すように、複数の属性の値のセットが格納され、キーには、そのうちの特定の一つの属性の値からなるデータ識別情報が格納されている。この例のデータ部１２１は、図２（Ｄ）に示す表形式のデータをキーバリュー形式に変換したものである。例えば、図２（Ａ）のデータ部１２１の２行目のＫＶペアのバリューは、図２（Ｄ）の表形式データの２行目に格納されている、属性「ユーザＩＤ」の値‘１’、属性「名前」の値‘鈴木’、属性「都道府県」の値‘東京都’、属性「商品」の値‘商品’、属性「購入数」の値‘購入数’という５個の属性の値のセットであり、キーは、そのうちの特定の一つである属性「ユーザＩＤ」の値‘１’に、複数のデータ部を区別するための修飾語である‘購入履歴’を付加した‘購入履歴−１’になっている。
【００２４】
また、図２（Ｂ）に示すインデックス１２２は、属性「都道府県」に対応するインデックスの例を示す。例えば、インデックス１２２の２行目のＫＶペアのキーは、‘埼玉県’であり、バリューは、［２］である。これは、データ部１２１に格納されているＫＶデータのうち、属性「都道府県」の値が‘埼玉県’であるＫＶデータのキーは、‘２’であることを表している。
【００２５】
また、図２（Ｃ）に示すインデックス１２２は、属性「商品」に対応するインデックスの例を示す。例えば、インデックス１２２の３行目のＫＶペアのキーは、‘ＢＢＢ’であり、バリューは、［２，３］である。これは、データ部１２１に格納されているＫＶデータのうち、属性「商品」の値が‘ＢＢＢ’であるＫＶデータのキーは、‘２’、‘３’であることを表している。
【００２６】
再び図１を参照すると、クライアント装置１３０は、ユーザの指示により、データベースに対する問合せを発行する装置である。問合せは、例えばＳＱＬ言語で記述される。クライアント装置１３０は、例えばパーソナルコンピュータや携帯端末等で構成される。
【００２７】
情報処理装置１１０は、クライアント装置１３０が発行した問合せを受け付け、処理をして結果をクライアント装置１３０に返却する装置である。情報処理装置１１０は、第１の運用フェーズ、第２の運用フェーズという２種類の運用フェーズを有する。第１の運用フェーズは、情報収集フェーズとも呼ばれる。情報処理装置１１０は、第１の運用フェーズでは、クライアント装置１３０から発行された問合せで指定された検索対象となる属性の値ごとにインデックスの選択指標となる指標値を算出し、この算出した指標値に基づいてインデックスを選択して問合せを処理し、また上記算出した指標値を保存するフェーズである。他方、第２の運用フェーズは、単に運用フェーズとも呼ばれる。情報処理装置１１０は、第２の運用フェーズでは、クライアント装置１３０から発行された問合せで指定された検索対象となる属性の値ごとに、その属性の値に対応する指標値を第１の運用フェーズで保存しておいた指標値から取得し、この取得した指標値に基づいてインデックスを選択して問合せを処理するフェーズである。従って、典型的には、情報処理装置１１０は、最初は第１の運用フェーズで動作し、ある程度の量の指標値を保存する状態に至ると、第１の運用フェーズから第２の運用フェーズに切り替わり、第２の運用フェーズで動作する。
【００２８】
情報処理装置１１０は、問合せ処理装置１１１、指標値記憶装置１１２、指標値計算装置１１３、第１のインデックス選択装置１１４、および第２のインデックス選択装置１１５を有する。
【００２９】
問合せ処理装置１１１は、運用フェーズの切り替え、問合せの受け付けとその処理など、情報処理装置１１０の主たる動作を制御する装置である。
【００３０】
指標値計算装置１１３は、指標値を計算するための装置であり、主として第１の運用フェーズで使用される。指標値計算装置１１３は、問合せで指定された検索対象となる属性の値ごとに、インデックス１２２に記憶されたデータ識別情報の個数を算出し、この算出した個数に基づいて当該属性の値に対応する指標値を算出するように構成されている。
【００３１】
第１のインデックス選択装置１１４は、指標値計算装置１１３で計算された指標値に基づいて、問合せの処理に使用するインデックス１２２を選択するための装置であり、主として第１の運用フェーズで使用される。
【００３２】
指標値記憶装置１１２は、指標値計算装置１１３で計算された指標値を属性の値に対応付けて記憶する。指標値記憶装置１１２は、例えば、キーバリューストアで構成される。但し、指標値記憶装置１１２は、ＲＤＢなど他の任意のデータストアであってもよい。
【００３３】
第２のインデックス選択装置１１５は、指標値記憶装置１１２に記憶された指標値に基づいて、問合せの処理に使用するインデックス１２２を選択するための装置であり、主として第２の運用フェーズで使用される。
【００３４】
上述したような情報処理装置１１０は、例えば図３に示すように、１以上のマイクロプロセッサ等の演算処理部１４１と、メモリやハードディスク等の記憶部１４２と、通信部１４３とを有する情報処理装置１４０と、プログラム１４４とで実現することができる。通信部１４３は、クライアント装置１３０およびキーバリューストア１２０との間の通信に使用される。プログラム１４４は、情報処理装置１４０の立ち上げ時等に外部のコンピュータ読み取り可能な記録媒体からメモリに読み込まれ、演算処理部１４１の動作を制御することにより、演算処理部１４１上に、問合せ処理装置１１１、指標値記憶装置１１２、指標値計算装置１１３、第１のインデックス選択装置１１４、および第２のインデックス選択装置１１５を実現する。
【００３５】
次に本実施形態に係る情報処理装置１１０の動作を説明する。
【００３６】
情報処理装置１１０は、第１の運用フェーズ（情報収集フェーズ）、第２の運用フェーズ（運用フェーズ）の何れかのフェーズで動作する。問合せ処理装置１１１は、フェーズの切り替えをシステム管理者の指示に従って行う。システム管理者は、まず第１の運用フェーズで情報処理装置１１０を起動し、ワークロードを一通り流すなどして、指標値を採取する。そして、ある程度の量の指標値が収集できたら、システム管理者は情報処理装置１１０を第１の運用フェーズから第２の運用フェーズに切り替える。
【００３７】
以下にそれぞれのフェーズの動作を説明する。
【００３８】
まず、図４を参照して、情報処理装置１１０の第１の運用フェーズ（情報収集フェーズ）の動作を説明する。
【００３９】
問合せ処理装置１１１は、クライアント装置１３０から問合せ（ＳＱＬ）を受け付けると、その問合せを解析し、使用可能なインデックスの選択肢を判断する（ステップＳ１０１）。例えば、図１５に示した問合せの場合、問合せ処理装置１１１は、都道府県インデックスと商品インデックスとの２つの選択肢があることを判断する。
【００４０】
次に、問合せ処理装置１１１は、キーバリューストア１２０をアクセスして、選択可能な全てのインデックス１２２を取得する（ステップＳ１０２）。例えば、図１５に示した問合せの場合、問合せ処理装置１１１は、図２（Ｂ）の都道府県インデックスから属性値「東京都」のＫＶペアを取得し、図２（Ｃ）の商品インデックスから属性値「ＡＡＡ」のＫＶペアを取得する。ここで、ＫＶペアを｛キー：バリュー｝の表記で表現するとすれば、都道府県インデックスから取得したＫＶペアは｛東京都：［１，３］｝、商品インデックスから取得したＫＶペアは｛ＡＡＡ：［１］｝となる。
【００４１】
次に、問合せ処理装置１１１は、取得したインデックスのＫＶペアを指標値計算装置１１３に渡す。指標値計算装置１１３は、受け取ったＫＶペアに基づいて、都道府県インデックスの属性値「東京都」に対応する指標値、および商品インデックスの属性値「ＡＡＡ」に対応する指標値を計算する（ステップＳ１０３）。
【００４２】
指標値計算装置１１３が指標値を計算するための式の例を図５の式１に示す。この例の式１によると、指標値計算装置１１３は、インデックスのＫＶペアにおけるキー部が示す属性値に対応する指標値を、バリュー部に含まれる値の数として計算する。例えば、上述した都道府県インデックスから取得したＫＶペア｛東京都：［１，３］｝の場合、指標値計算装置１１３は、バリュー部には‘１’、‘３’という２つの値が含まれるので、東京都に対応する指標値として２を算出する。また、指標値計算装置１１３は、商品インデックスから取得したＫＶペア｛ＡＡＡ：［１］｝の場合、ＡＡＡに対応する指標値として１を算出する。
【００４３】
指標値計算装置１１３は、算出した指標値を指標値記憶装置１１２に記憶する（ステップＳ１０４）。上述した例では、指標値計算装置１１３は、都道府県インデックスの属性値「東京都」に対応する指標値「２」と、商品インデックスの属性値「ＡＡＡ」に対応する指標値「１」とを、指標値記憶装置１１２に記憶する。
【００４４】
図６は、指標値記憶装置１１２の内容の一例を示す図である。この例の指標値記憶装置１１２は、指標値をキーバリュー形式で記憶する。例えば、図６の２行目のＫＶデータは、キー部に「都道府県−東京都」が、バリュー部に「２」が設定されている。これは、都道府県インデックスの属性値「東京都」に対応する指標値は、２であることを表している。
【００４５】
また指標値計算装置１１３は、算出した指標値を第１のインデックス選択装置１１４に渡す。第１のインデックス選択装置１１４は、受け取った指標値に基づいて、使用するインデックスを選択し、問合せ処理装置１１１に通知する（ステップＳ１０５）。具体的には、第１のインデックス選択装置１１４は、指標値が最小となるインデックスを選択する。例えば、上述した例では、指標値計算装置１１３は、都道府県インデックスの属性値「東京都」に対応する指標値は２であり、商品インデックスの属性値「ＡＡＡ」に対応する指標値は１であるため、商品インデックスを選択する。なお、第１のインデックス選択装置１１４は、指標値が最小となるインデックスが複数存在する場合、その複数の中の任意の１つのインデックスを選択する。
【００４６】
問合せ処理装置１１１は、第１のインデックス選択装置１１４から通知されたインデックスを使用して問合せを処理し、結果をクライアント装置１３０に返却する（ステップＳ１０６）。例えば、問合せ処理装置１１１は、図１５に示す問合せの場合、商品の列のインデックスを使用し、ＡＡＡの列を有する全ての行を取得し、その後、取得した行の中から、都道府県の列の値が東京都である行を取得する。
【００４７】
上述した問合せの例は、使用可能なインデックスの選択肢が都道府県インデックスと商品インデックスの２つであった。しかし、本発明は、使用可能なインデックスの選択肢が３以上存在する問合せに対しても同様に処理することによって、選択肢となるインデックスの属性値に対応する指標値を算出して指標値記憶装置に記憶することができる。また、使用可能なインデックスの選択肢が１つだけの問合せに対しても同様に処理することによって、インデックスの属性値に対応する指標値を算出して指標値記憶装置に記憶することができる。
【００４８】
このように第１の運用フェーズでは、情報処理装置１１０は、問合せの処理でインデックスが利用可能なとき、利用可能な全てのインデックスにアクセスして指標値を算出し、算出した指標値を指標値記憶装置１１２に記憶すると共に、算出した指標値に基づいて問合せを処理するためのインデックスを選択する。これによって、事前にインデックス選択の判断材料となる統計情報がなくても、適切なインデックスを使用して問合せを効率良く処理することができ、またインデックス選択のための指標値を蓄積していくことができる。
【００４９】
次に、図７を参照して、情報処理装置１１０の第２の運用フェーズ（運用フェーズ）の動作を説明する。
【００５０】
まず、問合せ処理装置１１１は、クライアント装置１３０から問合せ（ＳＱＬ）を受け付けると、その問合せを解析し、使用可能なインデックスの選択肢を判断する（ステップＳ１１１）。例えば、図１５に示した問合せの場合、問合せ処理装置１１１は、都道府県インデックスと商品インデックスとの２つの選択肢があることを判断する。ここまでの動作は第１の運用フェーズと同じである。
【００５１】
次に、問合せ処理装置１１１は、選択可能なインデックスの情報を第２のインデックス選択装置１１５に渡し、最適なインデックスの選択を依頼する。例えば、図１５に示した問合せの場合、問合せ処理装置１１１は、インデックスの種別「都道府県」とその属性値「東京都」を１つの選択肢の情報として、また、インデックスの種別「商品」とその属性値「ＡＡＡ」を他の１つの選択肢の情報として、第２のインデックス選択装置１１５に渡す。
【００５２】
第２のインデックス選択装置１１５は、受け取ったインデックスの選択肢の情報に基づいて、指標値記憶装置１１２から必要な指標値を取得する（ステップＳ１１２）。例えば図１５に示した問合せの場合、第２のインデックス選択装置１１５は、インデックスの種別「都道府県」とその属性値「東京都」を有する選択肢の情報に基づいて、キー部に「都道府県−東京都」、バリュー部に「２」が設定されている図６の２行目のＫＶデータを取得する。また、第２のインデックス選択装置１１５は、インデックスの種別「商品」とその属性値「ＡＡＡ」を有する選択肢の情報に基づいて、キー部に「商品−ＡＡＡ」、バリュー部に「１」が設定されている図６の３行目のＫＶデータを取得する。
【００５３】
次に、第２のインデックス選択装置１１５は、インデックスの選択肢の全てについて指標値を取得できたか否かを判断する（ステップＳ１１３）。第２のインデックス選択装置１１５は、インデックスの選択肢の全てについて指標値を取得できた場合、ステップＳ１１５の処理へ進む。他方、第２のインデックス選択装置１１５は、インデックスの選択肢の全てについて指標値を取得できなかった場合、取得できなかった指標値の推定値を算出し（ステップＳ１１４）、そして、ステップＳ１１５へ進む。
【００５４】
第２のインデックス選択装置１１５は、ステップＳ１１５では、インデックスの選択肢について取得あるいは推定した指標値に基づいて、使用する１つのインデックスを選択し、問合せ処理装置１１１に通知する。具体的には、第２のインデックス選択装置１１５は、指標値が最小となるインデックスを選択する。例えば図１５に示した問合せの場合、第２のインデックス選択装置１１５は、取得した２つの指標値、すなわち、都道府県インデックスの属性値「東京都」に対応する指標値２と、商品インデックスの属性値「ＡＡＡ」に対応する指標値１とのうち、指標値が最小となる商品インデックスを選択する。なお、第２のインデックス選択装置１１５は、指標値が最小となるインデックスが複数存在する場合、その複数の中の任意の１つのインデックスを選択する。
【００５５】
問合せ処理装置１１１は、第２のインデックス選択装置１１５から通知されたインデックスを使用して問合せを処理し、結果をクライアント装置１３０に返却する（ステップＳ１１６）。例えば、問合せ処理装置１１１は、図１５に示す問合せの場合、商品の列のインデックスを使用し、ＡＡＡの列を有する全ての行を取得し、その後、取得した行の中から、都道府県の列の値が東京都である行を取得する。
【００５６】
図８は、図７のステップＳ１１４の詳細を示すフローチャートである。以下、図８を参照してステップＳ１１４の詳細を説明する。
【００５７】
まず第２のインデックス選択装置１１５は、ステップＳ１１２で取得できなかったインデックスの指標値以外の指標値を指標値記憶装置１１２から取得する（ステップＳ１２１）。例えば、取得できなかったインデックスの指標値が、都道府県インデックスの属性値「神奈川県」に対応する指標値であるとする。また、指標値記憶装置１１２には、都道府県インデックスの属性値に対応する指標値として、図６に示すように「東京都」と「埼玉県」に対応する指標値が記憶されているものとする。この場合、第２のインデックス選択装置１１５は、取得できなかった都道府県インデックスの属性値「神奈川県」に対応する指標値以外の指標値として、「東京都」の指標値２と埼玉県の指標値「１」とを指標値記憶装置１１２から取得する。これは、例えば指標値記憶装置１１２をインデックス名「都道府県」で検索することで行うことができる。
【００５８】
次に第２のインデックス選択装置１１５は、ステップＳ１２１における処理で指標値を取得できたか否かを判断する（ステップＳ１２２）。次に第２のインデックス選択装置１１５は、取得できた場合（ステップＳ１２２でＹＥＳ）、取得できた指標値に基づいて、ステップＳ１１２で取得できなかったインデックスの指標値を推定する（ステップＳ１２３）。例えば第２のインデックス選択装置１１５は、図９の式２に示すように、指標値の推定値として、同じインデックス内の他の指標値の平均値を使用する。この式２によれば、第２のインデックス選択装置１１５は、同じインデックス内の他の指標値として、上述した「東京都」の指標値２と埼玉県の指標値「１」が存在する場合、都道府県インデックスの属性値「神奈川県」に対応する指標値として、１．５を使用する。
【００５９】
また第２のインデックス選択装置１１５は、同じインデックス内の他の指標値を取得できなかった場合（ステップＳ１２２でＮＯ）、ステップＳ１２１で取得できなかったインデックスの指標値の推定値として、予め設定された値を使用する（ステップＳ１２４）。
【００６０】
このように第２の運用フェーズでは、第１の運用フェーズの期間中に指標値記憶装置１１２に蓄積した指標値に基づいて、問合せを処理するためのインデックスを選択する。これによって、適切なインデックスを使用して問合せを効率良く処理することができる。
【００６１】
上述したように本実施の形態によれば、表構造を格納したキーバリューストア１２０に対して、インデックスの選択肢が複数存在する問合せがクライアント装置１３０から発行された場合、指標値に基づいて効率良く処理し得るインデックスを選択することで、問合せを高速に処理して結果をクライアント装置１３０に返却することができる。
【００６２】
本実施の形態は、上述した構成および動作を基本とするが、以下のように各種の付加変形が可能である。
【００６３】
＜変形例１＞
指標値記憶装置１１２は、指標値とその算出時刻とを記憶する構成を有していてよい。図１０は、指標値とその算出時刻とを記憶する指標値記憶装置１１２の構成例を示す。この例では、バリュー部に、指標値とその算出時刻を記憶している。例えば、図１０の２行目のＫＶデータは、キー部に「都道府県−東京都」が、バリュー部に「［２，２０１５０２０１］」が設定されている。これは、都道府県インデックスの属性値「東京都」に対応する指標値は２であり、その算出時刻は２０１５年２月１日であることを表している。
【００６４】
指標値記憶装置１１２が指標値とその算出時刻とを記憶する構成を有する場合、指標値計算装置１１３は、図４のステップＳ１０３で算出した指標値とその算出時刻とをステップＳ１０４で指標値記憶装置１１２に記憶する。
【００６５】
＜変形例２＞
また、指標値記憶装置１１２に記憶された指標値の算出時刻に基づいて、算出時刻から一定時間が経過した指標値を更新或いは削除する以下に例示するようなメンテナンス機能を、情報処理装置１１０に組み込むようにしてよい。
【００６６】
＜指標値のメンテナンス機能１＞
指標値計算装置１１３は、第２の運用フェーズにおいて、定期的に、指標値記憶装置１１２に記憶された各指標値の算出時刻を確認し、一定時間以上経過していれば更新（再計算）あるいは削除する。
【００６７】
図１１は、指標値の再計算機能を有する指標値計算装置１１３が、定期的に実行する処理の一例を示すフローチャートである。まず、指標値計算装置１１３は、指標値記憶装置１１２の１つの指標値に注目する（ステップＳ１３１）。次に、指標値計算装置１１３は、注目する１つの指標値があれば（ステップＳ１３２でＮＯ）、注目中の指標値に設定された算出時刻を現在時刻と比較して一定期間以上経過しているか否かを判断する（ステップＳ１３３）。次に、指標値計算装置１１３は、一定期間以上経過していれば（ステップＳ１３３でＹＥＳ）、指標値を再計算する（ステップＳ１３４）。例えば、注目中の指標値が図１０の２行目の指標値の場合、問合せ処理装置１１１を通じて都道府県インデックスの属性値「東京都」に対応するＫＶペアを取得して、それに含まれるデータ識別情報の個数を算出し、この算出した個数に基づいて当該属性の値に対応する指標値を再計算する。次に、指標値計算装置１１３は、算出した指標値で注目中の指標値を更新する（ステップＳ１３５）。このとき、再計算した指標値の算出時刻は現在時刻に更新しておく。そして、指標値計算装置１１３は、ステップＳ１３６へ進む。他方、指標値計算装置１１３は、注目中の指標値に設定された算出時刻が一定期間以上経過していなければ（ステップＳ１３３でＮＯ）、ステップＳ１３４、Ｓ１３５をスキップして、ステップＳ１３６へ進む。
【００６８】
指標値計算装置１１３は、ステップＳ１３６では、指標値記憶装置１１２の次の１つの指標値に注目を移し、ステップＳ１３２の処理に戻る。こうして、指標値計算装置１１３は、指標値記憶装置１１２に記憶されている全ての指標値について注目し処理を終えると、図１１の処理を終了する。そして、指標値計算装置１１３は、その後、一定期間が経過すると、再び図１１の処理を実行する。
【００６９】
このように指標値計算装置１１３は、指標値記憶装置１１２に記憶された指標値のうち、一定期間以上経過した指標値を再計算する。そのため、キーバリューストア１２０のデータ部１２１に新規データの追加や更新が実施され、それに応じてインデックス１２２が更新された場合に、最新のインデックス１２２の内容を反映した指標値を指標値記憶装置１１２に記憶させることができる。
【００７０】
図１１では、指標値計算装置１１３は、一定期間以上経過した指標値を再計算するようにしたが、一定期間以上経過した指標値を指標値記憶装置１１２から削除するようにしてもよい。
【００７１】
＜指標値のメンテナンス機能２＞
第２のインデックス選択装置１１５は、図７のステップＳ１１２において、指標値記憶装置１１２から指標値を取得した際、取得した指標値の算出時刻を確認し、一定時間以上経過していれば、当該指標値を指標値記憶装置１１２から削除する。
【００７２】
あるいは第２のインデックス選択装置１１５は、図７のステップＳ１１２において、指標値記憶装置１１２から指標値を取得した際、取得した指標値の算出時刻を確認し、一定時間以上経過していれば、当該指標値の情報を指標値計算装置１１３に通知して、再計算を依頼する。指標値計算装置１１３は、依頼を受けると、図１１のステップＳ１３４、Ｓ１３５と同様の処理を実行することにより、指標値を再計算し、再計算した指標値で指標値記憶装置１１２の古い指標値を更新する。
【００７３】
また、指標値記憶装置１１２は、上述したように、指標値とその算出時刻とを記憶する構成を有し、データ部１２１のＫＶペアに更新時刻を記憶する構成を有していてよい。図１２は、ＫＶペアに更新時刻を記憶するデータ部１２１の構成例を示す。この例では、バリュー部に、属性値のセットと更新時刻を記憶している。例えば、図１２の２行目のＫＶペアは、更新時刻が２０１５０２０５であることが記憶されている。
【００７４】
指標値記憶装置１１２が指標値とその算出時刻とを記憶し、データ部１２１のＫＶペアに更新時刻を記憶する構成を有する場合、指標値を更新或いは削除する以下に例示するような仕組みを、情報処理装置１１０に組み込むようにしてよい。
【００７５】
＜指標値のメンテナンス機能３＞
指標値計算装置１１３は、第２の運用フェーズにおいて、定期的に、指標値記憶装置１１２に記憶された指標値ごとに、その指標値を算出するために参照したインデックス１２２のバリュー部の値を取得し、この取得した値から辿れるデータ部１２１のＫＶペア毎に、その更新時刻と当該指標値の算出時刻とを比較し、指標値の算出時刻より後に更新されたデータ部１２１のＫＶペアの数あるいは割合が予め設定した閾値を超える場合、当該指標値を再計算あるいは削除する。
【００７６】
図１３は、指標値の再計算機能を有する指標値計算装置１１３が、定期的に実行する処理の一例を示すフローチャートである。まず、指標値計算装置１１３は、指標値記憶装置１１２の１つの指標値に注目する（ステップＳ１４１）。次に、指標値計算装置１１３は、注目する１つの指標値があれば（ステップＳ１４２でＮＯ）、注目中の指標値を算出するための参照したインデックスを取得する（ステップＳ１４３）。例えば、図１０の２行目の都道府県インデックスの属性値「東京都」に対応する指標値の場合、図２（Ｂ）の３行目のインデックスを取得する。次に、指標値計算装置１１３は、取得したインデックスから辿れるデータ部のＫＶペアごとに、その更新時刻と注目中の指標値の算出時刻とを比較する（ステップＳ１４４）。例えば図２（Ｂ）の３行目のインデックスから辿れるデータ部のＫＶペアは、図１２の２行目と４行目のＫＶペアであるため、２行目のＫＶペアの更新時刻２０１５０２０５と注目中の指標値の算出時刻２０１５０２０１とを比較し、また、４行目のＫＶペアの更新時刻２０１５０１０７と注目中の指標値の算出時刻２０１５０２０１とを比較する。
【００７７】
次に、指標値計算装置１１３は、注目中の指標値の算出時刻の後に更新されたＫＶペアの数あるいは割合を算出し、それが閾値以上か否かを判定する（ステップＳ１４５）。次に、指標値計算装置１１３は、上記数あるいは割合が閾値以上であれば（ステップＳ１４５でＹＥＳ）、指標値を再計算する（ステップＳ１４６）。例えば、注目中の指標値が図１０の２行目の指標値の場合、問合せ処理装置１１１を通じて都道府県インデックスの属性値「東京都」に対応するＫＶペアを取得して、それに含まれるデータ識別情報の個数を算出し、この算出した個数に基づいて当該属性の値に対応する指標値を再計算する。次に、指標値計算装置１１３は、算出した指標値で注目中の指標値を更新する（ステップＳ１４７）。このとき、再計算した指標値の算出時刻は現在時刻に更新しておく。そして、指標値計算装置１１３は、ステップＳ１４８へ進む。他方、指標値計算装置１１３は、注目中の指標値の算出時刻の後に更新されたＫＶペアの数あるいは割合が閾値未満であれば（ステップＳ１４５でＮＯ）、ステップＳ１４６、Ｓ１４７をスキップして、ステップＳ１４８へ進む。
【００７８】
指標値計算装置１１３は、ステップＳ１４８では、指標値記憶装置１１２の次の１つの指標値に注目を移し、ステップＳ１４２の処理に戻る。こうして、指標値計算装置１１３は、指標値記憶装置１１２に記憶されている全ての指標値について注目し処理を終えると、図１３の処理を終了する。そして、指標値計算装置１１３は、その後、一定期間が経過すると、再び図１３の処理を実行する。
【００７９】
このように指標値計算装置１１３は、指標値記憶装置１１２に記憶された指標値のうち、その指標値の算出時刻より後に更新されたデータ部のＫＶペアの数あるいは割合が閾値以上である指標値を再計算する。そのため、キーバリューストア１２０のデータ部１２１に新規データの追加や更新が実施され、それに応じてインデックス１２２が更新された場合に、最新のインデックス１２２の内容を反映した指標値を指標値記憶装置１１２に記憶させることができる。
【００８０】
図１３では、指標値計算装置１１３は、指標値の算出時刻より後に更新されたデータ部のＫＶペアの数あるいは割合が閾値以上である指標値を再計算するようにしたが、そのような指標値を指標値記憶装置１１２から削除するようにしてもよい。
【００８１】
＜指標値のメンテナンス機能４＞
第２のインデックス選択装置１１５は、図７のステップＳ１１２において、指標値記憶装置１１２から指標値を取得した際、取得した指標値の算出時刻より後に更新されたデータ部のＫＶペアの数あるいは割合が閾値以上である指標値を指標値記憶装置１１２から削除する。
【００８２】
あるいは第２のインデックス選択装置１１５は、図７のステップＳ１１２において、指標値記憶装置１１２から指標値を取得した際、取得した指標値の算出時刻より後に更新されたデータ部のＫＶペアの数あるいは割合が閾値以上である指標値の情報を指標値計算装置１１３に通知して、再計算を依頼する。指標値計算装置１１３は、依頼を受けると、図１３のステップＳ１４６、Ｓ１４７と同様の処理を実行することにより、指標値を再計算し、再計算した指標値で指標値記憶装置１１２の古い指標値を更新する。
【００８３】
＜変形例３＞
指標値計算装置１１３は、図４のステップＳ１０３において、特定の条件が成立すれば、指標値の計算を省略するようにしてもよい。例えば、指標値計算装置１１３は、ステップＳ１０２で取得したインデックスがＮＵＬＬ値などの特定の値であれば、指標値の計算を省略する。これは、多くの場合、ＮＵＬＬは全体のデータ分布のなかで特異な傾向（圧倒的に多かったり或いは少なかったり）を示すので、コスト算出の際に考慮に入れる必要がないことがあるためである。
【００８４】
＜変形例４＞
第２のインデックス選択装置１１５は、図８のステップＳ１２３の或る指標値の算出では、図９の式（２）に示すような当該指標値以外の他の指標値の全体平均による算出方法でなく、別の方法を使って当該指標値の推定値を算出してもよい。
【００８５】
例えば、第２のインデックス選択装置１１５は、同じインデックス内の他の指標値のうち、算出時刻が新しい上位ｎ件の平均値（ｎは予め設定された自然数）あるいは最大値を、当該指標値の推定値としてもよい。
【００８６】
あるいは、第２のインデックス選択装置１１５は、ランダム値を、当該指標値の推定値としてもよい。ランダム値を指標値の推定値とすることにより、特定のインデックスが集中して使われ、負荷が偏ってしまうことによる性能の低下を引き起こさないようにすることができる。
【００８７】
＜変形例５＞
第２のインデックス選択装置１１５は、図７のステップＳ１１３において、取得できない指標値が存在すると判断した場合、ステップＳ１１４において、取得できなかった指標値について指標値を推定すると共に、当該問合せを第１の運用フェーズ（情報収集フェーズ）で処理するための問合せとして情報処理装置１１０のメモリに保存しておいてもよい。
【００８８】
情報処理装置１１０の問合せ処理装置１１１は、夜間などシステムの負荷が低いときに、第２の運用フェーズから第１の運用フェーズに自動的にシステムを切り替え、第１の運用フェーズで処理するために保存されている問合せを実行する。これにより、図７のステップＳ１１３において取得できなかった指標値が当該問合せの実行により指標値計算装置１１３で算出されて指標値記憶装置１１２に記憶される（図４のステップＳ１０３、Ｓ１０４）。そのため、以降の第２の運用フェーズにおける同様な問合せでは指標値が確実に得られるようになる。
【００８９】
なお、同じ問合せが２度実行され、クライアント装置１３０に結果が２度返却されることを避けるために、上記保存した問合せの実行により得られた結果はクライアント装置１３０へ通知しないようにしてよい。或いは、上記問合せを第１の運用フェーズで処理するための問合せとして保存する場合、第２の運用フェーズでは上記保存した問合せの実行により得られた結果はクライアント装置１３０へ通知しないようにしてよい。
【００９０】
[第２の実施形態]
次に、本発明の第２の実施形態について説明する。本実施形態では、本発明の概要を説明する。
【００９１】
図１４を参照すると、本発明の第２の実施形態に係るデータベースシステム２００は、情報処理装置２１０と記憶装置２２０とから構成される。
【００９２】
記憶装置２２０は、データ部２２１と複数のインデックス２２２とを有する。データ部２２１は、複数の属性の値のセットと、それら複数の属性の値のうちの特定の一つからなるデータ識別情報とを、一対のデータとして記憶する。インデックス２２２は、上記特定の一つ以外の複数の属性のそれぞれに対応して存在する。或るインデックス２２２は、或る属性の値を上記セットに含む一対のデータの上記データ識別情報を記憶する。
【００９３】
情報処理装置２１０は、図示しないクライアント装置からデータベースシステムに対して発行された問合せを入力し、その問合せを処理し、その問合せの結果を出力する装置である。情報処理装置２１０は、指標値算出手段２１１とインデックス選択手段２１２とを有する。
【００９４】
指標値算出手段２１１は、問合せで指定された検索対象となる属性の値ごとに、その属性に対応するインデックス２２２に記憶された上記データ識別情報の個数を算出し、その個数に基づいて当該属性の値に対応する指標値を算出するように構成されている。
【００９５】
また指標値算出手段２１２は、指標値算出手段２１１が算出した指標値に基づいて、上記問合せの処理に使用するインデックス２２２を選択するように構成されている。
【００９６】
このように構成された本実施形態に係るデータベースシステム２００は、以下のようにして問合せを処理する。
【００９７】
情報処理装置２１０は、図示しないクライアント装置からデータベースシステムに対する問合せを入力すると、指標値算出手段２１１が、問合せで指定された検索対象となる属性の値ごとに、属性に対応するインデックスに記憶されたデータ識別情報の個数を算出し、その個数に基づいて属性の値に対応する指標値を算出する。例えば、図１５に示すような問合せの場合、検索対象となる属性の値は、属性「都道府県」の値「東京都」と、属性「商品」の値「ＡＡＡ」である。そのため、指標値算出手段２１１は、属性「都道府県」の値「東京都」に対応するインデックス２２２に記憶されたデータ識別情報の個数を算出し、その個数に基づいて、属性「都道府県」の値「東京都」に対応する指標値を算出する。また、指標値算出手段２１１は、属性「商品」の値「ＡＡＡ」に対応するインデックス２２２に記憶されたデータ識別情報の個数を算出し、その個数に基づいて、属性「商品」の値「ＡＡＡ」に対応する指標値を算出する。
【００９８】
次に、インデックス選択手段２１２が、指標値算出手段２１１によって算出された指標値に基づいて、問合せの処理に使用するインデックスを選択する。例えば、図１５に示した上記の例の場合、インデックス選択手段２１２は、属性「都道府県」の値「東京都」に対応する指標値と、属性「商品」の値「ＡＡＡ」に対応する指標値とに基づいて、都道府県インデックスと商品インデックスの何れを使用するかを決定する。
【００９９】
次に、情報処理装置２１０は、インデックス選択手段２１２で選択されたインデックスを使用して問合せを処理し、問合せの結果を図示しないクライアント装置へ出力する。
【０１００】
このように本実施形態によれば、適切なインデックスを使用して問合せを効率良く処理することができ、また、事前にインデックス選択の判断材料となる統計情報を収集しておく必要がない。
【０１０１】
その理由は、問合せで指定された検索対象となる属性の値ごとに、その属性に対応するインデックス２２２に記憶されたデータ識別情報の個数を算出し、その個数に基づいて当該属性の値に対応する指標値を算出する指標値算出手段２１１と、この指標値算出手段２１１が算出した指標値に基づいて、上記問合せの処理に使用するインデックス２２２を選択する指標値算出手段２１２とを有するためである。
【０１０２】
以上、本発明の実施形態について説明したが、本発明は以上の実施形態にのみ限定されず、本発明の範囲内で各種の付加変更が可能である。
【産業上の利用可能性】
【０１０３】
本発明は、データベースに対する問合せの処理に利用でき、特にスケーラビリティとＲＤＢのデータモデルを両立させるためにＫＶＳにリレーショナルデータを格納し、インデックスを定義した構成を採るデータベースシステムにおいて、問合せを高速に処理するのに利用できる。
【０１０４】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
［付記１］
データベースシステムであって、
複数の属性の値のセットと、前記複数の属性の値のうちの特定の一つからなるデータ識別情報とを、一対のデータとして記憶するデータ部と、前記特定の一つ以外の複数の前記属性のそれぞれに対応して、前記属性の値を前記セットに含む前記一対のデータの前記データ識別情報を記憶する複数のインデックスと、を記憶する記憶装置と、
前記記憶装置に対して発行された問合せを入力し、前記問合せの結果を出力する情報処理装置と、を備え、
前記情報処理装置は、
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記インデックスに記憶された前記データ識別情報の個数を算出し、前記個数に基づいて前記属性の値に対応する指標値を算出する指標値算出手段と、
前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する第１のインデックス選択手段と、を有する、
データベースシステム。
［付記２］
前記情報処理装置は、
前記算出された前記指標値を前記属性の値に対応付けて記憶する指標値記憶手段を有する、
付記１に記載のデータベースシステム。
［付記３］
前記情報処理装置は、
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記指標値を前記指標値記憶手段から取得し、該取得した前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する第２のインデックス選択手段を有し、
前記情報処理装置は、前記指標値算出手段と前記指標値記憶手段と前記第１のインデックス選択手段とを使用して前記問合せを処理する第１の運用フェーズから、前記指標値記憶手段と前記第２のインデックス選択手段とを使用して前記問合せを処理する第２の運用フェーズへ切り替え可能に構成されている、
付記２に記載のデータベースシステム。
［付記４］
前記第２のインデックス選択手段は、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、前記属性の値以外の前記属性の値に対応する前記指標値を前記指標値記憶手段から取得し、該取得した前記指標値に基づいて、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値の推定値を算出する、
付記３に記載のデータベースシステム。
［付記５］
前記第２のインデックス選択手段は、前記属性の値以外の前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、予め定められた初期値を、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値の推定値とする、
付記４に記載のデータベースシステム。
［付記６］
前記指標値記憶手段は、前記指標値を前記指標値の算出時刻に対応付けて記憶する、
付記２乃至５の何れかに記載のデータベースシステム。
［付記７］
前記指標値算出手段は、前記指標値記憶手段に記憶された前記算出時刻に基づいて、一定時間以上経過した前記指標値を再計算あるいは無効にする、
付記６に記載のデータベースシステム。
［付記８］
前記指標値記憶手段は、前記指標値を前記指標値の算出時刻に対応付けて記憶し、
前記第２のインデックス選択手段は、前記属性の値に対応する前記指標値を前記指標値記憶手段から取得したときに前記算出時刻に基づいて、一定時間以上経過した前記指標値を再計算あるいは無効にする、
付記３乃至５の何れかに記載のデータベースシステム。
［付記９］
前記指標値算出手段は、前記属性に対応する前記インデックスに記憶された前記データ識別情報の個数が特定の値の場合、前記指標値を算出しない、
付記１乃至８の何れかに記載のデータベースシステム。
［付記１０］
前記指標値記憶手段は、前記指標値を前記指標値の算出時刻に対応付けて記憶し、
前記第２のインデックス選択手段は、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、前記属性の値以外の前記属性の値に対応する前記算出時刻が新しい上位所定個数の前記指標値を前記指標値記憶手段から取得し、該取得した前記指標値に基づいて、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値の推定値を計算する、
付記３に記載のデータベースシステム。
［付記１１］
前記第２のインデックス選択手段は、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、取得できなかった前記指標値の推定値としてランダム値を使用する、
付記３に記載のデータベースシステム。
［付記１２］
前記第２のインデックス選択手段は、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、前記問合せを保存し、
前記指標値算出手段は、保存された前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記インデックスに記憶された前記データ識別情報の個数を算出し、前記個数に基づいて前記属性の値に対応する指標値を算出して前記指標値記憶手段に記憶する、
付記３に記載のデータベースシステム。
［付記１３］
前記データ記憶部は、キーバリューストアである、
付記１乃至１２の何れかに記載のデータベースシステム。
［付記１４］
前記データ記憶部は、分散キーバリューストアである、
付記１乃至１２の何れかに記載のデータベースシステム。
［付記１５］
複数の属性の値のセットと、前記複数の属性の値のうちの特定の一つからなるデータ識別情報とを、一対のデータとして記憶するデータ部と、前記特定の一つ以外の複数の前記属性のそれぞれに対応して、前記属性の値を前記セットに含む前記一対のデータの前記データ識別情報を記憶する複数のインデックスと、を記憶するように構成された、記憶装置に対して発行された問合せを入力し、前記問合せの結果を出力する情報処理装置であって、
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記インデックスに記憶された前記データ識別情報の個数を算出し、前記個数に基づいて前記属性の値に対応する指標値を算出する指標値算出手段と、
前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する第１のインデックス選択手段と、を有する、
情報処理装置。
［付記１６］
前記算出された前記指標値を前記属性の値に対応付けて記憶する指標値記憶手段を有する、
付記１５に記載の情報処理装置。
［付記１７］
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記指標値を前記指標値記憶手段から取得し、該取得した前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する第２のインデックス選択手段、を有し、
前記指標値算出手段と前記指標値記憶手段と前記第１のインデックス選択手段とを使用して前記問合せを処理する第１の運用フェーズから、前記指標値記憶手段と前記第２のインデックス選択手段とを使用して前記問合せを処理する第２の運用フェーズへ切り替え可能に構成されている、
付記１６に記載の情報処理装置。
［付記１８］
前記第２のインデックス選択手段は、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、前記属性の値以外の前記属性の値に対応する前記指標値を前記指標値記憶手段から取得し、該取得した前記指標値に基づいて、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値の推定値を計算する、
付記１７に記載の情報処理装置。
［付記１９］
前記第２のインデックス選択手段は、前記属性の値以外の前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、予め定められた初期値を、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値の推定値とする、
付記１８に記載の情報処理装置。
［付記２０］
前記指標値記憶手段は、前記指標値を前記指標値の算出時刻に対応付けて記憶する、
付記１６乃至１９の何れかに記載の情報処理装置。
［付記２１］
前記指標値算出手段は、前記指標値記憶手段に記憶された前記算出時刻に基づいて、一定時間以上経過した前記指標値を再計算あるいは無効にする、
付記２０に記載の情報処理装置。
［付記２２］
前記指標値記憶手段は、前記指標値を前記指標値の算出時刻に対応付けて記憶し、
前記第２のインデックス選択手段は、前記属性の値に対応する前記指標値を前記指標値記憶手段から取得したときに前記算出時刻に基づいて、一定時間以上経過した前記指標値を再計算あるいは無効にする、
付記１７乃至１９の何れかに記載の情報処理装置。
［付記２３］
前記指標値算出手段は、前記属性に対応する前記インデックスに記憶された前記データ識別情報の個数が特定の値の場合、前記指標値を算出しない、
付記１５乃至２２の何れかに記載の情報処理装置。
［付記２４］
前記指標値記憶手段は、前記指標値を前記指標値の算出時刻に対応付けて記憶し、
前記第２のインデックス選択手段は、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、前記属性の値以外の前記属性の値に対応する前記算出時刻が新しい上位所定個数の前記指標値を前記指標値記憶手段から取得し、該取得した前記指標値に基づいて、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値の推定値を計算する、
付記１７に記載の情報処理装置。
［付記２５］
前記第２のインデックス選択手段は、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、取得できなかった前記指標値の推定値としてランダム値を使用する、
付記１７に記載の情報処理装置。
［付記２６］
前記第２のインデックス選択手段は、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、前記問合せを保存し、
前記指標値算出手段は、保存された前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性に対応する前記インデックスに記憶された前記データ識別情報の個数を算出し、前記個数に基づいて前記属性の値に対応する指標値を算出して前記指標値記憶手段に記憶する、
付記１７に記載の情報処理装置。
［付記２７］
前記データ記憶部は、キーバリューストアである、
付記１５乃至２６の何れかに記載の情報処理装置。
［付記２８］
前記データ記憶部は、分散キーバリューストアである、
付記１５至２６の何れかに記載の情報処理装置。
［付記２９］
複数の属性の値のセットと、前記複数の属性の値のうちの特定の一つからなるデータ識別情報とを、一対のデータとして記憶するデータ部と、前記特定の一つ以外の複数の前記属性のそれぞれに対応して、前記属性の値を前記セットに含む前記一対のデータの前記データ識別情報を記憶する複数のインデックスと、を記憶するように構成された、記憶装置に対して発行された問合せを入力し、前記問合せの結果を出力する情報処理装置が実行する問合せ処理方法であって、
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記インデックスに記憶された前記データ識別情報の個数を算出し、前記個数に基づいて前記属性の値に対応する指標値を算出し、
前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する、
問合せ処理方法。
［付記３０］
前記算出された前記指標値を前記属性の値に対応付けて指標値記憶手段に記憶する、
付記２９に記載の問合せ処理方法。
［付記３１］
前記指標値の算出と前記インデックスの選択と前記指標値の記憶とを含む第１の問合せ処理方法を使用して前記問合せを処理する第１の運用フェーズから、
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記指標値を前記指標値記憶手段から取得し、該取得した前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する第２の問合せ処理方法を使用して前記問合せを処理する第２の運用フェーズへ切り替える、
付記３０に記載の問合せ処理方法。
［付記３２］
前記第２の運用フェーズにおいて、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、前記属性の値以外の前記属性の値に対応する前記指標値を前記指標値記憶手段から取得し、該取得した前記指標値に基づいて、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値の推定値を計算する、
付記３１に記載の問合せ処理方法。
［付記３３］
前記第２の運用フェーズにおいて、前記属性の値以外の前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、予め定められた初期値を、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値の推定値とする、
付記３２に記載の問合せ処理方法。
［付記３４］
前記指標値を前記指標値の算出時刻に対応付けて前記指標値記憶手段に記憶する、
付記３０乃至３３の何れかに記載の問合せ処理方法。
［付記３５］
前記第２の運用フェーズにおいて、前記指標値記憶手段に記憶された前記算出時刻に基づいて、一定時間以上経過した前記指標値を再計算あるいは無効にする、
付記３４に記載の問合せ処理方法。
［付記３６］
前記指標値を前記指標値の算出時刻に対応付けて前記指標値記憶手段に記憶し、
前記第２の運用フェーズにおいて、前記属性の値に対応する前記指標値を前記指標値記憶手段から取得したときに前記算出時刻に基づいて、一定時間以上経過した前記指標値を再計算あるいは無効にする、
付記３１乃至３３の何れかに記載の問合せ処理方法。
［付記３７］
前記第１の運用フェーズにおいて、前記属性に対応する前記インデックスに記憶された前記データ識別情報の個数が特定の値の場合、前記指標値を算出しない、
付記２９乃至３６の何れかに記載の問合せ処理方法。
［付記３８］
前記指標値を前記指標値の算出時刻に対応付けて前記指標値記憶手段に記憶し、
前記第２の運用フェーズにおいて、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、前記属性の値以外の前記属性の値に対応する前記算出時刻が新しい上位所定個数の前記指標値を前記指標値記憶手段から取得し、該取得した前記指標値に基づいて、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値の推定値を計算する、
付記３１に記載の問合せ処理方法。
［付記３９］
前記第２の運用フェーズにおいて、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、取得できなかった前記指標値の推定値としてランダム値を使用する、
付記３１に記載の問合せ処理方法。
［付記４０］
前記第２の運用フェーズにおいて、前記問合せで指定された検索対象となる前記属性の値に対応する前記指標値を前記指標値記憶手段から取得できない場合、前記問合せを保存し、
前記第２の運用フェーズから前記第１の運用フェーズへ切り替え、
前記第１の運用フェーズにおいて、保存された前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性に対応する前記インデックスに記憶された前記データ識別情報の個数を算出し、前記個数に基づいて前記属性の値に対応する指標値を算出して前記指標値記憶手段に記憶する、
付記３１に記載の問合せ処理方法。
［付記４１］
前記データ記憶部は、キーバリューストアである、
付記２９乃至４０の何れかに記載の問合せ処理方法。
［付記４２］
前記データ記憶部は、分散キーバリューストアである、
付記２９乃至４０の何れかに記載の問合せ処理方法。
［付記４３］
複数の属性の値のセットと、前記複数の属性の値のうちの特定の一つからなるデータ識別情報とを、一対のデータとして記憶するデータ部と、前記特定の一つ以外の複数の前記属性のそれぞれに対応して、前記属性の値を前記セットに含む前記一対のデータの前記データ識別情報を記憶する複数のインデックスと、を記憶するように構成された、記憶装置に対して発行された問合せを入力し、前記問合せの結果を出力するコンピュータを、
前記問合せで指定された検索対象となる前記属性の値ごとに、前記属性の値に対応する前記インデックスに記憶された前記データ識別情報の個数を算出し、前記個数に基づいて前記属性の値に対応する指標値を算出する指標値算出手段と、
前記指標値に基づいて、前記問合せの処理に使用する前記インデックスを選択する第１のインデックス選択手段と、
して機能させるためのプログラム。
【符号の説明】
【０１０５】
１００…データベースシステム
１１０…情報処理装置
１１１…問合せ処理装置
１１２…指標値記憶装置
１１３…指標値計算装置
１１４…第１のインデックス選択装置
１１５…第２のインデックス選択装置
１２０…キーバリューストア
１２１…データ部
１２２…インデックス
１３０…クライアント装置１
１４０…情報処理装置
１４１…演算処理部
１４２…記憶部
１４３…通信部
１４４…プログラム
２００…データベースシステム
２１０…情報処理装置
２１１…指標値算手段
２１２…インデックス選択手段
２２０…記憶装置
２２１…データ部
２２２…インデックス
【図１】
2017142672.tif 000003
【図２】
2017142672.tif 000004
【図３】
2017142672.tif 000005
【図４】
2017142672.tif 000006
【図５】
2017142672.tif 000007
【図６】
2017142672.tif 000008
【図７】
2017142672.tif 000009
【図８】
2017142672.tif 000010
【図９】
2017142672.tif 000011
【図１０】
2017142672.tif 000012
【図１１】
2017142672.tif 000013
【図１２】
2017142672.tif 000014
【図１３】
2017142672.tif 000015
【図１４】
2017142672.tif 000016
【図１５】
2017142672.tif 000017