(57)【要約】【課題】キー値以外のバリュー値の値を用いて高速にデータを参照することは難しい、という問題を解決すること。【解決手段】キー値と、複数の要素を含むバリュー値と、を対応付けて、キーバリューデータとして記憶するデータ記憶部と、データ記憶部にキーバリューデータを記憶させる領域である記憶領域を生成して管理するパーティション管理部と、を備え、パーティション管理部は、バリュー値が備える複数の要素のうちの一つをインデックス列の値として当該インデックス列の値に応じて記憶領域を設定し、当該設定した記憶領域内に、当該記憶領域に対応する要素の値を含む前記キーバリューデータを記憶させる。【選択図】図７
2015197786.tif 000002
【特許請求の範囲】
【請求項１】
キー値と、複数の要素を含むバリュー値と、を対応付けて、キーバリューデータとして記憶するデータ記憶部と、
前記データ記憶部に前記キーバリューデータを記憶させる領域である記憶領域を生成して管理するパーティション管理部と、を備え、
前記パーティション管理部は、前記バリュー値が備える複数の要素のうちの一つをインデックス列の値として当該インデックス列の値に応じて前記記憶領域を設定し、当該設定した記憶領域内に、当該記憶領域に対応する要素の値を含む前記キーバリューデータを記憶させる、
情報記憶装置。
【請求項２】
請求項１に記載の情報記憶装置であって、
前記パーティション管理部は、前記記憶領域を生成する数である記憶領域生成数設定値を予め記憶しており、当該記憶領域生成数設定値の範囲内で前記記憶領域を生成する、
情報記憶装置。
【請求項３】
請求項１又は２に記載の情報記憶装置であって、
前記パーティション管理部は、前記キーバリューデータを所定の記憶領域内に記憶させる際に、既に同一のキー値を持つキーバリューデータが他の前記記憶領域に記憶されている場合、当該キーバリューデータを前記所定の記憶領域に記憶させないよう構成されている、
情報記憶装置。
【請求項４】
請求項１乃至３の何れかに記載の情報記憶システムであって、
前記データ記憶部は、前記パーティション管理部により生成された前記記憶領域内に前記キーバリューデータを記憶する領域であるデータ記憶領域を複数備えており、
前記パーティション管理部は、前記複数のデータ記憶領域に均等に前記キーバリューデータを記憶させる、
情報記憶装置。
【請求項５】
請求項１乃至４の何れかに記載の情報記憶装置であって、
前記インデックス列の値を指定して、当該インデックス列の値に応じた前記記憶領域を参照し、当該参照した記憶領域内のキーバリューデータを参照する、インデックス参照部を備える、
情報記憶装置。
【請求項６】
請求項５に記載の情報記憶装置であって、
前記インデックス参照部は、ＳＱＬ言語を用いて前記インデックス列を指定可能なよう構成された、
情報記憶装置。
【請求項７】
情報記憶装置に、
キー値と、複数の要素を備えるバリュー値と、を対応付けて、キーバリューデータとして記憶するデータ記憶部と、
前記データ記憶部に前記キーバリューデータを記憶させる領域である記憶領域を生成して管理するパーティション管理部と、を実現させ、
前記パーティション管理部は、前記バリュー値が備える複数の要素のうちの一つをインデックス列として当該インデックス列の値に応じて前記記憶領域を生成し、当該生成した記憶領域内に、当該記憶領域に対応する要素の値を備える前記キーバリューデータを記憶させる、
プログラム。
【請求項８】
キー値と複数の要素を備えるバリュー値とを対応付けたキーバリューデータの前記バリュー値が備える複数の要素のうちの一つをインデックス列として当該インデックス列の値に応じて記憶領域を生成し、当該生成した記憶領域内に、当該記憶領域に対応する要素の値を備える前記キーバリューデータを記憶させる、
情報記憶方法。
【請求項９】
請求項８に記載の情報記憶方法であって、
予め定められた前記記憶領域を生成する数である記憶領域生成数設定値の範囲内で前記記憶領域を生成する、
情報記憶方法。
【請求項１０】
キー値と、複数の要素を備えるバリュー値と、を対応付けて、キーバリューデータとして記憶するデータ記憶装置と、
前記データ記憶部に前記キーバリューデータを記憶させる領域である記憶領域を生成して管理するパーティション管理装置と、を備え、
前記パーティション管理装置は、前記バリュー値が備える複数の要素のうちの一つをインデックス列として当該インデックス列の値に応じて前記記憶領域を生成し、当該生成した記憶領域内に、当該記憶領域に対応する要素の値を備える前記キーバリューデータを記憶させる、
情報記憶システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース装置、プログラム、情報処理方法、データベースシステムに関する。
【背景技術】
【０００２】
キー値とバリュー値のペアをデータとして扱うキーバリューストア（ＫＶＳ、Ｋｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅ）が知られている。ＫＶＳはキー値を指定してデータ挿入やデータ参照などを行うシステムであり、キー値に対応した格納先を分散させることで、容易にスケールアウトを行うことが可能となる。
【０００３】
一般に、ＫＶＳでは、ＫＶＳ独自のインターフェースを使用することが必要となる。そのため、ＫＶＳでは、既存のＲＤＢ（Ｒｅｌａｔｉｏｎａｌ  Ｄａｔａｂａｓｅ）で使用してきたアプリケーションをＫＶＳ用に作り変える必要がある。また、ＫＶＳでは、トランザクションの一貫性の保証もアプリケーション側で保証する必要がある。このように、ＫＶＳは利点を備える一方で独特の使いにくさも備えている。
【０００４】
そこで、従来のＲＤＢと同様にＳＱＬを使用する事の出来るＫＶＳを構成する技術が考案されている。このような技術として、例えば、特許文献１がある。特許文献１には、ＫＶＳをＲＤＢに見せかけることで、ＲＤＢを用いた既存システムをＫＶＳでも使用可能にする技術が記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−７７２０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＫＶＳでは、原則として、キー値以外を用いてバリュー値にアクセスすることは出来ない。そのため、ＫＶＳのデータをキー値以外で参照するためには、キー値以外の列の値に対してキー値を対応付けるインデックスを生成する必要があった。しかしながら、この方法の場合、格納するＫＶペアの数が増えバリュー値の重複が増えると、キー値に対するバリュー値が大きくなることになる。その結果、ＫＶペアのメンテナンスに時間がかかるようになる、データ参照までの時間がかかるようになる、などの問題が発生していた。
【０００７】
また、ＳＱＬ言語を用いてＫＶＳを使用する場合などにおいては、従来のＲＤＢと同様に、特定のキー値のみでデータを参照するのみでなく、バリュー値に含まれる値を用いてデータを参照したいという要望がある。しかしながら、上記のように、ＫＶＳでは原則として、キー値以外を用いてバリュー値にアクセスすることは出来ない。また、インデックスを経由すると、上記のように、ＫＶペアのメンテナンスに時間がかかるようになる、データ参照までの時間がかかるようになる、などの問題が生じることになる。
【０００８】
このように、ＳＱＬ言語を用いたＫＶＳであっても、キー値以外のバリュー値の値を用いて高速に直接データを参照することは難しい、という問題が生じていた。
【０００９】
そこで、本発明の目的は、キー値以外のバリュー値の値を用いて高速にデータを参照することは難しい、という問題を解決する情報記憶システムを提供することにある。
【課題を解決するための手段】
【００１０】
かかる目的を達成するため本発明の一形態である情報記憶装置は、
キー値と、複数の要素を含むバリュー値と、を対応付けて、キーバリューデータとして記憶するデータ記憶部と、
前記データ記憶部に前記キーバリューデータを記憶させる領域である記憶領域を生成して管理するパーティション管理部と、を備え、
前記パーティション管理部は、前記バリュー値が備える複数の要素のうちの一つをインデックス列の値として当該インデックス列の値に応じて前記記憶領域を設定し、当該設定した記憶領域内に、当該記憶領域に対応する要素の値を含む前記キーバリューデータを記憶させる、
という構成を採る。
【００１１】
また、本発明の他の形態であるプログラムは、
情報記憶装置に、
キー値と、複数の要素を備えるバリュー値と、を対応付けて、キーバリューデータとして記憶するデータ記憶部と、
前記データ記憶部に前記キーバリューデータを記憶させる領域である記憶領域を生成して管理するパーティション管理部と、を実現させ、
前記パーティション管理部は、前記バリュー値が備える複数の要素のうちの一つをインデックス列として当該インデックス列の値に応じて前記記憶領域を生成し、当該生成した記憶領域内に、当該記憶領域に対応する要素の値を備える前記キーバリューデータを記憶させる、
プログラムである。
【００１２】
また、本発明の他の形態である情報記憶方法は、
キー値と複数の要素を備えるバリュー値とを対応付けたキーバリューデータの前記バリュー値が備える複数の要素のうちの一つをインデックス列として当該インデックス列の値に応じて記憶領域を生成し、当該生成した記憶領域内に、当該記憶領域に対応する要素の値を備える前記キーバリューデータを記憶させる、
という構成を採る。
【００１３】
また、本発明の他の形態である情報記憶システムは、
キー値と、複数の要素を備えるバリュー値と、を対応付けて、キーバリューデータとして記憶するデータ記憶装置と、
前記データ記憶部に前記キーバリューデータを記憶させる領域である記憶領域を生成して管理するパーティション管理装置と、を備え、
前記パーティション管理装置は、前記バリュー値が備える複数の要素のうちの一つをインデックス列として当該インデックス列の値に応じて前記記憶領域を生成し、当該生成した記憶領域内に、当該記憶領域に対応する要素の値を備える前記キーバリューデータを記憶させる、
という構成を採る。
【発明の効果】
【００１４】
本発明は、以上のように構成されることにより、キー値以外のバリュー値の値を用いて高速にデータを参照することは難しい、という課題を解決するデータベース装置を提供することが出来る。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施形態に係るデータベースシステムの全体の構成を示すブロック図である。
【図２】図１で示すクライアント装置の構成を示すブロック図である。
【図３】図２で示すレンジパーティション管理部が記憶する表の一例を示す図である。
【図４】図１で示すキーバリューストアの構成を示すブロック図である。
【図５】図１で示すキーバリューストアの構成を示すブロック図である。
【図６】図５で示すパーティションの構成を示す図である。
【図７】初期状態のデータベースシステムの構成の一例を示すブロック図である。
【図８】図２で示すＳＱＬ文解析部の処理の一例を示す図である。
【図９】図２で示すバリュー値検出部の処理の一例を示す図である。
【図１０】レンジパーティション管理部が紐付けを行った際の表の変化の一例を示す図である。
【図１１】ＫＶペアを格納した際のデータベースシステムの構成の一例を示すブロック図である。
【図１２】ＫＶペアを格納した際のデータベースシステムの構成の一例を示すブロック図である。
【図１３】ＫＶペアを格納した際のデータベースシステムの構成の一例を示すブロック図である。
【図１４】図２で示すＳＱＬ文解析部の処理の一例を示す図である。
【図１５】キー値を用いて検索する場合を説明するための図である。
【図１６】図２で示すＳＱＬ文解析部の処理の一例を示す図である。
【図１７】レンジパーティションを追加した場合の表の変化の一例を示す図である。
【図１８】レンジパーティションを追加した場合のデータベースシステムの構成の一例を示すブロック図である。
【図１９】レンジパーティションを削除した場合の表の変化の一例を示す図である。
【図２０】記憶装置を追加した場合の表の変化の一例を示す図である。
【図２１】記憶装置を削除した場合の表の変化の一例を示す図である。
【図２２】第１の実施形態におけるデータベースシステムにデータを挿入する際の動作の一例を示すフローチャートである。
【図２３】第１の実施形態におけるデータベースシステムにおいてデータを参照する際の動作の一例を示すフローチャートである。
【図２４】第２の実施形態に係る情報記憶装置の構成の概要を示すブロック図である。
【発明を実施するための形態】
【００１６】
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第１の実施形態]
第１の実施形態では、ＫＶＳ（Ｋｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅ）をＲＤＢ（Ｒｅｌａｔｉｏｎａｌ  Ｄａｔａｂａｓｅ）のように使用可能な構成を備える、データベースシステム１について説明する。また、本実施形態におけるデータベースシステム１は、ＫＶ（Ｋｅｙ  Ｖａｌｕｅ）ペア（キーバリューデータ）をパーティション（データ記憶領域）という単位に格納するよう構成されており、パーティションごとにＫＶペアの位置を特定することが出来るよう構成されている。さらに、後述するように、本実施形態におけるデータベースシステム１は、キー値を用いて検索を実行するだけでなく、バリュー値を構成する値の一つであるインデックス列の値を用いてもＫＶペアを検索可能なよう構成されている。
【００１７】
図１を参照すると、本実施形態におけるデータベースシステム１は、クライアント装置２と、キーバリューストア３（データ記憶部）と、を有している。また、図１で示すように、クライアント装置２とキーバリューストア３とは外部のネットワークを介して接続されており、互いに通信可能なよう構成されている。
【００１８】
クライアント装置２は、情報処理装置である。クライアント装置２は、図示しない中央演算装置（ＣＰＵ、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、記憶装置（メモリ及びハードディスク）と、を備えている。クライアント装置２は、記憶装置が備えるプログラムをＣＰＵが実行することで、後述する機能を実現するように構成されている。
【００１９】
図２を参照すると、クライアント装置２は、データ入力部２１（インデックス参照部としての機能も備える）と、ＳＱＬ文解析部２２と、バリュー値検出部２３と、レンジパーティション管理部２４（パーティション管理部）と、しての機能を有している。
【００２０】
なお、本実施形態においては、上記のように、クライアント装置２が、データ入力部２１とＳＱＬ文解析部２２とバリュー値検出部２３とレンジパーティション管理部２４としての機能を有している場合について説明する。しかしながら、ＳＱＬ文解析部２２とバリュー値検出部２３とレンジパーティション管理部２４とは、データ入力部２１と同じ情報処理装置上で実現しても構わないし、他の情報処理装置上で実現しても構わない。つまり、クライアント装置２は、複数の情報処理装置から構成されても構わない。
【００２１】
データ入力部２１は、ＳＱＬ文によりキーバリューストア３にデータを挿入、更新、削除、参照する機能を有している。データ入力部２１は、外部のアプリケーションなどを用いて、行いたい動作（挿入、更新、削除、参照）に応じたＳＱＬ文をＳＱＬ文解析部２２に送信する。
【００２２】
例えば、以下のようなＳＱＬ文をＳＱＬ文解析部２２に送信することで、データ入力部２１は、｛１，｛’ＡＡ’，’あいう’，’未処理’｝｝というデータを挿入しようとする。
INSERT  INTO  表名  VALUES  （１，’ＡＡ’，’あいう’，’未処理’）
【００２３】
また、例えば、以下のようなＳＱＬ文をＳＱＬ文解析部２２に送信することで、データ入力部２１は、キー値＝１のデータを参照しようとする。
SELECT  *  FROM  表名  WHERE  列１＝１
【００２４】
このように、データ入力部２１は、行いたい動作に応じたＳＱＬ文をＳＱＬ文解析部２２に送信するよう構成されている。
【００２５】
ＳＱＬ文解析部２２は、データ入力部２１によって発行されたＳＱＬ文を解析する機能を有している。また、本実施形態におけるＳＱＬ文解析部２２は、どの列がキー値でどの列がバリュー値かなどの表定義の情報を参照可能なよう構成されている。
【００２６】
ＳＱＬ文解析部２２は、データ入力部２１が送信したＳＱＬ文を受信する。そして、ＳＱＬ文解析部２２は、当該受信したＳＱＬ文を解析する。具体的には、例えば、データ入力部２１がデータを挿入しようとしてＳＱＬ文を送信した（ＳＱＬ文解析部２２がＩＮＳＥＲＴ文を受信した）場合には、ＳＱＬ文解析部２２は、当該受信したＳＱＬ文を解析してＫＶペアを作成する。また、例えば、データ入力部２１がデータを参照しようとしてＳＱＬ文を送信した（ＳＱＬ文解析部２２がＳＥＬＥＣＴ文を受信した）場合には、対象となるキー値や後述するインデックス列の値を作成する。このように、ＳＱＬ文解析部２２は、受信したＳＱＬ文を解析する。そして、ＳＱＬ文解析部２２は、解析結果をバリュー値検出部２３へと送信する。なお、ＳＱＬ文解析部２２による処理の詳細については、後述する。
【００２７】
バリュー値検出部２３は、参照対象となるバリュー値を検出する機能を有している。本実施形態におけるバリュー値検出部２３は、バリュー値のどの列の値がインデックス列の値になるかというインデックス列の情報を予め記憶している。バリュー値検出部２３は、当該記憶するインデックス列の情報に基づいて、バリュー値の中からインデックス列の値を特定する。そして、バリュー値検出部２３は、特定したインデックス列の値をレンジパーティション管理部２４に送信する。なお、バリュー値検出部２３の処理の詳細については、後述する。
【００２８】
レンジパーティション管理部２４は、レンジパーティション（記憶領域）の生成やレンジパーティションの削除を行う機能を有している。ここで、レンジパーティションとは、上述したＫＶペアを格納する単位であるパーティション（データ記憶領域）をまとめるさらに大きなパーティションのことである。つまり、レンジパーティション管理部２４は、複数のパーティションを１つにまとめて管理する機能を有している。
【００２９】
また、レンジパーティション管理部２４は、作成したレンジパーティションと、インデックス列の値（セカンダリインデックス値）とを紐付ける機能を有している。また、レンジパーティション管理部２４は、同じセカンダリインデックス値を持つＫＶペアを、当該セカンダリインデックス値と紐付けられたレンジパーティション内のパーティションに格納する機能を有している。そのため、レンジパーティション内のパーティションには、当該レンジパーティションに紐付けられたセカンダリインデックス値を持つＫＶペアが格納されることになる。
【００３０】
なお、上述したように、レンジパーティションはパーティションをまとめるさらに大きなパーティションのことである。つまり、レンジパーティション内には複数のパーティションが存在することになる。そのため、レンジパーティション管理部２４は、当該複数のパーティションのうちのどのパーティションにＫＶペアを格納するかを決める必要がある。この判断は、例えば、コンシステントハッシュ法を用いて行われる。レンジパーティション管理部２４は、ＫＶペアのバリュー値のインデックス列の値（セカンダリインデックス値）に基づいて格納するレンジパーティションを決定する。そして、レンジパーティション管理部２４は、コンシステントハッシュ法を用いて当該決定したレンジパーティション内のどのパーティションにＫＶペアを格納するかを決定する。その後、レンジパーティション管理部２４は、当該決定したパーティションにＫＶペアを格納する。このように、コンシステントハッシュ法を用いて格納先のパーティションを決定することで、各パーティションに均等にＫＶペアを格納することが出来る。
【００３１】
さらに、レンジパーティション管理部２４は、レンジパーティションを生成する数を監視する機能や、同一キー値の存在を確認するための検索指示を行う機能を有している。レンジパーティションの数が多くなると、レンジパーティションを作成するオーバーヘッドが大きくなり、セカンダリインデックス値を使用した参照による高速化の効果が少なくなると考えられる。そこで、レンジパーティション管理部２４は、レンジパーティションを生成する数を監視し、予め定められた範囲内（記憶領域生成数設定値内）でレンジパーティションを生成する。また、レンジパーティション管理部２４は、ＫＶペアを格納しようとする際に、他のレンジパーティション内に同一キー値のＫＶペアが格納されていないか検索する。これにより、同一のキー値を持つＫＶペアが複数のレンジパーティション内に格納されないよう監視している。
【００３２】
レンジパーティション管理部２４は、例えば、図３で示すような表を生成して、紐付けの管理やレンジパーティションの数の管理などを行っている。図３（Ａ）を参照すると、レンジパーティション名が全て「未設定」になっている。これは、レンジパーティション管理部２４がまだレンジパーティションと、セカンダリインデックス値とを紐付けていないことを示している。また、後述するように、キーバリューストア３は、複数の記憶装置を備えて構成されている。そこで、レンジパーティション管理部２４は、記憶装置ごとにアドレスを管理して、それぞれの記憶装置のレンジパーティション内のパーティションを管理している。図３（Ａ）で示す各記憶装置（記憶装置１、２、３。これは、キーバリューストア３が３つの記憶装置を備えて構成されていることを意味している）のオフセットは、各記憶装置のファイルシステムで決定されるオフセットである。
【００３３】
また、図３（Ｂ）を参照すると、レンジパーティション名が「未処理」、「処理中」、「処理済」となっている。これは、レンジパーティション管理部２４が、それぞれのレンジパーティションと、「未処理」、「処理中」、「処理済」、の各セカンダリインデックス値とを紐付けたことを示している。
【００３４】
また、図３で示す表は、当該表の行数でレンジパーティション管理部２４が生成可能なレンジパーティションの数（記憶領域生成数設定値）を示している。つまり、図３（Ａ）、（Ｂ）は、記憶領域生成数設定値として３が設定されており、３つのレンジパーティションが作成されている状態であることを示している。図３（Ａ）、（Ｂ）で示す状態においては、レンジパーティション管理部２４は、新たなレンジパーティションを生成しないように動作することになる。一方で、図３（Ｃ）は、記憶領域生成数設定値として４が設定されており、３つのレンジパーティションが作成されている状態であることを示している。つまり、レンジパーティション名「−」は、まだ新しいレンジパーティションを生成可能な余地があることを示している。この場合、レンジパーティション管理部２４は、必要に応じて、新しいレンジパーティションを１つ生成することが出来ることになる。このように、記憶領域生成数設定値は必ずしも３でなくても構わない。記憶領域生成数設定値は、任意の数をとることが出来る。
【００３５】
キーバリューストア３は、メモリやハードディスクなどの記憶装置を複数備えて構成されている。例えば、図４を参照すると、キーバリューストア３は、記憶装置３１と記憶装置３２と記憶装置３３とを備えて構成されている。記憶装置３１と記憶装置３２と記憶装置３３とは、それぞれがクライアント装置２とネットワークを介して接続されていることになる。なお、キーバリューストア３を構成する記憶装置は３つである場合に限られない。キーバリューストア３は、２つの記憶装置により構成されていても構わないし、４つ以上の記憶装置により構成されていても構わない。
【００３６】
図４を参照すると、記憶装置３１は、ＫＶペアを格納するパーティション３１１、３１２、３１３を有している。同様に、記憶装置３２は、パーティション３２１、３２２、３２３を有しており、記憶装置３３は、パーティション３３１、３３２、３３３を有している。また、レンジパーティション管理部２４により、パーティション３３１とパーティション３２１とパーティション３３１とをまとめるレンジパーティション４１が生成されている。同様に、パーティション３１２とパーティション３２２とパーティション３３２とをまとめるレンジパーティション４２と、パーティション３１３とパーティション３２３とパーティション３３３とをまとめるレンジパーティション４３とが生成されている。
【００３７】
なお、レンジパーティション管理部２４がレンジパーティションにまとめるパーティションの数は３つに限られない。レンジパーティション管理部２４は、任意の数のパーティションをまとめてレンジパーティションを生成してよい。ただし、レンジパーティション管理部２４は、各記憶装置のそれぞれでは同数のパーティションを１つのレンジパーティションにまとめるとする。つまり、レンジパーティション管理部２４は、各記憶装置内にそれぞれ均等な数のパーティションを備える、レンジパーティションを生成する。
【００３８】
記憶装置３１、３２、３３の具体的な構成は、図５のようになる。図５を参照すると、レンジパーティション４１、４２、４３は、記憶装置３１、３２、３３ごとに、レンジアドレス管理部４１１、４２１、４３１、４１２、４２２、４３２、４１３、４２３、４３３、を備えている。これは、図３で示したレンジパーティション管理部２４により管理されるレンジアドレス管理部の値に対応するものになる。なお、各構成は同一のものになる。そこで、代表してレンジアドレス管理部４１１について説明する。
【００３９】
レンジアドレス管理部４１１は、自身が存在する記憶装置３１内の、自身を備えるレンジパーティション４１を管理する機能を有している。レンジアドレス管理部４１１は、例えば、当該レンジアドレス管理部４１１が管理するレンジパーティション４１の範囲内に存在するパーティション３１１の位置（アドレス）を管理する。また、レンジアドレス管理部４１１は、当該レンジアドレス管理部４１１が管理するレンジパーティション４１の範囲内に位置するパーティション３１１に格納されたデータの管理を行う。具体的には、レンジアドレス管理部４１１は、上記パーティション３１１に格納されたデータが全て削除された場合に、その旨をレンジパーティション管理部２４に対して通知する機能を有している。
【００４０】
上述したように、その他のレンジアドレス管理部もレンジアドレス管理部４１１と同様の構成である。
【００４１】
また、図５を参照すると、それぞれのパーティション３１１はアドレス管理部３１１１、３１２１、３１３１、３２１１、３２２１、３２３１、３３１１、３３２１、３３３１を有している。このような構成により、パーティション３１１は、当該パーティション３１１内に格納したＫＶペアの位置を特定することが出来る。具体的には、例えば、図６を参照すると、アドレス管理部３１１１は、当該アドレス管理部３１１１を備えるパーティション３１１に格納されたＫＶペアに対応するオフセットを記憶している。そのため、アドレス管理部３１１１が記憶するオフセットを用いることで、パーティション内に格納されたＫＶペアの位置を特定することが出来る。なお、他のアドレス管理部の構成もアドレス管理部３１１１の構成と同様である。
【００４２】
以上が、データベースシステム１の構成である。次に、上記構成を用いて実施される具体的な処理の一例について、具体例を挙げて説明する。なお、以降で説明する処理は、上記構成を用いて実行可能な処理の一例である。データベースシステム１は、下記で説明する処理以外の処理を実行しても構わない。
【００４３】
まず、データベースシステム１の初期状態の一例について図７を用いて説明する。図７は、初期状態におけるデータベースシステム１全体の構成の一例を示している。図７を参照すると、以降においては、キーバリューストア３が記憶装置３１、３２、３３の３つの記憶装置を備えている場合について説明する。また、記憶装置３１、３２、３３はそれぞれ３つのパーティションを有しており、レンジパーティション管理部２４によりレンジパーティション４１、４２、４３が生成されているとする。また、以降においては、特にことわりが無い限り記憶領域生成数設定値が３に設定されているとする。そのため、レンジパーティション管理部２４は、図１０（Ａ）で示すような表を初期状態で有していることになる。
【００４４】
最初に、上記初期状態のデータベース１に｛１，｛’ＡＡ’，’あいう’，’未処理’｝｝というＫＶペアを１件挿入する場合の処理について説明する。
【００４５】
まず、｛１，｛’ＡＡ’，’あいう’，’未処理’｝｝というデータをデータ入力部２１により入力する。具体的には、データ入力部２１は、以下のようなＳＱＬ文をＳＱＬ文解析部２２に送信する。
INSERT  INTO  表名  VALUES  （１，’ＡＡ’，’あいう’，’未処理’）
【００４６】
次に、ＳＱＬ文解析部２２は、データ入力部２１が送信したデータから、キー値１とバリュー値｛’ＡＡ’，’あいう’，’未処理’｝というＫＶペアを作成する。具体的には、図８で示すように、ＳＱＬ文解析部２２は、以下のようなＣＲＥＡＴＥ文を用いて、キーの位置を認識する。
CREATE  TABLE  表名  （列１Int  Primary  Key，列２Char(2) ，列３Char(3) ，列４Char(5)）
【００４７】
続いて、ＳＱＬ文解析部２２は、以下のようなＩＮＳＥＲＴ文を用いて、キー値とバリュー値の形式に変換する。
INSERT  INTO  表名  VALUES（１，’ＡＡ’，’あいう’，’未処理’）
【００４８】
このような処理により、ＳＱＬ文解析部２２は、データ入力部２１から受信したＳＱＬ文をキー値とバリュー値の形式に変換する。そして、ＳＱＬ文解析部２２は、変換結果（ＫＶペア）をバリュー値検出部２３に送信する。なお、表定義の情報（どの列がキー値でどの列がバリュー値かなど）は、ＳＱＬ文解析部２２で参照可能であるとする。
【００４９】
続いて、バリュー値検出部２３は、ＳＱＬ文解析部２２から受信したＫＶペアのうち、４個目（４列目）の値である’未処理’をインデックス列の値（セカンダリインデックス値）であると認識する。具体的には、バリュー値検出部２３は、図９で示すように、以下のようなＣＲＥＡＴＥ文を用いてインデックス列の位置を認識する。
CREATE  INDEX  インデックス名  ON  表名（列４）
【００５０】
そして、バリュー値検出部２３は、上記認識結果を用いて、ＳＱＬ文解析部２２から取得したＫＶペアのバリュー値の中からインデックス列の値（セカンダリインデックス値）を特定する。つまり、バリュー値検出部２３は、列４の値である’未処理’をインデックス列の値として特定する。そして、バリュー値検出部２３は、ＫＶペアとインデックス列の値をレンジパーティション管理部２４に送信する。
【００５１】
レンジパーティション管理部２４は、例えば表（図１０（Ａ））を確認することで、まだレンジパーティション４１、４２、４３とキー値以外のバリュー値との紐付けが無いことを認識する。そこで、レンジパーティション管理部２４は、’未設定’（紐付けがまだされていない）のレンジパーティションの一つ（例えば、図７で示すレンジパーティション４１）を、インデックス列の値が’未処理’のＫＶペアを格納するように紐付けを行う。その結果、図１０（Ｂ）で示すように、表のレンジパーティション名のうちレンジパーティション４１に対応するレンジパーティション名が’未設定’から’未処理に’変更されることになる。
【００５２】
次に、レンジパーティション管理部２４は、上記のように紐付けたレンジパーティション４１内のどのパーティション（３１１、３２１、３３１のいずれか）にＫＶペアを格納するかを決定する。具体的には、レンジパーティション管理部２４は、コンシステントハッシュ法などを用いて格納するパーティションを決定する。例えば、レンジパーティション管理部２４は、コンシステントハッシュ法を用いた結果、パーティション３２１にＫＶペアを格納すると決定する。すると、レンジパーティション管理部２４は、当該決定したパーティション３２１にＫＶペア｛１，｛’ＡＡ’，’あいう’，’未処理’｝｝を格納する。なお、ＫＶペアの格納先は、パーティション３２１に存在するアドレス管理部３２１１で管理されることになる。
【００５３】
また、レンジパーティション管理部２４は、上記どのパーティション（３１１、３２１、３３１のいずれか）にＫＶペアを格納するかを決定する処理と並行して、格納しようとするＫＶペアと同じキー値を持つＫＶペアが他のレンジパーティション４２、４３に格納されていないか検索する。そして、レンジパーティション管理部２４は、同一のキー値を持つＫＶペアが既に他のレンジパーティション４２、４３に格納されていた場合、格納しようとしているＫＶペア｛１，｛’ＡＡ’，’あいう’，’未処理’｝｝の格納を中止する。若しくは、レンジパーティション管理部２４は、格納したＫＶペア｛１，｛’ＡＡ’，’あいう’，’未処理’｝｝を削除する。また、レンジパーティション管理部２４は、レンジパーティション４１とインデックス値の値との紐付けも解除する（未設定に戻す）。その後、レンジパーティション管理部２４は、アプリケーション側にキー値の重複を通知するエラーを返却する。
【００５４】
以上が、データベースシステム１に｛１，｛’ＡＡ’，’あいう’，’未処理’｝｝というＫＶペアを１件挿入する場合の処理である。このような処理の結果、図１１に示すように、レンジパーティション管理部２４は、パーティション３２１にＫＶペア｛１，｛’ＡＡ’，’あいう’，’未処理’｝｝を格納する。
【００５５】
次に、既に存在するインデックス列の値（セカンダリインデックス値）のＫＶペアを１件挿入する際の処理について説明する。具体的には、上記ＫＶペア｛１，｛’ＡＡ’，’あいう’，’未処理’｝｝が格納されているデータベースシステム１に、ＫＶペア｛２，｛’ＢＢ’，’かきく’，’未処理’｝｝を１件挿入する場合の処理について説明する。
【００５６】
まず、｛２，｛’ＢＢ’，’かきく’，’未処理’｝｝というデータをデータ入力部２１により入力する。具体的には、データ入力部２１は、以下のようなＳＱＬ文をＳＱＬ文解析部２２に送信する。
INSERT  INTO  表名  VALUES  （２，’ＢＢ’，’かきく’，’未処理’）
【００５７】
次に、ＳＱＬ文解析部２２は、データ入力部２１が送信したデータから、キー値２とバリュー値｛’ＢＢ’，’かきく’，’未処理’｝というＫＶペアを作成する。なお、この処理は上記ＫＶペア｛１，｛’ＡＡ’，’あいう’，’未処理’｝｝を挿入する場合と同様なので、説明は省略する。
【００５８】
続いて、バリュー値検出部２３は、ＳＱＬ文解析部が送信したＫＶペアのうち、４個目（４列目）の値である’未処理’をインデックス列の値（セカンダリインデックス値）であると認識する。ここの処理も上記ＫＶペア｛１，｛’ＡＡ’，’あいう’，’未処理’｝｝を挿入する場合と同様なので、説明は省略する。
【００５９】
レンジパーティション管理部２４は、図１０（Ｂ）で示す表を参照して、レンジパーティションとキー値以外のバリュー値との紐付けで’未処理’があることを認識する。つまり、レンジパーティション管理部２４は、レンジパーティション４１がインデックス列の値’未処理’と紐付けられていることを認識する。そこで、レンジパーティション管理部２４は、コンシステントハッシュ法などを使用して、レンジパーティション４１内のパーティション（３１１、３２１、３３１のいずれか）にＫＶペア｛２，｛’ＢＢ’，’かきく’，’未処理’｝｝を格納する。例えば、レンジパーティション管理部２４は、パーティション３１１にＫＶペア｛２，｛’ＢＢ’，’かきく’，’未処理’｝｝を格納する。
【００６０】
また、レンジパーティション管理部２４は、ＫＶペア｛１，｛’ＡＡ’，’あいう’，’未処理’｝｝の場合と同様に、キー値２を持つＫＶペアが他のレンジパーティション（４２、４３）に格納されていないか検索する。そして、既に格納されている場合は、ＫＶペア｛２，｛’ＢＢ’，’かきく’，’未処理’｝｝を格納せずに紐付けを解消し、エラーを返却する。
【００６１】
このような処理の結果、図１２に示すように、レンジパーティション管理部２４は、パーティション３１１にＫＶペア｛２，｛’ＢＢ’，’かきく’，’未処理’｝｝を格納する。
【００６２】
データベースシステム１は、上記のような処理により、様々なＫＶペアを挿入することが出来る。例えば、｛３，｛’ＢＢ’，’さしす’，’処理中’｝｝というＫＶペアや｛４，｛’ＣＣ’，’たちつ’，’処理済’｝｝というＫＶペアを挿入する場合、レンジパーティション管理部２４は、新たにレンジパーティション（４２、４３のいずれか）とインデックス列の値との紐付けを行って、当該インデックス列の値を紐付けたレンジパーティション（４２、４３のいずれか）にＫＶペアを格納する。また、上記ＫＶペアを格納したデータベースシステム１に｛５，｛’ＤＤ’，’なにぬ’，’処理済’｝｝というＫＶペアを挿入する際は、既に存在する’処理済’というセカンダリインデックス値に紐付けられたレンジパーティション（例えば、レンジパーティション４３）に上記ＫＶペアを格納する。なお、レンジパーティション（４２、４３）内のどのパーティションに格納するかは、上記のように、コンシステントハッシュ法を用いて決められることになる。このような処理の結果、例えば図１３で示すように、レンジパーティション管理部２４は、パーティション３３２にＫＶペア｛３，｛’ＢＢ’，’さしす’，’処理中’｝｝を格納する。また、レンジパーティション管理部２４は、パーティション３１３にＫＶペア｛４，｛’ＣＣ’，’たちつ’，’処理済’｝｝を格納する。そして、レンジパーティション管理部２４は、パーティション３３３にＫＶペア｛５，｛’ＤＤ’，’なにぬ’，’処理済’｝｝を格納する。
【００６３】
次に、初期に設定した記憶領域生成数設定値を超えるインデックス列の値（セカンダリインデックス値）を含むデータの挿入を行おうとした場合について説明する。例えば、上述したＫＶペアの挿入処理の結果、レンジパーティション管理部２４により、レンジパーティション４１、４２、４３はインデックス列の値’未処理’と’処理中’と’処理済’とに紐付けられている。また、記憶領域生成数設定値は３である。このような場合において、ＫＶペア｛１０，｛’ＪＪ’，’あああ’，’処理不可’｝｝を挿入しようとする場合について考える。
【００６４】
まず、｛１０，｛’ＪＪ’，’あああ’，’処理不可’｝｝というＫＶペアをデータ入力部２１により入力する。具体的には、データ入力部２１は、以下のようなＳＱＬ文をＳＱＬ文解析部２２に送信する。
INSERT  INTO  表名  VALUES  （１０，’ＪＪ’，’あああ’，’処理不可’）
【００６５】
次に、ＳＱＬ文解析部２２は、データ入力部２１が送信したデータから、キー値１０とバリュー値｛’ＪＪ’，’あああ’，’処理不可’｝というＫＶペアを作成する。なお、ここの処理の説明は既に行ったので省略する。
【００６６】
続いて、バリュー値検出部２３は、ＳＱＬ文解析部２２から受信したＫＶペアのうち、４個目（４列目）の値である’処理不可’をインデックス列の値（セカンダリインデックス値）であると認識する。ここの処理の説明も既に行ったので省略する。
【００６７】
レンジパーティション管理部２４は、表（この状態の表は図３（Ｂ）のような状態である）を参照して、レンジパーティション４１、４２、４３とインデックス列の値’処理不可’との紐付けがないことを認識する。また、レンジパーティション管理部２４は、表を参照して、既に記憶領域生成数設定値である３つのレンジパーティションを生成しており、全てのレンジパーティション４１、４２、４３が紐付けられていることを確認する。つまり、レンジパーティション管理部２４は、既に紐付けられたレンジパーティション４１、４２、４３内にＫＶペア｛１０，｛’ＪＪ’，’あああ’，’処理不可’｝｝を格納することは出来ず、新たなレンジパーティションを生成することも、新たな紐付けを行うことも出来ないことを確認する。そこで、レンジパーティション管理部２４は、ＫＶペア｛１０，｛’ＪＪ’，’あああ’，’処理不可’｝｝を格納することは出来ないとして、例えばエラーを返却する。
【００６８】
このように、レンジパーティション管理部２４は、予め定められた記憶領域生成数設定値を超えるレンジパーティションを生成しないように管理を行っている。
【００６９】
次に、データベースシステム１に格納されているＫＶペアを、キー値を用いて参照する場合の処理について説明する。具体的には、キー値１を用いて、上述したＫＶペアが格納されているデータベースシステム１を参照する場合の処理について説明する。
【００７０】
まず、データ入力部２１から、キー値１のデータを参照する要求が発生する。具体的には、データ入力部２１は、以下のようなＳＱＬ文をＳＱＬ文解析部２２に送信する。
SELECT  *  FROM  表名  WHERE  列１＝１
【００７１】
次に、ＳＱＬ文解析部２２は、データ入力部２１が送信したデータから、キー値１を作成する。具体的には、ＳＱＬ文解析部２２は、図１４で示すように、以下のようなＣＲＥＡＴＥ文を用いて、キーの位置を認識する。
CREATE  TABLE  表名  （列１Int  Primary  Key，列２Char(2) ，列３Char(3) ，列４Char(5)）
【００７２】
続いて、ＳＱＬ文解析部２２は、上記認識したキーの位置と、データ入力部２１から入力された条件とを確認する。この場合、データ入力部２１から入力された条件は列１＝１である。また、ＳＱＬ文解析部２２は、キーの位置として列１を認識する。その結果、ＳＱＬ文解析部２２は、キー値１を作成することが出来る。
【００７３】
このような処理により、ＳＱＬ文解析部２２は、データ入力部２１から受信したデータからキー値１を作成する。そして、ＳＱＬ文解析部２２は、キー値１をバリュー値検出部２３に送信する。なお、バリュー値検出部２３に送信される情報はキー値１のみなので、バリュー値検出部２３では特に処理を行わない。つまり、バリュー値検出部２３は、キー値１をレンジパーティション管理部２４へ送信する。
【００７４】
レンジパーティション管理部２４は、レンジパーティション４１、４２、４３（’未処理’、’処理中’、’処理済’に紐付けられている）に対して、キー値１でコンシステントハッシュ法などを使用してバリュー値を検出する。具体的には、図１５を参照すると、レンジパーティション管理部２４はまず、キー値１を取得する。すると、レンジパーティション管理部２４は、キー値１でコンシステントハッシュ法を使用して、キー値１が格納されているパーティションを特定する。そして、レンジパーティション管理部２４は、特定したパーティション（３２１，３２２、３２３）を検索する。その結果、レンジパーティション管理部２４は、特定のしたパーティションの中の１つであるパーティション３２１から、バリュー値｛１，｛’ＡＡ’，’あいう’，’未処理’｝｝を取得する。
【００７５】
このように、レンジパーティション管理部２４は、キー値を用いた検索を行おうとする場合、検索するパーティションを絞った上で、当該キー値に基づいた検索を行うことが出来る。
【００７６】
次に、データベースシステム１に格納されているＫＶペアを、インデックス列の値（セカンダリインデックス値）を用いて参照する場合の処理について説明する。具体的には、セカンダリインデックス値’未処理’を用いて、上述したＫＶペアが格納されているデータベースシステム１を参照する場合の処理について説明する。
【００７７】
まず、データ入力部２１から、セカンダリインデックス値’未処理’のデータを参照する要求が発生する。具体的には、データ入力部２１は、以下のようなＳＱＬ文をＳＱＬ文解析部２２に送信する。
SELECT  *  FROM  表名  WHERE  列４＝’未処理’
【００７８】
次に、ＳＱＬ文解析部２２は、列４の参照をバリュー値検出部２３に通知する。具体的には、ＳＱＬ文解析部２２は、図１６で示すように、以下のようなＣＲＥＡＴＥ文を用いて、キーの位置を認識する。
CREATE  TABLE  表名  （列１Int  Primary  Key，列２Char(2) ，列３Char(3) ，列４Char(5)）
【００７９】
続いて、ＳＱＬ文解析部２２は、上記認識したキーの位置と、データ入力部２１から入力された条件とを確認する。この場合、データ入力部２１から入力された条件は列４＝’未処理’である。また、ＳＱＬ文解析部２２は、キーの位置として列１を認識する。そのため、ＳＱＬ文解析部２２は、データ入力部２１から入力された条件はキー値ではないと認識する。その結果、ＳＱＬ文解析部２２は、列４＝’未処理’を列４の値としてバリュー値検出部２３に送る。
【００８０】
バリュー値検出部２３には、列４がインデックス列であるという情報が記憶されている。そのため、バリュー値検出部２３は、インデックス列の値’未処理’でデータを参照することを認識し、その旨をレンジパーティション管理部２４に通知する。
【００８１】
レンジパーティション管理部２４は、まず表を参照して、インデックス列の値’未処理’に紐付けられているレンジパーティション４１を特定する。そして、レンジパーティション管理部２４は、レンジパーティション４１内のレンジアドレス管理部４１１、４１２、４１３からパーティションの位置を特定する（表のアドレス管理部に記載されている各記憶装置のオフセットによりパーティションの位置を特定する）。
【００８２】
そして、各パーティションのアドレス管理部３１１１、３２１１、３３１１により、格納されているＫＶペアを特定し、全てのＫＶペアを抽出してデータ入力部２１に参照結果として通知する。これにより、セカンダリインデックス値’未処理’のＫＶペアを全て取得することが出来る。
【００８３】
以上が、インデックス列の値（セカンダリインデックス値）を用いてＫＶペアを参照する場合の処理である。上述したように、本実施形態におけるデータベースシステム１では、インデックス列の値ごとに、当該インデックス列の値に紐付けられたレンジパーティション内にＫＶペアが格納されている。そのため、レンジパーティション管理部２４は、参照するインデックス列の値に紐付けられたレンジパーティション内のパーティションが記憶するＫＶデータを全て抽出することで、迅速に参照の対象となるＫＶペアを取得することが出来る。
【００８４】
次に、レンジパーティションを新たに生成する場合について説明する。上述したように、本例では、記憶領域生成数設定値が３に設定されている場合について説明した。しかしながら、例えば図１７（Ａ）で示すように、記憶領域生成数設定値は４であっても構わない。そこで、以下においては、図１７（Ａ）で示すように、記憶領域生成数設定値が４である場合で初期状態として３個のレンジパーティションのみを準備していた場合に、レンジパーティションを追加する場合の処理について説明する。具体的には、図１７（Ａ）で示す場合に、ＫＶペア｛６，｛’ＥＥ’，’はひふ’，’保留’｝｝を挿入する場合の処理について説明する。
【００８５】
まず、｛６，｛’ＥＥ’，’はひふ’，’保留’｝｝というＫＶペアをデータ入力部２１により入力する。具体的には、データ入力部２１は、以下のようなＳＱＬ文をＳＱＬ文解析部２２に送信する。
INSERT  INTO  表名  VALUES  （６，’ＥＥ’，’はひふ’，’保留’）
【００８６】
次に、ＳＱＬ文解析部２２は、キー値６とバリュー値｛’ＥＥ’，’はひふ’，’保留’｝というＫＶペアを作成する。なお、ここの処理の説明は既に行ったので省略する。
【００８７】
続いて、バリュー値検出部２３は、４個目（４列目）の値である’保留’をインデックス列の値（セカンダリインデックス値）であると認識する。ここの処理の説明も既に行ったので省略する。
【００８８】
レンジパーティション管理部２４は、図１７（Ａ）で示す表を参照して、レンジパーティションとセカンダリインデックス値’保留’との紐付けがないことを認識する。また、レンジパーティション管理部２４は、図１７（Ａ）で示す表を参照して、生成されているレンジパーティションは既に全て紐付けられていることを確認する。
【００８９】
一方で、レンジパーティション管理部２４は、図１７（Ａ）で示す表を参照して、レンジパーティション名が’−’でレンジアドレス管理部も’−’の追加枠が残っていることを確認する。つまり、レンジパーティション管理部２４は、記憶領域生成数設定値にまだ余裕があることを確認する。
【００９０】
そこで、レンジパーティション管理部２４は、記憶装置３１、３２、３３（のディスク）に空き領域があることを確認し、’−’を’未設定’に変更して、レンジパーティション領域を確保する。つまり、レンジパーティション管理部２４は、図１８で示すように、レンジパーティション４４を生成する。同時に、レンジパーティション管理部２４は、生成したレンジパーティション４４内にパーティション３１４、３２４、３３４の領域を確保して、そのアドレスをレンジアドレス管理部４４１、４４２、４４３で管理する。
【００９１】
その後の処理は、既に説明した場合と同様である。つまり、レンジパーティション管理部２４は、生成した’未設定’のレンジパーティション４４にインデックス列の値が’保留’であるＫＶペアを格納するように紐付けを行う。そして、レンジパーティション管理部２４は、コンシステントハッシュ法などを使用して、レンジパーティション４４内のパーティション３１４、３２４、３３４にバランスよくＫＶペアを格納する。また、レンジパーティション管理部２４は、重複するキー値を持つＫＶペアが他のレンジパーティション内に格納されていないか監視する。この結果、レンジパーティション管理部２４の表は、図１７（Ｂ）のようになる。
【００９２】
以上が、レンジパーティションを新たに生成する場合の処理である。次に、レンジパーティションの紐付けを解除する場合の処理について説明する。本実施形態におけるレンジパーティション管理部２４は、レンジパーティションで管理するパーティション内のデータがすべて削除された場合に、当該レンジパーティションのレンジパーティション名を’未設定’に変更するように構成されている。以下では、この処理について説明する。具体的には、図１３で示すように、レンジパーティション４３が’処理済’と紐付けられているときに、’処理済’と紐付けられたレンジパーティション４３内のＫＶペアを削除した場合の処理について説明する。
【００９３】
まず、データ入力部２１から、’処理済’レンジパーティション内に格納された２件のＫＶペア｛４，｛’ＣＣ’，’たちつ’，’処理済’｝｝と｛５，｛’ＤＤ’，’なにぬ’，’処理済’｝｝とを削除する要求が発生する。具体的には、データ入力部２１は、以下のようなＳＱＬ文をＳＱＬ文解析部２２に送信する。
DELETE  FROM  表名  WHERE  列４＝’処理済’
【００９４】
次に、ＳＱＬ文解析部２２は、列４の参照をバリュー値検出部２３に通知する。なお、この処理は、インデックス列の値による参照を行う場合と同様のため省略する。
【００９５】
続いて、バリュー値検出部２３は、インデックス列の値’処理済’でデータを参照することを認識し、その旨をレンジパーティション管理部２４に通知する。
【００９６】
レンジパーティション管理部２４は、’処理済’に紐付けられたレンジパーティションのレンジアドレス管理部４３１、４３２、４３３からパーティションの位置を特定する。
【００９７】
そして、各パーティションのアドレス管理部３１３１、３２３１、３３３１が格納されているＫＶペアを特定し、当該特定したＫＶペアを削除する。さらに、アドレス管理部３１３１、３２３１、３３３１は、当該アドレス管理部３１３１、３２３１、３３３１が記憶するオフセットを削除する。
【００９８】
その後、レンジアドレス管理部４３１、４３２、４３３は、削除通知をレンジパーティション管理部２４へ通知する。つまり、レンジアドレス管理部４３１、４３２、４３３は、自身が管理するパーティション３１３、３２３、３３３に格納されたデータが全て削除されたので、その旨をレンジパーティション管理部２４に対して通知する。
【００９９】
そして、上記通知を受けたレンジパーティション管理部２４は、’処理済’レンジパーティション名を’未設定’に変更する。このように、レンジパーティション管理部２４は、レンジアドレス管理部からの通知によりあるレンジパーティション内のＫＶデータが全て確認できた場合に、レンジパーティション名を’未設定’に変更する処理を行う。これにより、レンジパーティションの紐付けを解除することが出来る。
【０１００】
次に、レンジパーティションを削除する場合の処理について説明する。例えば、ディスク不足などにより、’未設定’のレンジパーティションの領域を解放したい場合も考えられる。具体的には、例えば、初期設定で記憶領域生成数設定値を３に設定したが、記憶領域生成数設定値を２に減らしたい場合などである。このような場合は、レンジパーティション管理部２４にレンジパーティションの削除を通知する。通知方法は、コマンドなどでよい。
【０１０１】
上記通知を受けたレンジパーティション管理部２４は、例えば図１９（Ａ）で示すような表を確認し、’未設定’のレンジパーティション名があるか確認する。また、レンジパーティション管理部２４は、’未設定’のレンジパーティション名がある場合に、レンジアドレス管理部が設定済みであるか否か確認する。
【０１０２】
そして、レンジパーティション管理部２４は、レンジアドレス管理部に設定がある場合（オフセットが設定されている場合）に、対象のレンジパーティションのうちの一つを解放する。これにより、レンジパーティションとして設定された領域やレンジアドレス管理部、レンジパーティション内部に設定したパーティション、アドレス管理部などが解放されることになる。
【０１０３】
その後、レンジアドレス管理部は、レンジアドレス管理部の紐付けを一つ減らす。つまり、図１９（Ｂ）で示す点線部分を削除する。これにより、レンジパーティションが削除されることになる。
【０１０４】
次に、パーティションが増えた場合の処理について説明する。各記憶装置（３１、３２、３３）内のパーティション数が増加した場合、新たに記憶装置を追加してレンジパーティションの領域を拡張することも可能である。この場合、既存の記憶装置３１、３２、３３に作成されたパーティションを新たな記憶装置に移動することが出来る。
【０１０５】
次に、記憶装置が増減した場合の処理について説明する。
【０１０６】
まず、記憶装置が増加した場合の処理について説明する。記憶装置の追加は、例えば、データ量の増加に対応するためや、処理性能向上のために行われることになる。例えば、記憶装置３１、３２、３３に記憶装置３４を追加した場合、レンジパーティション管理部２４は、図２０で示すように、表のレンジアドレス管理部に新たに記憶装置３４の情報を付加する。また、レンジパーティション管理部２４は、記憶装置３４にレンジパーティション領域、パーティションの領域を確保し、そのアドレスを表のレンジアドレス管理部で管理する。このような処理により、記憶装置を追加することが出来る。
【０１０７】
一方、記憶装置を削除した場合、レンジパーティション管理部２４が、各レンジパーティションに格納されたデータを、コンシステントハッシュ法などを用いて残りのパーティションにバランスよく格納し直す。そして、削除された記憶装置のパーティションに格納されたデータが全て他の記憶装置のパーティションに移行された時点で、レンジパーティション管理部２４は、表のレンジアドレス管理部から削除した記憶装置のオフセットの情報を削除する。例えば、記憶装置３１、３２、３３、３４から記憶装置３４を削除した場合、図２１（Ａ）から図２１（Ｂ）のように、記憶装置３４のオフセットが削除されることになる。また、レンジパーティション管理部２４は、記憶装置３４で設定したレンジアドレス管理部や記憶装置３４のレンジパーティションの領域を解放する。また、レンジパーティション管理部２４は、レンジパーティション内部に作成したパーティションやアドレス管理部も開放する。記憶装置が削除された場合は、このような処理を行うことになる。
【０１０８】
以上が、本実施形態におけるデータベースシステム１の構成と、当該構成を用いて行われる処理の一例である。次に、データベースシステム１の動作の一例について説明する。
【０１０９】
最初に、データベースシステム１にデータを挿入する際の動作について説明する。図２２を参照すると、まず、データ入力部２１がＳＱＬ文をＳＱＬ文解析部２２に送信する（Ｓ１０１）。具体的には、データ入力部２１がＳＱＬ文解析部２２にＩＮＳＥＲＴ文を送信する。
【０１１０】
次に、ＳＱＬ文解析部２２が、データ入力部２１が送信したデータを解析して、ＫＶペアを作成する（Ｓ１０２）。そして、ＳＱＬ文解析部２２は、作成したＫＶペアをバリュー値検出部２３に送信する。
【０１１１】
続いて、バリュー値検出部２３が、ＳＱＬ文解析部２２から受信したＫＶペアのうちのインデックス列の値を認識する（Ｓ１０３）。そして、バリュー値検出部２３は、ＫＶペアと認識したインデックス列の値の情報をレンジパーティション管理部２４に送信する。
【０１１２】
その後、レンジパーティション管理部２４は、表を確認することで、バリュー値検出部２３から受信したインデックス列の値がレンジパーティションと紐付けされているかを確認する（Ｓ１０４）。そして、紐付けがある場合（Ｓ１０４、ｙｅｓ）、レンジパーティション管理部２４は、コンシステントハッシュ法を用いて、インデックス列の値と紐付けられたレンジパーティション内のどのパーティションにＫＶペアを格納するかを決定する（Ｓ１０５）。そして、レンジパーティション管理部２４は、決定したパーティションにＫＶペアを格納する。
【０１１３】
また、レンジパーティション管理部２４は、格納しようとしているＫＶペアと同じキー値を持つＫＶペアが他のレンジパーティションに格納されていないか確認する（Ｓ１０６）。そして、レンジパーティション管理部２４は、格納しようとしているＫＶペアと同じキー値を持つＫＶペアが他のレンジパーティションに格納されていた場合（Ｓ１０６、ｙｅｓ）、新たに格納したＫＶペアを削除する（Ｓ１０７）。格納しようとしているＫＶペアと同じキー値を持つＫＶペアが他のレンジパーティションに格納されていない場合、ＫＶペアの格納が確定することになる。
【０１１４】
一方、バリュー値検出部２３から受信したインデックス列の値がレンジパーティションと紐付けされていなかった場合（Ｓ１０４、ｎｏ）、レンジパーティション管理部２４は、生成されたレンジパーティションのうちまだ紐付けされていないものがあるか確認する（Ｓ１０８）。そして、紐付けされていないレンジパーティションがある場合（Ｓ１０８、ｙｅｓ）、レンジパーティション管理部２４は、レンジパーティションとインデックス列の値との新たな紐付けを行う（Ｓ１０９）。続いて、レンジパーティション管理部２４は、コンシステントハッシュ法を用いて、新たな紐付けを行ったレンジパーティション内のどのパーティションにＫＶペアを格納するか決定する（Ｓ１０５）。そして、レンジパーティション管理部２４は、当該決定したパーティションにＫＶペアを格納する。また、レンジパーティション管理部２４は、同一のキー値のＫＶペアが他のレンジパーティションに格納されていないか確認し（Ｓ１０６）、格納されていた場合は、新たに格納したＫＶペアを削除する（Ｓ１０７）。
【０１１５】
また、バリュー値検出部２３から受信したインデックス列の値がレンジパーティションと紐付けされておらず（Ｓ１０４、ｎｏ）、まだ紐付けされていないものもない場合（Ｓ１０８、ｎｏ）、レンジパーティション管理部２４は、記憶領域生成数設定値に余裕があるか確認する（Ｓ１１０）。そして、記憶領域生成数設定値に余裕がある場合、レンジパーティション管理部２４は、新しいレンジパーティション領域を確保する（Ｓ１１１）。そして、レンジパーティション管理部２４は、新たに確保したレンジパーティション領域とインデックス列との紐付けを行う（Ｓ１０９）。その後、レンジパーティション管理部２４は、コンシステントハッシュ法を用いて決定したパーティションにＫＶペアを格納する（Ｓ１０５）。そして、レンジパーティション管理部２４は、同一のキー値のＫＶペアが他のレンジパーティションに格納されている場合（Ｓ１０６、ｙｅｓ）、新たに格納したＫＶペアを削除する（Ｓ１０７）。
【０１１６】
一方、記憶領域生成数設定値に余裕がない場合（Ｓ１１０、ｎｏ）、レンジパーティション管理部２４はＫＶペアを格納することが出来ない。そこで、レンジパーティション管理部２４は、エラーを送信する（Ｓ１１２）。
【０１１７】
以上が、データベースシステム１にデータを挿入する際の動作である。次に、データベースシステム１に格納されたデータをキー値又はインデックス列の値を用いて参照する際の動作について説明する。
【０１１８】
図２３を参照すると、まず、データ入力部２１がＳＱＬ文をＳＱＬ文解析部２２に送信する（Ｓ２０１）。具体的には、データ入力部２１がＳＱＬ文解析部２２にＳＥＬＥＣＴ文を送信する。
【０１１９】
次に、ＳＱＬ文解析部２２が、データ入力部２１が送信したデータを解析する（Ｓ２０２）。そして、ＳＱＬ文解析部２２は、解析の結果として、キー値又はキー値以外の列の値を取得する。
【０１２０】
ＳＱＬ文解析部２２が解析した結果がキー値であった場合（Ｓ２０３、ｙｅｓ）、次に、レンジパーティション管理部２４がコンシステントハッシュ法を使用して、当該キー値が格納されているパーティションを特定する（Ｓ２０４）。そして、レンジパーティション管理部２４は、特定したパーティションを検索する（Ｓ２０５）。
【０１２１】
このように、レンジパーティション管理部２４は、キー値を用いた検索を行おうとする場合、検索するパーティションを絞った上で、当該キー値に基づいた検索を行う。
【０１２２】
一方、ＳＱＬ文解析部２２が解析した結果がキー値以外の列の値であった場合（Ｓ２０３、ｎｏ）、バリュー値検出部２３が当該キー値以外の列の値がインデックス列の値であることを認識する（Ｓ２０６）。そして、バリュー値検出部２３は、認識したインデックス列の値をレンジパーティション管理部２４に送信する。
【０１２３】
次に、レンジパーティション管理部２４が、インデックス列の値と紐付けられたレンジパーティションからデータを取得する（Ｓ２０７）。具体的には、レンジパーティション管理部２４は、参照の対象となるインデックス列の値と紐付けられたレンジパーティションを特定する。そして、レンジパーティション管理部２４は、当該特定したレンジパーティション内のパーティションに格納されているＫＶデータを取得する。
【０１２４】
このように、レンジパーティション管理部２４は、インデックス列の値を用いて参照する場合、参照するインデックス列の値に紐付けられたレンジパーティション内のパーティションが記憶するＫＶデータを全て抽出する。これにより、レンジパーティション管理部２４は、迅速に参照の対象となるＫＶペアを取得することが出来る。
【０１２５】
このように、本実施形態におけるデータベースシステム１は、レンジパーティション管理部２４を備えている。このような構成により、レンジパーティション管理部２４は、キーバリューストア３の複数のパーティションをまとめてレンジパーティションを生成することが出来る。また、レンジパーティション管理部２４は、生成したレンジパーティションとインデックス列の値とを紐付けることが出来る。そして、レンジパーティション管理部２４は、インデックス列の値と紐付けたレンジパーティションに当該インデックス列の値を持つＫＶペアを格納することが出来る。その結果、レンジパーティション管理部２４は、インデックス列の値を用いて高速に参照することが出来るようになる。つまり、レンジパーティション管理部２４は、参照するインデックス列の値に紐付けられたレンジパーティション内のパーティションが記憶するＫＶデータを全て抽出することで、迅速に参照の対象となるＫＶペアを取得することが出来るようになる。
【０１２６】
また、本実施形態におけるレンジパーティション管理部２４には、記憶領域生成数設定値が設定されている。このような構成により、レンジパーティション管理部２４は、記憶領域生成数設定値の範囲内でレンジパーティションを生成することが出来る。その結果、レンジパーティションの数が多くなることによる、インデックス列の値を使用した参照による高速化の効果が少なくなる虞を防止することが出来る。
【０１２７】
[第２の実施形態]
次に本発明の第２の実施形態について図面を参照して説明する。なお、第２の実施形態では、インデックス列の値に応じて生成される記憶領域に、当該記憶領域に応じたインデックス列の値を備えるキーバリューデータを記憶させる情報記憶装置５の構成の概要について説明する。
【０１２８】
図２４を参照すると、本実施形態における情報記憶装置５は、パーティション管理部５１と、データ記憶部５２と、を有している。
【０１２９】
パーティション管理部５１は、データ記憶部５１にキーバリューデータを記憶させる領域である記憶領域を生成して管理する機能を有している。具体的には、パーティション管理部５１は、キーバリューデータのバリュー値が備える複数の要素のうちの一つをインデックス列として、当該インデックス列の値に応じて、データ記憶部５１に記憶領域を生成する。そして、パーティション管理部５１は、当該生成した記憶領域内に、当該記憶領域に対応する要素の値を備えるキーバリューデータを記憶させる。
【０１３０】
データ記憶部５２は、ハードディスクやメモリなどの記憶装置である。データ記憶部５２は、キー値と、複数の要素を備えるバリュー値と、を対応付けて、キーバリューデータとして記憶する。上記のように、データ記憶部５２は、パーティション管理部５１により複数の記憶領域が生成されている。データ記憶部５２は、記憶領域内に、当該記憶領域に対応する要素の値を備えるキーバリューデータを記憶することになる。
【０１３１】
このように、本実施形態における情報記憶装置５は、パーティション管理部５１と、データ記憶部５２と、を有している。このような構成により、パーティション管理部５１は、データ記憶部５１にキーバリューデータを記憶させる領域である記憶領域を生成して管理することが出来る。また、パーティション管理部５１は、生成した記憶領域内に、当該記憶領域に対応する要素の値を備えるキーバリューデータを記憶させることが出来る。その結果、高速にインデックス列の値を用いて参照することが出来るようになる。つまり、パーティション管理部５１によりインデックス列の値に応じた記憶領域内にキーバリューデータが記憶されているため、当該インデックス列の値に応じた記憶領域を参照することで、当該インデックス列の値を持つキーバリューデータを全て取得できることになる。その結果、迅速にインデックス列の値に応じたキーバリューデータを参照することが出来る。
【０１３２】
なお、上述した情報記憶装置５は、情報記憶装置に所定のプログラムが組み込まれることで実現できる。具体的に、本発明の他の形態であるプログラムは、情報記憶装置に、キー値と、複数の要素を備えるバリュー値と、を対応付けて、キーバリューデータとして記憶するデータ記憶部と、データ記憶部にキーバリューデータを記憶させる領域である記憶領域を生成して管理するパーティション管理部と、を実現させ、パーティション管理部は、バリュー値が備える複数の要素のうちの一つをインデックス列として当該インデックス列の値に応じて記憶領域を生成し、当該生成した記憶領域内に、当該記憶領域に対応する要素の値を備えるキーバリューデータを記憶させる、プログラムである。
【０１３３】
また、上述した情報記憶装置５が作動することにより実行される情報記憶方法は、キー値と複数の要素を備えるバリュー値とを対応付けたキーバリューデータのバリュー値が備える複数の要素のうちの一つをインデックス列として当該インデックス列の値に応じて記憶領域を生成し、当該生成した記憶領域内に、当該記憶領域に対応する要素の値を備える前記キーバリューデータを記憶させる、というものである。
【０１３４】
また、上述した情報記憶装置５は、データ記憶装置とパーティション管理装置とを備える情報記憶システムであっても構わない。具体的に、情報記憶システムは、キー値と、複数の要素を備えるバリュー値と、を対応付けて、キーバリューデータとして記憶するデータ記憶装置と、データ記憶部にキーバリューデータを記憶させる領域である記憶領域を生成して管理するパーティション管理装置と、を備え、パーティション管理装置は、バリュー値が備える複数の要素のうちの一つをインデックス列として当該インデックス列の値に応じて記憶領域を生成し、当該生成した記憶領域内に、当該記憶領域に対応する要素の値を備えるキーバリューデータを記憶させる、というものである。
【０１３５】
上述した構成を有する、プログラム、又は、情報処理方法、又は、情報記憶システム、の発明であっても、上記情報記憶装置５と同様の作用を有するために、上述した本発明の目的を達成することが出来る。
【０１３６】
＜付記＞
上記実施形態の一部又は全部は、以下の付記のようにも記載されうる。以下、本発明における情報記憶装置などの概略を説明する。但し、本発明は、以下の構成に限定されない。
【０１３７】
（付記１）
キー値と、複数の要素を含むバリュー値と、を対応付けて、キーバリューデータとして記憶するデータ記憶部と、
前記データ記憶部に前記キーバリューデータを記憶させる領域である記憶領域を生成して管理するパーティション管理部と、を備え、
前記パーティション管理部は、前記バリュー値が備える複数の要素のうちの一つをインデックス列の値として当該インデックス列の値に応じて前記記憶領域を設定し、当該設定した記憶領域内に、当該記憶領域に対応する要素の値を含む前記キーバリューデータを記憶させる、
情報記憶装置。
【０１３８】
この構成によると、情報記憶装置が、データ記憶部と、パーティション管理部と、を有している。このような構成により、パーティション管理部は、データ記憶部にキーバリューデータを記憶させる領域である記憶領域を生成して管理することが出来る。また、パーティション管理部は、生成した記憶領域内に、当該記憶領域に対応する要素の値を備えるキーバリューデータを記憶させることが出来る。その結果、高速にインデックス列の値を用いて参照することが出来るようになる。つまり、パーティション管理部によりインデックス列の値に応じた記憶領域内にキーバリューデータが記憶されているため、当該インデックス列の値に応じた記憶領域を参照することで、当該インデックス列の値を持つキーバリューデータを全て取得できることになる。その結果、迅速にインデックス列の値に応じたキーバリューデータを参照することが出来る。
【０１３９】
（付記２）
付記１に記載の情報記憶装置であって、
前記パーティション管理部は、前記記憶領域を生成する数である記憶領域生成数設定値を予め記憶しており、当該記憶領域生成数設定値の範囲内で前記記憶領域を生成する、
情報記憶装置。
【０１４０】
この構成によると、パーティション管理部が記憶領域生成数設定値を記憶している。このような構成により、パーティション管理部は、記憶領域生成数設定値の範囲内で記憶領域を生成することが出来る。その結果、記憶領域の数が多くなることによる、インデックス列の値を使用した参照による高速化の効果が少なくなる虞を防止することが出来る。
【０１４１】
（付記３）
付記１又は２に記載の情報記憶装置であって、
前記  前記パーティション管理部は、前記キーバリューデータを所定の記憶領域内に記憶させる際に、既に同一のキー値を持つキーバリューデータが他の前記記憶領域に記憶されている場合、当該キーバリューデータを前記所定の記憶領域に記憶させないよう構成されている、
情報記憶装置。
【０１４２】
この構成によると、パーティション管理部は、キーバリューデータを所定の記憶領域内に記憶させる際に、既に同一のキー値を持つキーバリューデータが他の記憶領域に記憶されている場合、当該キーバリューデータを所定の記憶領域に記憶させないよう構成されている。このような構成により、重複したキー値のキーバリューデータが登録されることを防止することが出来る。
【０１４３】
（付記４）
付記１乃至３の何れかに記載の情報記憶装置であって、
前記データ記憶部は、前記パーティション管理部により生成された前記記憶領域内に前記キーバリューデータを記憶する領域であるデータ記憶領域を複数備えており、
前記パーティション管理部は、前記複数のデータ記憶領域に均等に前記キーバリューデータを記憶させる、
情報記憶装置。
【０１４４】
（付記５）
付記１乃至４の何れかに記載の情報記憶装置であって、
前記インデックス列の値を指定して、当該インデックス列の値に応じた前記記憶領域を参照し、当該参照した記憶領域内のキーバリューデータを参照する、インデックス参照部を備える、
情報記憶装置。
【０１４５】
（付記６）
付記５に記載の情報記憶装置であって、
前記インデックス参照部は、ＳＱＬ言語を用いて前記インデックス列を指定可能なよう構成された、
情報記憶装置。
【０１４６】
（付記７）
情報記憶装置に、
キー値と、複数の要素を備えるバリュー値と、を対応付けて、キーバリューデータとして記憶するデータ記憶部と、
前記データ記憶部に前記キーバリューデータを記憶させる領域である記憶領域を生成して管理するパーティション管理部と、を実現させ、
前記パーティション管理部は、前記バリュー値が備える複数の要素のうちの一つをインデックス列として当該インデックス列の値に応じて前記記憶領域を生成し、当該生成した記憶領域内に、当該記憶領域に対応する要素の値を備える前記キーバリューデータを記憶させる、
プログラム。
【０１４７】
（付記８）
キー値と複数の要素を備えるバリュー値とを対応付けたキーバリューデータの前記バリュー値が備える複数の要素のうちの一つをインデックス列として当該インデックス列の値に応じて記憶領域を生成し、当該生成した記憶領域内に、当該記憶領域に対応する要素の値を備える前記キーバリューデータを記憶させる、
情報記憶方法。
【０１４８】
（付記９）
付記８に記載の情報記憶方法であって、
予め定められた前記記憶領域を生成する数である記憶領域生成数設定値の範囲内で前記記憶領域を生成する、
情報記憶方法。
【０１４９】
（付記１０）
キー値と、複数の要素を備えるバリュー値と、を対応付けて、キーバリューデータとして記憶するデータ記憶装置と、
前記データ記憶部に前記キーバリューデータを記憶させる領域である記憶領域を生成して管理するパーティション管理装置と、を備え、
前記パーティション管理装置は、前記バリュー値が備える複数の要素のうちの一つをインデックス列として当該インデックス列の値に応じて前記記憶領域を生成し、当該生成した記憶領域内に、当該記憶領域に対応する要素の値を備える前記キーバリューデータを記憶させる、
情報記憶システム。
【０１５０】
なお、上記各実施形態及び付記において記載したプログラムは、記憶装置に記憶されていたり、コンピュータが読み取り可能な記録媒体に記録されている。例えば、記録媒体は、フレキシブルディスク、光ディスク、光磁気ディスク、及び、半導体メモリ等の可搬性を有する媒体である。
【０１５１】
以上、上記各実施形態を参照して本願発明を説明したが、本願発明は、上述した実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明の範囲内で当業者が理解しうる様々な変更をすることが出来る。
【符号の説明】
【０１５２】
１  データベースシステム
２  クライアント装置
２１  データ入力部
２２  ＳＱＬ文解析部
２３  バリュー値検出部
２４  レンジパーティション管理部
３  キーバリューストア
３１、３２、３３  記憶装置
３１１、３１２、３１３、３１４、
３２１、３２２、３２３、３２４、
３３１、３３２、３３３、３３４  パーティション
３１１１、３１２１、３１３１、３１４１、
３２１１、３２２１、３２３１、３２４１、
３３１１、３３２１、３３３１、３３４１  アドレス管理部
４１、４２、４３  レンジパーティション
４１１、４１２、４１３、
４２１、４２２、４２３、
４３１、４３２、４３３  レンジアドレス管理部
５  情報記憶装置
５１  データ記憶部
５２  パーティション管理部
【図１】
2015197786.tif 000003
【図２】
2015197786.tif 000004
【図３】
2015197786.tif 000005
【図４】
2015197786.tif 000006
【図５】
2015197786.tif 000007
【図６】
2015197786.tif 000008
【図７】
2015197786.tif 000009
【図８】
2015197786.tif 000010
【図９】
2015197786.tif 000011
【図１０】
2015197786.tif 000012
【図１１】
2015197786.tif 000013
【図１２】
2015197786.tif 000014
【図１３】
2015197786.tif 000015
【図１４】
2015197786.tif 000016
【図１５】
2015197786.tif 000017
【図１６】
2015197786.tif 000018
【図１７】
2015197786.tif 000019
【図１８】
2015197786.tif 000020
【図１９】
2015197786.tif 000021
【図２０】
2015197786.tif 000022
【図２１】
2015197786.tif 000023
【図２２】
2015197786.tif 000024
【図２３】
2015197786.tif 000025
【図２４】
2015197786.tif 000026