(58)【調査した分野】(Int.Cl.,DB名)
前記受信部が他の前記サーバ装置から受信した前記候補データの前記現順序番号が、前記履歴データの現順序番号よりも大きい場合、前記第2記憶部の前記候補データを削除し、前記現順序番号を送信した他の前記サーバ装置に、前記履歴データの送信を依頼する同期部を
更に備える請求項7に記載の情報処理システム。
データの変更内容を示すリクエストと、前記リクエストを記憶する順序を示す順序番号とを関連付けた履歴データを記憶する第1記憶部を備え、クライアント装置から前記リクエストを受信するサーバ装置を、
前記リクエストを前記クライアント装置から受信し、まだ使用されていない前記順序番号を示す現順序番号と、前記現順序番号を使用して履歴データに登録する候補となる前記リクエストと、前記リクエストの状態とを含む候補データを他の前記サーバ装置から受信する受信部と、
前記クライアント装置から受信した前記リクエストの状態を第1状態に決定し、前記第1状態のリクエストと、前記現順序番号とを含む候補データを生成する生成部と、
前記候補データの前記リクエストのうち前記変更内容が同一の前記リクエストの数が第1閾値より大きい場合、前記変更内容が同一のリクエストのうち一の前記リクエストを選択し、選択された前記リクエストの状態を第2状態に決定する選択部と、
選択された前記リクエストを含む前記候補データを他の前記サーバ装置に送信する送信部と、
前記候補データの前記リクエストのうち、状態が前記第2状態の前記リクエストの数が第2閾値より大きい場合、前記第2状態の前記リクエストを含む前記候補データのうち一の前記候補データを使用して前記履歴データを更新するとともに前記データを変更する変更部
として機能させるためのプログラム。
【発明を実施するための形態】
【0010】
以下、添付図面を参照して実施形態の情報処理システム、サーバ装置、情報処理方法及びプログラムについて説明する。
【0011】
図1は、実施形態の情報処理システムの構成の一例を示す図である。本実施形態の情報処理システム100は、サーバ装置10−1、・・・、サーバ装置10−n(nは3以上の整数)と、クライアント装置20−1、・・・、クライアント装置20−m(mは1以上の整数)と、ネットワーク30とを備える。以下、サーバ装置10−1、・・・、及びサーバ装置10−nを区別する必要がない場合は単にサーバ装置10という。同様に、クライアント装置20−1、・・・、及びクライアント装置20−mを区別する必要がない場合は、単にクライアント装置20という。
【0012】
サーバ装置10及びクライアント装置20は、互いに通信できるようにネットワーク30を介して接続されている。なお、サーバ装置10及びクライアント装置20との間の通信手段は、有線であっても無線であってよく、また、両方を組み合わせてもよい。サーバ装置10−1、・・・、及びサーバ装置10−nは、データを記憶する。クライアント装置20は、送信部21を備える。送信部21は、サーバ装置10のデータの変更内容を示すリクエストを任意のサーバ装置10に送信する。
【0013】
図2は、実施形態のサーバ装置10の構成の一例を示す図である。本実施形態のサーバ装置10は、第1記憶部11、第2記憶部12、受信部13、生成部14、選択部15、変更部16、同期部17及び送信部18を備える。
【0014】
第1記憶部11は、データ及び履歴データを記憶する。データは、例えばデータベースのデータである。履歴データは、例えば当該データベースのジャーナルである。サーバ装置10が第1記憶部11に記憶するデータは任意でよい。
【0015】
図3は、実施形態の履歴データの一例を示す図である。履歴データは、順序番号とリクエストとを関連付けた情報である。順序番号は、当該リクエストの変更内容に基づいて第1記憶部11のデータを変更する順序を示す。本実施形態の順序番号の初期値は1である。以下、まだリクエストが関連付けられていない未使用の順序番号を現順序番号という。
図3の例では、順序番号Sが現順序番号である。
【0016】
図2に戻り、第2記憶部12は、各サーバ装置10の候補データ及び現ラウンド番号を一時的に記憶する。候補データは、現順序番号と、当該現順序番号を使用して履歴データに登録する候補となるリクエストと、リクエストの状態と、ラウンド番号と、サーバ識別子とを含む。候補データに含まれるリクエストの状態は、第1状態及び第2状態がある。リクエストの状態は、現順序番号に関連付けるリクエストを決定する処理に使用される情報である。また、ラウンド番号は、現順序番号に関連付けるリクエストを決定する処理に使用される番号である。現順序番号に関連付けるリクエストを決定する処理の詳細な説明は
図4〜8のフローチャートを参照して後述する。サーバ識別子は、各サーバ装置10を識別する識別情報である。例えば、サーバ識別子は、各サーバ装置10に割り当てられた1〜Nのサーバ番号である。候補データに含まれるサーバ識別子により、当該候補データを送信したサーバ装置10を識別することができる。
【0017】
現ラウンド番号は、ラウンド番号の最新の値である。本実施形態の現ラウンド番号の初期値は1である。第2記憶部12の現ラウンド番号及び候補データは、選択部15及び変更部16によって更新される。
【0018】
受信部13は、クライアント装置20からリクエストを受信し、他のサーバ装置10から候補データを受信する。受信部13は、現ラウンド番号が1のときに、クライアント装置20から受信したリクエストを生成部14に送信する。
【0019】
また、受信部13は、受信した候補データを第2記憶部12に一時的に記憶する。このとき、現ラウンドの自身の候補データが決定していない場合には、受信した候補データを当該ラウンドの自身の候補データとし、第2記憶部12に記憶する。受信部13は、第2記憶部12から現ラウンド番号を読み出し、当該現ラウンド番号に応じて、他のサーバ装置10から候補データを受信した旨を示す候補データ受信通知を選択部15又は変更部16に送信する。具体的には、受信部13は、現ラウンド番号が奇数のときに、候補データ受信通知を選択部15に送信する。受信部13は、現ラウンド番号が偶数のときに、候補データ受信通知を変更部16に送信する。
【0020】
また、受信部13は、他のサーバ装置10が履歴データを更新したときに他のサーバ装置10から現順序番号を受信し、当該現順序番号を同期部17に送信し、現順序番号受信契機の履歴データ同期処理を同期部17に依頼する。現順序番号受信契機の履歴データ同期処理については後述する。
【0021】
また、受信部13は、受信した候補データの現順序番号が履歴データの現順序番号よりも大きい場合、候補データ受信契機の履歴データ同期処理を同期部17に依頼する。また、受信部13は、受信した候補データのラウンド番号が現ラウンド番号より大きい場合、段落0019の処理に先だって、同期部17に現ラウンド番号同期処理を依頼する。これらの同期処理により、第2記憶部12に含まれる候補データの順序番号とラウンド番号はすべて同一となる。候補データ受信契機の履歴データ同期処理、及びラウンド番号の同期処理については後述する。
【0022】
受信部13及び後述の同期部17の処理により、サーバ装置10は、他のサーバ装置10よりも、現順序番号に関連付けるリクエストを決定する処理が遅れている場合を判定し、当該処理が遅れている場合は、他のサーバ装置10の処理に合わせる。詳細な説明は、
図5のフローチャートを参照して後述する。
【0023】
生成部14は、現ラウンド番号が1(初期値)のとき、受信部13を介してクライアント装置20から受信したリクエストの状態を第1状態に決定する。生成部14は、第1状態のリクエストと、履歴データの現順序番号と、値が1であるラウンド番号とを含む候補データを生成する。生成部14は、当該候補データを選択部15に送信する。
【0024】
選択部15は、現ラウンド番号が1(初期値)のとき、生成部14から候補データを受信する。また、選択部15は、現ラウンド番号が奇数のとき、候補データ受信通知を受信部13から受信する。選択部15は、候補データ受信通知を受信すると、第2記憶部12から候補データを読み出す。
【0025】
選択部15は、第2記憶部12から読み出した候補データのリクエストのうち変更内容が同一のリクエストの数が閾値より大きい場合、変更内容が同一のリクエストのうち一のリクエストを選択する。なお、本実施形態では、当該閾値をn/2とする。すなわち、当該閾値を情報処理システム100内のサーバ装置10の台数の半分の値とする。しかしながら、当該閾値は、n/2に限られずそれより大きい任意の値でもよい。選択部15は、選択されたリクエストの状態を第2状態にし、選択されたリクエストを含む候補データのラウンド番号を1増やす。選択部15は、選択されなかったリクエストを含む候補データを第2記憶部12から削除し、選択されたリクエストを含む候補データを、送信部18を介して他のサーバ装置10に送信する。選択部15は、第2記憶部12の現ラウンド番号を1増やす。
【0026】
また、選択部15は、第2記憶部12から読み出した候補データのリクエストのうち変更内容が相異なるリクエストがある場合、一の候補データを選択する。具体的には、選択部15は、第2記憶部12から候補データを読み出し、ランダムに一の候補データを選択する。なお、選択部15が一の候補データを選択する方法は、ランダムに一の候補データを選択する方法に限られず、その他の方法でもよい。選択部15は、選択された候補データのラウンド番号を1増やす。選択部15は、選択されなかった候補データを第2記憶部12から削除し、選択された候補データを当該ラウンドの自身の候補データとして決定して第2記憶部12に記憶し、送信部18を介して他のサーバ装置10に送信する。選択部15は、第2記憶部12の現ラウンド番号を1増やす。
【0027】
なお、選択部15が候補データを送信するサーバ装置10は、所定の方法により決定する。当該所定の方法は、例えば、送信先のサーバ装置10をランダムに所定の数だけ選択する方法や、送信先のサーバ装置10を他のサーバ装置10の全てにする等である。
【0028】
変更部16は、現ラウンド番号が偶数のとき、候補データ受信通知を受信部13から受信する。変更部16は、候補データ受信通知を受信すると、第2記憶部12から候補データを読み出す。
【0029】
変更部16は、第2記憶部12から読み出した候補データのリクエストのうち状態が第2状態のリクエストの数が閾値より大きい場合、第2状態のリクエストを含む候補データのうち一の候補データを使用して履歴データを更新するとともにデータを変更する。変更部16は、第2記憶部12の現ラウンド番号を1(初期値)に戻す。また、変更部16は、第1記憶部11の現順序番号を1増やす。また、変更部16は、1増やした後の現順序番号を他のサーバ装置10に送信する。これにより、新たに使用された順序番号を他のサーバ装置10に通知する。
【0030】
また、変更部16は第2記憶部12から読み出した候補データのうち、第1状態のリクエストを含む候補データがあり、かつ、第2状態のリクエストを含む候補データがある場合、第2状態のリクエストを含む候補データのうち一の候補データを選択し、選択された候補データのリクエストの状態を第1状態に決定する。変更部16は、選択された候補データのラウンド番号を1増やす。変更部16は、選択されなかった候補データを第2記憶部12から削除し、選択された候補データを当該ラウンドの自身の候補データとして決定して第2記憶部12に記憶し、送信部18を介して他のサーバ装置10に送信する。選択部15は、第2記憶部12の現ラウンド番号を1増やす。
【0031】
また、変更部16は、第2記憶部12から読み出した候補データのリクエストのうち、状態が第1状態のリクエストの数が閾値より大きい場合、一の候補データを選択する。例えば、変更部16は、ランダムに一の候補データを選択する。なお、変更部16が一の候補データを選択する方法は、ランダムに一の候補データを選択する方法に限られず、その他の方法でもよい。変更部16は、選択された候補データのラウンド番号を1増やす。変更部16は、選択されなかった候補データを第2記憶部12から削除し、選択された候補データを当該ラウンドの自身の候補データとして決定して第2記憶部12に記憶し、送信部18を介して他のサーバ装置10に送信する。選択部15は、第2記憶部12の現ラウンド番号を1増やす。
【0032】
同期部17は、受信部13が他のサーバ装置10から受信した候補データの現順序番号が、履歴データの現順序番号よりも大きい場合、第2記憶部12の候補データを削除し、現順序番号を送信した他の前記サーバ装置10に、履歴データの送信依頼を、送信部18を介して送信する(候補データ受信契機の履歴データ同期処理)。
【0033】
また、同期部17は、受信部13が候補データを受信したときに、受信した候補データのラウンド番号が、第2記憶部12の現ラウンド番号よりも大きい場合、第2記憶部12の候補データを削除し、受信した候補データを第2記憶部12に記憶するとともに、現ラウンド番号を受信した候補データのラウンド番号にする(ラウンド番号の同期処理)。
【0034】
また、同期部17は、受信部13を介して他のサーバ装置10から現順序番号を受信したときに、他のサーバ装置10から受信した現順序番号が、履歴データの現順序番号よりも大きい場合、第2記憶部12の候補データを削除し、現順序番号を送信した他のサーバ装置10に、履歴データの送信依頼を、送信部18を介して送信する(現順序番号受信契機の履歴データ同期処理)。
【0035】
同期部17の履歴データ同期処理により、サーバ装置10は、他のサーバ装置10から最新の履歴データを受信して、自身の履歴データを最新の状態に更新することができる。
【0036】
送信部18は、選択部15又は変更部16から受信した候補データに、自身のサーバ装置10を識別するサーバ識別子を含め、当該候補データを他のサーバ装置10に送信する。また、順序番号を変更部16から受信したときに、当該順序番号を他のサーバ装置10の全てに送信する。また、送信部18は、履歴データの送信依頼を同期部17から受信すると、依頼先のサーバ装置10に履歴データの送信依頼を送信する。
【0037】
次に、本実施形態の情報処理システム100の情報処理方法についてフローチャートを参照して説明する。
図4は、実施形態のサーバ装置10がリクエストを受信したときの処理を示すフローチャートである。受信部13がクライアント装置20からリクエストを受信する(ステップS1)。受信部13は、第2記憶部12から現ラウンド番号を読み出し、現ラウンド番号が1(初期値)であるか否かを判定する(ステップS2)。現ラウンド番号が1である場合(ステップS2、Yes)、受信部13の処理は、ステップS3に進む。現ラウンド番号が1でない場合(ステップS2、No)、受信部13は、処理を終了する。
【0038】
受信部13は、第一ラウンドの自身の候補データが決定しているか否かを判定する(ステップS3)。第一ラウンドの自身の候補データが決定している場合(ステップS3、Yes)、受信部13は、処理を終了する。第一ラウンドの自身の候補データがまだ決定していない場合(ステップS3、No)、受信したリクエストを生成部14に送信する。生成部14は、受信部13から受信したリクエストの状態を第1状態にする。生成部14は、当該第1状態のリクエスト、第1記憶部11の現順序番号、及び値が1(初期値)のラウンド番号を含む候補データを生成する(ステップS4)。生成部14は、生成した候補データを選択部15に送信する。選択部15は、生成部14から受信した候補データを第一ラウンドの自身の候補データとして決定して第2記憶部12に記憶する(ステップS5)。選択部15は、当該候補データを送信部18を介して他のサーバ装置10に送信する(ステップS6)。なお、送信部18は、候補データに自身のサーバ装置10を識別するサーバ識別子を含め、当該候補データを他のサーバ装置10に送信する。
【0039】
図5は、実施形態のサーバ装置10が候補データを受信したときの処理を示すフローチャートである。受信部13は、候補データを他のサーバ装置10から受信する(ステップS11)。受信部13は、当該候補データに含まれる現順序番号が履歴データの現順序番号よりも大きいか否かを判定する(ステップS12)。
【0040】
当該候補データに含まれる現順序番号が履歴データの現順序番号よりも大きい場合(ステップS12、Yes)、受信部13は、同期部17に履歴データの同期処理を依頼する。同期部17は、受信部13から履歴データの同期処理の依頼を受信すると、第2記憶部12の全ての候補データを削除し(ステップS13)、当該現順序番号を含む候補データを送信したサーバ装置10に履歴データの送信を依頼し(ステップS14)、候補データの受信処理を終了する。
【0041】
当該候補データに含まれる現順序番号が履歴データの現順序番号以下である場合(ステップS12、No)、受信部13の処理はステップS15に進む。
【0042】
受信部13は、受信した候補データの現順序番号と履歴データの現順序番号が一致するか否かを判定する(ステップS15)。一致する場合(ステップS15、Yes)、受信部13の処理はステップS16に進む。一致しない場合(ステップS15、No)、受信部13の処理を終了する。
【0043】
受信部13は、受信した候補データのラウンド番号が第2記憶部12の現ラウンド番号より大きいか否かを判定する(ステップS16)。受信した候補データのラウンド番号が第2記憶部12の現ラウンド番号より大きい場合(ステップS16、Yes)、受信部13は、同期部17にラウンド番号の同期処理を依頼する。同期部17は、受信部13からラウンド番号の同期処理の依頼を受信すると、第2記憶部12の全ての候補データを削除し(ステップS17)、現ラウンド番号を受信部13が受信した候補データのラウンド番号にする(ステップS18)。次に、受信部13の処理はステップS20に進む。
【0044】
受信した候補データのラウンド番号が第2記憶部12の現ラウンド番号以下である場合(ステップS16、No)、受信部13の処理はステップS19に進む。
【0045】
受信部13は、受信した候補データのラウンド番号と第2記憶部12の現ラウンド番号とが一致するか否かを判定する(ステップS19)。一致する場合(ステップS19、Yes)、受信部13の処理はステップS20に進む。一致しない場合(ステップS19、No)、処理を終了する。
【0046】
受信部13は、受信した候補データを第2記憶部12に記憶する(ステップS20)。次に、現ラウンドの自身の候補データが決定しているか否かを判定する(ステップS21)。決定している場合(ステップS21、Yes)、受信した候補データを自身の候補データとして決定して第2記憶部12に記憶する(ステップS22)。次に、受信部13は、現ラウンド番号が奇数であるか否かを判定する(ステップS23)。現ラウンド番号が奇数である場合(ステップS23、Yes)、受信部13は、候補データ受信通知を選択部15に送信し、選択部15による処理に移行する(ステップS24)。現ラウンド番号が偶数である場合(ステップS23、No)、受信部13は、候補データ受信通知を変更部16に送信し、変更部16による処理に移行する(ステップS25)。
【0047】
図6は、実施形態のサーバ装置10の選択部15の処理を示すフローチャートである。選択部15は、候補データ受信通知を受信部13から受信すると、第2記憶部12から候補データを読み出す(ステップS31)。なお、選択部15は、候補データ受信通知を受信する度に、第2記憶部12から候補データを読み出してもよいし、複数の候補データ受信通知に対して候補データの読み出しを1度にしてもよい。選択部15は、第2記憶部12の候補データの読み出し処理を終了すると、ステップS32の処理に進む。なお、読み出し処理の終了を判定する方法は任意でよい。例えば、最初の候補データ受信通知を受信してから、所定の期間待つ間に受信した候補データ受信通知の分だけ候補データを読み出す方法や、情報処理システム100内のサーバ装置10の数に基づいて定められた数だけ候補データを読み出したら読み出し処理を終了する等の方法がある。
【0048】
選択部15は、第2記憶部12から読み出した候補データのリクエストのうち変更内容が同一のリクエストの数が閾値より大きいか否かを判定する(ステップS32)。閾値より大きい場合(ステップS32、Yes)、選択部15は、ステップS32の条件を満たす候補データから一の候補データを選択し(ステップS33)、選択された候補データのリクエストの状態を第2状態に決定する(ステップS34)。次に、選択部15の処理はステップS37に進む。
【0049】
閾値以下である場合(ステップS32、No)、第2記憶部12から読み出した候補データのリクエストのうち変更内容が相異なるリクエストがあるか否かを判定する(ステップS35)。変更内容が相異なるリクエストが無い場合(ステップS35、No)、ステップS31に戻る。変更内容が相異なるリクエストがある場合(ステップS35、Yes)、選択部15は、第2記憶部12から読み出した候補データのうち一の候補データを選択し(ステップS36)、ステップS37に進む。
【0050】
選択部15は、選択されなかった候補データを第2記憶部12から削除する(ステップS37)。選択部15は、選択した候補データのラウンド番号を1増やすとともに、第2記憶部12の現ラウンド番号を1増やす(ステップS38)。選択部15は、選択した候補データを当該ラウンドの自身の候補データとして決定して第2記憶部12に記憶し、送信部18を介して他のサーバ装置10に送信する(ステップS39)。なお、送信部18は、候補データに自身のサーバ装置10を識別するサーバ識別子を含め、当該候補データを他のサーバ装置10に送信する。
【0051】
図7は、実施形態のサーバ装置10の変更部16の処理を示すフローチャートである。 変更部16は、候補データ受信通知を受信部13から受信すると、第2記憶部12から候補データを読み出す(ステップS41)。なお、ステップS41の読み出し処理の詳細は、ステップS31と同様なので説明を省略する。
【0052】
変更部16は、リクエストの状態が第2状態である候補データの数が閾値より大きいか否かを判定する(ステップS42)。閾値以下である場合(ステップS42、No)、変更部16の処理はステップS49に進む。
【0053】
閾値より大きい場合(ステップS42、Yes)、変更部16は、ステップS42の条件を満たす候補データから一の候補データを選択する(ステップS43)。次に、変更部16は、選択された候補データを使用して第1記憶部11の履歴データを更新し、第1記憶部11のデータを変更する(ステップS44)。次に、変更部16は、第2記憶部12の全ての候補データを削除する(ステップS45)。次に、変更部16は、第2記憶部12の現ラウンド番号を1(初期値)に戻す(ステップS46)。次に、変更部16は、第1記憶部11の履歴データの現順序番号を1増やす(ステップS47)。次に、変更部16は、現順序番号を他のサーバ装置10に送信し(ステップS48)、処理を終了する。
【0054】
変更部16は、第2記憶部12から読み出した候補データに、第1状態のリクエストを含む候補データと、第2状態のリクエストを含む候補データとが共にあるか否かを判定する(ステップS49)。共にある場合(ステップS49、Yes)、変更部16は、第2状態のリクエストを含む候補データから一の候補データを選択し(ステップS50)、選択された候補データのリクエストの状態を第1状態にする(ステップS51)。次に、変更部16の処理はステップS54に進む。
【0055】
共にない場合(ステップS49、No)、リクエストの状態が第1状態である候補データの数が閾値より大きいか否かを判定する(ステップS52)。閾値以下である場合(ステップS52、No)、変更部16の処理はステップS41に戻る。閾値より大きい場合(ステップS52、Yes)、変更部16の処理はステップS53に進む。変更部16は、第2記憶部12から読み出した候補データのうち一の候補データを選択する(ステップS53)。次に、変更部16の処理はステップS54に進む。
【0056】
変更部16は、選択されなかった候補データを第2記憶部12から削除する(ステップS54)。変更部16は、選択した候補データのラウンド番号を1増やすとともに、第2記憶部12の現ラウンド番号を1増やす(ステップS55)。変更部16は、選択した候補データを送信部18を介して他のサーバ装置10に送信する(ステップS56)。なお、送信部18は、候補データに自身のサーバ装置10を識別するサーバ識別子を含め、当該候補データを他のサーバ装置10に送信する。
【0057】
図8は、実施形態のサーバ装置10が現順序番号を受信したときの処理を示すフローチャートである。受信部13は、他の前記サーバ装置10が履歴データを更新したときに、他のサーバ装置10から現順序番号を受信する(ステップS61)。受信部13は、受信した現順序番号が第1記憶部11の履歴データの現順序番号よりも大きいか否かを判定する(ステップS62)。受信した現順序番号が第1記憶部11の履歴データの現順序番号以下である場合(ステップS62、Yes)、処理を終了する。
【0058】
受信した現順序番号が第1記憶部11の履歴データの現順序番号よりも大きい場合(ステップS62、Yes)、同期部17に履歴データの同期処理を依頼する。同期部17は、受信部13から履歴データの同期処理の依頼を受信すると、第2記憶部12の全ての候補データを削除し(ステップS63)、当該現順序番号を含む候補データを送信したサーバ装置10に履歴データの送信を依頼する(ステップS64)。これにより、サーバ装置10は、他のサーバ装置10から最新の履歴データを受信して、自身の履歴データを最新の状態に更新することができる。
【0059】
次に、上述の情報処理方法について具体例を参照して説明する。
図9〜
図14は、実施形態の情報処理方法を具体的に説明するための図である。
図9〜
図14は、サーバ装置の数nが5の例である。自候補は、サーバ装置10自身の候補データ(以下、「自候補データ」という。)を示す。他候補は、他のサーバ装置10から受信した候補データ(以下、「他候補データ」という。)を示す。なお、本例では、他候補データに含まれる現順序番号は、サーバ装置10自身の現順序番号と一致しているものとして説明する。また、本例では、サーバ装置10の送信部18は、自候補データの送信先、及び当該送信先の数をランダムに決定するものとして説明する。すなわち、自候補データと他候補データとを合わせた候補データが、全てのサーバ装置10で同じになるとは限らない。なお、サーバ装置10の送信部18が、自候補データの送信先、及び当該送信先の数を常に同じにしている場合であっても、ネットワーク30の遅延や障害などの影響により、候補データは、全てのサーバ装置10で同じになるとは限らない。また、本例では、上述の閾値を5/2(=2.5)とする。
【0060】
図9上段の図は、サーバ装置10−1〜サーバ装置10−5の第2記憶部12の初期状態である。すなわち、サーバ装置10−1〜サーバ装置10−5の現ラウンド番号が1であり、本実施形態の情報処理方法を開始するときの第2記憶部12の状態を示す。
図9下段の図は、サーバ装置10−1の受信部13がクライアント装置20からリクエストAを受信し、サーバ装置10−1の生成部14が当該リクエストAの状態を第1状態にして自候補データを生成したことを示す。また、サーバ装置10−3の受信部13がクライアント装置20からリクエストBを受信し、サーバ装置10−3の生成部14が当該リクエストBの状態を第1状態にして自候補データを生成したことを示す。サーバ装置10−5の受信部13がクライアント装置20からリクエストCを受信し、サーバ装置10−5の生成部14が当該リクエストCの状態を第1状態にして自候補データを生成したことを示す。サーバ装置10−2及びサーバ装置10−4は、クライアント装置20からリクエストを受信していないことを示す。
【0061】
図10上段の図は、サーバ装置10−1〜サーバ装置10−5の第2記憶部12が
図9下段の状態であるときに、他のサーバ装置10から他候補データを受信した後の第2記憶部12の状態を示す。サーバ装置10−1の第2記憶部12の状態は、他のサーバ装置10から他候補データとして、第1状態のリクエストB、及び第1状態のリクエストCを受信したことにより更新されている。サーバ装置10−3の第2記憶部12の状態は、他のサーバ装置10から他候補データとして、第1状態のリクエストAを受信したことにより更新されている。サーバ装置10−5の第2記憶部12の状態は、他のサーバ装置10から他候補データとして、第1状態のリクエストAを受信したことにより更新されている。サーバ装置10−2の第2記憶部12の状態は、サーバ装置10−3から他候補データとして、第1状態のリクエストBを受信したことにより更新されている。特に、サーバ装置10−2は、自候補データを決定していなかったので、リクエストBを自候補データに決定している。サーバ装置10−4の第2記憶部12の状態は、サーバ装置10−1から他候補データとして、第1状態のリクエストAを受信したことにより更新されている。特に、サーバ装置10−4は、自候補データを決定していなかったので、リクエストAを自候補データに決定している。
【0062】
図10下段の図は、選択部15による処理の後の状態を示す図である。サーバ装置10−1の選択部15は、候補データのリクエスト(A、B,C)は変更内容が相異なるため、一の候補データ(A)をランダムに選択する(自候補データにする)。次に、サーバ装置10−1の選択部15は、選択されなかった候補データ(B,C)を削除する。次に、サーバ装置10−1の選択部15は、自候補データのラウンド番号を1増やすとともに、現ラウンド番号を1増やす。サーバ装置10−1の選択部15は、当該自候補データを、送信部18を介して他のサーバ装置10に送信する。なお、サーバ装置10−3、サーバ装置10−5の動作もサーバ装置10−1と同様である。サーバ装置10−2及びサーバ装置10−4は、変更内容が相異なる候補データがないため、候補データを選択する処理に進まずに、候補データの受信を待つ(候補データの読み出し処理に戻る)。
【0063】
図11上段の図は、サーバ装置10−1〜サーバ装置10−5の第2記憶部12が
図10下段の状態であるときに、他のサーバ装置10から他候補データを受信した後の第2記憶部12の状態を示す。サーバ装置10−2の第2記憶部12の状態は、他のサーバ装置10から他候補データとして、第1状態のリクエストB及びCを受信(
図10下段の図の状態から更にリクエストCを受信)したことにより、現ラウンド番号が1から2に更新されている。これは、サーバ装置10−2の受信部13が、第2記憶部12の現ラウンド番号1と、他候補データに含まれるラウンド番号2とを比較し、他候補データに含まれるラウンド番号2>現ラウンド番号1であるため、現ラウンド番号を2に更新したためである。自候補データが決定していなかったので、先に受信したリクエストBに自候補データが決定している。なお、サーバ装置10−4についても同様である。
【0064】
図11下段の図は、変更部16による処理の後の状態を示す図である。サーバ装置10−1の変更部16は、候補データのリクエスト(A、B,C)の状態はすべて第1状態で閾値(2.5)より多くあるので、一の候補データ(A)をランダムに選択する(自候補データにする)。次に、サーバ装置10−1の変更部16は、選択されなかった候補データ(B,C)を削除する。次に、サーバ装置10−1の変更部16は、自候補データのラウンド番号を1増やすとともに、現ラウンド番号を1増やす。サーバ装置10−1の変更部16は、当該自候補データを、送信部18を介して他のサーバ装置10に送信する。なお、サーバ装置10−2〜サーバ装置10−5の動作もサーバ装置10−1と同様である。
【0065】
図12上段の図は、サーバ装置10−1〜サーバ装置10−5の第2記憶部12が
図11下段の状態であるときに、他のサーバ装置10から他候補データを受信した後の第2記憶部12の状態を示す。サーバ装置10−1の第2記憶部12の状態は、他のサーバ装置10から他候補データとして、第1状態のリクエストB、第1状態のリクエストB、第1状態のリクエストA、及び第1状態のリクエストCを受信したことにより更新されている。サーバ装置10−2〜サーバ装置10−5についても、他のサーバ装置10から他候補データを受信したことにより更新されている。
【0066】
図12下段の図は、選択部15による処理の後の状態を示す図である。サーバ装置10−1の選択部15は、候補データのリクエスト(A,B,B,A,C)のうち変更内容が同一のリクエストの数が閾値(2.5)以下であり、変更内容が相異なるため、一の候補データ(A)をランダムに選択する(自候補データにする)。次に、サーバ装置10−1の選択部15は、選択されなかった候補データ(B,B,A,C)を削除する。次に、サーバ装置10−1の選択部15は、自候補データのラウンド番号を1増やすとともに、現ラウンド番号を1増やす。サーバ装置10−1の選択部15は、当該自候補データを、送信部18を介して他のサーバ装置10に送信する。なお、サーバ装置10−2〜サーバ装置10−5の動作もサーバ装置10−1と同様である。
【0067】
図13上段の図は、サーバ装置10−1〜サーバ装置10−5の第2記憶部12が
図12下段の状態であるときに、他のサーバ装置10から他候補データを受信した後の第2記憶部12の状態を示す。サーバ装置10−1の第2記憶部12の状態は、他のサーバ装置10から他候補データとして、第1状態のリクエストB、第1状態のリクエストB、及び第1状態のリクエストAを受信したことにより更新されている。サーバ装置10−2〜サーバ装置10−5についても、他のサーバ装置10から他候補データを受信したことにより更新されている。
【0068】
図13下段の図は、変更部16による処理の後の状態を示す図である。サーバ装置10−1の変更部16は、候補データのリクエスト(A、B,B,A)の状態はすべて第1状態で閾値(2.5)より多くあるので、一の候補データ(A)をランダムに選択する(自候補データにする)。次に、サーバ装置10−1の変更部16は、選択されなかった候補データ(B,B,A)を削除する。次に、サーバ装置10−1の変更部16は、自候補データのラウンド番号を1増やすとともに、現ラウンド番号を1増やす。サーバ装置10−1の変更部16は、当該自候補データを、送信部18を介して他のサーバ装置10に送信する。なお、サーバ装置10−2〜サーバ装置10−5の動作もサーバ装置10−1と同様である。
【0069】
図14上段の図は、サーバ装置10−1〜サーバ装置10−5の第2記憶部12が
図13下段の状態であるときに、他のサーバ装置10から他候補データを受信した後の第2記憶部12の状態を示す。サーバ装置10−1の第2記憶部12の状態は、他のサーバ装置10から他候補データとして、第1状態のリクエストA、第1状態のリクエストA、第1状態のリクエストB、及び第1状態のリクエストAを受信したことにより更新されている。サーバ装置10−2〜サーバ装置10−5についても、他のサーバ装置10から他候補データを受信したことにより更新されている。
【0070】
図14下段の図は、選択部15による処理の後の状態を示す図である。サーバ装置10−1の選択部15は、候補データのリクエスト(A,A,A,B,A)のうち変更内容が同一のリクエスト(A,A,A,A)の数が閾値(2.5)より大きいため、変更内容が同一のリクエスト(A,A,A,A)のうち一のリクエスト(A)を選択し(自候補データにし)、選択されたリクエストの状態を第2状態に決定する。次に、サーバ装置10−1の選択部15は、選択されなかった候補データ(A,A,B,A)を削除する。次に、サーバ装置10−1の選択部15は、自候補データのラウンド番号を1増やすとともに、現ラウンド番号を1増やす。サーバ装置10−1の選択部15は、当該自候補データを、送信部18を介して他のサーバ装置10に送信する。なお、サーバ装置10−2及びサーバ装置10−5の動作もサーバ装置10−1と同様である。
【0071】
サーバ装置10−3の選択部15は、候補データのリクエスト(A,A,B)のうち変更内容が同一のリクエストの数が閾値(2.5)以下であり、変更内容が相異なるため、一の候補データ(A)をランダムに選択する(自候補データにする)。次に、サーバ装置10−1の選択部15は、選択されなかった候補データ(A,B)を削除する。次に、サーバ装置10−1の選択部15は、自候補データのラウンド番号を1増やすとともに、現ラウンド番号を1増やす。サーバ装置10−1の選択部15は、当該自候補データを、送信部18を介して他のサーバ装置10に送信する。なお、サーバ装置10−4の動作もサーバ装置10−3と同様である。
【0072】
図15上段の図は、サーバ装置10−1〜サーバ装置10−5の第2記憶部12が
図14下段の状態であるときに、他のサーバ装置10から他候補データを受信した後の第2記憶部12の状態を示す。サーバ装置10−1の第2記憶部12の状態は、他のサーバ装置10から他候補データとして、第2状態のリクエストA、第1状態のリクエストA、第1状態のリクエストB、及び第2状態のリクエストAを受信したことにより更新されている。サーバ装置10−2〜サーバ装置10−5についても、他のサーバ装置10から他候補データを受信したことにより更新されている。
【0073】
図15下段の図は、変更部16による処理の後の状態を示す図である。サーバ装置10−1の変更部16は、候補データのリクエスト(A,A,A,B,A)のうち状態が第2状態のリクエスト(A,A,A)の数が閾値(2.5)より大きいため、第2状態のリクエスト(A,A,A)を含む候補データのうち一の候補データ(A)を使用して第1記憶部11の履歴データを更新するとともに第1記憶部11のデータを変更する。次に、サーバ装置10−1の変更部16は、全ての候補データ(A,A,A,B,A)を削除する。次に、サーバ装置10−1の変更部16は、現ラウンド番号を1に戻すともに、現順序番号を1増やす。次に、当該現順序番号を他のサーバ装置10に送信する。なお、サーバ装置10−2〜サーバ装置10−4の動作もサーバ装置10−1と同様である。
【0074】
サーバ装置10−5の変更部16は、候補データのリクエストのうち、状態が第2状態のリクエストの数が閾値(2.5)以下であり、かつ、第1状態のリクエストを含む候補データと、第2状態のリクエストを含む候補データとが共にあるため、第2状態のリクエスト(A,A)を含む候補データのうち一の候補データを選択し、選択された候補データのリクエスト(A)の状態を第1状態に決定する。
【0075】
サーバ装置10−5の第1記憶部11の履歴データ及びデータは、
図9〜
図15で説明した情報処理方法では更新されていないが、他のサーバ装置10から現順序番号を受信した契機で更新される。すなわち、サーバ装置10−5の受信部13が、他のサーバ装置10から現順序番号を受信すると、サーバ装置10−5の同期部17が上述の
図8のフローチャートの処理を行うことにより、第1記憶部11の履歴データ及びデータが更新される。
【0076】
次に、本実施形態の情報処理方法の正当性について説明する。本実施形態の情報処理方法は、各サーバ装置10で独立して実行される。つまり、各ラウンドの処理結果はサーバ装置10間で異なるかもしれないことに注意する。現順序番号のリクエストが確定するラウンドも同一であるとは限らない。また、各サーバ装置10は非同期的に動作するため、ある時点で実行している処理の順序番号やラウンド番号は、各サーバ装置10で異なるかもしれない。受信部13及び同期部17の処理は、順序番号やラウンド番号が進んでいるサーバ装置10から通知を受け取ったとき、進んでいる番号にキャッチアップする処理を含む。
【0077】
本実施形態の情報処理方法(アルゴリズム)の正当性は、以下のValidity条件、Agreement条件、及びTermination条件を満たしていることを証明して示すことができる。
【0078】
(Validity条件)各順序番号で確定したリクエストは、クライアント装置20から受け付けられたリクエストのいずれかである。
【0079】
(Agreement条件)各順序番号で確定したリクエストは、サーバ装置10間で異ならない。
【0080】
(Termination条件)過半数のサーバ装置10が正常な時、正常なサーバ装置10では各順序番号のリクエストが確定する。
【0081】
まず、Validity条件について説明する。本実施形態の情報処理方法は、ラウンド番号=1のときにクライアント装置20から受け付けたアクセスを自候補データとし、それ以降のラウンドでは、前のラウンドで決定した自候補データ、及び他のサーバ装置10から受信した他候補データから、自候補データが決定される。いずれのラウンドでも元々クライアント装置20から受け付けたリクエスト以外が現れることはない。つまりValidity条件が成立する。
【0082】
次に、Agreement条件について説明する。これには、一連のラウンドによって、現順序番号に関連付けるリクエストを決定したサーバ装置10があるとき、他のサーバ装置10においても、次の変更部16の処理までには、当該現順序番号に同じリクエストが関連付けられることが証明できればよい。まず、変更部16の処理で第2状態の候補データがあるとしたら、それは唯一であることに注意する。なぜなら、変更部16の第2状態の候補データは、選択部15の処理で過半数あったため、第2状態に決定されるからである(選択部15の処理で過半数を得られる候補データが唯一であることは、各サーバ装置10が候補データを翻さないことから従う)。
【0083】
あるサーバ装置10が、ラウンドrで現順序番号に関連付けるリクエストを、リクエストVで最初に決着したとする。これは、そのサーバ装置10は、ラウンドrの変更部16の処理を行う前に、第2状態のリクエストVを含む候補データを過半数のサーバ装置10から受信したということである。
【0084】
つまり、リクエストVは、過半数のサーバ装置10で第2状態のリクエストに決定されている。すると、他のサーバ装置10においても、どのような組み合わせの過半数のサーバ装置10からラウンドrの変更部16の処理に使用する候補データを受け取ったとしても、最低でも一つはリクエストVが通知されることになる。したがって、すべてのサーバ装置10において、ラウンドrで決着するとすればリクエストVしかありえないし、決着しないとしても、次のラウンドの選択部15の処理に使用する自候補データがリクエストVとなる。選択部15の自候補データがすべてリクエストVとなることから、前述したとおり、その次の変更部16の処理で決着する。
【0085】
ここで、受信部13及び同期部17のキャッチアップ動作の正当性について説明する。キャッチアップの基本的な考え方は、自身のサーバ装置10抜きで過半数の候補データが揃ったラウンドの処理については、自候補データを立てる必要がないため、自候補データを立てずに他のサーバ装置10での処理結果をそのまま流用するということである。本実施形態の情報処理方法の各ラウンドの処理は、必ずしも自身のサーバ装置10の候補データを含んでいる必要はないため、他のサーバ装置10の処理結果を流用したとき、これをあたかも自身のサーバ装置10で各ラウンドの処理を実施したかのようにみなすことができる。したがって、キャッチアップ動作は本実施形態の情報処理方法の正当性に影響を与えない。
【0086】
最後にTermination条件について説明する。本実施形態の情報処理方法は乱数等を利用するアルゴリズムであるため、確率的Terminationを満たすことを証明する。すなわち、過半数のサーバ装置10が正常な時、各順序番号のリクエストが永遠に決着しない確率は、限りなく0に近いことを証明する。
【0087】
まず、過半数のサーバ装置10が正常な時には、各ラウンドの処理において、候補データを過半数以上集めることができる。したがって、決着に至るまでラウンド番号は増加し続けることになる。逆に、過半数のサーバ装置10が故障により停止した場合には、候補データを過半数集めることができなくなるため決着に至らなくなる(キャッチアップ動作を除く)。
【0088】
Vrをそのラウンドの選択部15の処理の候補データとして現れたリクエストの種類の総数とする。ラウンドが進むにつれてVrは単調減少である(つまり、r<sのときVr≧Vs)。Vrが1となった場合、前述した通り次の変更部16の処理で決着する。そこで、Vrが1となるまでは、Vrが一定以上の確率で真に減少していくことが示せれば、確率的Termination条件が成立することが判る。実際、Vr>1のとき、選択部15の処理で候補データの過半数を占めないリクエストVが必ずある。リクエストVは変更部16の処理の開始時に、第2状態の候補データにはなり得ず、選択部15の処理で第1状態の候補データに選ばれない確率は各サーバ装置10で(1/N)以上である。したがって、すべてのサーバ装置10でリクエストVが変更部16の候補データに選ばれない確率は((1/N)^N)以上ある。すべてのサーバ装置10で変更部16の候補データに選ばれないと、次の選択部15の候補データに現れることはないため、その場合Vrは真に減少する。これで、確率的Termination条件が成立することが証明された。
【0089】
ここで、本実施形態の選択部15及び変更部16の処理について補足する。選択部15の処理は、予備選挙に例えることができ、変更部16の処理は、信任選挙に例えることができる。これは、変更部16が、選択部15が第2状態にしたリクエストを含む候補データ(予備選挙で当選した候補データ)から、現順序番号に関連付けるリクエストを含む候補データを決定(信任選挙で決定)するためである。
【0090】
次に、本実施形態の情報処理方法の性能について説明する。
図16は、実施形態の情報処理方法の性能を示す図である。なお、
図16では、参考までにBen’orの合意アルゴリズムによる結果についても示している。
【0091】
図16は、Ben’orの合意アルゴリズムと、本実施形態の情報処理方法の性能の比較として、初期値が異なる場合に、同意を得るまでに要するラウンド数をシミュレーションした結果を示す。なお、シミュレーションは、非同期ネットワークモデルでのシミュレーションで行い、1000回のシミュレーション結果の平均値をとる。多重化するサーバ装置10の数を3〜29までについて評価した。
【0092】
なお、本実施形態の情報処理方法と比較して、Ben’orの合意アルゴリズムには、下記の特徴がある。
・同意する値は、0か1のどちらかしかない。
・第2状態にできるリクエストがない場合、第2状態にできないことを他のサーバ装置10に通知する。
・乱拓は、任意の候補データの中から選ぶ。
・各サーバ装置10で順に各ラウンドを計算する(スキップしない)。
【0093】
一方、本実施形態の情報処理方法には下記の特徴がある。
・同意する値として、2値ではなく多値が扱える。
・第2状態にできるリクエストがない場合、ランダムに選んだ第1状態の候補データを他のサーバ装置10に通知する。
・乱拓は、前のラウンドの第1状態の候補データの中からしか選ばない。
・現ラウンド番号より大きいラウンド番号を受信したとき、ラウンド番号を進める。
・自候補データが未決定の時、受信した候補データを自候補データとする。
【0094】
非同期ネットワークモデルでは、各サーバ装置10は必ずしも一様に処理を実行するわけではない。例えば、サーバ装置10−1とサーバ装置10−2の実行の速度の比が100:1かもしれない。またあるときには、その比が1:100に逆転するかもしれない。また、ネットワーク30内で遅延が発生する可能性がある。シミュレーションでは、ある時点で各サーバ装置10の処理が進む確率をランダムに設定している。また、各サーバ装置10へのパケットの配送が進む確率もランダムに設定している。
【0095】
Ben’orの合意アルゴリズムの場合、初期値は0か1しか選べないため、各サーバ装置10でランダムに与えるようにした。本実施形態の情報処理方法は、多値を扱えるため、初期値はすべてのサーバ装置10で異なる値とした。シミュレーション結果を比較すると、多重度が大きくなるにつれて、本実施形態の情報処理方法の優位性が明らかになる。また、Ben’orの合意アルゴリズムの場合、同意する値が0か1しかないが、本実施形態の情報処理方法では多値を扱えるという優位性がもともとある。
【0096】
最後に、本実施形態のサーバ装置10及びクライアント装置20のハードウェア構成の一例について説明する。
図17は、実施形態のサーバ装置10及びクライアント装置20のハードウェアの構成の一例を示す図である。
【0097】
本実施形態のサーバ装置10及びクライアント装置20は、制御装置31、主記憶装置32、補助記憶装置33、表示装置34、入力装置35及び通信装置36を備える。制御装置31、主記憶装置32、補助記憶装置33、表示装置34、入力装置35及び通信装置36は、バス37を介して互いに接続されている。
【0098】
制御装置31は、補助記憶装置33から主記憶装置32に読み出されたプログラムを実行する。主記憶装置32は、ROM(Read Only Memory)やRAM(Random Access Memory)等のメモリである。補助記憶装置33は、例えば、ハードディスクやメモリカード等である。表示装置34は、サーバ装置10及びクライアント装置20の状態等を表示する画面である。表示装置34は、例えば、液晶ディスプレイ等である。入力装置35は、サーバ装置10及びクライアント装置20を操作するためのインタフェースである。入力装置35は、例えば、キーボードやマウス等である。通信装置36は、ネットワークに接続するためのインタフェースである。
【0099】
本実施形態のサーバ装置10及びクライアント装置20で実行されるプログラムを、インストール可能な形式又は実行可能な形式のファイルでCD−ROM、メモリカード、CD−R及びDVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録し、コンピュータ・プログラム・プロダクトとして提供してもよい。また、本実施形態のサーバ装置10及びクライアント装置20で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供してもよい。また、本実施形態のサーバ装置10及びクライアント装置20で実行されるプログラムをダウンロードさせずに、インターネット等のネットワーク経由で提供、又は配布してもよい。また、本実施形態のサーバ装置10及びクライアント装置20のプログラムを、ROM等に予め組み込んで提供してもよい。
【0100】
本実施形態のサーバ装置10で実行されるプログラムは、上述したサーバ装置10の各機能ブロックのうち、プログラムとしても実現可能な機能ブロック(受信部13、生成部14、選択部15、変更部16、同期部17及び送信部18)を含むモジュール構成となっている。
【0101】
また、本実施形態のクライアント装置20で実行されるプログラムは、上述したクライアント装置20の送信部21を含むモジュール構成となっている。
【0102】
当該モジュールは、実際のハードウェアとしては、制御装置31が上記記憶媒体からプログラムを読み出して実行することにより、上記各モジュールが主記憶装置32上にロードされる。すなわち、上記各モジュールは、主記憶装置32上に生成される。なお、サーバ装置10及びクライアント装置20の各機能ブロックの一部、又は全部を、プログラムにより実現せずに、IC(Integrated Circuit)等のハードウェアにより実現してもよい。
【0103】
本実施形態の情報処理システム100によれば、各サーバ装置10が選択部15及び変更部16を備え、選択部15及び変更部16の処理を交互に繰り返すことにより、履歴データの現順序番号に関連付けるリクエストを決定することができる。これにより、どのような組み合わせの障害(サーバ装置の処理の遅延や停止、及びネットワークの輻輳やパケットロス等)があったとしても、サーバ装置10間のデータの一貫性が保証され、過半数のサーバ装置10が正常に動作する条件下であれば、現順序番号に関連付けるリクエストを一意に決定することができる。
【0104】
本実施形態の情報処理システム100では、どのような組み合わせの障害があったとしても、履歴データの一貫性が失われないため、複数のサーバ装置10により多重化される情報の一貫性が失われない。また、本実施形態の情報処理システム100では、どのような組み合わせの障害があったとしても、サーバ装置10の情報処理方法(アルゴリズム)は対称であるため、単一故障点(Single Point of Failure)となるサーバ装置10がない。そのため、クライアント装置20は、任意のサーバ装置10にリクエストを送信することができる。
【0105】
なお、本実施形態の情報処理方法の説明では、複数のサーバ装置10の間で履歴データの現順序番号に関連付けるリクエストを一意に決定する場合について説明した。しかしながら、本実施形態の情報処理方法は、サーバ装置10に限らず、パーソナルコンピュータ、仮想マシン、OS(Operating System)上のプロセスなどにも適用可能である。同様に、クライアント装置20を、パーソナルコンピュータ、仮想マシン、OS(Operating System)上のプロセスなどにすることも可能である。また、ネットワーク30は、LANの他に、インターネットなどの広域ネットワーク(WAN)であってもよいし、仮想ネットワークやプロセス間通信(IPC)などでもよい。
【0106】
また、本実施形態の情報処理方法の説明では、選択部15及び変更部16の閾値を同一としたが、選択部15の閾値を第1閾値とし、変更部16の閾値を第2閾値として、選択部15と変更部16とで値の異なる閾値を設定してもよい。
【0107】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。