(57)【特許請求の範囲】
【請求項１】
同一のキー値を有するデータを複数のデータ記憶部で記憶するデータベースシステムであって、
一意の標識であるキー値と保存する対象を示すバリュー値との組み合わせでデータを格納する複数のデータ記憶部と、
前記データ記憶部の障害時に当該データ記憶部の代わりにデータを格納する代替記憶部と、
前記代替記憶部の記憶処理を制御する制御部と、を有し、
前記制御部は、前記代替記憶部が保存対象となる所定のデータを取得した場合、当該取得したデータと同一のキー値を持つデータの保存先となる前記データ記憶部から、当該同一のキー値を有するデータを取得し、当該データ記憶部から取得したデータと前記所定のデータとのうちの最新のデータを前記代替記憶部に格納する
データベースシステム。
【請求項２】
請求項１に記載のデータベースシステムであって、
前記制御部は、前記代替記憶部が当該代替記憶部自身に格納されていないキー値を有するデータを取得した場合、当該取得したデータと同一のキー値を持つデータの保存先となる前記データ記憶部から、当該同一のキー値を有するデータを取得し、当該データ記憶部から取得したデータと前記自身に格納されていないキー値を有するデータとのうちの最新のデータを前記代替記憶部に格納する
データベースシステム。
【請求項３】
請求項１又は２に記載のデータベースシステムであって、
前記制御部は、前記代替記憶部が前記データ記憶部を確認する旨のフラグが付与されたデータを取得した場合、当該取得したデータと同一のキー値を持つデータの保存先となる前記データ記憶部から、当該同一のキー値を有するデータを取得し、当該データ記憶部から取得したデータと前記フラグが付与されたデータとのうちの最新のデータを前記代替記憶部に格納する
データベースシステム。
【請求項４】
請求項１乃至３のいずれかに記載のデータベースシステムであって、
前記データ記憶部に対する処理を指示する処理指示部を有し、
前記処理指示部は、前記複数のデータ記憶部にデータを書き込む際に予め定められた数の前記データ記憶部に対して対象のデータを送信するよう構成され、当該データの送信に失敗した場合、前記データ記憶部を確認する旨のフラグを付与したデータを前記代替記憶部に送信する
データベースシステム。
【請求項５】
請求項４に記載のデータベースシステムであって、
前記複数のデータ記憶部と前記代替記憶部とを管理するデータ記憶管理部を有し、
前記処理指示部は、前記データ記憶部に対するデータの送信に失敗した場合、当該データの送信に失敗した旨を示す送信失敗通知を前記データ記憶管理部に通知し、
前記データ記憶管理部は、前記送信失敗通知に応じて、前記代替記憶部にデータを送信するよう前記処理指示部に指示する
データベースシステム。
【請求項６】
請求項１乃至５のいずれかに記載のデータベースシステムであって、
前記データ記憶部に対する処理を指示する処理指示部を有し、
前記処理指示部は、前記データ記憶部からデータを読み出す際に予め定められた数の前記データ記憶部から対象のデータを取得するよう構成され、当該データの取得に失敗した場合、前記代替記憶部からデータを取得する
データベースシステム。
【請求項７】
請求項６に記載のデータベースシステムであって、
前記複数のデータ記憶部と前記代替記憶部とを管理するデータ記憶管理部を有し、
前記処理指示部は、前記データ記憶部からデータの取得に失敗すると、当該データの取得に失敗した旨を示す取得失敗通知を前記データ記憶管理部に通知し、
前記データ記憶管理部は、前記取得失敗通知に応じて、前記代替記憶部からデータを取得するよう前記処理指示部に指示する
データベースシステム。
【請求項８】
請求項１乃至７のいずれかに記載のデータベースシステムであって、
前記代替記憶部は、データの更新の履歴を格納する
データベースシステム。
【請求項９】
情報処理装置が、
データ記憶部の障害時に当該データ記憶部の代わりにデータを格納する代替記憶部が保存対象となる所定のデータを取得した場合、当該取得したデータと同一のキー値を持つデータの保存先となるデータ記憶部から当該同一のキー値を有するデータを取得し、当該データ記憶部から取得したデータと前記所定のデータとのうちの最新のデータを前記代替記憶部に格納する
情報記憶方法。
【請求項１０】
情報処理装置に、
データ記憶部の障害時に当該データ記憶部の代わりにデータを格納する代替記憶部が保存対象となる所定のデータを取得した場合、当該取得したデータと同一のキー値を持つデータの保存先となるデータ記憶部から当該同一のキー値を有するデータを取得し、当該データ記憶部から取得したデータと前記所定のデータとのうちの最新のデータを前記代替記憶部に格納する制御手段を実現させる
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースシステム、情報記憶方法、プログラムに関する。
【背景技術】
【０００２】
データベースサーバに障害が発生した場合の対処方法に関する技術が様々知られている。
【０００３】
例えば、特許文献１には、マスタサーバが退避データセットを備えるデータベースシステムが記載されている。マスタサーバは、レプリカサーバが機能を停止したとき、レプリカサーバの障害回復の監視を行いながら、障害が発生したレプリカサーバに対するデータを退避データセットに避難させておく。その結果、障害が発生したレプリカサーバの障害回復後退避データセットからレプリケーション処理を続行することにより、マスタサーバとレプリケーションサーバとの整合をとることが可能となる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開Ｈ１１−２５９３４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
分散ＫＶＳにおいて、レプリケーションの運用方法にＱｕｏｒｕｍ（定足数）アルゴリズムを採用し、例えば、書き込み処理：３、読み込み処理：２で運用したとする。この際にあるサーバがダウンしたとすると、ダウンしたサーバが担当するＫｅｙのＷｒｉｔｅ処理を行うことが出来なくなり、またＲｅａｄ処理を行う際の負荷分散が期待できなくなることになる。
【０００６】
この問題に対処するため、特許文献１に記載のようなダウンしたサーバが保持すべきデータを代わりの既存サーバが受け持つ技術を利用した、ヒンティッドハンドオフという技術が知られている。ヒンティッドハンドオフを利用することで、書き込み処理：３が維持されるため、サーバダウンによりＷｒｉｔｅ処理を行うことが出来なくなる問題が解消されることになる。
【０００７】
しかしながら、ヒンティッドハンドオフにおいては、複数のクライアントが同時に書き込みを行った場合などにおいて、書き込みの順番の保証をすることが出来ないことがあるため、Ｒｅａｄ処理は許容されていなかった。
【０００８】
このように、ダウンしたサーバが保持すべきデータを代わりのサーバが一時的に受け持つ際に、代わりのサーバに対してＲｅａｄ処理による参照を行うことが難しい場合がある、という問題が生じていた。
【０００９】
そこで、本発明の目的は、ダウンしたサーバが保持すべきデータを代わりのサーバが一時的に受け持つ際に、代わりのサーバに対してＲｅａｄによる参照を行うことが難しい場合がある、という問題を解決するデータベースシステムを提供することにある。
【課題を解決するための手段】
【００１０】
かかる目的を達成するため本発明の一形態であるデータベースシステムは、
同一のキー値を有するデータを複数のデータ記憶部で記憶するデータベースシステムであって、
一意の標識であるキー値と保存する対象を示すバリュー値との組み合わせでデータを格納する複数のデータ記憶部と、
前記データ記憶部の障害時に当該データ記憶部の代わりにデータを格納する代替記憶部と、
前記代替記憶部の記憶処理を制御する制御部と、を有し、
前記制御部は、前記代替記憶部が保存対象となる所定のデータを取得した場合、当該取得したデータと同一のキー値を持つデータの保存先となる前記データ記憶部から、当該同一のキー値を有するデータを取得し、当該データ記憶部から取得したデータと前記所定のデータとのうちの最新のデータを前記代替記憶部に格納する
という構成を採る。
【００１１】
また、本発明の他の形態である情報記憶方法は、
保存対象となる所定のデータを取得した場合に、当該取得したデータと同一のキー値を持つデータの保存先となるデータ記憶部から当該同一のキー値を有するデータを取得し、当該データ記憶部から取得したデータと前記所定のデータとのうちの最新のデータを格納する
という構成を採る。
【００１２】
また、本発明の他の形態であるプログラムは、
情報処理装置に、
データ記憶部の障害時に当該データ記憶部の代わりにデータを格納する代替記憶部が保存対象となる所定のデータを取得した場合、当該取得したデータと同一のキー値を持つデータの保存先となるデータ記憶部から当該同一のキー値を有するデータを取得し、当該データ記憶部から取得したデータと前記所定のデータとのうちの最新のデータを前記代替記憶部に格納する制御手段を実現させる
という構成を採る。
【発明の効果】
【００１３】
本発明は、以上のように構成されることにより、ダウンしたサーバが保持すべきデータを代わりのサーバが一時的に受け持つ際に、代わりのサーバに対してＲｅａｄによる参照を行うことが難しい場合がある、という問題を解決するデータベースシステムを提供することが可能となる。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１の実施形態に係る分散ＫＶＳシステムの全体の構成の一例を示すブロック図である。
【図２】本発明の第１の実施形態に係る分散ＫＶＳシステムを説明するための図である。
【図３】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて行われる読み込み処理の一例を説明するための図である。
【図４】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて行われる書き込み処理の一例を説明するための図である。
【図５】本発明の第１の実施形態に係る分散ＫＶＳシステムにおける更新履歴の保持方法を説明するための図である。
【図６】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて行われる読み込み処理の一例を示す図である。
【図７】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて行われる書き込み処理の一例を示す図である。
【図８】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、ＫＶＳシステム管理装置にサーバのダウンを通知する処理の一例を示す図である。
【図９】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、代替サーバにＫＶデータを書き込む際の処理の一例を示す図である。
【図１０】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、代替サーバに書き込まれるＫＶデータの一例を示す図である。
【図１１】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、代替サーバにＫＶデータを書き込む際の処理の他の例を示す図である。
【図１２】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、代替サーバに書き込まれるＫＶデータの一例を示す図である。
【図１３】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、ＫＶＳシステム管理装置にサーバのダウンを通知する処理の他の一例を示す図である。
【図１４】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、代替サーバに書き込まれるＫＶデータの他の一例を示す図である。
【図１５】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、読み込み処理を行う際の処理の一例を示す図である。
【図１６】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、読み込み処理を行う際の処理の一例を示す図である。
【図１７】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、読み込み処理を行う際の処理の一例を示す図である。
【図１８】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、読み込み処理を行う際の処理の一例を示す図である。
【図１９】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、書き込み処理を行う際の処理の一例を示す図である。
【図２０】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、サーバの復旧を行う際の処理の一例を示す図である。
【図２１】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、サーバの復旧を行う際の処理の一例を示す図である。
【図２２】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、サーバの復旧を行う際の処理の一例を示す図である。
【図２３】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、クライアントが読み込み処理を行う際の動作の一例を示すフローチャートである。
【図２４】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、クライアントが書き込み処理を行う際の動作の一例を示すフローチャートである。
【図２５】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、代替サーバの動作の一例を示すフローチャートである。
【図２６】本発明の第１の実施形態に係る分散ＫＶＳシステムにおいて、サーバの復旧を行う際の動作の一例を示すフローチャートである。
【図２７】本発明の第２の実施形態に係るデータベースシステムの構成の一例を示す概略ブロック図である。
【発明を実施するための形態】
【００１５】
［第１の実施形態］
図１は、分散ＫＶＳシステム３の全体の構成の一例を示すブロック図である。図２は、分散ＫＶＳシステム３を説明するための図である。図３は、分散ＫＶＳシステム３において行われる読み込み処理の一例を説明するための図である。図４は、分散ＫＶＳシステム３において行われる書き込み処理の一例を説明するための図である。図５は、分散ＫＶＳシステム３における更新履歴の保持方法を説明するための図である。図６乃至図１９は、分散ＫＶＳシステム３で行われる処理を説明するための図である。図２０乃至図２２は、サーバ２１を復旧する際の処理を説明するための図である。図２３は、クライアントが読み込み処理を行う際の動作の一例を示すフローチャートである。図２４は、クライアントが書き込み処理を行う際の動作の一例を示すフローチャートである。図２５は、代替サーバ２３の動作の一例を示すフローチャートである。図２６は、サーバ２１の復旧を行う際の動作の一例を示すフローチャートである。
【００１６】
本発明の第１の実施形態では、分散ＫＶＳ（Ｋｅｙ−Ｖａｌｕｅ  Ｓｔｏｒｅ）２を構成するサーバ２１がダウンした時に、ダウンしたサーバ２１の代わりに代替サーバ２３にデータを記憶させる分散ＫＶＳシステム３について説明する。後述するように、本実施形態における代替サーバ２３の制御部２３１は、クライアント１から所定のデータを取得した場合、当該取得したデータと同一のキー値を持つデータの保存先となるサーバ２１から、当該同一のキー値を有するデータを取得する。そして、制御部２３１は、サーバ２１から取得したデータとクライアント１から取得した所定のデータとを比較して、サーバ２１から取得したデータと所定のデータとのうち最新のデータを代替サーバ２３のデータ記憶部２３２に格納する。
【００１７】
なお、分散ＫＶＳ２を構成する個々のサーバ２１に対するデータの読み書きは、ＣＡＳ（Ｃｏｍｐａｒｅ  ａｎｄ  Ｓｗａｐ）とＱｕｏｒｕｍアルゴリズムに従うものとする。つまり、個々のサーバ２１に対するデータの読み書きは、ＫＶ（Ｋｅｙ−Ｖａｌｕｅ）データに付与されたバージョン情報（Ｖｅｒｓｉｏｎ）に応じてアトミックに行うものとする。また、分散ＫＶＳ２に対して書き込み処理（Ｗｒｉｔｅ）を行う際には、例えば、３つのサーバ（サーバ２１、代替サーバ２３を合わせて合計３つのサーバ）にデータを書き込むものとする（図２参照）。また、分散ＫＶＳ２に対して読み込み処理（Ｒｅａｄ）を行う際には、例えば、２つのサーバ（サーバ２１、代替サーバ２３を合わせて合計２つのサーバ）からデータを読み取るものとする（図２参照）。ただし、書き込み処理、読み込み処理を行うサーバ２１の数は、上記例示した場合以外であっても構わない。
【００１８】
図１を参照すると、本実施形態における分散ＫＶＳシステム３（データベースシステム）は、クライアント１（処理指示部）と、分散ＫＶＳ２と、を有している。また、分散ＫＶＳ２は、複数のサーバ２１（データ記憶部）と、ＫＶＳシステム管理装置２２と、代替サーバ２３（代替記憶部）と、を有している。
【００１９】
クライアント１と分散ＫＶＳ２とは、例えばネットワークを介して、互いに通信可能なよう接続されている。また、ＫＶＳシステム管理装置２２は、複数のサーバ２１のそれぞれと、代替サーバ２３と、通信可能に接続されており、代替サーバ２３は、複数のサーバ２１のそれぞれと通信可能に接続されている。なお、以下においては、同様の構成が複数ある場合、「ｘｘ−１」、「ｘｘ−２」と、ハイフン以下の数字で区別するものとする。また、同様の構成のいずれであるかを区別しない場合、「ｘｘ」のように表記するものとする。
【００２０】
クライアント１は、情報処理装置である。クライアント１は、図示しない演算装置（ＣＰＵ：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、記憶装置と、を有している。クライアント１は、記憶装置が有するプログラムをＣＰＵが実行することで、後述する機能を実現するよう構成されている。
【００２１】
クライアント１は、分散ＫＶＳ２に対して、書き込み処理や読み込み処理などの所定の処理を要求する。また、クライアント１の記憶装置には、キー値（Ｋｅｙ）を保持しているサーバ２１を識別するためのＫｅｙ保持リストがキー値ごとに格納されている。クライアント１は、Ｋｅｙ保持リストを参照して、書き込み処理を行うサーバ２１や読み込み処理を行うサーバ２１を選択する。そして、クライアント１は、当該選択したサーバ２１に対して書き込み処理や読み込み処理を行うことになる。
【００２２】
また、後述するように、クライアント１は、ＫＶＳシステム管理装置２２からの通知に応じて記憶装置が記憶するＫｅｙ保持リストを書き換えることがある。この場合、クライアント１は、書き換えたＫｅｙ保持リストに基づいて、書き込み処理を行うサーバ２１や読み込み処理を行うサーバ２１を選択することになる。
【００２３】
なお、クライアント１が行う書き込み処理や読み込み処理の詳細については、後述する。
【００２４】
また、図１ではクライアント１が１つの場合を示した。しかしながら、本発明において、クライアント１の数は１つに限定されない。分散ＫＶＳシステム３は、１つのクライアント１を有していても構わないし、複数のクライアント１を有していても構わない。本発明は、クライアント１の数には依存せず実施可能である。
【００２５】
上述したように、分散ＫＶＳ２は、複数のサーバ２１と、ＫＶＳシステム管理装置２２と、代替サーバ２３と、を有している。
【００２６】
サーバ２１は、ディスク装置などの記憶装置を有している。サーバ２１は、一意の標識であるキー値と保存する対象を示すバリュー値との組み合わせであるＫＶデータを格納する。サーバ２１に格納されているＫＶデータは、クライアント１からの要求に応じて、更新などの処理が行われることになる。
【００２７】
また、サーバ２１には、ＫＶデータの更新履歴が格納されている。サーバ２１は、記憶装置に格納された更新履歴を用いることで、ロールフォワードすることが出来るよう構成されている。
【００２８】
なお、サーバ２１が記憶するＫＶデータには、バージョン情報が付与されている。バージョン情報は、対象のＫＶデータが何回更新されたかを示す情報であり、例えば、ＫＶデータが１回更新されるごとに１増加する値である。ＫＶデータに付与されるバージョン情報は、例えば、クライアント１で制御されることになる。
【００２９】
ＫＶＳシステム管理装置２２は、情報処理装置である。ＫＶＳシステム管理装置２２は、図示しない演算装置（ＣＰＵ：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、記憶装置と、を有している。ＫＶＳシステム管理装置２２は、記憶装置が有するプログラムをＣＰＵが実行することで、後述する機能を実現するよう構成されている。
【００３０】
ＫＶＳシステム管理装置２２は、分散ＫＶＳ２を構成する複数のサーバ２１と代替サーバ２３とを管理・制御する。例えば、ＫＶＳシステム管理装置２２は、クライアント１からの通知に応じて、代替サーバ２３の起動を行う。また、例えば、ＫＶＳシステム管理装置２２は、起動した代替サーバ２３をクライアント１に通知する。
【００３１】
なお、ＫＶＳシステム管理装置２２が有する上記機能は、例えば、複数のサーバ２１のうちの１つのサーバ２１が有する機能として実現されても構わない。つまり、分散ＫＶＳ２がＫＶＳシステム管理装置２２の有する機能を有していれば、分散ＫＶＳ２は、独立したＫＶＳシステム管理装置２２を有していなくても構わない。
【００３２】
代替サーバ２３は、分散ＫＶＳ２を構成するサーバ２１に障害が発生した場合（サーバがダウンした場合）に、当該障害が発生したサーバ２１の代わりにデータを格納する。具体的には、本実施形態における代替サーバ２３は、バージョン情報が付与されたＫＶデータの更新履歴を記憶する。
【００３３】
図１を参照すると、代替サーバ２３は、制御部２３１（制御部）とデータ記憶部２３２（代替記憶部）とを有している。
【００３４】
制御部２３１は、代替サーバ２３を制御する。例えば、制御部２３１は、代替サーバ２３が所定のＫＶデータを取得した場合、当該取得したＫＶデータと同一のキー値を持つＫＶデータの保存先となるサーバ２１（障害が発生していないサーバ２１）から、当該同一のキー値を有するＫＶデータを取得する。そして、制御部２３１は、サーバ２１から取得したＫＶデータに付与されたバージョン情報と所定のＫＶデータに付与されたバージョン情報とを比較して、最新の（バージョン情報が新しい方の）ＫＶデータをデータ記憶部２３２に格納する。
【００３５】
なお、制御部２３１は、例えば、記憶装置（図示なし）が有するプログラムを代替サーバ２３が有する演算装置（図示なし）が実行することで実現される。また、本実施形態においては、代替サーバ２３が制御部２３１を有するとした。しかしながら、制御部２３１は、例えば、代替サーバ２３の外部の情報処理装置が有する機能として実現されても構わない。
【００３６】
データ記憶部２３２は、ディスク装置などの記憶装置である。データ記憶部２３２は、上述したように、バージョン情報が付与されたＫＶデータの更新履歴を格納する。
【００３７】
本実施形態における分散ＫＶＳシステム３は、例えば、上記のような構成を有している。なお、分散ＫＶＳシステム３の分散ＫＶＳ２は、複数の代替サーバ２３を有していても構わない。
【００３８】
上述したように、本実施形態における分散ＫＶＳシステム３では、レプリケーションの運用方法にＱｕｏｒｕｍアルゴリズムが採用されており、例えば、書き込み処理：３、読み込み処理：２の構成で運用されている。従って、図２で示すように、クライアント１から読み込み要求を行う場合には、クライアント１は、読み込みの対象となるキー値を記憶するサーバ２１のうちの任意の２つのサーバ２１からＫＶデータを取得する。例えば、図２では、クライアント１がキー値６のＫＶデータを読み込み要求する場合、サーバ２１−４とサーバ２１−５からＫＶデータを読み取ることが示されている。また、クライアント１から書き込み要求を行う場合には、クライアント１は、書き込みの対象となるキー値を記憶するサーバ２１のうちの任意の３つのサーバ２１にＫＶデータを書き込む。例えば、図２では、クライアント１がキー値４のデータに対して書き込み要求する場合、サーバ２１−４とサーバ２１−５とサーバ２１−６とに対して書き込みを行うことを示している。
【００３９】
ここで、分散ＫＶＳシステム３で行われる読み込み処理及び書き込み処理の基本的な動作について、具体例を挙げてより詳細に説明する。
【００４０】
図３を参照すると、例えばキー値６のデータに対する読み込み要求を行う場合、クライアント１は、自身が記憶するＫｅｙ保持リストを参照してキー値６のＫＶデータを保有するサーバ２１を割り出す。例えば、図３の場合、クライアント１は、キー値６のＫＶデータを保有するサーバ２１として、サーバ２１−４と、サーバ２１−５と、サーバ２１−６と、を割り出す。続いて、クライアント１は、割り出したサーバ２１から任意の２サーバを選択し、選択した２サーバにアクセスして目的のキー値に対するＫＶデータの取得を試みる。例えば、クライアント１は、サーバ２１−４とサーバ２１−５とを選択し、当該選択したサーバ２１−４とサーバ２１−５とからキー値６のＫＶデータの取得を試みる。また、クライアント１は、サーバ２１−４、サーバ２１−５のどちらかからＫＶデータの取得に失敗した場合、サーバ６にアクセスしてキー値６のＫＶデータの取得を試みる。このようにして、クライアント１は、２つのサーバ２１からキー値６のＫＶデータを取得する。そして、クライアント１は、２つのサーバ２１から取得したＫＶデータのうちもっとも大きなバーション情報を有するＫＶデータを採用する。例えば、図３の場合では、サーバ２１−４には、バージョン情報「２」が付与されたＫＶデータが格納されている。また、サーバ２１−５には、バージョン情報「１」が付与されたＫＶデータが格納されている。そこで、クライアント１は、サーバ２１−４に格納されたＫＶデータを採用する。つまり、クライアント１は、バリュー値「Ｍ」を取得することになる。
【００４１】
また、図４を参照すると、例えば、キー値６のデータに対する書き込み要求を行う場合、クライアント１は、自身が記憶するＫｅｙ保持リストを参照してキー値６のＫＶデータを保有するサーバ２１を割り出す。例えば、図４の場合、クライアント１は、キー値６のＫＶデータを保有するサーバ２１として、サーバ２１−４と、サーバ２１−５と、サーバ２１−６と、を割り出す。続いて、クライアント１は、割り出したサーバ２１から任意の２サーバを選択し、選択した２サーバにアクセスして目的のキー値に対するＫＶデータの取得を試みる。この処理は、図３で説明した場合と同様である。例えば、読み込み処理の結果、クライアント１は、バージョン情報「２」が付与されたＫＶデータを採用する。そして、クライアント１は、バージョン情報を一つ繰り上げた更新するＫＶデータを３つのサーバ２１に対して書き込む。例えば、図４の場合、クライアント１は、サーバ２１−４とサーバ２１−５とサーバ２１−６とに対して、バリュー値がＴでありバージョン情報「３」が付与されたＫＶデータを書き込むことになる。
【００４２】
また、サーバ２１及び代替サーバ２３は、例えば図５で示すような方法でＫＶデータの更新履歴を記憶する。つまり、図５で示すように、サーバ２１及び代替サーバ２３は、自身に格納されるＫＶデータをキー値ごとに管理する。そして、同一のキー値を有し、バージョン情報が１更新されたＫＶデータを取得するごとに、更新履歴にＫＶデータを積む。この処理を繰り返すことで、サーバ２１及び代替サーバ２３は、更新履歴を記憶する。
【００４３】
続いて、本実施形態における分散ＫＶＳシステム３において行われる本発明の処理についてより詳細に説明する。
【００４４】
例えば、図６において、クライアント１は、キー値Ｘ、バリュー値Ｂを分散ＫＶＳ２に書き込み処理しようとするとする。このとき、クライアント１は、ＫＶデータに付与するバージョン情報を得るために、キー値Ｘに対する読み込み処理を行うことになる。
【００４５】
図６で示すように、キー値Ｘに対応するＫｅｙ保持リストには、サーバ１（２１−１）、サーバ２（２１−２）、サーバ３（２１−３）が記憶されている。そこで、クライアント１は、例えば、サーバ２１−１とサーバ２１−２に対して読み込み処理を行うことになる（ａ−１の処理）。図６で示すように、サーバ２１−１とサーバ２１−２とには、障害は発生していない。そのため、クライアント１は、正常に読み込み処理を行うことが出来る。その結果、クライアント１は、サーバ２１−１とサーバ２１−２とには、キー値ＸのＫＶデータとしてバージョン情報「１」が付与されたＫＶデータが格納されていることを理解する。そこで、クライアント１は、キー値Ｘ、バリュー値ＢのＫＶデータに対して、サーバ２１−１とサーバ２１−２とに格納されているＫＶデータのバージョン情報「１」に１を追加した、バージョン情報「２」を付与する（ａ−２の処理）。
【００４６】
続いて、図７を参照すると、クライアント１は、サーバ２１−１とサーバ２１−２とサーバ２１−３とに対して、バージョン情報「２」が付与されたＫＶデータを書き込む（ａ−３の処理）。その結果、サーバ２１−１とサーバ２１−２とに対する書き込み要求は正常に行われる。これにより、サーバ２１−１とサーバ２１−２とには、バージョン情報「２」が付与されておりバリュー値がＢであるＫＶデータが格納されることになる。一方、図７で示すように、サーバ２１−３には障害が発生している（サーバ２１−３はダウンしている）。そのため、クライアント１によるサーバ２１−３に対するＫＶデータの書き込み処理は失敗して、クライアント１は、サーバ２１−３のダウンを検出することになる。
【００４７】
そこで、図８を参照すると、クライアント１は、ＫＶＳシステム管理装置２２に対して、サーバ２１−３がダウンしていることを通知する（ａ−４の処理）。なお、この際に、クライアント１は、上記通知とともに、書き込み処理の失敗によりサーバ２１−３のダウンを検出した旨をＫＶＳシステム管理装置２２に対して通知しても構わない。
【００４８】
当該通知を受けたＫＶＳシステム管理装置２２は、サーバ２１−３の代わりにＫＶデータの更新履歴を格納する代替サーバ２３を起動する（ａ−５の処理）。そして、ＫＶＳシステム管理装置２２は、サーバ２１−３の代わりに代替サーバ２３に書き込むようにクライアント１に通知する（ａ−６の処理）。
【００４９】
ＫＶＳシステム管理装置２２からサーバ２１−３の代わりに代替サーバ２３に書き込むよう通知を受けたクライアント１は、自身が記憶するＫｅｙ保持リストを書き換える（ａ−７の処理）。つまり、この処理の結果、クライアント１が記憶するキー値Ｘに対応するＫｅｙ保持リストには、サーバ２１−１、サーバ２１−２、代替サーバ２３が記憶されていることになる。
【００５０】
続いて、図９を参照すると、クライアント１は、代替サーバ２３に対して、ＫＶデータの書き込み処理を行う。このときクライアント１は、ＫＶデータに付与するバージョン情報を、「２：要確認」として、通常の書き込み処理とは異なることを代替サーバ２３に通知する。つまり、クライアント１は、ＫＶデータに他のサーバ２１を確認する旨のフラグを付与して、代替サーバ２３に対して書き込み処理を行う（ａ−８の処理）。
【００５１】
代替サーバ２３が書き込み要求を受けると、制御部２３１は、代替サーバ２３が受け取ったＫＶデータのキー値であるキー値ＸのＫＶデータを代替サーバ２３が保持しているか否かを確認する（ａ−９の処理）。図９で示す場合では、データ記憶部２３２はキー値ＸのＫＶデータを保持していない。そこで、制御部２３１は、受け取ったＫＶデータのバージョン情報に「要確認」の印がついているため、キー値Ｘのレプリカを持つサーバ２１−１とサーバ２１−２に対して、それぞれが格納している最新データ（キー値がＸの最新ＫＶデータ）を要求する（ａ−１０の処理）。そして、制御部２３１は、サーバ２１−１、サーバ２１−２から受け取ったＫＶデータのバージョン情報とクライアント１から受け取ったＫＶデータのバージョン情報とを比較して、最新のＫＶデータをデータ記憶部２３２の更新履歴におく（ａ−１１の処理）。図１０の場合では、サーバ２１−１、サーバ２１−２から受け取ったＫＶデータのバージョン情報は「２」であり、クライアント１から受け取ったバージョン情報も「２」である。そのため、図１０で示すように、制御部２３１は、バージョン情報が「２」のＫＶデータ（バリュー値：Ｂ）を代替サーバ２３のデータ記憶部２３２に格納する。
【００５２】
一方、図１１で示すような場合では、図９で示すａ−１０の処理の結果、クライアント１から受け取ったＫＶデータのバージョン情報は、サーバ２１−１、サーバ２１−２から受け取ったＫＶデータのバージョン情報よりも古いことが分かる。この場合、制御部２３１は、クライアント１から受け取ったＫＶデータではなく、サーバ２１−１、サーバ２１−２から受け取った、最新のバージョン情報を有するＫＶデータをデータ記憶部２３２に格納する（図１２参照）。図１２の場合では、制御部２３は、クライアント１から受け取ったバージョン情報「１」のＫＶデータを破棄し、サーバ２１−１、サーバ２１−２から受け取った、バージョン情報「２」を有するＫＶデータをデータ記憶部２３２に格納することになる。
【００５３】
以上が、分散ＫＶＳシステム３において行われる処理の一例である。
【００５４】
なお、図１３で示すように、クライアント１がＫＶＳシステム管理装置２２に対してサーバ２１−３がダウンしていることを通知（図８のａ−４の処理）した際に、他のクライアントから既に通知されていたなどの理由により、代替サーバ２３が既に起動されている場合がある。この場合、ＫＶＳシステム管理装置２２は、代替サーバ２３の起動処理を行わずに、サーバ２１−３の代わりに代替サーバ２３に書き込むようクライアント１に通知することになる（ｂ−５の処理）。
【００５５】
そして、ＫＶＳシステム管理装置２２からサーバ２１−３の代わりに代替サーバ２３に書き込むよう通知を受けたクライアント１は、自身が記憶するＫｅｙ保持リストを書き換える（ｂ−６処理）。続いて、クライアント１は、代替サーバ２３に対して、ＫＶデータの書き込み処理を行う。図１３の場合では、クライアント１は、ＫＶデータに付与するバージョン情報を、「３：要確認」として、通常の書き込み処理とは異なることを代替サーバ２３に通知する（ｂ−７の処理）。
【００５６】
代替サーバ２３が書き込み要求を受けると、制御部２３１は、代替サーバ２３が受け取ったＫＶデータのキー値であるキー値ＸのＫＶデータを代替サーバ２３が保持しているか否かを確認する（ｂ−８の処理）。図１３で示す場合では、データ記憶部２３２は、キー値ＸのＫＶデータを保持している。そこで、制御部２３１は、データ記憶部２３２が記憶しているＫＶデータのバージョン情報と、クライアント１から受け取ったＫＶデータのバージョン情報とを比較して、最新のＫＶデータをデータ記憶部２３２の更新履歴におく（ｂ−９の処理）。図１３で示す場合では、制御部２３１の制御により、データ記憶部２３２にはバージョン情報３のＫＶデータが格納されることになる。
【００５７】
一方、図１４で示すように、クライアント１から受け取ったＫＶデータのバージョン情報が、データ記憶部２３２が記憶しているＫＶデータのバージョン情報より古いものであった場合、制御部２３１は、当該ＫＶデータをデータ記憶部２３２に格納せず破棄することになる。
【００５８】
このように、ＫＶＳシステム管理装置２２は、対応するキー値のＫＶデータを記憶する代替サーバ２３が既に起動されている場合には、クライアント１からの通知に応じて代替サーバ２３の起動を行わずに代替サーバ２３をクライアント１に通知する。
【００５９】
また、代替サーバ２３の制御部２３１は、クライアント１から受け取ったＫＶデータのキー値を有するＫＶデータを代替サーバ２３が保持している場合には、他のサーバ２１からＫＶデータの取得を行わずに、ＫＶデータを代替サーバ２３に格納する。
【００６０】
また、以上の分散ＫＶＳシステム３において行われる処理の一例では、クライアント１は、サーバ２１−１とサーバ２１−２とに読み込み処理を行った（図６参照）。そのため、上記説明では、読み込み処理は成功するとした。しかしながら、図１５で示すように、クライアント１がサーバ２１−３に対して読み込み処理を要求することも考えられる（ｃ−１の処理）。
【００６１】
この場合、クライアント１によるサーバ２１−３に対するＫＶデータの読み込み処理は失敗して、クライアント１は、サーバ２１−３のダウンを検出することになる。そこで、クライアント１は、ＫＶＳシステム管理装置２２に対して、サーバ２１−３がダウンしていることを通知する（ｃ−２の処理）。なお、この際に、クライアント１は、上記通知とともに、読み込み処理の失敗によりサーバ２１−３のダウンを検出した旨をＫＶＳシステム管理装置２２に対して通知しても構わない。
【００６２】
当該通知を受けたＫＶＳシステム管理装置２２は、必要に応じて代替サーバ２３を起動するとともに、代替サーバ２３から読み込み処理を行うようクライアント１に通知する（ｃ−３の処理）。
【００６３】
代替サーバ２３から読み込み処理を行うよう通知を受けたクライアント１は、自身が記憶するＫｅｙ保持リストを書き換える（ｃ−４の処理）。そして、クライアント１は、代替サーバ２３に対して、ＫＶデータの読み込み処理を行う（ｃ−５の処理）。図１５で示す場合では、クライアント１は、代替サーバ２３からバージョン情報「１」が付与されたＫＶデータを取得する。これにより、クライアント１は、サーバ２１−１と代替サーバ２３との２つのサーバから読み込み処理を行うことが出来たことになる。
【００６４】
また、上記読み込み処理の後に書き込み処理を行う際には、クライアント１は、サーバ２１−１と代替サーバ２３とからの読み込み結果に応じて、バージョン情報を設定する。また、読み込み処理の段階でＫｅｙ保持リストが既に更新されているため、クライアント１は、サーバ２１−１とサーバ２１−２と代替サーバ２３とに対して書き込み処理を行うことが出来る。この際には、クライアント１は、書き込み処理に失敗しないため、要確認のフラグをＫＶデータに付与せずＫＶデータをサーバ２１−１とサーバ２１−２と代替サーバ２３とに対して送信することになる。
【００６５】
なお、図１６で示すように、クライアント１が代替サーバ２３に対してＫＶデータの読み込み処理（ｃ−５の処理）を行った際に、代替サーバ２３のデータ記憶部２３２は、読み込み処理の対象となるキー値（図１６の場合はキー値Ｘ）を保持していないことがある。この場合、代替サーバ２３の制御部２３１は、クライアント１に対して他のサーバを見にいくように支持することが出来る（ｓ−６の処理）。これを受けて、クライアント１は、ｃの処理ではまだ読み込み処理を行っていない、サーバ２１−２の処理に対して読み込み処理を行うことになる（ｃ−７の処理）。
【００６６】
また、上記書き込み処理の失敗、読み込み処理の失敗、のいずれかによりＫｅｙ保持リストを書き換えた後は、クライアント１は、書き換えた後のＫｅｙ保持リストを利用して新たな書き込み処理、読み込み処理を行うことになる。
【００６７】
つまり、読み込み処理を行う際には、クライアント１は、例えば図１７で示すように、サーバ２１−１とサーバ２１−２に対して読み込み処理を行う。また、クライアント１は、例えば図１８で示すように、サーバ２１−１と代替サーバ２３とから読み込み処理を行う。クライアント１は、サーバ２１−２と代替サーバ２３とから読み込み処理を行うことも出来る。
【００６８】
また、書き込み処理を行う際には、クライアント１は、サーバ２１−１とサーバ２１−２と代替サーバ２３とに対して書き込み処理を行う。この書き込み処理は、失敗せず実行可能である。そのため、クライアント１は、バージョン情報に要確認のフラグを付与せずに書き込み処理を行うことになる。
【００６９】
以上説明したように、クライアント１は、サーバ２１に対する書き込み処理に失敗したＫＶデータを、ＫＶＳシステム管理装置２２から通知された代替サーバ２３に書き込む際に、要確認のフラグを付与することになる。
【００７０】
続いて、ダウンしたサーバ２１を復旧する際の処理の一例について説明する。
【００７１】
図２０を参照すると、例えば、ダウンしていたサーバ２１−３の障害が取り除かれ、サーバとして起動したとする（ｅ−１の処理）。このとき、サーバ２１−３は、図２０で示すように、代替サーバ２３と同じ状態で起動する。
【００７２】
サーバ２１−３の起動を認識したＫＶＳシステム管理装置２２（ｅ―２の処理）は、代替サーバ２３にサーバ２１−３が復旧した旨を通知する（ｅ−３の処理）。そして、ＫＶＳシステム管理装置２２は、上記処理以降にクライアント１から問合せがあった場合には、代替サーバ２３の代わりにサーバ２１−３を通知する。
【００７３】
ＫＶＳシステム管理装置２２からサーバ２１−３起動の通知を受けた代替サーバ２３の制御部２３１は、クライアント１からの書き込み処理と読み込み処理を禁止する（ｅ−４の処理）。この状態の代替サーバ２３は、クライアント１からみると、ダウンしている状態と同じ状態であることになる。
【００７４】
書き込み処理と読み込み処理を禁止した代替サーバ３の制御部２３１は、データ記憶部２３２が記憶するＫＶデータの更新履歴をサーバ２１−３に転送する（ｅ−５の処理）。この際、制御部２３１は、ＫＶデータの更新履歴を選別する必要はない。そのため、制御部２３１は、ネットワーク効率の良いブロック転送を行って、ＫＶデータの更新履歴をサーバ２１−３に転送することが出来る。
【００７５】
続いて、図２１を参照すると、代替サーバ２３からＫＶデータの更新履歴を受け取ったサーバ２１−３は、ダウン以前の更新履歴（サーバ２１−３が記憶している更新履歴）に対して、代替サーバ２３から受け取った更新履歴の内容をロールフォワードする（ｅ−６の処理）。このときサーバ２１−３は、代替サーバ２３と同じ状態で動作しており、クライアント１からの更新を受け付けることが出来る。つまり、サーバ２１−３は、システムを停止することなくロールフォワードを行う。
【００７６】
その後、図２２を参照すると、代替サーバ２３から取得した更新履歴を結合したサーバ２１−３は、一旦、クライアント１からの読み込み処理と書き込み処理を止める（待たせる）。そして、サーバ２１−３は、復旧後代替サーバ２３と同じ状態で動作することで蓄えた更新履歴を、これまで結合した更新履歴（自身が保持していた更新履歴＋代替サーバ２３から取得した更新履歴）にロールフォワードする（ｅ−７の処理）。
【００７７】
そして、ロールフォワードが完了したサーバ２１−３は、読み込み処理と書き込み処置を再開する。これにより、サーバ２１−３は、正規運用の状態に復帰することになる（ｅ−８）。また、サーバ２１−３からの通知などによりサーバ２１−３が正規運用の状態に復帰したことを確認したＫＶＳシステム管理装置２２は、代替サーバ２３に対して終了を通知する（ｅ−９の処理）。これにより、代替サーバ２３は停止することになる。
【００７８】
以上が、ダウンしたサーバ２１を復旧する際の処理の一例についての説明である。
【００７９】
次に、図２３乃至図２６のフローチャートを参照して、分散ＫＶＳシステム３の動作について説明する。
【００８０】
まず、図２３を参照して、クライアント１が読み込み処理を行う際の動作の一例について説明する。
【００８１】
図２３を参照すると、クライアント１は、Ｋｅｙ保持リストを参照して、読み込み処理の対象となるキー値のＫＶデータを保持しているサーバ２１を割り出す（ステップＳ１０１）。続いて、クライアント１は、割り出したサーバ２１から任意の２つのサーバ２１を選択する（ステップＳ１０２）。なお、クライアント１が割り出したサーバ２１から任意の２つのサーバ２１を選択する際に用いる方法は、特に限定しない。
【００８２】
クライアント１は、選択した２つのサーバ２１にアクセスして、目的のキー値に対するバリュー値の取得を試みる（ステップＳ１０３）。
【００８３】
上記処理により２つのサーバ２１の両方ともからＫＶデータの取得に失敗した場合（ステップＳ１０４、２サーバから取得失敗）、分散ＫＶＳ２が書き込み処理：３、読み込み処理：２で運用されている場合には、クライアント１は、エラーを返却する（ステップＳ１０５）。
【００８４】
一方、上記処理により２つのサーバ２１の両方ともからＫＶデータの取得に成功した場合（ステップＳ１０４、合計２サーバから取得成功）、クライアント１は、取得したＫＶデータのバージョン情報をそれぞれ確認する。そして、クライアント１は、最新のバージョン情報を有するＫＶデータを採用する。その後、クライアント１は、採用したＫＶデータ（最新のバージョン情報を有するＫＶデータ）を返却する（ステップＳ１１１）。
【００８５】
また、上記処理により１つのサーバ２１からＫＶデータの取得に失敗した場合（ステップＳ１０４、１サーバから取得失敗）、クライアント１は、当該取得に失敗したサーバ２１がダウンしているか確認する（ステップＳ１０６）。そして、取得に失敗したサーバ２１がダウンしている場合（ステップＳ１０６、Ｙｅｓ）、クライアント１は、ＫＶＳシステム管理装置２２に対してサーバ２１がダウンしている旨を通知して代替サーバ２３の情報を取得する（ステップＳ１０７）。
【００８６】
そして、クライアント１は、ＫＶＳシステム管理装置２２から取得した情報に基づいて、自身が記憶するＫｅｙ保持リストを更新する（ステップＳ１０８）。その後、クライアント１は、代替サーバ２３にアクセスして、目的のキー値に対するバリュー値の取得を試みる（ステップＳ１０９）。これにより合計２つのサーバからＫＶデータの取得に成功した場合（ステップＳ１０４、合計２サーバから取得成功）、クライアント１は、取得したＫＶデータのバージョン情報をそれぞれ確認して、最新のバージョン情報を有するＫＶデータを採用する。その後、クライアント１は、採用したＫＶデータ（最新のバージョン情報を有するＫＶデータ）を返却する（ステップＳ１１１）。
【００８７】
また、取得に失敗したサーバ２１がダウンしていない場合（ステップＳ１０６、Ｎｏ）、クライアント１は、残りのサーバ２１にアクセスして、目的のキー値に対するバリュー値の取得を試みる（ステップＳ１１０）。つまり、例えば、代替サーバ２３のデータ記憶部２３２が目的のキー値に対するバリュー値を記憶していないためＫＶデータの取得に失敗した場合、クライアント１は、代替サーバ２３の制御部２３１からの指示に基づいて他のサーバ２１にアクセスすることになる。
【００８８】
なお、クライアント１は、代替サーバ２３からのＫＶデータの取得に失敗し、かつ、他の全てのサーバ２１からのＫＶデータの取得に失敗した場合、エラーを返却するように構成しても構わない。また、クライアント１は、代替サーバ２３からＫＶデータの取得を試みる前に、他のサーバ２１からＫＶデータの取得を試みても構わない。
【００８９】
続いて、図２４を参照して、クライアント１が書き込み処理を行う際の動作の一例について説明する。
【００９０】
図２４を参照すると、クライアント１は、図２３で説明した読み込み処理を行う（ステップＳ２０１）。
【００９１】
読み込み処理に失敗していた場合（ステップＳ２０２、Ｎｏ）、クライアント１は、エラーを返却する（ステップＳ２１１）。
【００９２】
一方、読み込み処理に成功していた場合（ステップＳ２０２、Ｙｅｓ）、クライアント１は、読み込んだ最新のバージョンに１を加えたバージョン情報をＫＶデータに付与する（ステップＳ２０３）。そして、クライアント１は、３つのサーバに対して、更新するＫＶデータの書き込みを試みる（ステップＳ２０４）。
【００９３】
上記処理により３つ全てのサーバ２１に対して書き込みが成功した場合（ステップＳ２０５、合計３サーバに成功）、クライアント１は、成功を返却する（ステップＳ２１０）。
【００９４】
一方、上記処理により１つのサーバ２１に対して書き込みが失敗した場合（ステップＳ２０５、１サーバ失敗）、クライアント１は、ＫＶＳシステム管理装置２２に対してサーバ２１がダウンしている旨を通知して代替サーバ２３の情報を取得する（ステップＳ２０６）。
【００９５】
そして、クライアント１は、ＫＶＳシステム管理装置２２から取得した情報に基づいて、自身が記憶するＫｅｙ保持リストを更新する（ステップＳ２０７）。その後、クライアント１は、更新するＫＶデータに要確認のフラグを付与して（ステップＳ２０８）、代替サーバ２３に対して書き込みを試みる（ステップＳ２０９）。これにより、合計３つのサーバ（２つのサーバ２１と代替サーバ２３）に対して書き込みが成功した場合（ステップＳ２０５、合計３サーバに成功）、クライアント１は、成功を返却する（ステップＳ２１０）。
【００９６】
上記場合以外の場合（例えば、２つのサーバ２１に対して書き込みを失敗した場合や、３つ全てのサーバ２１に対して書き込みを失敗した場合）（ステップＳ２０５、それ以外）、クライアント１は、エラーを返却する（ステップＳ２１１）。
【００９７】
続いて、図２５を参照して、代替サーバ２３の動作の一例について説明する。
【００９８】
図２５を参照すると、クライアント１からＫＶデータを取得した代替サーバ２３の制御部２３１は、クライアント１から取得したＫＶデータのキー値と同一のキー値を有するＫＶデータをデータ記憶部２３２が保持しているか否か確認する（ステップＳ３０１）。
【００９９】
取得したＫＶデータのキー値と同一のキー値を有するＫＶデータをデータ記憶部２３２が保持していない場合（ステップＳ３０２、Ｎｏ）、制御部２３２は、当該取得したＫＶデータに要確認のフラグが付与されているか否かを確認する（ステップＳ３０５）。
【０１００】
そして、要確認のフラグが付与されている場合（ステップＳ３０６、Ｙｅｓ）、制御部２３２は、同一のキー値のレプリカを持つサーバ２１から当該キー値のＫＶデータを取得する（ステップＳ３０７）。
【０１０１】
そして、サーバ２１からＫＶデータを取得できた場合（ステップＳ３０８）、制御部２３２は、クライアント１から取得したＫＶデータとサーバ２１から取得したＫＶデータとのバージョン情報に基づいて、最新のＫＶデータをデータ記憶部２３２に格納する（ステップＳ３０９）。そして、制御部２３２は、書き込み成功をクライアント１に返却する（ステップＳ３０４）。
【０１０２】
一方、同一のキー値のＫＶデータをサーバ２１が記憶していないことによりサーバ２１からＫＶデータを取得できなかった場合（ステップＳ３０８、Ｎｏ（初書き込み））、制御部２３２は、更新するＫＶデータを通常と同様の処理により書き込む（ステップＳ３０３）。そして、制御部２３２は、書き込み成功をクライアント１に返却する（ステップＳ３０４）。なお、この場合は、例えば、分散ＫＶＳ２に対して当該キー値をもつＫＶデータが初めて書き込まれる場合であって、例えば読み込み処理に失敗している場合に発生するものと考えられる。
【０１０３】
また、取得エラーによりサーバ２１からＫＶデータを取得できなかった場合（ステップＳ３０８、Ｎｏ（取得エラー））、制御部２３２は、クライアント１にエラーを返却する（ステップＳ３１０）。
【０１０４】
クライアント１から取得したＫＶデータのキー値と同一のキー値を有するＫＶデータをデータ記憶部２３２が保持している場合（ステップＳ３０２、Ｙｅｓ）、制御部２３２は、更新するＫＶデータを通常と同様の処理により書き込む（ステップＳ３０３）。また、取得したＫＶデータに要確認のフラグが付与されていない場合（ステップＳ３０６、Ｎｏ）、制御部２３２は、更新するＫＶデータを通常と同様の処理により書き込む（ステップＳ３０３）。そして、制御部２３２は、書き込み成功をクライアント１に返却する（ステップＳ３０４）。
【０１０５】
続いて、図２６を参照して、サーバ２１の復旧を行う際の動作の一例について説明する。
【０１０６】
図２６を参照すると、ダウンしていたサーバ２１の障害が取り除かれ、サーバとして起動する。このとき、サーバ２１は、代替サーバ２３と同じ状態で運用を開始する（ステップＳ４０１）。
【０１０７】
続いて、サーバ２１の起動を認識したＫＶＳシステム管理装置２２は、代替サーバ２３にサーバ２１−３が復旧した旨を通知する。この通知により、代替サーバ２３の制御部２３１は、クライアント１からの書き込み処理と読み込み処理を禁止する（ステップＳ４０２）。
【０１０８】
そして、書き込み処理と読み込み処理を禁止した代替サーバ３の制御部２３１は、データ記憶部２３２が記憶するＫＶデータの更新履歴をサーバ２１−３に転送する（ステップＳ４０３）。
【０１０９】
代替サーバ２３からＫＶデータの更新履歴を受け取ったサーバ２１は、ダウン以前の更新履歴に対して、代替サーバ２３から受け取った更新履歴の内容を結合する（ステップＳ４０４）。このときサーバ２１は、代替サーバ２３と同じ状態で動作しており、クライアントからの更新を受け付けることが出来る。
【０１１０】
その後、代替サーバ２３から取得した更新履歴を結合したサーバ２１は、一旦、クライアント１からの読み込み処理と書き込み処理を止める。そして、サーバ２１は、当該サーバ２１の復旧後、代替サーバ２３と同じ状態で動作することで蓄えた更新履歴を、これまで結合した更新履歴と結合する（ステップＳ４０５）。
【０１１１】
そして、結合が完了したサーバ２１は、読み込み処理と書き込み処置を再開する。これにより、サーバ２１は、正規運用の状態に復帰することになる（ステップＳ４０６）。また、サーバ２１からの通知などによりサーバ２１が正規運用の状態に復帰したことを確認したＫＶＳシステム管理装置２２は、代替サーバ２３に対して終了を通知する。これにより、代替サーバ２３は停止することになる（ステップＳ４０７）。
【０１１２】
このように、本実施形態における分散ＫＶＳシステム３のクライアント１は、サーバ２１に対する書き込み処理の失敗後、代替サーバ２３に書き込み処理を行う際に、要確認のフラグを付与するよう構成されている。つまり、代替サーバ２３は、要確認のフラグが付与されたＫＶデータを取得するよう構成されている。このような構成により、代替サーバ２３は、自身が記憶していないキー値を有するＫＶデータであって、要確認のフラグが付与されたＫＶデータを取得した場合、当該キー値と同じキー値を有するＫＶデータを記憶する他のサーバ２１かたＫＶデータを取得することが出来る。その結果、代替サーバ３は、最新のバージョンのＫＶデータを格納することが可能となり、代替サーバ３が最新の更新履歴を保持することが保証されることになる。これにより、分散ＫＶＳシステム３は、代替サーバ３に対する読み込み処理を許容することが可能となる。
【０１１３】
また、本実施形態における分散ＫＶＳシステム３は、サーバ２１とは別に代替サーバ２３を有している。このような構成により、サーバ２１がダウンした場合、代替サーバ２３は、サーバ２１がダウンした後の更新履歴のみを保持することになる。その結果、当該更新履歴の全てを送信すればよいこととなり、更新履歴を選別する手間を省くとともに、サーバ復旧時に送信する情報を減らすことが可能となる。また、ネットワーク効率の良い方法で更新履歴を送信することが可能となる。
【０１１４】
［第２の実施形態］
本発明の第２の実施形態では、データ記憶部４１に障害が発生した際にデータ記憶部４１の代わりにデータを記憶する代替記憶部４２を有するデータベースシステム４について説明する。本実施形態におけるデータベースシステム４は、同一のキー値を有するデータを複数のデータ記憶部４１で記憶している。なお、本実施形態では、データベースシステム４の構成の概要について説明する。
【０１１５】
図２７を参照すると、データベースシステム４は、複数のデータ記憶部４１と、代替記憶部４２と、制御部４３と、を有している。
【０１１６】
データ記憶部４１は、一意の標識であるキー値と保存する対象を示すバリュー値との組み合わせでデータを格納する。
【０１１７】
代替記憶部４２は、データ記憶部４１の障害時に当該データ記憶部４１の代わりにデータを格納する。
【０１１８】
制御部４３は、代替記憶部４２を制御する。制御部４３は、代替記憶部４２が保存対象となる所定のデータを取得した場合、当該取得したデータと同一のキー値を持つデータの保存先となるデータ記憶部４１から当該同一のキー値を有するデータを取得する。そして、制御部４３は、データ記憶部４１から取得したデータと所定のデータとのうちの最新のデータを代替記憶部４２に格納する。
【０１１９】
このように、本実施形態におけるデータベースシステム４は、代替記憶部４２と、制御部４３と、を有している。このような構成により、制御部４３は、代替記憶部４２が保存対象となる所定のデータを取得した場合、当該取得したデータと同一のキー値を持つデータの保存先となるデータ記憶部４１から当該同一のキー値を有するデータを取得することが出来る。また、その結果、制御部４３は、データ記憶部４１から取得したデータと所定のデータとのうちの最新のデータを代替記憶部４２に格納することが出来る。これにより、代替記憶部４２が記憶するデータが最新のデータであることを保証することが可能となる。そのため、代替記憶部４２に対する読み込み処理を許容することが可能となる。
【０１２０】
また、上記データベースシステム４は、当該データベースシステム４に所定のプログラムが組み込まれることで実現できる。具体的に、本発明の他の形態であるプログラムは、情報処理装置に、データ記憶部の障害時に当該データ記憶部の代わりにデータを格納する代替記憶部が保存対象となる所定のデータを取得した場合、当該取得したデータと同一のキー値を持つデータの保存先となるデータ記憶部から当該同一のキー値を有するデータを取得し、当該データ記憶部から取得したデータと所定のデータとのうちの最新のデータを代替記憶部に格納する制御手段を実現させるプログラムである。
【０１２１】
また、上述したデータベースシステム４が作動することにより実行される情報記憶方法は、保存対象となる所定のデータを取得した場合に、当該取得したデータと同一のキー値を持つデータの保存先となるデータ記憶部から当該同一のキー値を有するデータを取得し、当該データ記憶部から取得したデータと前記所定のデータとのうちの最新のデータを格納する、という方法である。
【０１２２】
上述した構成を有する、プログラム、又は、情報記憶方法、の発明であっても、上記データベースシステム４と同様の作用を有するために、上述した本発明の目的を達成することが出来る。
【０１２３】
＜付記＞
上記実施形態の一部又は全部は、以下の付記のようにも記載されうる。以下、本発明におけるデータベースシステムなどの概略を説明する。但し、本発明は、以下の構成に限定されない。
【０１２４】
（付記１）
同一のキー値を有するデータを複数のデータ記憶部で記憶するデータベースシステムであって、
一意の標識であるキー値と保存する対象を示すバリュー値との組み合わせでデータを格納する複数のデータ記憶部と、
前記データ記憶部の障害時に当該データ記憶部の代わりにデータを格納する代替記憶部と、
前記代替記憶部の記憶処理を制御する制御部と、を有し、
前記制御部は、前記代替記憶部が保存対象となる所定のデータを取得した場合、当該取得したデータと同一のキー値を持つデータの保存先となる前記データ記憶部から、当該同一のキー値を有するデータを取得し、当該データ記憶部から取得したデータと前記所定のデータとのうちの最新のデータを前記代替記憶部に格納する
データベースシステム。
【０１２５】
（付記２）
付記１に記載のデータベースシステムであって、
前記制御部は、前記代替記憶部が当該代替記憶部自身に格納されていないキー値を有するデータを取得した場合、当該取得したデータと同一のキー値を持つデータの保存先となる前記データ記憶部から、当該同一のキー値を有するデータを取得し、当該データ記憶部から取得したデータと前記自身に格納されていないキー値を有するデータとのうちの最新のデータを前記代替記憶部に格納する
データベースシステム。
【０１２６】
（付記３）
付記１又は２に記載のデータベースシステムであって、
前記制御部は、前記代替記憶部が前記データ記憶部を確認する旨のフラグが付与されたデータを取得した場合、当該取得したデータと同一のキー値を持つデータの保存先となる前記データ記憶部から、当該同一のキー値を有するデータを取得し、当該データ記憶部から取得したデータと前記フラグが付与されたデータとのうちの最新のデータを前記代替記憶部に格納する
データベースシステム。
【０１２７】
（付記４）
付記１乃至３のいずれかに記載のデータベースシステムであって、
前記データ記憶部に対する処理を指示する処理指示部を有し、
前記処理指示部は、前記複数のデータ記憶部にデータを書き込む際に予め定められた数の前記データ記憶部に対して対象のデータを送信するよう構成され、当該データの送信に失敗した場合、前記データ記憶部を確認する旨のフラグを付与したデータを前記代替記憶部に送信する
データベースシステム。
【０１２８】
（付記５）
付記４に記載のデータベースシステムであって、
前記複数のデータ記憶部と前記代替記憶部とを管理するデータ記憶管理部を有し、
前記処理指示部は、前記データ記憶部に対するデータの送信に失敗した場合、当該データの送信に失敗した旨を示す送信失敗通知を前記データ記憶管理部に通知し、
前記データ記憶管理部は、前記送信失敗通知に応じて、前記代替記憶部にデータを送信するよう前記処理指示部に指示する
データベースシステム。
【０１２９】
（付記５−１）
付記５に記載のデータベースシステムであって、
前記データ管理部は、前記送信失敗通知に応じて前記代替記憶部を起動させた後、当該起動させた代替記憶部にデータを送信するよう前記処理指示部に指示する
データベースシステム。
【０１３０】
（付記６）
付記１乃至５のいずれかに記載のデータベースシステムであって、
前記データ記憶部に対する処理を指示する処理指示部を有し、
前記処理指示部は、前記データ記憶部からデータを読み出す際に予め定められた数の前記データ記憶部から対象のデータを取得するよう構成され、当該データの取得に失敗した場合、前記代替記憶部からデータを取得する
データベースシステム。
【０１３１】
（付記７）
付記６に記載のデータベースシステムであって、
前記複数のデータ記憶部と前記代替記憶部とを管理するデータ記憶管理部を有し、
前記処理指示部は、前記データ記憶部からデータの取得に失敗すると、当該データの取得に失敗した旨を示す取得失敗通知を前記データ記憶管理部に通知し、
前記データ記憶管理部は、前記取得失敗通知に応じて、前記代替記憶部からデータを取得するよう前記処理指示部に指示する
データベースシステム。
【０１３２】
（付記７−１）
付記７に記載のデータベースシステムであって、
前記制御部は、前記処理指示部が前記代替記憶部からデータを取得する際に当該代替記憶部が対象のデータを記憶していない場合に、対象のデータを記憶する他のデータ記憶部からデータを取得するよう前記処理指示部に通知する
データベースシステム。
【０１３３】
（付記８）
付記１乃至７のいずれかに記載のデータベースシステムであって、
前記代替記憶部は、データの更新の履歴を格納する
データベースシステム。
【０１３４】
（付記８−１）
付記１乃至８のいずれかに記載のデータベースシステムであって、
前記制御部は、前記代替記憶部が当該代替記憶部自身に格納されているデータと同一のキー値を有するデータを取得した場合、自身に格納されているデータと取得したデータとを比較して、新しい方のデータを格納する
データベースシステム。
【０１３５】
（付記８−２）
付記１乃至８−１のいずれかに記載のデータベースシステムであって、
障害が復旧した前記データ記憶部は、一時的にデータを記憶しつつ、当該データ記憶部が当該データ記憶部に障害が発生する前までに記憶するデータと前記代替記憶部が記憶するデータとを結合し、当該結合処理の後、当該データ記憶部に対する処理を禁止して、前記結合処理の結果のデータと一時的に記憶したデータとを結合する
データベースシステム。
【０１３６】
（付記９）
保存対象となる所定のデータを取得した場合に、当該取得したデータと同一のキー値を持つデータの保存先となるデータ記憶部から当該同一のキー値を有するデータを取得し、当該データ記憶部から取得したデータと前記所定のデータとのうちの最新のデータを格納する
情報記憶方法。
【０１３７】
（付記１０）
情報処理装置に、
データ記憶部の障害時に当該データ記憶部の代わりにデータを格納する代替記憶部が保存対象となる所定のデータを取得した場合、当該取得したデータと同一のキー値を持つデータの保存先となるデータ記憶部から当該同一のキー値を有するデータを取得し、当該データ記憶部から取得したデータと前記所定のデータとのうちの最新のデータを前記代替記憶部に格納する制御手段を実現させる
プログラム。
【０１３８】
なお、上記各実施形態及び付記において記載したプログラムは、記憶装置に記憶されていたり、コンピュータが読み取り可能な記録媒体に記録されていたりする。例えば、記録媒体は、フレキシブルディスク、光ディスク、光磁気ディスク、及び、半導体メモリ等の可搬性を有する媒体である。
【０１３９】
以上、上記各実施形態を参照して本願発明を説明したが、本願発明は、上述した実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明の範囲内で当業者が理解しうる様々な変更をすることが出来る。
【符号の説明】
【０１４０】
１  クライアント
２  分散ＫＶＳ
２１  サーバ
２２  ＫＶＳシステム管理装置
２３  代替サーバ
２３１  制御部
２３２  データ記憶部
３  分散ＫＶＳシステム
４  データベースシステム
４１  データ記憶部
４２  代替記憶部
４３  制御部
【図１】
0006459702.tif 000002
【図２】
0006459702.tif 000003
【図３】
0006459702.tif 000004
【図４】
0006459702.tif 000005
【図５】
0006459702.tif 000006
【図６】
0006459702.tif 000007
【図７】
0006459702.tif 000008
【図８】
0006459702.tif 000009
【図９】
0006459702.tif 000010
【図１０】
0006459702.tif 000011
【図１１】
0006459702.tif 000012
【図１２】
0006459702.tif 000013
【図１３】
0006459702.tif 000014
【図１４】
0006459702.tif 000015
【図１５】
0006459702.tif 000016
【図１６】
0006459702.tif 000017
【図１７】
0006459702.tif 000018
【図１８】
0006459702.tif 000019
【図１９】
0006459702.tif 000020
【図２０】
0006459702.tif 000021
【図２１】
0006459702.tif 000022
【図２２】
0006459702.tif 000023
【図２３】
0006459702.tif 000024
【図２４】
0006459702.tif 000025
【図２５】
0006459702.tif 000026
【図２６】
0006459702.tif 000027
【図２７】
0006459702.tif 000028