(57)【特許請求の範囲】
【請求項１】
レコードを、前記レコードの検索用のキーと、前記レコードの版数及び前記レコードを分割した部分データとを含むバリューとの組であるキーバリューペアとして分散して保持する情報処理システムにおいて、
前記キーバリューペアを記憶する記憶手段と、
前記記憶手段に記憶されている前記キーバリューペアを基に前記部分データを作成する部分データ作成手段と、
前記部分データの取得の要求を受信したときに、前記部分データ作成手段が作成した前記部分データを送信する部分データアクセス手段と
を含むデータ保存装置と、
前記データ保存装置から前記部分データを取得する部分データ取得手段と、
前記データ保存装置から取得した前記部分データを結合して前記レコードを作成する部分データ分割結合手段と、
取得した前記部分データにおいて不足している前記部分データがある場合に、不足している前記部分データを前記データ保存装置から取得する再要求判定手段と
を含むデータ処理装置と
を含む情報処理システム。
【請求項２】
前記データ処理装置が、
前記レコードを受信し、前記レコードを送信する第１のアクセスインタフェース手段と、
前記キーバリューペアの版数を確認する版数確認手段と、
前記レコードを基に前記キーバリューペアを作成するキーバリューペア作成手段と、
前記キーバリューペアを前記データ保存装置に送信し、前記データ保存装置から前記キーバリューペアを取得するアクセス手段と
を含む請求項１に記載の情報処理システム。
【請求項３】
前記データ保存装置が
前記データ処理装置から前記キーバリューペアを受信し、前記データ処理装置に前記キーバリューペアを送信する第２のアクセスインタフェース手段と、
前記キーバリューペアを前記記憶手段に保存し、前記記憶手段から前記キーバリューペアを読み出すキーバリューペア処理手段と
を含む請求項１又は２に記載の情報処理システム。
【請求項４】
前記部分データ取得手段が、
複数の前記データ保存装置から並列に前記部分データを取得する
請求項１ないし３のいずれか１項に記載の情報処理システム。
【請求項５】
前記再要求判定手段が、
前記部分データを取得できない場合に、取得できない前記部分データとは異なる前記部分データを取得した前記データ保存装置に取得できない前記部分データを要求する
請求項１ないし４のいずれか１項に記載の情報処理システム。
【請求項６】
前記データ保存装置が、
各レコードに対して一つの前記部分データを記憶する
請求項１ないし５のいずれか１項に記載の情報処理システム。
【請求項７】
前記データ処理装置から前記部分データを受信し、前記部分データを前記データ保存装置に反映させ、前記部分データの反映において失敗が発生した場合、前記データ保存装置における反映が成功するまで再試行を実行するデータ転送手段を含む
請求項１ないし６のいずれか１項に記載の情報処理システム。
【請求項８】
レコードを、前記レコードの検索用のキーと、前記レコードの版数及び前記レコードを分割した部分データとを含むバリューとの組であるキーバリューペアとして分散して保持する情報処理システムにおいて、
データ保存装置が、
前記キーバリューペアを記憶し、
記憶されている前記キーバリューペアを基に前記部分データを作成し、
前記部分データの取得の要求を受信したときに、作成した前記部分データを送信し、
データ処理装置が、
前記データ保存装置から前記部分データを取得し、
前記データ保存装置から取得した前記部分データを結合して前記レコードを作成し、
取得した前記部分データにおいて不足している前記部分データがある場合に、不足している前記部分データを前記データ保存装置から取得する
情報処理方法。
【請求項９】
レコードを、前記レコードの検索用のキーと、前記レコードの版数及び前記レコードを分割した部分データとを含むバリューとの組であるキーバリューペアとして分散して保持する情報処理システムにおいて、
第１のコンピュータに、
前記キーバリューペアを記憶する処理と、
記憶されている前記キーバリューペアを基に前記部分データを作成する処理と、
前記部分データの取得の要求を受信したときに、作成した前記部分データを送信する処理とを実行させ、
第２のコンピュータに、
前記第１のコンピュータから前記部分データを取得する処理と、
前記第１のコンピュータから取得した前記部分データを結合して前記レコードを作成する処理と、
取得した前記部分データにおいて不足している前記部分データがある場合に、不足している前記部分データを前記第１のコンピュータから取得する処理と
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの管理に関し、特に、分散したデータを管理する情報処理システムに関する。
【背景技術】
【０００２】
近年、データの保存及び管理として、キー（Ｋｅｙ）とバリュー（Ｖａｌｕｅ）とのペア（以下、ＫＶペアとする）を用いて管理するＫｅｙ  Ｖａｌｕｅ  Ｓｔｏｒｅ（以下、ＫＶＳとする）が用いられている（特許文献１、２、及び、３を参照）。
【０００３】
［ＫＶＳの基本動作−ＰＵＴ］
まず、本発明に関連するＫＶＳの基本動作について説明する。
【０００４】
以下は、一例として、Ｋｅｙ  Ｖａｌｕｅ（ＫＶ）ペアのレプリケーション数を３とする。クォーラム（Ｑｕｏｒｕｍ）の判定は、２か所の書き込みで書き込み（ＰＵＴ）が成功、２か所の読み込みで読み込み（ＧＥＴ）が成功とする。
【０００５】
ＫＶＳに対する要求は、全てＫＶペアの単位で行われる。
【０００６】
図１３は、以下の説明に用いるＫＶペアの一例を示す図である。図１３に示されているように、ＫＶペアは、「Ｋｅｙ」と「Ｖａｌｕｅ部」とを含む。
【０００７】
ＫＶペアにおいて、一般的に、Ｖａｌｕｅ部は、ユーザが格納したいデータ（Ｄａｔａ）を保持する。しかし、本発明は、分散ＫＶＳを対象とする。そのため、ＫＶペアは、更新の整合性を保証するための判断情報として、版数（以下、「Ｖｅｒｓｉｏｎ」とする）が付加されている。つまり、Ｖａｌｕｅ部は、ＶｅｒｓｉｏｎとＤａｔａとを含む。
【０００８】
Ｖｅｒｓｉｏｎは、そのＫＶペアの更新の有無を表す情報である。ＫＶペアが更新されると、Ｖｅｒｓｉｏｎは、前回と異なる情報に書き換えられる。Ｖｅｒｓｉｏｎの比較に基づいて、ＫＶペアの更新の有無及び更新順序が、判定可能となる。
【０００９】
一般的に、Ｖｅｒｓｉｏｎは、ＶｅｃｔｏｒＣｌｏｃｋなどの「ベクトル」として扱われる。ただし、表記の煩雑さを避けるため、以下の説明では、Ｖｅｒｓｉｏｎとして「スカラ」を用いて表現する。例えば、以下の説明では、スカラとして、Ｖｅｒｓｉｏｎを「ｖ０」又は「ｖ１」などのように表現する。
【００１０】
なお、ＫＶペアは、例えば、単純に、Ｊａｖａ（登録商標）のマップ（Ｍａｐ）クラス又はプロパティ（Ｐｒｏｐｅｒｔｉｅｓ）クラスを用いてもよい。
【００１１】
図１４ないし図１７は、ＫＶＳにおける「書き込み及び更新」を示した図である。
【００１２】
［初回のＰＵＴ］
図１４は、初回のＰＵＴを示す図である。
【００１３】
図１４に示されている「初回のＰＵＴ」は、ＫＶＳクライアント（以下、「ＫＶＳ  Ｃｌｉｅｎｔ」とする）が、まだ存在しないＫＶペアをＫＶＳに、初めて格納する動作を示したものである。
【００１４】
このとき、ＫＶＳ  Ｃｌｉｅｎｔは、ユーザから要求を、「ＰＵＴ」として受け付ける。ＰＵＴの内部処理として、ＫＶＳ  Ｃｌｉｅｎｔは、まず始めに、要求されたＫｅｙ：Ｋ１のＫＶペアの取得を試みる。今の場合、新規のＫＶペアの格納を想定しているため、対象となるＫＶペアは、ＫＶＳに存在しない。この試行に基づいて、Ｋ１がＫＶＳに存在しないことが、判明する。
【００１５】
次に、ＫＶＳ  Ｃｌｉｅｎｔは、これから格納するＫＶペアを作成する。具体的には、ＫＶＳ  Ｃｌｉｅｎｔは、指定されたＫ１をＫｅｙに設定し、初回を示すｖ０をＶａｌｕｅ部のＶｅｒｓｉｏｎに設定し、要求されたデータ（ここではＤａｔａを「Ｄａｔａ−Ａ」とする）のＶａｌｕｅ部のＤａｔａに設定して、ＫＶペアを設定する。ＫＶＳ  Ｃｌｉｅｎｔは、このＫＶペアを、システムに設定されたレプリケーション数（今回は３）だけ、異なるＫＶＳ（図１４の各ＫＶＳ−Ｘ（Ｘ＝１，２，３））に格納する。
【００１６】
これらの一連の処理の成功をもって、初回のＰＵＴは、成功となる。
【００１７】
［２回目以降のＰＵＴ］
図１５は、２回目以降のＰＵＴを示す図である。
【００１８】
図１５に示されている２回目以降のＰＵＴにおいても、動作概要は、「初回のＰＵＴ」と同様である。相違は、ＫＶペアが、「ＫｅｙがＫ１であるＫＶペアの取得の試み」として、ＫＶペアを取得できることである。そこで、ＫＶＳ  Ｃｌｉｅｎｔは、２回以降のＰＵＴにおいて、取得できたＫＶペアのＶｅｒｓｉｏｎを更新する（図１５ではＶｅｒｓｉｏｎを１増やす）。ＫＶＳ  Ｃｌｉｅｎｔは、Ｖｅｒｓｉｏｎの更新を用いて、更新の有無と順序とを表す。具体的には、ＫＶＳ  Ｃｌｉｅｎｔは、Ｖａｌｕｅ部のＶｅｒｓｉｏｎをｖ１とし、Ｄａｔａを新たなデータ（以下、Ｄａｔａ−Ｂとする）として、新たなＫＶペアを作成する。そして、ＫＶＳ  Ｃｌｉｅｎｔは、ＫＶペアをＫＶＳ２００に格納する。
【００１９】
［ＰＵＴの競合］
図１６は、ＰＵＴの競合を示す図である。
【００２０】
分散ＫＶＳにおいて、複数のＫＶＳ  Ｃｌｉｅｎｔから任意のタイミングで、任意の操作が行われる。例えば、ＰＵＴも、任意のタイミングで実行される。つまり、複数のＫＶＳ  ＣｌｉｅｎｔからのＰＵＴが、同時にＫＶＳに対して実行されることが、想定される。
【００２１】
図１６の右側に示されているＫＶＳ  Ｃｌｉｅｎｔは、ＫＶＳ−１への書き込みにおいて、ｖ２が既に格納済みのため、格納に失敗する。ＫＶＳ−１も、右側のＫＶＳ  Ｃｌｉｅｎｔに失敗を返却する。これらの動作は、ＫＶＳ−２においても、同様である。
【００２２】
なお、この説明では、各ＫＶＳ  Ｃｌｉｅｎｔは、ＫＶＳ−１⇒ＫＶＳ−２⇒ＫＶＳ−３へ順番に書き込むものとする。この場合、ＫＶＳ−１及びＫＶＳ−２への失敗に基づいて「最低２か所書き込み」の条件が満たせないことが、確定する。そのために、右側のＫＶＳ  Ｃｌｉｅｎｔは、ＫＶＳ−３に格納を試みない。そして、右側のＫＶＳ  ＣｌｉｅｎｔのＰＵＴが失敗することで、結果として競合が、解消される。
【００２３】
ただし、既に説明したとおり、Ｖｅｒｓｉｏｎは、一般的に、ベクトルである。そのため、ＫＶペアは、順番に書き込まれる必要はない。ＫＶペアは、並列に書き込まれてもよい。並列書き込みの場合、右側に示されているＫＶＳ  Ｃｌｉｅｎｔは、同時の３か所の書き込みを試みる。そして、そのＫＶＳ  Ｃｌｉｅｎｔが２か所の書き込み失敗を認識することで、ＰＵＴの失敗が確定する。
【００２４】
なお、Ｖｅｒｓｉｏｎがスカラの場合、複数のＫＶＳ  Ｃｌｉｅｎｔが同じＶｅｒｓｉｏｎのＫＶペアの格納しようとすると、ＫＶペアは、区別がつかなくなる場合が発生する。ただし、既に説明したとおり、Ｖｅｒｓｉｏｎは、一般的に、ベクトルである。そのため、一番初めに、どのＫＶＳ−Ｘに格納しようとしたのかは、ベクトルを用いて表現されている。したがって、一般的には、上記のＫＶペアが区別つかない場合は、発生しない。上記不具合は、説明の便宜のため、スカラを用いているからである。
【００２５】
［ＰＵＴの遅れ］
ＫＶＳ−１、ＫＶＳ−２、及び、ＫＶＳ−３は、それぞれ物理的に異なるＫＶＳ（例えば、サーバ）を意味している。したがって、ＫＶペアの格納は、３か所のＫＶＳにおいて、同時に格納されるわけではない。一部のＫＶＳにおいて、ＫＶペアの格納が遅れる場合がある。
【００２６】
図１７は、ＰＵＴの遅れを示す図である。
【００２７】
図１７において、左側のＫＶＳ  Ｃｌｉｅｎｔは、ＫＶＳ−１とＫＶＳ−２とにＫＶペアを格納できた。しかし、図１７において、左側のＫＶＳ  Ｃｌｉｅｎｔは、ＫＶＳ−３への格納が遅れている。
【００２８】
左側のＫＶＳ  ＣｌｉｅｎｔのＫＶＳ−３へのＫＶペアの格納が遅れた状況で、右側のＫＶＳ  ＣｌｉｅｎｔがＰＵＴを試みた場合、右側のＫＶＳ  Ｃｌｉｅｎｔは、ＧＥＴとして、ＫＶＳ−１及びＫＶＳ−２から、Ｖｅｒｓｉｏｎがｖ３のＫＶペアが取得する。さらに、右側のＫＶＳ  Ｃｌｉｅｎｔは、ＫＶＳ−３から、Ｖｅｒｓｉｏｎｖ２のＫＶペアを取得する。このとき、右側のＫＶＳ  Ｃｌｉｅｎｔは、Ｑｕｏｒｕｍの判定に基づいて、有効なＫＶペアとしてＶｅｒｓｉｏｎのｖ３のＫＶペアを採用する。
【００２９】
続いて、右側のＫＶＳ  Ｃｌｉｅｎｔは、ＫＶペアのＶｅｒｓｉｏｎをｖ４として新たなＫＶペアを作成し、ＫＶＳへの格納を試みる。この場合、全てのＫＶＳにおいて、ｖ４のＫＶペアが、格納済みのＫＶペアのＶｅｒｓｉｏｎ（ｖ３）を上回る。そのため、右側のＫＶＳ  Ｃｌｉｅｎｔの格納は、成功する。
【００３０】
この状態で、左側のＫＶＳ  ＣｌｉｅｎｔからのＫＶＳ−３にＫＶペアの格納（ＰＵＴ）がＫＶＳ−３に到着するすると、ＫＶＳ−３は、既に、Ｖｅｒｓｉｏｎがｖ４のＫＶペアが格納しているため、左側のＫＶＳ  ＣｌｉｅｎｔからのＫＶペアは、格納されない。ただし、ＫＶＳ−３は、左側のＫＶＳ  Ｃｌｉｅｎｔに、「格納成功」を返す。そのため、左側のＫＶＳ  ＣｌｉｅｎｔのＰＵＴは、成功となる。
【００３１】
［ＫＶＳの基本動作］
次に、図面を参照して、分散ＫＶＳの基本動作を説明する。
【００３２】
図１８ないし図２０は、あるＫＶＳ  ＣｌｉｅｎｔにおけるＫＶペアのＰＵＴの各タイミングにおいて、他のＫＶＳ  Ｃｌｉｅｎｔが、ＧＥＴを行ったときに取得されるＫＶペアについての一連の状態変化を示した図である。
【００３３】
つまり、図１８から図２０は、ＰＵＴ側のＫＶＳ  Ｃｌｉｅｎｔが、ＫｅｙがＫ５であるＫＶペアを更新する様子を示している。また、各図の右側は、ＧＥＴ側のＫＶＳ  Ｃｌｉｅｎｔが、図示されたタイミングで、ＫｅｙがＫ５であるＫＶペアをＧＥＴした場合に取得するデータを示している。各ＫＶＳから取得されたＫＶペアのＶｅｒｓｉｏｎが異なる場合、ＫＶＳから取得されたＫＶペアを用いたＱｕｏｒｕｍの判定に基づいて、同じＶｅｒｓｉｏｎのＫＶペアが、有効とみなさる。
【００３４】
図１８は、初回と２回目とのＰＵＴ動作に関連する動作を示す図である。
【００３５】
図１８に示されている「ＰＵＴ［Ｋ５：Ｄａｔａ−Ａ］」は、ＰＵＴ側のＫＶＳ  Ｃｌｉｅｎｔの初回のＰＵＴを示している。
【００３６】
図１８の最も上の「ＧＥＴ［Ｋ１］⇒Ｄａｔａ−Ａ」は、この時点で、ＧＥＴ側のＫＶＳ  Ｃｌｉｅｎｔが取得するＫＶペアは、「Ｄａｔａ−Ａ」であることを示している。
【００３７】
図１８の上から２つ目の「ＧＥＴ［Ｋ１］⇒Ｄａｔａ−Ａ」は、この時点で、ｖ０のＫＶペアが２つあるので、ＧＥＴ側のＫＶＳ  Ｃｌｉｅｎｔが、Ｄａｔａ−Ａを有効と判定することを示している。
【００３８】
次の「ＧＥＴ［Ｋ１］⇒Ｄａｔａ−Ｂ」は、この時点で、ｖ１のＫＶペアが２つあるので、ＧＥＴ側のＫＶＳ  Ｃｌｉｅｎｔが、Ｄａｔａ−Ｂが有効とすることを示している。
【００３９】
図１９は、３回目から５回目のＰＵＴ動作に関連する動作を示す図である。
【００４０】
ＰＵＴ側のＫＶＳ  Ｃｌｉｅｎｔは、５回目のＰＵＴ動作を、失敗している。図１９の「×」は、格納できないことを示している。そのため、ＧＥＴ側のＫＶＳ  Ｃｌｉｅｎｔは、４回目のＰＵＴ動作の結果（Ｄａｔａ−Ｄ）を取得する。
【００４１】
図２０は、６回目と７回目とのＰＵＴ動作に関連する動作を示す図である。
【００４２】
ＰＵＴ側のＫＶＳ  Ｃｌｉｅｎｔは、６回目のＰＵＴ動作において、ＫＶＳ−３へのＰＵＴを失敗している。図２０の「×」は、格納できないことを示す。しかし、この時点で、Ｖｅｒｓｉｏｎがｖ４のＫＶペアが２つ格納済みのため、ＧＥＴ側のＫＶＳ  Ｃｌｉｅｎｔは、Ｄａｔａ−Ｆが有効であると判定する。
【先行技術文献】
【特許文献】
【００４３】
【特許文献１】特開２０１５−０６９４６１号公報
【特許文献２】国際公開第２０１３／１５３６４６号
【特許文献３】国際公開第２０１３／０１８８０８号
【発明の概要】
【発明が解決しようとする課題】
【００４４】
分散ＫＶＳは、障害耐性を実現するために、同じ内容のデータを格納するＫＶペアを複数のＫＶＳ（例えば、サーバ）に保存するレプリケーションを実行する。データ読み出し時に、Ｑｕｏｒｕｍ等の規則に基づいて複数のＫＶペアの取得を試みることで、分散ＫＶＳは、分散ＫＶＳとして要求されるデータの整合性を確保している。
【００４５】
整合性確保のために複数のデータを保存しているため、読み出される複数のＫＶペアに格納されているデータは、読み出すＫＶＳが異なっていても、同じ内容である。少なくとも、ＫＶＳに障害等がない場合は、ＫＶペアに格納されているデータは、同じ内容である。そして、整合性の確認は、ＫＶペアに付与された版数（Ｖｅｒｓｉｏｎ）を用いて確認される。つまり、整合性の確認は、ＫＶペアに格納されたデータを用いない。
【００４６】
データサイズが大きな複数のＫＶペアの取得要求は、データサイズの大きな複数のＫＶペアを読み出し、転送する動作を必要とする。この動作は、確認に用いない大きなデータ部分を含む複数のＫＶペアを読み出すため、非効率的である。データ部分に着目すると、例えば、レプリケーション数が３の場合、読み出した同じデータを格納する３つのＫＶペアの内、２つＫＶペアに格納されているデータが、廃棄されることとなる。
【００４７】
このように、特許文献１ないし３に記載の発明は、ＫＶペアの取得において効率が悪いという問題点があった。
【００４８】
本発明の目的は、上記問題点を解決し、ＫＶペアの取得性能を向上する情報処理システム、情報処理方法、及び、プログラムを提供することにある。
【課題を解決するための手段】
【００４９】
本発明の一形態における情報処理システムは、レコードを、レコードの検索用のキーと、レコードの版数及びレコードを分割した部分データとを含むバリューとの組であるキーバリューペアとして分散して保持する情報処理システムにおいて、キーバリューペアを記憶する記憶手段と、記憶手段に記憶されているキーバリューペアを基に部分データを作成する部分データ作成手段と、部分データの取得の要求を受信したときに、部分データ作成手段が作成した部分データを送信する部分データアクセス手段とを含むデータ保存装置と、データ保存装置から部分データを取得する部分データ取得手段と、データ保存装置から取得した部分データを結合してレコードを作成する部分データ分割結合手段と、取得した部分データにおいて不足している部分データがある場合に、不足している部分データをデータ保存装置から取得する再要求判定手段とを含む。
【００５０】
本発明の一形態における情報処理方法は、レコードを、レコードの検索用のキーと、レコードの版数及びレコードを分割した部分データとを含むバリューとの組であるキーバリューペアとして分散して保持する情報処理システムにおいて、データ保存装置が、キーバリューペアを記憶し、記憶されているキーバリューペアを基に部分データを作成し、部分データの取得の要求を受信したときに、作成した部分データを送信し、データ処理装置が、データ保存装置から部分データを取得し、データ保存装置から取得した部分データを結合してレコードを作成し、取得した部分データにおいて不足している部分データがある場合に、不足している部分データをデータ保存装置から取得する。
【００５１】
本発明の一形態におけるプログラムは、レコードを、レコードの検索用のキーと、レコードの版数及びレコードを分割した部分データとを含むバリューとの組であるキーバリューペアとして分散して保持する情報処理システムにおいて、第１のコンピュータに、キーバリューペアを記憶する処理と、記憶されているキーバリューペアを基に部分データを作成する処理と、部分データの取得の要求を受信したときに、作成した部分データを送信する処理とを実行させ、第２のコンピュータに、第１のコンピュータから部分データを取得する処理と、第１のコンピュータから取得した部分データを結合してレコードを作成する処理と、取得した部分データにおいて不足している部分データがある場合に、不足している部分データを第１のコンピュータから取得する処理とを実行させる。
【発明の効果】
【００５２】
本発明に基づけば、ＫＶペアの取得性能を向上するとの効果を奏することができる。
【図面の簡単な説明】
【００５３】
【図１】図１は、本発明における第１の実施形態に係る情報処理システムの構成の一例を示すブロック図である。
【図２】図２は、第１の実施形態の動作の概要を示した図である。
【図３】図３は、第１の実施形態において、ＫＶペアの取得の動作を模式的に示した図である。
【図４】図４は、第１の実施形態に係るＫＶＳ  Ｃｌｉｅｎｔの動作の一例を示すフローチャートである。
【図５】図５は、第１の実施形態における取得要求を模式的に示す図である。
【図６】図６は、一般的なＫＶＳシステムにおける動作を模式的に示す図である。
【図７】図７は、第１の実施形態に係るＫＶＳの動作の一例を示すフローチャートである。
【図８】図８は、第１の実施形態に係るデータ格納動作の一例を示すフローチャートである。
【図９】図９は、第２の実施形態に係るＤＢＭＳの構成の一例を示すブロック図である。
【図１０】図１０は、第２の実施形態の変形例を説明するための図である。
【図１１】図１１は、本発明における実施形態の概要の構成の一例を示すブロック図である。
【図１２】図１２は、本発明のおける実施形態のハードウェア構成の一例を示すブロック図である。
【図１３】図１３は、ＫＶペアの一例を示す図である。
【図１４】図１４は、初回のＰＵＴを示す図である。
【図１５】図１５は、２回目以降のＰＵＴを示す図である。
【図１６】図１６は、ＰＵＴの競合を示す図である。
【図１７】図１７は、ＰＵＴの遅れを示す図である。
【図１８】図１８は、初回と２回目とのＰＵＴ動作に関連する動作を示す図である。
【図１９】図１９は、３回目から５回目のＰＵＴ動作に関連する動作を示す図である。
【図２０】図２０は、６回目と７回目とのＰＵＴ動作に関連する動作を示す図である。
【発明を実施するための形態】
【００５４】
次に、本発明の実施形態について図面を参照して説明する。
【００５５】
なお、各図面は、本発明の実施形態を説明するためのものである。ただし、本発明は、各図面の記載に限られるわけではない。また、各図面の同様の構成には、同じ番号を付し、その繰り返しの説明を、省略する場合がある。また、以下の説明に用いる図面において、本発明の説明に関係しない部分の構成については、記載を省略し、図示しない場合もある。また、図面中の矢印の方向は、一例を示すものであり、ブロック間の信号の向きを限定するものではない。
【００５６】
なお、本発明における実施形態に係る情報処理システムは、各種のシステムに適用可能である。以下では、システムの一例として、分散ＫＶＳを用いたシステムを参照して説明する。ただし、これは、本発明を分散ＫＶＳに限定するものではない。
【００５７】
＜第１の実施形態＞
以下、図面を参照して、第１の実施形態について説明する。
【００５８】
［構成の説明］
本発明における第１の実形態の構成について、図面を参照して説明する。
【００５９】
図１は、本発明における第１の実施形態に係る情報処理システム１０の構成の一例を示す。情報処理システム１０は、ＫＶＳ  Ｃｌｉｅｎｔ１００と、ＫＶＳ２００と含み、分散ＫＶＳを構成している。
【００６０】
なお、以下の説明に用いるＫＶＳ２００は、詳細には、サーバなどを用いて実現されている複数のＫＶＳ２００を含むシステムである。ただし、各ＫＶＳ２００は、同様に動作する。そのため、以下の説明において、特に区別の必要がない場合、単独のＫＶＳ２００、及び、複数のＫＶＳ２００を含むＫＶＳ２００全体の場合を合わせて、ＫＶＳ２００として説明する。
【００６１】
ＫＶＳ  Ｃｌｉｅｎｔ１００は、ユーザアクセスインタフェース１１０と、Ｖｅｒｓｉｏｎ確認装置１２０と、ＫＶペア作成装置１３０と、ＫＶＳアクセス装置１４０とを含む。さらに、ＫＶＳ  Ｃｌｉｅｎｔ１００は、部分データ分割結合装置１５０と、再要求判定装置１６０と、部分データ取得装置１７０とを含む。
【００６２】
ＫＶＳ２００は、アクセスインタフェース２１０と、ＫＶペアアクセス装置２２０と、ストレージ２３０とを含む。さらに、ＫＶＳ２００は、部分データアクセスインタフェース２４０と、部分データＫＶペア作成装置２５０とを含む。
【００６３】
ユーザアクセスインタフェース１１０は、図示しないクライアント（Ｃｌｉｅｎｔ）の装置から、レコード及びレコードの操作に関する指示を受信する。ここで、「レコード」とは、ＫＶＳ２００に分散して保存されるデータである。レコードは、後ほど説明するように、部分データに分割される。以下、Ｃｌｉｅｎｔの装置を単に「Ｃｌｉｅｎｔ」と呼ぶ。また、ユーザアクセスインタフェース１１０は、Ｃｌｉｅｎｔにレコードを送信する。さらに、ユーザアクセスインタフェース１１０は、部分データ分割結合装置１５０に対しても、同様に動作する。
【００６４】
Ｖｅｒｓｉｏｎ確認装置１２０は、データ（Ｄａｔａ）を格納するＫＶペアの版数（Ｖｅｒｓｉｏｎ）を確認する。
【００６５】
ＫＶペア作成装置１３０は、レコードのキー（Ｋｅｙ）と、Ｄａｔａ及びＶｅｒｓｉｏｎを含むバリュー部（Ｖａｌｕｅ部）との組であるキーバリューペア（ＫＶペア）を作成する。
【００６６】
ＫＶＳアクセス装置１４０は、ＫＶペアをＫＶＳ２００に送信し、ＫＶＳ２００からＫＶペアを取得する。
【００６７】
アクセスインタフェース２１０は、ＫＶＳ  Ｃｌｉｅｎｔ１００からＫＶペアを受信し、ＫＶペアをＫＶＳ  Ｃｌｉｅｎｔ１００に送信する。
【００６８】
ストレージ２３０は、ＫＶペアを記憶（保存）する。
【００６９】
ＫＶペアアクセス装置２２０は、アクセスインタフェース２１０が受信したＫＶペアをストレージ２３０に保存し、ストレージ２３０から読みだしたＫＶペアをアクセスインタフェース２１０に送信する。また、ＫＶペアアクセス装置２２０は、ＫＶペアを部分データＫＶペア作成装置２５０に送信する。
【００７０】
Ｖｅｒｓｉｏｎ確認装置１２０、ＫＶペア作成装置１３０、及び、ＫＶＳアクセス装置１４０は、一般的なＫＶＳに用いられる構成と同様のため、その詳細な説明を省略する。また、ユーザアクセスインタフェース１１０は、部分データ分割結合装置１５０に対しての動作を除き、一般的なＫＶＳに用いられる構成と同様のため、その詳細な説明を省略する。
【００７１】
同様に、アクセスインタフェース２１０、及び、ストレージ２３０は、一般的なＫＶＳに用いられる構成と同様のため、その詳細な説明を省略する。また、ＫＶペアアクセス装置２２０、部分データＫＶペア作成装置２５０に対する動作を除き、一般的なＫＶＳに用いられる構成と同様のため、その詳細な説明を省略する。
【００７２】
以下、本実施形態に特有に構成について説明する。
【００７３】
部分データ分割結合装置１５０は、Ｖａｌｕｅ部のユーザデータの分割及び結合を行う。
【００７４】
「分割」とは、Ｃｌｉｅｎｔから受信したレコードを、ＫＶペアに格納するときに複数のデータに分けることである。以下、分けられた各データを、「部分データ」と呼ぶ。なお、部分データは、後ほど説明するように、Ｃｌｉｅｎｔに返却するときに結合される。つまり、「分割」は、ＫＶＳ２００からＫＶペアとして部分データを取り出して、Ｃｌｉｅｎｔに返却するために結合できるように、レコードを部分データに分けることである。
【００７５】
「結合」とは、ＫＶＳ２００から取得したＫＶペアに含まれる部分データを結合して、本来のＣｌｉｅｎｔのデータに戻すことである。
【００７６】
なお、部分データ分割結合装置１５０は、「分割」において、ＫＶペアに格納するデータの種別（型）に依存しないように、分割を実行する。例えば、ＫＶペアのＶａｌｕｅ部がＢｙｔｅ配列などの汎用的な型で実現される分散ＫＶＳにおいて、部分データ分割結合装置１５０は、ＫＶペアの作成におけるデータ部分の取り出しにおいて、配列の一部分を取り出せばよい。このように、ＫＶペアを作成する場合に、データを分割する必要がない場合がある。そのような場合、部分データ分割結合装置１５０は、「分割」機能を含まなくてもよい。例えば、部分データ分割結合装置１５０は、分割に代えて、抽出機能を含んでもよい。
【００７７】
再要求判定装置１６０は、不足している部分データを判断して、ＫＶＳ２００に不足している部分データを要求する。本実施形態は、ユーザデータの一部を分割した部分データを用いている。そのため、一般的な分散ＫＶＳにけるＱｕｏｒｕｍ判定だけでは、データの復元は、保証されない。しかし、本実施形態の情報処理システム１０は、再要求判定装置１６０を含む。そして、再要求判定装置１６０が、後ほど説明する動作を基に、部分データを用いている場合におけるデータの復元を保証する。
【００７８】
部分データ取得装置１７０は、指定されたＫｅｙにおいて、指定した部分データを格納したＫＶペアの取得を、ＫＶＳ２００に要求する。
【００７９】
部分データアクセスインタフェース２４０は、ＫＶＳ  Ｃｌｉｅｎｔ１００の部分データ取得装置１７０の要求を受けつけるインターフェースである。
【００８０】
部分データＫＶペア作成装置２５０は、指定されたＫｅｙのＫＶペアにおける指定される部分データを取り出し、新たなＫＶペアを作成する。
【００８１】
図２は、第１の実施形態の動作の概要を示した図である。図２は、情報処理システム１０に対するクライアント（Ｃｌｉｅｎｔ）として、２つのＣｌｉｅｎｔを示している。図２の上部のＣｌｉｅｎｔは、図２の上部のＫＶＳ  Ｃｌｉｅｎｔ１００に、データの取り出し（ＧＥＴ）を依頼している。また、図２の下部のＣｌｉｅｎｔは、図２の下部のＫＶＳ  Ｃｌｉｅｎｔ１００にデータの格納（Ｉｎｓｅｒｔ）を依頼している。図２に示されている動作は、後ほど詳細に説明する。以下、ここでは、概要を説明する。
【００８２】
図２において、上部のＫＶＳ  Ｃｌｉｅｎｔ１００における「Ｇｅｔ  Ｋ１  Ｄａｔａ」は、上部のＣｌｉｅｎｔから受信したＫｅｙがＫ１であるデータ（ＫＶペアのＶａｌｕｅ部に格納された情報）の取得要求を表している。
【００８３】
図２において、上部のＫＶＳ  Ｃｌｉｅｎｔ１００における「Ｃｈｅｃｋ  ＫＶＰａｉｒ  Ｖｅｒｓｉｏｎ」は、Ｑｕｏｒｕｍ制御等に基づく整合性確保におけるＫＶペアのＶｅｒｓｉｏｎの確認（バージョンチェック）を行うことを表している。
【００８４】
図２において、上部のＫＶＳ  Ｃｌｉｅｎｔ１００における「Ｋ１  Ｄａｔａ（ｖ５）」は、取得した部分データを結合し、元の情報を復元することを表している。
【００８５】
図２において、下部のＫＶＳ  Ｃｌｉｅｎｔ１００におけるの「Ｉｎｓｅｒｔ  Ｋ２  Ｄａｔａ」は、下部のＣｌｉｅｎｔから受信したＫｅｙがＫ２であるデータの新規格納要求を表している。
【００８６】
図２において、下部のＫＶＳ  Ｃｌｉｅｎｔ１００における「Ｇｅｔ  Ｋ２  Ｖｅｒｓｉｏｎ」は、これから格納するデータであるＫｅｙがＫ２であるＫＶペアが存在しないことを確認することを表している。Ｖｅｒｓｉｏｎが取得できる場合は、既にＫ２をＫｅｙとするＫＶペアが存在することを示している。この場合、これから行う予定であるＫ２データの格納は、失敗となる。したがって、この動作においては、「ＫＶペアが存在しないことに基づいてＶｅｒｓｉｏｎが取得できないこと」が、望まれている結果である。
【００８７】
図２において、下部のＫＶＳ  Ｃｌｉｅｎｔ１００における「Ｃｒｅａｔｅ  ｄｉｖｉｄｅｄ  ＫＶｐａｉｒ」は、ユーザデータ（Ｖａｌｕｅ部）を分割する処理である。
【００８８】
図２において、下部のＫＶＳ  Ｃｌｉｅｎｔ１００における「Ｋ２  Ｄａｔａ」は、ユーザデータを分割し、部分データとしてＫＶペアに格納することを表している。図２において、データは、「ｄａｔａ１」及び「ｄａｔａ２」の２つの部分データに分割されている。
【００８９】
図２において、ＫＶＳ２００は、実際にＫＶペアが格納されるＫＶＳ（例えば、サーバ群）を表している。なお、今の場合、ＫＶペアのレプリケーション数を３としている。そのため、３つの異なるＫＶＳ２００（ＫＶＳ−１ないし３）は、それぞれ、同一のＫＶペアを１つずつ格納する。
【００９０】
図３は、第１の実施形態において、ＫＶＳ  Ｃｌｉｅｎｔ１００が、ＫＶＳ２００（例えば、各サーバ）に対して、ＫＶペアを取得する動作を模式的に示した図である。
【００９１】
図３の上側のＫＶＳ  Ｃｌｉｅｎｔ１００は、ＫＶペアを取得する場合を示している。
【００９２】
これに対し、図３の下側のＫＶＳ  Ｃｌｉｅｎｔ１００は、ＫＶペアの一部（部分データ）を取得する場合を示している。下側のＫＶＳ  Ｃｌｉｅｎｔ１００は、Ｋｅｙと部分データの位置（以下、「Ｐａｒｔ」とする）とを指定して、ＫＶＳ２００（例えば、各サーバ）にＫＶペアを要求する。
【００９３】
要求を受けた個々のＫＶＳ２００の部分データＫＶペア作成装置２５０は、指定されたＫｅｙのＫＶペアのＶａｌｕｅ部から、指定されたＰａｒｔの部分データを抽出して、新たなＫＶペアを作成する。そして、ＫＶＳ２００の部分データアクセスインタフェース２４０は、作成したＫＶペアを、ＫＶＳ  Ｃｌｉｅｎｔ１００に返却する。
【００９４】
［データ取り出し］
本実施形態のデータの取り出し動作について、図２及び図３を参照して説明する。なお、以下の説明において、適宜、図４ないし図７を参照する。
【００９５】
まず、ＫＶＳ  Ｃｌｉｅｎｔ１００の動作を説明する。
【００９６】
図４は、ＫＶＳ  Ｃｌｉｅｎｔ１００の動作の一例を示すフローチャートである。
【００９７】
図２における上部のＫＶＳ  Ｃｌｉｅｎｔ１００は、上部のＣｌｉｅｎｔから、Ｋ１データを取得するためのＧＥＴ要求（Ｇｅｔ  Ｋ１  Ｄａｔａ）を取得する（ステップＳ１０１）。
【００９８】
要求を受け付けたＫＶＳ  Ｃｌｉｅｎｔ１００は、ＫＶＳ２００に対して、ＫｅｙがＫ１であるＫＶペアの取得要求（Ｇｅｔ  Ｋ１  ＫＶｐａｒｉ）を実行する。このとき、ＫＶＳ  Ｃｌｉｅｎｔ１００は、各ＫＶＳ２００に対する取得要求として、図３に示されている部分データの要求を用いる。つまり、ＫＶＳ  Ｃｌｉｅｎｔ１００は、各ＫＶＳ２００に対して、それぞれ、異なる部分データ（図２のＧｅｔ  Ｋ１−１、Ｇｅｔ  Ｋ１−２、及び、Ｇｅｔ  Ｋ１−３）を要求する（ステップＳ１０２）。
【００９９】
このように、本実施形態のＫＶＳ  Ｃｌｉｅｎｔ１００は、ＫＶペアの取得要求を、部分データの粒度で実行する。そのため、本実施形態のＫＶＳ  Ｃｌｉｅｎｔ１００は、各ＫＶＳ２００に対して、複数の取得要求を実行できる。
【０１００】
図５は、第１の実施形態における取得要求を模式的に示す図である。
【０１０１】
ＫＶＳ  Ｃｌｉｅｎｔ１００は、複数の取得要求を実行することで、並列度を上げることができる。そのため、本実施形態は、ＫＶペアの取得において、性能改善を実現できる。
【０１０２】
なお、参考として、一般的なＫＶＳシステムの動作を示す。
【０１０３】
図６は、一般的なＫＶＳシステムにおける動作を模式的に示す図である。一般的なＫＶＳシステムにおける動作は、ＫＶペアの粒度で、取得要求を実行する。そのため、一般的なＫＶＳシステムでは、同じＫＶＳ２００に対して複数の取得要求を実行しても、並列度を上げることができなかった。
【０１０４】
ここで、図面を参照して、ＫＶＳ２００の動作を説明する。
【０１０５】
図７は、第１の実施形態に係るＫＶＳ２００の動作の一例を示すフローチャートである。具体的には、図７は、部分データＫＶペア作成装置２５０の動作である。
【０１０６】
各ＫＶＳ２００（図２のＫＶＳ−１、ＫＶＳ−２、及び、ＫＶＳ−３）は、取得要求を受け付ける（ステップＳ２０１）。具体的には、部分データＫＶペア作成装置２５０は、部分データアクセスインタフェース２４０を介して、ＫＶペアの取得要求を受信する。
【０１０７】
取得要求を受け付けたＫＶＳ２００は、ＫｅｙをＫ１とするＫＶペアを、自身が使用しているストレージ２３０から取り出す（ステップＳ２０２）。
【０１０８】
続いて、ＫＶＳ２００は、取り出したＫＶペアのＶａｌｕｅ部から、要求された部分データを抽出する（ステップＳ２０３）。
【０１０９】
そして、ＫＶＳ２００は、部分データをＶａｌｕｅ部に持つ新なＫＶペア、つまり、部分データのＫＶペアを作成する（ステップＳ２０４）。ただし、ここで作成されるＫＶペアは、図３において示されているように、ＫｅｙとＶｅｒｓｉｏｎが、元のＫＶペアと同じ値を持つ。
【０１１０】
そして、ＫＶＳ２００は、作成したＫＶペアを、ＫＶＳ  Ｃｌｉｅｎｔ１００に返却する（ステップＳ２０５）。具体的には、部分データＫＶペア作成装置２５０は、部分データアクセスインタフェース２４０を介して、ＫＶペアを返却する。
【０１１１】
図４を参照したＫＶＳ  Ｃｌｉｅｎｔ１００の動作の説明に戻る。
【０１１２】
ＫＶＳ  Ｃｌｉｅｎｔ１００は、順次、各ＫＶＳ２００から応答（ＫＶペア）を受け取る。
【０１１３】
通常、ＫＶＳ  Ｃｌｉｅｎｔ１００は、取得を要求したＫＶＳ２００から応答を受信できる。しかし、障害等のため、応答しないＫＶＳ２００が、存在している場合も想定される。
【０１１４】
そこで、ＫＶＳ  Ｃｌｉｅｎｔ１００は、取得が成功したか否かを判定する（ステップＳ１０３）。具体的には、ＫＶＳ  Ｃｌｉｅｎｔ１００は、この判定として、一般的なＱｕｏｒｕｍ制御等と同様に判定を用いればよい。例えば、レプリケーション数が３とすると、ＫＶＳ  Ｃｌｉｅｎｔ１００は、２つ以上のＫＶＳ２００から応答があった場合に、取得成功を判断する（ステップＳ１０３でＹｅｓ）。一方、ＫＶＳ  Ｃｌｉｅｎｔ１００は、それ以外の場合、つまり、１つのＫＶＳ２００から取得、又は、いずれのＫＶＳ２００からも取得できない場合、取得の失敗と判定する（ステップＳ１０３でＮｏ）。この場合（ステップＳ１０３でＮｏ）、ＫＶＳ  Ｃｌｉｅｎｔ１００は、Ｃｌｉｅｎｔに、失敗（エラー）を返却して、動作を終了する。
【０１１５】
ＫＶペアの取得要求に成功した場合（ステップＳ１０３でＹｅｓ）、ＫＶＳ  Ｃｌｉｅｎｔ１００は、取得したＫＶペアの版数（例えば、図３のＶａｌｕｅ部のＶｅｒｓｉｏｎ）を確認する（ステップＳ１０４）。具体的には、ＫＶＳ  Ｃｌｉｅｎｔ１００は、図２の「Ｃｈｅｃｋ  ＫＶｐａｉｒ  Ｖｅｒｓｉｏｎ」を実行する。例えば、レプリケーション数が、３とすると、ＫＶＳ  Ｃｌｉｅｎｔ１００は、２つ以上のＫＶペアにおけるＶｅｒｓｉｏｎが一致した場合に、成功と判定する。
【０１１６】
一致しない場合（ステップＳ１０４でＮｏ）、ＫＶＳ  Ｃｌｉｅｎｔ１００は、ＫＶペアを破棄し、Ｃｌｉｅｎｔに、失敗（エラー）して返却し、動作を終了する。
【０１１７】
なお、ステップＳ１０４の判定においてＫＶペアにおけるＶｅｒｓｉｏｎが一致しない場合として、ＫＶペアの挿入及び更新等において、何らかの障害が発生した場合であることが想定される。ただし、この状態の場合は、更新途中の場合の可能性もある。しかし、本実施形態は、ＫＶペアの取得として、上記の障害（エラー）と同様の扱いとし、Ｃｌｉｅｎｔに失敗（エラー）を返却する。
【０１１８】
この時点において、ＫＶＳ  Ｃｌｉｅｎｔ１００は、ＫＶペアの取得し、Ｃｌｉｅｎｔに返却するデータを保持している。しかし、本実施形態は、部分データを要求している。そのため、例えば、一部のＫＶＳ２００が応答しなかった場合、ＫＶＳ  Ｃｌｉｅｎｔ１００は、そのＫＶＳ２００に要求した部分データ（ＫＶペア）を取得できていない。したがって、ＫＶＳ  Ｃｌｉｅｎｔ１００は、全ての部分データの取得を確認する必要がある。
【０１１９】
そこで、Ｖｅｒｓｉｏｎが一致した場合（ステップＳ１０４でＹｅｓ）、ＫＶＳ  Ｃｌｉｅｎｔ１００の再要求判定装置１６０は、全ての部分データを取得しているか否かを確認する（ステップＳ１０５）。
【０１２０】
取得できていない部分データがある場合（ステップ１０５でＮｏ）、ＫＶＳ  Ｃｌｉｅｎｔ１００の再要求判定装置１６０は、取得できなかった部分データを取得する（ステップＳ１０６）。具体的には、再要求判定装置１６０は、部分データ取得装置１７０を介して、部分データの取得を成功したＫＶＳ２００に対して、取得できなかった部分データの取得要求を実行する。このときの取得要求を送信するＫＶＳ２００は、ステップＳ１０２において部分データの取得を成功したＫＶＳ２００のいずれでもよい。ＫＶＳ  Ｃｌｉｅｎｔ１００は、所定の手法を用いて、ＫＶＳ２００を選択すればよい。
【０１２１】
ＫＶＳ  Ｃｌｉｅｎｔ１００は、ステップＳ１０６における要求に対して、部分データを取得できたか否かを判定する（ステップＳ１０７）。
【０１２２】
取得できない場合（ステップＳ１０７でＮｏ）、ＫＶＳ  Ｃｌｉｅｎｔ１００は、Ｃｌｉｅｎｔに失敗（エラー）を返却し、動作を終了する。なお、ＫＶＳ  Ｃｌｉｅｎｔ１００は、取得できない場合に、他のＫＶＳ２００に対する取得のリトライを実行してもよい。
【０１２３】
部分データを取得できた場合（ステップＳ１０７でＹｅｓ）、ＫＶＳ  Ｃｌｉｅｎｔ１００は、取得できた部分データを含めてＫＶペアのＶｅｒｓｉｏｎが一致を確認する（ステップＳ１０８）。
【０１２４】
Ｖｅｒｓｉｏｎが一致しないＫＶペアがある場合（ステップＳ１０８でＮｏ）、ＫＶＳ  Ｃｌｉｅｎｔ１００は、取得に失敗したものとして、Ｃｌｉｅｎｔに失敗（エラー）を返し、動作を終了する。
【０１２５】
そして、ＫＶＳ  Ｃｌｉｅｎｔ１００は、ＫＶペアの全ての部分データを取得した場合、次のように動作する。なお、部分データを取得した場合とは、まず、最初の部分データの取得においてＶｅｒｓｉｏｎが一致した全ての部分データを取得できていた場合（ステップＳ１０５でＹｅｓ）である。さらに、この場合とは、再取得した部分データを含めＶｅｒｓｉｏｎが一致した場合（ステップＳ１０８でＹｅｓ）である。
【０１２６】
ＫＶＳ  Ｃｌｉｅｎｔ１００は、各ＫＶペアから部分データを取り出す（ステップＳ１０９）。
【０１２７】
そして、ＫＶＳ  Ｃｌｉｅｎｔ１００は、取り出したデータを結合して、Ｋ１  Ｄａｔａを復元する（ステップＳ１１０）。
【０１２８】
ＫＶＳ  Ｃｌｉｅｎｔ１００は、復元したＫ１  ＤａｔａをＣｌｉｅｎｔに返却し、動作を終了する。
【０１２９】
［データ格納］
次に、図２及び図８を参照して、情報処理システム１０におけるデータを格納する動作について説明する。
【０１３０】
図８は、第１の実施形態に係るデータ格納動作の一例を示すフローチャートである。
【０１３１】
図２の下部に示されているＫＶＳ  Ｃｌｉｅｎｔ１００は、下部のＣｌｉｅｎｔから、Ｋ２データを格納するためのＩｎｓｅｒｔ（Ｉｎｓｅｒｔ  Ｋ２  Ｄａｔａ）を受信するする（ステップＳ３０１）。
【０１３２】
下部のＫＶＳ  Ｃｌｉｅｎｔ１００は、ＫｅｙがＫ２であるＫＶペアの存在を確認するために、ＫＶＳ２００に、ＫＶペアの取得要求（Ｇｅｔ  Ｋ２  Ｖｅｒｓｉｏｎ）を実行する（ステップＳ３０２）。
【０１３３】
ＫＶペアを取得できた場合（ステップＳ３０３でＹｅｓ）、ＫＶＳ  Ｃｌｉｅｎｔ１００は、格納が失敗として、Ｃｌｉｅｎｔに失敗（エラー）を返却して、動作を終了する。
【０１３４】
ＫＶペアが取得できなかった場合（ステップＳ３０３のＮｏ）、ＫＶＳ  Ｃｌｉｅｎｔ１００は、部分データを要求できるような形式に、Ｋ２  Ｄａｔａを分割する（ステップＳ３０４）。
【０１３５】
そして、ＫＶＳ  Ｃｌｉｅｎｔ１００は、ＫＶペアのＶａｌｕｅ部にデータを格納する（ステップＳ３０５）。
【０１３６】
そして、ＫＶＳ  Ｃｌｉｅｎｔ１００は、ＫＶペアを、ＫＶＳ２００にＰＵＴする（ステップＳ３０６）。例えば、レプリケーション数が３である場合、ＫＶＳ  Ｃｌｉｅｎｔ１００は、異なる３か所のＫＶＳ２００に、同じＫＶペアを、１つずつＰＵＴする。
【０１３７】
ＫＶＳ  Ｃｌｉｅｎｔ１００は、レプリケーション数に基づいて決まる一定個数以上のＫＶＳ２００にＰＵＴが成功した場合、Ｃｌｉｅｎｔに成功を返却し、動作を終了する（ステップＳ３０７）。例えば、レプリケーション数が３の場合、ＫＶＳ  Ｃｌｉｅｎｔ１００は、２か所以上のＫＶＳ２００に対してＰＵＴを成功した場合に、Ｃｌｉｅｎｔに成功を返却する。
【０１３８】
［効果の説明］
第１の本実施形態の効果について説明する。
【０１３９】
第１の実施形態に係る情報処理システム１０は、ＫＶペアの取得性能を向上するとの効果を奏する。
【０１４０】
その理由は、次のとおりである。
【０１４１】
ＫＶＳ２００は、分散ＫＶＳとして、必要なデータを分散して保持する。
【０１４２】
さらに、ＫＶＳ  Ｃｌｉｅｎｔ１００の部分データ分割結合装置１５０は、データを部分データに分割して、ＫＶＳ２００に保存する。そして、ＫＶＳ  Ｃｌｉｅｎｔ１００の部分データ分割結合装置１５０は、ＫＶＳ２００から、部分データを並列に取得する。
【０１４３】
これに対応して、ＫＶＳ２００の部分データアクセスインタフェース２４０が、部分データの取得を受け付ける。さらに、部分データＫＶペア作成装置２５０は、要求された部分データのＫＶペアを作成する。
【０１４４】
そのため、データサイズが大きいＫＶペア（Ｖａｌｕｅ部が大きいＫＶペア）の場合でも、ＫＶＳ  Ｃｌｉｅｎｔ１００は、ＫＶペアの取得性能を向上できる。
【０１４５】
例えば、ＫＶＳ  Ｃｌｉｅｎｔ１００は、部分データを用いているため、ＫＶペアの取得における並列度を調整できる。そのため、ＫＶＳ  Ｃｌｉｅｎｔ１００は、ＫＶペアにおけるデータサイズの増大に伴う取得動作のターンアラウンドタイム（ＴＡＴ：Ｔｕｒｎ  Ａｒｏｕｎｄ  Ｔｉｍｅ）の増加を抑制できる。
【０１４６】
さらに、再要求判定装置１６０が、結合において不足した部分データを判定し、部分データ取得装置１７０を介して、部分データを取得する。
【０１４７】
そのため、ＫＶＳ  Ｃｌｉｅｎｔ１００は、取得した部分データの整合性を確保できている。
【０１４８】
つまり、ＫＶＳ  Ｃｌｉｅｎｔ１００は、データの整合性を維持しつつ、データサイズに依存しにくい応答を実現している。
【０１４９】
＜第２の実施形態＞
次に、本発明を、データベース管理システム（ＤＢＭＳ：Ｄａｔａ  Ｂａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ）に適用した場合を、第２の実施形態として説明する。
【０１５０】
［構成の説明］
第２の実施形態は、上記のように、ＤＢＭＳを用いている。そのため、以下の説明において、第２の実施形態に係る情報処理システム１０は、ＤＢＭＳ２０として説明する。ＫＶＳ  Ｃｌｉｅｎｔ１００は、ＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）を受信するＳＱＬ  エンジン（Ｅｎｇｉｎｅ）として動作する。そのため、ＫＶＳ  Ｃｌｉｅｎｔ１００は、ＳＱＬ  Ｅｎｇｉｎｅ１０１として説明する。また、以下の説明において、ＫＶＳ２００は、説明の便宜のため、記憶（Ｓｔｏｒａｇｅ）装置を用いて説明する。そのため、ＫＶＳ２００は、Ｓｔｏｒａｇｅ２０１として説明する。なお、ＤＢＭＳ２０は、複数のＳｔｏｒａｇｅ２０１（ＫＶＳ２００）を含み、分散ＫＶＳを実現している。
【０１５１】
図９は、第２の実施形態に係るＤＢＭＳ２０の構成の一例を示すブロック図である。ＤＢＭＳ２０は、ＳＱＬ  Ｅｎｇｉｎｅ１０１と、Ｓｔｏｒａｇｅ２０１と、Ｔｒａｎｓａｃｔｉｏｎ  Ｅｎｇｉｎｅ３０１とを含む。
【０１５２】
ＳＱＬ  Ｅｎｇｉｎｅ１０１は、クライアント（Ｃｌｉｅｎｔ）が発行したＳＱＬを解釈し、実行プランを作成し、必要なデータを取得及び更新イメージ作成するなどの動作を実行する。
【０１５３】
Ｔｒａｎｓａｃｔｉｏｎ  Ｅｎｇｉｎｅ３０１は、ＳＱＬ  Ｅｎｇｉｎｅ１０１で作成された更新イメージの適用が可能であるか否かを確認する。そして、Ｔｒａｎｓａｃｔｉｏｎ  Ｅｎｇｉｎｅ３０１は、適用可能であればトランザクション成功として更新イメージを受け付ける。なお、Ｃｌｉｅｎｔには、この時点で、ＳＱＬが成功したことが通知される。その後、Ｔｒａｎｓａｃｔｉｏｎ  Ｅｎｇｉｎｅ３０１は、データ（レコード）の永続化を目的として、Ｓｔｏｒａｇｅ２０１に、更新イメージを反映する。このように、Ｔｒａｎｓａｃｔｉｏｎ  Ｅｎｇｉｎｅ３０１は、ＤＢＭＳ２０としての機能を実現している。
【０１５４】
Ｓｔｏｒａｇｅ２０１は、ＫＶＳ２００と同様に、データを保存する。Ｓｔｏｒａｇｅ２０１に保存される全てのデータは、ＫＶペアの形式で扱われる。そして、これらのデータは、第１の実施形態と同様に、Ｑｕｏｒｕｍ制御及びＫＶペアのＶｅｒｓｉｏｎ比較に基づいて、データを分散保存することに伴うデータの不整合を回避されている。
【０１５５】
Ｓｔｏｒａｇｅ２０１に対するＫＶペアの取得要求は、一般的なＤＢＭＳと同様の要求に限られず、図２に示されるようなＶａｌｕｅ部に格納されたデータの一部を取得する取得要求でもよい。データの一部を取得する取得要求の場合、要求者への返却値は、ＫＶペアである。ただし、Ｋｅｙ及びＶｅｒｓｉｏｎは、元のＫＶペアと同一のＶａｌｕｅ部に対して要求された部分データを持つ。このとき、Ｓｔｏｒａｇｅ２０１が、このデータの抽出、及び、新たなＫＶペアの作成を実行する。
【０１５６】
［動作の説明］
次に第２の実施形態に係る動作について説明する。
【０１５７】
［参照動作］
図９における右側のＣｌｉｅｎｔと右側のＳＱＬ  Ｅｎｇｉｎｅ１０１とを用いて、参照の動作について説明する。
【０１５８】
図９の右側のＣｌｉｅｎｔが、Ｃｌｉｅｎｔから、ＳＱＬのＳｅｌｅｃｔ（参照）の要求文を受信する。
【０１５９】
Ｓｅｌｅｃｔの要求文を受け付けた右側のＳＱＬ  Ｅｎｇｉｎｅ１０１は、要求文を解釈し、Ｓｅｌｅｃｔの結果を作成するために必要となるＫ１データを格納するＫＶペアを取得するためのプランを作成する。
【０１６０】
作成したプランに基づき、右側のＳＱＬ  Ｅｎｇｉｎｅ１０１は、Ｋ１  ＫＶペアの取得を試みる。ＳＱＬ  Ｅｎｇｉｎｅ１０１は、このＫＶペアの取得として、第１の実施形態のＫＶＳ  Ｃｌｉｅｎｔ１００と同様の動作を実行する。つまり、ＳＱＬ  Ｅｎｇｉｎｅ１０１は、Ｓｔｏｒａｇｅ２０１からＫＶペアを取得する。
【０１６１】
ＳＱＬ  Ｅｎｇｉｎｅ１０１は、取得した複数のＫＶペアの情報（Ｖａｌｕｅ部）を結合してデータ（レコード）を復元し、復元したレコードをＣｌｉｅｎｔに返却するためにふさわしい形式に変換した後、Ｃｌｉｅｎｔに返却する。
【０１６２】
［挿入の動作］
図９における左側のＣｌｉｅｎｔと左側のＳＱＬ  Ｅｎｇｉｎｅ１０１とを用いて、挿入の動作について説明する。
【０１６３】
図９の左側のＣｌｉｅｎｔが、ＳＱＬのＩｎｓｅｒｔ（挿入）の要求文を受信する。
【０１６４】
Ｉｎｓｅｒｔの要求文を受け付けた左側のＳＱＬ  Ｅｎｇｉｎｅ１０１は、要求文を解釈し、Ｋ２のレコードをＫＶペアに挿入するためのプランを作成する。
【０１６５】
作成したプランに基づき、左側のＳＱＬ  Ｅｎｇｉｎｅ１０１は、Ｔｒａｎｓａｃｔｉｏｎ  Ｅｎｇｉｎｅ３０１から、Ｋ２  ＫＶペアの更新Ｌｏｇの取得を試みる。
【０１６６】
更新Ｌｏｇがある場合、ＳＱＬ  Ｅｎｇｉｎｅ１０１は、失敗として、動作を終了する。
【０１６７】
ここでは、更新Ｌｏｇはなかったとする。続いて、左側のＳＱＬ  Ｅｎｇｉｎｅ１０１は、Ｓｔｏｒａｇｅ２０１からＫ２レコードの取得を試みる。
【０１６８】
Ｋ２のＫＶペアを取得できた場合、ＳＱＬ  Ｅｎｇｉｎｅ１０１は、失敗として、動作を終了する。
【０１６９】
ここでは、対応するＫＶペアはなかったとする。この時点でＤＢＭＳ２０には、Ｋ２レコードが存在しないことが、確定する。
【０１７０】
ＳＱＬ  Ｅｎｇｉｎｅ１０１は、挿入するＫ２レコードを格納するために、第１の実施形態と同様にＫＶペアを作成する。
【０１７１】
ＳＱＬ  Ｅｎｇｉｎｅ１０１は、作成した更新イメージ（Ｋ２レコードのＫＶペア）に対して、Ｔｒａｎｓａｃｔｉｏｎ  Ｅｎｇｉｎｅ３０１におけるトランザクションとして、更新を試みる。Ｋ２レコードの挿入者が他にいなければ、そのトランザクションは、成功する。
【０１７２】
Ｔｒａｎｓａｃｔｉｏｎ  Ｅｎｇｉｎｅ３０１は、成功したトランザクションを、更新Ｌｏｇ（Ｕｐｄａｔｅｄ  Ｌｏｇ）として保管する。そして、Ｔｒａｎｓａｃｔｉｏｎ  Ｅｎｇｉｎｅ３０１は、所定のタイミングにおいて、データを永続化するため、そのデータをＳｔｏｒａｇｅ２０１に反映する。
【０１７３】
［効果の説明］
第２の実施形態は、第１の実施形態と同様の効果を奏する。
【０１７４】
その理由は、第２の実施形態に係るＤＢＭＳ２０のＳＱＬ  Ｅｎｇｉｎｅ１０１及びＳｔｏｒａｇｅ２０１が、第１の実施形態のＫＶＳ  Ｃｌｉｅｎｔ１００及びＫＶＳ２００と同様に動作するためである。
【０１７５】
［変形例］
第２の実施形態において、ＤＢＭＳ２０内のＳｔｏｒａｇｅ２０１における効率性を向上する変形例を説明する。
【０１７６】
図１０を参照して、上記の効率性の向上を説明する。
【０１７７】
図１０は、第２の実施形態の変形例を説明するための図である。
【０１７８】
ＤＢＭＳ２０のＳｔｏｒａｇｅ２０１が、次に示す条件を全て満足する分散ＫＶＳを実現している場合、ＤＢＭＳ２０は、１つの部分データを、１つのＫＶペアに収めることが可能である。
【０１７９】
条件１：Ｓｔｏｒａｇｅ２０１の外部の装置が、ＫＶペアのＶｅｒｓｉｏｎを指定する。第２の実施形態において、Ｔｒａｎｓａｃｔｉｏｎ  Ｅｎｇｉｎｅ３０１が、Ｖｅｒｓｉｏｎを指定する。そのため、第２の実施形態は、条件１を満足する。
【０１８０】
条件２：挿入及び更新を試みたＫＶペアは、最終的に確実に、Ｓｔｏｒａｇｅ２０１に反映される。例えば、第２の実施形態において、Ｔｒａｎｓａｃｔｉｏｎ  Ｅｎｇｉｎｅ３０１が、データの反映の動作において失敗が発生したときに、成功するまでリトライする場合、第２の実施形態は、第２の条件を満足する。
【０１８１】
例えば、２つのＫＶペア（以下、ＫＶ−Ｋ１とＫＶ−Ｋ２とする）が、それぞれが格納する情報において関係性を持つとする。この場合、ＫＶ−Ｋ１が、ＫＶＳ２００において確定（コミット）された場合、ＫＶ−Ｋ２も、コミットされなければならない。
【０１８２】
しかし、一般的な分散ＫＶＳにおいて、ＫＶペアは、独立した存在である。複数ＫＶペアの関係性は、考慮されていない。つまり、分散ＫＶＳは、ＫＶ−Ｋ１及びＫＶ−Ｋ２の両コミットの成功を保証しない。例えば、ＫＶ−Ｋ１はコミットに成功するが、ＫＶ−Ｋ２はコミットに失敗する場合がある。
【０１８３】
一方、本変形例のように、レコードを部分データに分解し、各部分データを各ＫＶペアに格納した場合、いずれかのＫＶペアのコミットの失敗は、データ（レコード）が破損したことと同等となる。なぜなら、データ（レコード）の参照時に、部分データの一部を取得できない場合、そのことが、ＫＶペアのコミットの失敗となるためである。
【０１８４】
さらに、本変形例では、Ｔｒａｎｓａｃｔｉｏｎ  Ｅｎｇｉｎｅ３０１（ＫＶＳ２００から見た場合の外部の装置）が、ＫＶペアのＰＵＴ失敗時に、成功するまでＰＵＴのリトライを実行する。つまり、データは、最終的に、確実にＫＶＳ２００に格納されること保証されている。この場合でも、ＫＶペアの参照において、一定期間において部分データが全てそろわない場合が発生する。しかし、取得におけるリトライ動作に基づいて、本変形例は、最終的に、全ての部分データを取得するが可能となる。
【０１８５】
つまり、本変形例は、部分データを取得できた場合に、コミットできる。
【０１８６】
なお、１つの部分データに１つのＫＶペアを割り当てることの利点は、Ｓｔｏｒａｇｅ２０１において、Ｖａｌｕｅ部から必要な部分データを抽出する動作を省略できることである。
【０１８７】
このように、本変形例は、第１の実施形態の効果に加え、ＫＶＳ２００に相当するＳｔｏｒａｇｅ２０１に格納されているＫＶペア取得において、部分データの効率的に取り出すことができる。つまり、本変形例は、Ｓｔｏｒａｇｅ２０１に含まれる図示しない記憶装置（例えば、ハードディスク）における利用の効率性（ディスクアクセス）を改善するとの効果を奏することができる。
【０１８８】
＜実施形態の概要＞
次に図面を参照して、本発明における実施形態の概要について説明する。
【０１８９】
図１１は、本発明のおける実施形態の概要である情報処理システム３０の構成の一例を示すブロック図である。
【０１９０】
情報処理システム３０は、レコードを、レコードの検索用のキーと、レコードの版数及びレコードを分割した部分データとを含むバリューとの組であるキーバリューペアとして分散して保持する。
【０１９１】
情報処理システム３０は、データ処理装置１０３と、データ保存装置２０３とを含む。
【０１９２】
データ保存装置２０３は、記憶装置２３３と、部分データアクセス装置２４３と、部分データ作成装置２５３とを含む。
【０１９３】
記憶装置２３３は、キーバリューペアを記憶する。
【０１９４】
部分データ作成装置２５３は、記憶装置２３３に記憶されているキーバリューペアを基に部分データを作成する。
【０１９５】
部分データアクセス装置２４３は、部分データの取得の要求を受信したときに、部分データ作成装置２５３が作成した部分データを送信する。
【０１９６】
データ処理装置１０３は、部分データ分割結合装置１５３と、再要求判定装置１６３と、部分データ取得装置１７３とを含む。
【０１９７】
部分データ取得装置１７３は、データ保存装置２０３から部分データを取得する。
【０１９８】
部分データ分割結合装置１５３は、データ保存装置２０３から取得した部分データを結合してレコードを作成する。
【０１９９】
再要求判定装置１６３は、取得した部分データにおいて不足している部分データがある場合に、不足している部分データをデータ保存装置２０３から取得する。
【０２００】
このように構成された情報処理システム３０は、情報処理システム１０と同様の効果を実現できる。
【０２０１】
その理由は、情報処理システム３０の含まれる各構成が、情報処理システム１０と同様に、動作し、部分データへのアクセスを実現するためである。
【０２０２】
第１の実施形態を参照して、情報処理システム３０の各構成の一例を説明する。
【０２０３】
情報処理システム３０の一例は、情報処理システム１０である。
【０２０４】
データ処理装置１０３の一例は、ＫＶＳ  Ｃｌｉｅｎｔ１００である。
【０２０５】
データ保存装置２０３の一例は、ＫＶＳ２００である。
【０２０６】
部分データ分割結合装置１５３の一例は、部分データ分割結合装置１５０である。
【０２０７】
再要求判定装置１６３の一例は、再要求判定装置１６０である。
【０２０８】
部分データ取得装置１７３の一例は、部分データ取得装置１７０である。
【０２０９】
記憶装置２３３の一例は、ストレージ２３０である。
【０２１０】
部分データアクセス装置２４３の一例は、部分データアクセスインタフェース２４０である。
【０２１１】
部分データ作成装置２５３の一例は、部分データＫＶペア作成装置２５０である。
【０２１２】
なお、ユーザアクセスインタフェース１１０は、第１のアクセスインタフェース装置の一例である。Ｖｅｒｓｉｏｎ確認装置１２０は、版数確認装置の一例である。ＫＶペア作成装置１３０は、キーバリューペア作成装置の一例である。ＫＶＳアクセス装置１４０は、アクセス装置の一例である。
【０２１３】
また、アクセスインタフェース２１０は、第２のアクセスインタフェース装置の一例である。ＫＶペアアクセス装置２２０は、キーバリューペア処理装置の一例である。
【０２１４】
さらに、第２の実施形態のＴｒａｎｓａｃｔｉｏｎ  Ｅｎｇｉｎｅ３０１は、データ転送装置の一例である。
【０２１５】
情報処理システム３０は、本発明のおける実施形態の最小構成である。
【０２１６】
＜ハードウェア構成＞
以上の説明した情報処理システム１０及びＤＢＭＳ２０は、次のように構成される。
【０２１７】
例えば、情報処理システム１０及びＤＢＭＳ２０の各構成部及び各装置は、ハードウェア回路で構成されてもよい。
【０２１８】
また、情報処理システム１０及びＤＢＭＳ２０において、各構成及び各装置は、ネットワークを介して接続した複数の装置を用いて、構成されてもよい。
【０２１９】
また、情報処理システム１０及びＤＢＭＳ２０において、複数の構成及び各装置は、１つのハードウェアで構成されてもよい。
【０２２０】
また、情報処理システム１０及びＤＢＭＳ２０において、各構成及び各装置は、ＣＰＵ（Central Processing Unit）と、ＲＯＭ（Read Only Memory）と、ＲＡＭ（Random Access Memory）とを含むコンピュータ装置として実現されてもよい。各装置は、上記構成に加え、さらに、入出力接続回路（ＩＯＣ：Input / Output Circuit）と、ネットワークインタフェース回路（ＮＩＣ：Network Interface Circuit）とを含むコンピュータ装置として実現されてもよい。
【０２２１】
図１２は、情報処理システム１０及びＤＢＭＳ２０の各構成及び各装置のハードウェア構成を示す情報処理装置６００の構成の一例を示すブロック図である。
【０２２２】
情報処理装置６００は、ＣＰＵ６１０と、ＲＯＭ６２０と、ＲＡＭ６３０と、内部記憶装置６４０と、ＩＯＣ６５０と、ＮＩＣ６８０とを含み、コンピュータ装置を構成している。
【０２２３】
ＣＰＵ６１０は、ＲＯＭ６２０からプログラムを読み込む。そして、ＣＰＵ６１０は、読み込んだプログラムに基づいて、ＲＡＭ６３０と、内部記憶装置６４０と、ＩＯＣ６５０と、ＮＩＣ６８０とを制御する。そして、ＣＰＵ６１０を含むコンピュータは、これらの構成を制御し、図１及び図２に示されている情報処理システム１０の各装置、並びに、図９及び図１０に示されているＤＢＭＳ２０の各装置としての各機能を実現する。
【０２２４】
ＣＰＵ６１０は、各機能を実現する際に、ＲＡＭ６３０又は内部記憶装置６４０を、プログラムの一時記憶媒体として使用してもよい。
【０２２５】
また、ＣＰＵ６１０は、コンピュータで読み取り可能にプログラムを記憶した記憶媒体７００が含むプログラムを、図示しない記憶媒体読み取り装置を用いて読み込んでもよい。あるいは、ＣＰＵ６１０は、ＮＩＣ６８０を介して、図示しない外部の装置からプログラムを受け取り、ＲＡＭ６３０に保存して、保存したプログラムを基に動作してもよい。
【０２２６】
ＲＯＭ６２０は、ＣＰＵ６１０が実行するプログラム及び固定的なデータを記憶する。ＲＯＭ６２０は、例えば、Ｐ−ＲＯＭ（Programmable-ROM）又はフラッシュＲＯＭである。
【０２２７】
ＲＡＭ６３０は、ＣＰＵ６１０が実行するプログラム及びデータを一時的に記憶する。ＲＡＭ６３０は、例えば、Ｄ−ＲＡＭ（Dynamic-RAM）である。
【０２２８】
内部記憶装置６４０は、情報処理装置６００が長期的に保存するデータ及びプログラムを記憶する。また、内部記憶装置６４０は、ＣＰＵ６１０の一時記憶装置として動作してもよい。内部記憶装置６４０は、例えば、ハードディスク装置、光磁気ディスク装置、ＳＳＤ（Solid State Drive）又はディスクアレイ装置である。
【０２２９】
ここで、ＲＯＭ６２０と内部記憶装置６４０は、不揮発性（non-transitory）の記憶媒体である。一方、ＲＡＭ６３０は、揮発性（transitory）の記憶媒体である。そして、ＣＰＵ６１０は、ＲＯＭ６２０、内部記憶装置６４０、又は、ＲＡＭ６３０に記憶されているプログラムを基に動作可能である。つまり、ＣＰＵ６１０は、不揮発性記憶媒体又は揮発性記憶媒体を用いて動作可能である。
【０２３０】
ＩＯＣ６５０は、ＣＰＵ６１０と、入力機器６６０及び表示機器６７０とのデータを仲介する。ＩＯＣ６５０は、例えば、ＩＯインタフェースカード又はＵＳＢ（Universal Serial Bus）カードである。さらに、ＩＯＣ６５０は、ＵＳＢのような有線に限らず、無線を用いてもよい。
【０２３１】
入力機器６６０は、情報処理装置６００の操作者からの入力指示を受け取る機器である。入力機器６６０は、例えば、キーボード、マウス又はタッチパネルである。
【０２３２】
表示機器６７０は、情報処理装置６００の操作者に情報を表示する機器である。表示機器６７０は、例えば、液晶ディスプレイである。
【０２３３】
ＮＩＣ６８０は、ネットワークを介した図示しない外部の装置とのデータのやり取りを中継する。ＮＩＣ６８０は、例えば、ＬＡＮ（Local Area Network）カードである。さらに、ＮＩＣ６８０は、有線に限らず、無線を用いてもよい。
【０２３４】
このように構成された情報処理装置６００は、情報処理システム１０及びＤＢＭＳ２０の各構成及び各装置と同様の効果を得ることができる。
【０２３５】
その理由は、情報処理装置６００のＣＰＵ６１０が、プログラムに基づいて情報処理システム１０及びＤＢＭＳ２０の各構成及び各装置と同様の機能を実現できるためである。
【０２３６】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成及び詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０２３７】
１０    情報処理システム
２０    ＤＢＭＳ
３０    情報処理システム
１００    ＫＶＳ  Ｃｌｉｅｎｔ
１０１    ＳＱＬ  Ｅｎｇｉｎｅ
１１０    ユーザアクセスインタフェース
１２０    Ｖｅｒｓｉｏｎ確認装置
１３０    ＫＶペア作成装置
１４０    ＫＶＳアクセス装置
１５０    部分データ分割結合装置
１５３    部分データ分割結合装置
１６０    再要求判定装置
１６３    再要求判定装置
１７０    部分データ取得装置
１７３    部分データ取得装置
２００    ＫＶＳ
２０１    Ｓｔｏｒａｇｅ
２０３    データ保存装置
２１０    アクセスインタフェース
２２０    ＫＶペアアクセス装置
２３０    ストレージ
２３３    記憶装置
２４０    部分データアクセスインタフェース
２４３    部分データアクセス装置
２５０    部分データＫＶペア作成装置
２５３    部分データ作成装置
３０１    Ｔｒａｎｓａｃｔｉｏｎ  Ｅｎｇｉｎｅ
６００    情報処理装置
６１０    ＣＰＵ
６２０    ＲＯＭ
６３０    ＲＡＭ
６４０    内部記憶装置
６５０    ＩＯＣ
６６０    入力機器
６７０    表示機器
６８０    ＮＩＣ
７００    記憶媒体
【図１】
0006645296.tif 000002
【図２】
0006645296.tif 000003
【図３】
0006645296.tif 000004
【図４】
0006645296.tif 000005
【図５】
0006645296.tif 000006
【図６】
0006645296.tif 000007
【図７】
0006645296.tif 000008
【図８】
0006645296.tif 000009
【図９】
0006645296.tif 000010
【図１０】
0006645296.tif 000011
【図１１】
0006645296.tif 000012
【図１２】
0006645296.tif 000013
【図１３】
0006645296.tif 000014
【図１４】
0006645296.tif 000015
【図１５】
0006645296.tif 000016
【図１６】
0006645296.tif 000017
【図１７】
0006645296.tif 000018
【図１８】
0006645296.tif 000019
【図１９】
0006645296.tif 000020
【図２０】
0006645296.tif 000021