(57)【要約】【課題】ユーザ定義による更新関数の可換性及び冪等性を検証する。【解決手段】分散データ共有装置で各ストレージを管理するサーバ３０に初期化関数の呼び出しがあると、オリジナルデータ管理表３２を複製した検証用データ管理表３４を作成する。また、サーバ３０に更新関数の呼び出しがあると、更新関数を用いてオリジナルデータ管理表３２を更新する一方、更新履歴管理表３６に更新関数の引数を順次登録する。そして、サーバ３０に参照関数の呼び出しがあると、更新履歴管理表３６から所定規則に則って選定された少なくとも１つの引数を更新履歴管理表３６に追加登録した後、これを更新関数に順次適用しつつ検証用データ管理表３４に格納する。その後、オリジナルデータ管理表３２と検証用データ管理表３４とを比較し、これらが異なっていればエラーメッセージ出力などの所定のエラー処理を実行する。【選択図】図２
2010123030.tif 000002
【特許請求の範囲】
【請求項１】
分散データ共有装置で各ストレージを管理するサーバに、
初期化関数の呼び出しがあったときに、オリジナルデータを複製した検証用データを作成するステップと、
更新関数の呼び出しがあったときに、前記更新関数を用いて前記オリジナルデータを更新する一方、前記更新関数の引数を更新履歴に順次登録するステップと、
参照関数の呼び出しがあったときに、前記更新履歴の中から所定規則に則って選定された少なくとも１つの引数を前記更新履歴に追加登録した後、前記更新履歴に登録された引数を前記更新関数に順次適用しつつ前記検証用データに格納するステップと、
前記オリジナルデータと格納された検証用データとを比較し、これらが異なっていれば所定のエラー処理を実行するステップと、
を実行させるための更新関数検証プログラム。
【請求項２】
前記参照関数の呼び出しに応答するステップは、前記更新履歴の中から所定規則に則って選定された少なくとも１つの引数を前記更新履歴に追加登録して並べ替えた後、前記更新履歴に登録された引数を前記更新関数に順次適用しつつ前記検証用データに格納することを特徴とする請求項１記載の更新関数検証プログラム。
【請求項３】
分散データ共有装置で各ストレージを管理するサーバに、
初期化関数の呼び出しがあったときに、オリジナルデータを複製した検証用データを作成するステップと、
更新関数の呼び出しがあったときに、前記更新関数を用いて前記オリジナルデータを更新する一方、前記更新関数の引数を更新履歴に順次登録するステップと、
参照関数の呼び出しがあったときに、前記更新履歴に登録された引数を並べ替えた後、前記更新履歴に登録された引数を前記更新関数に順次適用しつつ前記検証用データに格納するステップと、
前記オリジナルデータと格納された検証用データとを比較し、これらが異なっていれば所定のエラー処理を実行するステップと、
を実行させるための更新関数検証プログラム。
【請求項４】
分散データ共有装置で各ストレージを管理するサーバが、
初期化関数の呼び出しがあったときに、オリジナルデータを複製した検証用データを作成するステップと、
更新関数の呼び出しがあったときに、前記更新関数を用いて前記オリジナルデータを更新する一方、前記更新関数の引数を更新履歴に順次登録するステップと、
参照関数の呼び出しがあったときに、前記更新履歴の中から所定規則に則って選定された少なくとも１つの引数を前記更新履歴に追加登録した後、前記更新履歴に登録された引数を前記更新関数に順次適用しつつ前記検証用データに格納するステップと、
前記オリジナルデータと格納された検証用データとを比較し、これらが異なっていれば所定のエラー処理を実行するステップと、
を実行することを特徴とする更新関数検証方法。
【請求項５】
前記参照関数の呼び出しに応答するステップは、前記更新履歴の中から所定規則に則って選定された少なくとも１つの引数を前記更新履歴に追加登録して並べ替えた後、前記更新履歴に登録された引数を前記更新関数に順次適用しつつ前記検証用データに格納することを特徴とする請求項４記載の更新関数検証方法。
【請求項６】
初期化関数の呼び出しがあったときに、オリジナルデータを複製した検証用データを作成する手段と、
更新関数の呼び出しがあったときに、前記更新関数を用いて前記オリジナルデータを更新する一方、前記更新関数の引数を更新履歴に順次登録する手段と、
参照関数の呼び出しがあったときに、前記更新履歴の中から所定規則に則って選定された少なくとも１つの引数を前記更新履歴に追加登録した後、前記更新履歴に登録された引数を前記更新関数に順次適用しつつ前記検証用データに格納する手段と、
前記オリジナルデータと格納された検証用データとを比較し、これらが異なっていれば所定のエラー処理を実行する手段と、
を備えたことを特徴とする情報処理装置。
【請求項７】
前記参照関数の呼び出しに応答する手段は、前記更新履歴の中から所定規則に則って選定された少なくとも１つの引数を前記更新履歴に追加登録して並べ替えた後、前記更新履歴に登録された引数を前記更新関数に順次適用しつつ前記検証用データに格納することを特徴とする請求項６記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザが更新関数を定義可能な分散データ共有装置において、更新関数の可換性及び冪等性を検証する技術に関する。
【背景技術】
【０００２】
トラフィックが多いＷｅｂサイトなどでは、性能向上を目的として、複数のサーバでデータを共有する分散データ共有装置が利用されている。分散データ共有装置では、障害に対する可用性及び参照に対するスループットを確保するため、マスタデータのレプリカ（複製）を複数のサーバで夫々保持する場合がある。この場合、レプリカの一貫性を保ちつつ並列更新のスループットを向上させるために、データを更新する更新関数が可換性及び冪等性を満たすように設計することが望ましい。可換性を満たせば、更新関数の更新順序を気にせずにレプリカを更新することができ、冪等性を満たせば、ある更新関数でレプリカを更新した後に、同じ更新関数でそのレプリカを再度更新することができる。そのため、更新をするための制御が簡単になって、分散データ共有装置全体の負荷を減らすことができるからである。ここで、更新関数とは、データを更新する規則を定義した関数のことをいう。更新関数が可換性を満たすとは、データに対する更新の適用順序を変えても、その結果が変わらないことをいう。一方、更新関数が冪等性を満たすとは、データに対して同じ更新を複数回適用しても、一度のみ適用した場合とその結果が変わらないことをいう。可換性及び冪等性を満たす更新関数の一例として、例えば、２つの値を比較してより大きい方の値を保持する関数がある。
【０００３】
また、このような分散データ共有装置の中には、アプリケーション開発者などのユーザが更新関数を定義できる機能を備えたものがある。この場合、ユーザ定義の更新関数は、可換性及び冪等性を満たす必要がある。
【特許文献１】特開２０００−２０７２４６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、ユーザ定義の更新関数が、実際に可換性及び冪等性を満たしているか否かを検証することは、次のような理由から困難であった。即ち、更新関数が可換性及び冪等性を満たしていなくとも、分散データ共有装置は一見正常に動作することが多いため、レプリカの一貫性が保たれていないことに気付くまで、更新関数が不適切であることが発覚されない。また、レプリカの状態は並列更新の順序に依存するため、更新関数が不適切となるケースを再現することも難しい。さらに、更新関数が可換性及び冪等性を満たしているか否かを、例えば、コンパイラなどで事前に証明することも難しい。
【０００５】
そこで、従来技術の問題点に鑑み、本発明は、ユーザ定義による更新関数が可換性及び冪等性を満たしているか否かを検証できるようにした技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
初期化関数の呼び出しに応答して、オリジナルデータを複製した検証用データを作成する。また、更新関数の呼び出しに応答して、更新関数を用いてオリジナルデータを更新する一方、更新関数の引数を更新履歴に順次登録する。そして、参照関数の呼び出しに応答して、更新履歴の中から所定規則に則って選定された少なくとも１つの引数を更新履歴に追加登録した後、更新履歴に登録された引数を更新関数に順次適用しつつ検証用データに格納する。その後、オリジナルデータと検証用データとを比較し、これらが異なっていれば所定のエラー処理を実行する。なお、更新履歴の中から所定規則に則って選定された少なくとも１つの引数を更新履歴に追加登録した後、更新履歴に登録された引数を並べ替えてもよい。
【発明の効果】
【０００７】
開示する技術によれば、更新順序及び更新回数を夫々変更した更新が検証用データに適用されるため、ユーザ定義による更新関数が可換性及び冪等性を満たしているか否かをユーザが検証することができる。また、サーバに情報処理装置が組み込まれているため、実際の運用状態での検証を行うことができる。
【発明を実施するための最良の形態】
【０００８】
以下、添付された図面を参照して本発明の実施形態を詳述する。
図１は、クライアントサーバシステムを利用した分散データ共有装置の一例を示す。なお、本実施形態の分散データ共有装置は、アプリケーション開発者などのユーザが更新関数を定義できる機能を備えている。
【０００９】
分散データ共有装置１０は、ＬＡＮ（Local Area Network）などのネットワーク２０を介して接続される複数のサーバ３０と、各サーバ３０により管理されるハードディスクなどのストレージ４０と、を含む。各ストレージ４０には、マスタデータを複製したレプリカがオリジナルデータとして夫々格納される。ここで、マスタデータとは、各ストレージ４０において整合性がとれた基本データのことをいう。また、各サーバ３０は、インターネットなどのネットワーク５０を介して、分散データ共有装置１０上にあるオリジナルデータに対して初期化関数、更新関数及び参照関数を発行する少なくとも１つのクライアント６０に接続される。
【００１０】
サーバ３０には、図２に示すように、オリジナルデータ管理表３２，検証用データ管理表３４及び更新履歴管理表３６を夫々保持する保持部３８が備え付けられている。
オリジナルデータ管理表３２及び検証用データ管理表３４は、オリジナルデータ及び更新関数の可換性・冪等性を検証するために用いる検証用データを夫々管理するためのものであって、図３に示すように、ユーザ定義による更新関数で使用される変数を特定する「キー」に「値」を対応付けたレコードが登録される。
【００１１】
更新履歴管理表３６は、クライアント６０から呼び出された更新関数の引数である「値」を更新履歴として保持するものであって、図４に示すように、「キー」に「更新履歴」を対応付けたレコードが登録される。
【００１２】
また、サーバ３０は、ハードディスクなどの外部記憶装置にインストールされた更新関数検証プログラムを実行することで、図２に示すように、初期化部３０Ａ，更新部３０Ｂ及び参照部３０Ｃの機能を夫々実現する。
【００１３】
初期化部３０Ａは、クライアント６０から初期化関数が呼び出されたときに、オリジナルデータ管理表３２，検証用データ管理表３４及び更新履歴管理表３６を夫々初期化する。初期化関数の引数は、初期化対象を示す「キー」及びその初期値を示す「値」である。初期化部３０Ａは、初期化関数の呼び出しに応答するステップ及び手段を夫々具現化する。ここで、「初期化」とは、「キー」に対応付けて「初期値」を登録することを意味する。
【００１４】
更新部３０Ｂは、クライアント６０から更新関数が呼び出されたときに、オリジナルデータ管理表３２を更新すると共に、更新履歴管理表３６に更新関数の引数を順次登録する。更新関数の引数は、更新対象を示す「キー」及びその「値」である。更新部３０Ｂは、更新関数の呼び出しに応答するステップ及び手段を夫々具現化する。
【００１５】
参照部３０Ｃは、クライアント６０から参照関数が呼び出されたときに、オリジナルデータ管理表３２を参照して参照関数に対する結果をクライアント６０に返却すると共に、更新履歴管理表３６に登録された更新履歴に基づいて検証用データ管理表３４を更新する。そして、参照部３０Ｃは、オリジナルデータ管理表３２のレコードと検証用データ管理表３４のレコードとの比較を通して、ユーザ定義の更新関数が可換性及び冪等性を満たしているか否かを判定する。参照関数の引数は、参照対象を示す「キー」である。参照部３０Ｃは、参照関数の呼び出しに応答する各ステップ及び各手段を夫々具現化する。
【００１６】
図５は、初期化部３０Ａが、クライアント６０から初期化関数（ｉｎｉｔ関数）が呼び出されたときに実行する初期化処理を示す。また、初期化処理を実行するときには、オリジナルデータ管理表３２，検証用データ管理表３４及び更新履歴管理表３６が夫々クリアされるものとする。
【００１７】
ステップ１（図では「Ｓ１」と略記する。以下同様）において、初期化部３０Ａは、クライアント６０が呼び出した初期化関数の引数の「キー」とその「値」とを対応付けて、オリジナルデータ管理表３２に登録する。
【００１８】
ステップ２において、初期化部３０Ａは、クライアント６０が呼び出した初期化関数の引数の「キー」とその「値」とを対応付けて、検証用データ管理表３４に登録する。
ステップ３において、初期化部３０Ａは、クライアント６０が呼び出した初期化関数の引数の「キー」を更新履歴管理表３６に登録する。
【００１９】
この初期化処理によれば、クライアント６０から初期化関数の呼び出しがあったことを契機として、初期化部３０Ａが、オリジナルデータ管理表３２，検証用データ管理表３４及び更新履歴管理表３６を夫々初期化する。即ち、初期化関数の呼び出しに応答して、オリジナルデータ（オリジナルデータ管理表３２）を複製した検証用データ（検証用データ管理表３４）が作成される。
【００２０】
図６は、更新部３０Ｂが、クライアント６０から更新関数（ｕｐｄａｔｅ関数）が呼び出されたときに実行する更新処理を示す。
ステップ１１において、更新部３０Ｂは、オリジナルデータ管理表３２を更新する。具体的には、更新部３０Ｂは、オリジナルデータ管理表３２を参照し、引数の「キー」に対応付けられたオリジナルデータ管理表３２内の値について、引数の「値」を適用した更新関数で更新する。なお、更新関数の定義によっては、オリジナルデータ管理表３２の値が更新されないこともあり得る。
【００２１】
ステップ１２において、更新部３０Ｂは、更新履歴管理表３６を参照し、引数の「キー」に対応付けられた更新履歴に、引数の「値」を追加登録する。
この更新処理によれば、クライアント６０から更新関数が呼び出されたことを契機として、更新部３０Ｂが、オリジナルデータ管理表３２を適宜更新する。また、更新部３０Ｂは、検証用データ管理表３４を更新せず、引数の「キー」に対応付けられた、更新履歴管理表３６に記録された更新履歴に「値」を追加登録する。
【００２２】
図７は、参照部３０Ｃが、クライアント６０から参照関数（ｇｅｔ関数）が呼び出されたときに実行する参照処理を示す。
ステップ２１において、参照部３０Ｃは、参照関数の引数の「キー」に対応付けられた更新履歴を更新履歴管理表３６から取得し、これをリスト化した更新リストを生成する。
【００２３】
ステップ２２において、参照部３０Ｃは、更新リストに値が登録されているか否かを判定する。そして、参照部３０Ｃは、更新リストに値が登録されていればステップ２３へと進む一方（Ｙｅｓ）、更新リストに値が登録されていなければステップ２８へと進む（Ｎｏ）。
【００２４】
ステップ２３において、参照部３０Ｃは、更新リストに登録された値の中から所定規則に沿って少なくとも１つの値を選定し、これを更新リストに追加登録する。ここで、所定規則としては、例えば、すべての値，ユーザが指定した確率に基づくランダムな選定方法などを適用することができる。
【００２５】
ステップ２４において、参照部３０Ｃは、更新リストに登録された値を並べ替える。更新リストに登録された値の並べ替えはランダムでもよい。
ステップ２５において、参照部３０Ｃは、検証用データ管理表３４に対して、更新リストに登録された値を更新関数に順次適用しつつ、検証用データ管理表３４に格納する。
【００２６】
ステップ２６において、参照部３０Ｃは、オリジナルデータ管理表３２と検証用データ管理表３４とを比較し、各キーに対応付けられた２つの値が異なるか否かを判定する。そして、参照部３０Ｃは、２つの値が異なっていればステップ２７へと進み（Ｙｅｓ）、所定のエラー処理を実行する。ここで、所定のエラー処理としては、例えば、エラーメッセージを表示したり、ユーザ定義のエラー処理を実行するなどの処理を適用できる。一方、参照部３０Ｃは、２つの値が同じであればステップ２８へと進む（Ｎｏ）。なお、オリジナルデータ管理表３２と検証用データ管理表３４との比較結果を表示するようにしてもよい。
【００２７】
ステップ２８において、参照部３０Ｃは、オリジナルデータ管理表３２を参照し、参照関数の引数の「キー」に対応付けられた値をクライアント６０に返却する。
この参照処理によれば、クライアント６０から参照関数が呼び出されたことを契機として、参照部３０Ｃが、更新履歴管理表３６から、引数の「キー」に対応付けられた更新履歴を取得し、更新リストを生成する。そして、参照部３０Ｃが、更新リストに登録された値の中から所定規則に則って少なくとも１つの値を選定し、これを更新リストに追加登録する。その後、参照部３０Ｃが、更新リストに登録された値を並べ替え、これを検証用データ管理表３４に順次適用する。更新リストに登録された値の適用が完了すると、参照部３０Ｃが、オリジナルデータ管理表３２と検証用データ管理表３４とを比較し、各キーに対応する２つの値が異なっていれば、ユーザ定義による更新関数は可換性及び冪等性を満たしていないと判断して所定のエラー処理を実行する。
【００２８】
従って、このような情報処理装置によれば、更新順序及び更新回数を夫々変更した更新が検証用データに適用されるため、従来技術では困難であった、ユーザ定義による更新関数が可換性及び冪等性を満たしているか否かの検証をユーザが行うことができる。このため、可換性及び冪等性を満たす更新関数を利用することで、レプリカごとに更新順序が異なり、また、同じ更新が重複して適用されても、更新結果が同じ値となることを一定の確率で保障できる。よって、更新順序及び更新回数を管理するためのオーバヘッドが不要となり、更新のスループットを向上させることができる。また、分散データ共有装置１０に情報処理装置が組み込まれているため、実際の運用状態での検証を行うことができる。さらに、オリジナルデータ管理表３２及び検証用データ管理表３４は、ユーザ定義による更新関数で更新される値についてのみ作成されるので、更新関数の検証による負荷増加を抑制することができる。
【００２９】
ここで、情報処理装置の理解を容易ならしめるべく、具体例について説明する。
３つの変数（ｘ，ｙ，ｚ）の最大値を保持するケースを想定する。この場合、更新関数ｆ()は、現在値（current_value）と更新値（update_value）とを比較し、大きいものを返却するという定義になる。更新関数ｆ()は、例えば、オープンソースのプログラミング言語であるpython（パイソン）で実装すると、次のようになる。
【００３０】
def f(current_value, update_value):
if (current_value < update_value):
return update_value
else:
return current_value
また、変数（ｘ，ｙ，ｚ）の初期値は、夫々０とする。
【００３１】
クライアント６０からサーバ３０に対して初期化関数が呼び出されると、初期化部３０Ａは、オリジナルデータ管理表３２，検証用データ管理表３４及び更新履歴管理表３６を、図８（Ａ）〜（Ｃ）に示す状態に夫々初期化する。そして、変数ｘを１，−３，５，２，５，３の順番で更新する更新関数がクライアント６０から順次呼び出されると、更新部３０Ｂは、更新関数ｆ()を用いて、オリジナルデータ管理表３２を、図９（Ａ）に示す状態に更新する。即ち、更新部３０Ｂは、変数ｘの最大値である「５」をキー“ｘ”に対応付けて、オリジナルデータ管理表３２に格納する。一方、更新部３０Ｂは、更新関数の呼出により検証用データ管理表３４を更新せず、図９（Ｂ）に示すように、検証用データ管理表３４を初期状態に維持する。また、更新部３０Ｂは、キー“ｘ”に対応付けられた更新履歴として、図９（Ｃ）に示すように、更新履歴管理表３６に値１，−３，５，２，５，３を登録する。
【００３２】
図９の状態において、クライアント６０からサーバ３０に対して変数ｘの参照関数が呼び出されると、参照部３０Ｃが、図１０に示すように、更新履歴管理表３６から、キー“ｘ”に対応付けられた更新履歴（１，−３，５，２，５，３）を取得して更新リストを生成し、その中から所定規則に則って選定した値−３，２，３を更新リストの末尾に追加登録する。そして、参照部３０Ｃは、更新リストに登録された値を並べ替え、並べ替えられた値を更新関数に順次適用して、その結果を検証用データ管理表３４に格納する。その後、参照部３０Ｃは、オリジナルデータ管理表３２及び検証用データ管理表３４を参照し、キー“ｘ”に対応付けられたオリジナルデータ管理表３２の値と検証用データ管理表３４の値との２つの値が異なっているか否か判定する。図示の例では、オリジナルデータ管理表３２の値が「５」、検証用データ管理表３４の値が「５」で同じであるので、ユーザ定義の更新関数ｆ()は可換性及び冪等性を満たしていると判断される。一方、オリジナルデータ管理表３２の値と検証用データ管理表３４との値が異なっていれば、ユーザ定義の更新関数ｆ()は可換性及び冪等性を満たしていないと判断される。
【００３３】
開示の情報処理装置では、更新関数を検証するために、オリジナルデータ管理表３２及び検証用データ管理表３４を利用したが、更新関数に応じて適宜更新されるオリジナルデータ、及び、オリジナルデータを複製した検証用データを利用してもよい。但し、オリジナルデータ管理表３２及び検証用データ管理表３４を利用することで、更新関数の検証のためにアクセスするデータ量が小さくなり、分散データ共有装置１０のレスポンス低下を抑制することができる。
【００３４】
また、検証対象となるオリジナルデータは、ユーザにより任意の方法で指定されるようにしてもよい。オリジナルデータの指定方法としては、例えば、分散データ共有装置１０の起動時にサーバ及びオリジナルデータをユーザに指定させたり、サーバ及びオリジナルデータをランダムに選択する確率をユーザに指定させたりする方法が適用できる。このようにすれば、検証対象となるオリジナルデータが絞られることで、更新関数の検証に要する負荷が低減し、分散データ共有装置１０のレスポンス低下を抑制することができる。
【図面の簡単な説明】
【００３５】
【図１】クライアントサーバシステムを利用した分散データ共有装置の構成図
【図２】サーバの機能ブロック図
【図３】オリジナルデータ管理表及び検証用データ管理表のデータ構造説明図
【図４】更新履歴管理表のデータ構造説明図
【図５】初期化部において実行される初期化処理のフローチャート
【図６】更新部において実行される更新処理のフローチャート
【図７】参照部において実行される参照処理のフローチャート
【図８】初期化された各管理表の一例を示し、（Ａ）〜（Ｃ）は夫々オリジナルデータ管理表，検証データ管理表及び更新履歴管理表の説明図
【図９】更新された各管理表の一例を示し、（Ａ）〜（Ｃ）は夫々オリジナルデータ管理表，検証データ管理表及び更新履歴管理表の説明図
【図１０】参照時になされる処理の一例を示す説明図
【符号の説明】
【００３６】
１０    分散データ共有装置
３０    サーバ
３０Ａ  初期化部
３０Ｂ  更新部
３０Ｃ  参照部
３２    オリジナルデータ管理表
３４    検証用データ管理表
３６    更新履歴管理表
３８    保持部
４０    ストレージ
【図１】
2010123030.tif 000003
【図２】
2010123030.tif 000004
【図３】
2010123030.tif 000005
【図４】
2010123030.tif 000006
【図５】
2010123030.tif 000007
【図６】
2010123030.tif 000008
【図７】
2010123030.tif 000009
【図８】
2010123030.tif 000010
【図９】
2010123030.tif 000011
【図１０】
2010123030.tif 000012