(57)【特許請求の範囲】
【請求項１】
無線インタフェースを有する複数のノードから構成され、一意な識別子で識別されるデータおよび該データの複製が複数のノードに分散配置され、ユーザが該識別子を用いて該データへのアクセスを実行すると、該データあるいはいずれかの複製データへのアクセスが可能な無線ネットワークにおいて、
データの生成時には、該データの生成ノードに該データの修正または削除処理である更新処理を実行可能なコアデータを生成、配置するとともに、該コアデータが存在するノードと無線リンクで直接通信可能な周辺のノードに該データの参照処理のみが実行可能な複製データを生成、配置し、
コアデータが存在するノードは、複製データが存在する全てのノードのアドレスを保持するとともに、コアデータを他のノードに移動させる際に、移動前に把握していた複製データが存在する全てのノードに対して移動先のノードのアドレスを通知し、
複製データが存在する各ノードは、コアデータが存在するノードのアドレスを保持するとともに、該コアデータが存在するノードと自ノードとの間の通信状況を管理し、
コアデータが存在するノードで該データへの更新要求あるいは参照要求が発生した場合は、該ノードは、該コアデータに対して更新処理または参照処理を実行し、
複製データが存在するノードでデータへの更新要求が発生した場合は、該ノードは、前記通信状況が良好であれば、該コアデータが存在するノードと協調して自ノードにコアデータを移動させた上で、該コアデータに対して更新処理を実行し、前記通信状況が良好でなければ、該コアデータが存在するノードに更新要求を転送し、該更新要求を受信した該コアデータが存在するノードは、該コアデータの更新処理を実行するとともに、その結果を該更新要求が発生したノードに送信し、
複製データが存在するノードでデータへの最新データの参照要求が発生した場合は、該ノードは、該コアデータが存在するノードに最新情報の参照要求を転送し、該最新情報の参照要求を受信した該コアデータが存在するノードは、該コアデータの最新情報を該最新情報の参照要求が発生したノードに送信し、
複製データが存在するノードでデータへの通常の参照要求が発生した場合は、該ノードは、該ノード内のデータの情報を要求元に送信し、
コアデータも複製データも存在しないノードでデータへの参照要求が発生した場合は、該ノードは、該コアデータが存在するノードと協調して自ノードに複製データを生成、配置した上で、自ノード内のデータの情報を要求元に送信する、複製データ管理方法。
【請求項２】
複製データが存在するノードで該データへの更新要求が発生した場合は、該ノードは、前記通信状況が良好ではなければ、該コアデータが存在するノードに更新要求を転送するとともに、該コアデータが存在するノードに対して、該コアデータが存在するノードと自ノードとの間の通信経路上の次のノードへのコアデータの移動を要求する逐次移動要求を送信し、
該逐次移動要求を受信した該コアデータが存在するノードは、自ノードのルーティングエージェントと協調して前記次のノードへコアデータを移動する、請求項１に記載の複製データ管理方法。
【請求項３】
複製データが存在する各ノードは、通信状況把握用のパケットをコアデータが存在するノードに対して定期的に送信し、該パケット中にはパケット送信時刻を示すタイムスタンプを含め、
該通信状況把握用のパケットを受信したコアデータが存在するノードは、該パケット中のタイムスタンプを含んだ応答パケットを、該通信状況把握用のパケットの送信元の複製データが存在するノードに送信し、
該応答パケットを受信した複製データが存在するノードは、該パケット中のタイムスタンプと現在の時刻を比較して、コアデータが存在するノードへの通信のラウンドトリップタイムを測定し、該ラウンドトリップタイムがある閾値より小さければ前記通信状況を良好と判断することにより、前記通信状況を管理する、請求項１または２に記載の複製データ管理方法。
【請求項４】
複製データが存在する各ノードは、自ノードのルーティングエージェントと協調してコアデータが存在するノードまでの経路のホップ数を把握し、該ホップ数がある閾値より小さければ前記通信状況を良好と判断することにより、前記通信状況を管理する、請求項１または２に記載の複製データ管理方法。
【請求項５】
複製データが存在する各ノードは、定期的に通信状況把握用のパケットをコアデータが存在するノードに対して送信し、該パケット中にはパケット送信時刻を示すタイムスタンプを含め、
該通信状況把握用のパケットを受信したコアデータが存在するノードは、該パケット中のタイムスタンプを含んだ応答パケットを、該通信状況把握用のパケットの送信元の複製データが存在するノードに送信し、
該応答パケットを受信した複製データが存在するノードは、該パケット中のタイムスタンプと現在の時刻を比較して、コアデータが存在するノードへの通信のラウンドトリップタイムを測定し、また自ノードのルーティングエージェントと協調してコアデータが存在するノードまでの経路のホップ数を把握し、該ラウンドトリップタイムが閾値より小さく、かつ該ラウンドトリップタイムをホップ数で割った値も別の閾値より小さければ、前記通信状況を良好と判断することにより、前記通信状況を管理する、請求項１または２に記載の複製データ管理方法。
【請求項６】
コアデータが存在するノードおよび複製データが存在する各ノードは、該データが最新であることを保証する期間である有効期間情報を保持し、
コアデータが存在するノードでデータへの更新要求が発生した場合、該ノードは、複製データが存在する全てのノードへ更新内容を通知し、
該コアデータが存在するノードから更新を通知された複製データが存在するノードは、更新内容を記憶するとともに該コアデータが存在するノードへ了解した旨を通知し、もし該コアデータが存在するノードが該更新の通知を行ってから一定時間内に、複製データが存在する全てのノードから了解の通知を受けた場合、更新の実行依頼および新しい有効期間情報を複製データが存在する全てのノードへ通知し、
もし該コアデータが存在するノードが該更新の通知を行ってから一定時間内に、了解の通知を受信できない、複製データが存在するノードが存在する場合、該コアデータが存在するノードは、自ノードで保持している、該了解の通知を受信できなかった複製データが存在するノードのアドレスを削除し、了解の通知を送信してきた、複製データが存在する全てのノードへ更新の失敗を通知し、
コアデータが存在するノードから更新を通知された、複製データが存在するノードは、一定時間内に更新の実行依頼を受信した場合、更新を通知された際に記憶した更新内容で該データを更新し、実行依頼で通知された有効期間情報を記憶し、一定時間内に更新の実行を依頼されなかった場合、該データを削除し、
複製データが存在するノードで該データへの最新データの参照要求が発生した場合、該ノードは、もし要求発生時刻が自ノードのデータの有効期間情報が示す期間を過ぎていなければ、自ノードのデータを参照し、もし該最新データの参照要求発生時刻が自ノードのデータの有効期間情報が示す期間を過ぎていたら、コアデータが存在するノードへ最新情報の参照要求を転送する、請求項１から５のいずれか１項に記載の複製データ管理方法。
【請求項７】
一意な識別子で識別されるデータおよび該データの複製が無線インタフェースを有する複数のノードに分散配置され、ユーザが該識別子を用いて該データへのアクセスを実行すると、該データあるいはいずれかの複製データへのアクセスが可能な無線ネットワークを構成する前記ノードであって、
データが自ノードで生成された場合は、自ノードに、該データの修正または削除処理である更新処理を実行可能なコアデータを配置するとともに、自ノードと無線リンクで直接通信可能な周辺のノードに該データの参照処理のみが実行可能な複製データの生成、配置を要求する複製生成要求を送信し、
コアデータが存在するノードから該複製生成要求を受信した場合は、自ノードに該コアデータの複製データを生成、配置し、
自ノードにコアデータが存在する場合は、複製データが存在する全てのノードのアドレスを保持するとともに、コアデータを他のノードに移動させる際に、移動前に把握していた複製データが存在する全てのノードに対して移動先のノードのアドレスを通知し、
自ノードに複製データが存在する場合は、コアデータが存在するノードのアドレスを保持するとともに、該コアデータが存在するノードと自ノードとの間の通信状況を管理し、
自ノードにコアデータが存在し、かつ自ノードで該データへの更新要求あるいは参照要求が発生した場合は、該コアデータに対して更新処理または参照処理を実行し、
自ノードに複製データが存在し、かつ自ノードでデータへの更新要求が発生した場合は、前記通信状況が良好であれば、該コアデータが存在するノードと協調して自ノードにコアデータを移動させた上で、該コアデータに対して更新処理を実行し、前記通信状況が良好でなければ、該コアデータが存在するノードに更新要求を転送し、
自ノードにコアデータが存在し、かつ複製データが存在するノードから該更新要求を受信した場合は、該コアデータの更新処理を実行するとともに、その結果を該更新要求が発生したノードに送信し、
自ノードに複製データが存在し、かつ自ノードでデータへの最新データの参照要求が発生した場合は、該コアデータが存在するノードに最新情報の参照要求を転送し、
自ノードにコアデータが存在し、かつ複製データが存在するノードから該最新情報の参照要求を受信した場合は、該コアデータの最新情報を該最新情報の参照要求が発生したノードに送信し、
自ノードに複製データが存在し、かつ自ノードでデータへの通常の参照要求が発生した場合は、自ノード内のデータの情報を要求元に送信し、
自ノードにコアデータも複製データも存在せず、かつ自ノードでデータへの参照要求が発生した場合は、該コアデータが存在するノードと協調して自ノードに複製データを生成、配置した上で、自ノード内のデータの情報を要求元に送信する、ノード。
【請求項８】
自ノードに複製データが存在し、かつ自ノードでデータへの更新要求が発生した場合は、前記通信状況が良好でなければ、該コアデータが存在するノードに更新要求を転送するとともに、該コアデータが存在するノードに対して、該コアデータが存在するノードと自ノードとの間の通信経路上の次のノードへのコアデータの移動を要求する逐次移動要求を送信し、
自ノードにコアデータが存在し、かつ複製データが存在するノードから該逐次移動要求を受信した場合は、自ノードのルーティングエージェントと協調して前記次のノードへコアデータを移動する、請求項７に記載のノード。
【請求項９】
自ノードに複製データが存在する場合は、通信状態把握用のパケットをコアデータが存在するノードに対して送信し、該パケット中にはパケット送信時刻を示すタイムスタンプを含め、
自ノードにコアデータが存在し、かつ複製データが存在するノードから該通信状態把握用のパケットを受信した場合は、該パケット中のタイムスタンプを含んだ応答パケットを、該通信状況把握用のパケットの送信元の複製データが存在するノードに送信し、
自ノードに複製データが存在し、かつコアデータが存在するノードから該応答パケットを受信した場合は、該パケット中のタイムスタンプと現在の時刻から前記コアデータが存在するノードへの通信のラウンドタイムを測定し、該ラウンドタイムが閾値を超えていなければ前記通信状況を良好と決定する、請求項７または８に記載のノード。
【請求項１０】
自ノードに複製データが存在する場合は、自ノードのルーティングエージェントと協調して前記コアデータが存在するノードまでの経路のホップ数を把握し、該ホップ数がある閾値よりも小さければ前記通信状況を良好と決定する、請求項７または８に記載のノード。
【請求項１１】
自ノードに複製データが存在する場合は、通信状態把握用のパケットを前記コアデータが存在するノードに対して定期的に送信し、該パケット中にはパケット送信時刻を示すタイムスタンプを含め、
自ノードにコアデータが存在し、かつ複製データが存在するノードから該通信状態把握用のパケットを受信した場合は、該パケット中のタイムスタンプを含んだ応答パケットを、該通信状況把握用のパケットの送信元の複製データが存在するノードに送信し、
自ノードに複製データが存在し、かつコアデータが存在するノードから該応答パケットを受信した場合は、該パケット中のタイムスタンプと現在の時刻から前記コアデータが存在するノードへの通信のラウンドトリップタイムを測定し、また自ノードのルーティングエージェントと協調して、前記コアデータが存在するノードまでの経路のホップ数を把握し、前記ラウンドトリップタイムが閾値よりも小さく、かつ前記ラウンドトリップタイムを前記ホップ数で割った値も別の閾値よりも小さければ前記通信状況を良好と決定する、請求項７または８に記載のノード。
【請求項１２】
請求項７から１１のいずれか１項に記載のノードの処理をコンピュータに実行させるための情報処理プログラム。
【請求項１３】
請求項７から１１のいずれか１項に記載のノードの処理をコンピュータに実行させるための情報処理プログラムを記録した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、無線インタフェースを有する複数のノードから構成され、一意な識別子で識別されるデータ、および該データの複数が複数のノード内に分配配置されている無線ネットワークにおける複製データ管理方法に関する。
【０００２】
【従来の技術】
従来、複製データの管理方法としては、ネットワーク内の一つのマスターデータのみの修正を可能とし、マスターデータの修正内容を通信により逐次複製データにも反映させる、あるいは複製データは必ずしも最新であることを保証しない、などの方法がとられてきた。しかしマスターデータへの負荷集中を避ける目的や、ネットワーク内のトラフィック削減のため、あるいはネットワークトポロジが変更されてマスターデータへのアクセスが不可能となった場合のデータ修正を可能とするためには、複製データ自身を直接修正可能とすることが必要である。
【０００３】
このため例えば特開平１１−３２６３号公報に記載の「複製データベース整合装置及び複製データベース整合方法」では、データベースが複数のサイトに分散配置されており、更新の生じたサイトでは不整合が発生しないかどうかを各サイト間のパケットのやりとりにより検証することで、任意のサイトでのデータベースの更新を可能にしている。しかし、通信不可能なサイトとはデータの同期がとれず、また各サイトでデータを更新してから、その情報が他サイトで反映されるまでの間は、データの不整合が生じる可能性がある。
【０００４】
また、分散ファイルシステムにおいては、ファイルサービスを利用するクライアント内にファイルの一部をキャッシュとして保存しておき、ファイルの可用性を高めている。例えば「Kistler, J.J., Satyanarayanan, M.著，泥isconnected Operation in the Coda File System   in ACM Transactions on Computer Systems, Feb. 1992, Vol.10, No.1, pp.3-25」で述べられている分散ファイルシステムＣｏｄａにおける複製管理方法では、クライアントからサーバへアクセスできない切断状態においては、クライアントのキャッシュに対して操作を行うことを許す。その後サーバへ再接続した時には該キャッシュへの更新情報とサーバ内の情報を比較する。比較の結果データの不整合を検出した場合は、ユーザに通知して人手による修復を行う。つまり、一時的なデータの不整合は許している。
【０００５】
さらに、移動端末をクライアントとするモバイルデータベースにおいては、クライアントがネットワークから離れた時にも、データの強い一貫性を保ちながらクライアントでのデータの修正を許している。例えば、「Daniel Barbara著，溺obile Computing and Databases - A Survey   in IEEE Transactions on Knowledge and Data Engineering, Jan. 1999, Vol.11, No.1, pp.108-117」の１１４頁で述べられているＷａｎｇとＰａｒｉｓの手法では、あるデータの複製が分散されている時、いずれかの複製に更新を行うには、あらかじめ決められた複製の集合（ＣＳＣＲ）に通知をし、全てのＣＳＣＲのメンバから確認を受けた場合に該更新を成功とする。もし一部の複製が確認を返さなかったら、別のレフェリという実体に対して、確認を返してきた複製のみを新しいＣＳＣＲとして登録する。この登録が成功したら更新は成功し、登録が失敗したら更新は失敗する。ここで、移動端末がネットワークから離脱する場合には、いずれのＣＳＣＲのメンバとも通信不可能となるので、該端末上の複製には更新が不可能となる。そこで、移動端末が離脱する前に、レフェリに対して自分自身のみを新しいＣＳＣＲのメンバとして登録することにより、その後の該複製への更新は他のノードと通信せずに可能としている。
【０００６】
図１８はこのようなレフェリを用いた複製データ管理方法の処理シーケンスの例を示している。クライアント６００と複製６０２は同一ノードである移動端末上に存在し、その他の複製６０４、複製６０６、複製６０８、およびレフェリ６１０は全て別のノード上に存在するものとする。また、複製６０２、複製６０４、複製６０６、および複製６０８がＣＳＣＲのメンバであるとする。
【０００７】
クライアント６００があるデータの更新を行う際に、複製６０２に対して更新要求を送信した場合（ステップ５０１）、複製６０２はＣＳＣＲのメンバである複製６０４、複製６０６、および複製６０８に更新要求を送信する（ステップ５０２〜５０４）。更新要求を受信した各複製６０４、６０６、６０８は自身のデータを更新してからそれぞれ確認応答を複製６０２へ返送する（ステップ５０５〜５０７）。ＣＳＣＲの全てのメンバから確認応答を受けた複製６０２は、コミット要求を全てのＣＳＣＲのメンバに返すとともに（ステップ５０８〜５１０）、確認応答をクライアント６００へ返す（ステップ５１１）。
【０００８】
次に、複製６０８自身あるいは複製６０８との通信に障害が発生した場合のシーケンスを説明する。クライアント６００は複製６０２に対して更新要求を送信し（ステップ５１２）、複製６０２はＣＳＣＲのメンバである複製６０４、複製６０６、および複製６０８に更新要求を送信する（ステップ５１３〜５１５）。この時、複製６０４と６０６はそれぞれ確認応答を返すが（ステップ５１６，５１７）、障害により複製６０２は複製６０８からの確認応答を受信できない。そこで、確認応答を返した複製６０４、６０６、および複製６０２自身を新しいＣＳＣＲとしてレフェリ６１０に登録するため登録要求を送信する（ステップ５１８）。レフェリ６１０はこれを受理すると変更確認応答を複製６０２に返送する（ステップ５１９）。これにより、複製６０２はＣＳＣＲの全てのメンバから確認応答を受信したことになるので、複製６０４および６０６にコミット要求を送信するとともに（ステップ５２０）、確認応答をクライアント６００へ返す（ステップ５２２）。このように、あるＣＳＣＲのメンバと通信できない状況でも、更新が可能である。
【０００９】
次に、クライアント６００および複製６０２が存在する移動端末がネットワークから離脱する場合、まず複製６０２は自身を唯一のＣＳＣＲのメンバとしてレフェリ６１０に登録する（ステップ５２３）。レフェリ６１０がこの変更を受理すると、変更確認応答を複製６０２に返す（ステップ５２４）。移動端末がネットワークから離脱（ステップ５２５）した後、クライアント６００が複製６０２に更新要求を送信しても（ステップ５２６）、ＣＳＣＲのメンバが自分自身のみなので、複製６０２はデータを更新し、確認応答を返すことができる（ステップ５２７）。
【００１０】
【発明が解決しようとする課題】
上述したように、従来の複製データ管理方法では、サーバや全ての複製サイトへの確実なアクセスを仮定していたり、データの可用性を高める代わりに複製間の一時的な不整合を許容していたり、移動端末がネットワークから離脱することが既知であることを前提として複製の更新権利を管理している。よって、トポロジが頻繁に変化し、その変化が予測不可能なネットワークにおいて、一時的な不整合さえも生じないようにデータ間の厳格な整合を保証しつつ、ネットワークから切断されたノードでデータを更新することは不可能である。
【００１１】
一方、今後普及が想定される、複数の端末が無線リンクを経由して接続されるようなネットワークを考えると、ある端末の移動や電源断によりネットワークが分断されるなどのトポロジの頻繁な変化が想定される。しかもこのような変化は一般に他のノードからは予測不可能である。このようなネットワーク上で一時的な不整合さえも許されないアプリケーション、例えば電子マネーの流通や著作権保護されて同時アクセスユーザ数が制限されたコンテンツの利用などを考えると、データの厳格な整合を保証しつつ移動端末でのデータ更新が必要である。
【００１２】
本発明の目的は、このような従来の問題点を解決し、トポロジが動的に変化してしかもそれが予測不可能なネットワークにおいて、分散されたデータの複製間の厳格な整合をとりつつ、データ更新の可用性の低下を防ぐ、複製データの管理方法および無線ネットワークを提供することにある。
【００１３】
【課題を解決するための手段】
上記目的を達成するために、本発明の複製データ管理方法は、
データの生成時には、該データの生成ノードに該データの修正または削除処理である更新処理を実行可能なコアデータを生成、配置するとともに、該コアデータが存在するノードと無線リンクで直接通信可能な周辺のノードに該データの参照処理のみが実行可能な複製データを生成、配置し、
コアデータが存在するノードは、複製データが存在する全てのノードのアドレスを保持するとともに、コアデータを他のノードに移動させる際に、移動前に把握していた複製データが存在する全てのノードに対して移動先のノードのアドレスを通知し、
複製データが存在する各ノードは、コアデータが存在するノードのアドレスを保持するとともに、該コアデータが存在するノードと自ノードとの間の通信状況を管理し、
コアデータが存在するノードで該データへの更新要求あるいは参照要求が発生した場合は、該ノードは、該コアデータに対して該要求を実行し、
複製データが存在するノードでデータへの更新要求が発生した場合は、該ノードは、前記通信状況が良好であれば、該コアデータが存在するノードと協調して自ノードにコアデータを移動させた上で、該コアデータに対して更新処理を実行し、前記通信状況が良好でなければ、該コアデータが存在するノードに更新要求を転送し、該更新要求を受信した該コアデータが存在するノードは、該コアデータの更新処理を実行するとともに、その結果を該更新要求が発生したノードに送信し、
複製データが存在するノードでデータへの最新データの参照要求が発生した場合は、該ノードは、該コアデータが存在するノードに最新情報の参照要求を転送し、該最新情報の参照要求を受信した該コアデータが存在するノードは、該コアデータの最新情報を該最新情報の参照要求が発生したノードに送信し、
複製データが存在するノードでデータへの通常の参照要求が発生した場合は、該ノードは、該ノード内のデータの情報を要求元に送信し、
コアデータも複製データも存在しないノードでデータへの参照要求が発生した場合は、該ノードは、該コアデータが存在するノードと協調して自ノードに複製データを生成、配置した上で、自ノード内のデータの情報を要求元に送信する。
【００１４】
ここで、「データの生成時・・・」については生成ノードでの以降のデータ更新およびその周辺ノードでのデータの読み出しをローカルに実行するため、「コアデータがノードを移動する際・・・」については複製データが最新のコアデータの存在場所を知るため、「複製データが存在するノードでデータへの更新要求が発生した場合・・・」についてはそのノードで以降データ更新が発生する場合にローカルに実行可能とするため、「複製データが存在するノードでデータへの最新データの参照要求が発生した場合・・・」については、最新データが必要な場合のみこのようにノード間通信が発生し、そうでない場合はローカルにデータ参照可能とするため、というのが主な動作の意味である。つまり、データの生成や更新を行ったノードでは引続きそのデータの更新が発生する可能性が高く、またデータ生成ノードの周辺はデータ読み出しが発生する可能性が高い、という前提の場合に各処理に要するノード間通信の回数を削減するというのが本発明の狙いである。
【００１５】
本発明は、各データについて、ネットワーク内にデータの更新が可能なコアデータを１つ配置し、読み出しのみが可能な複製データを複数分散配置することにより、データの一貫性を保持しつつデータの可用性を高め、またコアデータは決まった場所に配置するのではなく、データの利用状況やネットワークの状況に応じて動的に移動させ、トポロジが変化した場合には該コアデータと通信可能な複製データのみを有効とすることにより、一貫性を保つようにしたものである。
【００１６】
【発明の実施の形態】
次に、本発明の実施の形態について図面を参照して説明する。
【００１７】
図１は本発明の一実施形態の無線ネットワークの構成図である。
【００１８】
本実施形態の無線ネットワークは、それぞれ無線インタフェース（例えば無線ＬＡＮカード）を有するノード１０とノード２０とノード３０とノード４０とノード５０から構成される。ノード１０はノード２０、ノード３０、およびノード４０と、ノード２０はノード１０およびノード５０と、ノード３０およびノード４０はノード１０のみと、ノード５０はノード２０のみと、それぞれ無線リンクで直接通信可能である。初期状態では各ノード１０，２０，３０，４０，５０にはクライアントからのデータ操作要求（データ生成、更新、参照）を受け付けるデータマネージャ１３，２３，３３，４３，５３が存在し、コアデータ１７および複製データ２７，３７，４７，５７は存在しない。また、ノード１０とノード４０とノード５０にはデータ操作を要求するクライアント１５，４５，５５が存在する。さらに、各ノード上にはパケットの経路情報を管理するルーティングエージェントが存在する。図１においては、ノード１０、ノード４０、およびノード５０上のルーティングエージェント１６，４６，５６のみが表記されている。
【００１９】
本実施形態においては、クライアント１５，４５，５５、データマネージャ１３，２３，３３，４３，５３、ルーティングエージェント１６，４６，５６、コアデータ１７、および複製データ２７，３７，４７，５７は互いに通信相手のオブジェクトＩＤを指定することにより、位置に依存せず非同期にメッセージ通信可能である。
【００２０】
さらに、本実施形態においては、各ノードから無線の届く範囲に存在する全てのノードへのブロードキャスト、いくつかのノードへのマルチキャスト、および特定のノードへのユニキャスト通信が可能であるとする。また、いくつかのノードが通信を中継することにより、無線の届かない範囲に存在するノードに対してもユニキャストおよびマルチキャスト通信が可能であるものとする。
【００２１】
図２はデータマネージャ１３，２３，３３，４３，５３（以下、総称してデータマネージャ６１と称す）によるデータの実現方法を示している。データマネージャ６１は一意な識別子であるデータ名と、該データに対応するデータオブジェクト（以下単にデータと表記）のオブジェクトＩＤとの対応表であるデータ対応表６２、およびノード６０上で生成したデータ名を記録した作成済データ表６３を管理するものとする。ここで、データ名はノードのＩＤと任意の文字列から構成されるものとし、オブジェクトＩＤはノードＩＤと任意の数字の列から構成されるものとする。また、データマネージャ６１は他ノードや自ノード６０の他のオブジェクトからデータ生成要求やデータ更新要求やデータ参照要求を受信するものとし、各要求は対応するデータ名を含むものとする。
【００２２】
図３はデータマネージャ６１の動作を示すフローチャートである。
【００２３】
メッセージ受信待ちし（ステップ１０１）、メッセージを受信すると（ステップ１０２）、メッセージ種別を判断する（ステップ１０３）。
【００２４】
データ生成要求を受信した際、もし作成済データ表６３あるいはデータ対応表６２に、該データ生成要求中のデータ名に対応するエントリが存在したら、要求元にエラーを返す（ステップ１０４〜１０６）。そうでなければ自ノードにデータ６４を生成して該データ生成要求の要求元をデータ６４に通知するとともに、該データ生成要求中のデータ名に対応するオブジェクトＩＤとして、データ６４のオブジェクトＩＤを登録し（ステップ１０７）、該データ生成要求中のデータ名を作成済データ表６３に登録する（ステップ１０８）。
【００２５】
データマネージャ６１がデータ更新要求あるいはデータ参照要求を受信した際、もし該データ名を含むエントリがデータ対応表６２に存在すれば、対応するオブジェクトＩＤに対して該要求を転送する（ステップ１０９，１１０）。データ更新要求あるいはデータ参照要求を受信した際、もし該データ名を含むエントリがデータ対応表６２に存在しなければ、周りのノードにコアデータ検索要求をブロードキャストする（ステップ１１１）。なお、コアデータ検索要求には検索元オブジェクトＩＤとシーケンス番号を含める。コアデータ検索要求に対するコアデータ通知を一定時間受信しなかったら、データ更新要求あるいはデータ参照要求の要求元にエラーを返す（ステップ１１２，１１４）。もし一定時間内にコアデータ通知を受信した場合、自ノードにデータ６４を作成して該コア通知内に含まれるコアデータのオブジェクトＩＤ、および該データ更新要求あるいはデータ参照要求の要求元をデータ６４に通知する（ステップ１１２，１１３）。
【００２６】
データマネージャ６１がコアデータ検索要求を受信した場合、もし該コアデータ検索要求の検索元オブジェクトＩＤが自身のオブジェクトＩＤと一致するか、該コアデータ検索要求の検索元オブジェクトＩＤとシーケンス番号の組を既に受信済であったら、該コアデータ検索要求を破棄する（ステップ１１５〜１１７）。そうでなければ、もし該コアデータ検索要求中のデータ名がデータ対応表６２に存在すれば、該当するエントリのオブジェクトＩＤを該コアデータ検索要求の要求元オブジェクトＩＤに対して返送する（ステップ１１８，１１９）。上記どちらの条件にも当てはまらなければ、該コアデータ検索要求の検索元オブジェクトＩＤとシーケンス番号の組を記憶し、該コアデータ検索要求を周りのノードにブロードキャストする（ステップ１１８，１２０）。
【００２７】
データは他ノードや自ノード内の他のオブジェクトからデータ更新要求やデータ参照要求を受信するものとし、各要求は対応するデータ名を含むものとする。
【００２８】
図４は図１の無線ネットワークにおいてノード１０でデータ生成要求が発生した場合のデータ生成動作のシーケンスを示している。
【００２９】
まず、ノード１０上のクライアント１５がメモリ上のファイルの保存などのため、データ生成要求をノード１０上のデータマネージャ１３に送信する（ステップ１２１）。データマネージャ１３はノード１０上にコアデータ１７を生成し（ステップ１２２）、コアデータ１７は自身のローカルデータを生成して（ステップ１２３）、クライアント１５へ生成応答を返すとともに（ステップ１２４）、自身のローカルデータ情報の複製生成要求をブロードキャストする（ステップ１２５〜１２７）。
【００３０】
生成要求を受信したデータマネージャ２３，３３，４３は、それぞれのノードに複製データ２７，３７，４７を生成し（ステップ１２８，１２９，１３０）、各複製データ２７，３７，４７はコアデータ１７に確認応答をそれぞれ返送する（ステップ１３１，１３２，１３３）。なお、ステップ１２５〜１２７および１２８〜１３０において、コアデータ１７は自身のアドレスであるオブジェクトＩＤを各ノードのデータマネージャ経由で複製データに生成時に通知する。
【００３１】
コアデータ１７は確認応答を受信するのに一定時間待機し、その後確認応答を受信した複製データのオブジェクトＩＤ（アドレス）を記憶し（ステップ１３４）、記憶した全ての複製データへデータ生成の実行要求をマルチキャストする（ステップ１３５〜１３７）。実行要求を受信した複製データ２７，３７，４７はそれぞれローカルデータを生成する（ステップ１３８，１３９，１４０）。
【００３２】
図５は図１のネットワークにおいてノード１０でデータ読み出し、および更新要求が発生した場合の動作のシーケンスを示している。
【００３３】
ノード１０上のクライアント１５がデータの読み出しを行う場合、コアデータ１７に参照要求を送信する（ステップ１４１）。コアデータ１７はローカルデータを読み出し（ステップ１４２）、その結果を参照応答としてクライアント１５に返す（ステップ１４３）。
【００３４】
クライアント１５がデータの更新を行う場合、コアデータ１７に更新要求を送信する（ステップ１４４）。コアデータ１７はローカルデータに対して更新を実行し（ステップ１４５）、その結果に基づいて更新応答をクライアント１５に返す（ステップ１４６）。
【００３５】
図６は図１の無線ネットワークにおいてノード４０でデータ読み出し、および更新要求が発生した場合の動作のシーケンスを示している。
【００３６】
ノード４０上のクライアント４５が通常のデータ読み出しを行う場合、複製データ４７に参照要求を送信する（ステップ１５１）。複製データ４７はローカルデータを読み出し（ステップ１５２）、その結果を参照応答としてクライアント４５に返す（ステップ１５３）。
【００３７】
次に、クライアント４５が最新のデータ読み出しを行う場合、複製データ４７に参照要求を送信する（ステップ１５４）。複製データ４７は最新データを獲得するため、自身が記憶しているコアデータ１７に対して参照要求を送信する（ステップ１５５）。参照要求を受信したコアデータ１７はローカルデータを読み出し（ステップ１５６）、その結果を参照応答として複製データ４７へ返す（ステップ１５７）。複製データ４７はその結果をクライアント４５に返す（ステップ１５８）とともに、ローカルデータとして保存する（ステップ１５９）。
【００３８】
クライアント４５がデータの更新を行う場合、複製データ４７に更新要求を送信する（ステップ１６０）。複製データ４７は自身が記憶しているコアデータ１７に対してコア移動要求を送信する（ステップ１６１）。コア移動要求を受信したコアデータ１７は、自身が複製データとなり（ステップ１６２）、コア移動応答を複製データ４７へ返送する（ステップ１６３）。この時自身が記憶している複製データのオブジェクトＩＤも該コア移動応答中に含めて返送する。
【００３９】
コア移動応答を受信した複製データ４７は自身がコアデータとなり（ステップ１６４）、自身のローカルデータに対して更新を実行し（ステップ１６５）、その結果に基づいて更新応答をクライアント４５に返す（ステップ１６６）。さらに、コア移動応答中で通知された複製データに対して、コアが移動したこと、移動後のアドレス、およびデータの更新内容を更新通知に含めてマルチキャストする（ステップ１６７〜１６９）。複製データとなったコアデータ１７および複製データ２７と３７は、もし更新通知を受信したらメッセージの内容に従って更新処理を行う（ステップ１７０，１７１，１７２）。
【００４０】
図７は図１の無線ネットワークにおいて複製データが存在しないノード５０でデータ読み出し要求が発生した場合の動作のシーケンスを示している。
【００４１】
ノード５０上のクライアント５５は該データに対する複製データあるいはコアデータのオブジェクトＩＤを知らないため、データマネージャ５３に対して該データの参照要求を送信する（ステップ１８１）。データマネージャ５３は、該データに対するコアデータを検索するためコア検索要求をブロードキャストする（ステップ１８２）。本実施形態ではコア検索要求はデータマネージャ２３のみが受信する。もしデータマネージャ２３がコアデータ１７のオブジェクトＩＤを知らなかったら、コア検索要求を再ブロードキャストする。本実施形態ではデータマネージャ２３はコアデータ１７のオブジェクトＩＤを知っているため、コアデータ１７のオブジェクトＩＤをコア通知に含めてデータマネージャ５３へ返送する（ステップ１８３）。
【００４２】
コア通知メッセージを受信したデータマネージャ５３は、複製データ５７を生成し、コアデータ１７およびクライアント５５のオブジェクトＩＤを通知する（ステップ１８４）。複製データ５７はコアデータ１７に対してデータ要求を送信する（ステップ１８５）。コアデータ１７はローカルデータを読出し（ステップ１８６）、データの中身をデータ通知に含めて複製データ５７へ返送し（ステップ１８７）、複製データ５７を記憶する（ステップ１８８）。複製データ５７は通知された情報からローカルデータを生成し（ステップ１８９）、クライアント５５へ参照応答を返す（ステップ１９０）。
【００４３】
図８は図１の無線ネットワークにおいて複製データが存在しないノード５０でデータ更新要求が発生した場合の動作のシーケンスを示している。
【００４４】
ノード５０上のクライアント５５は該データに対する複製データあるいはコアデータのオブジェクトＩＤを知らないため、データマネージャ５３に対して該データの更新要求を送信する（ステップ２０１）。データマネージャ５３は、該データに対するコアデータを検索するためコア検索要求をブロードキャストする（ステップ２０２）。本実施形態ではコア検索要求はデータマネージャ２３のみが受信する。もしデータマネージャ２３がコアデータ１７のオブジェクトＩＤを知らなかったら、コア検索要求を再ブロードキャストする。本実施形態ではデータマネージャ２３はコアデータ１７のオブジェクトＩＤを知っているため、コアデータ１７のオブジェクトＩＤをコア通知に含めてデータマネージャ５３へ返送する（ステップ２０３）。
【００４５】
コア通知メッセージを受信したデータマネージャ５３は、複製データ５７を生成し、コアデータ１７およびクライアント５５のオブジェクトＩＤを通知する（ステップ２０４）。複製データ５７はコアデータ１７に対してデータ要求を送信する（ステップ２０５）。コアデータ１７はデータの中身をデータ通知に含めて複製データ５７へ返送し（ステップ２０６）、複製データ５７を記憶する（ステップ２０７）。複製データ５７は通知された情報からローカルデータを生成する（ステップ２０８）。この時点でノード５０には複製データが存在する状態となる。
【００４６】
次に、複製データ５７はデータの更新を実行するため、コア移動要求をコアデータ１７へ送信する（ステップ２０９）。コア移動要求を受信したコアデータ１７は、自身が複製データになって（ステップ２１０）、コア移動応答を複製データ５７へ返送する（ステップ２１１）。この時自身が記憶している複製データのオブジェクトＩＤも該コア移動応答中に含めて返送する。
【００４７】
コア移動応答を受信した複製データ５７は自身がコアデータとなり（ステップ２１２）、更新処理を実行する（ステップ２１３）。そして、クライアント５５へ更新応答を返送するとともに（ステップ２１４）、コア移動応答中で通知された全ての複製データ１７、２７、３７、４７へ更新通知をマルチキャストする（ステップ２１５〜２１８）。複製データとなったコアデータ１７および複製データ２７と３７と４７は、もし更新通知を受信したらメッセージの内容に従って更新処理を行う（ステップ２１９〜２２２）。
【００４８】
なお、本実施形態ではコアデータを移動する前に複製データ５７がコアデータ１７に対してデータ要求を行っているが（ステップ２０５）、データ要求とコア移動をまとめて一つのメッセージで要求することも可能である。
【００４９】
図９は図１の無線ネットワークにおける複製データへのアクセス動作を示すシーケンスを示している。
【００５０】
ノード４０上の複製データ４７は自身が記憶しているコアデータ１７に対して通信状況確認メッセージを定期的に送信する（ステップ２３１）。通信状況確認メッセージを受信したコアデータ１７は、通信状況通知メッセージを複製データ４７へ返送する（ステップ２３２）。該通信状況通知メッセージを受信した複製データ４７は、通信状況確認メッセージを送信してから通信状況通知メッセージを受信するまでのラウンドトリップタイムがある閾値を超えているかどうかにより、通信状況が良好かどうかを決定する（ステップ２３３）。本実施形態では通信状況通知の受信によるラウンドトリップタイムがある閾値を超えたため、通信状況を「不良」として決定したものとする。
【００５１】
この時ノード４０上のクライアント４５がデータの更新操作をする場合、複製データ４７に更新要求を送信する（ステップ２３４）。複製データ４７は自身が記憶しているコアデータ１７との通信状況が「不良」であるので、コアデータ１７に対して更新内容とともに更新要求を転送する（ステップ２３５）。更新要求を受信したコアデータ１７は、ローカルデータを更新し（ステップ２３６）、更新応答を返送する（ステップ２３７）。複製データ４７はその結果を更新応答としてクライアント４５に返すとともに（ステップ２３８）、ローカルデータとして保存する（ステップ２３９）。
【００５２】
次に、複製データ４７が定期的な通信状況確認メッセージをコアデータ１７へ送信し（ステップ２４０）、通信状況通知メッセージを受信した時（ステップ２４１）、ラウンドトリップタイムがある閾値を超えなかったため、通信状況を「良好」と変更したものとする（ステップ２４２）。この時ノード４０上のクライアント４５がデータの更新要求を送信すると（ステップ２４３）、複製データ４７はコアデータ１７に対してコア移動要求を送信する（ステップ２４４）。コア移動要求を受信したコアデータ１７は、自身が複製データになって（ステップ２４５）、コア移動応答を複製データ４７へ返送する（ステップ２４６）。この時自身が記憶している複製データのオブジェクトＩＤも該コア移動応答中に含めて返送する。
【００５３】
コア移動応答を受信した複製データ４７は自身がコアデータとなり（ステップ２４７）、自身のローカルデータに対して更新を実行し（ステップ２４８）、その結果に基づいた更新応答をクライアント４５に返すとともに（ステップ２４９）、コア移動応答中で通知された全ての複製データ１７、２７、３７へ更新通知をマルチキャストする（ステップ２５０〜２５２）。複製データとなったコアデータ１７および複製データ２７と３７は、もし更新通知を受信したらメッセージの内容に従って更新処理を行う（ステップ２５３〜２５５）。
【００５４】
図１０は図１の無線ネットワークにおける複製データへのアクセス動作を示すシーケンス図である。
【００５５】
ノード４０上の複製データ４７は自身が記憶しているコアデータ１７のオブジェクトＩＤから存在ノード１０のノードＩＤを抽出し、自ノードのルーティングエージェント４６に対して経路情報要求メッセージを送信して（ステップ２６１）、ノード１０への経路のホップ数を獲得する。ルーティングエージェント４６は経路情報通知メッセージを複製データ４７へ返送する（ステップ２６２）。経路情報通知メッセージを受信した複製データ４７は、獲得したホップ数情報がある閾値を超えるかどうかにより、通信状況が良好かどうかを決定する（ステップ２６３）。本実施形態では経路情報通知メッセージの受信により獲得したノード１０へのホップ数がある閾値を超えたため、通信状況を「不良」として決定したものとする。なお、本実施形態で用いたネットワークではノード４０とノード１０の間のホップ数は常に１であるが、例えばノード４０がノード５０のみと通信可能な場所に移動したため、ノード４０からノード１０への経路のホップ数が３となる場合も考えられる。
【００５６】
この時ノード４０上のクライアント４５がデータの更新操作をする場合、複製データ４７に更新要求を送信する（ステップ２６４）。複製データ４７は自身が記憶しているコアデータ１７との通信状況が「不良」であるので、コアデータ１７に対して更新内容とともに更新要求を転送する（ステップ２６５）。更新要求を受信したコアデータ１７は、ローカルデータを更新し（ステップ２６６）、更新応答を返送する（ステップ２６７）。複製データ４７はその結果を更新応答としてクライアント４５に返すとともに（ステップ２６８）、ローカルデータとして保存する（ステップ２６９）。
【００５７】
次に、複製データ４７が定期的な経路情報要求メッセージをルーティングエージェント４６に送信し（ステップ２７０）、ルーティングエージェント４６が経路情報通知メッセージを返送した時（ステップ２７１）、ノード１０へのホップ数がある閾値を下回ったため、通信状況を「良好」と変更したものとする。これは例えばノード４０がノード５０のみと通信可能な場所から、図１で示された位置に戻ったため、ノード４０からノード１０への経路のホップ数が１となった場合が考えられる。
【００５８】
この時ノード４０上のクライアント４５がデータの更新要求を送信すると（ステップ２７３）、複製データ４７はコアデータ１７に対してコア移動要求を送信する（ステップ２７４）。コア移動要求を受信したコアデータ１７は、自身が複製データになって（ステップ２７５）、コア移動応答を複製データ４７へ返送する（ステップ２７６）。この時自身が記憶している複製データのオブジェクトＩＤも該コア移動応答中に含めて返送する。
【００５９】
コア移動応答を受信した複製データ４７は自身がコアデータとなり（ステップ２７７）、自身のローカルデータに対して更新を実行し（ステップ２７８）、その結果に基づいた更新応答をクライアント４５に返すとともに（ステップ２７９）、コア移動応答中で通知された全ての複製データ１７、２７、３７へ更新通知をマルチキャストする（ステップ２８０〜２８２）。複製データとなったコアデータ１７および複製データ２７と３７は、もし更新通知を受信したらメッセージの内容に従って更新処理を行う（ステップ２８３〜２８５）。
【００６０】
図１１および図１２は図１の無線ネットワークにおける複製データへのアクセス動作を示すシーケンス図である。
【００６１】
ノード５０上の複製データ５７は自身が記憶しているコアデータ１７に対して通信状況確認メッセージを定期的に送信する（ステップ３０１）。通信状況確認メッセージを受信したコアデータ１７は、通信状況通知メッセージを複製データ５７へ返送する（ステップ３０２）。通信状況通知メッセージを受信した複製データ５７は、通信状況確認メッセージを送信してから通信状況通知メッセージを受信するまでのラウンドトリップタイムを記憶しておく。次に、複製データ５７はコアデータ１７のオブジェクトＩＤからその存在ノード１０のノードＩＤを抽出し、自ノードのルーティングエージェント５６に対して経路情報要求メッセージを送信して（ステップ３０３）、ノード１０への経路のホップ数を獲得する。ルーティングエージェント５６は経路情報通知メッセージを複製データ５７へ返送し（ステップ３０４）、ノード１０への経路のホップ数を通知する。経路情報通知メッセージを受信した複製データ５７は、獲得したホップ数情報を記憶しておく。さらに、該記憶しておいたラウンドトリップタイムがある閾値を超えるかどうか、および該記憶しておいたラウンドトリップタイムを該記憶しておいたホップ数で割った値がある別の閾値を超えるかどうか、によりコアデータ１７との通信状況を決定する（ステップ３０５）。本実施形態においては、該記憶しておいたラウンドトリップタイムがある閾値を超えたため、通信状況を「不良」として決定したものとする。
【００６２】
今、ノード５０上のクライアント５５が複製データ５７に対してデータの更新要求を送信したものとする（ステップ３０６）。複製データ５７は通信状況が「良好」ではないため、まずコアデータ１７に対して更新要求を送信する（ステップ３０７）。更新要求を受信したコアデータ１７はローカルデータを更新し（ステップ３０８）、更新応答を返送する（ステップ３０９）。更新応答を受信した複製データ５７は更新応答をクライアント５５へ返すとともに（ステップ３１０）、自身のローカルデータを更新する（ステップ３１１）。
【００６３】
次に、複製データ５７はコアデータ１７に対して逐次移動要求を送信する（ステップ３１２）。逐次移動要求を受信したコアデータ１７は、要求元である複製データ５７のオブジェクトＩＤから存在ノード５０のノードＩＤを決定し、自ノードのルーティングエージェント１６に経路情報要求を送信して（ステップ３１３）、ノード５０への経路における次ノード情報を要求する。ルーティングエージェント１６は経路情報を確認し、経路情報通知を返送して（ステップ３１４）、次ノードがノード２０であることを通知する。経路情報通知を受信したコアデータ１７は通知されたノード２０上の複製データ２７に対して逐次移動要求を送信する（ステップ３１５）。なお、もしノード２０上に複製データが存在しなければ、ノード２０上のデータマネージャ２３にデータ生成を要求する。
【００６４】
逐次移動要求を受信した複製データ２７は、コア移動要求をコアデータ１７に対して送信する（ステップ３１６）。コア移動要求を受信したコアデータ１７は自身が複製データとなり（ステップ３１７）、コア移動応答を複製データ２７に対して送信する（ステップ３１８）。この時コア移動応答にはコアデータ１７が保持している複製データのオブジェクトＩＤ情報が含まれる。コア移動応答を受信した複製データ２７は、自身がコアデータとなり（ステップ３１９）、コア移動応答中で通知された全ての複製データ１７、３７、４７、５７へ更新通知をマルチキャストして（ステップ３２０〜３２３）、コアデータが移動したことを通知する。更新通知を受信した各複製データ３７、４７、５７は保持するコアデータのオブジェクトＩＤを更新する（ステップ３２４〜３２７）。このようにして、コアデータはノード２０上に逐次移動する。なお、この移動はクライアント５５で発生した更新要求を処理した後に行われるため、クライアント５５からの更新要求の処理時間には影響を与えていない。
【００６５】
次に、ノード５０上の複製データ５７はコアデータ２７に対して定期的な通信状況確認メッセージを送信する（ステップ３３１）。通信状況確認メッセージを受信したコアデータ２７は、通信状況通知メッセージを複製データ５７へ返送する（ステップ３３２）。通信状況通知メッセージを受信した複製データ５７は、通信状況確認メッセージを送信してから通信状況通知メッセージを受信するまでのラウンドトリップタイムを記憶しておく。次に、複製データ５７はコアデータ２７のオブジェクトＩＤから存在ノード２０のノードＩＤを抽出し、自ノードのルーティングエージェント５６に対して経路情報要求メッセージを送信して（ステップ３３３）、ノード２０への経路のホップ数を獲得する。ルーティングエージェント５６は経路情報通知メッセージを複製データ５７へ返送する（ステップ３３４）。経路情報通知メッセージを受信した複製データ５７は、獲得したホップ数情報を記憶しておく。本実施形態では、該記憶しておいたラウンドトリップタイムがある閾値を超えず、該記憶しておいたラウンドトリップタイムを該記憶しておいたホップ数で割った値も別の閾値を超えなかったため、通信状況を「良好」として決定したものとする（ステップ３３５）。
【００６６】
この時ノード５０上のクライアント５５が再び更新要求を複製データ５７に対して送信したものとする（ステップ３３６）。今度は通信状況が良好なので、複製データ５７はコアデータ２７に対してコア移動要求を送信する（ステップ３３７）。コア移動要求を受信したコアデータ２７は自身が複製データとなり（ステップ３３８）、コア移動応答を複製データ５７へ返送する（ステップ３３９）。コア移動応答を受信した複製データ５７は自身がコアデータとなり（ステップ３４０）、ローカルデータを更新して（ステップ３４１）、更新応答をクライアント５５へ返送するとともに（ステップ３４２）、コア移動応答中で通知された全ての複製データ１７、２７、３７、４７へ更新通知をマルチキャストして（ステップ３４３〜３４６）、更新したデータ内容およびコアデータが移動したことを通知する。更新通知を受信した各複製データ１７、２７、３７、４７は保持するコアデータのオブジェクトＩＤおよびローカルデータを更新する（ステップ３４７〜３５０）。
【００６７】
以下の図１３以降の実施形態では、図４で示したデータ生成シーケンス中の実行要求（ステップ１３５〜１３７）に該データの有効期間情報（最新であることを保証する期間）を含めて通知したものとし、該実行要求を受信した複製データ２７、３７、および４７は該有効期間情報を記憶しているものとする。この場合、コアデータ１７は図４のステップ１２３で、（現在の時刻＋あらかじめ決められた一定の時間）を有効情報期間として計算し、記憶する。
【００６８】
図１３は図１の無線ネットワークにおいてノード１０でデータ読み出し、および更新要求が発生した場合の動作のシーケンスを示している。
【００６９】
ノード１０上のクライアント１５がデータの読み出しを行う場合、コアデータ１７に参照要求を送信する（ステップ３５１）。コアデータ１７はローカルデータを読み出し（ステップ３５２）、その結果を参照応答としてクライアント１５に返す（ステップ３５３）。
【００７０】
ノード１０上のクライアント１５がデータの更新を行う場合、コアデータ１７に更新要求を送信する（ステップ３５４）。コアデータ１７は自身が記憶する全ての複製データ２７、３７、４７に対して更新要求をマルチキャストする（ステップ３５５〜３５７）。更新要求を受信した複製データ２７、３７、および４７は更新実行要求を受信するまでのタイマを設定して確認応答をそれぞれ返送する（ステップ３５８〜３６０）。コアデータ１７は全ての複製データ２７、３７、４７から確認応答を受信したら、自身のローカルデータに更新を実行するとともに、（現在の時刻＋あらかじめ決められた一定の時間）を有効期間情報として新規に記憶し（ステップ３６１）、クライアント１５に更新応答を返送するとともに（ステップ３６２）、全ての複製データ２７、３７、４７に対して実行要求をマルチキャストするとともに、新規に記憶した有効期間情報を通知する（ステップ３６３〜３６５）。実行要求を受信した各複製データ２７、３７、４７は、それぞれ設定した更新実行要求を受信するまでのタイマを解除し、ローカルデータに対して更新処理を実行するとともに、有効期間情報を記憶する（ステップ３６６〜３６８）。
【００７１】
その後、該データに更新要求が発生しなかった場合、該データの有効期間が過ぎる前にコアデータ１７は、データの延長要求を複製データ２７、３７、４７へマルチキャストする（ステップ３６９〜３７１）。データの延長を受諾した複製データ２７、３７、４７は延長応答を返送する（ステップ３７２，３７３，３７４）。これを繰り返すことにより、データの有効性を維持する。
【００７２】
図１４は図１の無線ネットワークにおいてノード４０でデータ読み出し要求が発生した場合の動作のシーケンスを示している。
【００７３】
ノード４０上のクライアント４５がデータの読み出しを行う場合、複製データ４７に参照要求を送信する（ステップ３８１）。複製データ４７は該データの有効期間内であれば、それが通常のデータ読み出しであっても、最新のデータ読み出しであっても、ローカルデータを読み出し（ステップ３８２）、その結果を参照応答としてクライアント４５に返す（ステップ３８３）。
【００７４】
一方、クライアント４５が複製データ４７に参照要求を送信した際（ステップ３８４）、複製データ４７が保持するデータの有効期間を過ぎていたら、コアデータ１７に対して最新データの参照要求を送信する（ステップ３８５）。参照要求を受信したコアデータ１７は、ローカルデータを参照し（ステップ３８６）、他の複製データにも通知しているデータの有効期間情報を含んだ参照応答を周辺複製データ４７へ返送する（ステップ３８７）。
【００７５】
参照応答を受信した複製データ４７は、ローカルデータおよびその有効期間を更新し（ステップ３８８）、その結果を参照応答としてクライアント４５へ返す（ステップ３８９）。さらに、確認応答をコアデータ１７へ返送する（ステップ３９０）。確認応答を受信したコアデータ１７は、該複製データ４７のオブジェクトＩＤを記憶し（ステップ３９１）、定期的な有効期間の延長通知を複製データ４７にも送信するようにする。
【００７６】
図１５は図１の無線ネットワークにおいてノード４０でデータの更新要求が発生した場合の動作のシーケンスを示している。
【００７７】
ノード４０上のクライアント４５がデータの更新を行う場合、複製データ４７に更新要求を送信する（ステップ４０１）。複製データ４７はコアデータ１７に対してコア移動要求を送信する（ステップ４０２）。
【００７８】
コア移動要求を受信したコアデータ１７は、自身が複製データになって（ステップ４０３）、コア移動応答を複製データ４７へ返送する（ステップ４０４）。該コア移動応答にはコアデータ１７が記憶していた複製データのオブジェクトＩＤ情報も含まれる。コア移動応答を受信した複製データ４７は自身がコアデータとなり（ステップ４０５）、コア移動応答中に含まれた複製データおよび以前のコアデータ、すなわち複製データ１７，２７，３７に対して更新要求をマルチキャストする（ステップ４０６〜４０８）。
【００７９】
更新要求を受信した複製データ１７，２７，３７は更新実行要求を受信するまでのタイマを設定して確認応答をそれぞれ返送する（ステップ４０９〜４１１）。コアデータ４７は全ての複製データ１７、２７、３７から確認応答を受信したら、自身のローカルデータに更新を実行し（ステップ４１２）、クライアント４５に更新応答を返送するとともに（ステップ４１３）、全ての複製データ１７、２７、３７に対して実行要求をマルチキャストする（ステップ４１４〜４１６）。実行要求を受信した各複製データ１７，２７，３７はそれぞれローカルデータに対して更新処理を実行する（ステップ４１７〜４１９）。
【００８０】
図１６は図１の無線ネットワークにおいて複製データが存在しないノード５０でデータ更新要求が発生した場合の動作のシーケンスを示している。なお、ノード５０でのデータ参照要求については、図７と同じシーケンスとなる。
【００８１】
ノード５０上のクライアント５５は該データに対する複製データあるいはコアデータのオブジェクトＩＤを知らないため、データマネージャ５３に対して該データの更新要求を送信する（ステップ４２１）。データマネージャ５３は、該データに対するコアデータを検索するためコア検索要求をブロードキャストする（ステップ４２２）。本実施形態ではコア検索要求はデータマネージャ２３のみが受信する。もしデータマネージャ２３がコアデータ１７のオブジェクトＩＤを知らなかったら、コア検索要求を再ブロードキャストする。本実施形態ではデータマネージャ２３はコアデータ１７のオブジェクトＩＤを知っているため、コアデータ１７のオブジェクトＩＤをコア通知に含めてデータマネージャ５３へ返送する（ステップ４２３）。
【００８２】
コア通知メッセージを受信したデータマネージャ５３は、複製データ５７を生成し、コアデータ１７およびクライアント５５のオブジェクトＩＤを通知する（ステップ４２４）。複製データ５７はコアデータ１７に対してデータ要求を送信する（ステップ４２５）。コアデータ１７はデータの中身をデータ通知に含めて複製データ５７へ返送し（ステップ４２６）、複製データ５７を記憶する（ステップ４２７）。複製データ５７は通知された情報からローカルデータを生成する（ステップ４２８）。この時点でノード５０には複製データが存在する状態となる。
【００８３】
次に、複製データ５７はデータの更新を実行するため、コア移動要求をコアデータ１７へ送信する（ステップ４２９）。コア移動要求を受信したコアデータ１７は、自身が複製データになって（ステップ４３０）、コア移動応答を複製データ５７へ返送する（ステップ４３１）。この時自身が記憶している複製データのオブジェクトＩＤも該コア移動応答中に含めて返送する。
【００８４】
コア移動応答を受信した複製データ５７は自身がコアデータとなり（ステップ４３２）、コア移動応答中に含まれた複製データおよび以前のコアデータ、すなわち複製データ１７，２７，３７，４７に対して更新要求を送信する（ステップ４３３〜４３６）。
【００８５】
更新要求を受信した複製データ１７，２７，３７，および４７は更新実行要求を受信するまでのタイマを設定して確認応答をそれぞれ返送する（ステップ４３７〜４４０）。コアデータ５７は全ての複製データ１７、２７、３７、４７から確認応答を受信したら、自身のローカルデータに更新を実行し（ステップ４４１）、クライアント５５に更新応答を返送するとともに（ステップ４４２）、全ての複製データに対して実行要求を送信する（ステップ４４３〜４４６）。実行要求を受信した各複製データ１７，２７，３７，および４７はそれぞれローカルデータに対して更新処理を実行する（ステップ４４７〜４５０）。
【００８６】
なお、本実施形態ではコアデータ１７を移動する前に複製データ５７がコアデータ１７に対してデータ要求を行っているが（ステップ４２５）、データ要求とコア移動をまとめて一つのメッセージで要求することも可能である。
【００８７】
本発明においては、これまで述べてきたシーケンス図のいずれかのメッセージが紛失するなどの障害が発生しても、データの一貫性を保つことができる。以下ではそのような例について図面を用いて説明する。
【００８８】
図１７は図１３で示した動作のシーケンス図において、いくつかのメッセージ通信に障害が発生した場合のシーケンスを示している。
【００８９】
ノード１０上のクライアント１５から更新要求を受信した（ステップ４５１）コアデータ１７は自身が記憶する全ての複製データ２７、３７、４７に対して更新要求をマルチキャストする（ステップ４５２，４５３，４５４）。しかしこの更新要求は障害のため複製データ４７には届かなかったものとする。この時更新要求を受信した複製データ２７と３７は更新実行要求を受信するまでのタイマを設定して確認応答をそれぞれ返送するが（ステップ４５５，４５６）、当然複製データ４７は確認応答を送信しない。
【００９０】
コアデータ１７では複製データ４７からの確認応答待ちのタイマがタイムアウトするため（ステップ４５７）、管理している複製データのリストから複製データ４７のオブジェクトＩＤを削除し（ステップ４５８）、クライアント１５に更新の失敗を更新応答で通知するとともに（ステップ４５９）、確認応答を返してきた複製データ２７、３７に対して更新取消を送信して（ステップ４６０，４６１）、更新要求の取消を通知する。ここで、障害により更新取消は複製データ３７によって受信されなかったものとする。
【００９１】
更新取消を受信した複製データ２７は更新の実行はせずに、以降の参照要求に対応する。一方、複製データ３７はコアデータ１７からの実行要求待ちタイマがタイムアウトするため（ステップ４６２）、データを破棄する（ステップ４６３）。この時点では各ノードのデータは更新されていない情報であるか、全く存在しないかどちらかであり、データの一貫性は保持される。なお、複製データ４７が更新要求を受信し、その後送信した確認応答が障害のためコアデータ１７に受信されなかった場合も、複製データ３７と同様の処理を行う。
【００９２】
その後、コアデータ１７で該データの有効期間が切れる（ステップ４７０）前に更新要求が届いた場合（ステップ４６４）、更新を行おうとしても失敗するため、すぐに更新応答で失敗を通知する（ステップ４６５）。
【００９３】
さらに時間が経過し、複製データ２７や４７で該データの有効期間を過ぎた場合（ステップ４６６，４６７）、該データは無効となるため破棄する（ステップ４６８，４６９）。データ破棄後に各複製データへクライアントから参照要求や更新要求があった場合、複製のないノードへのアクセスの場合と同様にコアデータに対して処理を要求する。
【００９４】
一方、コアデータで有効期間が切れた場合は（ステップ４７０）各ノードでの時間の誤差を吸収するため一定時間待ってから、保持している全ての複製データ２７、３７に対して最新データおよび新たに設定する該データの有効期間を通知する（ステップ４７１，４７２）。データ通知を受信した複製データ２７および３７は、データを新たに生成し（ステップ４７３，４７４）、確認応答をそれぞれ返す（ステップ４７５，４７６）。もしコアデータ１７が一定時間内に確認応答を受信しなければ、該複製データを、保持しているリストから削除する。一方、複製データ４７ではデータ破棄後一定時間経過してもコアデータからの通知がなければ、自身が消滅する（ステップ４７７）。これ以降、クライアントからの要求に対しては通常の処理を行えばよい。
【００９５】
なお、コア移動時のコア移動応答メッセージ（例えば図１５のステップ４０４）が紛失した場合、ネットワーク上にコアデータが存在しなくなり、以降データの更新が不可能となるが、該データの有効期間内はデータの更新は行われないため、データの不整合は生じない。また、複数のコアデータが存在することもあり得ない。さらに、コアデータの移動はコアデータとの通信状況が良好な場合のみ実行することにより、コア移動応答メッセージが紛失する可能性は小さい。また、コアデータを逐次的に移動することによっても、コア移動時のコア移動応答メッセージが紛失する可能性を小さくすることが可能である。
【００９６】
なお、以上説明したノードは専用のハードウェアにより実現されるもの以外に、その機能を実現するためのプログラムを、コンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行するものであってもよい。コンピュータ読み取り可能な記録媒体とは、フロッピーディスク、光磁気ディスク、ＣＤ−ＲＯＭ等の記録媒体、コンピュータシステムに内蔵されるハードディスク装置等の記憶装置を指す。さらに、コンピュータ読み取り可能な記録媒体は、インターネットを介してプログラムを送信する場合のように、短時間の間、動的にプログラムを保持するもの（伝送媒体もしくは伝送波）、その場合のサーバとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含む。
【００９７】
【発明の効果】
以上説明したように、本発明によれば、任意のノードに存在し得るデータごとにネットワーク内で一意なコアデータが更新の権利を持つことにより、ネットワーク全体でのデータの一貫性を保つことが可能である。
【００９８】
請求項１に記載の発明では、データの更新時にはコアデータを更新要求発生ノードに移動してから行い、最新のデータ読み出しはコアデータから行うため、データ更新後のデータの不整合は発生しない。本発明はデータ更新後に該更新発生ノードでさらにデータ参照要求が発生し易い場合に、ノード間通信を不要とするため効率的である。特に、トポロジが変化し易くその変化が予測不能なネットワークにおいては、ノード間通信なしにデータの参照が可能であることは、データの可用性を高めることを可能とする。
【００９９】
また、請求項２〜請求項６に記載の発明では、コアデータへの通信のラウンドトリップタイムやホップ数やそれらから計算した値を用いてコアデータへのアクセス状況を決定し、データの更新要求発生時において、コアデータへのアクセス状況が悪い場合には、コアデータを移動するのではなくデータの更新要求をコアデータに依頼するため、コア移動時のネットワーク障害により、コアデータが消滅して以降のデータ更新が一切できなくなる、などの障害が発生する可能性を低く抑えることができる。
【０１００】
一方、コアデータとデータ更新の要求元の間の経路のホップ数が大きい場合に、長いホップ数を一度にコアが移動すると、メッセージの欠落が生じ易く、コアデータが消滅して以降のデータ更新が一切できなくなる可能性が高い。請求項３に記載の発明では、データ変更のたびに逐次的にデータ更新元に向けてコアデータを移動することにより、このような障害が発生する可能性を低く抑えることができる。
【０１０１】
請求項７に記載の発明は、データに対して有効期間を設けることにより、複製データの存在するノードでの参照要求をノード間通信なしに実行可能とするため、従来方式では不可能であった、予測不可能なネットワーク切断時のデータの厳格な一貫性の維持が可能となる。
【０１０２】
また、本発明においては実施形態でも示した通り、データ更新に関するメッセージが紛失しても、データの一貫性を保つことが可能である。また途中でノード間の通信が途絶えても、一定期間経過後にはデータの一貫性を保ったまま通常の更新や参照が可能であるため、データの可用性の低下を抑えている。
【０１０３】
したがって、本発明は、トポロジが変化し易く、その変化が予測可能なネットワーク内に分散配置されたデータの複製間の整合を頑強に保持しつつ、ノード間通信のコストを削減してデータの可用性の低下を抑えたい場合に効果がある。
【図面の簡単な説明】
【図１】本発明の一実施形態の無線ネットワークの構成図である。
【図２】図１の実施形態におけるデータの実現方法の説明図である。
【図３】データマネージャの動作を示すフローチャートである。
【図４】データ生成動作の例を示すシーケンス図である。
【図５】コアデータへのアクセス動作の例を示すシーケンス図である。
【図６】複製データへのアクセス動作の例を示すシーケンス図である。
【図７】複製の存在しないノードにおける参照動作の例を示すシーケンス図である。
【図８】複製の存在しないノードにおける更新動作の例を示すシーケンス図である。
【図９】複製データへのアクセス動作の例を示すシーケンス図である。
【図１０】データへのアクセス動作の例を示すシーケンス図である。
【図１１】通信状況が良好でない場合のデータ更新動作の例を示すシーケンス図である。
【図１２】通信状況が良好な場合のデータ更新動作の例を示すシーケンス図である。
【図１３】コアデータへのアクセス動作の例を示すシーケンス図である。
【図１４】複製データでのデータ読み出し動作の例を示すシーケンス図である。
【図１５】複製データでのデータ更新動作の例を示すシーケンス図である。
【図１６】複製の存在しないノードにおけるデータ更新動作の例を示すシーケンス図である。
【図１７】メッセージ紛失時の動作の例を示すシーケンス図である。
【図１８】従来方式におけるデータ更新動作の例を示すシーケンス図である。
【符号の説明】
１０，２０，３０，４０，５０，６０    ノード
１３，２３，３３，４３，５３，６１    データマネージャ
１５，４５，５５    クライアント
１６，４６，５６    ルーティングエージェント
１７    コアデータ
２７，３７，４７，５７    複製データ
６２    データ対応表
６３    作成済データ表
６４    オブジェクトデータ
６５    ローカルデータ
１０１〜１２０，１２１〜１４０，１４１〜１４６，１５１〜１７２    ステップ
１８１〜１９０，２０１〜２２２，２３１〜２５５，２６１〜２８５    ステップ
３０１〜３２７，３３１〜３５０，３５１〜３７４，３８１〜３９１    ステップ
４０１〜４１９，４２１〜４５０，４５１〜４７７，５０１〜５２７    ステップ
【図１】
0004036661.tif 000002
【図２】
0004036661.tif 000003
【図３】
0004036661.tif 000004
【図４】
0004036661.tif 000005
【図５】
0004036661.tif 000006
【図６】
0004036661.tif 000007
【図７】
0004036661.tif 000008
【図８】
0004036661.tif 000009
【図９】
0004036661.tif 000010
【図１０】
0004036661.tif 000011
【図１１】
0004036661.tif 000012
【図１２】
0004036661.tif 000013
【図１３】
0004036661.tif 000014
【図１４】
0004036661.tif 000015
【図１５】
0004036661.tif 000016
【図１６】
0004036661.tif 000017
【図１７】
0004036661.tif 000018
【図１８】
0004036661.tif 000019