(57)【要約】  情報システム（１）は、データ群を分散管理する複数のデータ格納サーバ（１０６）を備え、複数のデータ格納サーバ（１０６）はそれぞれ宛先アドレスを有し、各データ格納サーバ（１０６）に対し、論理識別子空間上で論理識別子を付与し、論理識別子空間とデータ群におけるデータの値の範囲とを対応付け、各データ格納サーバ（１０６）のデータの値域を、各データ格納サーバ（１０６）の論理識別子に対応させて決定する宛先表管理部（４００）と、各データ格納サーバ（１０６）のデータの値域と、論理識別子と、宛先アドレスとの対応関係に基づき、属性値が一致するデータの値域に対応する論理識別子を求め、当該論理識別子に対応するデータ格納サーバ（１０６）の宛先アドレスを宛先として決定する宛先解決部（３４０）と、を備える。
2013046664.tif 000002
【特許請求の範囲】
【請求項１】
データ群を分散して管理する複数のノードを備え、
複数の前記ノードは、それぞれネットワーク上で識別可能な宛先アドレスを有し、
複数の前記ノードに対し、論理識別子空間上で論理識別子を付与する識別子付与手段と、
前記論理識別子空間と、前記データ群におけるデータの値の範囲と、を対応付け、各前記ノードが管理する前記データの値域を、各前記ノードの前記論理識別子に対応させて決定する値域決定手段と、
ある属性値または属性範囲のデータの格納先の前記ノードの宛先を探索するとき、各前記ノードの前記データの前記値域と、前記論理識別子と、前記宛先アドレスとの対応関係に基づき、前記属性値または前記属性範囲の少なくとも一部が一致する前記データの値域に対応する前記論理識別子を求め、当該論理識別子に対応する前記ノードの宛先アドレスを前記宛先として決定する宛先決定手段と、を備える情報システム。
【請求項２】
請求項１に記載の情報システムにおいて、
前記ノード毎に前記対応関係を記憶する対応関係記憶手段を備える情報システム。
【請求項３】
請求項２に記載の情報システムにおいて、
前記ノードの前記対応関係記憶手段は、前記ノードが管理している前記データの属性毎に、前記対応関係を保持する情報システム。
【請求項４】
請求項１乃至３いずれかに記載の情報システムにおいて、
前記ノードが管理している前記データの前記値域の変更に伴い、前記対応関係を更新する対応関係更新手段を備える情報システム。
【請求項５】
請求項４に記載の情報システムにおいて、
前記論理識別子が互いに隣接する前記ノード間で、データを分散して管理するために少なくとも一部のデータを移動する平滑化制御手段と、
前記データの移動に伴い移動された前記データの前記値域を更新する値域更新手段と、を備え、
前記対応関係更新手段は、前記値域の更新に伴い、前記対応関係を更新する情報システム。
【請求項６】
請求項５に記載の情報システムにおいて、
前記平滑化制御手段は、
前記ノードが管理するある属性のデータ量と、隣接する他のノードが管理する前記属性と同一の属性のデータ量とを比較し、比較結果に応じて、前記ノードと他の前記ノード間で、前記属性のデータを移動し、
前記値域更新手段は、
前記属性の前記データの移動に伴い、移動された前記データの前記値域を更新する情報システム。
【請求項７】
請求項５または６に記載の情報システムにおいて、
前記平滑化制御手段は、
互いに隣接する前記ノードの各前記論理識別子の幅の比に応じて、移動する前記属性のデータ量を決定する情報システム。
【請求項８】
請求項４乃至７いずれかに記載の情報システムにおいて、
前記対応関係更新手段は、前記ノード毎に前記対応関係を非同期に更新する情報システム。
【請求項９】
請求項４乃至８いずれかに記載の情報システムにおいて、
前記データへのアクセス要求とともに、アクセス対象のデータに対する前記属性値または前記属性範囲を受け付ける受付手段と、
前記アクセス要求に基づいて、前記データにアクセスする際、前記アクセス要求を受け付けた前記データに対応する前記属性値または前記属性範囲が、管理しているデータの前記属性の値域に含まれるか否かを判定する判定手段と、
前記判定手段により前記データの前記属性の値域に含まれていないと判定された場合、前記値域と前記属性値を比較し、比較結果に基づいて、前記アクセス要求を受け付けた前記データに対応する前記属性の値域のデータを管理する隣接ノードを判別する判別手段と、
判別した前記隣接ノードまたは自ノードの前記値域を変更する値域変更通知をアクセス要求元または他のノードに通知する通知手段と、をさらに備える情報システム。
【請求項１０】
請求項９に記載の情報システムにおいて、
前記対応関係更新手段は、前記値域変更通知に従い、前記対応関係を変更する情報システム。
【請求項１１】
請求項４乃至１０いずれかに記載の情報システムにおいて、
前記対応関係更新手段は、前記対応関係における、あるノードが管理している前記データの全属性の前記値域の端点と、前記ノードが実際に管理する前記データの属性の前記値域の端点とを比較し、比較結果に基づいて、前記対応関係の前記データの属性の値域を変更する情報システム。
【請求項１２】
請求項１乃至１１いずれかに記載の情報システムにおいて、
前記データへのアクセス要求と前記データに対する前記属性値または前記属性範囲を他のノードに転送する転送手段をさらに備え、
前記宛先決定手段は、前記アクセス要求された前記データの前記属性値または前記属性範囲を有する前記データにアクセスするためのノードの宛先を決定し、前記転送手段に受け渡し、
前記転送手段は、前記宛先決定手段が決定した前記宛先の前記ノードに前記アクセス要求と前記データに対する前記属性値または前記属性範囲を転送する情報システム。
【請求項１３】
請求項１乃至１２いずれかに記載の情報システムにおいて、
各ノードは、前記論理識別子の空間において、自ノードと他ノードとの前記論理識別子の差を、前記論理識別子空間のサイズで除した余りとして、前記自ノードと前記他ノードとの距離を求め、前記距離が最小であるノードを隣接ノードとし、および、前記距離が２のべき乗ずつ離れた論理識別子以上の中で前記自ノードに最も近い他ノードを、前記自ノードのリンク先として選択する手段をさらに備え、
各前記ノードは、前記自ノードで少なくとも選択された前記リンク先と隣接ノードを、自ノードの宛先ノードとし、
前記宛先ノードと、前記宛先ノードの前記論理識別子との第１の対応関係と、
前記宛先ノードの前記論理識別子と、そのノードが管理している前記データの前記属性毎の前記値域と、の第２の対応関係と、を前記対応関係として保持する情報システム。
【請求項１４】
請求項１乃至１２いずれかに記載の情報システムにおいて、
各ノードは、前記論理識別子の空間において、自ノードと他ノードとの前記論理識別子の差を、前記論理識別子空間のサイズで剰した余りとして、前記自ノードと前記他ノードとの距離を求め、前記距離が最小であるノードを隣接ノードとし、ならびに、前記自ノードの整数倍の論理識別子を、前記論理識別子空間のサイズで除した余りの論理識別子から最も距離の近いノード、およびそのノードから最も距離の近い一定数のノードを、前記自ノードのリンク先として選択する手段をさらに備え、
各前記ノードは、前記自ノードで少なくとも選択された前記リンク先を宛先ノードとし、
前記宛先ノードと、前記宛先ノードの前記論理識別子との第１の対応関係と、
前記宛先ノードの前記論理識別子と、そのノードが管理している前記データの前記属性毎の前記値域と、の第２の対応関係と、を前記対応関係として保持し、
前記第２の対応関係は、さらに、前記宛先ノードの階層毎に、前記データの前記属性毎の前記値域を保持する情報システム。
【請求項１５】
データ群を分散して管理する複数のノードを、管理する管理装置のデータ処理方法であって、
複数の前記ノードは、それぞれネットワーク上で識別可能な宛先アドレスを有し、
前記管理装置が、
複数の前記ノードに対し、論理識別子空間上で論理識別子を付与し、
前記論理識別子空間と、前記データ群におけるデータの値の範囲と、を対応付け、各前記ノードが管理する前記データの値域を、各前記ノードの前記論理識別子に対応させて決定し、
ある属性値または属性範囲のデータの格納先の前記ノードの宛先を探索するとき、各前記ノードの前記データの前記値域と、前記論理識別子と、前記宛先アドレスとの対応関係に基づき、前記属性値または前記属性範囲の少なくとも一部が一致する前記データの値域に対応する前記論理識別子を求め、当該論理識別子に対応する前記ノードの宛先アドレスを前記宛先として決定する管理装置のデータ処理方法。
【請求項１６】
請求項１５に記載の管理装置に接続され、前記管理装置を介して前記データにアクセスする端末装置のデータ処理方法であって、
前記端末装置が、
属性値または属性範囲を有するデータへのアクセス要求を前記管理装置に通知し、
前記管理装置を介して、複数の前記ノードの宛先アドレスと、各ノードに割り当てられた論理識別子と、各ノードが管理している前記データの値域との対応関係に基づいて、前記アクセス要求された前記属性値または前記属性範囲の少なくとも一部が一致する値域の前記データを管理する前記ノードの宛先にアクセスして前記データを操作する端末装置のデータ処理方法。
【請求項１７】
データ群を分散して管理する複数のノードの宛先を決定する際に参照する宛先テーブルのデータ構造であって、
複数の前記ノードは、それぞれネットワーク上で識別可能な宛先アドレスを有し、
前記宛先テーブルは、前記データ群を分散して管理する複数のノードの宛先アドレスと、各ノードに論理識別子空間上で付与された論理識別子と、各前記ノードが管理するデータの値の範囲との対応関係を含み、
前記宛先テーブルは、前記データ群を分散して管理する複数のノードの宛先アドレスと、各ノードに論理識別子空間上で付与された論理識別子と、各前記ノードが管理するデータの値域との対応関係を含み、
各前記ノードのデータの値域は、前記論理識別子空間と、前記データ群におけるデータの値の範囲と、を対応付け、各前記ノードの前記論理識別子に対応する前記データの値域が各ノードに割り振られるデータ構造。
【請求項１８】
請求項１７に記載のデータ構造において、
前記宛先テーブルの対応関係は、前記ノード毎に保持されるデータ構造。
【請求項１９】
請求項１７または１８に記載のデータ構造において、
前記宛先テーブルの前記対応関係は、前記ノードが管理している前記データの前記値域の変更に伴い更新されるデータ構造。
【請求項２０】
請求項１７乃至１９いずれかに記載のデータ構造において、
前記論理識別子が互いに隣接する前記ノード間で、データ管理分散のために少なくとも一部のデータが移動されたとき、前記ノードが管理している前記データの前記値域が変更され、前記宛先テーブルの前記対応関係は、前記値域の変更に伴い更新されるデータ構造。
【請求項２１】
請求項１７乃至２０いずれかに記載のデータ構造において、
前記各ノードが保持するデータ構造は、
前記論理識別子の空間において、自ノードと他ノードとの前記論理識別子の差を、前記論理識別子空間のサイズで除した余りとして、前記自ノードと前記他ノードとの距離を求め、前記距離が最小であるノードを隣接ノードとし、および、前記距離が２のべき乗ずつ離れた論理識別子以上の中で前記自ノードに最も近い他ノードを、前記自ノードのリンク先として選択し、
前記自ノードで少なくとも選択された前記リンク先と隣接ノードを、自ノードの宛先ノードとし、
前記宛先ノードと、前記宛先ノードの前記論理識別子との第１の対応関係と、
前記宛先ノードの前記論理識別子と、そのノードが管理している前記データの前記属性毎の前記値域と、の第２の対応関係と、を前記対応関係として、前記宛先テーブルに保持されるデータ構造。
【請求項２２】
請求項１７乃至２０いずれかに記載のデータ構造において、
前記各ノードが保持するデータ構造は、
前記論理識別子の空間において、自ノードと他ノードとの前記論理識別子の差を、前記論理識別子空間のサイズで剰した余りとして、前記自ノードと前記他ノードとの距離を求め、前記距離が最小であるノードを隣接ノードとし、ならびに、前記自ノードの整数倍の論理識別子を、前記論理識別子空間のサイズで除した余りの論理識別子から最も距離の近いノード、およびそのノードから最も距離の近い一定数のノードを、前記自ノードのリンク先として選択し、
前記自ノードで少なくとも選択された前記リンク先を宛先ノードとし、
前記宛先ノードと、前記宛先ノードの前記論理識別子との第１の対応関係と、
前記宛先ノードの前記論理識別子と、そのノードが管理している前記データの前記属性毎の前記値域と、の第２の対応関係と、を前記対応関係として、前記宛先テーブルに保持され、
前記第２の対応関係は、さらに、前記宛先ノードの階層毎に、前記データの前記属性毎の前記値域を保持するデータ構造。
【請求項２３】
請求項１７乃至２２いずれかに記載のデータ構造において、
前記宛先テーブルの前記対応関係は、前記ノード毎に非同期に更新されるデータ構造。
【請求項２４】
データ群を分散して管理する複数のノードを管理する管理装置を実現するコンピュータのプログラムであって、
複数の前記ノードは、それぞれネットワーク上で識別可能な宛先アドレスを有し、
前記コンピュータに、
複数の前記ノードに対し、論理識別子空間上で論理識別子を付与する手順、
前記論理識別子空間と、前記データ群におけるデータの値の範囲と、を対応付け、各前記ノードが管理する前記データの値域を、各前記ノードの前記論理識別子に対応させて決定する手順、
ある属性値または属性範囲のデータの格納先の前記ノードの宛先を探索するとき、各前記ノードの前記データの前記値域と、前記論理識別子と、前記宛先アドレスとの対応関係に基づき、前記属性値または前記属性範囲の少なくとも一部が一致する前記データの値域に対応する前記論理識別子を求め、当該論理識別子に対応する前記ノードの宛先アドレスを前記宛先として決定する手順を実行させるためのプログラム。
【請求項２５】
請求項２４に記載のプログラムにおいて、
前記ノードが管理している前記データの前記値域の変更を検出する手順、
前記値域の変更が検出されたとき、前記対応関係を更新する手順をコンピュータに実行ささせるためのプログラム。
【請求項２６】
請求項２４または２５に記載のプログラムにおいて、
前記論理識別子が互いに隣接する前記ノード間で、データ管理分散のために少なくとも一部のデータを移動する手順、
前記データの移動に伴い移動された前記データの前記値域を更新する手順、
前記対応関係を更新する手順は、前記値域の更新に伴い、前記対応関係を更新する手順をコンピュータに実行ささせるためのプログラム。
【請求項２７】
請求項２４乃至２６いずれかに記載のプログラムを記録したコンピュータで読み取り可能なプログラム記録媒体。
【請求項２８】
データ群を分散して管理する複数のノードを管理する管理装置であって、
複数の前記ノードは、それぞれネットワーク上で識別可能な宛先アドレスを有し、
複数の前記ノードに対し、論理識別子空間上で論理識別子を付与する識別子付与手段と、
前記論理識別子空間と、前記データ群におけるデータの値の範囲と、を対応付け、各前記ノードが管理する前記データの値域を、各前記ノードの前記論理識別子に対応させて決定する値域決定手段と、
ある属性値または属性範囲のデータの格納先の前記ノードの宛先を探索するとき、各前記ノードの前記データの前記値域と、前記論理識別子と、前記宛先アドレスとの対応関係に基づき、前記属性値または前記属性範囲の少なくとも一部が一致する前記データの値域に対応する前記論理識別子を求め、当該論理識別子に対応する前記ノードの宛先アドレスを前記宛先として決定する宛先決定手段と、を備える管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報システム、管理装置、データ処理方法、データ構造、プログラム、および記録媒体に関し、特に、複数のコンピュータが分散してデータを管理する情報システム、データを管理する管理装置、データ処理方法、データ構造、プログラム、および記録媒体に関する。
【背景技術】
【０００２】
複数のコンピュータに分散したデータの検索処理方法の一例が、非特許文献１に記載されている。非特許文献１に記載されたシステムは、拡張性に優れた無共有型データベースにおいて、データの属性値の値域に応じてデータを分割格納する。これにより、このシステムでは、範囲検索等が可能となる。そして、このシステムは、データを格納する際、データの属性値からその格納先情報を決定する。【０００３】
ここに記載される並列Ｂ−ｔｒｅｅは、通常単一のコンピュータがその内部データにアクセスする際の宛先管理に用いられるＢ−ｔｒｅｅを、複数のコンピュータに分散されたデータにアクセスする際の宛先管理に用いるものである。そのタイプとして、データにアクセスする全てのコンピュータに、同一のＢ−ｔｒｅｅを持つＣＷＢ（Copy Whole B-tree）と、単一のコンピュータのみが全てのＢ−ｔｒｅｅを有するＳＩＢ（Single Index B-tree）と、その間に位置づけられるＦａｔ−Ｂｔｒｅｅがある。Ｆａｔ−Ｂｔｒｅｅにおいて、木構造の根に近いデータはＣＷＢのように複数のコンピュータで同じＢ−ｔｒｅｅを持つ。そして、葉に近いデータは各コンピュータに均等に分配されたリーフページへのアクセスパスを含むインデックスページのみを各コンピュータがそれぞれ持つ。【０００４】
根に近いデータを担当するコンピュータには、属性値空間の区切りを決める属性値と、その空間に対する他のコンピュータの宛先が格納される。データにアクセスするクライアントコンピュータは、まず、根を担当するコンピュータのいずれかを選択する。そして、クライアントコンピュータは、逐次、探索対象の属性値あるいは属性範囲から、その宛先情報を引き、葉を担当するコンピュータに到達することができる。【０００５】
なお、非特許文献１に記載されたシステムでは、Ｂ−ｔｒｅｅは登録されるデータに応じて、その木構造をバランスするように動作するため、新たなデータ登録により木構造が変化し、Ｂ−ｔｒｅｅの更新が必要となる。そのため、ＣＷＢの場合、異なる複数のコンピュータがこの変化情報を更新する必要があり、負荷が高くなる。一方で、ＳＩＢの場合、Ｂ−ｔｒｅｅを保持するコンピュータが一つであるため、Ｂ−ｔｒｅｅの更新は単一のコンピュータのみが行えばよく、更新の負荷は少なくなる。しかし、データを取得しようとするコンピュータはすべて単一のコンピュータにアクセスするため、単一のコンピュータにアクセスが集中し、その負荷が高くなる。【０００６】
複数のコンピュータに分散されたデータを管理するシステムの例として、分散ハッシュテーブル（Distributed Hash Table：ＤＨＴ）の代表的なアルゴリズムであるＣｈｏｒｄおよびＫｏｏｒｄｅが非特許文献２および非特許文献３に記載されている。ＤＨＴは、ハッシュ関数によりデータを各ノード間で均一化させる。しかし、その代償として、ＤＨＴは、範囲検索等の検索ができない構造化Ｐ２Ｐ（Peer-To-Peer）である。また、ＤＨＴではない構造化Ｐ２Ｐとしては、後述の範囲検索のできるシステム（非特許文献４および非特許文献５に記載）がある。【０００７】
前述の並列Ｂ-Ｔｒｅｅでは、データ探索経路をなす木構造をそのまま複数のコンピュータに対応づけ、各コンピュータに異なる役割をさせるため、その役割の違いにより負荷の偏りが発生する。しかし、構造化Ｐ２Ｐでは、各コンピュータにほぼ同一の役割を担当させることで、特定のコンピュータに負荷が偏ることのないように動作することができる。【０００８】
ここでは、その同質な役割を担うコンピュータをノードとする。一つのコンピュータは複数の同質なノードとしての役割を担ってもよい。この構造化Ｐ２Ｐの偏りの無さを保証する方式は様々あり、各々の方式によって、その偏りの問題や、適応性が異なる。このように同質なコンピュータから構成される構造化Ｐ２Ｐの特徴は、データを格納するコンピュータと格納されるデータとを対応付ける側面と、データを格納したコンピュータまで、データへのアクセス要求を届ける側面とを有する。【０００９】
まず、構造化Ｐ２Ｐの特徴に関する前者のノードとデータとの対応付けの側面について説明する。一般には、ＤＨＴでは、各ノードが有限のＩＤ（Identifier）空間における値を論理識別子ＩＤ（宛先、アドレス、または識別子）として持ち、そのＩＤに応じて、そのノードが担当するデータのＩＤ空間における範囲を決定する。データを担当するノードのＩＤは、ＤＨＴでは登録または取得したいデータのハッシュ値を用いて求めることができる。また、各ノードのＩＤは、ランダムあるいはノードに予め付された一意な識別子（たとえば、ＩＰアドレスとポート）のハッシュ値を用いることで負荷分散を図るのが一般的である。ＩＤ空間は、リング型をとる方式、ＨｙｐｅｒＣｕｂｅをとる方式などがある。上述したＣｈｏｒｄとＫｏｏｒｄｅなどは、リング型をとる方式のＩＤ空間を用いる。【００１０】
このリング型をとる場合において、ノードとデータとの対応付け方式は、Ｃｏｎｓｉｓｔｅｎｔ  Ｈａｓｈｉｎｇと呼ばれる。Ｃｏｎｓｉｓｔｅｎｔ  Ｈａｓｈｉｎｇでは、任意の自然数をｍとして、ＩＤ空間は１次元の［０，２ｍ）を取り、各コンピュータｉは、このＩＤ空間における値ｘｉをＩＤとして取る。ただし、ｉはノード数Ｎまでの自然数で、ｘｉの順に識別されているとする。ここで、記号“［”や、記号“］”は閉区間を表し、記号“（”や記号“）”は開区間を表す。【００１１】
この時、ノードｉは、［ｘｉ，ｘ（ｉ＋１））に含まれるデータを管理する。ただし、ｉ＝Ｎであるコンピュータは［０，ｘ０）と［ｘＮ，２ｍ）に含まれるデータを管理する。【００１２】
次に、構造化Ｐ２Ｐの特徴に関する後者の側面、すなわち、データを格納するコンピュータまでアクセス要求を届ける側面について以下に説明する。各コンピュータが保持する宛先表のサイズ（次数）と、転送を行う回数（ホップ数）が、アルゴリズムの性能評価上重要な指標となる。各コンピュータが保持する宛先表は、他のコンピュータへの通信用アドレス（ＩＰアドレス）の表である。転送を行わずに、任意のノードから任意のデータにアクセスするには、各ノードの宛先表には、他の全てのノードへの宛先表を有する必要がある。この方式を本明細書ではフルメッシュと呼ぶ。【００１３】
Ｃｈｏｒｄでは、ノード数Ｎに対して、次数とホップ数ともにＯ（ｌｏｇＮ）である。すなわち、ノード数Ｎに対して、次数とホップ数は、ほぼ対数関数に従うため、Ｎを増加させても次数とホップ数の増加（劣化）は次第に小さくなる。【００１４】
一方、Ｋｏｏｒｄｅでは、次数がＯ（１）である時、ホップ数がＯ（ｌｏｇＮ）であり、Ｏ（１）である時、ホップ数がＯ（ｌｏｇＮ）であり、Ｏ（ｌｏｇＮ／ｌｏｇｌｏｇＮ）である。次数がＯ（ｌｏｇＮ）である時、ホップ数がＯ（ｌｏｇＮ／ｌｏｇｌｏｇＮ）である。次数がＯ（１）であるとは、ノード数Ｎに依存せずに一定であることを意味する。ＣｈｏｒｄとＫｏｏｒｄｅの次数とホップ数のこの違いは、あるノードが宛先表を構築する仕方と、データへのアクセス要求を転送する仕方に依存することにより生じる。【００１５】
なお、ＣｈｏｒｄおよびＫｏｏｒｄｅのいずれにおいても、宛先表の構築の仕方は、宛先表を構築するノードのＩＤを用い、宛先表の候補となる他のノードとの何らかの距離に応じて、そのノードを宛先表に入れるかを決定する。また、ＣｈｏｒｄおよびＫｏｏｒｄｅのいずれにおいても、データアクセスへの転送の仕方は、データのハッシュ値から算出されるＩＤを用い、ＩＤと宛先表とを参照することで、次の宛先を決定する。【００１６】
また、構造化Ｐ２Ｐを用いた他のデータの宛先管理システムの例が、非特許文献４および特許文献１に記載されている。非特許文献４に記載されるＭＡＡＮ、ならびに特許文献１に記載される技術は、範囲検索を可能とする構造化Ｐ２Ｐである。ＭＡＡＮでは、アクセス対象のデータの属性値を、そのデータに関する分布情報を用いて、ＩＤに変換する。そして、そのＩＤと宛先表とを参照して、そのデータへのアクセス要求を転送する宛先を決定する。各コンピュータはＩＤに基づき送受信関係が構築される。【００１７】
また、他のデータの宛先管理システムの一例が、非特許文献５に記載されている。非特許文献５に記載されたＭｅｒｃｕｒｙというシステムでは、データの属性値を用いて、そのデータが格納される先のコンピュータと他のコンピュータとの間の送受信関係が構築される。【００１８】
まとめると、構造化Ｐ２Ｐは、範囲検索を可能にするためのアプローチとして、以下の２つのアプローチが考えられる。
第１のアプローチは、システムが、ノードに格納されるデータの属性の値域に応じて、他のどのノードを自ノードが管理する宛先表に格納するかを決定し（送受信関係を構築し）、データへのアクセス要求の宛先を決定する際に、要求されたデータの属性値と宛先表とを参照し、決定した宛先に、そのデータへのアクセス要求を転送する。
第２のアプローチは、システムが、ノードのＩＤに応じて、他のどのノードを自ノードが管理する宛先表に格納するか決定し（送受信関係を構築し）、データの属性値をＩＤ空間に変換した値と宛先表とを参照して、そのデータへのアクセス要求の宛先を決定する。【００１９】
第１のアプローチには、Ｍｅｒｃｕｒｙの他、Ｐ−Ｔｒｅｅ、Ｐ−Ｇｒｉｄ、Ｓｑｕｉｄ、ＰＲｏＢｅなどがある。第２のアプローチには、ＭＡＡＮの他、ＰｒｉＭＡ ＫｅｙＳ、ＮＬ−ＤＨＴなどがある。【００２０】
また、特許文献２には、データの各レコードを複数の記憶装置（第１のプロセッサ）に分割して格納した分散データベースシステムが記載されている。このシステムでは、データを構成する表データの全レコードのキー値が分布する範囲を複数の区間に分割する。このとき、各区間の各々のレコード数が等しくなるようにし、複数の区間にそれぞれ複数の第１のプロセッサを割り当てる。中央プロセッサが第１のプロセッサにアクセスする。第１のプロセッサが保持するデータベースのそれぞれの部分の複数のレコードのキー値とそのレコードの記憶位置を表す情報を、それぞれレコードが属するキー値の区間が割り当てられた第２のプロセッサに転送する。【００２１】
そして、それらが保持するレコードのキー値とそのレコードの記憶位置を示す情報をそのキー値の属する区間が割り当てられた第１のプロセッサに転送する。第２のプロセッサでは転送されてきた複数のキー値をソートし、ソートされたキー値とともに受信した、レコードの記憶位置を示す情報、を登録したキー値表をソート結果として生成する。このような構成により、特許文献２に記載のシステムでは、第１のプロセッサにアクセスする中央プロセッサにおける負荷の軽減を図り、分散データベースシステムにおけるソート処理の効率を向上している。
【先行技術文献】
【特許文献】
【００２２】
【特許文献１】特開２００８−２３４５６３号公報
【特許文献２】特開平５−２４２０４９号公報
【非特許文献】
【００２３】
【非特許文献１】並木  悠太、外３名、「Ｆａｔ−Ｂｔｒｅｅをインデックスに用いたＰｏｓｔｇｒｅＳＱＬの分散検索」、日本データベース学会、２００７年、Ｌｅｔｔｅｒｓ  Ｖｏｌ．６、Ｎｏ．２、ｐ．６１〜６４
【非特許文献２】Ion Stoica、外４名、“Chord: A Scalable Peer-to-peer Lookup Service for Internet Applications”、Proceedings of SIGCOMM'01、米国、ACM Press New York、２００１年、ｐ．１〜１２
【非特許文献３】M. Frans Kaashoek、外１名、“Koorde: A simple degree-optimal distributed hash table”、Proceedings in 2nd International Peer to Peer Systems Workshop IPTPS (2003)、２００３年、ｖｏｌ．２７３５、ｐ．９８〜１０７
【非特許文献４】Min Cai、外３名、“MAAN: A Multi-Attribute Addressable Network for Grid Information Services”、Proceedings of the Fourth International Workshop on Grid Computing (GRID’03)、２００３年、ｐ．１〜８
【非特許文献５】Ashwin R. Bharambe、外２名、“Mercury: Supporting Scalable Multi-Attribute Range Queries”、SIGCOMM (Special Interest Group on Data Communication) 2004 Conference Papers、米国、２００４年、ｐ．３５３〜３６６
【発明の概要】
【００２４】
上述した特許文献２に記載されたシステムにおいて、第１のプロセッサに格納されるレコードの分布が時間とともに変化し、プロセッサ毎の負荷が変化した場合に、第１のプロセッサを増設または利用中止することが考えられる。その場合に、複数のプロセッサ間でレコード数を均一にするために、データベース全体で略すべての第１のプロセッサ間でのレコード移動を行わなければいけなくなり、レコード移動が多くなるという問題点があった。
【００２５】
さらに、上述した第１のアプローチの宛先管理方法においては、ノードが格納するデータの値域を変更するために、宛先表を変更する場合に、各ノードでの宛先表の更新（ノード間の送受信関係の変更）と、それに伴う通信到達性維持のための処理や、通信路変更時に必要となる処理の一時的な停止が必要となる可能性、さらには通信路の障害として扱われる可能性が高まるという問題点があった。
【００２６】
その理由は、以下の通りである。複数のノードへのデータ登録に伴い、データの分布は変化する。そして、そのデータの分布の変化に応じて、ノード間でデータがほぼ均一のデータ量を持つように値域を変更すると、その変更に応じて、他のどのノードと接続するかを格納した宛先表も変更する必要が発生するためである。
【００２７】
本発明の目的は、データが値域分割されたシステムにおいて、データの分布の変動があっても、データ移動に伴う負荷増加を抑制しつつ、各ノードの負荷分散を実現する技術を提供することにある。
【００２８】
本発明の情報システムは、
データ群を分散して管理する複数のノードを備え、
複数の前記ノードは、それぞれネットワーク上で識別可能な宛先アドレスを有し、
複数の前記ノードに対し、論理識別子空間上で論理識別子を付与する識別子付与手段と、
前記論理識別子空間と、前記データ群におけるデータの値の範囲と、を対応付け、各前記ノードが管理する前記データの値域を、各前記ノードの前記論理識別子に対応させて決定する値域決定手段と、
ある属性値または属性範囲のデータの格納先の前記ノードの宛先を探索するとき、各前記ノードの前記データの前記値域と、前記論理識別子と、前記宛先アドレスとの対応関係に基づき、前記属性値または前記属性範囲の少なくとも一部が一致する前記データの値域に対応する前記論理識別子を求め、当該論理識別子に対応する前記ノードの宛先アドレスを前記宛先として決定する宛先決定手段と、を備える。
【００２９】
本発明のデータ処理方法は、
データ群を分散して管理する複数のノードを、管理する管理装置のデータ処理方法であって、
複数の前記ノードは、それぞれネットワーク上で識別可能な宛先アドレスを有し、
前記管理装置が、
複数の前記ノードに対し、論理識別子空間上で論理識別子を付与し、
前記論理識別子空間と、前記データ群におけるデータの値の範囲と、を対応付け、各前記ノードが管理する前記データの値域を、各前記ノードの前記論理識別子に対応させて決定し、
ある属性値または属性範囲のデータの格納先の前記ノードの宛先を探索するとき、各前記ノードの前記データの前記値域と、前記論理識別子と、前記宛先アドレスとの対応関係に基づき、前記属性値または前記属性範囲の少なくとも一部が一致する前記データの値域に対応する前記論理識別子を求め、当該論理識別子に対応する前記ノードの宛先アドレスを前記宛先として決定する。
【００３０】
本発明のデータ構造は、
データ群を分散して管理する複数のノードの宛先を決定する際に参照する宛先テーブルのデータ構造であって、
複数の前記ノードは、それぞれネットワーク上で識別可能な宛先アドレスを有し、
前記宛先テーブルは、前記データ群を分散して管理する複数のノードの宛先アドレスと、各ノードに論理識別子空間上で付与された論理識別子と、各前記ノードが管理するデータの値の範囲との対応関係を含み、
前記宛先テーブルは、前記データ群を分散して管理する複数のノードの宛先アドレスと、各ノードに論理識別子空間上で付与された論理識別子と、各前記ノードが管理するデータの値域との対応関係を含み、
各前記ノードのデータの値域は、前記論理識別子空間と、前記データ群におけるデータの値の範囲と、を対応付け、各前記ノードの前記論理識別子に対応する前記データの値域が各ノードに割り振られる。
【００３１】
本発明のコンピュータプログラムは、
データ群を分散して管理する複数のノードを管理する管理装置を実現するコンピュータのプログラムであって、
複数の前記ノードは、それぞれネットワーク上で識別可能な宛先アドレスを有し、
前記コンピュータに、
複数の前記ノードに対し、論理識別子空間上で論理識別子を付与する手順、
前記論理識別子空間と、前記データ群におけるデータの値の範囲と、を対応付け、各前記ノードが管理する前記データの値域を、各前記ノードの前記論理識別子に対応させて決定する手順、
ある属性値または属性範囲のデータの格納先の前記ノードの宛先を探索するとき、各前記ノードの前記データの前記値域と、前記論理識別子と、前記宛先アドレスとの対応関係に基づき、前記属性値または前記属性範囲の少なくとも一部が一致する前記データの値域に対応する前記論理識別子を求め、当該論理識別子に対応する前記ノードの宛先アドレスを前記宛先として決定する手順を実行させるためのものである。
【００３２】
本発明の記録媒体は、
上記プログラムを記録したコンピュータで読み取り可能なプログラム記録媒体である。
【００３３】
本発明の管理装置は、
データ群を分散して管理する複数のノードを管理する管理装置であって、
複数の前記ノードは、それぞれネットワーク上で識別可能な宛先アドレスを有し、
複数の前記ノードに対し、論理識別子空間上で論理識別子を付与する識別子付与手段と、
前記論理識別子空間と、前記データ群におけるデータの値の範囲と、を対応付け、各前記ノードが管理する前記データの値域を、各前記ノードの前記論理識別子に対応させて決定する値域決定手段と、
ある属性値または属性範囲のデータの格納先の前記ノードの宛先を探索するとき、各前記ノードの前記データの前記値域と、前記論理識別子と、前記宛先アドレスとの対応関係に基づき、前記属性値または前記属性範囲の少なくとも一部が一致する前記データの値域に対応する前記論理識別子を求め、当該論理識別子に対応する前記ノードの宛先アドレスを前記宛先として決定する宛先決定手段と、を備える。
【００３４】
本発明によれば、データが値域分割されたシステムにおいて、データの分布の変動があっても、データ移動に伴う負荷増加を抑制しつつ、各ノードの負荷分散を実現する情報システム、管理装置、データ処理方法、データ構造、プログラム、および記録媒体が提供される。
【００３５】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【００３６】
また、本発明の各種の構成要素は、必ずしも個々に独立した存在である必要はなく、複数の構成要素が一個の部材として形成されていること、一つの構成要素が複数の部材で形成されていること、ある構成要素が他の構成要素の一部であること、ある構成要素の一部と他の構成要素の一部とが重複していること、等でもよい。
【００３７】
また、本発明の方法およびコンピュータプログラムには複数の手順を順番に記載してあるが、その記載の順番は複数の手順を実行する順番を限定するものではない。このため、本発明の方法およびコンピュータプログラムを実施するときには、その複数の手順の順番は内容的に支障のない範囲で変更することができる。
【００３８】
さらに、本発明の方法およびコンピュータプログラムの複数の手順は個々に相違するタイミングで実行されることに限定されない。このため、ある手順の実行中に他の手順が発生すること、ある手順の実行タイミングと他の手順の実行タイミングとの一部ないし全部が重複していること、等でもよい。
【図面の簡単な説明】
【００３９】
上述した目的、およびその他の目的、特徴および利点は、以下に述べる好適な実施の形態、およびそれに付随する以下の図面によってさらに明らかになる。【００４０】
【図１】本発明の実施の形態に係る情報システムの構成を示す機能ブロック図である。
【図２】本発明の実施の形態に係る情報システムのコンピュータの構成の例を示すブロック図である。
【図３】本発明の実施の形態に係る情報システムのコンピュータの構成の例を示すブロック図である。
【図４】本発明の実施の形態に係る情報システムの構成を示す機能ブロック図である。
【図５】汎用な分散システムにおけるサーバ間通信のプロトコルスタックを示すブロック図である。
【図６】本発明の実施の形態に係る情報システムのサーバ間通信のプロトコルスタックを示すブロック図である。
【図７】本発明の実施の形態に係る情報システムの要部構成を示す機能ブロック図である。
【図８】本発明の実施の形態に係る情報システムの要部構成を示す機能ブロック図である。
【図９】本発明の実施の形態に係る情報システムのデータアクセスシーケンスを示す図である。
【図１０】本発明の実施の形態に係る情報システムのデータアクセスシーケンスを示す図である。
【図１１】本発明の実施の形態に係る情報システムのＩＤ宛先表を示す図である。
【図１２】本発明の実施の形態に係る情報システムの属性宛先表を示す図である。
【図１３】本発明の実施の形態に係る情報システムの値域表を示す図である。
【図１４】本発明の実施の形態に係る情報システムの通知先表を示す図である。
【図１５】本発明の実施の形態に係る情報システムの平滑化処理の手順の一例を示すフローチャートである。
【図１６】本発明の実施の形態に係る情報システムの負荷分散計画算出処理の手順の一例を示すフローチャートである。
【図１７】本発明の実施の形態に係る情報システムのデータアクセス要求受付処理の手順の一例を示すフローチャートである。
【図１８】図１７のデータアクセス要求受付処理の手順の続きを示すフローチャートである。
【図１９】本発明の実施の形態に係る情報システムの属性値または属性範囲と値域範囲を説明するための図である。
【図２０】本発明の実施の形態に係る情報システムの属性宛先表の自律的な値域更新処理の手順の一例を示すフローチャートである。
【図２１】本発明の実施の形態に係る情報システムのデータ追加削除処理の手順の一例を示すフローチャートである。
【図２２】本発明の実施の形態に係る情報システムのデータ検索処理の手順の一例を示すフローチャートである。
【図２３】本発明の実施の形態に係る情報システムの単一宛先解決処理の手順の一例を示すフローチャートである。
【図２４】本発明の実施の形態に係る情報システムの属性範囲宛先解決処理の手順の一例を示すフローチャートである。
【図２５】本発明の実施の形態に係る情報システムの単一宛先解決処理の手順の一例を示すフローチャートである。
【図２６】図２５の単一宛先解決処理の手順の続きを示すフローチャートである。
【図２７】本発明の実施の形態に係る情報システムの属性範囲宛先解決処理の手順の一例を示すフローチャートである。
【図２８】図２７の属性範囲宛先解決処理の手順の続きを示すフローチャートである。
【図２９】本発明の実施の形態に係る情報システムのＦｉｎｇｅｒエントリ宛先解決処理の手順の一例を示すフローチャートである。
【図３０】本発明の実施の形態に係る情報システムの属性宛先表を説明するための図である。
【図３１】本発明の実施の形態に係る情報システムの値域更新処理の手順の一例を示すフローチャートである。
【図３２】本発明の実施の形態に係る情報システムの値域端点取得処理の手順の一例を示すフローチャートである。
【図３３】本発明の実施の形態に係る情報システムの単一宛先解決処理の手順の一例を示すフローチャートである。
【図３４】本発明の実施の形態に係る情報システムの階層値域特定処理の手順の一例を示すフローチャートである。
【図３５】本発明の実施の形態に係る情報システムの自ノードの値域確認処理の手順の一例を示すフローチャートである。
【図３６】本発明の実施の形態に係る情報システムのＦｉｎｇｅｒノードでの宛先探索処理の手順の一例を示すフローチャートである。
【図３７】本発明の実施の形態に係る情報システムの範囲宛先解決処理の手順の一例を示すフローチャートである。
【図３８】本発明の実施の形態に係る情報システムの自ノードの値域確認処理の手順の一例を示すフローチャートである。
【図３９】本発明の実施の形態に係る情報システムのＦｉｎｇｅｒノードでの範囲宛先探索処理の手順の一例を示すフローチャートである。
【図４０】本発明の実施の形態に係る情報システムのＳｕｃｃｅｓｓｏｒノードの値域確認処理の手順の一例を示すフローチャートである。
【図４１】本発明の実施例における情報システムの各ノードのデータの値域変更を説明するための図である。
【図４２】本発明の実施例における情報システムの各ノードのデータの値域変更を説明するための図である。
【図４３】本発明の実施例における情報システムの各ノードのデータの値域変更を説明するための図である。
【図４４】本発明の実施例における情報システムの各ノードのデータの値域変更を説明するための図である。
【図４５】本発明の実施例における情報システムの各ノードのデータの値域変更を説明するための図である。
【図４６】本発明の実施例における情報システムの各ノードのデータの値域変更を説明するための図である。
【図４７】本発明の実施例における情報システムの各ノードのデータの値域変更を説明するための図である。
【図４８】本発明の実施例における情報システムの各ノード間のデータアクセスのシーケンスを示す図である。
【図４９】本発明の実施例における情報システムのノードの階層を説明するための図である。
【図５０】本発明の実施例における情報システムのノードの階層を説明するための図である。
【図５１】本発明の実施例における情報システムのノードの階層を説明するための図である。
【図５２】本発明の実施例における情報システムの各ノードの多次元属性データの値域変更を説明するための図である。
【図５３】本発明の実施例における情報システムの各ノードの多次元属性データの値域変更を説明するための図である。
【図５４】本発明の実施例における情報システムの各ノードの多次元属性データの値域変更を説明するための図である。
【図５５】本発明の実施例における情報システムの各ノードの多次元属性データの値域変更を説明するための図である。
【図５６】本発明の実施例における情報システムの各ノードの多次元属性データの値域変更を説明するための図である。
【図５７】本発明の実施の形態に係る情報システムのＩＤ宛先表を示す図である。
【図５８】本発明の実施の形態に係る情報システムの管理装置の動作の一例を示すフローチャートである。
【図５９】本発明の実施の形態に係る情報システムの管理装置の動作の一例を示すフローチャートである。
【図６０】本実施形態の情報システムの事前処理部の構成を示す機能ブロック図である。
【図６１】本発明の実施の形態に係る情報システムの空間充填曲線サーバ情報テーブルの構造の一例を示す図である。
【図６２】本発明の実施の形態に係る情報システムの要部構成を示す機能ブロック図である。
【図６３】本発明の実施の形態に係る情報システムの動作の一例を示すフローチャートである。
【発明を実施するための形態】
【００４１】
以下、本発明の実施の形態について、図面を用いて説明する。尚、すべての図面において、同様な構成要素には同様の符号を付し、適宜説明を省略する。
【００４２】
本発明の情報システムは、複数のノードに分散して格納されるデータへのデータアクセス時の宛先管理を行うものであり、たとえば、範囲検索等の連続性や順序性の必要なデータアクセス処理を効率的に行うことを可能にする。そして、本発明の情報システムは、複数の格納先に格納されたデータに対して、格納先を追加してもアクセスできる規模拡張性の高い（スケーラブルな）宛先管理を行うことができる。
すなわち、本発明の情報システムは、上述した課題であるノードのデータ分布変化に伴う性能や信頼性の低下の問題点を解決することができる。
【００４３】
（第１の実施の形態）
図１は、本発明の実施の形態に係る情報システム１の構成を示すブロック図である。
本発明の実施の形態の情報システム１は、互いにネットワーク３を介して接続される複数のコンピュータ、たとえば、複数のデータ操作クライアント１０４（図１では、データ操作クライアントＢ１〜Ｂｎと示す。以下、ｎは自然数であり、以下、それぞれ異なる値をとってもよい。）と、複数のデータ格納サーバ１０６（図１では、データ格納サーバＣ１〜Ｃｎと示す。）と、複数の操作要求中継サーバ１０８（図１では、操作要求中継サーバＤ１〜Ｄｎと示す。）と、を備える。
【００４４】
データ格納サーバ１０６は、少なくとも１つのノードを含み、各ノードにデータ群を分散して格納する。データ格納サーバ１０６は、アプリケーションやクライアントからの要求に応じて、各ノードに格納されているデータへのアクセスの管理を行う。データ格納サーバ１０６の各ノードには、ネットワーク上で特定可能な宛先、たとえば、ＩＰアドレスが割り当てられる。
【００４５】
なお、本情報システム１をデータベースシステムではなく、データストリームシステムやＰｕｂｌｉｓｈ／Ｓｕｂｓｃｒｉｂｅ（Ｐｕｂ／Ｓｕｂ）システムとして利用する場合には、データ格納サーバ１０６には、データそのものではなく条件式等が格納される。
【００４６】
このとき、データストリームでは、データを範囲として扱い、条件式を値として扱ってもよい。たとえば、属性の次元数をＤとすると、Ｄ次元属性範囲を持つＳｕｂｓｃｒｉｂｅ条件式は２Ｄ次元属性値のデータとして扱うことができ、Ｄ次元属性値を持つデータは２Ｄ次元の属性範囲として扱うことができる。データが登録された際には、そのデータに対応する２Ｄ次元の属性範囲に含まれるような、２Ｄ次元の属性値であるＳｕｂｓｃｒｉｂｅ条件式を列挙し、その条件式にデータの登録を通知する。あるいは、Ｓｕｂｓｃｒｉｂｅ条件式を属性範囲とし、データを属性値として扱う場合には、格納される属性範囲を複数のノードに分割し、各々の属性範囲をさらにノード内のデータの格納単位（例えば、ブロックなど）の単位に分割して、各々のブロック毎にＳｕｂｓｃｒｉｂｅ属性範囲が格納され、属性範囲のデータがあるブロックに登録される際に対応する属性範囲に含まれるかが監視され、通知されるかの判断がなされてもよい。
【００４７】
データ操作クライアント１０４は、少なくとも１つのノードを含み、アプリケーションプログラムまたはユーザからデータへのアクセス要求を受け付け、データ格納サーバ１０６に格納されているデータを要求に応じて操作する。データ操作クライアント１０４は、アクセス要求された目的のデータが格納されているノードを特定する機能を有する。
【００４８】
操作要求中継サーバ１０８は、少なくとも１つのノードを含み、データ操作クライアント１０４からのアクセス要求をノード間で転送しながら目的のノードに到達させる機能を有する。たとえば、自ノードが管理していないデータに対するアクセス要求を受け付けたデータ格納サーバ１０６が、操作要求中継サーバ１０８として機能する。
なお、後述する宛先解決部のアルゴリズムがＤＨＴのようにノード間転送を行うものではなく、フルメッシュで通信を行うアルゴリズムである場合は、操作要求中継サーバ１０８は不要である。
【００４９】
本実施の形態の情報システム１は、ＣＰＵ（Central Processing Unit）と、メモリと、メモリにロードされた各図の構成要素を実現するプログラムと、そのプログラムを格納するハードディスクなどの記憶ユニットと、ネットワーク接続用インタフェースとを備える任意のコンピュータのハードウェアとソフトウェアの任意の組合せにより実現される。そして、その実現方法、装置にはいろいろな変形例があることは、当業者には理解されるところである。
【００５０】
以下に説明する各図は、ハードウェア単位の構成ではなく、機能単位のブロックを示している。なお、各図において、本発明の本質に関わらない部分の構成については省略してあり、図示されていない。
【００５１】
また、本実施の形態の情報システム１を構成する各サーバおよびクライアントは、仮想マシンなど仮想化されたコンピュータ、あるいは、クラウドなどネットワーク越しに利用者にサービスを提供するサーバ群などであってもよい。
【００５２】
本発明の情報システム１は、異なるコンピュータに分散して格納されたデータを、１次元以上の属性の範囲検索が可能な表構造形式で、多様なアプリケーションソフトウェアに対してデータへのアクセス機能を提供するデータベースといった用途に適用できる。
【００５３】
コンピュータが参照および操作できるリレーショナルデータベースは、複数の列（属性）からなる行（タプル）がある。本実施形態をプライマリー・インデックスとして適用する場合には、このうち、行のキーとなる１以上の属性に対して適用する。セカンダリー・インデックスとして適用する場合には、行のキー以外の１以上の属性に対して適用する。これらは、指定された列の検索を速くするために、１つの属性に対する単一インデックス、あるいは、複数の属性に対する複合インデックスとして予め設定される。複数の属性の例としては、たとえば、緯度と経度、温度と湿度、あるいは、商品の金額、メーカ、型番、発売時期、および仕様などである。
【００５４】
また、分散したコンピュータに送信されたメッセージやイベントに対して、１次元以上の属性の範囲に関する条件指定を用いて、データの発生の検知や通知を設定するＰｕｂ／Ｓｕｂといったメッセージ送受信形態の用途にも適用可能である。あるいは、発生するイベントを列（属性）からなる行（タプル）としてモデル化し、これに対する検索として継続的クエリ（ＣｏｎｔｉｎｕｏｕｓＱｕｅｒｙ）を実行するデータストリーム・マネジメントシステムにも適用可能である。
【００５５】
本実施形態の情報システム１を、リレーショナルデータベースとして利用する形態には、オンライントランザクション処理（Online Transaction Processing：ＯＬＴＰ）としての形態と、オンライン分析処理（Online Analytical Processing：ＯＬＡＰ）としての形態がある。ＯＬＴＰの形態とは、たとえば、ウェブサイトのショッピングモールにクライアントがアクセスし、商品を検索するために複数の条件、たとえば、金額範囲、発売時期などを入力して、該当する商品を検索するような利用形態である。
【００５６】
なお、ウェブサイトへのクライアントからの検索要求などは、何万件／秒で発生するものである。一方で、ＯＬＡＰの形態とは、たとえば、ＯＬＴＰによって格納された過去の全データから、ウェブサイトの管理者が、売上動向を把握するために、購入者の年令、購入金額、購入時間帯などの複数の条件を指定して、その件数を取得するような利用形態である。また、Ｐｕｂ／Ｓｕｂあるいは、データストリーム・マネジメントシステムとして利用する形態では、たとえば、通知を受けたい緯度・経度などの範囲を指定すると、その属性範囲に含まれるデータが発生した際に通知を受けることができるような利用形態である。
【００５７】
本実施形態の情報システム１は、１次元以上の属性のデータを担う複数のコンピュータ（たとえば、図１のデータ格納サーバ１０６）からなる分散環境で用いることができる。このような環境において、本実施形態の情報システム１は、１次元以上の属性値に対応するコンピュータ（データ格納サーバ１０６または操作要求中継サーバ１０８）を決定する際、以下のように宛先決定を行うことができる。あるいは、本実施形態の情報システム１は、範囲検索などの１次元以上の属性の空間に対して複数のコンピュータ（データ格納サーバ１０６または操作要求中継サーバ１０８）を決定する際、以下のように宛先決定を行うことができる。
【００５８】
まず、予めデータを格納するサーバ（データ格納サーバ１０６）には、有限の論理識別子ＩＤ空間における一意な識別子（以下、論理識別子ＩＤと呼ぶ）が割当てられる。そして、各サーバ（データ格納サーバ１０６）は論理識別子ＩＤが近い他のサーバ（データ格納サーバ１０６）に対して、属性毎のデータ量の負荷分散のためにデータ移動と値域の変更を行う。この値域の変更は、ノード間の論理識別子ＩＤに基づいて決定されるノード間の送受信依存関係に従って、他のノードが管理する属性毎の宛先表に反映される。
【００５９】
属性値に対応するコンピュータ（データ格納サーバ１０６または操作要求中継サーバ１０８）の決定、あるいは属性の空間に対応する複数コンピュータ（データ格納サーバ１０６または操作要求中継サーバ１０８）の決定を行う際には、この属性毎の宛先表を参照して、決定することができる。それにより、データの分布の変化に対しても、特定のコンピュータ（データ格納サーバ１０６）への負荷の偏りを伴わないようになる。さらに、ノード間で構成される送受信関係の数である次数を増加させずに、属性値の順序にデータを均等にコンピュータ（データ格納サーバ１０６）に格納できる。したがって、範囲検索等の柔軟な検索を行うことができる。
【００６０】
本実施の形態の情報システム１は、たとえば、図２に示すように、互いにネットワーク３を介して接続された、主にデータの格納を担う複数のデータコンピュータ２０８（図２では、データコンピュータＦ１〜Ｆｎと示す。）と、主にデータへの操作要求を発行するアクセスコンピュータ２０２（図２では、アクセスコンピュータＥ１〜Ｅｎと示す。）と、がスイッチ２０６を介して接続された構成であってもよい。また、さらにデータコンピュータ２０８に格納されるデータ構造に関する情報（スキーマ）を保持するメタデータコンピュータ２０４を加えた構成としてもよい。
【００６１】
図４は、本実施形態の情報システム１の構成を示す機能ブロック図である。
本実施形態の情報システム１は、データ群を分散して管理する複数のノード（データ格納サーバ１０６）を備え、複数のノード（データ格納サーバ１０６）は、それぞれネットワーク上で識別可能な宛先アドレスを有し、複数のノード（データ格納サーバ１０６）に対し、論理識別子空間上で論理識別子を付与する識別子付与部（宛先表管理部４００）と、論理識別子空間と、データ群におけるデータの値の範囲と、を対応付け、各ノード（データ格納サーバ１０６）が管理するデータの値域を、各ノード（データ格納サーバ１０６）の論理識別子に対応させて決定する値域決定部（宛先表管理部４００）と、ある属性値または属性範囲のデータの格納先のノード（データ格納サーバ１０６）の宛先を探索するとき、各ノード（データ格納サーバ１０６）のデータの値域と、論理識別子と、宛先アドレスとの対応関係に基づき、属性値または属性範囲の少なくとも一部が一致するデータの値域に対応する論理識別子を求め、当該論理識別子に対応するノード（データ格納サーバ１０６）の宛先アドレスを宛先として決定する宛先決定部（宛先解決部３４０）と、を備える。
【００６２】
具体的には、図４に示すように、本実施形態の情報システム１は、宛先解決部３４０と、操作要求部３６０と、中継部３８０と、宛先表管理部４００と、負荷分散部４２０と、データ管理部４４０と、を備える。
【００６３】
本実施形態において、宛先解決部３４０、操作要求部３６０、および宛先表管理部４００は、データ操作クライアント１０４の各ノードに含まれる。また、宛先解決部３４０、中継部３８０、および宛先表管理部４００は、操作要求中継サーバ１０８の各ノードに含まれる。負荷分散部４２０およびデータ管理部４４０は、データ格納サーバ１０６の各ノードに含まれる。
【００６４】
図５は、サーバ間通信のプロトコルスタックを示すブロック図である。
図５（ａ）は、データ操作クライアント１０４における宛先解決処理において、ノードが格納するデータの属性値とノードの通信アドレスとを対応付けた宛先表を用いる分散システムの例を示す図である。
この例では、コンピュータ間の接続関係は各ノードがそれぞれ保持する宛先表１０に記述される。各ノードは、それぞれ異なるノードの宛先を含む宛先表１０を有する。どのノード（Ｎ１、Ｎ２、Ｎ３、・・・）の宛先表１０にどのノードを含めるかは、格納データの属性分布に応じて決定される。
【００６５】
この場合、負荷分散のために、属性の分布に応じて論理識別子ＩＤ空間でのノードの分布が適応的に変化する。これによってノード間の接続関係が決定される。すなわち、ノード間の送受信関係を決定する層が、図５（ａ）の２０で示される部分となる。アプリケーションプログラムからのデータアクセス要求２２に基づいて、宛先解決部（不図示）は、属性値１２と通信アドレス（ＩＰアドレス１４）の対からなる宛先表１０を参照し、データ格納場所（図５（ａ）ではノードＮ３）までの宛先を解決する。これにより、データアクセス要求２２がデータ格納先まで転送され、アプリケーションプログラムが目的のデータ２４にアクセスできることになる。
【００６６】
図５（ｂ）は、データ操作クライアント１０４における宛先解決処理において、ノード（Ｎ１、Ｎ２、Ｎ３、・・・）が格納するデータの属性値を論理識別子ＩＤに変換し、論理識別子ＩＤとノードの通信アドレスＩＰとを対応付けた宛先表３０を用いる分散システムの例を示す図である。
【００６７】
この例では、属性値が均一になるように論理識別子ＩＤに変換する場合は、属性の分布に応じてこの変換を変更する必要がある。すなわち、ノード間の送受信関係を決定する層が、図５（ｂ）の４０で示される部分となる。アプリケーションプログラムからのデータアクセス要求２２に基づいて、宛先解決部（不図示）が、データの属性値を論理識別子ＩＤに変換し、論理識別子ＩＤと通信アドレスＩＰの対からなる宛先表３０を参照して、データ格納場所まで（図５（ｂ）ではノードＮ３）の宛先を解決する。これにより、データアクセス要求２２がデータ格納先まで転送され、アプリケーションプログラムが目的のデータ２４にアクセスできることになる。
【００６８】
図６は、本実施形態の情報システム１のサーバ間通信のプロトコルスタックを示すブロック図である。
図６の本実施形態の情報システム１では、データ操作クライアント１０４における宛先解決処理において、ノード（Ｎ１、Ｎ２、Ｎ３、・・・）間の接続関係を決定するＩＤ宛先表３０だけではなく、アクセスされる属性毎に、その属性空間での範囲（値域）と通信アドレスＩＰの対応を属性宛先表５０として保持する。宛先解決部（不図示）が、これらのＩＤ宛先表３０および属性宛先表５０を参照して、データ格納場所（図６ではノードＮ３）までの宛先を解決する。すなわち、ノード間の送受信関係を決定する層が、図６の６０で示される部分となる。これにより、アプリケーションからのデータアクセス要求２２がデータ格納先まで転送され、アプリケーションプログラムが目的のデータ２４にアクセスできることになる。
【００６９】
次に、本実施形態の情報システム１の構成の詳細について、図７および図８を用いて説明する。
図７および図８は、本実施形態の情報システム１の要部構成を示す機能ブロック図である。
図７に示す操作要求部３６０、宛先解決部３４０、および宛先表管理部４００は、上述したように、図４のデータ操作クライアント１０４の各ノードに含まれる。宛先表管理部４００は、図４の操作要求中継サーバ１０８の各ノードにも含まれる。また、図８に示す負荷分散部４２０およびデータ管理部４４０は図４のデータ格納サーバ１０６の各ノードに含まれる。
【００７０】
図７に示すように、宛先表管理部４００は、ＩＤ宛先表格納部４０２と、属性宛先表格納部４０４と、値域更新部４０６と、ＩＤ検索部４０８と、ＩＤ宛先表構築部４１０と、を含む。
【００７１】
ＩＤ宛先表格納部４０２は、図１１に示すＩＤ宛先表４１２を記憶する。
図１１に示すように、ＩＤ宛先表４１２は、論理識別子ＩＤ（ハッシュ値）と、通信アドレス（図では、サーバＩＰアドレス）とを対応付けて記憶する。通信アドレスは、ネットワークに接続された、属性を有するデータ群を分散して格納する複数のコンピュータ（ノード）間でネットワークを介して互いに通信を行うときの宛先となるコンピュータ（ノード）の通信アドレスである。本実施形態では、論理識別子ＩＤは、有限なハッシュ空間（たとえば、２の１６０乗）にて、各ノードに一意にかつ確率的に均一に分布するように割当てられる。詳細については後述する。
【００７２】
また、図７のＩＤ宛先表格納部４０２に格納されるノードの情報は、宛先解決部３４０のアルゴリズムにより異なる。中継部３８０を持たないフルメッシュのアルゴリズムにおいては、図１１に示すように、任意のノードは全ノードの論理識別子ＩＤと通信アドレスをＩＤ宛先表４１２として持つ。なお、自ノードの情報はＩＤ宛先表４１２に含まなくてもよい。
後述する実施形態のＣｈｏｒｄアルゴリズムにおいては、論理識別子ＩＤ空間において、図５７に示すように、ＩＤ宛先表４５２は、自ノードより大きい論理識別子ＩＤを有するＳｕｃｃｅｓｓｏｒノードをＳｕｃｃｅｓｓｏｒＬｉｓｔとして有し、さらに、自ノードより２のべき乗の距離離れたノードをＦｉｎｇｅｒノードとして複数有する。ここで、各ノードの論理識別子ＩＤの大小の比較、およびノード間の距離の算出は、Consistent Hashingにて一般に定義される比較演算および距離演算の処理によりそれぞれ行われる。
また、後述する実施形態のＫｏｏｒｄｅアルゴリズムにおいては、Ｓｕｃｃｅｓｓｏｒノードと自ノードの論理識別子ＩＤの整数倍の論理識別子ＩＤを有すノードをＦｉｎｇｅｒノードとして複数持つ。
【００７３】
また、図７の属性宛先表格納部４０４は、図１２に示す属性宛先表４１４を記憶する。属性宛先表４１４は、属性毎に設けることができる。図１２に示すように、属性宛先表４１４は、各ノードの論理識別子４１７または通信アドレス（サーバＩＰアドレス４１８）と、属性空間内でそのノードが担当する部分空間である値域の値域端点４１６と、を対応付けて記憶する。
【００７４】
本実施形態では、ＩＤ宛先表４１２（図１１）および属性宛先表４１４（図１２）により、複数のノード（図４のデータ格納サーバ１０６または操作要求中継サーバ１０８）の宛先と、各ノード（データ格納サーバ１０６または操作要求中継サーバ１０８））に論理識別子空間上で確率的に均一に割り当てられた論理識別子ＩＤと、ノード（データ格納サーバ１０６または操作要求中継サーバ１０８））が管理しているデータの属性の値域との対応関係をＩＤ宛先表格納部４０２および属性宛先表格納部４０４にそれぞれ保持することができる。ただし、確率の期待値としては、各ノードはノード数分の１のデータ量を持つが、厳密にノード数分の１のデータ量を持つことは保証しなくてよい。各ノードの負荷が、確率的には均一に割り振られることとなる。
【００７５】
図７に戻り、値域更新部４０６は、自ノードｍの属性宛先表４１４を、他のノードが処理可能な属性空間内の部分空間である値域の変更に応じて更新する。たとえば、後述するように、データ格納サーバ１０６の負荷分散部４２０（図８）により値域が変更された場合、ネットワーク３を介して負荷分散部４２０から値域変更通知が値域更新部４０６に送信される。あるいは、ノード（図４のデータ格納サーバ１０６）から送信された値域変更通知が中継部３８０（図４の操作要求中継サーバ１０８）を経由して値域更新部４０６に送信される。
あるいは、中継部３８０が他ノードの障害などに応じて、そのノードのＩＤ宛先表４１２（図１１）および属性宛先表４１４（図１２）を更新する場合も、その変更が値域更新部４０６に通知されうる。
値域更新部４０６は、他のノード（データ格納サーバ１０６または操作要求中継サーバ１０８）から送信された値域変更通知に呼応して、属性宛先表４１４を更新する。
【００７６】
さらに、値域更新部４０６は、各ノード（データ格納サーバ１０６）に対し、死活監視（ヘルスチェック）を定期的に実行し、各属性の値域に変更がないかを確認し、属性宛先表４１４を非同期に更新することもできる。
この構成により、データ格納ノード（データ格納サーバ１０６）側で値域を変更した場合に、たとえ非同期にクライアント（データ操作クライアント１０４）側に伝えても、両者間（データ操作クライアント１０４とデータ格納サーバ１０６の間）または各ノード間（データ操作クライアント１０４同士、またはデータ格納サーバ１０６同士）のデータの一貫性を保つことができる。
【００７７】
ＩＤ検索部４０８は、ハッシュ空間内のある論理識別子ＩＤを有するノードが管理するデータにアクセスする要求を処理可能とするために宛先を検索する。ＩＤ検索部４０８は、要求に呼応して、ＩＤ宛先表格納部４０２に格納されているＩＤ宛先表４１２を参照し、その要求を処理すべき宛先（ノードの通信アドレス等）を検索して決定する。
【００７８】
ＩＤ宛先表構築部４１０は、各ノードが有限のＩＤ（Identifier）空間における値を論理識別子ＩＤ（宛先、アドレス、または識別子）として持ち、そのＩＤに応じて、そのノードが担当するデータのＩＤ空間を決定する。データのＩＤは、ＤＨＴでは登録または取得したいデータのキーのハッシュ値を用いる。また、各ノードのＩＤは、ランダムあるいはノードに予め付された一意な識別子（たとえば、ＩＰアドレスとポート）のハッシュ値を用いることができる。これにより負荷分散を図ることができる。ＩＤ空間は、リング型をとる方式、ＨｙｐｅｒＣｕｂｅをとる方式などがある。上述したＣｈｏｒｄとＫｏｏｒｄｅなどは、リング型をとる方式のＩＤ空間を用いる。
【００７９】
このリング型をとる場合の、ノードとデータとの対応付け方式であるConsistent Hashingでは、任意の自然数をｍとして、ＩＤ空間は１次元の［０，２ｍ）を取り、各ノードｉは、このＩＤ空間における値ｘｉをＩＤとして取る。ただし、ｉはノード数Ｎまでの自然数で、ｘｉの順に識別されているとする。
【００８０】
この時、ノードｉは［ｘｉ，ｘ（ｉ＋１））に含まれるデータを管理する。ただし、ｉ＝Ｎであるコンピュータは［０，ｘ０）と［ｘＮ，２ｍ）に含まれるデータを管理する。
さらに、ＩＤ宛先表構築部４１０は、すべてのノードの情報をＩＤ宛先表４１２に含めず、中継部３８０を必要とするアルゴリズム（たとえば、ＣｈｏｒｄやＫｏｏｒｄｅアルゴリズム）の場合、ＩＤ検索部４０８を用いながら、自ノードｍのＩＤ宛先表４１２に他のどのノードを含めるかを決定し、ＩＤ宛先表４１２を作成または更新し、ＩＤ宛先表格納部４０２に記憶する。
【００８１】
図７に示すように、宛先解決部３４０は、単一宛先解決部３４２と、範囲宛先解決部３４４と、を備える。
単一宛先解決部３４２は、与えられたデータの１次元以上の属性値を入力として、属性宛先表格納部４０４に記憶された属性宛先表４１４（図１２）を参照しながら、そのデータに関する操作要求を送信すべき先のコンピュータ（図４のデータ格納サーバ１０６のノード）の宛先（たとえば、通信アドレス）を取得する。
【００８２】
範囲宛先解決部３４４は、与えられた１次元以上の属性の範囲を入力として、属性宛先表４１４（図１２）を参照しながら、そのデータに関する操作要求を送信すべき先のコンピュータ（図４のデータ格納サーバ１０６のノード）の宛先（たとえば、通信アドレス）を複数取得する。
【００８３】
なお、本実施形態では、情報システム１は、単一宛先解決部３４２と範囲宛先解決部３４４を両方備える構成としているが、特に限定されるものではなく、いずれか一方であってもよい。
【００８４】
本実施形態の情報システム１において、データへのアクセス要求とともに、アクセス対象のデータに対する属性値または属性範囲を受け付ける受付部（操作要求部３６０）と、操作要求部３６０が受け付けたアクセス要求とデータに対する属性値または属性範囲をノード（図４のデータ操作クライアント１０４または図４の操作要求中継サーバ１０８）に転送する転送部（中継部３８０）と、をさらに備えることができる。宛先決定部（宛先解決部３４０）は、操作要求部３６０がアクセス要求を受け付けたとき、属性値または属性範囲を有するデータにアクセスするためのノードの宛先を決定し、中継部３８０に受け渡し、中継部３８０は、宛先解決部３４０が決定した宛先のノード（データ操作クライアント１０４または操作要求中継サーバ１０８）にアクセス要求とデータに対する属性値または属性範囲を転送する。
【００８５】
図７に示されるように、操作要求部３６０は、データ追加削除部３６２と、データ検索部３６４と、を備える。
データ追加削除部３６２は、外部のアプリケーションプログラム、あるいはデータベースシステムを構成するプログラムに対して、データの追加削除操作サービスを提供する役割を担う。データ追加削除部３６２は、ある属性値を持つデータの追加あるいは削除要求を受付け、単一宛先解決部３４２が解決する宛先ノードの中継部３８０あるいはデータ管理部４４０（図４のデータ格納サーバ１０６に含まれる）にネットワーク３を介してアクセスを行い、要求された処理を実行して要求元に結果を返す。
【００８６】
データ検索部３６４は、データの検索操作サービスを提供する役割を担う。データ検索部３６４は、属性空間内のある属性範囲に対するデータ検索要求を受付け、範囲宛先解決部３４４が解決する複数の宛先ノードの中継部３８０あるいはデータ管理部４４０にネットワーク３を介してアクセスを行い、要求された処理を実行して要求元に結果を返す。いずれも、その結果に値域変更通知が含まれる際には、宛先表管理部４００の値域更新部４０６に対して値域更新を指示する。
【００８７】
中継部３８０は、図４のデータ操作クライアント１０４の他のノードの操作要求部３６０あるいは図４の操作要求中継サーバ１０８の他のノードの中継部３８０から、ある属性値、あるいはある属性範囲に対するデータアクセス要求を受付ける。そして、中継部３８０は、その応答のために、属性値については単一宛先解決部３４２が解決する宛先ノードを取得し、属性空間内のある属性範囲については、範囲宛先解決部３４４が解決する１以上の宛先ノードを取得する。そして、中継部３８０は、図４のデータ格納サーバ１０６のノードまたは図４の操作要求中継サーバ１０８の他のノードにアクセスして得られた結果に値域変更通知が含まれる場合には、値域更新部４０６に対して値域更新を指示する。
【００８８】
また、あるノード（データ格納サーバ１０６）のデータアクセス部４４４が、属性宛先表４１４を参照して中継処理を実行したノード（操作要求中継サーバ１０８）が認識する値域と、それを受けたノード（データ操作クライアント１０４または操作要求中継サーバ１０８）が認識する値域が異なることを認識した場合に、データアクセス部４４４からデータアクセスを実行したノード（データ操作クライアント１０４）に値域変更通知が返信される。中継部３８０は、この値域変更通知を受信し、リダイレクト先に転送する機能も有する。
【００８９】
また、操作要求部３６０がデータ格納サーバ１０６のデータにアクセスするために関与する中継部３８０の役割およびシーケンスは、一通りではない。データ追加削除部３６２のシーケンスを図９に示し、データ検索部３６４のシーケンスを図１０に示す。図９および図１０に示すように、シーケンスは、大きく分類して反復パターン（図９（ｅ）および図１０（ｅ））と、再帰パターン（図９（ａ）〜図９（ｄ）および図１０（ａ）〜図１０（ｄ））がある。
【００９０】
反復パターン（図９（ｅ）および図１０（ｅ））では、データ操作クライアント１０４における操作要求部３６０が、操作要求中継サーバ１０８から次の操作要求中継サーバ１０８あるいはデータ格納サーバ１０６の通信アドレスを反復的に取得する。再帰パターン（図９（ａ）〜図９（ｄ）および図１０（ａ）〜図１０（ｄ））では、データ操作クライアント１０４から要求を受付けた操作要求中継サーバ１０８が、その要求処理のために別の通信を再帰的に実行する。
【００９１】
さらに、再帰パターンには、非同期方式（図９（ｃ）、図９（ｄ）、図１０（ｃ）、および図１０（ｄ））と、同期方式（図９（ａ）、図９（ｂ）、図１０（ａ）、および図１０（ｂ））がある。非同期方式（図９（ｃ）、図９（ｄ）、図１０（ｃ）、および図１０（ｄ））では、操作要求中継サーバ１０８が、要求を送信したデータ操作クライアント１０４あるいは操作要求中継サーバ１０８に、要求を受信したとの応答を返す。同期方式（図９（ａ）、図９（ｂ）、図１０（ａ）、および図１０（ｂ））では、応答を返さず要求者の処理をブロックする。
【００９２】
また、再帰パターンには、１相式（図９（ａ）、図９（ｃ）、図１０（ａ）、図１０（ｃ））と、２相式（図９（ｂ）、図９（ｄ）、図１０（ｂ）、および図１０（ｄ））がある。１相式（図９（ａ）、図９（ｃ）、図１０（ａ）、図１０（ｃ））では、操作要求中継サーバ１０８が要求されたデータの格納先であるデータ格納サーバ１０６を特定したら、操作要求中継サーバ１０８自体がそのデータアクセス処理を実行する。２相式（図９（ｂ）、図９（ｄ）、図１０（ｂ）、および図１０（ｄ））では、操作要求中継サーバ１０８自体はそのデータアクセス処理を実行せずにデータ操作クライアント１０４にそのデータ格納サーバ１０６の通信アドレスを返し、データ操作クライアント１０４がそのデータ格納サーバ１０６に対してデータアクセス処理を実行する。
【００９３】
本実施形態では、主に再帰、同期、２相の方式（図９（ｂ））について説明するが、いずれの方式でもよい。この方式の場合には、以下のように動作する。たとえば、あるノードの中継部（ここでは、仮に中継部３８０ａと呼ぶ）は、他ノードの中継部（ここでは、仮に中継部３８０ｂと呼ぶ）あるいは操作要求部３６０から要求を受付け、宛先解決部３４０に次にアクセスすべき中継部（ここでは、仮に中継部３８０ｃと呼ぶ）あるいはデータ格納サーバ１０６の通信アドレスを問い合わせる。
【００９４】
そして、中継部３８０ｃの通信アドレスが返ってきた場合には、あるノードの中継部３８０ａは、返信された通信アドレスの中継部３８０ｃにデータアクセス要求を送信する。そして、中継部３８０ａは、返ってきたデータ格納サーバ１０６の通信アドレスを、要求を送信してきた中継部３８０ｂあるいは操作要求部３６０に返す。データ格納サーバ１０６の通信アドレスが返ってきた場合には、中継部３８０ａは、要求を送信してきた中継部３８０ｂあるいは操作要求部３６０に、データ格納サーバ１０６の通信アドレスを返す。
【００９５】
図８に示すように、データ管理部４４０は、データ格納部４４２と、データアクセス部４４４と、を備える。
データ格納部４４２は、本情報システム１に格納／通知されるデータの一部のデータを記憶する記憶部を含む。さらに、データ格納部４４２は、負荷分散部４２０からの要求に応じて、指定された属性のデータ量またはデータ数を返し、他のノードへのデータ移動指示に応じてデータの入出力を行う機能を備える。
【００９６】
データアクセス部４４４は、操作要求部３６０または中継部３８０から、同一ノードのデータ格納部４４２に記憶されたデータに対する取得、追加、削除、または検索等の要求を受付け、データ格納部４４２に対してその処理を実行して、その結果を要求送信元に返す。
【００９７】
データアクセス部４４４は、さらに、操作要求部３６０、あるいは中継部３８０からの要求に対して、データに対するアクセスを実行する前に、負荷分散部４２０における値域格納部４２４を参照して、その要求が妥当か否かの判断を行う役割を担う。この判断は、同一のノードに格納されたデータ格納部４４２に格納されたデータの属性範囲に、要求されたデータアクセスにて指定された属性値あるいは属性範囲が含まれるか否かの判定により行われる。すなわち、データアクセス部４４４は、属性宛先表格納部４０４の属性宛先表４１４を参照してデータアクセスを実行したノードが認識する値域と、自身が認識する値域が異なるか否かを判定する。また、データアクセス部４４４は、要求を送信したノードを識別する情報を負荷分散部４２０の通知先格納部４２６に格納する役割を担ってもよい。
【００９８】
さらに、データアクセス部４４４は、前記判定結果で値域が一致しなかった場合、その妥当でない値域へのアクセスに対して、値域変更通知とリダイレクト先を要求元のノードに通知する。データアクセス部４４４は、自身が認識する値域とアクセス要求されたデータの属性値を比較し、比較結果に基づいて、アクセス要求を受け付けたデータに対応する属性の値域のデータを管理する隣接ノードを判別する。判別された隣接ノードがリダイレクト先として通知される。
【００９９】
リダイレクト先は、アクセス要求されたデータを担当すると想定されるノードの宛先の通信アドレスである。このように、データアクセス部４４４は、要求元のノードの属性宛先表４１４が値域変更通知で通知された値に更新されるように制御する機能も有する。
【０１００】
後述するように、各ノードが担当する値域は負荷を平滑化するために更新されることがあり、その更新内容はノード間で非同期に各ノードの属性宛先表４１４に反映される。そのため、ノード毎に管理している属性宛先表４１４は互いに異なる可能性がある。したがって、アクセス時に、アクセス要求元が認識しているノードが担当する値域と、実際にノードが格納している値域が一致しない可能性がある。そのため、この状態でアクセスを許可すると、異なる２つの要求元のノードが、同一のデータにアクセスする際にも、各々が別々のノードをデータ担当ノードと認識してしまい、アクセス側のノード間で一貫性のないデータ処理がされる可能性があるからである。
本実施形態のように、要求元のクライアントまたはアクセス要求を転送したノードは、リダイレクト先にアクセス要求を転送することで、値域が更新された後に、データアクセス要求を正しいノードに到達させることができる。
【０１０１】
なお、本情報システム１をデータベースシステムではなく、データストリームシステムやＰｕｂ／Ｓｕｂシステムとして利用する場合には、データ格納部４４２には、データではなく条件式が格納される。
【０１０２】
たとえば、データ検索部３６４が受け付けた継続的クエリあるいはＳｕｂｓｃｒｉｂｅ条件で指定された属性範囲が条件式として格納される複数のノードのデータ格納部４４２に、データアクセス部４４４はアクセスする。また、データ追加削除部３６２が受け付けたデータ登録要求（Ｐｕｂｌｉｓｈ要求）については、データアクセス部４４４は与えられた属性値を含むノードのデータ格納部４４２にアクセスし、そこに格納された属性範囲の条件式を取得する。そして、データアクセス部４４４は、得られた継続的クエリあるいはＳｕｂｓｃｒｉｂｅ条件に基づいて、その内容に応じた通知処理や継続的クエリの実行を行う。
【０１０３】
なお、このように、情報システム１をデータストリームシステムやＰｕｂ／Ｓｕｂシステムとして利用する場合、データ格納部４４２にはデータは記録されていないため、負荷分散の尺度となる、属性のデータ量を取得することができない。したがって、この場合、ある属性のデータ量に替えて、単位時間当たりにデータ格納部４４２に登録要求されたデータ数を用いる。
【０１０４】
あるいは、たとえば、データ検索部３６４が受け付けた継続的クエリあるいはＳｕｂｓｃｒｉｂｅ条件で指定されたＤ次元属性範囲を、２Ｄ次元属性値とし、これを格納するノードのデータ格納部４４２に、データアクセス部４４４は、アクセスする。また、データ追加削除部３６２が受け付けたデータ登録要求（Ｐｕｂｌｉｓｈ要求）については、データアクセス部４４４は与えられたＤ次元属性値を２Ｄ次元属性範囲とし、この範囲を担当する複数のノードのデータ格納部４４２にアクセスし、そこに格納された２Ｄ次元属性値であるＤ次元属性範囲の条件式を取得する。そして、データアクセス部４４４は、得られた継続的クエリあるいはＳｕｂｓｃｒｉｂｅ条件に基づいて、その内容に応じた通知処理や継続的クエリの実行を行う。
なお、この場合、データ格納部４４２には条件式が登録されるため、各ノードが保持する条件式の量が、負荷分散の尺度となる。
【０１０５】
図８に示されるように、負荷分散部４２０は、平滑化制御部４２２と、値域格納部４２４と、通知先格納部４２６と、を含む。
値域格納部４２４は、同一ノードｍのデータ管理部４４０のデータ格納部４４２に記憶されたデータの属性毎の値域の端点を、自ノードｍと自ノードｍのＳｕｃｃｅｓｓｏｒノードおよびＰｒｅｄｅｃｅｓｓｏｒノードの論理識別子ＩＤまたはサーバＩＰアドレスをとともに記憶する値域表４２８（図１３）を格納する。ここで、Ｓｕｃｃｅｓｓｏｒノードとは、自ノードｍより大きい論理識別子ＩＤを有する隣接ノードである。Ｐｒｅｄｅｃｅｓｓｏｒノードとは、自ノードｍより小さい論理識別子ＩＤを有する隣接ノードである。
【０１０６】
通知先格納部４２６は、あるノードｍのデータ管理部４４０のデータ格納部４４２に格納されるデータの値域に変更が発生したときに、その変更を通知すべき他のノードを識別する情報（たとえば、ＩＰアドレス）を記憶した通知先表４３０（図１４）を格納する。この通知先表４３０に情報が含まれるノード（各ノードｍが変更を通知すべき他のノード）の選択方法は、各アルゴリズムによって異なる。詳細については後述する。
【０１０７】
平滑化制御部４２２は、論理識別子ＩＤが互いに隣接するノード間で、データの負荷が分散するように、少なくとも一部のデータを移動するとともに、移動に伴う値域の管理を行う。
【０１０８】
平滑化制御部４２２は、同一ノードｍのデータ管理部４４０のデータ格納部４４２に記憶されたある属性のデータ量またはデータ数と、他ノードのデータ格納部４４２に記憶された同一属性のデータ量またはデータ数とを比較し、その結果に応じてノード間にてデータ格納部４４２に記憶されたデータを移動させる指示を行う。また、前述した値域更新部４０６（図７）は、平滑化制御部４２２によるデータの移動に伴い、移動されたデータの属性の値域を更新する。また、平滑化制御部４２２は、データ移動と値域更新を行った際に、そのノードに通信する可能性のある一定のノードに対して、値域の更新を通知する。通知先は、たとえば、通知先表４３０に含まれるノードとすることができる。このように、平滑化制御部４２２のデータ移動によりデータの分布に変化が生じた場合にも、変化に応じて動的に値域が更新され、さらに、値域変更通知によってその更新情報を速く各ノードの属性宛先表４１４に反映させることで、データアクセス時の性能劣化問題が解消されることになる。
【０１０９】
図１３に示すように、値域表４２８は、Ｐｒｅｄｅｃｅｓｓｏｒノードの値域端点ａｐ（図では「１８」）と、自ノードｍの値域端点ａｍ（図では「３２」）と、Ｓｕｃｃｅｓｓｏｒノードの値域端点ａｓ（図では「６３」）を保持する。また、各ノードｍに対する値域の割当ては、Ｐｒｅｄｅｃｅｓｓｏｒノードの値域端点ａｐより大きく、自ノードｍの値域端点ａｍまでの範囲（ａｐ，ａｍ］とする。
ここで、各ノードｍへの値域の割当てを範囲（ａｐ，ａｍ］とする場合、各ノードｍのＳｕｃｃｅｓｓｏｒノードの値域の割り当ては、範囲（ａｍ，ａｓ］となる。
【０１１０】
本実施形態では、各ノードｍに登録されるデータ属性の値域を決定する処理に際し、自ノードｍの値域の割り当てとＳｕｃｃｅｓｓｏｒノードの値域の割り当てが必要となるため、値域表４２８には、これらの範囲を特定するのに必要な、ノード（Ｐｒｅｄｅｃｅｓｓｏｒノード、自ノードｍ、およびＳｕｃｃｅｓｓｏｒノード）の値域端点が含まれる。しかし、本実施形態とは異なる規則で各ノードｍに登録されるデータ属性の値域を決定する場合は、値域表４２８は、その規則に応じて必要なノードの情報を含むことができる。
【０１１１】
また、図１３の値域表４２８には、値域端点とともに通信アドレスも含まれるが、これに限定されない。たとえば、値域表４２８には、属性毎に値域の端点のみが記憶され、Ｐｒｅｄｅｃｅｓｓｏｒノード、自ノードｍ、およびＳｕｃｃｅｓｓｏｒノードの通信アドレスは別の管理表に記憶されて管理されていてもよい。
【０１１２】
図１４の通知先表４３０には、そのノードが通信するために必要な情報が記憶されていればよい。たとえば、通信アドレス（ＩＰアドレス、ポート番号など）に替えて、図７の通知先格納部４２６には、通信アドレスとの対応付けが可能なノードの論理識別子ＩＤが記憶されてもよい。
【０１１３】
また、本実施形態では、図１４の通知先表４３０には、上述したように図８のデータアクセス部４４４から通知された情報が登録されているが、これに限定されず、予め通知先が与えられていてもよい。なお、データストリームシステムあるいはＰｕｂ／Ｓｕｂシステムにおいては、平滑化制御部４２２はデータ格納部４４２に格納されたデータを移動させる代わりに、要求された継続的クエリあるいはＳｕｂｓｃｒｉｂｅ条件について、その属性範囲を適宜分割し、ノード間で移動させる処理を行うことができる。
【０１１４】
上述のような構成において、本発明の実施の形態に係る管理装置（図４のデータ操作クライアント１０４）のデータ処理方法を以下に説明する。
図５８および図５９は、本発明の実施の形態に係るデータ操作クライアント１０４の動作の一例を示すフローチャートである。以下、図４、図５８、および図５９を用いて説明する。
本発明の実施の形態に係るデータ処理方法は、データ群を分散して管理する複数のノード（データ格納サーバ１０６）を管理する管理装置（図４のデータ操作クライアント１０４）のデータ処理方法であって、複数のデータ格納サーバ１０６は、それぞれネットワーク上で識別可能な宛先アドレス（ＩＰアドレス）を有し、データ操作クライアント１０４が、複数のデータ格納サーバ１０６に対し、論理識別子空間上で論理識別子ＩＤを付与し（図５８のステップＳ１１）、論理識別子空間と、データ群におけるデータの値の範囲と、を対応付け、各データ格納サーバ１０６が管理するデータの値域を、各データ格納サーバ１０６の論理識別子ＩＤに対応させて決定する（図５８のステップＳ１３）。さらに、データ操作クライアント１０４が、ある属性値または属性範囲のデータの格納先のデータ格納サーバ１０６の宛先を探索するとき（図５９のステップＳ２１のＹＥＳ）、各データ格納サーバ１０６のデータの値域と、論理識別子ＩＤと、宛先アドレスとの対応関係に基づき、属性値または属性範囲の少なくとも一部が一致するデータの値域に対応する論理識別子ＩＤを求め、当該論理識別子ＩＤに対応するデータ格納サーバ１０６の宛先アドレスを宛先として決定する（図５９のステップＳ２３）。
【０１１５】
さらに、本発明の実施の形態に係るデータ処理方法は、上記管理装置（データ操作クライアント１０４）に接続され、データ操作クライアント１０４を介してデータにアクセスする端末装置（外部アプリケーションプログラムからのサービス提供を受けている端末（不図示））のデータ処理方法であって、端末装置が、属性値または属性範囲を有するデータへのアクセス要求をデータ操作クライアント１０４に通知し、データ操作クライアント１０４を介して、複数のデータ格納サーバ１０６の宛先アドレスと、各データ格納サーバ１０６に割り当てられた論理識別子と、各データ格納サーバ１０６が管理しているデータの値域との対応関係に基づいて、アクセス要求された属性値または属性範囲の少なくとも一部が一致する値域のデータを管理するデータ格納サーバ１０６の宛先にアクセスしてデータを操作する。
【０１１６】
また、本発明の実施の形態に係るコンピュータプログラムは、本実施形態のデータの管理装置（図４のデータ操作クライアント１０４）を実現するコンピュータに、複数のノード（図４のデータ格納サーバ１０６）に対し、論理識別子空間上で論理識別子を付与する手順、論理識別子空間と、データ群におけるデータの値の範囲とを対応付け、各データ格納サーバ１０６が管理するデータの値域を、各データ格納サーバ１０６の論理識別子に対応させて決定する手順、ある属性値または属性範囲のデータの格納先のデータ格納サーバ１０６の宛先を探索するとき、各データ格納サーバ１０６のデータの値域と、論理識別子と、宛先アドレスとの対応関係に基づき、属性値または属性範囲の少なくとも一部が一致するデータの値域に対応する論理識別子を求め、当該論理識別子に対応するデータ格納サーバ１０６の宛先アドレスを宛先として決定する手順を実行させるように記述されている。
【０１１７】
本実施形態のコンピュータプログラムは、コンピュータで読み取り可能な記録媒体に記録されてもよい。記録媒体は特に限定されず、様々な形態のものが考えられる。また、プログラムは、記録媒体からコンピュータのメモリにロードされてもよいし、ネットワークを通じてコンピュータにダウンロードされ、メモリにロードされてもよい。
【０１１８】
このように構成された本実施形態の情報システム１の動作について、以下に説明する。以下の順で各処理について説明する。
（１）各ノード（データ格納サーバ１０６）が負荷を平滑化する処理（負荷の平滑化処理）
（２）アプリケーションプログラムからノード（データ操作クライアント１０４）がデータアクセス要求を受け付ける処理（データアクセス要求受付処理）
（３）ノード（データ操作クライアント１０４）が、属性宛先表４１４の値域を更新する処理（値域更新処理）
（４）ノード（データ操作クライアント１０４）が受け付けたデータアクセス要求に従い、データアクセスを実行する処理（データ追加削除処理、データ検索処理）
（５）ノード（データ操作クライアント１０４）が、目的データの格納先のノード（データ格納サーバ１０６、または、途中、目的のノードを見つけるまでは、操作要求中継サーバ１０８）の宛先を見つけるまでの処理（宛先解決処理）
【０１１９】
まず、本実施形態の情報システム１における負荷の平滑化処理について説明する。図１５は、本実施形態の情報システム１における隣接ノード間との負荷の平滑化処理Ｓ１００の手順の一例を示すフローチャートである。この平滑化処理Ｓ１００は、データ格納サーバ１０６（図４）の負荷分散部４２０の平滑化制御部４２２（図８）が行う。以下、図８、図１３乃至図１５を用いて説明する。
なお、この平滑化処理Ｓ１００は、本実施形態の情報システム１の起動時、または定期的に、自動的に実行され、あるいは、情報システム１の利用者の手動操作により、またはアプリケーションからの要求に呼応して実行される。
【０１２０】
まず、ノードｍ（データ格納サーバ１０６）の負荷分散部４２０の平滑化制御部４２２が、自ノードｍの値域格納部４２４に格納される値域表４２８（図１３）に、通信アドレスが記憶されたＳｕｃｃｅｓｓｏｒノードから、Ｓｕｃｃｅｓｓｏｒノードのデータ管理部４４０のデータ格納部４４２に格納された全属性について属性毎にデータ量またはデータ数（図中、「データ数」と示す）を取得する（ステップＳ１０１）。
【０１２１】
具体的には、ノードｍの平滑化制御部４２２が、Ｓｕｃｃｅｓｓｏｒノードに問い合わせる。そして、Ｓｕｃｃｅｓｓｏｒノードが、自ノードのデータ管理部４４０のデータ格納部４４２を参照し、格納されている全属性のデータについて、属性毎にデータ量またはデータ数を取得する。そして、Ｓｕｃｃｅｓｓｏｒノードがノードｍにこれらの情報を返信する。
【０１２２】
次いで、平滑化制御部４２２が、得られた複数の属性の各々について、ステップＳ１０３〜ステップＳ１１９の間のループ処理を行う。すべての属性について処理が終了したら本ループ処理を終了する。
ループ処理では、平滑化制御部４２２が、自ノードからその属性のデータ量またはデータ数（図中、「データ数」と示す）を取得し（ステップＳ１０５）、Ｓｕｃｃｅｓｓｏｒノードとの負荷分散計画を算出する（ステップＳ１０７）。この負荷分散計画処理については、後述する。
【０１２３】
変更計画がない場合（ステップＳ１０９の「変更なし」）、次の属性の処理に移る。データをＳｕｃｃｅｓｓｏｒノードから自ノードに入力する（Ｉｍｐｏｒｔ）計画がある場合（ステップＳ１０９のＩｍｐｏｒｔ）、その計画に基づき、平滑化制御部４２２が、Ｓｕｃｃｅｓｓｏｒノードのデータ格納部４４２から自ノードのデータ格納部４４２にデータを移動させる（ステップＳ１１３）。データを自ノードからＳｕｃｃｅｓｓｏｒノードに出力する（Ｅｘｐｏｒｔ）計画がある場合（ステップＳ１０９のＥｘｐｏｒｔ）、その計画に基づき、平滑化制御部４２２が、自ノードのデータ格納部４４２からＳｕｃｃｅｓｓｏｒノードのデータ格納部４４２にデータを移動させる（ステップＳ１１１）。
【０１２４】
ステップＳ１１３またはステップＳ１１１でＩｍｐｏｒｔまたはＥｘｐｏｒｔを行った場合は、それに応じて、自ノードの値域が変更になるので、平滑化制御部４２２が、値域格納部４２４に格納された値域表４２８（図１３）の自ノードの値域端点を変更する（ステップＳ１１５）。そして、Ｓｕｃｃｅｓｓｏｒノードに、自ノードの値域端点の変更を通知して、Ｓｕｃｃｅｓｓｏｒノードの値域格納部４２４のＰｒｅｄｅｃｅｓｓｏｒノード（自ノードに相当）の値域端点を変更させる。さらに、この自ノードの値域端点の変更は、通知先格納部４２６の通知先表４３０（図１４）に格納された通信アドレスのノードに対しても、更新された値域端点の情報を値域変更通知として送信する（ステップＳ１１７）。
【０１２５】
図１６は、図１５のステップＳ１０７の負荷分散計画算出処理（Ｓ２００）の手順の一例を示すフローチャートである。
まず、隣接ノードとのデータ量またはデータ数（図中、「データ量」と示す）に基づいて、移動すべきデータの変更量ｄＮを求める（ステップＳ２０１）。ここでは、自ノードとＳｕｃｃｅｓｓｏｒノードのデータ格納部４４２に格納されたデータ量またはデータ数をそれぞれＮｍ、Ｎｓとする。また、自ノードとＳｕｃｃｅｓｓｏｒノードが担当する論理識別子ＩＤの範囲の幅を｜ＩＤｍ−ＩＤｐ｜と｜ＩＤｓ−ＩＤｍ｜とする。このとき、好ましくは、Ｎｍ：Ｎｓ＝｜ＩＤｍ−ＩＤｐ｜：｜ＩＤｓ−ＩＤｍ｜となるように、平滑化制御部４２２は、自ノードからＳｕｃｃｅｓｓｏｒノードに移動すべき変更量ｄＮを求める。
【０１２６】
なお、｜ＩＤｍ−ＩＤｐ｜は、論理識別子ＩＤ空間２ｍを用いて、ＩＤｍ−ＩＤｐ  ｍｏｄ  ２ｍにより算出され、その答えは非負である。たとえば、２ｍが１０２４であり、ＩＤｍが１０、ＩＤｐが１０００の時には、｜ＩＤｍ−ＩＤｐ｜は３４である。
【０１２７】
好適には自ノードとＳｕｃｃｅｓｓｏｒノードのデータ量またはデータ数自体を均一化させるのではなく、｜ＩＤｍ−ＩＤｐ｜と｜ＩＤｓ−ＩＤｍ｜との比に応じて配分されるように、変更量が決定されるとよい。何故なら、本実施形態の情報システム１には、ノードの追加がなされるスケールアウト（サーバ（ノード）の数を増やすことでシステム全体の性能を向上させること）が行われることを想定しているからである。このとき追加されるノードの論理識別子ＩＤは、ＩＤ宛先表構築部４１０により、論理識別子ＩＤ空間において、確率的に均一にランダムに割当てられる。
【０１２８】
そして、追加されるノードに割当てられた論理識別子ＩＤのＳｕｃｃｅｓｓｏｒとなるノードからデータの移動を受ける。そのため、論理識別子ＩＤ範囲の幅の大きなノードは、新たに追加されるノードにデータを移動できる確率が高くなる。そして、属性の値域を決定する際にも、論理識別子ＩＤ範囲の広さに応じて、論理識別子ＩＤ範囲の幅の大きなノードに広い値域を担当させれば、スケールアウトを想定したシステムでも、確率的に均一にデータの値域を決定することができることになる。
【０１２９】
たとえば、平滑化制御部４２２は、下記の（式１）で変更量ｄＮを算出してもよい。
【０１３０】
【数１】
2013046664.tif 000003
【０１３１】
この場合、変更量ｄＮの絶対値が、予め与えられたある正の閾値以下である場合（ステップＳ２０３のＹＥＳ）、平滑化制御部４２２は、計画種別を「変更なし」として負荷分散計画を返し（ステップＳ２０５）、図１５のステップＳ１０９に戻る。
【０１３２】
変更量ｄＮの絶対値が、閾値より大きい場合（ステップＳ２０３のＮＯ）、変更量ｄＮの符号が正である場合（ステップＳ２０７の「正」）、計画種別を「Ｅｘｐｏｒｔ」として、この計画種別と変更量ｄＮを合わせて負荷分散計画を返し（ステップＳ２０９）、図１５のステップＳ１０９に戻る。負である場合（ステップＳ２０７の「負」）、平滑化制御部４２２は、計画種別を「Ｉｍｐｏｒｔ」として、この計画種別と変更量ｄＮを合わせて負荷分散計画を返し（ステップＳ２１１）、図１５のステップＳ１０９に戻る。
【０１３３】
このようにして算出された負荷分散計画に基づいて、図１５のステップＳ１０９以降の処理が行われる。
以上、図１５および図１６を用いて説明した負荷分散部４２０の動作により、本実施形態の情報システム１は、ノード（データ格納サーバ１０６）へのデータの追加または削除、あるいは、ノード（データ格納サーバ１０６）の増設や撤去などによって、ノードのデータ分布が変化した場合に、ノード間でデータを移動し、負荷を分散させて平滑化させることができる。さらに、このデータ移動に伴う値域の変更を他のノードに通知することができる。
【０１３４】
次に、本実施形態の情報システム１において、ノードがデータのアクセス要求を受け付けた時の処理について説明する。
図１７および図１８は、本実施形態の情報システム１のデータアクセス要求受付処理Ｓ３００の手順の一例を示すフローチャートである。以下、図４、図８、図１３、図１７、図１８を用いて説明する。
このデータアクセス要求受付処理Ｓ３００は、本実施形態の情報システム１のノード（図４のデータ格納サーバ１０６）のデータ管理部４４０のデータアクセス部４４４が行う。そして、本処理Ｓ３００は、データアクセス部４４４が、データ操作クライアント１０４（図４）の操作要求部３６０から送信された、または操作要求中継サーバ１０８（図４）の中継部３８０から転送されたデータアクセス要求とともに、そのノードの値域端点を受け付けると開始する。なお、アクセス要求とともに送られるそのノードの値域端点とは、アクセス要求元のノードが管理している、そのノードの値域端点である。本処理Ｓ３００では、アクセス要求元が管理している、そのノードの値域端点と自ノードが管理している値域端点が一致しているか否かを検証する。そのため、アクセス要求元から、そのノードの値域端点を受信する。
【０１３５】
また、本処理Ｓ３００では、データアクセス部４４４が値域格納部４２４の値域表４２８（図１３）を参照しながら、その要求の妥当性を判定し、妥当である要求についてデータ格納部４４２に記憶されるデータに対する処理、たとえば、データの追加、削除、または検索などの処理を実行する。さらに、本処理Ｓ３００では、アクセス要求を、中継部３８０を介して転送していく宛先を決定するのに必要な情報を作成して返す処理も行う。
【０１３６】
まず、アクセス要求を受け付けたノードｍのデータ管理部４４０のデータアクセス部４４４が、アクセス要求の種別を判別する（ステップＳ３０１）。アクセス要求の種別が属性値である場合には、データアクセス部４４４が、値域格納部４２４の値域表４２８を参照して自ノードｍの値域（ａｐ，ａｍ］を取得し、属性値ａと、自ノードｍの値域（ａｐ，ａｍ］を比較する（ステップＳ３０３）。
【０１３７】
属性値ａの方が小さい場合（ステップＳ３０３のｃａｓｅ１）、データアクセス部４４４が、値域格納部４２４の値域表４２８を参照してＰｒｅｄｅｃｅｓｓｏｒノードの論理識別子ＩＤと値域端点を取得し、それらのＰｒｅｄｅｃｅｓｓｏｒノードの情報を値域変更通知に含める。さらに、データアクセス部４４４は、値域格納部４２４の値域表４２８を参照してＰｒｅｄｅｃｅｓｓｏｒノードの通信アドレスを取得し、そのＰｒｅｄｅｃｅｓｓｏｒノードの通信アドレスをリダイレクト先（転送先）とする。
【０１３８】
そして、データアクセス部４４４は、これらのＰｒｅｄｅｃｅｓｓｏｒノードの情報を値域変更通知およびリダイレクト先として、アクセス要求を受け付けた操作要求部３６０または中継部３８０のノードに返し（ステップＳ３０５）、本処理を終了する。
【０１３９】
属性値ａの方が大きい場合（ａｍ∈（ａｐ，ａ］）（ステップＳ３０３のｃａｓｅ２）、データアクセス部４４４が、ステップＳ３０５と同様に自ノードｍの論理識別子ＩＤと値域端点、およびＳｕｃｃｅｓｓｏｒノードの通信アドレスを取得し、自ノードｍの情報を値域変更通知として、Ｓｕｃｃｅｓｓｏｒノードの通信アドレスをリダイレクト先として、アクセス要求を受け付けた操作要求部３６０または中継部３８０のノードに返し（ステップＳ３０７）、本処理を終了する。属性値ａが値域に含まれる場合（ａ∈（ａｐ，ａｍ］）（ステップＳ３０３のｃａｓｅ３）には、データアクセス部４４４が、データ格納部４４２に記憶されるデータに対する処理を実行し（ステップＳ３０９）、図１８のステップＳ３２３に進む。
【０１４０】
ここで、上述した属性値ａと値域（ａｐ，ａｍ］の比較を図１９（ａ）〜図１９（ｃ）にまとめて概念図とともに示す。ここでいう、「小さい」とはその属性値そのものの値の小ささを表す比較演算ではない。属性値ａが値域（ａｐ，ａｍ］に含まれず、値域（ａｐ，ａｍ］から見てリングの反時計回り側、すなわち、Ｐｒｅｄｅｃｅｓｓｏｒノードに格納されている可能性が、リングの時計回り側、すなわち、Ｓｕｃｃｅｓｓｏｒノード側に格納されている可能性より高い状態である。
【０１４１】
たとえば、属性値ａと自ノードｍの値域端点ａｍの差｜ａ−ａｍ｜が｜ａｐ−ａ｜より大きい場合を表す。ここで用いた属性値間の差｜ａ−ａｍ｜も非負である。たとえば［−１２８，１２７］の値をとるｓｉｇｎｅｄ  ｃｈａｒ型の数値−１１０と１００の差は、（（−１１０）−（１００））  ｍｏｄ  ２５６＝４６である。文字列属性の場合も、辞書順の最後と最初の連続性を持たせる任意の規則で同様の差分処理を実現できる。
【０１４２】
図１７に戻り、ステップＳ３０１において、種別が属性範囲である場合には、データアクセス部４４４は、属性範囲（ａｆ，ａｔ］とこのノードｍの値域（ａｐ，ａｍ］を比較する（ステップＳ３１１）。属性範囲（ａｆ，ａｔ］の方が値域（ａｐ，ａｍ］より小さい場合（ステップＳ３１１のｃａｓｅ４）、データアクセス部４４４は、値域格納部４２４の値域表４２８を参照し、Ｐｒｅｄｅｃｅｓｓｏｒノードの論理識別子ＩＤと値域端点と通信アドレスを取得する。そして、データアクセス部４４４が、Ｐｒｅｄｅｃｅｓｓｏｒノードの論理識別子ＩＤと値域端点を値域変更通知として、Ｐｒｅｄｅｃｅｓｓｏｒノードの通信アドレスをリダイレクト先としてアクセス要求を受け付けた操作要求部３６０または中継部３８０に返し（ステップＳ３０５）、本処理を終了する。
【０１４３】
属性範囲（ａｆ，ａｔ］の方が値域（ａｐ，ａｍ］より大きい場合（ステップＳ３１１のｃａｓｅ５）、データアクセス部４４４が、自ノードｍの論理識別子ＩＤ、値域端点を値域変更通知として、Ｓｕｃｃｅｓｓｏｒノードの通信アドレスをリダイレクト先としてアクセス要求を受け付けた操作要求部３６０または中継部３８０に返し（ステップＳ３０７）、本処理を終了する。
【０１４４】
属性範囲（ａｆ，ａｔ］が値域（ａｐ，ａｍ］に含まれる場合（ステップＳ３１１のｃａｓｅ６）、データアクセス部４４４が、データ格納部４４２に記憶されるデータに対する処理を実行し（ステップＳ３０９）、図１８のステップＳ３２３に進む。
【０１４５】
属性範囲（ａｆ，ａｔ］と、値域（ａｐ，ａｍ］に共通部分があり、重なる場合（（ａｆ，ａｔ］∩（ａｐ，ａｍ］≠空集合）には（ステップＳ３１１のｃａｓｅ７）、図１８のステップＳ３１３に進む。そして、データアクセス部４４４が、共通範囲（（ａｆ，ａｔ］∩（ａｐ，ａｍ］）についてデータ格納部４４２に記憶されるデータに対する処理を実行する（ステップＳ３１３）。
【０１４６】
ステップＳ３１３の後、共通範囲以外において、自ノードｍの値域（ａｐ，ａｍ］より小さい属性範囲（ａｆ，ａｔ］が存在する場合（ａｐ∈（ａｆ，ａｔ］）（ステップＳ３１５のＹＥＳ）には、データアクセス部４４４が、Ｐｒｅｄｅｃｅｓｓｏｒノードの論理識別子ＩＤと値域端点を値域変更通知に、通信アドレスをリダイレクト先に加え（ステップＳ３１７）、ステップＳ３１９に進む。自ノードｍの値域より小さい属性範囲が存在しない場合（ステップＳ３１５のＮＯ）にも、次のステップＳ３１９に進む。
【０１４７】
さらに、自ノードｍの値域（ａｐ，ａｍ］より大きい属性範囲（ａｆ，ａｔ］が存在する場合（ａｍ∈（ａｆ，ａｔ］）（ステップＳ３１９のＹＥＳ）には、データアクセス部４４４が、自ノードｍの論理識別子ＩＤと値域端点を値域変更通知に、Ｓｕｃｃｅｓｓｏｒノードをリダイレクト先に加え（ステップＳ３２１）、次のステップＳ３２３に進む。自ノードｍの値域より大きい属性範囲が存在しない場合（ステップＳ３１９のＮＯ）にも、次のステップＳ３２３に進む。
【０１４８】
そして、呼び出し元から通知された値域端点と、自ノードｍの値域端点が一致していない場合（ステップＳ３２３のＮＯ）、データアクセス部４４４が、自ノードｍの値域端点を値域変更通知に加え（ステップＳ３２５）、ステップＳ３２７に進む。通知された値域端点と、自ノードｍの値域端点が一致している場合（ステップＳ３２３のＹＥＳ）、ステップＳ３２７に進む。データアクセス部４４４が、データアクセス実行結果とともに、値域変更通知とリダイレクト先を呼び出し元に返し（ステップＳ３２７）、本処理を終了する。
【０１４９】
なお、ステップＳ３０９でデータアクセス処理が行われ、かつ、通知された値域端点とこのノードｍの値域端点が一致している場合（ステップＳ３２３のＹＥＳ）は、データアクセス部４４４は、ステップＳ３２７で値域変更通知とリダイレクト先は返信しない。また、データアクセス実行結果は、たとえば、データアクセスの正否や、データ検索の場合、検索結果を含む。
【０１５０】
ここで、上述した属性範囲（ａｆ，ａｔ］と値域（ａｐ，ａｍ］の比較を、図１９（ｄ）〜図１９（ｉ）にまとめて概念図とともに示す。
【０１５１】
以上、図１７および図１８を用いて説明したデータアクセス部４４４の動作により、本実施形態の情報システム１は、ノード（データ操作クライアント１０４）が受け付けて転送してきたアプリケーションプログラムなどからのデータアクセス要求に基づいて、要求されたデータにノード（データ格納サーバ１０６）がアクセスできる。さらに、データアクセス要求の妥当性も判断し、その結果を通知することができる。
【０１５２】
次に、本実施形態の情報システム１において、ノードが値域を更新する処理について説明する。
この値域更新処理は、データ操作クライアント１０４（図４）の宛先表管理部４００の値域更新部４０６（図７）が行う。値域更新処理には、データ操作クライアント１０４の操作要求部３６０（図７）や操作要求中継サーバ１０８（図４）の中継部３８０（図７）、またはデータ格納サーバ１０６（図４）の負荷分散部４２０（図８）からの値域変更通知の受信を契機として実行される処理と、他の構成要素によらずに値域更新部４０６により自律的に実行される処理がある。
前者の他の構成要素からの値域変更通知の受信を契機として実行される処理では、値域変更通知に含まれる論理識別子ＩＤと、属性ならびに値域端点の情報に基づいて、属性宛先表４１４（図１２）に対する更新処理を行う。
【０１５３】
これら実行契機が違う処理における役割の違いを説明する。
たとえば、データ格納サーバ１０６の負荷分散部４２０からの値域変更通知は、データ格納サーバ１０６のデータ管理部４４０における実際の値域変更を契機とするため、データ操作クライアント１０４、あるいは操作要求中継サーバ１０８の属性宛先表４１４（図１２）の情報の鮮度を高めることができるので有効である。
【０１５４】
しかしながら、データ格納サーバ１０６または操作要求中継サーバ１０８等の複数の他のノードの属性宛先表格納部４０４の属性宛先表４１４を同期的に更新し、その間の属性宛先表格納部４０４の属性宛先表４１４を操作要求部３６０や中継部３８０が宛先解決部３４０を介して参照されないようにすると、データ操作クライアントからのデータアクセス要求の応答時間やスループットが劣化する可能性がある。
【０１５５】
したがって、各ノードの属性宛先表４１４は非同期に更新し、操作要求部３６０や中継部３８０が異なるノードあるいはプロセス上で非同期に動作することが望ましい。しかし、その際、宛先解決部３４０により宛先解決された直後に値域が更新されることが起こり得る。そのため、操作要求部３６０や中継部３８０が、他のノードの中継部３８０やデータ管理部４４０にアクセスした際に、妥当な宛先解決結果でなくなった旨を受け取る必要がある。そして、さらに、操作要求部３６０や中継部３８０が、その結果を受付けて、適切な宛先にリダイレクトされる必要がある。
【０１５６】
ただし、操作要求部３６０や中継部３８０からの値域変更通知は、アプリケーションプログラムからの要求実行中に処理されるものであり、その処理中に更新を行うことは、アプリケーションプログラムへの応答時間あるいはスループットの劣化原因となる。そのため、前述の負荷分散部４２０からの値域変更指示、あるいは、値域更新部４０６自体が値域更新を実行し、属性宛先表４１４の情報の鮮度を高める処理があることが、好適には望ましい。
【０１５７】
図２０は、本実施形態の情報システム１の値域更新処理Ｓ４００の手順の一例を示すフローチャートである。以下、図４、図７、図１２、および図２０を用いて説明する。
この値域更新処理Ｓ４００は、本実施形態の情報システム１のノード（図４のデータ操作クライアント１０４）の宛先表管理部４００の値域更新部４０６（図７）が行う。本処理Ｓ４００において、値域更新部４０６自体が自律的に属性宛先表４１４（図１２）の値域更新を行うことで、属性宛先表４１４の情報の鮮度を高めることができる。
【０１５８】
本処理Ｓ４００は、本実施形態の情報システム１の起動時、または定期的に、自動的に実行され、あるいは、情報システム１の利用者の手動操作により、またはアプリケーションプログラムからの要求に応じて実行される。
【０１５９】
あるノードｍ（データ操作クライアント１０４）は、宛先表管理部４００の属性宛先表格納部４０４（図７）に格納されている属性宛先表４１４から任意のノードｎ（データ格納サーバ１０６）を取り出す（ステップＳ４０１）。そして、自ノードｍが管理している全属性の属性宛先表４１４のノードｎの値域端点をそのノードｎに送信する（ステップＳ４０３）。送信先ノードｎでは、受信した各属性の値域端点について、その送信先ノードｎが実際に格納している属性の値域端点と比較し、差異のある値域端点についてその情報をノードｍに返す（ステップＳ４０５）。ノードｍでは、返信されたノードｎの属性の値域端点に基づき、自ノードｍの属性宛先表４１４におけるノードｎの値域の更新を行う（ステップＳ４０７）。
【０１６０】
以上の自律的値域更新処理Ｓ４００により、データ格納サーバ１０６のノード側で値域を変更した場合に、たとえ非同期にデータ操作クライアント１０４のノード側に値域変更を伝えても、両者間（データ操作クライアント１０４とデータ格納サーバ１０６の間）または各ノード間（データ操作クライアント１０４同士、またはデータ格納サーバ１０６同士）のデータの一貫性を保つことができる。定期的にこの処理Ｓ４００を行うことで、各データ操作クライアント１０４のノードは、属性宛先表４１４の情報の鮮度を高めることができる。
【０１６１】
以上、図２０を用いて説明した値域更新部４０６の動作により、本実施形態の情報システム１は、ノード（データ格納サーバ１０６）に対して値域確認を行い、返信された結果に基づいて属性宛先表４１４の情報を更新できる。すなわち、本実施形態では、上述したようにデータ格納サーバ１０６が自律的にデータを移動し、各ノードが担当する値域が変更され、データ操作クライアント１０４に非同期に通知されたとしても、データ操作クライアント１０４とデータ格納サーバ１０６の間で整合がとれることとなる。
【０１６２】
次に、本実施形態の情報システム１のデータ操作クライアント１０４において、アプリケーションプログラムからのデータアクセス要求に基づいて、データの追加または削除、あるいは、データの検索を行う処理について説明する。
【０１６３】
まず、本実施形態の情報システム１におけるデータ追加削除処理について説明する。図２１は、本実施形態の情報システム１におけるデータ追加削除処理Ｓ４１０の手順の一例を示すフローチャートである。このデータ追加削除処理Ｓ４１０は、データ操作クライアント１０４（図４）の操作要求部３６０のデータ追加削除部３６２（図７）が行う。以下、図４、図７、図９、図１２、および図２１を用いて説明する。
【０１６４】
なお、ここでは図９に示した再帰の２相（図９（ｂ）、図９（ｄ）等）、あるいは反復（図９（ｅ）等）の方式のように、属性値からノード（図４のデータ格納サーバ１０６）を特定する処理と、そのノード（データ格納サーバ１０６）に対してデータアクセスを行う処理とが分かれている形態についてのみ説明する。また、以下の説明では、データ追加または削除の処理を行うデータが属性値で指定された場合について説明するが、属性範囲を指定することもできる。属性範囲が指定された場合、後述するデータ検索処理と同様な処理が行われる。ただし、ステップＳ４３７がデータ検索処理ではなく、データ追加または削除処理となる。
【０１６５】
本処理Ｓ４１０は、アプリケーションプログラムから受信した、または他のデータ操作クライアント１０４または操作要求中継サーバ１０８のノードから転送された、データ追加または削除のアクセス要求を、ノードｍ（データ操作クライアント１０４）が受け付けた時に開始する。
【０１６６】
まず、ノードｍ（データ操作クライアント１０４）の操作要求部３６０のデータ追加削除部３６２（図７）が、アクセス要求で指定された追加あるいは削除されるデータの属性値を取得する（ステップＳ４１１）。そして、データ追加削除部３６２は、宛先解決部３４０の単一宛先解決部３４２（図７）に取得した属性値を通知し、単一宛先解決部３４２から、その属性値に対応するノードｎの通信アドレスを取得する（ステップＳ４１３）。
【０１６７】
このとき、単一宛先解決部３４２は、データ追加削除部３６２から通知された属性値について、宛先表管理部４００の属性宛先表格納部４０４に格納されている属性宛先表４１４（図１２）を参照して、その属性値に対応するノードｎの通信アドレスを取得し、データ追加削除部３６２に返信する。この単一宛先解決部３４２の宛先解決処理については後述する。
【０１６８】
そして、データ追加削除部３６２が、取得したノードｎに対してデータの追加または削除といったデータアクセスを行う（ステップＳ４１５）。その際に、データ追加削除部３６２は、自ノードｍのその属性の値域端点をノードｎに通知する。
【０１６９】
このとき、ノードｎでは、図１７および図１８を用いて説明したデータアクセス要求処理Ｓ３００が実行されることとなる。このデータアクセス要求処理Ｓ３００の結果、ノードｎからノードｍに、データアクセス実行結果、値域変更通知、またはリダイレクト先が返信される。そして、ノードｍのデータ追加削除部３６２が、データの追加または削除の処理を行った実行結果をノードｎから受信する。
【０１７０】
その実行結果に、値域変更通知が含まれる場合（ステップＳ４１７のＹＥＳ）、データ追加削除部３６２は、値域変更通知に含まれるノードの論理識別子ＩＤと値域端点の情報を取得する。そして、データ追加削除部３６２は、自ノードｍの宛先表管理部４００の値域更新部４０６（図７）に対して、これらの情報を通知し、当該属性の属性宛先表４１４（図１２）を更新するよう指示し（ステップＳ４１９）、ステップＳ４２１に進む。
【０１７１】
実行結果に値域変更通知が含まれない場合（ステップＳ４１７のＮＯ）、ステップＳ４２１に進む。さらに、実行結果にリダイレクト先が含まれる場合（ステップＳ４２１のＹＥＳ）、ノードｎに対するデータアクセスに失敗したことになる。したがって、リダイレクト先を次のアクセス先のノードｎとして（ステップＳ４２３）、ステップＳ４１５に戻り、データ追加削除部３６２がそのノードｎに対してデータアクセス処理を実行する。
【０１７２】
一方、実行結果にリダイレクト先が含まれない場合（ステップＳ４２１のＮＯ）、本処理を終了する。なお、ステップＳ４１３の属性宛先表４１４を参照して通信アドレスを取得する方式は、後述するように、宛先解決部３４０のアルゴリズムにより異なる。
【０１７３】
次に、本実施形態の情報システム１におけるデータ検索処理について説明する。図２２は、本実施形態の情報システム１におけるデータ検索処理Ｓ４３０の手順の一例を示すフローチャートである。このデータ検索処理Ｓ４３０は、データ操作クライアント１０４（図４）の操作要求部３６０のデータ検索部３６４（図７）が行う。以下、図４、図７、図９、図１２、および図２２を用いて説明する。
【０１７４】
ここでも、図９に示した再帰の２相（図９（ｂ）、図９（ｄ）等）、あるいは反復（図９（ｅ）等）の方式のように、属性範囲から複数のノード（図４のデータ格納サーバ１０６）を特定する処理と、それらノード（データ格納サーバ１０６）に対してデータアクセスを行う処理とが分かれている形態についてのみ説明する。
【０１７５】
また、以下の説明では、検索式で属性範囲が指定された場合について説明しているが、属性値を指定することもできる。属性値が指定された場合は、図２１で説明したデータ追加削除処理と同様な処理が行われる。ただし、ステップＳ４１５がデータ追加削除処理ではなく、データ検索処理となる。
【０１７６】
本処理Ｓ４３０は、アプリケーションプログラムから受信した、または他のデータ操作クライアント１０４または操作要求中継サーバ１０８のノードから転送された、データ検索のアクセス要求をノードｍ（データ操作クライアント１０４）が受け付けた時に開始する。
【０１７７】
まず、ノードｍ（データ操作クライアント１０４）の操作要求部３６０のデータ検索部３６４が、アクセス要求で指定された検索されるデータの属性範囲ａｒを取得する（ステップＳ４３１）。そして、データ検索部３６４は、宛先解決部３４０の範囲宛先解決部３４４（図７）に取得した属性範囲ａｒを通知し、範囲宛先解決部３４４から、その属性範囲ａｒの部分集合である属性範囲ａｓと対応するノードｎの対を複数取得する（ステップＳ４３３）。
【０１７８】
このとき、範囲宛先解決部３４４は、データ検索部３６４から通知された属性範囲ａｒについて、宛先表管理部４００の属性宛先表格納部４０４に格納されている属性宛先表４１４（図１２）を参照して、その属性範囲ａｒの部分集合である属性範囲ａｓと対応するノードｎの対を複数取得し、データ検索部３６４に返信する。この範囲宛先解決部３４４の宛先解決処理については後述する。
【０１７９】
そして、得られた複数の結果の各ノードｎおよび属性範囲ａｓについて、データ検索部３６４がステップＳ４３５〜ステップＳ４４７の間のループ処理を行う。すべてのノードｎについて処理が終了したら本ループ処理を終了し、本処理Ｓ４３０も終了する。
【０１８０】
ループ処理が開始すると、まず、ノードｎに対し、そのノードｎの属性範囲ａｓのデータ検索を実行する（ステップＳ４３７）。その際に、データ検索部３６４は、自ノードｍのその属性の値域端点をノードｎに通知する。
【０１８１】
このとき、ノードｎでは、図１７および図１８を用いて説明したデータアクセス要求処理Ｓ３００が実行されることとなる。このデータアクセス要求処理Ｓ３００の結果、ノードｎからノードｍに、データアクセス実行結果、値域変更通知、またはリダイレクト先が返信される。ここでは、データアクセス実行結果として、検索されたデータが返信される。そして、ノードｍのデータ検索部３６４が、データ検索処理を行った実行結果をノードｎから受信する。
【０１８２】
その実行結果に値域変更通知が存在する場合（ステップＳ４３９のＹＥＳ）、データ検索部３６４は、値域変更通知に含まれるノードの論理識別子ＩＤと値域端点の情報を取得する。そして、データ検索部３６４は、そのノードｍの宛先表管理部４００の値域更新部４０６（図７）に対して当該属性の属性宛先表４１４（図１２）を更新するよう指示し（ステップＳ４４１）、ステップＳ４４３に進む。
【０１８３】
実行結果に値域変更通知が存在しない場合（ステップＳ４３９のＮＯ）、ステップＳ４４３に進む。さらに、実行結果にリダイレクト先が含まれる場合（ステップＳ４４３のＹＥＳ）、ノードｎに対するデータアクセスに失敗したことになる。したがって、リダイレクト先を次のノードｎとして（ステップＳ４４５）、ステップＳ４３７に戻り、属性範囲ａｓのデータアクセスを実行する。一方、実行結果にリダイレクト先が含まれない場合（ステップＳ４４３のＮＯ）、本処理を終了する。なお、ステップＳ４３３の属性宛先表４１４を参照して通信アドレスを取得する方式は、後述するように、宛先解決部３４０のアルゴリズムにより異なる。
【０１８４】
以上、図２１および図２２を用いて説明した操作要求部３６０の動作により、本実施形態の情報システム１は、アプリケーションプログラムからのデータへのアクセス要求に応じた処理を行うことができる。
【０１８５】
次に、本実施形態の情報システム１において、データ格納先のノードの宛先を探索する宛先解決処理について説明する。本宛先解決処理は、データ操作クライアント１０４（図４）の宛先解決部３４０（図７）が行う。また、本実施形態では、宛先解決部３４０のアルゴリズムはフルメッシュである。
宛先解決処理は、単一宛先解決部３４２（図７）が行う単一宛先解決処理と、範囲宛先解決処理とを含む。単一宛先解決処理は、属性値に対するデータを格納する単一のノードの宛先を探索する処理である。範囲宛先解決処理は、範囲宛先解決部３４４（図７）が行う属性範囲に対するデータを格納する複数のノードの宛先を探索する処理である。
【０１８６】
なお、これらの宛先解決処理は、上述したデータ追加削除処理またはデータ検索処理を実行しているノードｍ（データ操作クライアント１０４）の操作要求部３６０から宛先解決処理要求として属性値または属性範囲を受信した時、または、中継部３８０を介して、他のノードの宛先解決部３４０から宛先解決処理要求が転送された時などに開始する。
【０１８７】
まず、宛先解決部３４０の単一宛先解決部３４２が行う単一宛先解決処理について説明する。図２３は、本実施形態の情報システム１における単一宛先解決処理Ｓ４５０の手順の一例を示すフローチャートである。以下、図４、図７、図１２、および図２３を用いて説明する。
【０１８８】
まず、ノードｍ（データ操作クライアント１０４）の宛先解決部３４０の単一宛先解決部３４２が、宛先表管理部４００の属性宛先表格納部４０４に格納されている属性宛先表４１４（図１２）を参照し、呼び出し元から指定された属性値ａのＳｕｃｃｅｓｓｏｒとなるノードの通信アドレスを取得し、呼び出し元に返す（ステップＳ４５１）。
【０１８９】
次に、宛先解決部３４０の範囲宛先解決部３４４が行う範囲宛先解決処理について説明する。
本範囲宛先解決処理では、ノードｍ（データ操作クライアント１０４）の宛先解決部３４０の範囲宛先解決部３４４が、宛先表管理部４００の属性宛先表格納部４０４に格納されている属性宛先表４１４（図１２）を参照し、指定された属性範囲（ａｆ，ａｔ]を属性宛先表４１４に登録された値域端点で分割し、属性範囲と分割に用いたノードの対を複数得る。
【０１９０】
この範囲宛先解決処理の具体例について以下説明する。図２４は、本実施形態の情報システム１における範囲宛先解決処理Ｓ４６０の手順の一例を示すフローチャートである。以下、図４、図７、図１２、および図２４を用いて説明する。
【０１９１】
まず、ノードｍ（データ格納サーバ１０６）の宛先解決部３４０の範囲宛先解決部３４４が、属性範囲（ａｆ，ａｔ］の起点ａｆのＳｕｃｃｅｓｓｏｒノードとなる値域端点ａを、属性宛先表格納部４０４に格納されている属性宛先表４１４から取得し（ステップＳ４６１）、属性範囲の起点ａｆを属性値ａ０として保持する（ステップＳ４６３）。そして、範囲宛先解決部３４４が、属性値ａと属性範囲の終点ａｔを比較し、属性値ａが属性範囲の終点ａｔより小さい場合（ステップＳ４６５のＮＯ）、属性範囲（ａ０，ａ］と、その値域端点ａのノードｎとの対を結果として残す（ステップＳ４６７）。そして、範囲宛先解決部３４４は、属性宛先表４１４から次の値域端点ａを取得し、前の値域端点をａ０として保持する（ステップＳ４６９）。そして、ステップＳ４６５に戻り、次の属性値ａと属性範囲の終点ａｔを比較する。
【０１９２】
属性値ａが属性範囲の終点ａｔより大きい場合（ステップＳ４６５のＹＥＳ）、範囲宛先解決部３４４は、属性範囲（ａ０，ａｔ］と値域端点ａのノードｎとの対を結果として残し（ステップＳ４７１）、得られた複数の対を結果として呼び出し元に返す（ステップＳ４７２）。
【０１９３】
以上、図２３および図２４を用いて説明した宛先解決部３４０の動作により、本実施形態の情報システム１は、データアクセス要求されたデータの属性値からアクセス要求の宛先のノードを特定できる。
【０１９４】
以上説明したように、本発明によれば、ノードのデータ分布が変化しても性能および信頼性を維持する情報システム、データ管理方法、データ処理方法、データ構造、およびプログラムが提供される。
【０１９５】
本発明の実施の形態に係る情報システム１は、特に範囲検索などを実現するために、データ格納先のノードに確率的に均一な論理識別子ＩＤが割り振られ、その論理識別子ＩＤと格納先のノードの宛先アドレスの他に、属性毎の値域と格納先のノードの論理識別子ＩＤとの宛先表を管理する。そして、格納先のノードが論理識別子ＩＤの隣接性に基づいて負荷分散のために値域を変更する。その変更によって属性毎の宛先表が更新される。そして、データアクセス要求に応じて、その宛先表を参照し、そのデータアクセスの処理に必要な格納先のノードの宛先アドレスを決定する。
【０１９６】
これにより、本発明の実施の形態に係る情報システム１によれば、ノード間の通信到達性を維持するための死活監視（ヘルスチェック）に伴い生じる負荷や、ノード間の頻繁な接続性の変更に伴うシステム障害の可能性が低減するという効果を奏する。
その理由は、本実施形態の情報システム１では、各ノード（データ操作クライアント１０４または操作要求中継サーバ１０８）がそれぞれ宛先表にて管理しているノード（データ格納サーバ１０６）が、ノード（データ格納サーバ１０６）に登録されるデータの分布変化に伴って変化しないからである。
【０１９７】
これは、本発明の情報システム１では、ノード間の論理識別子ＩＤの関係で構築した送受信関係を表す宛先表（ＩＤ宛先表４１２）とは別に属性毎に宛先表（属性宛先表４１４）を構築したことにある。そして、本実施形態の情報システム１は、この宛先表（属性宛先表４１４）を変更することによって、分布の変化に柔軟に対応することができるため、送受信関係を構築する宛先表（ＩＤ宛先表４１２）に対する変更は必要としないことにある。
【０１９８】
システムを構成するコンピュータ、ディスク、メモリ等の格納先を増やすことで負荷増加に対応する技術として、特定のコンピュータが木構造を管理するなどの集中型の要素を持たず、データの格納先のアドレス（ＩＤ）をハッシュ値によって決定し、それを参照して、データのハッシュ値から格納先を決定する方式（Ｃｏｎｓｉｓｔｅｎｔ  Ｈａｓｈｉｎｇ）がある。しかし、このような方式は、データの順序性や連続性が必要となる範囲検索などには適さない。属性値を格納先の論理識別子ＩＤとして用いることで、格納先を決定できるが、格納先の負荷がその属性の分布に依存し、格納先の論理識別子ＩＤを適応させると、複数の属性を扱う際に、ある属性の分布の変化が他の属性の負荷に影響を与える。また、データの属性値の値域によりコンピュータを決定する方式では、その負荷の均一性が課題となる。属性の分布情報を用いて、属性値が格納先の確率的な均一性に適合するよう、ＩＤを決定する方式では、分布が変化する場合に問題となる。
【０１９９】
上述したように、構造化Ｐ２Ｐは、範囲検索を可能にするためのアプローチとして、以下の２つのアプローチが考えられる。
第１のアプローチは、システムが、ノードに格納されるデータの属性の値域に応じて、他のどのノードを自ノードが管理する宛先表に格納するかを決定し（送受信関係を構築し）、データへのアクセス要求の宛先を決定する際に、要求されたデータの属性値と宛先表とを参照し、決定した宛先に、そのデータへのアクセス要求を転送する。
第２のアプローチは、システムが、ノードのＩＤに応じて、他のどのノードを自ノードが管理する宛先表に格納するか決定し（送受信関係を構築し）、データの属性値をＩＤ空間に変換した値と宛先表とを参照して、そのデータへのアクセス要求の宛先を決定する。
【０２００】
上記第１のアプローチでは、各ノードでの宛先表の更新（ノード間の送受信関係の変更）と、それに伴う通信到達性維持のための処理や、通信路変更時に必要となる処理の一時的な停止が必要となる可能性、さらには通信路の障害として扱われる可能性が高まるといった問題点があった。
【０２０１】
その理由は、以下の通りである。複数のノードへのデータ登録に伴い、データの分布は変化する。そして、そのデータの分布の変化に応じて、ノード間でデータがほぼ均一のデータ量を持つように値域を変更すると、その変更に応じて、他のどのノードと接続するかを格納した宛先表も変更する必要が発生するからである。
【０２０２】
本発明によれば、各ノードの宛先表に格納されるノードが、登録されるデータの分布変化によって変化せず、それによりノード間の通信到達性の維持が減り、ノード間の頻繁な接続性の変更に伴うシステム障害の可能性を減らすことができる。
【０２０３】
さらに、上記第１のアプローチでは、各ノードでの宛先表が確率的な均一性を持たなくなり、その均一性を前提としたデータアクセス要求の転送処理の効率性が低下し、ホップ数の増加、すなわち応答時間の低下や、転送負荷の偏りとなって、システムに影響を与えるといった問題点があった。
【０２０４】
その理由は、以下の通りである。複数のノードへのデータ登録に伴い、データの分布は変化する。そして、そのデータの分布の変化に応じて、ノード間でデータがほぼ均一のデータ量を持つように値域を変更すると、宛先表に格納される論理識別子の確率的な分布がその属性の分布に応じて、偏るからである。
【０２０５】
さらに、上記第２のアプローチでは、その対応づけの際に用いる分布情報の更新と、それに応じたデータの再配置が必要になるといった問題点があった。
【０２０６】
その理由は、以下の通りである。ノードのＩＤに応じて構築される宛先表は、データがＩＤ空間に均一に割当てられることを想定して静的に保持される。そして、データのＩＤの方を、データが均一に分布するように、分布情報を用いて算出する。したがって、データの分布が変化すると、算出されるデータのＩＤも更新される必要がある。そして、データを格納する時点におけるＩＤと取得する時点でのＩＤが異なると、データが取得できなくなることがある。これを避けるため、新たなＩＤにデータを再配置する必要があるためである。
【０２０７】
本発明によれば、属性値を、確率的な均一性を有したノードのＩＤや宛先表に格納されるＩＤと整合させるために分布情報を要することなく、分布が変化しても、属性値とＩＤの対応付けの変化に伴う、再配置といった問題を回避することができる。
【０２０８】
その理由は、以下の通りである。本発明の情報システムは、分布情報を用いて属性値をＩＤに変換させ、これとノード間のＩＤの関係で構築した送受信関係を表す宛先表とから、宛先を決定するのではなく、宛先表におけるノード間の送受信関係に沿って、属性毎の宛先表を生成し、これと属性値とを比較して宛先を決定する。そのため、分布に相当する情報は、その送受信関係に沿って、適切に更新され、属性毎の宛先表が更新されるからである。
【０２０９】
（第２の実施の形態）
本発明の実施の形態に係る情報システムは、上記実施形態の情報システム１とは、宛先解決処理にＤＨＴのＣｈｏｒｄアルゴリズムを用いる点で相違する。なお、上記実施形態で図面を用いた各構成要素が行う処理の手順が、本実施形態と上記実施形態とは異なるが、構成については同じであるので上記実施形態と同じ図面と同じ符号を用いて以下説明する。
【０２１０】
本実施形態は、宛先解決部３４０、値域更新部４０６の処理手順が上記実施形態とは異なり、また、ＩＤ宛先表格納部４０２に格納されるＩＤ宛先表４１２と属性宛先表格納部４０４に格納される属性宛先表４１４が上記実施形態とは異なる。本実施形態では、ＩＤ宛先表格納部４０２にはＩＤ宛先表４５２（図５７）が格納され、属性宛先表格納部４０４には属性宛先表４５４（図４５〜図４７）が格納されるものとする。それ以外は上記実施形態と同様とすることができる。
【０２１１】
本発明の実施の形態に係る情報システム１は、ＩＤ宛先表格納部４０２に記憶されるＩＤ宛先表４５２を生成するＩＤ宛先表構築部４１０およびＩＤ検索部４０８が、Ｃｈｏｒｄアルゴリズムに基づいてノード間の送受信関係を構築する。そして、上記実施形態のような、データのハッシュ値の属性値を用いた完全一致検索ではなく、本実施形態では、データの属性値を用いた範囲検索を可能とする。
【０２１２】
本実施形態のような、Ｃｈｏｒｄアルゴリズムに基づいた送受信関係を用いると以下のような利点がある。
第１に、フルメッシュのアルゴリズムの場合に比較して、各ノードが保持する他ノードの通信アドレス数が少なくなるためにスケーラビリティに優れる。第２に、各ノードからある他ノードへの通信経路が複数経路となり、かつ、アルゴリズムにより自動的に経路が選択されるために、経路障害に強い。
【０２１３】
さらに、本実施形態においては、データ分布の変化により更新する必要のある属性宛先表４５４の更新負荷や更新不足に伴う性能問題や一貫性問題が少なくなるという本実施形態に特有な利点がある。すなわち、上記実施形態のフルメッシュのアルゴリズムにおいては、あるノードが保持するデータの値域が変更された場合に、他の全てのノードにおいて、そのノード値域端点を属性宛先表４１４で反映させる必要がある。しかし、本実施形態のＣｈｏｒｄアルゴリズムにおいては、Ｃｈｏｒｄアルゴリズムが生成するノード間の送受信関係上であれば、更新されるべき属性宛先表４５４に記憶される値域端点が少なくなる。そのため、本実施形態では、上記実施形態に比べ、更新負荷や、更新不足に伴う性能の問題や一貫性の問題が低減される。
【０２１４】
このように、本実施形態の情報システム１によれば、ＣｈｏｒｄなどＤＨＴに基づく送受信関係の構築により、その上で形成する属性宛先表の更新に伴う問題が軽減される。
【０２１５】
本実施形態の情報システム１において、各ノード（データ格納サーバ１０６または操作要求中継サーバ１０８のＩＤ宛先表構築部４１０）は、論理識別子空間において、自ノードと他ノードとの論理識別子ＩＤの差を、論理識別子空間のサイズで除した余りとして、自ノードと他ノードとの距離を求め、距離が最小であるノードを隣接ノード（Ｓｕｃｃｅｓｓｏｒノード）とし、および、距離が２のべき乗ずつ離れた識別子以上の中で自ノードに最も近い他ノードを、自ノードのリンク先（Ｆｉｎｇｅｒノード）として選択する。
そして、各ノードは、自ノードで少なくとも選択されたリンク先（Ｆｉｎｇｅｒノード）と隣接ノード（Ｓｕｃｃｅｓｓｏｒノード）を宛先ノードとして、宛先ノードと、宛先ノードの論理識別子ＩＤとの第１の対応関係（ＩＤ宛先表４５２）と、宛先ノードの論理識別子ＩＤと、そのノードが管理しているデータの属性毎の値域と、の第２の対応関係（属性宛先表４５４）と、を対応関係として保持する。
【０２１６】
上述したように、本実施形態の情報システム１では、宛先解決部のアルゴリズムがＤＨＴのようにノード間転送を行うものであり、自ノードが管理していないデータに対するアクセス要求を受け付けたデータ格納サーバ１０６が、操作要求中継サーバ１０８として機能する。
【０２１７】
以下、本実施形態の情報システム１の動作について、説明する。
まず、本実施形態の情報システム１における単一宛先解決処理について説明する。図２５および図２６は、本実施形態の情報システム１における単一宛先解決処理Ｓ５００の手順の一例を示すフローチャートである。この単一宛先解決処理Ｓ５００は、データ操作クライアント１０４（図４）の宛先解決部３４０の単一宛先解決部３４２（図７）が行う。以下、図４、図７、図２５および図２６を用いて説明する。
【０２１８】
本単一宛先解決処理Ｓ５００は、自ノードｍ（データ操作クライアント１０４）のデータ追加削除部３６２（図７）またはデータ検索部３６４（図７）から実行される場合と、中継部３８０（図４の操作要求中継サーバ１０８）を介して、他ノード（データ操作クライアント１０４）の単一宛先解決部３４２から実行される場合とがある。
【０２１９】
はじめに、この単一宛先解決処理Ｓ５００が、自ノードｍの操作要求部３６０のデータ追加削除部３６２から呼び出された場合について説明する。
この時、データ追加削除部３６２は、属性値ａに対応する通信アドレスを取得するための宛先解決要求とともに、呼び出し元の値域端点ａｃと呼び出し元が認識する呼び出し先の値域端点ａｅを単一宛先解決部３４２に通知する。
【０２２０】
あるノードｍ（データ操作クライアント１０４）の単一宛先解決部３４２が、通知された呼び出し先の値域端点ａｅと、自ノードｍの値域端点ａｍが等しいか否か判定する（ステップＳ５０１）。ここでは、あるノードｍにおいて、自ノードｍのデータ追加削除部３６２から本処理Ｓ５００が呼び出されているので、呼び出し元と呼び出し先は同一ノードであるため値域端点ａｃとａｅとａｍは等しくなり（ステップＳ５０１のＹＥＳ）、ステップＳ５０３に進む。
次いで、単一宛先解決部３４２は、その属性値ａが自ノードｍの値域端点ａｍとＳｕｃｃｅｓｓｏｒノードの値域端点ａｓとの間（ａｍ，ａｓ］に含まれるか否か判定する（ステップＳ５０３）。
【０２２１】
属性値ａが含まれる場合（ステップＳ５０３のＹＥＳ）、単一宛先解決部３４２は、そのＳｕｃｃｅｓｓｏｒノードの通信アドレスを呼び出し元に返し（ステップＳ５０５）、本処理を終了する。
一方、属性値ａが含まれない場合（ステップＳ５０３のＮＯ）、図２６のステップＳ５０７に進み、ステップＳ５０７からステップＳ５２１の間のループ処理を行う。
【０２２２】
ここで、図５７に示すように、Ｃｈｏｒｄアルゴリズムにおいては、論理識別子ＩＤ空間において、ＩＤ宛先表４５２に、自ノードｍより大きい論理識別子ＩＤを有するＳｕｃｃｅｓｓｏｒノードの通信アドレスがＳｕｃｃｅｓｓｏｒＬｉｓｔとして含まれる。さらに、ＩＤ宛先表４５２には、自ノードｍより２のべき乗の距離離れたノードの通信アドレスがＦｉｎｇｅｒノードとして複数含まれる。そして、属性宛先表４５４も、ＩＤ宛先表４５２に含まれるＳｕｃｃｅｓｓｏｒノードおよび複数のＦｉｎｇｅｒノードの情報を含む。
【０２２３】
宛先表管理部４００の属性宛先表格納部４０４に格納されている属性宛先表４５４におけるＦｉｎｇｅｒエントリｉの値域端点ａｉを自ノードｍの値域端点ａｍから遠い順で（Ｆｉｎｇｅｒ表のサイズから１まで変化させ）、ｉが１になるまで各々について処理を繰り返す。まず、そのノードｉの値域端点ａｉが、自ノードｍの値域端点ａｍと属性値ａの間（ａｍ，ａ）に含まれるか否かを判定する（ステップＳ５０９）。
【０２２４】
そのノードの値域端点ａｍと属性値ａの間（ａｍ，ａ）に含まれるＦｉｎｇｅｒエントリｉが見つかった場合（ステップＳ５０９のＹＥＳ）、ステップＳ５１１に進む。見つかるまでステップＳ５０９を繰り返し、ｉが１になったら終了する。
見つかったＦｉｎｇｅｒエントリｉのノードに対して、中継部３８０を介して図２３で説明した単一宛先解決処理Ｓ４５０を実行し、そこで属性値ａに対応するノードの通信アドレスを取得する（ステップＳ５１１）。なお、この時、範囲宛先解決部３４４は、Ｆｉｎｇｅｒエントリｉのノードに、自ノードｍの値域端点ａｍと自ノードｍの属性宛先表４５４に格納されているＦｉｎｇｅｒエントリｉのノードの値域端点ａｉを、中継部３８０を介して通知する。
【０２２５】
ステップＳ５１１で得られた結果に、値域変更通知が含まれる場合（ステップＳ５１３のＹＥＳ）、Ｆｉｎｇｅｒエントリｉのノードの値域更新部４０６がその通知に含まれるノードの情報に基づいて属性宛先表格納部４０４に格納されている属性宛先表４５４を更新し（ステップＳ５１５）、ステップＳ５１７に進む。値域変更通知が含まれない場合（ステップＳ５１３のＮＯ）、ステップＳ５１７に進む。
【０２２６】
ここで、ステップＳ５１１で得られた結果にリダイレクト先が含まれる場合、ノードｉに対するデータアクセスに失敗したことになる。失敗でなければ（ステップＳ５１７のＮＯ）、Ｆｉｎｇｅｒエントリｉのノードは、取得した通信アドレスを呼び出し元、すなわち、自ノードｍに中継部３８０を介して返し（ステップＳ５１９）、本処理を終了する。失敗であれば（ステップＳ５１７のＹＥＳ）、ステップＳ５０９に戻り、次のＦｉｎｇｅｒエントリｉについて、ループ処理の続きを行う。
【０２２７】
一方、単一宛先解決処理Ｓ５００が、自ノードｍとは異なる他のノードの中継部３８０を介して呼び出された場合について説明する。
あるノードｍ（データ操作クライアント１０４）の単一宛先解決部３４２が、通知された呼び出し先の値域端点ａｅと、自ノードの値域端点ａｍが等しいか否か判定する（ステップＳ５０１）。
【０２２８】
ここでは、自ノードｍとは異なる他のノードの中継部３８０から本処理Ｓ５００が呼び出されているので、呼び出し元のノードの宛先表管理部４００の属性宛先表格納部４０４に格納された属性宛先表４５４に含まれるＦｉｎｇｅｒエントリｉの値域端点ａｉと、呼び出された先の自ノードｍの値域端点ａｍが異なる場合がある。したがってこの場合には呼び出し先の値域端点ａｅと、自ノードｍの値域端点ａｍは等しくないので（ステップＳ５０１のＮＯ）、単一宛先解決部３４２は、値域端点ａｍを値域変更通知として呼び出し元に返す情報に含める（ステップＳ５３１）。
【０２２９】
次に、自ノードｍの値域端点ａｍが、値域（ａｃ，ａ）に含まれる場合（ステップＳ５３３のＹＥＳ）、ステップＳ５０３に処理を進める。値域端点ａｍが含まれない場合（ステップＳ５３３のＮＯ）、失敗を呼び出し元に返し（ステップＳ５３５）、本処理を終了する。
【０２３０】
次に、本実施形態の情報システム１における範囲宛先解決処理について説明する。図２７および図２８は、本実施形態の情報システム１における範囲宛先解決処理Ｓ５５０の手順の一例を示すフローチャートである。この範囲宛先解決処理は、データ操作クライアント１０４（図４）の宛先解決部３４０の範囲宛先解決部３４４が行う。以下、図４、図７、図２７および図２８を用いて説明する。
【０２３１】
本範囲宛先解決処理Ｓ５５０は、自ノードｍ（データ操作クライアント１０４）のデータ追加削除部３６２（図７）またはデータ検索部３６４（図７）から実行される場合と、中継部３８０（図４の操作要求中継サーバ１０８）を介して、他ノード（データ操作クライアント１０４）の範囲宛先解決部３４４から実行される場合とがある。
【０２３２】
はじめに、この範囲宛先解決処理Ｓ５５０が、自ノードｍのデータ検索部３６４（図７）から呼び出された場合について説明する。
この時、データ検索部３６４は、属性範囲（ａｆ，ａｔ）に対応する通信アドレスを複数取得するための宛先解決要求とともに、呼び出し元の値域端点ａｃと呼び出し元が認識する呼び出し先の値域端点ａｅを範囲宛先解決部３４４に通知する。
【０２３３】
あるノードｍ（データ操作クライアント１０４）の範囲宛先解決部３４４が、通知された呼び出し先の値域端点ａｅと、自ノードｍの値域端点ａｍが等しいか否か判定する（ステップＳ５５１）。ここでは、あるノードｍにおいて、自ノードｍのデータ検索部３６４から呼び出されているので、呼び出し元と呼び出し先は同一ノードであるため値域端点ａｃ、ａｅ、ａｍは等しくなり（ステップＳ５５１のＹＥＳ）、ステップＳ５５３に進む。
【０２３４】
次いで、範囲宛先解決部３４４は、その属性範囲ａｒを、属性範囲（ａｆ，ａｔ］とする（ステップＳ５５３）。そして、範囲宛先解決部３４４は、その属性範囲ａｒを、自ノードｍの値域端点ａｍとＳｕｃｃｅｓｓｏｒノードの値域端点ａｓとの間（ａｍ，ａｓ］に含まれる範囲内属性範囲ａｉと、範囲外属性範囲ａｏに分割する（ステップＳ５５５）。そして、範囲宛先解決部３４４は、範囲内属性範囲ａｉが存在すれば、Ｓｕｃｃｅｓｓｏｒノード（通信アドレス、値域端点）を結果リストに含めて保持する（ステップＳ５５７）。
【０２３５】
次いで、範囲宛先解決部３４４は、未決定範囲集合ａｎを、範囲外属性範囲ａｏとする（ステップＳ５５９）。次いで、図２８に進み、ステップＳ５６１〜ステップＳ５７１の間のループ処理を行う。なお、本実施形態では、属性範囲は、２つの範囲を含む場合もあり、「属性範囲」または「属性範囲集合」と呼ぶものとする。
宛先表管理部４００の属性宛先表格納部４０４に格納されている属性宛先表４５４におけるＦｉｎｇｅｒエントリｉを自ノードｍの値域端点ａｍから遠い順で（Ｆｉｎｇｅｒ表のサイズから１まで変化させ）ｉが１になるまで各々について処理を繰り返す。
【０２３６】
まず、範囲宛先解決部３４４は、未決定範囲集合ａｎを、自ノードｍの値域端点ａｍとＦｉｎｇｅｒエントリｉのａｆｉの間（ａｍ，ａｆｉ］に含まれるＦｉｎｇｅｒ範囲内属性範囲ａｆｉ２と、含まれないＦｉｎｇｅｒ範囲外属性範囲ａｆｏ２に分ける（ステップＳ５６３）。そして、範囲宛先解決部３４４は、未決定範囲集合ａｎを、Ｆｉｎｇｅｒ範囲内属性範囲ａｆｉ２とする（ステップＳ５６５）。そして、Ｆｉｎｇｅｒ範囲外属性範囲ａｆｏ２が空でなければ（ステップＳ５６７のＮＯ）、範囲宛先解決部３４４は、後述する図２９のＦｉｎｇｅｒエントリ宛先解決処理Ｓ５８０を行う（ステップＳ５８０）。Ｆｉｎｇｅｒ範囲外属性範囲ａｆｏ２が空の場合（ステップＳ５６７のＹＥＳ）、ステップＳ５７１に進む。Ｆｉｎｇｅｒ表内のすべてのＦｉｎｇｅｒエントリについて処理が終了したら本ループ処理を終了する（ステップＳ５７１）。そして、範囲宛先解決部３４４は、値域変更通知、失敗範囲、および結果リストを読み出し元に返す（ステップＳ５７３）。
【０２３７】
一方、範囲宛先解決処理Ｓ５５０が、自ノードｍとは異なる他のノードの中継部３８０を介して呼び出された場合について説明する。
ここでは、自ノードｍとは異なる他のノードの中継部３８０から本処理Ｓ５５０が呼び出されているので、呼び出し元のノードの宛先表管理部４００の属性宛先表格納部４０４に格納された属性宛先表４５４に含まれるＦｉｎｇｅｒエントリｉの値域端点ａｉと、呼び出された先の自ノードｍの値域端点ａｍが異なる場合がある。
【０２３８】
ここで、呼び出されたノードにおける値に「’」を付して記述すると、呼び出し元の値域端点ａｃ’＝ａｍ、呼び出し元が認識する呼び出し先の値域端点ａｅ’＝ａｆｉとなる。
そして、範囲宛先解決部３４４が、自ノードｍの値域端点ａｍ’と通知された呼び出し先の値域端点ａｅ’とを比較する（ステップＳ５５１）。値域端点ａｍ’と値域端点ａｅ’とが異なる場合（ステップＳ５５１のＮＯ）、範囲宛先解決部３４４は、自ノードｍの値域端点ａｍ’を値域変更通知に格納する（ステップＳ５７５）。
【０２３９】
そして、範囲宛先解決部３４４は、属性範囲（ａｆ’，ａｔ’］を、値域（ａｃ’，ａｍ’］に含まれない範囲ａｒ’と含まれる範囲ａｒｉ’に分ける（ステップＳ５７７）。そして、範囲宛先解決部３４４は、含まれる範囲ａｒｉ’を失敗範囲とする（ステップＳ５７９）。以降、ステップＳ５５５に進み、上述した手順を同様に進める。
その結果、値域変更通知と、失敗範囲、結果リストが範囲宛先解決部３４４から呼び出し元に返され（ステップＳ５７３）、本処理を終了する。
【０２４０】
次に、図２９を用いて、図２８のステップＳ５８０のＦｉｎｇｅｒエントリ宛先解決処理の手順について説明する。
まず、範囲宛先解決部３４４が、Ｆｉｎｇｅｒエントリｉのノードに対して、中継部３８０を介して図２４で説明した範囲宛先解決処理Ｓ４６０を実行し、そこで範囲宛先解決処理Ｓ５５０で得られたＦｉｎｇｅｒ範囲外属性範囲ａｆｏ２に対応するノードの宛先（通信アドレス）と属性範囲の対を複数取得する（ステップＳ５８１）。なお、この時、範囲宛先解決部３４４は、Ｆｉｎｇｅｒエントリｉのノードに、呼び出し元の値域端点ａｍと、呼び出し元が認識する呼び出し先の値域端点ａｆｉとを中継部３８０を介して通知する。
【０２４１】
そして、この処理を呼び出した元の呼び出し元のノードでは、値域変更通知が含まれる場合（ステップＳ５８３のＹＥＳ）、その通知に含まれるノードの情報に基づいて属性宛先表格納部４０４に格納されている属性宛先表４５４を更新し（ステップＳ５８５）、ステップＳ５８７に進む。値域変更通知が含まれない場合（ステップＳ５８３のＮＯ）、ステップＳ５８７に進む。
【０２４２】
ステップＳ５８１で得られた結果に失敗範囲が含まれている場合は、元の呼び出し元のノードは、その失敗範囲を未決定範囲ａｎに加える（ステップＳ５８７）。
そして、元の呼び出し元のノードは、結果として得られたＳｕｃｃｅｓｓｏｒノードと属性範囲を結果リストに格納し（ステップＳ５８９）、本処理を終了して、図２８のフローに戻る。続いて、次のＦｉｎｇｅｒエントリｉに関して、未決定範囲集合ａｎを同様に処理し、最終的に得られた結果リストを呼び出し元に返す（ステップＳ５７３）。
【０２４３】
以上の処理により、本実施形態の情報システム１は、データアクセス要求されたデータの属性値からアクセス要求の宛先のノードを特定できる。
【０２４４】
以上説明したように、本実施形態の情報システム１によれば、Ｃｈｏｒｄアルゴリズムに基づいてノード間の送受信関係を構築することで、以下の効果を有する。
第１に、フルメッシュのアルゴリズムの場合に比較して、各ノードが保持する他ノードの通信アドレス数が少なくなるためにスケーラビリティに優れる。第２に、各ノードからある他ノードへの通信経路が複数経路となり、かつ、アルゴリズムにより自動的に経路が選択されるために、経路障害に強い。
【０２４５】
さらに、本実施形態においては、データ分布の変化により更新する必要のある属性宛先表４５４の更新負荷や更新不足に伴う性能問題や一貫性問題が少なくなるという本実施形態に特有な利点がある。すなわち、上記実施形態のフルメッシュのアルゴリズムにおいては、あるノードが保持するデータの値域が変更された場合に、他の全てのノードにおいて、そのノード値域端点を属性宛先表４１４で反映させる必要がある。しかし、本実施形態のＣｈｏｒｄアルゴリズムにおいては、Ｃｈｏｒｄアルゴリズムが生成するノード間の送受信関係上であれば、更新されるべき属性宛先表４５４に記憶される値域端点が少なくなる。そのため、本実施形態では、上記実施形態に比べ、更新負荷や、更新不足に伴う性能の問題や一貫性の問題が低減される。
【０２４６】
このように、本実施形態の情報システム１によれば、ＣｈｏｒｄなどＤＨＴに基づく送受信関係の構築により、その上で形成する属性宛先表の更新に伴う問題が軽減される。
【０２４７】
さらに、本発明によれば、データアクセス要求の転送に要するホップ数が低減せず、転送負荷の偏りが、登録されるデータの分布によって変化しないようにすることができる。
【０２４８】
その理由は、以下の通りである。本発明の情報システム１では、ノード間のＩＤの関係で構築した送受信関係を表す宛先表とは別に属性毎に宛先表を構築する。そして、この宛先表の変化によって、分布の変化を反映させるため、送受信関係を構築する宛先表に対する変更は必要としないからである。
【０２４９】
さらに、上記第１のアプローチでは、複数の属性を扱う際に、ある属性のデータの分布の変化に応じて、他の属性のデータアクセス特性が影響を受ける、あるいは、属性数に応じて宛先表に登録される他ノードの数が増加するといった問題点があった。そして、宛先表に登録される他ノードの数が増加すると、クラスタが密に結合し、あるノードでの障害が広範囲に影響したり、ノード上での通信資源（Ｓｏｃｋｅｔなど）が枯渇するといった問題点があった。
【０２５０】
その理由は、以下の通りである。本発明の情報システム１では、格納するデータの属性の分布に応じて宛先表を決定する。そのため、複数の属性の間で単一の宛先表で共有すると、ある属性の分布の変化に応じて宛先表が更新されて、それを介して他の属性のホップ数や次数に影響を与えてしまうからである。また、複数の属性毎に宛先表を設け、異なるノードを登録すれば、影響を受けないが、属性数に応じて宛先表のサイズが増加するといった問題点が生じる。
【０２５１】
本発明によれば、様々な用途で複数の属性を扱う際にも、その属性毎に異なるノードからなる宛先表を作り、関与するノードの数を増加させず、またある属性に関して登録されるデータの分布の変化が、宛先表の更新を介して、他の属性の宛先取得の性能に影響を与えないようにすることができる。
【０２５２】
その理由は、以下の通りである。本発明の情報システム１では、ノード間のＩＤの関係で構築した送受信関係を表す宛先表とは別に属性毎に宛先表を構築する。そして、本発明の情報システム１では、ある属性の変化はその属性のみの宛先表にだけ変化を与え、ＩＤから構築した宛先表に変更を加えることがないことによる。
【０２５３】
（第３の実施の形態）
本発明の実施の形態に係る情報システムは、上記実施形態の情報システムとは、宛先解決処理にＤＨＴのＫｏｏｒｄｅアルゴリズムを用いる点で相違する。なお、上記実施形態で図面を用いた各構成要素が行う処理の手順が、本実施形態と上記実施形態とは異なるが、構成については同じであるので上記実施形態と同じ図面と同じ符号を用いて以下説明する。
【０２５４】
本実施形態は、宛先解決部３４０、値域更新部４０６の処理手順が上記実施形態とは異なり、また、ＩＤ宛先表格納部４０２に格納されるＩＤ宛先表４１２と属性宛先表格納部４０４に格納される属性宛先表４１４が上記実施形態とは異なる。本実施形態では、ＩＤ宛先表格納部４０２にはＩＤ宛先表４６２（不図示）が格納され、属性宛先表格納部４０４には属性宛先表４６４（図３０）が格納されるものとする。それ以外は上記実施形態と同様とすることができる。
【０２５５】
本実施形態の情報システム１は、ＩＤ宛先表格納部４０２に記憶されるＩＤ宛先表４１２を生成するＩＤ宛先表構築部４１０やＩＤ検索部４０８がＫｏｏｒｄｅアルゴリズムに基づいてノード間の送受信関係を構築する。そして、上記実施形態のような、データのハッシュ値の属性値を用いた完全一致検索ではなく、データの属性値を用いた範囲検索を可能とする。
【０２５６】
さらに、本実施形態の情報システム１において、Ｋｏｏｒｄｅアルゴリズムに基づいた送受信関係を用いる利点は、Ｃｈｏｒｄアルゴリズムとは異なり、各ノードの宛先表に格納するノード数（次数）を可変にできる点にある。さらに同じ次数において、中継部の仲介するホップ数が少なくなる傾向となる点にある。すなわち、Ｃｈｏｒｄアルゴリズムでは、次数とホップ数が全ノード数Ｎに対してＯ（ｌｏｇ２（Ｎ））であるのに対して、Ｋｏｏｒｄｅアルゴリズムでは、次数をｋとした時にホップ数がＯ（ｌｏｇｋ（Ｎ））であり、ｋをＯ（ｌｏｇ２（Ｎ））とした時には、次数Ｏ（ｌｏｇ（Ｎ））に対してホップ数がＯ（ｌｏｇ（Ｎ）／ｌｏｇ（ｌｏｇ（Ｎ）））となる。
【０２５７】
さらに、本発明に特有な利点として、本発明の各ノードで更新される必要のある属性宛先表内のノード数が少なくて済むため、自律的な値域変更の確認の頻度や、平滑化制御部から通知するノード数を増やすことができる。
【０２５８】
本実施形態では、Ｃｈｏｒｄアルゴリズムの上記実施形態と異なり、属性宛先表格納部４０４に記憶される属性宛先表４６４の種別が異なる。これはＩＤ宛先表構築部４１０により生成されるＩＤ宛先表４６２が持つノード間の送受信関係を、ＣｈｏｒｄアルゴリズムとＫｏｏrｄｅアルゴリズムとが、どのように使っているかに由来する。いずれも、探索対象のデータを格納したノードを特定するため、中継部による中継の度に、全データ集合の中から格納先を絞り込んでいく。たとえば、中継の度に探索空間が１／２となる時、最初の中継で１００ノードから５０ノードに絞り込まれ、次の中継で５０ノードから２５ノード、２５ノードから１２ノードへと絞り込まれる。
【０２５９】
ＣｈｏｒｄアルゴリズムとＫｏｏｒｄｅアルゴリズムとでは、その実現方法が異なる。Ｃｈｏｒｄアルゴリズムでは、中継部の中継ではＩＤ宛先表の探索空間の広いＦｉｎｇｅｒが選択され、絞り込みが進むに従って探索空間の狭いＦｉｎｇｅｒが選択されるようになる。すなわち、Ｃｈｏｒｄアルゴリズムでは、ある１つのノードのＩＤ宛先表に格納されるＦｉｎｇｅｒノードの役割が異なる。あるＦｉｎｇｅｒノードは１００ノードから５０ノードに狭める役割を担い、別のＦｉｎｇｅｒノードは２５ノードから１２ノードに狭める。
【０２６０】
これに対しＫｏｏｒｄｅアルゴリズムでは、ＩＤ宛先表に記憶される各Ｆｉｎｇｅｒが担う探索空間を狭める役割は、どのＦｉｎｇｅｒもほぼ同じである。すなわち、どのＦｉｎｇｅｒノードも、ある時は、全てのＦｉｎｇｅｒノードが１００ノードから５０ノードに狭める役割を担い、別の時には、全てのＦｉｎｇｅｒノードが５０ノードから２５ノードに狭める役割を担う。
【０２６１】
それにも関わらず、最初の中継では探索空間が１００ノードから５０ノードに狭まり、中継が進むに従って、２５ノードから１２ノードなどより狭い絞り込みができるようにするために、データアクセス要求の中継メッセージ内に中継回数に応じた情報を含め、これを適宜更新または参照しながらＩＤ宛先表を参照する。このようなＩＤ参照表を参照することで、データのハッシュ値に基づく完全一致検索においては、ＫｏｏｒｄｅアルゴリズムはＣｈｏｒｄアルゴリズムよりも、次数に対するホップ数に関する性質が優れている。より具体的には、アクセスするデータのハッシュ値の先頭何ビット目を考慮しているかに関する情報が中継回数に応じて参照または更新される。
【０２６２】
本実施形態の情報システム１では、Ｋｏｏｒｄｅアルゴリズムが目的とするハッシュ値に基づく完全一致検索ではなく、属性範囲に基づく範囲検索など属性の順序性に基づいた処理を行うため、その確率的な均一性が保証されたハッシュ値の場合には機能していた宛先表の設計と参照の仕方が、その均一性の保証がないために変更される必要がある。
【０２６３】
すなわち、Ｋｏｏｒｄｅアルゴリズムでは、中継部の中継した回数に非依存なＩＤ宛先表を構築し、ＩＤ検索部では中継回数に依存したＩＤ宛先表の参照がなされるよう中継されるデータアクセス要求を含めていたが、本実施の形態では、中継部の中継回数に依存した属性宛先表を構築する必要がある。その理由は、以下の通りである。ハッシュ値の場合は、その確率的な均一性という特徴のため、ある上位ビットまでが特定され下位ビットが任意である状態で、任意な下位ビットの先頭数ビットに応じてデータを振り分ける際に、その振り分け配分は、特定されているビットの位置によらず、ほぼ一定であることが期待できる。しかし、属性値の場合は、分布情報が存在しないために、それが期待できないことによる。
【０２６４】
たとえば、８ビットのハッシュ値に上位の２ビットまでが１０に特定されている情報（１０＊＊＊＊＊＊）が１万件あり、次の２ビットを００、０１、１０、１１のパターンで分割する（Ｆｉｎｇｅｒノードに振り分ける）ことを考えると、その割合はほぼ２５％ずつであり、これは上位の４ビットまでが１０１１に特定された１０１１＊＊＊＊の次の２ビットを特定する場合の割り振り配分でも同じであることが、ハッシュ値の確率的な均一性から判断できる。
【０２６５】
これに対して、任意の分布を持った属性、たとえば、年令を８ビット値として扱うと、先頭が１０に特定されている値１０＊＊＊＊＊＊（１２８〜１９１）にて次の２ビットを振り分ける割合と、先頭が０００１に特定された値０００１＊＊＊＊（１６〜３１）にて次の２ビットを振り分ける割合とが、異なることは、登録されるデータが年令という分布であることから想定されうる。このため、本実施の形態では、中継部の中継回数に依存した属性宛先表を構築する必要があるため、本実施形態の属性宛先表と、値域更新部が構築する属性宛先表の動作を明らかにする。
【０２６６】
本実施形態の属性宛先表４６４について、図３０の表を参照して説明する。
属性宛先表４６４では、Ｋｏｏｒｄｅアルゴリズムにより構築され、ＩＤ宛先表４６２に記憶されるＳｕｃｃｅｓｓｏｒノードと、Ｆｉｎｇｅｒノード毎に複数の値域端点を持つ。ここでのＦｉｎｇｅｒノードは、順序付けされており、自ノードｍの整数倍のＰｒｅｄｅｃｅｓｓｏｒであるノードをＦｉｎｇｅｒノード１とし、そのＳｕｃｃｅｓｓｏｒノードをＦｉｎｇｅｒノード２とする。また、属性宛先表４６４は階層に分類され、階層とＩＤから、値域端点が取得できる状態として記憶されている。各Ｆｉｎｇｅｒについて値域端点が階層毎に格納されるが、Ｆｉｎｇｅｒノード数Ｎとして、ＦｉｎｇｅｒノードＮからはそのＳｕｃｃｅｓｓｏｒノードの値域端点が得られているとし、これを便宜上ＦｉｎｇｅｒノードＮ’とする。この情報は、Ｆｉｎｇｅｒノード数を増やし、ノードｍが取得してもよいが、その場合は次数が１増えると判断してよい。
【０２６７】
また、各階層には階層値域が定義される。階層１における階層値域の起点はそのノードの値域端点ａｍであり、終点はＳｕｃｃｅｓｓｏｒノードの値域端点ａｓであり、（ａｍ，ａｓ］となる。階層２以上では階層値域の起点ａｌｆはＦｉｎｇｅｒノード１の値域端点である。終点はＳｕｃｃｅｓｓｏｒノードの値域端点ａｌｓ、あるいはＦｉｎｇｅｒＮ’の値域端点ａｌｆ’とする。好適には、終点はＳｕｃｃｅｓｓｏｒノードの値域端点ａｌｓと、ＦｉｎｇｅｒＮ’の値域端点ａｌｆ’のうち、Ｆｉｎｇｅｒノード１の値域端点から遠い方の値となる。すなわち、ａｌｓが（ａｌｆ，ａｌｆ’］に含まれるならばａｌｆ’であり、逆にａｌｆ’が（ａｌｆ，ａｌｓ］に含まれるならばａｌｓとするのがよい。
【０２６８】
なお、この階層値域に含まれるか否かの判定はＫｏｏｒｄｅアルゴリズムにおけるＩｍａｇｉｎａｒｙＮｏｄｅ（仮想ノード）が自ノードｍとＳｕｃｃｅｓｓｏｒノードの間に含まれるか否かを判定する処理と対応するが、Ｋｏｏｒｄｅアルゴリズムとは異なり必要となってしまう階層ごとの値域情報を有しているため、可能となる。
【０２６９】
本実施形態の情報システム１において、各ノード（データ格納サーバ１０６または操作要求中継サーバ１０８のＩＤ宛先表構築部４１０）は、論理識別子空間において、自ノードと他ノードとの論理識別子ＩＤの差を、論理識別子空間のサイズで剰した余りとして、前記自ノードと前記他ノードとの距離を求め、距離が最小であるノードを隣接ノード（Ｓｕｃｃｅｓｓｏｒノード）とし、ならびに、自ノードの整数倍の論理識別子ＩＤを、論理識別子空間のサイズで除した余りの論理識別子ＩＤから最も距離の近いノード、およびそのノードから最も距離の近い一定数のノードを、自ノードのリンク先（Ｆｉｎｇｅｒノード）として選択する。
【０２７０】
そして、各ノードは、自ノードで少なくとも選択されたリンク先（Ｆｉｎｇｅｒノード）を宛先ノードとし、宛先ノードと、宛先ノードの論理識別子ＩＤとの第１の対応関係（ＩＤ宛先表４６２）と、宛先ノードの論理識別子ＩＤと、そのノードが管理しているデータの属性毎の値域と、の第２の対応関係（属性宛先表４６４）と、を対応関係として保持し、第２の対応関係は、さらに、宛先ノードの階層毎に、データの属性毎の値域を保持する。
【０２７１】
上述したように、本実施形態の情報システム１では、宛先解決部のアルゴリズムがＤＨＴのようにノード間転送を行うものであり、自ノードが管理していないデータに対するアクセス要求を受け付けたデータ格納サーバ１０６が、操作要求中継サーバ１０８として機能する。
【０２７２】
以下、本実施形態の情報システム１の動作について、説明する。
まず、本実施形態の情報システム１において、属性宛先表４６４を構築する処理について説明する。図３１は、本実施形態の属性宛先表構築処理Ｓ６００の手順の一例を示すフローチャートである。この属性宛先表構築処理Ｓ６００は、データ操作クライアント１０４（図４）の宛先表管理部４００の値域更新部４０６（図７）が行う。以下、図４、図７、図３０、図３１を用いて説明する。
【０２７３】
この処理Ｓ６００は、このデータ管理システムに対して、ユーザから指定された属性が格納する定義がなされた際、各データ格納サーバに対して値域の割当てが行われた後に実行される。
まず、あるノードｍ（データ操作クライアント１０４）の値域更新部４０６が、属性宛先表４６４を構築する属性について、Ｓｕｃｃｅｓｓｏｒノードに値域端点ａｓを問い合わせて取得する。値域更新部４０６が、このノードｍの値域端点ａｍとの範囲（ａｍ，ａｓ］を階層１における階層値域として属性宛先表４６４に格納する（ステップＳ６０１）。
【０２７４】
次に、階層ｌｅｖを２から１ずつ増加させながら、ステップＳ６０３〜ステップＳ６２１の間のループ処理を行う。値域更新部４０６は、階層ｌｅｖを２として、Ｓｕｃｃｅｓｓｏｒノードｉから階層ｌｅｖ−１の値域端点を取得する（ステップＳ６０５）。そして、値域更新部４０６は、得られた値域端点をＳｕｃｃｅｓｓｏｒノードｉのノードの階層ｌｅｖの値域端点とする（ステップＳ６０７）。
そして、ＩＤ宛先表４６２に格納されるＦｉｎｇｅｒノードのそれぞれについて、ステップＳ６０９〜ステップＳ６１５のループ処理を行う。ＩＤ宛先表４６２に含まれるすべてのＦｉｎｇｅｒノードについて処理が終了したら本ループ処理を終了する（ステップＳ６１５）。
値域更新部４０６は、Ｆｉｎｇｅｒノードｉから、階層ｌｅｖ−１について階層値域を取得する値域端点取得処理Ｓ６３０（図３２）を行う（ステップＳ６１１）。この処理については図３２を用いて後述する。
ステップＳ６１１で、Ｆｉｎｇｅｒノードｉから得られたそれぞれの階層値域の起点をこのＦｉｎｇｅｒノードｉのこの階層における値域端点として属性宛先表４６４に格納する（ステップＳ６１３）。
【０２７５】
この時、ステップＳ６１１で呼び出されたＦｉｎｇｅｒノードｉでは、値域端点取得処理Ｓ６３０が行われる。図３２は、本実施形態の情報システム１における値域端点取得処理の手順の一例を示すフローチャートである。Ｆｉｎｇｅｒノードｉでは、本処理は、宛先表管理部４００の値域更新部４０６が行う。
【０２７６】
まず、Ｆｉｎｇｅｒノードｉ（図４のデータ操作クライアント１０４）は、呼び出し元のノードｎから当該属性の階層ｌｅｖの値域端点を取得する（ステップＳ６３１）。そして、Ｆｉｎｇｅｒノードｉは、階層ｌｅｖの値域端点を返すために、宛先表管理部４００の属性宛先表格納部４０４に格納されている属性宛先表４６４から、当該階層ｌｅｖの１番目のＦｉｎｇｅｒノード１の値域端点が存在する場合（ステップＳ６３３のＹＥＳ）、その値域端点を取得する（ステップＳ６３５）。
【０２７７】
値域端点が存在しない場合（ステップＳ６３３のＮＯ）、その１番目のＦｉｎｇｅｒノード１に対して、階層ｌｅｖ−１の値域端点を問い合わせて取得する（ステップＳ６３７）。そして、ステップＳ６３５とステップＳ６３７で得られた結果を呼び出し元のノードｎに返す（ステップＳ６３９）。
【０２７８】
図３１に戻り、ここでＦｉｎｇｅｒノード数Ｎ’まで繰り返すとしているが、これは実際のＦｉｎｇｅｒノードＮに対して、そのＳｕｃｃｅｓｓｏｒノードを問い合わせて得たものと同じとして扱っている。続いて、階層ｌｅｖの階層値域の起点をＦｉｎｇｅｒノード１の起点とし、終点を、この階層のＦｉｎｇｅｒノードＮ’とＳｕｃｃｅｓｓｏｒノードのうちで起点から最も遠い値域端点とする（ステップＳ６１７）。
【０２７９】
このように各階層についてループ処理を繰り返し、階層ｌｅｖまでの階層値域の和集合が属性空間全体を含むまで続ける。階層ｌｅｖまでの階層値域の和集合が属性空間全体を含んだら（ステップＳ６１９のＹＥＳ）、ループ処理を終了し（ステップＳ６２１）、本処理を終了する。
【０２８０】
次に、本実施形態の情報システム１における単一宛先解決処理について説明する。
図３３〜図３６は、本実施形態の情報システム１における単一宛先解決処理Ｓ６５０の手順の一例を示すフローチャートである。この単一宛先解決処理Ｓ６５０は、データ操作クライアント１０４（図４）の宛先解決部３４０の単一宛先解決部３４２（図７）が行う。以下、図４、図７、図３３〜図３６を用いて説明する。
【０２８１】
本単一宛先解決処理Ｓ６５０は、自ノードｍ（データ操作クライアント１０４）のデータ追加削除部３６２（図７）またはデータ検索部３６４（図７）から実行される場合と、中継部３８０（図４の操作要求中継サーバ１０８）を介して、他ノード（データ操作クライアント１０４）の単一宛先解決部３４２から実行される場合とがある。
【０２８２】
ここでは、この単一宛先解決処理Ｓ６５０が、自ノードｍの操作要求部３６０のデータ追加削除部３６２から呼び出された場合について説明する。
この時、データ追加削除部３６２は、属性値ａに対応する通信アドレスを取得するための宛先解決要求とともに、呼び出し元の値域端点ａｃと呼び出し元が認識する呼び出し先の値域端点ａｅを単一宛先解決部３４２に通知する。
【０２８３】
本処理Ｓ６５０では、階層ｌｅｖを１から１ずつ増加させ、与えられた階層Ｌに到達するまで、各階層ｌｅｖについて、ステップＳ６５１〜ステップＳ６５９の間のループ処理を行う。すべての階層ｌｅｖについて処理が終了したら本ループ処理を終了し、本処理も終了する。
【０２８４】
はじめに、あるノードｍ（データ操作クライアント１０４）の単一宛先解決部３４２が、階層ｌｅｖにおける階層値域に値域ａが含まれるか否かを判定する（ステップＳ６５３）。値域ａが含まれない場合（ステップＳ６５３のＮＯ）、図３４に進み、属性値ａが含まれる階層値域を特定するための階層値域特定処理Ｓ６６０を行う。
【０２８５】
図３４に示す階層値域特定処理Ｓ６６０では、階層Ｌまで達している場合（ステップＳ６６１のＹＥＳ）、単一宛先解決部３４２は、自ノードｍのＳｕｃｃｅｓｓｏｒノードに対して、その階層ｌｅｖで属性値ａに対応する通信アドレスを得る処理を問い合わせる（ステップＳ６６３）。
【０２８６】
このとき、単一宛先解決部３４２は、自ノードｍで認識している階層ｌｅｖの１番目のＦｉｎｇｅｒノード１の値域端点ａｆ１と、Ｓｕｃｃｅｓｓｏｒノードの値域端点ａｉをＳｕｃｃｅｓｓｏｒノードに通知する。Ｓｕｃｃｅｓｓｏｒノードでは、属性宛先表４６４を参照し、通知された階層ｌｅｖで属性値ａに対応する通信アドレスを取得して返信する。このとき、Ｓｕｃｃｅｓｓｏｒノードでは、通知された値域端点の情報に基づいて、属性宛先表４６４の値域端点と通知された値域端点とを比較し、違いがある場合、値域変更通知を返す。
【０２８７】
そして、Ｓｕｃｃｅｓｓｏｒノードから返信された実行結果に値域変更通知が含まれる場合（ステップＳ６６５のＹＥＳ）、単一宛先解決部３４２は、値域変更通知の情報を属性宛先表４６４に反映させて更新し（ステップＳ６６７）、ステップＳ６６９に進む。値域変更通知が含まれない場合（ステップＳ６６５のＮＯ）、ステップＳ６６９に進む。
【０２８８】
ここで、ステップＳ６６３で得られた結果にリダイレクト先が含まれる場合、ノードに対するデータアクセスに失敗したことになる。成功であれば（ステップＳ６６９のＮＯ）、得られた結果を呼び出し元に返し（ステップＳ６７１）、単一宛先解決処理を終了する。失敗であれば（ステップＳ６６９のＹＥＳ）、図３３のフローに戻り、階層ｌｅｖを１増加し、次の階層ｌｅｖ（階層Ｌより大きい階層）についてループ処理を繰り返し、階層値域に含まれるかの判定を行う（ステップＳ６５３）。なお、階層Ｌまで達していない場合（ステップＳ６６１のＮＯ）、図３３のフローに戻り、階層ｌｅｖを１増加し、次の階層ｌｅｖについてループ処理を繰り返す。
【０２８９】
図３３では、図３４の処理で属性値ａが含まれる階層ｌｅｖが特定されると（ステップＳ６５３のＹＥＳ）、ステップＳ６５５に進む。階層ｌｅｖが１である場合には、単一宛先解決部３４２は、Ｓｕｃｃｅｓｓｏｒノードの通信アドレスを呼び出し元に返す（ステップＳ６５７）。階層ｌｅｖがＬである場合には、図３５の自ノードｍの値域確認処理Ｓ６８０に進む。
【０２９０】
図３５に示す自ノードの値域確認処理Ｓ６８０では、単一宛先解決部３４２が、通知された値域端点ａｅと、自ノードｍの階層ＬのＦｉｎｇｅｒノード１の値域端点ａｆ１が一致しているか否かを判定する（ステップＳ６８１）。一致していない場合（ステップＳ６８１のＮＯ）、自ノードｍの階層ＬのＦｉｎｇｅｒノード１の値域端点ａｆ１を値域変更通知に格納する（ステップＳ６８３）。そして、値域端点ａｆ１が値域［ａｃ，ａ）に含まれるか否かを判定する（ステップＳ６８５）。値域端点ａｆ１が含まれない場合（ステップＳ６８５のＮＯ）、宛先解決の失敗を呼び出し元に返し（ステップＳ６８７）、単一宛先解決処理を終了する。
【０２９１】
通知された値域端点ａｅと値域端点ａｆ１が一致している場合（ステップＳ６８１のＹＥＳ）、または、値域端点ａｆ１が値域［ａｃ，ａ）に含まれる場合（ステップＳ６８５のＹＥＳ）、図３３のフローに戻り、ステップＳ７００に進み、処理を続ける。
【０２９２】
図３３において、ステップＳ６５５の判定で、階層ｌｅｖが１またはＬ以外の場合（ステップＳ６５５のそれ以外）、または、図３５の自ノードの値域確認処理Ｓ６８０の後に、ステップＳ７００に進み、図３６のＦｉｎｇｅｒノードでの宛先探索処理Ｓ７００を行う。
【０２９３】
単一宛先解決部３４２は、ＦｉｎｇｅｒノードサイズをＮとして、Ｆｉｎｇｅｒノードｉを、ＦｉｎｇｅｒノードＮから１までについて、ステップＳ７０１〜ステップＳ７１５の間のループ処理を行う。すべてのＦｉｎｇｅｒノードについて処理が終了したら本ループ処理を終了する。
単一宛先解決部３４２は、Ｆｉｎｇｅｒノードｉの値域端点ａｆｉが、Ｆｉｎｇｅｒノード１の値域端点ａｆ１と、属性値ａの範囲［ａｆ１，ａ）に含まれるか否かを判定する（ステップＳ７０３）。値域端点ａｆｉが含まれない場合（ステップＳ７０３のＮＯ）、次のＦｉｎｇｅｒについて処理を続ける。
【０２９４】
値域端点ａｆｉが含まれる場合（ステップＳ７０３のＹＥＳ）、単一宛先解決部３４２は、そのＦｉｎｇｅｒノードｉに対し、その階層ｌｅｖ−１で属性値ａに対応する通信アドレスを問い合わせて取得する（ステップＳ７０５）。その際、単一宛先解決部３４２は、自ノードｍが認識している値域端点ａｆ１と値域端点ａｉをＦｉｎｇｅｒノードｉに通知する。
Ｆｉｎｇｅｒノードｉから返信された結果に値域変更通知が含まれる場合（ステップＳ７０７のＹＥＳ）、単一宛先解決部３４２は、値域変更通知の情報に基づいて、属性宛先表４６４を更新する（ステップＳ７０９）。
【０２９５】
また、ステップＳ７０５での問い合わせ結果が失敗でなければ（ステップＳ７１１のＮＯ）、Ｆｉｎｇｅｒノードｉから取得したアドレスを呼び出し元に返し（ステップＳ７１３）、単一宛先解決処理を処理する。ステップＳ７０５での問い合わせが失敗であれば（ステップＳ７１１のＹＥＳ）、次のＦｉｎｇｅｒノードに対する処理を進める。このように、各ノードが、低い階層の属性宛先表４６４から参照し、さらに各階層では目的とする属性値が、その階層のどのＦｉｎｇｅｒノードの間の値域に属するかを探索し、ネットワークを介して、Ｆｉｎｇｅｒノードに問い合わせることで、最終的に、宛先に到達することができる。
【０２９６】
次に、本実施形態の情報システム１における範囲宛先解決処理について説明する。図３７〜図４０は、本実施形態の情報システム１における範囲宛先解決処理Ｓ７３０の手順の一例を示すフローチャートである。
この範囲宛先解決処理Ｓ７３０は、データ操作クライアント１０４（図４）の宛先解決部３４０の範囲宛先解決部３４４（図７）が行う。以下、図４、図７、図３７〜図４０を用いて説明する。
【０２９７】
本範囲宛先解決処理Ｓ７３０は、自ノードｍ（データ操作クライアント１０４）のデータ追加削除部３６２（図７）またはデータ検索部３６４（図７）から実行される場合と、中継部３８０（図４の操作要求中継サーバ１０８）を介して、他ノード（データ操作クライアント１０４）の範囲宛先解決部３４４から実行される場合とがある。
この手順では、ある階層の値域端点が通知され得るが、あるノードｍにてデータ検索部３６４から、属性範囲（ａｆ，ａｔ］に対応する通信アドレスを複数取得する処理が実行される際には、同一ノードであるためこの情報は与えられない。
【０２９８】
ここでは、この範囲宛先解決処理Ｓ７３０が、自ノードｍのデータ検索部３６４（図７）から呼び出された場合について説明する。
この時、データ検索部３６４は、属性範囲（ａｆ，ａｔ］に対応する通信アドレスを複数取得するための宛先解決要求とともに、呼び出し元の値域端点ａｃと呼び出し元が認識する呼び出し先の値域端点ａｅを範囲宛先解決部３４４に通知する。
【０２９９】
まず、あるノードｍ（データ操作クライアント１０４）の範囲宛先解決部３４４が、未決定範囲集合ａｎを属性範囲（ａｆ，ａｔ］とする（ステップＳ７３１）。階層ｌｅｖを１から１ずつ増加させ、各階層ｌｅｖについて、ステップＳ７３３〜ステップＳ７４９の間のループ処理を行う。すべての階層ｌｅｖについて処理が終了したら本ループ処理を処理し、本処理も終了する。本処理では、階層毎に処理を繰り返すことで、属性範囲（ａｆ，ａｔ］を各階層の値域に分割する。
【０３００】
範囲宛先解決部３４４は、階層ｌｅｖにおいて、決定範囲集合ａｎ（属性範囲（ａｆ，ａｔ］）を、その階層ｌｅｖの階層値域に含まれる範囲内属性範囲ａｉと、含まれない範囲外属性範囲ａｏに分割する（ステップＳ７３５）。
【０３０１】
範囲内属性範囲ａｉが空の場合（ステップＳ７３７のＹＥＳ）、ステップＳ７４３に進む。範囲内属性範囲ａｉが空でなく（ステップＳ７３７のＮＯ）、かつ、階層ｌｅｖが１である場合（ステップＳ７３９の１である）、範囲宛先解決部３４４は、範囲内属性範囲ａｉとＳｕｃｃｅｓｓｏｒノードを結果リストに格納する（ステップＳ７４１）。そして、範囲宛先解決部３４４は、範囲外属性範囲ａｏを未決定範囲集合ａｎとする（ステップＳ７４３）。未決定範囲集合ａｎが空集合であれば（ステップＳ７４５のＹＥＳ）、結果リストを呼び出し元に返して（ステップＳ７４７）、範囲宛先解決処理を終了する。未決定範囲集合ａｎが空集合でなければ（ステップＳ７４５のＮＯ）、範囲宛先解決部３４４は、階層ｌｅｖを１増加させ、この未決定範囲集合ａｎについて、次の階層のループ処理を行う。
【０３０２】
ステップＳ７３９の判定で、階層ｌｅｖが階層Ｌである場合には、図３８の自ノードの値域確認処理Ｓ７５０に進む。図３８の自ノードの値域確認処理Ｓ７５０では、まず、範囲宛先解決部３４４が、値域端点ａｅと自ノードｍの階層Ｌの１番目のＦｉｎｇｅｒノード１の値域端点ａｆ１が等しいか判定する（ステップＳ７５１）。値域端点ａｅと値域端点ａｆ１が等しくない場合（ステップＳ７５１のＮＯ）、範囲宛先解決部３４４は、自ノードｍの値域端点ａｆ１を値域変更通知に格納する（ステップＳ７５３）。続いて、範囲宛先解決部３４４は、範囲内属性範囲ａｉを（ａｃ，ａｆ１］に含まれる範囲と含まれない範囲に分割する。そして、範囲宛先解決部３４４は、含まれる範囲を失敗範囲とし、含まれない範囲をａｉとする（ステップＳ７５５）。値域端点ａｅと値域端点ａｆ１が等しい場合（ステップＳ７５１のＹＥＳ）、またはステップＳ７５５の後、本処理Ｓ７５０を終了し、図３７のフローに戻り、ステップＳ７６０に進む。
【０３０３】
図３７に戻り、ステップＳ７３９の判定で、階層ｌｅｖが１またはＬ以外の場合（ステップＳ７３９のそれ以外）、図３９に示すＦｉｎｇｅｒノードでの範囲宛先探索処理Ｓ７６０を行う。また、上述した自ノードの値域確認処理Ｓ７５０の後もこの処理Ｓ７６０を行う。
【０３０４】
図３９に示すように、Ｆｉｎｇｅｒノードでの範囲宛先探索処理Ｓ７６０において、まず、範囲宛先解決部３４４は、未決定範囲集合ａｎ２を範囲内属性範囲ａｉとする（ステップＳ７６１）。そして、範囲宛先解決部３４４は、ＦｉｎｇｅｒノードｉをＦｉｎｇｅｒノード数Ｎから１まで変化させ、各ＦｉｎｇｅｒノードについてステップＳ７６３〜ステップＳ７７９の間のループ処理を行う。すべてのＦｉｎｇｅｒノードについて処理が終了したら本ループ処理も終了する。
【０３０５】
ループ処理において、まず、範囲宛先解決部３４４が、未決定範囲集合ａｎ２をＦｉｎｇｅｒノード１の値域端点ａｆ１と、Ｆｉｎｇｅｒノードｉの値域端点ａｆｉとの範囲（ａｆ１，ａｆｉ］に含まれる範囲と含まれない範囲に分割する。そして、範囲宛先解決部３４４は、含まれる範囲をａｉ２、含まれない範囲をａｏ２とする（ステップＳ７６５）。
【０３０６】
続いて、範囲宛先解決部３４４は、Ｆｉｎｇｅｒノードｉに対し、範囲外属性範囲ａｏ２に対応する通知アドレスを問い合わせる（ステップＳ７６７）。このとき、範囲宛先解決部３４４は、自ノードｍが認識している値域端点ａｆ１と値域端点ａｆｉをＦｉｎｇｅｒノードに通知する。Ｆｉｎｇｅｒノードｉは、属性宛先表４６４を参照し、範囲外属性範囲ａｏ２に対応する通知アドレスの結果リストを返信する。
【０３０７】
Ｆｉｎｇｅｒノードｉから得られた結果に値域変更通知が含まれる場合（ステップＳ７６９のＹＥＳ）、範囲宛先解決部３４４は、値域変更通知の情報を属性宛先表４６４に反映する（ステップＳ７７１）。値域変更通知が含まれない場合（ステップＳ７６９のＮＯ）、ステップＳ７７３に進む。
そして、範囲宛先解決部３４４は、Ｆｉｎｇｅｒノードから得られた通信アドレスの結果リストを、この手順での結果リストに追加し（ステップＳ７７３）、未決定範囲集合ａｎ２を、範囲内属性範囲ａｉ２と失敗範囲との和集合とする（ステップＳ７７５）。
【０３０８】
未決定範囲ａｎ２が存在しない（空集合）場合（ステップＳ７７７のＹＥＳ）、Ｆｉｎｇｅｒノードに関するループ処理を抜け、ステップＳ７８１に進む。未決定範囲ａｎ２が存在する場合（ステップＳ７７７のＮＯ）、次のＦｉｎｇｅｒノードについてのループ処理を行う。
【０３０９】
未決定範囲ａｎ２が空集合の場合（ステップＳ７７７のＹＥＳ）、範囲宛先解決部３４４は、階層ｌｅｖがＬ以上であるか否かを判定する（ステップＳ７８１）。階層ｌｅｖがＬ以上である場合（ステップＳ７８１のＹＥＳ）、範囲宛先解決部３４４は、図４０のＳｕｃｃｅｓｓｏｒノードの値域確認処理Ｓ７９０を行う。
【０３１０】
図４０に示すＳｕｃｃｅｓｓｏｒノードの値域確認処理Ｓ７９０において、まず、範囲宛先解決部３４４が、Ｓｕｃｃｅｓｓｏｒノードに対して、範囲外属性範囲ａｏに対応する通信アドレスを問い合わせて取得する（ステップＳ７９１）。その際、範囲宛先解決部３４４は、自ノードが認識している同じ階層ｌｅｖでの１番目のＦｉｎｇｅｒノード１の値域端点ａｆ１とＳｕｃｃｅｓｓｏｒノードの値域端点ａｉをＳｕｃｃｅｓｓｏｒノードに通知する。
【０３１１】
そして、Ｓｕｃｃｅｓｓｏｒノードから得られた結果に値域変更通知が含まれる場合、範囲宛先解決部３４４は、値域変更通知の情報を属性宛先表４６４に反映して更新する（ステップＳ７９３）。そして、範囲宛先解決部３４４は、Ｓｕｃｃｅｓｓｏｒノードから得られた結果リストをこの手順での結果リストに追記する（ステップＳ７９５）。そして、範囲宛先解決部３４４は、失敗範囲を未決定範囲集合ａｎとして（ステップＳ７９７）、図３９のフローに戻る。
【０３１２】
図３９において、階層ｌｅｖがＬ以上でない場合（ステップＳ７８１のＮＯ）、または、ステップＳ７９０の後、処理Ｓ７６０から図３７のフローに戻り、上述したステップＳ７４３に進む。
【０３１３】
以上の処理により、本実施形態の情報システム１は、データアクセス要求されたデータの属性値からアクセス要求の宛先のノードを特定できる。
【０３１４】
以上説明したように、本実施形態の情報システム１によれば、Ｋｏｏｒｄｅアルゴリズムに基づいてノード間の送受信関係を構築することで、以下の効果を有する。
各ノードの宛先表に格納するノード数（次数）を可変にできる。さらに同じ次数において、中継部の仲介するホップ数が少なくなる傾向となる。このように、本実施形態の情報システム１によれば、各ノードで更新される必要のある属性宛先表内のノード数が少なくて済むため、自律的な値域変更の確認の頻度や、平滑化制御部から通知するノード数を増やすことができる。
【０３１５】
（第４の実施の形態）
本発明の実施の形態に係る情報システムは、上記実施形態の情報システムとは、多次元の属性について、範囲検索や範囲指定による通知条件設定ができる点で相違する。
上記実施の形態の属性宛先表４１４、単一宛先解決部３４２ならびに範囲宛先解決部３４４、値域更新部４０６において扱われる値域端点や属性値、属性範囲のうち、属性宛先表４１４に格納される値域端点や、単一宛先解決部３４２に入力される属性値や比較対象となる値域端点は、多次元属性値を空間充填曲線処理により１次元属性値に変換された値を扱う。範囲宛先解決部３４４に入力される属性範囲は、元の多次元属性範囲として扱われ、データアクセス対象の属性範囲の分割や、比較演算が第１〜第３の実施の形態の１次元属性範囲の分割や、比較演算と異なる。
【０３１６】
本実施形態は、上記実施形態のように、１次元の属性についての範囲検索や範囲指定による通知条件設定ではなく、多次元の属性についての範囲検索や範囲指定による通知条件設定を可能とすることができる。それにより、本実施形態は、複数の１次元属性による範囲検索を実行するより、１回の多次元属性による範囲検索の方が、処理すべきデータ量またはデータ数を少なくすることができる。
【０３１７】
たとえば、緯度と経度とで別々にインデックス付けされたデータ（単一インデックス）に関して、緯度に関する範囲検索で得られるデータ集合と、経度に関する範囲検索で得られるデータ集合の積集合をとることと、緯度と経度とを共にインデックス付けされたデータ（複合インデックス）に関して、緯度と経度とで範囲検索して得られるデータ集合とは結果としては同一だが、前者の方が後者より処理するデータ量またはデータ数は少ない。
【０３１８】
本実施形態の情報システム１は、図４の上記実施形態の構成に加え、さらに、多次元属性値を空間充填曲線処理により１次元属性値に変換された値を値域として算出し、後述する属性宛先表４７４を生成する事前処理部３２０を備えてもよい。
【０３１９】
図６０は、本実施形態の情報システム１の事前処理部３２０の構成を示す機能ブロック図である。
本実施形態の情報システム１において、事前処理部３２０は、宛先サーバ情報格納部３２２と、逆関数部３２４と、空間充填曲線サーバ変換部３２６と、空間充填曲線サーバ情報格納部３２８と、を備え、空間充填曲線サーバ情報を作成する機能を有することができる。
ここで、本実施形態では、事前処理部３２０を設けることで、システム初期化時にヒストグラムに基づく逆関数処理によって静的に負荷分散を図り、その後、オンラインでシステム利用中には、本発明の値域変更により動的に負荷分散を図ることができる。
【０３２０】
宛先サーバ情報格納部３２２には、上述したデータの格納先やメッセージ転送先を決定するための論理識別子の集合と、ノードの宛先アドレスとの対応が複数格納されている。たとえば、コンシステントハッシング（Consistent Hashing）や分散ハッシュテーブルの場合は、ハッシュ値と宛先ノードのＩＰアドレスなどである。宛先サーバ情報格納部３２２は、ノード毎に設けられる。
【０３２１】
空間充填曲線サーバ情報格納部３２８には、多次元属性空間の部分空間に対する、他のコンピュータの宛先アドレスが複数格納される。多次元属性空間の部分空間を表現する形式は、たとえば、多次元属性空間の起点の１次元値を列挙して表現してもよく、次元数分の属性範囲の和集合を列挙して表現してもよく、どの次元の何ビット目の値などの条件の和集合を列挙して表現してもよい。
【０３２２】
本実施形態では、空間充填曲線サーバ情報格納部３２８は、図６１に示すような空間充填曲線サーバ情報テーブル３３２が格納される。空間充填曲線サーバ情報テーブル３３２は、宛先アドレス（ＩＰ）に対応する論理識別子（ＩＤ）の範囲（属性空間）の起点を１次元で表現した値を宛先アドレスと対応付けている。なお、図６１では、空間充填曲線サーバ情報テーブル３３２に論理識別子（ＩＤ）が含まれているが、含まれなくてもよい。
【０３２３】
本実施形態では、空間充填曲線サーバ情報格納部３２８は、図６１に示すような空間充填曲線サーバ情報テーブル３３２が格納される。空間充填曲線サーバ情報テーブル３３２は、多次元属性空間を１次元に変換して得られる１次元属性範囲の起点の値を、宛先アドレス（ＩＰ）と対応づけ、さらに、論理識別子（ＩＤ）と対応付けている。なお、図６１では、空間充填曲線サーバ情報テーブル３３２に論理識別子（ＩＤ）が含まれているが、含まれなくてもよい。また、論理識別子（ＩＤ）と宛先アドレス（ＩＰ）の対応テーブルを別途有している場合は、空間充填曲線サーバ情報テーブル３３２は、論理識別子（ＩＤ）と宛先アドレス（ＩＰ）のいずれか一方を含めばよい。
【０３２４】
逆関数部３２４は、データ群のデータの分布情報を表す分布関数を求め、各前記ノードの前記論理識別子を入力として、当該分布関数の逆関数を施し、１次元値を出力する。
逆関数部３２４は、分布情報格納部３１０に格納されている累積分布情報を用いて、これを関数として表した累積分布関数ｒ＝ＣＤＦ（ｖ）の逆関数ｖ＝ＩＣＤＦ（ｒ）を施すことで得られる値に対応するように、入力値に対して１次元値を出力する。累積ヒストグラムを用いる場合、この区分ｉの累積分布割合をｒ［ｉ］、１次元値をｖ［ｉ］とする。
【０３２５】
たとえば、予め昇順にソートされた表から、与えられた入力値がｒであるとすると、ｒ［ｉ］＝ｒである区分ｉが存在する場合は、ｖ［ｉ］を出力する。そうでない場合、ｒ［ｉ−１］＜ｒ＜ｒ［ｉ］であるような区分ｉを見つけ、次の式（１）で対応する１次元値を算出する。
【０３２６】
【数２】
2013046664.tif 000004
【０３２７】
空間充填曲線サーバ変換部３２６は、逆関数部３２４で算出された宛先サーバ毎の１次元値を入力として、空間充填曲線変換処理により多次元値に変換する。さらに、空間充填曲線サーバ変換部３２６は、空間充填曲線サーバ情報格納部３２８に格納される空間充填曲線サーバ情報テーブル３３２の上述した形式に応じて、サーバ毎の１次元値を予め定められた空間充填曲線サーバ情報の形式に変換し、空間充填曲線サーバ情報テーブル３３２を作成し、空間充填曲線サーバ情報格納部３２８に格納する。なお、形式の変換は行われず、各サーバのアドレスと、逆関数部３２４により得られた１次元値との対を含む情報のままでもよい。
【０３２８】
本実施形態では、このようにして生成された空間充填曲線サーバ情報テーブル３３２を元に、値域更新部４０６が属性宛先表を生成し、属性宛先表格納部４０４に格納する。ここでは、まず、空間充填曲線サーバ情報テーブル３３２を生成した上で、属性宛先表を生成する構成としているが、これに限定されない。空間充填曲線サーバ変換部３２６が生成した１次元値と論理識別子ＩＤとの対応関係に基づき、属性宛先表を生成し、属性宛先表格納部４０４に格納してもよい。
【０３２９】
図６２は、本実施形態の情報システム１の要部構成を示す機能ブロック図である。
図６２に示すように、宛先解決部３４０は、図７の上記実施形態の構成に加え、宛先解決部３４０が、空間充填曲線サーバ決定部３４６をさらに有する。
【０３３０】
空間充填曲線サーバ決定部３４６は、空間充填曲線サーバ情報格納部３２８に格納された空間充填曲線サーバ情報を取得し、これを参照しながら、単一宛先解決部３４２または範囲宛先解決部３４４から通知された多次元属性値の値または多次元属性の範囲と対応する１つまたは複数のコンピュータの宛先を単一宛先解決部３４２または範囲宛先解決部３４４にそれぞれ返す。
【０３３１】
このように構成された本実施形態の情報システム１の動作について、以下に説明する。
ここでは、本実施形態の情報システム１の事前処理部３２０の動作について説明する。図６３は、本実施形態の情報システム１の事前処理部３２０における空間充填曲線サーバ情報を生成する処理（ステップＳ３１）の一例を示すフローチャートである。以下、図６０、および図６３を用いて説明する。
【０３３２】
まず、事前処理部３２０（図６０）において、宛先サーバ情報格納部３２２（図６０）に格納された宛先のサーバ情報それぞれについて、以下のステップＳ３５およびステップＳ３７を繰り返し実行する（ステップＳ３３）。逆関数部３２４（図６０）が、宛先の論理識別子を正規化し、これに逆関数を施し、１次元の値を得る（ステップＳ３５）。そして、ステップＳ３５で得られた１次元値を空間充填曲線サーバ変換部３２６（図６０）が、多次元属性値とし、これを全てのサーバ情報について処理することで得られる空間充填サーバ情報を、空間充填曲線サーバ情報格納部３２８（図６０）に格納する（ステップＳ３７）。
【０３３３】
本実施形態において、多次元属性値を空間充填曲線処理により１次元属性値に変換された値を値域端点とする以外は、上記実施形態と同様であるので、以下、詳細な動作の説明は省略する。
【０３３４】
以上説明したように、本発明の実施の形態に係る情報システム１によれば、多次元の属性についての範囲検索や範囲指定による通知条件設定を可能とすることができる。それにより、本実施形態は、複数の１次元属性による範囲検索を実行するより、１回の多次元属性による範囲検索の方が、処理すべきデータ量またはデータ数を少なくすることができる。
【０３３５】
以上、説明したように、本発明によれば、格納や通知されるデータの分布が変化するシステムにおいても、効率的な属性の順序性に基づく処理を実行することができる。
【０３３６】
以上、図面を参照して本発明の実施形態について述べたが、これらは本発明の例示であり、上記以外の様々な構成を採用することもできる。
【実施例】
【０３３７】
実施例１
上記第１の実施形態の実施例について、以下説明する。
本実施例では、情報システム１において、宛先解決処理がフルメッシュアルゴリズムを用いる。
図２に示すように、アクセスコンピュータ２０２から、複数のデータコンピュータ２０８に格納されたデータを操作する例を示す。アクセスコンピュータ２０２には図１のデータ操作クライアント１０４が存在し、データコンピュータ２０８には、図１のデータ格納サーバ１０６が存在するとする。【０３３８】
本実施例では、データコンピュータ２０８として、図１１のＩＤ宛先表４１２に示されたコンピュータが存在しているとし、アクセスコンピュータ２０２にはリレーショナルデータベース管理システム（ＲＤＢＭＳ)がこのデータコンピュータ２０８にアクセスするために、図１１のＩＤ宛先表４１２を予め構築しているとする。【０３３９】
アクセスコンピュータ２０２のＲＤＢＭＳでは、データベース管理者から、スキーマを宣言する言語（ＳＱＬ言語におけるＤＤＬ（Data Definition Language））でデータコンピュータ２０８に格納されるデータの情報が与えられるとする。たとえば、８ビットの符号なしの整数値として年令属性を有する会員テーブルが宣言され、年令属性についてインデックス付けが行われ、年令属性からテーブルのプライマリキーとなる会員ＩＤを取得できるよう宣言される。【０３４０】
ＲＤＢＭＳは、データアクセスされる前の任意の契機で、年令属性インデックスをデータコンピュータ２０８に格納する。そのため、属性宛先表４１４は、値域端点を設定し、図４１に示されるように、８ビットの整数空間を、ＩＤ宛先表から得られる各ノードの論理識別子ＩＤ幅に比例するように分割することで、構築される。このＲＤＢＭＳのこの会員テーブルに、日本人のデータ２１４万件が格納されると、図４２に図示すように、各ノードに格納されるデータ量またはデータ数には偏りが発生する。たとえば、初期（図４１）に値域（２４５，２５５］と（０，１８］を担当する論理識別子ＩＤが７０であるノードには３７万件、値域（０，１８］を担当する論理識別子ＩＤが１２９のノードには３５万件、値域（３２，６３］を担当する論理識別子ＩＤが２５０のノードには９１万件のデータが格納される。一方で、値域（２０１，２４５］を担当する論理識別子ＩＤが９８０であるノードなど、４つのノードにはデータが登録されない。【０３４１】
平滑化制御部４２２（図８）が、論理識別子ＩＤの隣接するＳｕｃｃｅｓｓｏｒノードとデータ格納量を、ＩＤ幅に比例するように動作することで、図４２に示したデータ量またはデータ数の不均衡は、図４３に示すデータ移動と移動後のデータ量またはデータ数により是正される。たとえば、論理識別子ＩＤが９８０であるノードにて、図１５に示す平滑化制御部４２２の動作では、そのＳｕｃｃｅｓｓｏｒである論理識別子ＩＤが７０であるノードにデータ量またはデータ数を問い合わせ、データ数３７万件を得る。図１６に示す時ノード平滑化制御部４２２の動作では、上記の（式１）に基づき、自ノードからＳｕｃｃｅｓｓｏｒノードに移動すべきデータ量またはデータ数を算出すると（ステップＳ２０１）、（０×（７０−９８０）−３７×（９８０−８０３））／（７０−８０３）＝−２２となる。【０３４２】
したがって、Ｉｍｐｏｒｔとして負荷分散計画が算出され（ステップＳ２１１）、論理識別子ＩＤが７０であるから２２万件のデータを受け取る。論理識別子ＩＤが７０であるノード内部に格納されたデータの中での移動対象のデータは、この場合、値の小さな方から２２万件目のデータであり、その境界の属性値が新たな値域端点として扱われる。【０３４３】
この時、論理識別子ＩＤが９８０であるデータコンピュータ２０８の通知先表４３０（図１４）に全てのアクセスコンピュータ２０２が予め登録されている場合であっても、アクセスコンピュータ２０２は、図４３の属性宛先表４１４と同一の属性宛先表４１４を保持している保証はない。値域変更通知が反映される前にデータアクセス処理が発生するアクセスコンピュータ２０２では、属性値０のデータにアクセスするために、図２０の動作に従い、古い属性宛先表４１４（図４１）を参照することになり、論理識別子ＩＤが７０であるノードにアクセスすることになる。【０３４４】
しかし、論理識別子ＩＤが７０であるデータアクセス部における図１７に示す動作により、更新された値域端点と次にアクセスすべきノードの情報を得る。すなわち、論理識別子ＩＤが７０であるノードでは、受け付けた属性値０と、新たな値域（１０，１８］との比較が行われ、この比較では属性値の方が小さいために、Ｐｒｅｄｅｃｅｓｓｏｒノードである論理識別子ＩＤが９８０を、値域端点１０を値域変更通知として、その通信アドレスをリダイレクト先として返される。【０３４５】
たとえば、図２１では、値域変更通知を受けた場合には（ステップＳ４１７のＹＥＳ）、これを属性宛先表４１４に反映させ（ステップＳ４１９）、データアクセスが失敗であっても（ステップＳ４２１のＹＥＳ）、リダイレクト先であるノード９８０にアクセスできるため（ステップＳ４２３）、負荷の平滑化動作後の値域が更新された状況でも、アクセスコンピュータ２０２は属性値０に対するデータアクセス処理を行うことができる。【０３４６】
また、論理識別子ＩＤが９８０であるデータコンピュータ２０８から値域変更通知を受けていない別のアクセスコンピュータ２０２も、図２０の動作により、図４２に示される属性宛先表４１４から、図４３に示される属性宛先表４１４を得ることができる。すなわち、このノードは属性宛先表４１４から一定間隔でランダムにノードを取得し、ある時に論理識別子ＩＤが９８０であるノードが取り出されると、そのノードに値域端点２４５を送信する。論理識別子ＩＤが９８０であるノードでは、自ノードの値域端点が１０になっており異なっているため、その値域端点１０が返され、これにより、図４２の属性宛先表４１４は更新される。【０３４７】
このように、平滑化制御部４２２の動作によって、図４１に示される各ノードの値域の分担状況が、図４２〜図４４のように変化し各ノードのデータ量またはデータ数は均一化される。その際に、各アクセスコンピュータ２０２にて保持する属性宛先表４１４も、データアクセス時や、自律的な更新確認、平滑化制御からの通知などにより、更新されていく。【０３４８】
実施例２
上記第２の実施形態の実施例について、以下説明する。
本実施例では、情報システム１において、宛先解決処理がＣｈｏｒｄアルゴリズムを用いる。
本実施例では、図３に示すように、複数のピアコンピュータ２１０に格納されたデータを、ピアコンピュータ２１０が互いに操作する例を示す。ピアコンピュータ２１０にはデータ操作クライアント１０４と操作要求中継サーバ１０８、データ格納サーバ１０６とが存在するとする。【０３４９】
情報システム１に格納されるデータは、図４５〜図４７に示されたデータであり、平滑化制御部４２２により論理識別子ＩＤ空間上で隣接するノードとデータ移動を行われ、特に、各ノードが担当する値域が図４５の状態から、図４６に示したデータ移動により、図４７の状態に変わる途中であるとする。
図４５〜図４７には、本実施形態の属性宛先表格納部４０４に格納される属性宛先表も示されている。各属性宛先表は、１行目にＳｕｃｃｅｓｓｏｒノードが、２行目以降にＦｉｎｇｅｒノードがそれぞれ含まれる。たとえば、図４５には、論理識別子ＩＤが９８０のノードの属性宛先表が示されている。【０３５０】
ここで、図４８のシーケンス図を参照しながら、論理識別子ＩＤが９８０であるノードが属性値５０というデータを登録、取得し、また別の論理識別子ＩＤが７０であるノードがそのデータを含む範囲を検索する手順を示し、属性格納部に格納される値域端点の更新について説明する。【０３５１】
平滑化制御部４２２（図８）によるデータ移動前の動作を示すと、論理識別子ＩＤが９８０であるノードが属性値５０というデータを登録するために単一宛先解決部３４２（図７）を呼び出す。まず、単一宛先解決部３４２は、属性宛先表のＳｕｃｃｅｓｓｏｒノードを参照し、自ノードの値域端点１０とＳｕｃｃｅｓｓｏｒである論理識別子ＩＤ７０のノードの値域端点２５との間（１０，２５］に、属性値５０が含まれるか否かを判定する。【０３５２】
図４５に示すように、ここでは含まれないため、単一宛先解決部３４２は、属性宛先表のうちＦｉｎｇｅｒ表を参照し、自ノード１０と属性値５０の間（１０，５０）に、もっとも離れた論理識別子ＩＤ５５１のノードの値域端点１３８が含まれるか否かを判定する。ここでも含まれないため、単一宛先解決部３４２は、次のＦｉｎｇｅｒである論理識別子ＩＤ２５０のノードの値域端点５３が（１０，５０）に含まれるかを判定する。【０３５３】
ここでも含まれないため、単一宛先解決部３４２は、次のＦｉｎｇｅｒである論理識別子ＩＤが１２９であるノードの値域端点３２と比較する。ここで含まれるため、単一宛先解決部３４２は、そのＦｉｎｇｅｒである論理識別子ＩＤが１２９であるノードに、属性値５０に対する宛先を取得しにいく。論理識別子ＩＤが１２９であるノードでは、図４６の属性宛先表が管理されており、自ノードの値域端点３２と、論理識別子ＩＤが２５０であるＳｕｃｃｅｓｓｏｒノードの値域端点５３との間（３２，５３］の間に属性値５０が含まれるかを判定する。ここでは属性値５０が含まれるため、Ｓｕｃｃｅｓｓｏｒノード（２５０）の通信アドレスを含んだ情報を、呼び出し元の論理識別子ＩＤ９８０のノードに返す。論理識別子ＩＤ９８０のノードは、そのＳｕｃｃｅｓｓｏｒノード（２５０）を受信し、そのＳｕｃｃｅｓｓｏｒノード（２５０）に属性値５０に関するデータ登録を行う。【０３５４】
この論理識別子ＩＤが９８０であるノードによる登録の後、図４６に示したデータ移動が行われるとする（属性値５０に相当するデータは論理識別子ＩＤ２５０のノードから、論理識別子ＩＤ４１３のノードに移動される）。そして、その後に再度論理識別子ＩＤが９８０であるノードが属性値５０に関するデータを取得するものとする。ただし、自ノード（９８０）の属性宛先表には反映されていないとする。
その場合、同じ手順で、論理識別子ＩＤが２５０である通信アドレスが取得される。そのノードに属性値５０でアクセスを行うと、値域変更通知として論理識別子ＩＤが２５０であるノードの新たな値域端点として４６が得られ、リダイレクト先としてその論理識別子ＩＤ４１３のノードが返される。このようにして、論理識別子ＩＤが９８０であるノードは、データ移動された先に対してデータアクセスを行うことができる。【０３５５】
また、論理識別子ＩＤが７０であるノードが、属性範囲（４５，５５］を検索するために属性範囲宛先解決部に対して、その範囲のデータを格納した通信先アドレスを複数問い合わせたとする。まず、属性範囲（４５，５５］を、自ノードと値域端点２５とＳｕｃｃｅｓｓｏｒノードの値域端点３２の範囲（２５，３２］に含まれる範囲と含まれない範囲に分割するが、ここでは全て含まれない範囲に分けられる。次に、Ｆｉｎｇｅｒ表を用い、この属性範囲（４５，５５］が、最も遠いＦｉｎｇｅｒノードである論理識別子ＩＤが６４０であるノードの値域端点１６０と自ノードの値域端点（２５，１６０］に含まれる範囲と含まれない範囲に分割する。【０３５６】
ここでは全て含まれるため、次の論理識別子ＩＤ４１３であるノードについて（２５，６７］に含まれる範囲と含まれない範囲に分割する。ここでも全て含まれるため、次の論理識別子ＩＤ２５０であるノードについて（２５，５３］に含まれる範囲と含まれない範囲に分割され、それぞれ含まれる範囲（４５，５３］と含まれない範囲（５３，５５］となる。ここで、属性範囲（５３，５５］について、論理識別子ＩＤ２５０のＦｉｎｇｅｒノードに中継部を介してデータアクセス要求が転送される。【０３５７】
次の論理識別子ＩＤ２５０であるノードで、属性範囲（５３，５５］に対応する宛先の問い合わせが処理される際には、呼び出し元の論理識別子ＩＤ７０の値域端点２５と呼び出し元の認識する呼び出し先の値域端点５３が与えられる。この時、論理識別子ＩＤ２５０の値域端点は４６に変わっているため、値域変更通知に格納される。続いて、呼び出し元の値域端点２５と、呼び出し先の値域端点４６との範囲（２５，４６］に含まれる範囲と含まれない範囲に分割される。ここでは全て含まれないため、失敗範囲はなく、この範囲（５３，５５］についての処理が続けられる。受け付けた属性範囲（５３，５５］は、自ノードとＳｕｃｃｅｓｓｏｒノードの間（４６，６７］に含まれるため、そのＳｕｃｃｅｓｓｏｒである論理識別子ＩＤ４１３が、論理識別子ＩＤ７０であるノードに返される。【０３５８】
次に、図４７を用いて説明すると、論理識別子ＩＤ２５０を呼び出した論理識別子ＩＤ７０のノードでは、Ｆｉｎｇｅｒとの間に含まれる範囲（４５，５３］について、次の論理識別子ＩＤ１２９であるノードとの属性範囲（２５，３２］に含まれる範囲と含まれない範囲に分割される。ここでは全て含まれないため、論理識別子ＩＤ１２９であるノードに属性範囲（４５，５３］に関する問い合わせが行われる。この時値域端点が通知されるが、呼び出し元と先の値域端点は変わらないため、値域変更通知はされない。【０３５９】
この論理識別子ＩＤ１２９のノードでは自ノードとＳｕｃｃｅｓｓｏｒノードの間（３２，４６］で分割され、属性範囲（４５，４６］に対してはＳｕｃｃｅｓｓｏｒである論理識別子ＩＤ２５０のノードが返される。残る範囲（４６，５３］はＦｉｎｇｅｒ表を用いて分割される。しかし、全て論理識別子ＩＤ２５０のＦｉｎｇｅｒノードに中継され、論理識別子ＩＤ２５０のノードでは、全て自ノードとＳｕｃｃｅｓｓｏｒノード（４１３）の間（４６，６７］に含まれる。そのため、この範囲（４６，５３］に対してはこのＳｕｃｃｅｓｓｏｒである論理識別子ＩＤ４１３のノードが返される。【０３６０】
これらの結果、範囲検索を実行した論理識別子ＩＤが７０では、属性範囲（４６，５３］と属性範囲（５３，５５］については論理識別子ＩＤ４１３のノードに、属性範囲（４５，４６］については論理識別子ＩＤ２５０のノードにアクセスする。それぞれのアクセス結果は、各ノードの値域に含まれるため、検索処理が実行される。そして、その結果が、論理識別子ＩＤが７０であるノードに返される。【０３６１】
実施例３
上記第３の実施形態の実施例について、以下説明する。
本実施例では、情報システム１において、宛先解決処理がＫｏｏｒｄｅアルゴリズムを用いる。
本実施例では、上記実施例２と同様に、図３のピアコンピュータ２１０からなる構成と、情報システム１に格納されるデータが、図３３に示したデータ移動により、図３３の状態に変わる途中であるとする。【０３６２】
値域更新部における動作の例を示すために、属性宛先表の具体例を用いて、各ノードの属性宛先表ならびに、その構築手順を示す。
図３０には、論理識別子ＩＤが１２９、６４０、５５１、２５０、４１３の各ノードの構築された属性宛先表４６４を示す。図４９に示すように論理識別子ＩＤが１２９であるノードが、階層１で自ノードとＳｕｃｃｅｓｓｏｒである論理識別子ＩＤが２５０のノードの値域端点５３を取得し、これを階層１での階層値域とする。続いて、階層２について、予め構築されているＩＤ宛先表を参照して得られる自身のＦｉｎｇｅｒノードに対して、そのノードの値域端点を問い合わせる。【０３６３】
Ｓｕｃｅｓｓｏｒに対して階層２の値域端点を問い合わせると、論理識別子ＩＤが２５０であるＳｕｃｃｅｓｓｏｒノードは、自身のＦｉｎｇｅｒノードである論理識別子ＩＤが４１３に階層１での値域端点を問い合わせ、論理識別子ＩＤが４１３であるノードは６７を返す。この値６７を、論理識別子ＩＤ２５０のノードは階層１での論理識別子ＩＤ４１３に対する値域端点として保持するとともに、呼び出し元である論理識別子ＩＤ１２９のノードに返し、論理識別子ＩＤ１２９はこれをＳｕｃｃｅｓｓｏｒノードの階層２での値域端点として保持する。【０３６４】
続いて、論理識別子ＩＤ１２９のノードは、１番目のＦｉｎｇｅｒノードである論理識別子ＩＤ２５０に階層１での値域端点を問い合わせ、論理識別子ＩＤ２５０であるこのノードは、先に格納した値を返す。このように、階層３まで続けると階層１から階層３までの階層値域の和集合が、属性空間全体を含むため、終了する。このように構築された属性宛先表は、平滑化制御部４２２による図４９から図５１の変化に伴い、図３０に示した下線で示した値域端点は変更されているものとする。さらに、各ノードの属性宛先表では、自ノードならびにＳｕｃｃｅｓｓｏｒノードとなっているノードの情報のみ更新されており、他は更新されていない状態とする。【０３６５】
単一宛先解決部３４２における動作の例を示すために、各ノードの属性宛先表を図３０に示す。
論理識別子ＩＤ１２９であるノードが、属性値１５と属性値０に対するデータアクセスを行うために単一宛先解決部３４２に問い合わせる例について説明する。
論理識別子ＩＤ１２９であるノードにて、まず属性値１５が、階層１の階層値域である自ノードとＳｕｃｃｅｓｓｏｒノードの間（３２，４６]に含まれるか判定する。図３０ではＳｕｃｃｅｓｓｏｒノードの値域端点は５３であるが、このノードはＳｕｃｃｅｓｓｏｒであるため更新されているものとする。この判定では、属性値１５は含まれないため、階層２の値域階層（４６，１６０]に含まれるか否かを判定する。【０３６６】
論理識別子ＩＤ２５０のノードはＦｉｎｇｅｒノードであるが、Ｓｕｃｃｅｓｓｏｒノードでもあるため変更は反映されている。この判定でも属性値１５は含まれないため、階層３の階層値域（６７，６７]に含まれるか判定するが、これは全属性の範囲であるため、属性値１５が含まれることが分かり、階層３について、各Ｆｉｎｇｅｒの担当領域に含まれるか否かを判定する。１番目のＦｉｎｇｅｒと属性値の範囲［６７，１５）に、３番目のＦｉｎｇｅｒの値域端点２５は含まれないため、２番目のＦｉｎｇｅｒの属性範囲３がこの範囲に含まれるか判定する。ここで属性範囲３が含まれるため、この２番目のＦｉｎｇｅｒである論理識別子ＩＤ４１３のノードに対して、階層２でもって属性値１５の宛先解決を問い合わせる。【０３６７】
論理識別子ＩＤが４１３のノードでは、同じ手順が実行され、まず階層１の階層値域である（６７，１３８]に含まれるか否かを判定する。ここでは属性値１５は含まれないため、続いて階層２の階層値域（３，３２]に含まれるか否かを判定する。ここでは属性値１５が含まれるため、階層２について１番目のＦｉｎｇｅｒの値域端点３と属性値１５の間［３，１５）に３番目のＦｉｎｇｅｒの値域端点２５が含まれるか否かを判定する。ここでは値域端点２５が含まれないため２番目のＦｉｎｇｅｒの値域端点１０が含まれるか否かを判定する。ここでは値域端点１０が含まれるため、２番目のＦｉｎｇｅｒである論理識別子ＩＤが９８０であるノードに階層１でもって属性値１５の問い合わせを行う。この時、１番目のＦｉｎｇｅｒノードの値域端点３と、論理識別子ＩＤ９８０の値域端点１０も付して問い合わせる。【０３６８】
論理識別子ＩＤが９８０のノードでは、受け付けた属性値１５が、階層１の値域（１７，２５]に含まれるか否かを判定される処理が行われるが、その前に値域変更の確認が行われる。すなわち、ここでは自ノードの値域端点は、１０から１７に更新されている。そして、図３３の単一宛先解決処理Ｓ６５０の手順では、受付けたＦｉｎｇｅｒノードの値域端点３と論理識別子ＩＤ９８０の階層１における属性値１５の間［３，１５）に、自ノードの値域端点１７が含まれるか判定する。ここでは値域端点１７が含まれないため、値域端点１７を値域変更通知に格納し、論理識別子ＩＤ４１３のノードに失敗として返す。【０３６９】
論理識別子ＩＤが４１３のノードでは、属性変更通知を反映させ、失敗であるので、次のＦｉｎｇｅｒである１番目のＦｉｎｇｅｒノードと属性値１５の間［３，１５）にＦｉｎｇｅｒノード１が含まれるか判定する。ここではＦｉｎｇｅｒノード１が含まれるため、論理識別子ＩＤが８０３のノードに対して属性値が１５であるアクセス要求が中継（転送）される。【０３７０】
論理識別子ＩＤが８０３であるノードでは、階層０の階層値域である自ノードとＳｕｃｃｅｓｓｏｒノードの間（３，１７]に含まれるため、そのＳｕｃｃｅｓｓｏｒノードである論理識別子ＩＤが４１３の通信アドレスが、この属性値１５に対するアクセス要求として返される。【０３７１】
また、論理識別子ＩＤ１２９であるノードが属性値０に対するデータアクセスを行うと、その属性値が階層１の範囲（３２，４６］に含まれるか否か、階層２の範囲（４６，１６０］に含まれるか否か、階層３の範囲（６７，６７］に含まれるか否かが、逐次確認される。そして、階層３であるため、さらに同じ手順により論理識別子ＩＤ２５０のＦｉｎｇｅｒノードに対して要求が行われる。論理識別子ＩＤ２５０であるノードは、階層２の範囲（６７，３］に含まれ、一方、Ｆｉｎｇｅｒノード３の値域端点１６０は［６７，０）に含まれない。そのため、Ｆｉｎｇｅｒノード３である論理識別子ＩＤ６４０のノードに要求が行われる。【０３７２】
論理識別子ＩＤ６４０のノードでは、階層１の階層値域（１６０，１７５］に含まれるか否かを判定するが、ここでは属性値０は含まれない。しかし、論理識別子ＩＤ２５０から与えられた階層Ｌは１であるため、Ｓｕｃｃｅｓｓｏｒである論理識別子ＩＤ６９８のノードにて階層１で、その属性０に対応する通信アドレスを取得する要求を送信する。論理識別子ＩＤ６９８のノードは、自ノードの値域端点とＳｕｃｃｅｓｓｏｒノードの値域端点の間（１７５，３］に属性値０は含まれるため、その論理識別子ＩＤ８０３を属性値０に対する通信アドレスとして返す。【０３７３】
このように、論理識別子ＩＤ１２９からは、図３８〜図４０に示すように、全属性空間に対して、１回〜４回の通信で到達することができる。なお、論理識別子ＩＤ１２９自体が格納するデータは、Ｐｒｅｄｅｃｅｓｓｏｒノードの値域端点の一貫性を持って更新されるようにしていれば、階層０として階層１より前に宛先解決してもよい。【０３７４】
続いて、範囲宛先解決部３４４における動作の例を示すために、各ノードの属性宛先表を図３０に示す。
論理識別子ＩＤ１２９であるノードが属性範囲（５、２０］に対する範囲検索を行ったとする。まず、未決定範囲集合ａｎをこの範囲とし、階層１の階層値域（３２，４６］に含まれている範囲と含まれていない範囲ａｏに分割する。ここでは全て含まれていない範囲ａｏとなるので、これを再度未決定範囲とし、階層２の階層値域（４６，１３８］に含まれている範囲といない範囲に分割する。そして、階層２の階層値域（４６，１３８］に含まれていないため、階層３の階層値域（６７，６７］に含まれている範囲と含まれていない範囲に再度分割し、ここでは全て含まれるため、これを未決定範囲集合ａｎ２とし、Ｆｉｎｇｅｒノード１とＦｉｎｇｅｒノード３である論理識別子ＩＤ５５１のノードの範囲（６７，２５］に含まれる範囲と含まれない範囲に分割する。【０３７５】
ここでは全て含まれるため、含まれない範囲に対する問い合わせは行われない。そして、次のＦｉｎｇｅｒノードである論理識別子ＩＤ４１３のノードについて（６７，３］に含まれる範囲と含まれない範囲に分割する。ここでは全て含まれないため、このＦｉｎｇｅｒノード３である論理識別子ＩＤ４１３に階層２で属性範囲（５，２０］に対する問い合わせが行われる。論理識別子ＩＤ４１３のノードでは、階層１には含まれず、階層２に含まれる。さらにＦｉｎｇｅｒノード１とＦｉｎｇｅｒノード３の範囲（３，２５］に含まれる範囲と含まれない範囲に分割される。そして、全て含まれるので、Ｆｉｎｇｅｒノード１とＦｉｎｇｅｒノード２の範囲（３，１０］に含まれる範囲（５，１０」と含まれない範囲（１０，２０］に分割される。一方、含まれない範囲についてはＦｉｎｇｅｒノード２である論理識別子ＩＤ９８０のノードに（１０，２０］の範囲で、階層１で問い合わせが行われる。【０３７６】
この時、Ｆｉｎｇｅｒノード１の値域端点３と、Ｆｉｇｎｅｒノード２の値域端点１０が通知される。論理識別子ＩＤ９８０のノードでは、階層１の階層値域（１７，２５］に含まれるか否か判定される。しかし、ここでは値域端点３と値域端点１０は含まれず、さらに論理識別子ＩＤ９８０から階層Ｌ＝１として与えられているため、通知されたＦｉｎｇｅｒノード２としての値域端点１０が、自ノードの階層１の階層値域の起点、すなわち自ノードの値域端点１７と一致しているか判定する。そして、一致していないため、これを値域変更通知に含める。そして値域（３，１７］に含まれる範囲（１０，１７］と含まれない範囲（１７，２０］に分割し、含まれる範囲（１０，１７］を失敗範囲とする。【０３７７】
また、含まれる範囲は（１７,２０］については、その範囲とＳｕｃｃｅｓｓｏｒノードの通信アドレスを結果リストに含める。これらは論理識別子ＩＤ４１３のノードに返され、値域変更通知に従いＦｉｎｇｅｒノード２の値域端点は１７に更新する。そして、失敗範囲（１０，１７］は、Ｆｉｎｇｅｒノード２に関する範囲に含まれる範囲（５，１０］とともに、未決定範囲集合ａｎ２となる。未決定範囲集合ａｎ２は、次のＦｉｎｇｅｒ範囲である（３，３］には全て含まれないため、論理識別子ＩＤ８０３のノードにて、その範囲に対応する宛先の問い合わせが行われる。論理識別子ＩＤ８０３のノードでは、自ノードの値域端点３とＳｕｃｃｅｓｓｏｒノードの値域端点である階層１の階層値域（３，１７］に含まれる否かを判定する。ここでは、全て含まれるため、この範囲を論理識別子ＩＤ９８０のノードとする。【０３７８】
実施例４
上記第４の実施形態の実施例について、以下説明する。
本実施例では、情報システム１において、多次元属性値を空間充填曲線処理により１次元属性値に変換された値を値域として算出し、属性宛先表を生成する。
図５２〜図５６に示すように、本実施例では、属性宛先表は、多次元属性値を空間充填曲線処理により１次元属性値に変換された値が値域端点として記憶される。
図５２および図５３では、宛先解決処理のアルゴリズムが、上記第１実施形態のフルメッシュアルゴリズムに相当し、操作要求中継サーバ１０８を備えない例であり、全ノードが共通の属性宛先表を有する。【０３７９】
情報システム１に多次元属性が格納されると定義された際に、そのデータの分布情報が得られており、図５２の表に示された値域端点が得られていたとする。この表は、各ノードのＩＰアドレスと、そのノードの担当する値域の端点とを対応づける属性宛先表であり、値域端点は各ノードの論理識別子ＩＤと分布情報から、逆関数部が算出した１次元値とする。なお、ここで各ノードの値域端点である１次元値を空間充填曲線処理により多次元値とした場合、各ノードが管理する値域である多次元の部分空間が、図５２に示される。ここで図示される多次元範囲を属性宛先表として格納してもよい。データが登録されるに従い、分布が変化し、各ノードの管理するデータ量が変化すると、図５３に示すように、各ノードは隣接ノードと値域の変更を行う。ここでは値域端点である１次元値が変更され、各ノードが保持するデータ量が変更される。【０３８０】
図５４〜図５６は、ノード９８０が、例えば、２ビット表記２次元属性値（０１１，１００）にデータアクセスする際の要求経路を示している。なお、これと対応する１次元値は０１１１１１（３１）である。ノード９８０が保持する属性宛先表は図５４に示される。ここで、属性宛先表は、上の表がノード９８０の複数のＦｉｎｇｅｒノードのリストであり、下の表がＳｕｃｃｅｓｓｏｒノードを含んでいる。【０３８１】
この多次元属性値（０１１１，１０００）の宛先が、属性宛先表の最後のエントリである１次元値０１１１０１以降と対応するか否かを、空間充填曲線処理を行うことで確認する。ここでは対応するため、このエントリのノード５５１に要求を送信する。ノード５５１が保持する属性宛先表は図５５に示される。ここでも多次元属性値が、属性宛先表の最後のエントリ０００１００以降と対応するか否かを確認し、対応しないことが分かる。続いて値域端点が１０１１１０、１００００１、０１１１１０であるエントリと比較し、０１１１１０以降であるため、ノード６４０に要求が転送される。ノード６４０の属性宛先表を図５６に示す。ここでは、Ｓｕｃｃｅｓｓｏｒノード６９８の値域端点１００００１と自ノード６４０の値域端点０１１１０１の間に目的の多次元属性値（０１１１，１０００）が存在するため、このノードにデータアクセスが行われる。【０３８２】
以上、実施形態および実施例を参照して本願発明を説明したが、本願発明は上記実施形態および実施例に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。【０３８３】
この出願は、２０１１年９月２７日に出願された日本出願特願２０１１−２１１１３２号を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１】
2013046664.tif 000005
【図２】
2013046664.tif 000006
【図３】
2013046664.tif 000007
【図４】
2013046664.tif 000008
【図５】
2013046664.tif 000009
【図６】
2013046664.tif 000010
【図７】
2013046664.tif 000011
【図８】
2013046664.tif 000012
【図９】
2013046664.tif 000013
【図１０】
2013046664.tif 000014
【図１１】
2013046664.tif 000015
【図１２】
2013046664.tif 000016
【図１３】
2013046664.tif 000017
【図１４】
2013046664.tif 000018
【図１５】
2013046664.tif 000019
【図１６】
2013046664.tif 000020
【図１７】
2013046664.tif 000021
【図１８】
2013046664.tif 000022
【図１９】
2013046664.tif 000023
【図２０】
2013046664.tif 000024
【図２１】
2013046664.tif 000025
【図２２】
2013046664.tif 000026
【図２３】
2013046664.tif 000027
【図２４】
2013046664.tif 000028
【図２５】
2013046664.tif 000029
【図２６】
2013046664.tif 000030
【図２７】
2013046664.tif 000031
【図２８】
2013046664.tif 000032
【図２９】
2013046664.tif 000033
【図３０】
2013046664.tif 000034
【図３１】
2013046664.tif 000035
【図３２】
2013046664.tif 000036
【図３３】
2013046664.tif 000037
【図３４】
2013046664.tif 000038
【図３５】
2013046664.tif 000039
【図３６】
2013046664.tif 000040
【図３７】
2013046664.tif 000041
【図３８】
2013046664.tif 000042
【図３９】
2013046664.tif 000043
【図４０】
2013046664.tif 000044
【図４１】
2013046664.tif 000045
【図４２】
2013046664.tif 000046
【図４３】
2013046664.tif 000047
【図４４】
2013046664.tif 000048
【図４５】
2013046664.tif 000049
【図４６】
2013046664.tif 000050
【図４７】
2013046664.tif 000051
【図４８】
2013046664.tif 000052
【図４９】
2013046664.tif 000053
【図５０】
2013046664.tif 000054
【図５１】
2013046664.tif 000055
【図５２】
2013046664.tif 000056
【図５３】
2013046664.tif 000057
【図５４】
2013046664.tif 000058
【図５５】
2013046664.tif 000059
【図５６】
2013046664.tif 000060
【図５７】
2013046664.tif 000061
【図５８】
2013046664.tif 000062
【図５９】
2013046664.tif 000063
【図６０】
2013046664.tif 000064
【図６１】
2013046664.tif 000065
【図６２】
2013046664.tif 000066
【図６３】
2013046664.tif 000067
【手続補正書】
【提出日】平成26年3月20日(2014.3.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ群を分散して管理する複数のノードを備え、
複数の前記ノードは、それぞれネットワーク上で識別可能な宛先アドレスを有し、
複数の前記ノードに対し、論理識別子空間上で論理識別子を付与する識別子付与手段と、
前記論理識別子空間と、前記データ群におけるデータの値の範囲と、を対応付け、各前記ノードが管理する前記データの値域を、各前記ノードの前記論理識別子に対応させて決定する値域決定手段と、
ある属性値または属性範囲のデータの格納先の前記ノードの宛先を探索するとき、各前記ノードの前記データの前記値域と、前記論理識別子と、前記宛先アドレスとの対応関係に基づき、前記属性値または前記属性範囲の少なくとも一部が一致する前記データの値域に対応する前記論理識別子を求め、当該論理識別子に対応する前記ノードの宛先アドレスを前記宛先として決定する宛先決定手段と、を備える情報システム。
【請求項２】
請求項１に記載の情報システムにおいて、
前記ノード毎に前記対応関係を記憶する対応関係記憶手段を備える情報システム。
【請求項３】
請求項２に記載の情報システムにおいて、
前記ノードの前記対応関係記憶手段は、前記ノードが管理している前記データの属性毎に、前記対応関係を保持する情報システム。
【請求項４】
請求項１乃至３いずれかに記載の情報システムにおいて、
前記ノードが管理している前記データの前記値域の変更に伴い、前記対応関係を更新する対応関係更新手段を備える情報システム。
【請求項５】
請求項４に記載の情報システムにおいて、
前記論理識別子が互いに隣接する前記ノード間で、データを分散して管理するために少なくとも一部のデータを移動する平滑化制御手段と、
前記データの移動に伴い移動された前記データの前記値域を更新する値域更新手段と、を備え、
前記対応関係更新手段は、前記値域の更新に伴い、前記対応関係を更新する情報システム。
【請求項６】
請求項５に記載の情報システムにおいて、
前記平滑化制御手段は、
前記ノードが管理するある属性のデータ量と、隣接する他のノードが管理する前記属性と同一の属性のデータ量とを比較し、比較結果に応じて、前記ノードと他の前記ノード間で、前記属性のデータを移動し、
前記値域更新手段は、
前記属性の前記データの移動に伴い、移動された前記データの前記値域を更新する情報システム。
【請求項７】
請求項５または６に記載の情報システムにおいて、
前記平滑化制御手段は、
互いに隣接する前記ノードの各前記論理識別子の幅の比に応じて、移動する前記属性のデータ量を決定する情報システム。
【請求項８】
請求項４乃至７いずれかに記載の情報システムにおいて、
前記対応関係更新手段は、前記ノード毎に前記対応関係を非同期に更新する情報システム。
【請求項９】
請求項４乃至８いずれかに記載の情報システムにおいて、
前記データへのアクセス要求とともに、アクセス対象のデータに対する前記属性値または前記属性範囲を受け付ける受付手段と、
前記アクセス要求に基づいて、前記データにアクセスする際、前記アクセス要求を受け付けた前記データに対応する前記属性値または前記属性範囲が、管理しているデータの前記属性の値域に含まれるか否かを判定する判定手段と、
前記判定手段により前記データの前記属性の値域に含まれていないと判定された場合、前記値域と前記属性値を比較し、比較結果に基づいて、前記アクセス要求を受け付けた前記データに対応する前記属性の値域のデータを管理する隣接ノードを判別する判別手段と、
判別した前記隣接ノードまたは自ノードの前記値域を変更する値域変更通知をアクセス要求元または他のノードに通知する通知手段と、をさらに備える情報システム。
【請求項１０】
請求項９に記載の情報システムにおいて、
前記対応関係更新手段は、前記値域変更通知に従い、前記対応関係を変更する情報システム。
【請求項１１】
請求項４乃至１０いずれかに記載の情報システムにおいて、
前記対応関係更新手段は、前記対応関係における、あるノードが管理している前記データの全属性の前記値域の端点と、前記ノードが実際に管理する前記データの属性の前記値域の端点とを比較し、比較結果に基づいて、前記対応関係の前記データの属性の値域を変更する情報システム。
【請求項１２】
請求項１乃至１１いずれかに記載の情報システムにおいて、
前記データへのアクセス要求と前記データに対する前記属性値または前記属性範囲を他のノードに転送する転送手段をさらに備え、
前記宛先決定手段は、前記アクセス要求された前記データの前記属性値または前記属性範囲を有する前記データにアクセスするためのノードの宛先を決定し、前記転送手段に受け渡し、
前記転送手段は、前記宛先決定手段が決定した前記宛先の前記ノードに前記アクセス要求と前記データに対する前記属性値または前記属性範囲を転送する情報システム。
【請求項１３】
請求項１乃至１２いずれかに記載の情報システムにおいて、
各ノードは、前記論理識別子の空間において、自ノードと他ノードとの前記論理識別子の差を、前記論理識別子空間のサイズで除した余りとして、前記自ノードと前記他ノードとの距離を求め、前記距離が最小であるノードを隣接ノードとし、および、前記距離が２のべき乗ずつ離れた論理識別子以上の中で前記自ノードに最も近い他ノードを、前記自ノードのリンク先として選択する手段をさらに備え、
各前記ノードは、前記自ノードで少なくとも選択された前記リンク先と隣接ノードを、自ノードの宛先ノードとし、
前記宛先ノードと、前記宛先ノードの前記論理識別子との第１の対応関係と、
前記宛先ノードの前記論理識別子と、そのノードが管理している前記データの前記属性毎の前記値域と、の第２の対応関係と、を前記対応関係として保持する情報システム。
【請求項１４】
請求項１乃至１２いずれかに記載の情報システムにおいて、
各ノードは、前記論理識別子の空間において、自ノードと他ノードとの前記論理識別子の差を、前記論理識別子空間のサイズで除した余りとして、前記自ノードと前記他ノードとの距離を求め、前記距離が最小であるノードを隣接ノードとし、ならびに、前記自ノードの整数倍の論理識別子を、前記論理識別子空間のサイズで除した余りの論理識別子から最も距離の近いノード、およびそのノードから最も距離の近い一定数のノードを、前記自ノードのリンク先として選択する手段をさらに備え、
各前記ノードは、前記自ノードで少なくとも選択された前記リンク先を宛先ノードとし、
前記宛先ノードと、前記宛先ノードの前記論理識別子との第１の対応関係と、
前記宛先ノードの前記論理識別子と、そのノードが管理している前記データの前記属性毎の前記値域と、の第２の対応関係と、を前記対応関係として保持し、
前記第２の対応関係は、さらに、前記宛先ノードの階層毎に、前記データの前記属性毎の前記値域を保持する情報システム。
【請求項１５】
データ群を分散して管理する複数のノードを、管理する管理装置のデータ処理方法であって、
複数の前記ノードは、それぞれネットワーク上で識別可能な宛先アドレスを有し、
前記管理装置が、
複数の前記ノードに対し、論理識別子空間上で論理識別子を付与し、
前記論理識別子空間と、前記データ群におけるデータの値の範囲と、を対応付け、各前記ノードが管理する前記データの値域を、各前記ノードの前記論理識別子に対応させて決定し、
ある属性値または属性範囲のデータの格納先の前記ノードの宛先を探索するとき、各前記ノードの前記データの前記値域と、前記論理識別子と、前記宛先アドレスとの対応関係に基づき、前記属性値または前記属性範囲の少なくとも一部が一致する前記データの値域に対応する前記論理識別子を求め、当該論理識別子に対応する前記ノードの宛先アドレスを前記宛先として決定する管理装置のデータ処理方法。
【請求項１６】
請求項１５に記載の管理装置に接続され、前記管理装置を介して前記データにアクセスする端末装置のデータ処理方法であって、
前記端末装置が、
属性値または属性範囲を有するデータへのアクセス要求を前記管理装置に通知し、
前記管理装置を介して、複数の前記ノードの宛先アドレスと、各ノードに割り当てられた論理識別子と、各ノードが管理している前記データの値域との対応関係に基づいて、前記アクセス要求された前記属性値または前記属性範囲の少なくとも一部が一致する値域の前記データを管理する前記ノードの宛先にアクセスして前記データを操作する端末装置のデータ処理方法。
【請求項１７】
データ群を分散して管理する複数のノードの宛先を決定する際に参照する宛先テーブルのデータ構造であって、
複数の前記ノードは、それぞれネットワーク上で識別可能な宛先アドレスを有し、
前記宛先テーブルは、前記データ群を分散して管理する複数のノードの宛先アドレスと、各ノードに論理識別子空間上で付与された論理識別子と、各前記ノードが管理するデータの値の範囲との対応関係を含み、
前記宛先テーブルは、前記データ群を分散して管理する複数のノードの宛先アドレスと、各ノードに論理識別子空間上で付与された論理識別子と、各前記ノードが管理するデータの値域との対応関係を含み、
各前記ノードのデータの値域は、前記論理識別子空間と、前記データ群におけるデータの値の範囲と、を対応付け、各前記ノードの前記論理識別子に対応する前記データの値域が各ノードに割り振られるデータ構造。
【請求項１８】
請求項１７に記載のデータ構造において、
前記宛先テーブルの対応関係は、前記ノード毎に保持されるデータ構造。
【請求項１９】
請求項１７または１８に記載のデータ構造において、
前記宛先テーブルの前記対応関係は、前記ノードが管理している前記データの前記値域の変更に伴い更新されるデータ構造。
【請求項２０】
請求項１７乃至１９いずれかに記載のデータ構造において、
前記論理識別子が互いに隣接する前記ノード間で、データ管理分散のために少なくとも一部のデータが移動されたとき、前記ノードが管理している前記データの前記値域が変更され、前記宛先テーブルの前記対応関係は、前記値域の変更に伴い更新されるデータ構造。
【請求項２１】
請求項１７乃至２０いずれかに記載のデータ構造において、
前記各ノードが保持するデータ構造は、
前記論理識別子の空間において、自ノードと他ノードとの前記論理識別子の差を、前記論理識別子空間のサイズで除した余りとして、前記自ノードと前記他ノードとの距離を求め、前記距離が最小であるノードを隣接ノードとし、および、前記距離が２のべき乗ずつ離れた論理識別子以上の中で前記自ノードに最も近い他ノードを、前記自ノードのリンク先として選択し、
前記自ノードで少なくとも選択された前記リンク先と隣接ノードを、自ノードの宛先ノードとし、
前記宛先ノードと、前記宛先ノードの前記論理識別子との第１の対応関係と、
前記宛先ノードの前記論理識別子と、そのノードが管理している前記データの前記属性毎の前記値域と、の第２の対応関係と、を前記対応関係として、前記宛先テーブルに保持されるデータ構造。
【請求項２２】
請求項１７乃至２０いずれかに記載のデータ構造において、
前記各ノードが保持するデータ構造は、
前記論理識別子の空間において、自ノードと他ノードとの前記論理識別子の差を、前記論理識別子空間のサイズで除した余りとして、前記自ノードと前記他ノードとの距離を求め、前記距離が最小であるノードを隣接ノードとし、ならびに、前記自ノードの整数倍の論理識別子を、前記論理識別子空間のサイズで除した余りの論理識別子から最も距離の近いノード、およびそのノードから最も距離の近い一定数のノードを、前記自ノードのリンク先として選択し、
前記自ノードで少なくとも選択された前記リンク先を宛先ノードとし、
前記宛先ノードと、前記宛先ノードの前記論理識別子との第１の対応関係と、
前記宛先ノードの前記論理識別子と、そのノードが管理している前記データの前記属性毎の前記値域と、の第２の対応関係と、を前記対応関係として、前記宛先テーブルに保持され、
前記第２の対応関係は、さらに、前記宛先ノードの階層毎に、前記データの前記属性毎の前記値域を保持するデータ構造。
【請求項２３】
請求項１７乃至２２いずれかに記載のデータ構造において、
前記宛先テーブルの前記対応関係は、前記ノード毎に非同期に更新されるデータ構造。
【請求項２４】
データ群を分散して管理する複数のノードを管理する管理装置を実現するコンピュータのプログラムであって、
複数の前記ノードは、それぞれネットワーク上で識別可能な宛先アドレスを有し、
前記コンピュータに、
複数の前記ノードに対し、論理識別子空間上で論理識別子を付与する手順、
前記論理識別子空間と、前記データ群におけるデータの値の範囲と、を対応付け、各前記ノードが管理する前記データの値域を、各前記ノードの前記論理識別子に対応させて決定する手順、
ある属性値または属性範囲のデータの格納先の前記ノードの宛先を探索するとき、各前記ノードの前記データの前記値域と、前記論理識別子と、前記宛先アドレスとの対応関係に基づき、前記属性値または前記属性範囲の少なくとも一部が一致する前記データの値域に対応する前記論理識別子を求め、当該論理識別子に対応する前記ノードの宛先アドレスを前記宛先として決定する手順を実行させるためのプログラム。
【請求項２５】
請求項２４に記載のプログラムにおいて、
前記ノードが管理している前記データの前記値域の変更を検出する手順、
前記値域の変更が検出されたとき、前記対応関係を更新する手順をコンピュータに実行させるためのプログラム。
【請求項２６】
請求項２４または２５に記載のプログラムにおいて、
前記論理識別子が互いに隣接する前記ノード間で、データ管理分散のために少なくとも一部のデータを移動する手順、
前記データの移動に伴い移動された前記データの前記値域を更新する手順、
前記対応関係を更新する手順は、前記値域の更新に伴い、前記対応関係を更新する手順をコンピュータに実行させるためのプログラム。
【請求項２７】
請求項２４乃至２６いずれかに記載のプログラムを記録したコンピュータで読み取り可能なプログラム記録媒体。
【請求項２８】
データ群を分散して管理する複数のノードを管理する管理装置であって、
複数の前記ノードは、それぞれネットワーク上で識別可能な宛先アドレスを有し、
複数の前記ノードに対し、論理識別子空間上で論理識別子を付与する識別子付与手段と、
前記論理識別子空間と、前記データ群におけるデータの値の範囲と、を対応付け、各前記ノードが管理する前記データの値域を、各前記ノードの前記論理識別子に対応させて決定する値域決定手段と、
ある属性値または属性範囲のデータの格納先の前記ノードの宛先を探索するとき、各前記ノードの前記データの前記値域と、前記論理識別子と、前記宛先アドレスとの対応関係に基づき、前記属性値または前記属性範囲の少なくとも一部が一致する前記データの値域に対応する前記論理識別子を求め、当該論理識別子に対応する前記ノードの宛先アドレスを前記宛先として決定する宛先決定手段と、を備える管理装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０２３６
【補正方法】変更
【補正の内容】
【０２３６】
まず、範囲宛先解決部３４４は、未決定範囲集合ａｎを、自ノードｍの値域端点ａｍとＦｉｎｇｅｒエントリｉのａｆｉの間（ａｍ，ａｆｉ］に含まれるＦｉｎｇｅｒ範囲内属性範囲ａｆｉ２と、含まれないＦｉｎｇｅｒ範囲外属性範囲ａｆｏ２に分ける（ステップＳ５６３）。そして、範囲宛先解決部３４４は、未決定範囲集合ａｎを、Ｆｉｎｇｅｒ範囲内属性範囲ａｆｉ２とする（ステップＳ５６５）。そして、Ｆｉｎｇｅｒ範囲外属性範囲ａｆｏ２が空でなければ（ステップＳ５６７のＮＯ）、範囲宛先解決部３４４は、後述する図２９のＦｉｎｇｅｒエントリ宛先解決処理Ｓ５８０を行う（ステップＳ５８０）。Ｆｉｎｇｅｒ範囲外属性範囲ａｆｏ２が空の場合（ステップＳ５６７のＹＥＳ）、ステップＳ５７１に進む。Ｆｉｎｇｅｒ表内のすべてのＦｉｎｇｅｒエントリについて処理が終了したら本ループ処理を終了する（ステップＳ５７１）。そして、範囲宛先解決部３４４は、値域変更通知、失敗範囲、および結果リストを呼び出し元に返す（ステップＳ５７３）。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０２６９
【補正方法】変更
【補正の内容】
【０２６９】
本実施形態の情報システム１において、各ノード（データ格納サーバ１０６または操作要求中継サーバ１０８のＩＤ宛先表構築部４１０）は、論理識別子空間において、自ノードと他ノードとの論理識別子ＩＤの差を、論理識別子空間のサイズで除した余りとして、前記自ノードと前記他ノードとの距離を求め、距離が最小であるノードを隣接ノード（Ｓｕｃｃｅｓｓｏｒノード）とし、ならびに、自ノードの整数倍の論理識別子ＩＤを、論理識別子空間のサイズで除した余りの論理識別子ＩＤから最も距離の近いノード、およびそのノードから最も距離の近い一定数のノードを、自ノードのリンク先（Ｆｉｎｇｅｒノード）として選択する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０２９９
【補正方法】変更
【補正の内容】
【０２９９】
まず、あるノードｍ（データ操作クライアント１０４）の範囲宛先解決部３４４が、未決定範囲集合ａｎを属性範囲（ａｆ，ａｔ］とする（ステップＳ７３１）。階層ｌｅｖを１から１ずつ増加させ、各階層ｌｅｖについて、ステップＳ７３３〜ステップＳ７４９の間のループ処理を行う。すべての階層ｌｅｖについて処理が終了したら本ループ処理を終了し、本処理も終了する。本処理では、階層毎に処理を繰り返すことで、属性範囲（ａｆ，ａｔ］を各階層の値域に分割する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０３０６
【補正方法】変更
【補正の内容】
【０３０６】
続いて、範囲宛先解決部３４４は、Ｆｉｎｇｅｒノードｉに対し、範囲外属性範囲ａｏ２に対応する通信アドレスを問い合わせる（ステップＳ７６７）。このとき、範囲宛先解決部３４４は、自ノードｍが認識している値域端点ａｆ１と値域端点ａｆｉをＦｉｎｇｅｒノードに通知する。Ｆｉｎｇｅｒノードｉは、属性宛先表４６４を参照し、範囲外属性範囲ａｏ２に対応する通知アドレスの結果リストを返信する。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０３２５
【補正方法】変更
【補正の内容】
【０３２５】
たとえば、予め昇順にソートされた表から、与えられた入力値がｒであるとすると、ｒ［ｉ］＝ｒである区分ｉが存在する場合は、ｖ［ｉ］を出力する。そうでない場合、ｒ［ｉ−１］＜ｒ＜ｒ［ｉ］であるような区分ｉを見つけ、次の式（２）で対応する１次元値を算出する。
【国際調査報告】
2013046664.tif 000068
2013046664.tif 000069
2013046664.tif 000070