(57)【要約】【課題】キーバリューストアを実装したデータベースにおいて、アクセスパスによる性能差の発生を抑制し得る、データベース管理装置、データベース管理方法、及びプログラムを提供する。【解決手段】データベース２０は、データ毎に、１の値をアクセスパスとなるキーに割当て、このキー以外の値によるアクセスパスを提供する索引を設定し、各データ、割当てられたキー及び索引を格納する。データベース管理装置１０は、索引を経由したアクセスパスの実績を記録する、アクセスパス記録部１１と、データベース２０を構築している記憶装置の記憶容量の使用率を特定する、記憶容量監視部１２と、使用率が閾値以下である場合に、索引のアクセスパスの実績が設定条件を満たすか否かを判定する、実体化判定部１３と、実績が設定条件を満たす場合に、データベース２０の索引にデータの値を付加する、索引実体化部１４とを備えている。【選択図】図１
2018041174.tif 000002
【特許請求の範囲】
【請求項１】
複数の値を含むデータ毎に、当該データに含まれる値の１つを、アクセスパスとなるキーに割当て、更に、割当てられた前記キー以外の値によるアクセスパスを提供する索引を設定し、各データ、割当てられた前記キー及び前記索引を格納する、データベースを管理するための装置であって、
外部から前記データベースに前記索引を経由してアクセスした際のアクセスパスの実績を記録する、アクセスパス記録部と、
前記データベースを構築している記憶装置の記憶容量の使用率を特定する、記憶容量監視部と、
特定された前記使用率が閾値以下である場合に、前記索引の前記アクセスパスの実績が設定条件を満たすかどうかを判定する、実体化判定部と、
前記実体化判定部によって、前記アクセスパスの実績が前記設定条件を満たしていると判定された場合に、前記データベースにおいて、前記索引に、対応する前記データの値を付加する、索引実体化部と、
を備えている、ことを特徴とするデータベース管理装置。
【請求項２】
前記データべースにおいて、複数の前記索引が設定されており、
前記アクセスパス記録部が、複数の前記索引それぞれ毎に、前記アクセスパスの実績を記録し、
前記実体化判定部が、複数の前記索引それぞれ毎に、当該索引の前記アクセスパスの実績が設定条件を満たすかどうかを判定し、
前記索引実体化部が、複数の前記索引のうち前記設定条件を満たしている前記索引に対して、対応する前記データの値を付加する、
請求項１に記載のデータベース管理装置。
【請求項３】
前記実体化判定部は、前記設定条件として、アクセス回数が設定された範囲にあることを用いて、判定を行なう、
請求項１または２に記載のデータベース管理装置。
【請求項４】
前記索引実体化部は、前記使用率が第２の閾値を超えた場合に、前記索引に付加された前記データを前記データベースから削除する、
請求項１〜３のいずれかに記載のデータベース管理装置。
【請求項５】
複数の値を含むデータ毎に、当該データに含まれる値の１つを、アクセスパスとなるキーに割当て、更に、割当てられた前記キー以外の値によるアクセスパスを提供する索引を設定し、各データ、割当てられた前記キー及び前記索引を格納する、データベースを管理するための方法であって、
（ａ）外部から前記データベースに前記索引を経由してアクセスした際のアクセスパスの実績を記録する、ステップと、
（ｂ）前記データベースを構築している記憶装置の記憶容量の使用率を特定する、ステップと、
（ｃ）特定された前記使用率が閾値以下である場合に、前記索引の前記アクセスパスの実績が設定条件を満たすかどうかを判定する、ステップと、
（ｄ）前記（ｃ）のステップによって、前記アクセスパスの実績が前記設定条件を満たしていると判定された場合に、前記データベースにおいて、前記索引に、対応する前記データの値を付加する、ステップと、
を有する、ことを特徴とするデータベース管理方法。
【請求項６】
複数の値を含むデータ毎に、当該データに含まれる値の１つを、アクセスパスとなるキーに割当て、更に、割当てられた前記キー以外の値によるアクセスパスを提供する索引を設定し、各データ、割当てられた前記キー及び前記索引を格納する、データベースを、コンピュータによって、管理するためのプログラムであって、
前記コンピュータに、
（ａ）外部から前記データベースに前記索引を経由してアクセスした際のアクセスパスの実績を記録する、ステップと、
（ｂ）前記データベースを構築している記憶装置の記憶容量の使用率を特定する、ステップと、
（ｃ）特定された前記使用率が閾値以下である場合に、前記索引の前記アクセスパスの実績が設定条件を満たすかどうかを判定する、ステップと、
（ｄ）前記（ｃ）のステップによって、前記アクセスパスの実績が前記設定条件を満たしていると判定された場合に、前記データベースにおいて、前記索引に、対応する前記データの値を付加する、ステップと、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キーバリューストアを実装したデータベースを管理するための、データベース管理装置、及びデータベース管理方法に関し、更に、これらを実現するためのプログラムに関する。
【背景技術】
【０００２】
近年、極めて大量のデータを保管するための方式として、キーバリューストア（以下「KVS」（Key Value Store）と表記する）が注目されている。KVSは、保存対象となるデータ（バリュー）に対して、対応する一意のキーを設定し、両者をペアで保存する方式である（例えば、特許文献１参照）。また、対象となるデータを複数のサーバに分散してKVS方式で保存する方式は、特に、分散KVSと呼ばれている。KVSを実装したシステムの例としては、例えば、Voldemortが知られている（例えば、非特許文献１参照）。
【０００３】
一般にKVSでは、スケーラビリティとスループットとが重視されており、KVSが実装されたシステムでは、少数のノードからなる構成に、必要に応じてノードを追加することができ、これによって拡張が可能となっている。このため、KVSには、膨大なデータに対する多数の要求を同時に処理することが期待されている。
【０００４】
但し、KVSのシステムへの実装においては、スケーラビリティを重視するために、データはキーとバリューとからなる単純な構造（以下「キーバリューペア」又は「KVペア」と表記する）で表現されている必要がある。このため、KVSを実装したシステムにおいて、対応できる操作は、KVペアのキーを指定してバリューを取得（get）する操作、KVペアを格納（put）する操作、及びKVペアのキーを指定してKVペアを削除（delete）する操作のみである。
【０００５】
一方、コンピュータシステムにおいてデータを格納する場合は、リレーショナルデータベース（以下「RDB」(Relational Database)と表記する）が広く利用されている。RDBは柔軟な表形式のデータ構造と多くの機能を備えるが、RDBにおけるスケーラビリティは限られる。
【０００６】
このため、RDBの表形式でのデータ管理をKVS上で実現し、スケーラビリティに優れたものにする試みとしてMicroshardingが知られている（例えば、非特許文献２参照）。非特許文献２に開示されたシステム（Microsharding）では、まず、すべてのデータは、KVS形式でデータベースに格納される。
【０００７】
図７は、従来からのKVSを説明するための説明図である。図７に示すように、データベースには、KVS形式のデータが格納される。KVS形式のデータは、１行毎に、キーとバリューとで構成されている。また、キーには、表形式のデータの任意の列の値が格納され、バリューには、表形式のデータの全ての列の値が格納される。このような構成により、通常のKVSでは、基本的にキーの値を指定することによるKVペアの取得しか行えないが、別の外部構造を備えることで、キーとした列以外の値でのアクセスが可能となる。
【０００８】
非特許文献２に開示されたシステムは、このような外部構造を提供する。ここで、データにアクセスするための経路であるキーを「アクセスパス」と呼び、キー以外のためのアクセスパスを提供する外部構造を「索引」と呼ぶ。図７に示すように、非特許文献２に開示されたシステムでは、索引を用意することで、キー以外の値からデータにアクセスすることが可能になる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１３−１７８６６０号公報
【非特許文献】
【００１０】
【非特許文献１】“Project voldemort”，［online］，［平成27年8月16日検索］，インターネット＜URL：http://www.project-voldemort.com/＞
【非特許文献２】Junichi Tatemura, Oliver Po, Wang-Pin Hsiung, and Hakan Haciguemues, “Partiqle: an elastic SQL engine over key-value stores”,The 2012 ACM SIGMOD International Conference on Management of Data, 2012
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、非特許文献２に開示されたシステムでは、キーを指定したアクセスと、索引の値を指定したアクセスとの間において、性能差が存在している。
【００１２】
例えば、図７に示されたデータベースにおいて、アクセスのための主キーとしてIDが指定されているとする。この場合、システムは、単に、IDを指定したデータ取得命令、例えば「get(2)」を発行する。
【００１３】
これに対して、図７に示されたデータベースにおいて、アクセスのために、索引の値が指定されたとする。この場合、システムは、まず、索引の値を指定してデータ取得命令を発行し、主キーを取得する。そして、システムは、取得した主キーを用いて、再度データ取得命令を発効する。例えば、図７に示すように、索引の値が都道府県である場合に、都道府県の名称を取得するデータ取得命令「get("埼玉県")」が発行されると、その結果に基づいて、「get(2)」及び「get(3)」が発行される。
【００１４】
このように、非特許文献１に開示されたシステムでは、KVSでキーとして格納した属性以外の値から目的のデータを取得する際において、予め用意された索引を経由する必要がある。つまり、この場合は、システムは、より多くのデータにアクセスする必要があるため、アクセスにおける性能が低下してしまう。
【００１５】
本発明の目的の一例は、上記問題を解消し、キーバリューストアを実装したデータベースにおいて、アクセスパスによる性能差の発生を抑制し得る、データベース管理装置、データベース管理方法、及びプログラムを提供することにある。
【課題を解決するための手段】
【００１６】
上記目的を達成するため、本発明の一側面におけるデータベース管理装置は、複数の値を含むデータ毎に、当該データに含まれる値の１つを、アクセスパスとなるキーに割当て、更に、割当てられた前記キー以外の値によるアクセスパスを提供する索引を設定し、各データ、割当てられた前記キー及び前記索引を格納する、データベースを管理するための装置であって、
外部から前記データベースに前記索引を経由してアクセスした際のアクセスパスの実績を記録する、アクセスパス記録部と、
前記データベースを構築している記憶装置の記憶容量の使用率を特定する、記憶容量監視部と、
特定された前記使用率が閾値以下である場合に、前記索引の前記アクセスパスの実績が設定条件を満たすかどうかを判定する、実体化判定部と、
前記実体化判定部によって、前記アクセスパスの実績が前記設定条件を満たしていると判定された場合に、前記データベースにおいて、前記索引に、対応する前記データの値を付加する、索引実体化部と、
を備えている、ことを特徴とする
【００１７】
また、上記目的を達成するため、本発明の一側面におけるデータベース管理方法は、複数の値を含むデータ毎に、当該データに含まれる値の１つを、アクセスパスとなるキーに割当て、更に、割当てられた前記キー以外の値によるアクセスパスを提供する索引を設定し、各データ、割当てられた前記キー及び前記索引を格納する、データベースを管理するための方法であって、
（ａ）外部から前記データベースに前記索引を経由してアクセスした際のアクセスパスの実績を記録する、ステップと、
（ｂ）前記データベースを構築している記憶装置の記憶容量の使用率を特定する、ステップと、
（ｃ）特定された前記使用率が閾値以下である場合に、前記索引の前記アクセスパスの実績が設定条件を満たすかどうかを判定する、ステップと、
（ｄ）前記（ｃ）のステップによって、前記アクセスパスの実績が前記設定条件を満たしていると判定された場合に、前記データベースにおいて、前記索引に、対応する前記データの値を付加する、ステップと、
を有する、ことを特徴とする。
【００１８】
更に、上記目的を達成するため、本発明の一側面におけるプログラムは、複数の値を含むデータ毎に、当該データに含まれる値の１つを、アクセスパスとなるキーに割当て、更に、割当てられた前記キー以外の値によるアクセスパスを提供する索引を設定し、各データ、割当てられた前記キー及び前記索引を格納する、データベースを、コンピュータによって、管理するためのプログラムであって、
前記コンピュータに、
（ａ）外部から前記データベースに前記索引を経由してアクセスした際のアクセスパスの実績を記録する、ステップと、
（ｂ）前記データベースを構築している記憶装置の記憶容量の使用率を特定する、ステップと、
（ｃ）特定された前記使用率が閾値以下である場合に、前記索引の前記アクセスパスの実績が設定条件を満たすかどうかを判定する、ステップと、
（ｄ）前記（ｃ）のステップによって、前記アクセスパスの実績が前記設定条件を満たしていると判定された場合に、前記データベースにおいて、前記索引に、対応する前記データの値を付加する、ステップと、
を実行させることを特徴とする。
【発明の効果】
【００１９】
以上のように、本発明によれば、キーバリューストアを実装したデータベースにおいて、アクセスパスによる性能差の発生を抑制することができる。
【図面の簡単な説明】
【００２０】
【図１】図１は、本発明の実施の形態におけるデータベース管理装置の構成を概略的に示すブロック図である。
【図２】図２は、本発明の実施の形態におけるデータベース管理装置の構成を具体的に示すブロック図である。
【図３】図３は、本発明の実施の形態においてデータベースに格納されているデータを説明するための図である。
【図４】図４は、本発明の実施の形態におけるデータベース管理装置の動作を示すフロー図である。
【図５】図５は、本発明の実施の形態における処理が行なわれた場合のデータベースの状態の一例を示す図であり、図５（ａ）〜（ｃ）は一連の変化を示している。
【図６】図６は、本発明の実施の形態におけるデータベース管理装置を実現するコンピュータの一例を示すブロック図である。
【図７】図７は、従来からのKVSを説明するための説明図である。
【発明を実施するための形態】
【００２１】
（実施の形態）
以下、本発明の実施の形態における、データベース管理装置、データベース管理方法、及びプログラムについて、図１〜図６を参照しながら説明する。
【００２２】
［装置構成］
最初に、図１を用いて、本実施の形態におけるデータベース管理装置の構成について説明する。図１は、本発明の実施の形態におけるデータベース管理装置の構成を概略的に示すブロック図である。
【００２３】
図１に示すように、本実施の形態におけるデータベース管理装置１０は、データべース２０を管理するための装置である。また、データべース２０は、KVSを実装しており、複数の値を含むデータ毎に、各データに含まれる値の１つを、アクセスパスとなるキーに割当ている。また、データべース２０では、割当てられた主キー以外の値によるアクセスパスを提供する索引も設定されている。更に、データべース２０は、各データ、割当てられた主キー、及び索引を格納する。
【００２４】
また、図１に示すように、本実施の形態におけるデータベース管理装置１０は、アクセスパス記録部１１と、記憶容量監視部１２と、実体化判定部１３と、索引実体化部１４とを備えている。
【００２５】
アクセスパス記録部１１は、外部からデータべース２０に索引を経由してアクセスした際のアクセスパスの実績を記録する。記憶容量監視部１２は、データべース２０を構築している記憶装置の記憶容量の使用率を特定する。
【００２６】
実体化判定部１３は、記憶容量監視部１２によって特定された使用率が閾値以下である場合に、索引の実績が設定条件を満たすかどうかを判定する。索引実体化部１４は、実体化判定部１３によって、アクセスパスの実績が設定条件を満たしていると判定された場合に、データべース２０において、索引に、対応するデータの値を付加する。これによって、索引が実体化される。
【００２７】
このように、本実施の形態におけるデータベース管理装置１０では、キーバリューストアを実装したデータべース２０において、一定の条件下で、索引に対して、対応するデータの値が付加される。このため、データベース管理装置１０によれば、アクセスパスによる性能差の発生を抑制することが可能となる。
【００２８】
続いて、図２及び図３を用いて、本実施の形態におけるデータベース管理装置１０の構成をより具体的に説明する。図２は、本発明の実施の形態におけるデータベース管理装置の構成を具体的に示すブロック図である。図３は、本発明の実施の形態においてデータベースに格納されているデータを説明するための図である。
【００２９】
図２に示すように、本実施の形態においては、データベース管理装置１０は、ネットワークを介して、データベース２０及び問合せ処理装置３０に接続されている。また、問合せ処理装置３０は、データベース２０を利用するユーザのクライアント端末４０に接続されている。
【００３０】
クライアント端末４０は、ユーザが、データの取得、登録、又は削除を要求すると、要求に応じて、ｇｅｔ命令、ｐｕｔ命令、又はｄｅｌｅｔｅ命令を発行し、発行した命令を問合せ処理装置３０に送信する。
【００３１】
問合せ処理装置３０は、送信されてきた命令を受け付けると、データベース２０に対して、命令に応じた処理を行ない、処理結果を生成し、生成した処理結果をクライアント端末４０に返却する。
【００３２】
データベース２０は、本実施の形態では、記憶装置２５の記憶領域上に構築されている。また、データベース２０は、ユーザが使用するユーザデータ２１を、KVS方式によって格納している。具体的には、ユーザデータ２１には、実データ２２と、索引２３とが含まれている。このうち、実データ２２は、図７にも示したKVS形式のデータである。また、図３に示すように、実データ２２は、１行毎に、キーとバリューとで構成されている。
【００３３】
更に、図３に示すように、本実施の形態では、バリューには、データ値、索引、実体索引情報の３つのフィールドが設定されている。また、フィールドの設定は、下記の例１に示すように、データを、特定のバイト列で区切ることによって行なわれていても良いし、下記の例２に示すように、データの前に、次のフィールドのバイト数を付加することによって行なわれていても良い。
【００３４】
（例１）
<データ値フィールド><区切りバイト列>
<索引フィールド><区切りバイト列>
<実態索引情報フィールド>
【００３５】
（例２）
<次のフィールドのバイト数><データ値フィールド>
<次のフィールドのバイト数><索引フィールド>
<次のフィールドのバイト数><実態索引情報フィールド>
【００３６】
具体的には、図３の例において、キーには、KVS形式のデータで用いられる主キー、又は索引のアクセスパス（索引のKVペアのキー）が格納される。また、キーに主キーが格納される場合（実データのKVペアにおいて）、バリューの「データ値」には、通常のKVS形式のデータのバリューと同様の値（図７参照）が格納される。更に、キーに索引のアクセスパスが格納される場合（索引のKVペアにおいて）、バリューの「索引」には、通常のKVSに設定される索引と同様に、このアクセスパスに対応しているデータの主キーの値（図７参照）が格納される。
【００３７】
また、後述する索引実体化部１４によって、索引を実体化する場合（データ値を付加する場合）、実データのKVペアにおいて、バリューの実体索引情報には、実体化される索引のアクセスパスの値が格納される。更に、この場合、索引のKVペアにおいて、バリューの索引には、付加されるデータ値が格納される。
【００３８】
アクセスパス記録部１１は、索引の利用状況を記録する。本実施の形態では、アクセスパス記録部１１は、クライアント端末４０からの要求に応じて、問合せ処理装置３０がデータベース２０のユーザデータ２１にアクセスすると、これを検知し、アクセスパスとして主キー及び索引のアクセスパスのいずれが用いられているのかを判定する。
【００３９】
そして、アクセスパス記録部１１は、アクセスパスとして索引のアクセスパス（索引のKVペアのキー）が用いられている場合は、この索引のアクセスパスを用いたアクセスに関する情報、例えば、アクセスパス（KVペアのキー）の値（索引の名称を含む）、アクセス日時等をデータベース２０に書き込み、アクセスパス統計情報２４を更新する。
【００４０】
また、アクセスパス統計情報２４には、例えば、利用されたアクセスパスの履歴、最終アクセス日時、及び各操作（読み込み操作、書き込み操作）毎の累積アクセス回数が含まれている。このアクセスパス統計情報２４は、アクセスパスの実績に相当する。
【００４１】
記憶容量監視部１２は、本実施の形態では、データベース２０を構築する記憶装置２５の空き容量を特定し、更に、特定した空き容量から、記憶装置２５の記憶容量の使用率を算出する。また、記憶容量監視部１２は、特定した使用率を、実体化判定部１３に通知する。
【００４２】
実体化判定部１３は、本実施の形態では、まず、データベース管理装置１０に予め設定されている指標に基づいて、記憶装置の記憶容量の使用率についての判断を実行する。本実施の形態で設定される指標は、下記の実体化可能値Rmと、実体化終了値Rdと２つである。なお、実体化可能値Rmと、実体化終了値Rdとの間には、不等式「Rm＜Rd」が成立しているとする。
【００４３】
（１）実体化可能値Rm：記憶装置の記憶容量の使用率がこの値以下となっている間だけ、索引の実体化が行なわれる。
（２）実体化終了値Rd：記憶装置の記憶容量の使用率がこの値を上回ると、その後の問合せの処理で発見された実体化データ（索引に付加されたデータ）は全て削除され、実体化が終了する。
【００４４】
そして、実体化判定部１３は、記憶装置２５の現在の記憶容量の使用率を「u」としたときに、「u≦ Rm」となっているかどうかを判定する。判定の結果、「u≦ Rm」となっている場合は、実体化判定部１３は、索引のアクセスの実績が設定条件を満たすかどうかを判定する。
【００４５】
一方、判定の結果、「Rm＜u」となっている場合は、実体化判定部１３は、更に、「Rd＜u」となっているかどうかを判定する。判定の結果、「Rd＜u」となっている場合は、実体化判定部１３は、索引実体化部１４に、索引の実体化の終了を指示する。また、判定の結果、「Rd＜u」となっていない場合は、「Rm＜u≦Rd」が成立するので、実体化判定部１３は処理を終了する。
【００４６】
また、実体化判定部１３は、「u≦ Rm」となっている場合は、索引の実体化の判定のため、まず、アクセスパス統計情報２４を取得する。そして、実体化判定部１３は、例えば、設定条件Cmとして、アクセス回数が設定された範囲にあることを用いて、設定条件Cmとアクセスパス統計情報２４とを比較して、索引の実体化を行なうかどうかを判定する。
【００４７】
具体的には、設定条件Cmとしては、「書込み操作の累積アクセス回数＜n」、且つ、「読み込み操作の累積アクセス回数＞ｍ」が挙げられる。なお、n及びmは、予め設定された閾値である。なお、累積アクセス回数は、アクセスパス統計情報２４に含まれている情報である。設定条件Cmが満たされる場合は、実体化判定部１３は、索引実体化部１４に、索引の実体化を指示する。
【００４８】
索引実体化部１４は、本実施の形態では、実体化判定部１３によって実体化が指示されると、データべース２０において、索引に、対応するデータの値を付加する。具体的には、索引実体化部１４は、上述したように、キーに主キーが格納されているバリューの実体索引情報に、実体化される索引のアクセスパスの値を格納し、キーに索引のKVペアのキーが格納されているバリューの索引に、付加すべきデータ値を格納する（後述の図６参照）。
【００４９】
また、索引実体化部１４は、実体化判定部１３によって索引の実体化の終了が通知されると、索引に付加されているデータをデータベース２０から削除する。具体的には、索引実体化部１４は、キーに主キーが格納されているバリューの実体索引情報の値と、キーに索引のKVペアのキーが格納されているバリューの索引の値とを削除する（後述の図６参照）。
【００５０】
また、本実施の形態では、データベース２０において、１つの実データ２２に対して、複数の索引２３が設定されていても良い。この場合、アクセスパス記録部１１は、設定されている索引毎に、アクセスパスの実績（アクセスパス統計情報２４）を記録する。また、この場合、実体化判定部１３は、設定されている索引毎に、各索引のアクセスパスの実績が設定条件を満たすかどうかを判定する。更に、この場合、索引実体化部１４は、複数の索引のうち設定条件を満たしている索引に対して、対応するデータの値を付加（実体化を実行）する。
【００５１】
［装置動作］
次に、本発明の実施の形態におけるデータベース管理装置１０の動作について図４を用いて説明する。図４は、本発明の実施の形態におけるデータベース管理装置の動作を示すフロー図である。また、本実施の形態では、データベース管理装置１０を動作させることによって、データベース管理方法が実施される。よって、本実施の形態におけるデータベース管理方法の説明は、以下のデータベース管理装置１０の動作説明に代える。
【００５２】
図４に示すように、最初に、アクセスパス記録部１１は、問合せ処理装置３０によって、索引を経由したデータベース２０へのアクセスが行なわれているかどうかを判定する（ステップＡ１）。
【００５３】
具体的には、ステップＡ１では、アクセスパス記録部１１は、問合せ処理装置３０がデータベース２０のユーザデータ２１にアクセスすると、これを検知し、アクセスパスとして主キー及び索引のアクセスパスのいずれが用いられているのかを判定する。
【００５４】
ステップＡ１の判定の結果、索引を経由したアクセスが行なわれていない場合は、アクセスパス記録部１１は、待機状態となる。一方、ステップＡ１の判定の結果、索引を経由したアクセスが行なわれている場合は、アクセスパス記録部１１は、アクセスに関する情報をデータベース２０に書き込み、アクセスパス統計情報２４を更新する（ステップＡ２）。
【００５５】
次に、ステップＡ２が実行されると、記憶容量監視部１２は、データベース２０を構築する記憶装置２５の空き容量を特定し、特定した空き容量から、記憶装置２５の記憶容量の使用率を算出する（ステップＡ３）。
【００５６】
次に、実体化判定部１３は、ステップＡ３で算出された使用率が、実体化可能値Rm以下であるかどうかを判定する（ステップＡ４）。ステップＡ４の判定の結果、使用率が実体化可能値Rm以下である場合は、実体化判定部１３は、更に、アクセスパス統計情報２４を取得し、設定条件Cmとアクセスパス統計情報２４とを比較して、設定条件Cmが満たされているかどうかを判定する（ステップＡ５）。
【００５７】
ステップＡ５の判定の結果、設定条件Cmが満たされていない場合は、データベース管理装置１０における処理は終了する。一方、ステップＡ５の判定の結果、設定条件Cmが満たされている場合は、実体化判定部１３は、索引実体化部１４に、索引の実体化を指示する。これにより、索引実体化部１４は、データべース２０において、索引に、対応するデータの値を付加して、索引を実体化させる（ステップＡ６）。
【００５８】
また、ステップＡ４の判定の結果、使用率が実体化可能値Rmを超えている場合は、実体化判定部１３は、ステップＡ３で算出された使用率が、実体化終了値Rdより大きいかどうかを判定する（ステップＡ７）。
【００５９】
ステップＡ７の判定の結果、使用率が実体化終了値Rdより大きくない場合は、データベース管理装置１０における処理は終了する。一方、ステップＡ７の判定の結果、使用率が実体化終了値Rdより大きい場合は、実体化判定部１３は、索引実体化部１４に、索引の実体化の終了を指示する。これにより、索引実体化部１４は、索引に付加されているデータをデータベース２０から削除して、索引の実体化を終了する。
【００６０】
また、上述のステップＡ１〜Ａ８は、データベース２０の稼動中において繰り返し実行される。図４の例では、アクセスパス統計情報２４が更新される度に、索引の実体化の判定が行なわれているが、本実施の形態は、これに限定されない。本実施の形態では、索引の実体化の判定は、一定期間毎に行なわれても良いし、アクセスパス統計情報２４が設定回数更新されたことを条件に行なわれても良い。
【００６１】
ここで、図５を用いて、ステップＡ６及びＡ８について具体的に説明する。図５は、本発明の実施の形態における処理が行なわれた場合のデータベースの状態の一例を示す図であり、図５（ａ）〜（ｃ）は一連の変化を示している。
【００６２】
図５（ａ）に示すように、索引の実体化が行われていない初期状態では、索引のKVペアにおいて、バリューの索引には、対応する主キーの値のみが格納されている。また、初期状態では、実データのKVペアにおいて、バリューの実体索引情報には、何も格納されていない。
【００６３】
この状態において、実体化判定部１３が索引の実体化を指示したとする。この場合、図５（ｂ）に示すように、索引実体化部１４は、実データのKVペアの実体化索引情報において、実体化する索引の識別子を書き込こみ、更に、このKVペアのデータ値を記憶する。
【００６４】
例えば、キーとして「都道府県」が用いられる索引の実体化が指示されているとする。このため、索引実体化部１４は、実データのKVペアの実体化索引情報に「都道府県」と書き込み、更に、データ値として「２，佐藤、埼玉県」を記憶する。なお、書き込み及び記憶は、実データの全てのKVペアに対して行なわれる。
【００６５】
続いて、図５（ｂ）に示すように、索引実体化部１４は、各索引のKVペアにおいて、バリューの索引に、先に記憶した各実データのデータ値のうち、キーの値と一致するデータ値をもったものを、コピーする。これにより、アクセスパスとして、例えば「埼玉県」を用いて、データへのアクセスが必要な場合に、索引のKVペアにアクセスするだけでデータ値を取得できるので、データへのアクセスコストが低減される。
【００６６】
また、実体化を終了する場合は、索引実体化部１４は、索引のKVペアにおけるバリューの索引に付加されたデータを削除し、実データのKVペアの実体化索引情報に書き込まれている情報も削除する。
【００６７】
また、問合せ処理装置３０が、索引を経由しないで実データ２２にアクセスすると、索引実体化部１４は、アクセスされた実データのKVペアの実体化索引情報から、対応する索引のKVペアを特定し、特定したバリューの索引に、データ値をコピーすることもできる。更に、問合せ処理装置３０が、実体化されていない索引を経由して実データ２２にアクセスした場合も、索引実体化部１４は、同様の処理を行なうことができる。
【００６８】
［実施の形態における効果］
以上のように、本実施の形態では、一定の条件下で、データベースに設けられている索引が自動的に実体化されるので、キーを指定したアクセスと、索引の値を指定したアクセスとの間の性能差が抑制される。
【００６９】
また、索引の実体化を無条件に実施すると、記憶装置の記憶容量が大量に消費されてしまうが、本実施の形態では、記憶容量の使用率を考慮して、一定条件でのみ実体化が行なわれるため、記憶容量の消費が適切に制御される。また、一定の条件下で不要と判断された実体化データを自動的に削除することもできるので、更新コストと記憶容量の使用率とのバランスが図られる。
【００７０】
また、索引を実体化すると、データベースを更新する際のコストが増加してしまうが、本実施の形態では、索引を実体化するかどうかの判定基準として、読み書き別のアクセス数を規定する設定条件Cmが用いられる。このため、本実施の形態によれば、アクセスコスト、記憶容量の消費量、及び更新コストのバランスをとりつつ、索引の実体化を行うことができるので、データベースにおける性能の向上が実現される。
【００７１】
ところで、本実施の形態によらずに、予めデータのアクセス傾向を見極め、KVSにデータを格納する際に、アクセスパスとなりやすい属性をキーとして格納することが考えられる。しかしながら、この場合は、アクセス傾向を予測してデータ構造の設計が必要になるという問題と、長期に渡る運用でアクセス傾向が変化した際に、これに追従できないという問題とが発生してしまう。また、アクセス傾向の見極めに失敗すると、アクセス傾向に適合しないデータ構造となる可能性があり、この場合は、逆に性能が低下してしまう。
【００７２】
これに対して、本実施の形態では、複数の索引それぞれ毎にアクセス傾向を見極め、索引毎に実体化することができるので、アクセス傾向の変化に追従することができる。従って、本実施の形態によれば、上述の問題を全て解消することができる。
【００７３】
［変形例１］
上述した例では、使用率uが実体化終了値Rdより大きい場合にのみ、索引の実体化の終了処理が行われているが、本変形例１では、以下のように変更することができる。
【００７４】
例えば、索引の実体化の終了条件として、アクセスパス記録部１１が記録したKVペアへの最終アクセス日時から設定期間が経過していることが、用いられていても良い。この場合、アクセスの頻度が低く、且つ、実体化の効果が少ない索引について、実体化が終了する。
【００７５】
また、索引の実体化の終了条件として、書き込み操作の累積アクセス回数を用いて、アクセス数が非常に多い索引の実体化を終了することもできる。実体化したデータが多数存在すると、データベースにおけるデータの更新時において、実データに加え実体化データも更新しなければならず、更新コストが上がる。よって、頻繁に更新されるデータを実体化しない方が全体として更新コストを低下させることができるからである。
【００７６】
［変形例２］
また、本変形例２では、索引の実体化のための設定条件Cmとして、以下の（ａ）〜（ｃ）の全てを満たす条件を用いることができる。
（ａ）書込み操作の累積アクセス回数＜n
（ｂ）読み込み操作の累積アクセス回数＞ｍ
（ｃ）最終アクセス日時からの経過時間＜ｔ
【００７７】
上記条件において、tは、管理者によって設定される任意の経過時間である。上記（ａ）〜（ｃ）の条件によれば、一定頻度でアクセスがあり、実体化された場合に頻繁に使用されると予測される、索引のKVペアについて実体化が行なわれる。
【００７８】
［変形例３］
また、本実施の形態では、実体化されたデータの削除処理のために、データベース管理装置１０において、バックグランドで動作するガーベージコレクタが導入されていても良い。この場合、ガーベージコレクタによって、KVSの内容の全件スキャン機能が提供されているのであれば、索引実体化部１４は、KVペア全てに対してスキャンを行い、実体化判定部１３に対して、各KVペアについて、これまでに述べた条件に基づいて、削除すべきかどうかの判断を行なうように要求する。
【００７９】
そして、索引実体化部１４は、実体化判定部１３から削除すべきと応答があれば、削除すべきと判断されたKVペアを削除する。このような手法によれば、ある時点以降一切アクセスされなくなった実体化データを削除できるので、記憶装置の空き容量を回復することが可能になる。
【００８０】
［プログラム］
本実施の形態におけるプログラムは、コンピュータに、図４に示すステップＡ１〜Ａ８を実行させるプログラムであれば良い。このプログラムをコンピュータにインストールし、実行することによって、本実施の形態におけるデータベース管理装置１０とデータ管理方法とを実現することができる。この場合、コンピュータのＣＰＵ（Central Processing Unit）は、アクセスパス記録部１１、記憶容量監視部１２、実体化判定部１３、及び索引実体化部１４として機能し、処理を行なう。
【００８１】
また、本実施の形態におけるプログラムは、複数のコンピュータによって構築されたコンピュータシステムによって実行されても良い。この場合は、例えば、各コンピュータが、それぞれ、アクセスパス記録部１１、記憶容量監視部１２、実体化判定部１３、及び索引実体化部１４のいずれかとして機能しても良い。
【００８２】
ここで、本実施の形態におけるプログラムを実行することによって、データベース管理装置１０を実現するコンピュータについて図６を用いて説明する。図６は、本発明の実施の形態におけるデータベース管理装置を実現するコンピュータの一例を示すブロック図である。
【００８３】
図６に示すように、コンピュータ１１０は、ＣＰＵ１１１と、メインメモリ１１２と、記憶装置１１３と、入力インターフェイス１１４と、表示コントローラ１１５と、データリーダ／ライタ１１６と、通信インターフェイス１１７とを備える。これらの各部は、バス１２１を介して、互いにデータ通信可能に接続される。
【００８４】
ＣＰＵ１１１は、記憶装置１１３に格納された、本実施の形態におけるプログラム（コード）をメインメモリ１１２に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ１１２は、典型的には、ＤＲＡＭ（Dynamic Random Access Memory）等の揮発性の記憶装置である。また、本実施の形態におけるプログラムは、コンピュータ読み取り可能な記録媒体１２０に格納された状態で提供される。なお、本実施の形態におけるプログラムは、通信インターフェイス１１７を介して接続されたインターネット上で流通するものであっても良い。
【００８５】
また、記憶装置１１３の具体例としては、ハードディスクドライブの他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス１１４は、ＣＰＵ１１１と、キーボード及びマウスといった入力機器１１８との間のデータ伝送を仲介する。表示コントローラ１１５は、ディスプレイ装置１１９と接続され、ディスプレイ装置１１９での表示を制御する。
【００８６】
データリーダ／ライタ１１６は、ＣＰＵ１１１と記録媒体１２０との間のデータ伝送を仲介し、記録媒体１２０からのプログラムの読み出し、及びコンピュータ１１０における処理結果の記録媒体１２０への書き込みを実行する。通信インターフェイス１１７は、ＣＰＵ１１１と、他のコンピュータとの間のデータ伝送を仲介する。
【００８７】
また、記録媒体１２０の具体例としては、ＣＦ（Compact Flash（登録商標））及びＳＤ（Secure Digital）等の汎用的な半導体記憶デバイス、フレキシブルディスク（Flexible Disk）等の磁気記録媒体、又はＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの光学記録媒体が挙げられる。
【００８８】
なお、本実施の形態におけるデータベース管理装置１０は、プログラムがインストールされたコンピュータではなく、各部に対応したハードウェアを用いることによっても実現可能である。更に、データベース管理装置１０は、一部がプログラムで実現され、残りの部分がハードウェアで実現されていてもよい。
【００８９】
上述した実施の形態の一部又は全部は、以下に記載する（付記１）〜（付記１５）によって表現することができるが、以下の記載に限定されるものではない。
【００９０】
（付記１）
複数の値を含むデータ毎に、当該データに含まれる値の１つを、アクセスパスとなるキーに割当て、更に、割当てられた前記キー以外の値によるアクセスパスを提供する索引を設定し、各データ、割当てられた前記キー及び前記索引を格納する、データベースを管理するための装置であって、
外部から前記データベースに前記索引を経由してアクセスした際のアクセスパスの実績を記録する、アクセスパス記録部と、
前記データベースを構築している記憶装置の記憶容量の使用率を特定する、記憶容量監視部と、
特定された前記使用率が閾値以下である場合に、前記索引の前記アクセスパスの実績が設定条件を満たすかどうかを判定する、実体化判定部と、
前記実体化判定部によって、前記アクセスパスの実績が前記設定条件を満たしていると判定された場合に、前記データベースにおいて、前記索引に、対応する前記データの値を付加する、索引実体化部と、
を備えている、ことを特徴とするデータベース管理装置。
【００９１】
（付記２）
前記データべースにおいて、複数の前記索引が設定されており、
前記アクセスパス記録部が、複数の前記索引それぞれ毎に、前記アクセスパスの実績を記録し、
前記実体化判定部が、複数の前記索引それぞれ毎に、当該索引の前記アクセスパスの実績が設定条件を満たすかどうかを判定し、
前記索引実体化部が、複数の前記索引のうち前記設定条件を満たしている前記索引に対して、対応する前記データの値を付加する、
付記１に記載のデータベース管理装置。
【００９２】
（付記３）
前記実体化判定部は、前記設定条件として、アクセス回数が設定された範囲にあることを用いて、判定を行なう、
付記１または２に記載のデータベース管理装置。
【００９３】
（付記４）
前記索引実体化部は、前記使用率が第２の閾値を超えた場合に、前記索引に付加された前記データを前記データベースから削除する、
付記１〜３のいずれかに記載のデータベース管理装置。
【００９４】
（付記５）
複数の値を含むデータ毎に、当該データに含まれる値の１つを、アクセスパスとなるキーに割当て、更に、割当てられた前記キー以外の値によるアクセスパスを提供する索引を設定し、各データ、割当てられた前記キー及び前記索引を格納する、データベースを管理するための方法であって、
（ａ）外部から前記データベースに前記索引を経由してアクセスした際のアクセスパスの実績を記録する、ステップと、
（ｂ）前記データベースを構築している記憶装置の記憶容量の使用率を特定する、ステップと、
（ｃ）特定された前記使用率が閾値以下である場合に、前記索引の前記アクセスパスの実績が設定条件を満たすかどうかを判定する、ステップと、
（ｄ）前記（ｃ）のステップによって、前記アクセスパスの実績が前記設定条件を満たしていると判定された場合に、前記データベースにおいて、前記索引に、対応する前記データの値を付加する、ステップと、
を有する、ことを特徴とするデータベース管理方法。
【００９５】
（付記６）
前記データべースにおいて、複数の前記索引が設定されており、
前記（ａ）のステップにおいて、複数の前記索引それぞれ毎に、前記アクセスパスの実績を記録し、
前記（ｃ）のステップにおいて、複数の前記索引それぞれ毎に、当該索引の前記アクセスパスの実績が設定条件を満たすかどうかを判定し、
前記（ｄ）のステップにおいて、複数の前記索引のうち前記設定条件を満たしている前記索引に対して、対応する前記データの値を付加する、
付記５に記載のデータベース管理方法。
【００９６】
（付記７）
前記（ｃ）のステップにおいて、前記設定条件として、アクセス回数が設定された範囲にあることを用いて、判定を行なう、
付記５または６に記載のデータベース管理方法。
【００９７】
（付記８）
（ｅ）前記使用率が第２の閾値を超えた場合に、前記索引に付加された前記データを前記データベースから削除する、ステップを更に有する、
付記５〜７のいずれかに記載のデータベース管理方法。
【００９８】
（付記９）
複数の値を含むデータ毎に、当該データに含まれる値の１つを、アクセスパスとなるキーに割当て、更に、割当てられた前記キー以外の値によるアクセスパスを提供する索引を設定し、各データ、割当てられた前記キー及び前記索引を格納する、データベースを、コンピュータによって、管理するためのプログラムであって、
前記コンピュータに、
（ａ）外部から前記データベースに前記索引を経由してアクセスした際のアクセスパスの実績を記録する、ステップと、
（ｂ）前記データベースを構築している記憶装置の記憶容量の使用率を特定する、ステップと、
（ｃ）特定された前記使用率が閾値以下である場合に、前記索引の前記アクセスパスの実績が設定条件を満たすかどうかを判定する、ステップと、
（ｄ）前記（ｃ）のステップによって、前記アクセスパスの実績が前記設定条件を満たしていると判定された場合に、前記データベースにおいて、前記索引に、対応する前記データの値を付加する、ステップと、
を実行させるプログラム。
【００９９】
（付記１０）
前記データべースにおいて、複数の前記索引が設定されており、
前記（ａ）のステップにおいて、複数の前記索引それぞれ毎に、前記アクセスパスの実績を記録し、
前記（ｃ）のステップにおいて、複数の前記索引それぞれ毎に、当該索引の前記アクセスパスの実績が設定条件を満たすかどうかを判定し、
前記（ｄ）のステップにおいて、複数の前記索引のうち前記設定条件を満たしている前記索引に対して、対応する前記データの値を付加する、
付記９に記載のプログラム。
【０１００】
（付記１１）
前記（ｃ）のステップにおいて、前記設定条件として、アクセス回数が設定された範囲にあることを用いて、判定を行なう、
付記９または１０に記載のプログラム。
【０１０１】
（付記１２）
前記コンピュータに、更に、
（ｅ）前記使用率が第２の閾値を超えた場合に、前記索引に付加された前記データを前記データベースから削除する、ステップを実行させる、
付記９〜１１のいずれかに記載のプログラム。
【産業上の利用可能性】
【０１０２】
以上のように、本発明によれば、キーバリューストアを実装したデータベースにおいて、アクセスパスによる性能差の発生を抑制することができる。本発明は、キーバリューストアを実装したデータベースに有用である。
【符号の説明】
【０１０３】
１０  データベース管理装置
１１  アクセスパス記録部
１２  記憶容量監視部
１３  実体化判定部
１４  索引実体化部
２０  データベース
２１  ユーザデータ
２２  実データ
２３  索引
２４  アクセスパス統計情報
２５  記憶装置
３０  問合せ処理装置
４０  クライアント端末
１１０  コンピュータ
１１１  ＣＰＵ
１１２  メインメモリ
１１３  記憶装置
１１４  入力インターフェイス
１１５  表示コントローラ
１１６  データリーダ／ライタ
１１７  通信インターフェイス
１１８  入力機器
１１９  ディスプレイ装置
１２０  記録媒体
１２１  バス
【図１】
2018041174.tif 000003
【図２】
2018041174.tif 000004
【図３】
2018041174.tif 000005
【図４】
2018041174.tif 000006
【図５】
2018041174.tif 000007
【図６】
2018041174.tif 000008
【図７】
2018041174.tif 000009