(57)【要約】  分散データ管理装置で実現される対象論理ノードは、複数の論理ノードに一意にそれぞれ割り当てられる対象ノード識別子を格納する格納部と、複数の部分データの中の少なくとも１つを格納する格納部と、対象論理ノードとリンク先論理ノードとの間のリンク情報を格納するリンクテーブルと、部分データに対応する属性毎の値域境界値を格納する格納部と、アクセス要求に対応する部分データを格納する論理ノードを特定するための、値域をそれぞれ示す複数のツリーノードから構成される属性毎のツリー構造データであって、リンク先論理ノードと対応付けられた子ツリーノードへのポインタと、ポインタを選択するための値域を示す値とから形成される少なくとも１つのエントリを含む根ツリーノードを有するツリー構造データを格納する格納部とを備える。
2013171953.tif 000002
【特許請求の範囲】
【請求項１】
属性値順に順序付けられたデータが分割された複数の部分データであって属性毎の値域をそれぞれ有する複数の部分データを格納する複数の論理ノードの中の少なくとも１つの対象論理ノードを実現する分散データ管理装置であって、
前記対象論理ノードは、
リング構造を有する有限の識別子空間内で前記複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、前記対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、
前記複数の部分データの中の少なくとも１つを格納するデータ格納部と、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記識別子空間内における前記対象ノード識別子との間の関係に応じて確立される前記対象論理ノードとリンク先論理ノードとの間のリンク情報を格納するリンクテーブルと、
前記データ格納部に格納される前記部分データに対応する属性毎の値域境界値であって、該属性毎の該値域境界が前記識別子空間内において前記対象論理ノードと前記対象論理ノードと隣接する論理ノードとの間に位置する該属性毎の該値域境界値を格納する値域格納部と、
アクセス要求に対応する前記部分データを格納する論理ノードを特定するための、値域をそれぞれ示す複数のツリーノードから構成される属性毎のツリー構造データであって、前記リンク先論理ノードと対応付けられた子ツリーノードへのポインタと、該ポインタを選択するための値域を示す値とから形成される少なくとも１つのエントリを含む根ツリーノードを有するツリー構造データを格納するツリー格納部と、
を備える分散データ管理装置。
【請求項２】
前記対象論理ノードは、
前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードからツリーデータを取得し、該取得されたツリーデータから前記根ツリーノードより下段の少なくとも１つのツリーノードを生成するツリー生成部を更に備える請求項１に記載の分散データ管理装置。
【請求項３】
前記ツリー格納部に格納される前記ツリー構造データは、複数階層を持ち、各階層にツリーデータをそれぞれ持ち、第１階層のツリーデータは、前記リンク先論理ノードが前記値域格納部に格納する値域情報に対応するエントリを有し、前記第１階層より上位の階層Ｌ（Ｌは２以上）のツリーデータは、前記根ツリーノードを含み、
前記ツリー生成部は、前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードから、前記リンク先論理ノードに格納される階層（Ｌ−１）のツリーデータを取得し、取得された階層（Ｌ−１）のツリーデータから、前記階層Ｌのツリーデータの中の前記リンク先論理ノードに対応する部分ツリーデータを生成する、
請求項２に記載の分散データ管理装置。
【請求項４】
前記ツリー格納部に格納される前記各ツリーデータを構成する各ツリーノードは、バージョン情報をそれぞれ含み、
前記対象論理ノードは、
前記階層Ｌの前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードに対して、該ポインタが指す子ツリーノードのバージョン情報が設定されたバージョン確認要求を送信し、該バージョン確認要求に対する該リンク先論理ノードからの返信に含まれるツリーデータ及びバージョン情報により、各ツリーノード及び各ツリーノードのバージョン情報を更新するツリー更新部と、
他の論理ノードから前記バージョン確認要求を受信し、該バージョン確認要求に含まれる前記階層Ｌに関するバージョン情報を、前記対象論理ノードが持つ階層（Ｌ−１）のツリーデータのバージョン情報とそれぞれ比較し、バージョンが異なる階層（Ｌ−１）のツリーデータをバージョン情報と共に該他の論理ノードへ返信するバージョン比較部と、
を更に備える請求項３に記載の分散データ管理装置。
【請求項５】
前記対象論理ノードが、
探索対象属性に関する前記ツリー構造データに含まれるツリーノードの第１エントリが示す値域境界値を該探索対象属性の属性値空間内の基準値とし、該基準値から該属性値空間内の最大値までの間の任意の値が、該属性値空間内の最小値から該基準値までの間の任意の値より小さくなる場合を含む、該属性値空間の循環順序に基づく包含判定により、前記ツリー構造データから探索対象の属性値を値域に含むエントリを特定するツリー探索部を更に備える請求項４に記載の分散データ管理装置。
【請求項６】
前記各階層の根ツリーノードには、前記属性値空間における全属性値を包含しない値域がそれぞれ設定され、
前記ツリー探索部は、或る階層の前記ツリーデータから、前記探索対象属性値を値域に含むエントリを特定できない場合には、１段上の階層のツリーデータの探索を試み、該１段上の階層のツリーデータが存在しない場合には、前記ツリー生成部に、該１段上の階層のツリーデータの生成を依頼する、
請求項５に記載の分散データ管理装置。
【請求項７】
前記リンクテーブルに格納される前記リンク情報は、前記対象ノード識別子をパラメータｋ（ｋは自然数）倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第１リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータｋ倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第２リンク先論理ノード、及び、前記識別子空間における該第１リンク先論理ノードの識別子と該第２リンク先論理ノードの識別子との間の識別子を持つ少なくとも１つの第３リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含む、
請求項１から６のいずれか１項に記載の分散データ管理装置。
【請求項８】
前記リンクテーブルは、前記対象論理ノードから、前記対象ノード識別子をパラメータｋ（ｋは自然数）倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第１リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータｋ倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第２リンク先論理ノード、及び、前記識別子空間における該第１リンク先論理ノードの識別子と該第２リンク先論理ノードの識別子との間の識別子を持つ少なくとも１つの第３リンク先論理ノードへの複数リンクを含むリンク情報を格納し、
前記ツリー更新部は、前記バージョン確認要求をポーリング間隔Ｔで送信し、
前記対象論理ノードは、
前記複数の論理ノードの少なくとも１つにおける値域の変更が前記複数の論理ノードの全てに伝達されるまでの最大時間に対するシステム制約時間ｗｃ、又は、前記各論理ノードが前記バージョン確認要求を送信する単位時間負荷に対するシステム制約負荷λｃを取得し、取得されたシステム制約時間ｗｃ又は取得されたシステム制約負荷λｃ、及び、前記論理ノードの総数Ｎ又は前記対象論理ノードのリンク先ノードの数Ｄを、下記（式１）又は下記（式２）に適用することにより、前記ポーリング間隔Ｔを算出するパラメータ設定部、
を更に備える請求項４から６のいずれか１項に記載の分散データ管理装置。
【数１】
2013171953.tif 000014
ｋは前記パラメータｋを示す。
【請求項９】
前記パラメータｋが４に設定される請求項７又は８に記載の分散データ管理装置。
【請求項１０】
アクセス要求に対応する部分データを格納しており、請求項６に記載の分散データ管理装置で実現される前記対象論理ノードを該アクセス要求の宛先として特定する分散データ操作装置であって、
前記対象論理ノードを含む複数のリンク先論理ノードと通信可能となるリンク情報を格納するリンクテーブルと、
前記ツリー格納部と、
前記ツリー更新部と、
前記ツリー探索部と、
を備える分散データ操作装置。
【請求項１１】
属性値順に順序付けられたデータが分割された複数の部分データであって属性毎の値域をそれぞれ有する複数の部分データを格納する複数の論理ノードの中の少なくとも１つの対象論理ノードをコンピュータに実現させるプログラムであって、
前記対象論理ノードが、
リング構造を有する有限の識別子空間内で前記複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、前記対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、
前記複数の部分データの中の少なくとも１つを格納するデータ格納部と、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記識別子空間内における前記対象ノード識別子との間の関係に応じて確立される前記対象論理ノードとリンク先論理ノードとの間のリンク情報を格納するリンクテーブルと、
前記データ格納部に格納される前記部分データに対応する属性毎の値域境界値であって、該属性毎の該値域境界が前記識別子空間内において前記対象論理ノードと前記対象論理ノードと隣接する論理ノードとの間に位置する該属性毎の該値域境界値を格納する値域格納部と、
アクセス要求に対応する前記部分データを格納する論理ノードを特定するための、値域をそれぞれ示す複数のツリーノードから構成される属性毎のツリー構造データであって、前記リンク先論理ノードと対応付けられた子ツリーノードへのポインタと、該ポインタを選択するための値域を示す値とから形成される少なくとも１つのエントリを含む根ツリーノードを有するツリー構造データを格納するツリー格納部と、
を備えるプログラム。
【請求項１２】
前記対象論理ノードが、前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードからツリーデータを取得し、該取得されたツリーデータから前記根ツリーノードより下段の少なくとも１つのツリーノードを生成するツリー生成部を更に備える請求項１１に記載のプログラム。
【請求項１３】
前記ツリー格納部に格納される前記ツリー構造データは、複数階層を持ち、各階層にツリーデータをそれぞれ持ち、第１階層のツリーデータは、前記リンク先論理ノードが前記値域格納部に格納する値域情報に対応するエントリを有し、前記第１階層より上位の階層Ｌ（Ｌは２以上）のツリーデータは、前記根ツリーノードを含み、
前記ツリー生成部は、前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードから、前記リンク先論理ノードに格納される階層（Ｌ−１）のツリーデータを取得し、取得された階層（Ｌ−１）のツリーデータから、前記階層Ｌのツリーデータの中の前記リンク先論理ノードに対応する部分ツリーデータを生成する、
請求項１２に記載のプログラム。
【請求項１４】
前記ツリー格納部に格納される前記各ツリーデータを構成する各ツリーノードは、バージョン情報をそれぞれ含み、
前記対象論理ノードは、
前記階層Ｌの前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードに対して、該ポインタが指す子ツリーノードのバージョン情報が設定されたバージョン確認要求を送信し、該バージョン確認要求に対する該リンク先論理ノードからの返信に含まれるツリーデータ及びバージョン情報により、各ツリーノード及び各ツリーノードのバージョン情報を更新するツリー更新部と、
他の論理ノードから前記バージョン確認要求を受信し、該バージョン確認要求に含まれる前記階層Ｌに関するバージョン情報を、前記対象論理ノードが持つ階層（Ｌ−１）のツリーデータのバージョン情報とそれぞれ比較し、バージョンが異なる階層（Ｌ−１）のツリーデータをバージョン情報と共に該他の論理ノードへ返信するバージョン比較部と、
を更に備える請求項１３に記載のプログラム。
【請求項１５】
前記対象論理ノードが、
探索対象属性に関する前記ツリー構造データに含まれるツリーノードの第１エントリが示す値域境界値を該探索対象属性の属性値空間内の基準値とし、該基準値から該属性値空間内の最大値までの間の任意の値が、該属性値空間内の最小値から該基準値までの間の任意の値より小さくなる場合を含む、該属性値空間の循環順序に基づく包含判定により、前記ツリー構造データから探索対象の属性値を値域に含むエントリを特定するツリー探索部を更に備える請求項１４に記載のプログラム。
【請求項１６】
前記各階層の根ツリーノードには、前記属性値空間における全属性値を包含しない値域がそれぞれ設定され、
前記ツリー探索部は、或る階層の前記ツリーデータから、前記探索対象属性値を値域に含むエントリを特定できない場合には、１段上の階層のツリーデータの探索を試み、該１段上の階層のツリーデータが存在しない場合には、前記ツリー生成部に、該１段上の階層のツリーデータの生成を依頼する、
請求項１５に記載のプログラム。
【請求項１７】
前記リンクテーブルに格納される前記リンク情報は、前記対象ノード識別子をパラメータｋ（ｋは自然数）倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第１リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータｋ倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第２リンク先論理ノード、及び、前記識別子空間における該第１リンク先論理ノードの識別子と該第２リンク先論理ノードの識別子との間の識別子を持つ少なくとも１つの第３リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含む、
請求項１１から１６のいずれか１項に記載のプログラム。
【請求項１８】
前記リンクテーブルは、前記対象論理ノードから、前記対象ノード識別子をパラメータｋ（ｋは自然数）倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第１リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータｋ倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第２リンク先論理ノード、及び、前記識別子空間における該第１リンク先論理ノードの識別子と該第２リンク先論理ノードの識別子との間の識別子を持つ少なくとも１つの第３リンク先論理ノードへの複数リンクを含むリンク情報を格納し、
前記ツリー更新部は、前記バージョン確認要求をポーリング間隔Ｔで送信し、
前記対象論理ノードは、
前記複数の論理ノードの少なくとも１つにおける値域の変更が前記複数の論理ノードの全てに伝達されるまでの最大時間に対するシステム制約時間ｗｃ、又は、前記各論理ノードが前記バージョン確認要求を送信する単位時間負荷に対するシステム制約負荷λｃを取得し、取得されたシステム制約時間ｗｃ又は取得されたシステム制約負荷λｃ、及び、前記論理ノードの総数Ｎ又は前記対象論理ノードのリンク先ノードの数Ｄを、下記（式１）又は下記（式２）に適用することにより、前記ポーリング間隔Ｔを算出するパラメータ設定部、
を更に備える請求項１４に記載のプログラム。
【数２】
2013171953.tif 000015
ｋは前記パラメータｋを示す。
【請求項１９】
前記パラメータｋが４に設定される請求項１７又は１８に記載のプログラム。
【請求項２０】
データが分割された複数の部分データを格納する複数の論理ノードの中の少なくとも１つの対象論理ノードを実現する分散データ管理装置であって、
前記対象論理ノードは、
リング構造を有する有限の識別子空間内で前記複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、前記対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、
前記複数の部分データの中の少なくとも１つを格納するデータ格納部と、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記対象ノード識別子をパラメータｋ（ｋは自然数）倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第１リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータｋ倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第２リンク先論理ノード、及び、前記識別子空間における該第１リンク先論理ノードの識別子と該第２リンク先論理ノードの識別子との間の識別子を持つ少なくとも１つの第３リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含むリンク情報を格納するリンクテーブルと、
を備える分散データ管理装置。
【請求項２１】
データが分割された複数の部分データを格納する複数の論理ノードの中の少なくとも１つの対象論理ノードであって、リング構造を有する有限の識別子空間内で該複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、該対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、該複数の部分データの中の少なくとも１つを格納するデータ格納部とを有する該対象論理ノードを実現するコンピュータが、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記対象ノード識別子をパラメータｋ（ｋは自然数）倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第１リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータｋ倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第２リンク先論理ノード、及び、前記識別子空間における該第１リンク先論理ノードの識別子と該第２リンク先論理ノードの識別子との間の識別子を持つ少なくとも１つの第３リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含むリンク情報を生成する、
分散データ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、属性値順に順序付けられたデータの分散管理技術に関する。
【背景技術】
【０００２】
アプリケーションプログラムやデータベースシステム等が利用する基本的なデータ構造として、キーから値を取得する連想配列、ＫｅｙＶａｌｕｅストア、Ｍａｐ、ストレージエンジンと呼ばれる構造がある。更に、このようなデータ構造には、キーがその値で順序付けられて格納されるものと、順序付けられずに格納されるものがある。順序付けらない形態では、キーをＨａｓｈした値に基づいてそのデータの格納先が決定される。一方、順序付けられた形態では、各格納先が担当する値域を値域データとしてそれぞれ持ち、その値域データとキーとからデータの格納先が決定される。【０００３】
非特許文献１は、情報システムにおける値域管理方法の一例を提案する。非特許文献１の例では、Ｂｉｇｔａｂｌｅと呼ばれるシステムが、複数のデータを格納するタブレットサーバ、Ｂｉｇｔａｂｌｅマスター、集中型サーバであるＣｈｕｂｂｙ、メタデータ・タブレットサーバ、クライアントから構成される。各タブレットサーバは、或る連続した値域のデータをタブレットとしてそれぞれ格納する。Ｂｉｇｔａｂｌｅマスターは、タブレットがどのタブレットサーバに格納されているかをＢ＋Ｔｒｅｅにより管理し、そのＢ＋Ｔｒｅｅを構成する複数の部分木を複数のメタデータ・タブレットサーバに格納し、ルートに相当する部分木をＣｈｕｂｂｙに格納する。タブレットサーバが管理するタブレットが変更される場合には、その変更はマスターに通知される。このＢｉｇｔａｂｌｅにアクセスするクライアントは、Ｃｈｕｂｂｙにアクセスして前記Ｂ＋Ｔｒｅｅのルートを取得し、その部分木をメタデータ・タブレットサーバから取得し、これをキャッシュする。このキャッシュが有効である間、クライアントはキーの値に対応するタブレットサーバをローカルで特定することができる。タブレットサーバが担当するタブレットが変更されると、クライアント上のキャッシュは無効となるが、クライアントはキーの値に対応するタブレットサーバにアクセスして始めて、その無効を検知し、メタデータ・タブレットサーバに有効な情報を問い合わせる。【０００４】
非特許文献２は、当該値域管理方法の他の例を提案する。非特許文献２の例では、Ｂａｔｏｎと呼ばれるシステムが、複数のＰ２Ｐ（Peer to Peer）ノードから構成される。各ノードは連続な値域のデータを格納する。各ノードは、他のノードとリンク関係を持ち、そのリンクの関係は全体で平衡木となる。各ノードは、その木構造における親ノードに当たるノードへのリンク、子ノードに当たるノードへのリンク、同一階層の隣接ノードへのリンクを持つ。同一階層の隣接ノードへのリンクについては、各リンク先に関する値域も管理する。或るノードは、或る値に対するアクセス要求を取得した場合、その値が同一階層の隣接ノードが担当する値域の中のどの値域に含まれるかを決定し、その決定されたノードに当該アクセス要求を転送する。転送先のノードで類似の処理を続けることで、その値に対応するデータを保持するノードが検出される。ノード間のリンク関係は、ノードの新規追加や離脱の際に、平衡木を保つように順次変更される。更に、格納されるデータの分布がノード間で均一でなくなり歪が発生すると、各ノードはデータの分布が均一化するように値域やリンク関係を変更する。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach Mike Burrows, Tushar Chandra, Andrew Fikes, Robert E. Gruber, "Bigtable : A Distributed Storage System For Structured Data", Symposium on Operating Systems Design (SOSP) 2006, 2006/11/6-8.
【非特許文献２】H.V. Jagadish, Beng Chin Ooi, Quang Hieu Vu, "BATON: A Balanced Tree Structure for Peer-to-Peer Networks", Very large data bases (VLDB) 2005, 2005/8/30-9/2.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述の値域管理方法では、次のような問題点がある。
例えば、非特許文献１の方法では、データを格納するノードの値域に変更が発生した場合に、クライアントのデータアクセス時間が長くなってしまう。その理由は、クライアントがデータ格納ノードの値域の変更を検知するのは、クライアントがデータへのアクセスを実行した時であるからである。即ち、クライアントは、その検知後、メタデータサーバから新たな値域を取得し、データアクセスの再実行をすることになるため、その通信遅延がそのままデータアクセス時間としてかかってしまう。【０００７】
これを解決するために、非特許文献１の方法に、クライアントが値域をメタデータサーバに定期的に問い合わせる構成を付加することが考えられる。しかしながら、このような構成によれば、システム内で共通の複数のメタデータサーバは、所定間隔で全クライアントからの要求を受けることになり、クライアント数の増加に伴い、メタデータサーバの負荷やシステム内の通信負荷が高くなり、ひいては、システム全体の性能が劣化することになる。【０００８】
更に、例えば、非特許文献２の方法では、データアクセス要求がＰ２Ｐノードから他のノードに順次転送されることで、アクセス対象のデータを格納するノードが検出されるため、データアクセス処理に要する時間が長くなる傾向にある。また、非特許文献２の方法では、属性毎の値域又はノードの負荷に応じてノード間のリンク関係が更新されるため、システム内で扱う属性の数が増加するに伴い、Ｐ２Ｐノード間のリンク関係が増加し、結果、その管理及び更新に要する負荷が増加し、更に障害が発生し易い状況になりかねない。【０００９】
本発明は、上述のような事情に鑑みてなされたものであり、属性値順に順序付けられたデータを分散管理するシステムにおいて、負荷を抑制しつつデータアクセス時間を低減させる分散データ管理技術を提供することにある。
【課題を解決するための手段】
【００１０】
本発明の各態様では、上述した課題を解決するために、それぞれ以下の構成を採用する。【００１１】
第１の態様は、属性値順に順序付けられたデータが分割された複数の部分データであって属性毎の値域をそれぞれ有する複数の部分データを格納する複数の論理ノードの中の少なくとも１つの対象論理ノードを実現する分散データ管理装置に関する。第１態様に係る分散データ管理装置で実現される対象論理ノードは、リング構造を有する有限の識別子空間内で複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、複数の部分データの中の少なくとも１つを格納するデータ格納部と、対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、識別子空間内における対象ノード識別子との間の関係に応じて確立される対象論理ノードとリンク先論理ノードとの間のリンク情報を格納するリンクテーブルと、データ格納部に格納される部分データに対応する属性毎の値域境界値であって、属性毎の値域境界が識別子空間内において対象論理ノードと対象論理ノードと隣接する論理ノードとの間に位置する属性毎の値域境界値を格納する値域格納部と、アクセス要求に対応する部分データを格納する論理ノードを特定するための、値域をそれぞれ示す複数のツリーノードから構成される属性毎のツリー構造データであって、リンク先論理ノードと対応付けられた子ツリーノードへのポインタと、ポインタを選択するための値域を示す値とから形成される少なくとも１つのエントリを含む根ツリーノードを有するツリー構造データを格納するツリー格納部とを備える。【００１２】
なお、本発明の他の態様としては、上述のような対象論理ノードをコンピュータに実現させるプログラムであってもよいし、このようなプログラムを記録したコンピュータが読み取り可能な記録媒体であってもよい。この記録媒体は、非一時的な有形の媒体を含む。
【発明の効果】
【００１３】
上記各態様によれば、属性値順に順序付けられたデータを分散管理するシステムにおいて、負荷を抑制しつつデータアクセス時間を低減させる分散データ管理技術を提供することができる。
【図面の簡単な説明】
【００１４】
上述した目的、およびその他の目的、特徴および利点は、以下に述べる好適な実施の形態、およびそれに付随する以下の図面によってさらに明らかになる。【００１５】
【図１】第１実施形態における分散システムの構成例を概念的に示す図である。
【図２】第１実施形態におけるデータサーバの処理構成例を概念的に示す図である。
【図３】論理ノードのリンク関係の例を概念的に示す図である。
【図４】図３に示されるノードＮ（１）を基準としたリンク関係を概念的に示す図である。
【図５】ＩＤリングと値域情報との関係を概念的に示す図である。
【図６Ａ】管理形態３における、図３及び図４のリンク例に基づくノードＮ（１）のツリー構造データの例を概念的に示す図である。
【図６Ｂ】管理形態６における、図３及び図４のリンク例に基づくノードＮ（１）のツリー構造データの例を概念的に示す図である。
【図７】第１実施形態におけるツリー生成部の動作例を示すフローチャートである。
【図８】第１実施形態におけるツリー更新部及びバージョン比較部の動作例を示すフローチャートである。
【図９】第１実施形態におけるツリー探索部の動作例を示すフローチャートである。
【図１０】第１実施形態におけるツリー探索部の、階層Ｌのツリーデータから宛先ノードを特定する動作の例を示すフローチャートである。
【図１１】第２実施形態におけるデータサーバの処理構成例を概念的に示す図である。
【図１２】第３実施形態における分散システムの構成例を概念的に示す図である。
【図１３】第３実施形態におけるデータ操作クライアントの処理構成例を概念的に示す図である。
【図１４】実施例１におけるＩＤリングと値域情報との関係を概念的に示す図である。
【図１５】実施例１において生成されるリンク関係の一部を示す図である。
【図１６】実施例１において各ノード１１で生成されるツリー構造データの一部を示す図である。
【図１７】実施例１における負荷分散の例を概念的に示す図である。
【図１８】実施例１における負荷分散後のノード（９８０）のツリー構造データの例を概念的に示す図である。
【図１９】実施例１におけるノード（４１３）のバージョン更新後のツリー構造データの例を概念的に示す図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施の形態について説明する。なお、以下に挙げる実施形態は例示であり、本発明は以下の実施形態の構成に限定されない。
【００１７】
本実施形態に係る分散データ管理装置は、属性値順に順序付けられたデータが分割された複数の部分データであって属性毎の値域をそれぞれ有する複数の部分データを格納する複数の論理ノードの中の少なくとも１つの対象論理ノードを実現する。本実施形態における当該対象論理ノードは、対象ノード識別子を格納するノード識別子格納部と、当該部分データを格納するデータ格納部と、対象論理ノードとリンク先論理ノードとの間のリンク情報を格納するリンクテーブルと、データ格納部に格納される部分データに対応する属性毎の値域境界値を格納する値域格納部と、当該リンク先論理ノードと対応付けられた子ツリーノードへのポインタと、このポインタを選択するための値域を示す値とを含む少なくとも１つのエントリを含む根ツリーノードを有する属性毎のツリー構造データを格納するツリー格納部と、を備える。
【００１８】
ここで、論理ノードとは、タスク、プロセス、インスタンス等のようなソフトウェア要素であり、本実施形態に係る分散データ管理装置のようなコンピュータにより実現される。また、対象ノード識別子とは、リング構造を有する有限の識別子空間内で複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、対象論理ノードに割り当てられた識別子である。即ち、各論理ノードには、ユニークな識別子（以降、ノードＩＤ又はＩＤとも表記する）がそれぞれ割り当てられる。リング構造を有する有限の識別子空間とは、その空間内で最大の識別子の次に最小の識別子が続くように定義された識別子空間を意味する。
【００１９】
対象論理ノードは、識別子空間内における対象ノード識別子と他の識別子との間の関係に応じて他の論理ノード（上記リンク先論理ノード）との間にリンクを確立する。リンク確立とは、対象論理ノードが当該リンク先論理ノードと通信可能となることを意味し、例えば、相互にＩＰ（Internet Protocol）アドレスを持ち合うことで実現される。なお、本実施形態は、当該リンクの実現手法を制限しない。
【００２０】
このように、本実施形態では、データを分散管理する複数の論理ノードにおいて、ノードＩＤに基づくトポロジが構築される。
【００２１】
一方、各論理ノードは、上述の値域格納部のように、格納する部分データに対応する値域情報をそれぞれ管理する。そして、属性毎の値域境界は、識別子空間内において隣接する論理ノード間に位置する。即ち、ノードＩＤ空間のリング構造に対応して、各論理ノードが担当する属性毎の値域が決定される。これにより、ノードＩＤ空間と同様に、属性毎の属性値空間は、循環順序（リング構造）を持つものとして管理され得る。これは、ノードＩＤ空間のリンクトポロジ上に、属性値空間の値域情報ビューを重畳させて管理する構成であるとも言える。この構成により、値域変更に対して、ノードＩＤ空間のリンクトポロジは変更することなく、それに重畳されている値域情報ビューのみの変更で対応することができる。
【００２２】
なお、値域格納部に格納される値域境界値は、対象論理ノードが格納する部分データの値域の起点であってもよいし、その値域の終点であってもよいし、その値域の始点と終点との組み合わせであってもよい。また、値域格納部には、対象論理ノードの値域境界値のみならず、対象論理ノードの隣接ノードが格納する部分データの値域境界値が格納されるようにしてもよい。
【００２３】
本実施形態では、対象論理ノードは、このような各論理ノードの値域が反映されたツリー構造データを格納し、このツリー構造データに格納されるツリーノードのエントリが参照されることにより、任意の属性値を含む部分データを格納する論理ノードが特定される。本実施形態では、上述したように、ツリー構造データに含まれる根ツリーノードのエントリには、当該リンク先論理ノードと対応付けられた子ツリーノードへのポインタが含まれる。
【００２４】
このように、本実施形態における当該ツリー構造データには、ノードＩＤに基づいて構築されるトポロジ上の論理ノード間のリンク関係が反映されるため、対象論理ノードは、ツリー構造データを探索しながら、リンク先論理ノードを即座に特定することができる。これにより、本実施形態によれば、リンク先論理ノードから値域情報を取得する形態や、リンク先論理ノードが有する値域情報を確認する形態等を実現し易くなる。このような形態にすれば、対象論理ノードは、特定サーバに値域変更を伺う必要がないため、特定サーバへの負荷集中を防ぐことができる。
【００２５】
また、本実施形態では、論理ノードは、上述のように、自身が格納するツリー構造データを参照することにより、所望の値域を格納する論理ノードを特定することができるため、データアクセス要求のノード間転送が不要となり、結果、データアクセス要求のノード間転送に伴うデータアクセス時間の増加を防ぐことができる。
【００２６】
以下、上述の実施形態について更に詳細を説明する。
［第１実施形態］
〔システム構成〕
図１は、第１実施形態における分散システム１の構成例を概念的に示す図である。第１実施形態における分散システム１は、複数のデータサーバ１０等を有する。データサーバ１０は相互にネットワーク９によって通信可能に接続される。データサーバ１０は、上述の実施形態における分散データ管理装置に対応する。データサーバ１０は、アプリケーションや他の端末からの要求に応じて、データサーバ１０に格納されるデータにアクセスし、所望のデータを取得する。
【００２７】
データサーバ１０は、いわゆるコンピュータであり、例えば、バス５で相互に接続される、ＣＰＵ（Central Processing Unit）２、メモリ３、入出力インタフェース（Ｉ／Ｆ）４等を有する。メモリ３は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、ハードディスク、可搬型記憶媒体等である。入出力Ｉ／Ｆ４は、ネットワーク９を介して他のデータサーバ１０、データ操作クライアント５０、他の端末等と通信を行う通信装置７等と接続される。入出力Ｉ／Ｆ４は、表示装置や入力装置等のようなユーザインタフェース装置と接続されてもよい。なお、本実施形態は、データサーバ１０のハードウェア構成を限定しない。
【００２８】
〔装置構成〕
図２は、第１実施形態におけるデータサーバ１０の処理構成例を概念的に示す図である。図２に示されるように、データサーバ１０は、データ操作部１２、ツリー探索部１３、ツリー生成部１４、ツリー更新部１５、バージョン比較部１６、１以上の論理ノード１１等を有する。各論理ノードは、リンク生成部１７、ノードＩＤ格納部１８、リンクテーブル１９、ツリー格納部２０、データアクセス部２１、データ格納部２２、値域格納部２３等をそれぞれ有する。
【００２９】
これら処理部は、メモリ３に格納されるプログラムがＣＰＵ２で実行されることにより実現される。そのプログラムは、例えば、ＣＤ（Compact Disc）、メモリカード等のような可搬型記録媒体やネットワーク上の他のコンピュータから入出力Ｉ／Ｆ４を介してインストールされ、メモリ３に格納される。なお、図２の例では、論理ノード１１と、各処理部１２から１６とが、異なるソフトウェア要素であるように示されているが、各処理部１２から１６は論理ノード１１毎に設けられてもよい。以降、論理ノード１１は、単に、ノード１１とも表記する。
【００３０】
〈論理ノード〉
以下、各ノード１１が有する各処理部についてそれぞれ説明する。
【００３１】
ノードＩＤ格納部１８は、上述の実施形態におけるノード識別子格納部に対応する。即ち、ノードＩＤ格納部１８は、リング構造を有する有限のＩＤ空間内で、各ノード１１に割り当てられるノードＩＤを格納する。ノードＩＤには、例えば、対応するサーバのＩＰアドレスのハッシュ値が用いられる。
【００３２】
リンクテーブル１９は、上述の実施形態で説明されたように、ノード１１と他のノードとのリンク関係を格納する。第１実施形態におけるリンクテーブル１９は、他の各ノードについて、ノードＩＤ、そのノードに対応するＩＰアドレス、及び、自ノード１１とのリンク関係をそれぞれ格納する。各ノードに対応するＩＰアドレスとは、各ノードと通信するために利用されるＩＰアドレスであり、例えば、各ノードが実現されているデータサーバ１０のＩＰアドレスである。また、リンクテーブル１９に格納されるリンク関係とは、自ノード１１とリンクされているか否か、リンクされていればそのリンクを識別するための番号（リンクの順番等）等が含まれる。
【００３３】
リンク生成部１７は、自ノード１１のＩＤと、分散システム１中の任意の他のノードのＩＤとのＩＤ空間における距離に基づき、リンク関係を構築し、その内容をリンクテーブル１９に反映させる。このリンク関係の構築（ＩＤトポロジの構築）には、例えば、Ｃｈｏｒｄアルゴリズムや、Ｋｏｏｒｄｅアルゴリズムなどが用いられる。なお、第１実施形態は、有限のＩＤ空間で、リング構造を持つようにトポロジが構築されるのであれば、ＩＤトポロジの構築の手法を限定しない。
【００３４】
図３は、論理ノード１１のリンク関係の例を概念的に示す図である。図４は、図３に示されるノードＮ（１）を基準としたリンク関係を概念的に示す図である。図３及び図４の例では、ノードＮ（１）が、ノードＮ（３）及びＮ（４）とリンクされており、ノードＮ（３）が、ノードＮ（５）、Ｎ（６）及びＮ（７）とリンクされており、ノードＮ（４）が、ノードＮ（７）及びＮ（８）とリンクされている。
【００３５】
一方で、図３の例に示されるように、ＩＤ空間はリング構造を持つ。以降、このリング構造はＩＤリングとも表記される。このＩＤリング上では、各ノード１１にとって、自ノード１１のＩＤより大きくかつ最も近いＩＤを持つノード１１は、Ｓｕｃｃｅｓｓｏｒノード又はＳｕｃノードと表記され、自ノード１１のＩＤより小さくかつ最も近いＩＤを持つノード１１は、Ｐｒｅｄｅｃｅｓｓｏｒノード又はＰｒｅｄノードと表記される。そして、ＩＤリングでは、ＩＤ空間内で最大値のノードＩＤを持つノード１１が、ＩＤ空間内で最小値のノードＩＤを持つノード１１をＳｕｃノードとし、ＩＤ空間内で最小値のノードＩＤを持つノード１１が、ＩＤ空間内で最大値のノードＩＤを持つノード１１をＰｒｅｄノードとする。なお、このようなＩＤリング上のリンク関係は、ノードＩＤの値により即座に特定可能であるため、リンクテーブル１９に格納されなくてもよいし、上述のようなＩＤ空間上で隣接しないノード間の関係と共にリンクテーブル１９に格納されてもよい。
【００３６】
以降、ＩＤリング上で隣接するノード１１は、Ｓｕｃノード又はＰｒｅｄノードと表記され、ＩＤリング上で隣接せずリンクが確立されているノード１１が、リンク先ノードと表記される。また、図４に示されるように、或るノード１１から、リンクを辿って他のノードに行き着くまでの間の距離をホップと表記する。即ち、或る対象ノード１１と直接リンクされるノードは、対象ノード１１の１ホップ目のリンク先ノードと表記され、その１ホップ目のリンク先ノードと直接リンクされるノードは、対象ノード１１の２ホップ目のリンク先ノードと表記される。
【００３７】
データ格納部２２は、上述の実施形態で説明されたように、属性値順に順序付けられたデータが分割された複数の部分データの一部の部分データを格納する。本実施形態で扱われるデータは、複数の列（属性）をそれぞれ含む複数の行（タプル）から構成されるデータである。但し、本実施形態は、データの形態を制限しない。例えば、格納される属性値は、複数の属性値を空間充填曲線処理により、１次元の値としたものであっても良い。また、例えば、本実施形態がデータストリームシステムやＰｕｂｌｉｓｈ／Ｓｕｂｓｃｒｉｂｅ（Ｐｕｂ／Ｓｕｂ）システムに適用される場合には、当該データは、データそのものではなく条件式等であってもよい。このようなシステムでは、データベースにてデータを探す条件として扱われる、検索するキーの値や範囲などが、検出対象のデータとなる。すなわち、検出したい温度の範囲を１つの条件式（Ｓｕｂｓｃｒｉｂｅ）として与えると、その範囲を（ｘ０，ｘ１）＝（下限値，上限値）という２次元の値とし、これを１次元化して得られる値として格納する。複数の条件式が与えられると、各々の条件式を表す１次元値がシステムに複数格納される。ある属性値のデータがシステムに与えられ（Ｐｕｂｌｉｓｈ）、それを条件内に含むような条件式と対応する通知先に通知する（Ｎｏｔｉｆｙ）際には、ｘ０が［−∞，属性値］の範囲に含まれ、かつｘ１が［属性値，∞］に含まれる多次元範囲を検索する。これは、先に格納された複数の条件式から、この多次元空間と対応する１次元範囲に含まれる条件式を検索することで実現できる。このように、本実施形態は、データ検索だけでなく、範囲を条件としたＰｕｂ／Ｓｕｂにも同様に適用することができる。
【００３８】
データ格納部２２に格納される部分データは、属性毎の値域をそれぞれ有する。
【００３９】
値域格納部２３は、上述の実施形態で説明されたように、データを分割し合った他のノードとの間の属性毎の値域の境界値をメタデータとして格納する。或るノードと値域を分ける関係にある他のノードは、ＩＤ空間内において当該或るノードのＩＤと距離の最も近いＩＤを持つ隣接ノードである。上述したように、各ノードにおいて値域格納部２３に格納される値域境界値には、様々な形態があり得る。例えば、自ノードが格納する部分データに対応する値域に関し、値域の始点が値域境界値として管理される形態（管理形態１）、値域の終点が値域境界値として管理される形態（管理形態２）、及び、始点及び終点の両方が管理される形態が有る（管理形態３）。更に、Ｓｕｃノードが格納する部分データに対応する値域の始点及び終点の両方が管理される形態（管理形態４）、Ｐｒｅｄノードが格納する部分データに対応する値域の始点及び終点の両方が管理される形態（管理形態５）、自ノードとＳｕｃノードとに関する値域の始点及び終点の両方が管理される形態（管理形態６）、自ノードとＰｒｅｄノードとに関する値域の始点及び終点の両方が管理される形態等が考えられる（管理形態７）。
【００４０】
上記各管理形態は、システム要件により選択されることが望ましい。例えば、最も簡易な構成が望まれる場合には、上記管理形態１又は２が選択され得る。また、例えば、データの一貫性が要件とされるシステムでは、上記管理形態３、６又は７が選択され得る。このようなシステムでは、隣接ノード間で、値域境界値の同期が行われる。また、例えば、高い障害耐性が要件とされるシステムでは、自ノードのセカンダリノード（バックアップノード）として作用する隣接ノード（ＳｕｃノードかＰｒｅｄノードか）に応じて、上記管理形態４、５、６又は７が選択され得る。このようなシステムでは、対象ノードの隣接ノード（Ｓｕｃノード又はＰｒｅｄノード）が当該対象ノードの値域情報を管理する。本実施形態は、このような各ノードにおいて管理される値域情報の形態を制限しない。
【００４１】
図５は、ＩＤリングと値域情報との関係を概念的に示す図である。図５の例において上記管理形態２が用いられる場合には、ノードＮ（０）は、隣接するノードＮ（１）との値域の境界に関し、値域境界値（２５）を格納し、ノードＮ（１）は、隣接するノードＮ（２）との値域の境界に関し、値域境界値（３２）を格納する。このように、値域情報の管理形態としてどのような管理形態が用いられたとしても、ＩＤ空間のリング構造に対応して、各ノードが担当する属性毎の値域が決定されるため、属性値空間は、ノードＩＤ空間と同様に、循環順序（リング構造）を持つものとして管理されることができる。
【００４２】
この循環順序によれば、或る属性において或る値域境界値を基準値（循環順序における始点）とした場合、その基準値からその属性値空間内の最大値までの間の任意の値が、その属性値空間内の最小値から基準値までの間の任意の値より小さくなる。図５の例における当該循環順序によれば、ノードＮ（６）からノードＮ（８）が担当する属性値の範囲を考えると、ノードＮ（６）が担当する値域境界値（１７５）を基準値とした場合、属性値（５）が、ノードＮ（６）が担当する値域境界値（１７５）よりも大きいと判断される。また、属性値（２００）は、ノードＮ（６）が持つ値域境界値（１７５）より大きく、かつ、ノードＮ（７）が持つ値域境界値（３）よりも小さいと判断される。このような属性値空間における循環順序は、例えば、ツリー探索部１３等により利用される。
【００４３】
データアクセス部２１は、自ノード１１へのデータアクセス要求を受け、その要求に含まれている属性値又は属性値の範囲が、値域格納部２３に格納された自ノード１１が担当する値域に含まれるか否かを判断する。データアクセス部２１は、含まれない場合は、要求の発行者に無効を返し、含まれる属性値又は属性値の範囲が存在する場合は、データ格納部２２への任意の処理を許可し、その結果を要求の発行者に返す。
【００４４】
ツリー格納部２０は、上述の実施形態で説明されたように、値域をそれぞれ示す複数のツリーノードから構成される属性毎のツリー構造データを格納する。第１実施形態におけるツリー格納部２０に格納されるツリー構造データは、複数階層を持ち、各階層についてツリーデータをそれぞれ持つ。以降、論理ノード１１と区別するために、このツリー構造データを構成する要素としてのノードは、ツリーノードと表記される。また、ツリー構造データが持つ階層と区別するために、このツリー構造データに含まれる各階層の各ツリーデータが持つ階層は、段階と表記される。
【００４５】
ツリーノードは、存在する段階に応じて、根ツリーノード、枝ツリーノード、葉ツリーノードに区別される。根ノード及び枝ノードは、１段下のノード（子ツリーノード）へのポインタを含み、葉ノードは、データの格納先となる論理ノード１１を特定し得るデータへのポインタを含む。各ツリーノードは、そのようなポインタと、そのようなポインタを選択する範囲を特定する値域情報とを含むエントリをそれぞれ有する。
【００４６】
第１実施形態におけるツリーノードは、Ｂツリー等のような既存のデータ検索のためのツリーデータ構造と同様なこのような構造に加えて、次のような特徴を持つ。具体的には、各ツリーデータの各根ツリーノードには、対象属性における全属性値を包含しない属性値の範囲が設定され得る。従来のツリーデータ構造は、１つのツリーデータにより構成されるため、根ツリーノードには、対象属性における全属性値を包含する属性値の範囲が設定される。一方、第１実施形態における各階層の各根ツリーノードは、対象属性における全属性値の範囲の一部をサポートし、全階層の全根ツリーノードにより、対象属性における全属性値の範囲をサポートする。
【００４７】
１階層目（階層０）のツリーデータは、自ノードが値域格納部２３に持つ値域情報から生成される。よって、階層０のツリーデータの構成は、上述のような値域情報の管理形態に対応する。よって、例えば、上記管理形態６の階層０のツリーデータは、次のような３つのエントリを持つ根ツリーノードから形成される。この場合、根ツリーノードは、葉ツリーノードの位置付けも持つ。第１エントリには、自ノードが担当する値域の始点（自ノードのＰｒｅｄノードが担当する値域の終点）と、自ノードを特定し得るデータへのポインタとが含まれる。第２エントリには、自ノードが担当する値域の終点（自ノードのＳｕｃノードが担当する値域の始点）と、自ノードのＳｕｃノードを特定し得るデータへのポインタとが含まれる。第３エントリには、自ノードのＳｕｃノードが担当する値域の終点と、値無し（Ｎｕｌｌ）とが含まれる。或るノードを特定し得るデータは、以降、ノード特定データと表記され、ノード特定データには、例えばノードＩＤが利用される。
【００４８】
２階層目（階層１）のツリーデータは、リンク先ノードが値域格納部２３に持つ値域情報から生成される。よって、階層１のツリーデータの構成についても、上述のような値域情報の管理形態に対応する。例えば、上記管理形態４の階層１のツリーデータは、次のような複数エントリを有する。各エントリには、各リンク先ノードが担当する値域の終点とそのリンク先ノードのＳｕｃノードのノード特定データへのポインタとがそれぞれ設定され、最後のエントリの値域境界値には最後のリンク先ノードのＳｕｃノードが担当する値域の終点が設定され、ポインタには値無し（Ｎｕｌｌ）が設定される。最後のリンク先ノードは、複数のリンク先ノードの中で最大ＩＤ値を持つリンク先ノードである。
【００４９】
階層Ｌ（Ｌは２以上の整数）のツリーデータは、Ｌホップ目の各リンク先ノードに関する情報から形成され、Ｌ段階構成を持つ。階層Ｌのツリーデータの根ツリーノードは、リンク先ノードと対応付けられた子ツリーノードへのポインタと、このポインタを選択するための値域を示す値とを含む少なくとも１つのエントリから構成される。ここで、子ツリーノードへのポインタとリンク先ノードとの対応付けの形態は、そのポインタから、対応するリンク先ノードのノード特定データ（例えば、ノードＩＤ）を取得できるのであれば、限定されない。階層Ｌの根ツリーノードより下段のツリーノードは、リンク先ノードにおける階層（Ｌ−１）のツリーデータから生成される。この生成手法については、後述する。
【００５０】
図６Ａは、上記管理形態３における、図３及び図４のリンク例に基づくノードＮ（１）のツリー構造データの例を概念的に示す図である。図６Ｂは、上記管理形態６における、図３及び図４のリンク例に基づくノードＮ（１）のツリー構造データの例を概念的に示す図である。図６Ａ及び図６Ｂにおける左側の三角形が各階層を示し、右側が各階層におけるツリーデータを示す。図６Ａ及び図６Ｂの矢印はポインタを示し、その矢印の先がノード特定データを示す。また、Ｎ（ｘ）．ｓＶは、ノードＮ（ｘ）の値域始点を示し、Ｎ（ｘ）．ｅＶは、ノードＮ（Ｘ）の値域終点を示す。図６Ａ及び図６Ｂの例は、ノードＮ（１）により格納されるツリー構造データを示し、このツリー構造データは３つの階層のツリーデータを持つ。なお、図６Ａ及び図６Ｂには、Ｎｕｌｌが設定される部分は図示されていない。
【００５１】
以下、図６Ａに示される各階層のツリーデータについて説明する。
階層０のツリーデータには、自ノードの値域始点（Ｎ（１）．ｓＶ）及び自ノードの値域終点（Ｎ（１）．ｅＶ）、並びに、自ノードのノード特定データへのポインタが設定されている。
【００５２】
階層１のツリーデータの各エントリには次のようなデータが設定されている。第１エントリの値域境界値には、リンク先ノードであるノードＮ（３）の値域始点（Ｎ（３）．ｓＶ）が設定され、第１エントリのポインタには、そのノードＮ（３）のノード特定データへのポインタが設定されている。第２エントリの値域境界値には、リンク先ノードであるノードＮ（４）の値域始点（Ｎ（４）．ｓＶ）が設定され、第２エントリのポインタには、そのノードＮ（４）のノード特定データへのポインタが設定されている。第３エントリの値域境界値には、そのノードＮ（４）の値域終点（Ｎ（４）．ｅＶ）が設定され、第３エントリのポインタにはＮｕｌｌが設定されている。
【００５３】
階層２のツリーデータは、根ツリーノード及び２つの葉ツリーノードから構成され、根ツリーノードには、リンク先ノードであるノードＮ（３）及びＮ（４）に対応付けられた子ツリーノード（葉ツリーノード）への２つのポインタが含まれる。２つの葉ツリーノードは、ノードＮ（３）及びＮ（４）にリンクされる、ノードＮ（１）を基準とした２ホップ目のリンク先ノードであるノードＮ（５）からＮ（８）に格納された情報から形成される。本実施形態では、ノードＮ（３）に対応付けられたポインタが示す葉ツリーノードは、そのノードＮ（３）の階層１のツリーデータから生成され、ノードＮ（４）に対応付けられたポインタが示す葉ツリーノードは、そのノードＮ（４）の階層１のツリーデータから生成される。また、階層２の根ノードには、２ホップ目のノードＮ（５）からＮ（８）の値域を示すエントリが設定されている。
【００５４】
以下、図６Ｂに示される各階層のツリーデータについて説明する。図６Ｂの階層０のツリーデータには、図６Ａの構成に加えて、自ノードＮ（１）のＳｕｃノードであるノードＮ（２）に関する、ノード特定データへのポインタと値域の終点とが設定される。階層１のツリーデータには、図６Ａの構成に加えて、最後のリンク先ノードＮ（４）のＳｕｃノードであるノードＮ（５）に関する、ノード特定データへのポインタと値域の終点とが設定される。階層２のツリーデータには、図６の構成に加えて、２ホップ目の最後のリンク先ノードＮ（８）のＳｕｃノードであるノードＮ（９）に関する、ノード特定データへのポインタと値域の終点とが設定される。
【００５５】
このように、各階層のツリーデータは、各ノードにおける値域情報の管理形態に対応した形態で生成される。但し、階層０のツリーデータは、自ノードが値域格納部２３に持つ値域情報から生成され、階層１のツリーデータは、リンク先ノードが値域格納部２３に持つ値域情報から生成され、階層Ｌ（Ｌは１以上）のツリーデータは、リンク先ノードの階層（Ｌ−１）のツリーデータから生成される点において一貫している。また、ツリーデータの階層番号が小さい程、そのツリーデータに反映されている値域情報の鮮度は高くなる。
【００５６】
また、各ツリーデータの各ツリーノードには、バージョン情報が付加されている。このバージョン情報は、値域変更に応じて更新される。このバージョン情報は、バージョン比較部１６等により利用される。
【００５７】
データ操作部１２は、アプリケーションプログラムやユーザインタフェース装置からの入力等により取得された操作対象のデータの決定条件から、対象属性と、属性値又は属性値の範囲とを取得し、その属性値又は属性値の範囲に対応するノード１１を検出し、そのノード１１に対してデータアクセス処理を実行する。対応するノード１１は、対象属性と、属性値又は属性値の範囲とをツリー探索部１３に渡すことで、ツリー探索部１３から取得される。データアクセスに失敗した場合には、データ操作部１２は、再度、ツリー探索部１３にデータアクセスの宛先のノードを問い合わせる。
【００５８】
ツリー探索部１３は、データ操作部１２から、対象属性と、属性値又は属性値の範囲とを取得すると、ツリー格納部２０から任意のノードの指定された属性に関するツリー構造データを取得し、その中から、その属性値又は属性値の範囲に対応する部分データを格納するノード１１を特定する。ツリー探索部１３は、ノード１１を特定できない場合やツリー構造データの或る階層のツリーデータが存在しない場合には、ツリー生成部１４にツリーデータの生成を要求する。ツリー探索部１３の詳細処理については動作例の項において詳述する。
【００５９】
ツリー生成部１４は、上述したようなツリー構造データを生成する。対象ノード１１における階層Ｌ（Ｌは２以上）のツリーデータを生成する際には、ツリー生成部１４は、対象ノード１１のリンクテーブル１９からリンク先ノードの通信アドレスを取得し、その通信アドレスを用いてそのリンク先ノードから、そのリンク先ノードのツリー格納部２０に格納される階層（Ｌ−１）のツリーデータを取得する。ツリー生成部１４は、対象ノード１１における階層１のツリーデータを生成する際には、そのリンク先ノードのツリー格納部２０に格納される階層０のツリーデータを取得してもよいし、そのリンク先ノードの値域格納部２３に格納される値域情報を取得してもよい。ツリー生成部１４の詳細処理については動作例の項において詳述する。
【００６０】
ところで、各ノード１１に割り当てられる各属性の値域は、各ノード１１の負荷や、各ノード１１に格納されるデータ量のバランス等により変更される。一方、各ノード１１は、他のノードに関する値域情報についてもツリー格納部２０に格納されるツリー構造データにより管理している。そこで、他のノードにおいて値域が変更されたにも関わらず、その値域変更が或るノード１１の当該ツリー構造データに反映されていない状況が生じる。このような状況では、ツリー探索部１３が、不適切なノード１１、即ち、対象となる属性値又は属性値の範囲に対応する部分データを格納していないノード１１を特定してしまう可能性がある。
【００６１】
このような状況を可能な限り低減させるために、ツリー更新部１５は、各ノード１１が格納するツリー構造データが最新の値域情報となっているか否かを任意のタイミングで確認し、古い値域情報となってしまっているツリーデータを最新の値域情報で更新する。具体的には、ツリー更新部１５は、階層２以上の各階層のツリーデータについて、根ツリーノードに含まれるポインタに対応付けられたリンク先ノードに対して、そのポインタが指す子ツリーノードのバージョン情報が設定されたバージョン確認要求を送信する。ツリー更新部１５は、そのリンク先ノードからの返信に含まれるツリーデータ及びバージョン情報により、バージョンが異なっている階層のツリーデータ及びそのバージョン情報を更新する。
【００６２】
ツリー更新部１５は、データ操作部１２により実行されるデータアクセス処理とは非同期に、所定の周期で、定期的に、当該バージョン確認及びツリー構造データの更新を実行することが望ましい。このようにすれば、値域変更の全ノードへの伝達時間を短縮することができ、ひいては、ツリー探索部１３が、不適切なノード１１を特定する状況を減らすことができるため、これによるデータアクセス時間の増加を抑えることができる。
【００６３】
バージョン比較部１６は、他のノードから送られる、階層Ｌのツリーデータのためのバージョン確認要求に応じて、このバージョン確認要求に含まれるバージョン情報を、ノード１１が持つ階層（Ｌ−１）のツリーデータのバージョン情報とそれぞれ比較する。バージョン比較部１６は、バージョンが異なる階層（Ｌ−１）のツリーデータを各ツリーノードのバージョン情報と共にその要求元の他のノードへ返信する。
【００６４】
〔動作例〕
以下、第１実施形態におけるデータサーバ１０の動作例について図７から図１０を用いて説明する。なお、以下の説明では、各ノードにおける値域情報の管理形態として、上記管理形態６、即ち、自ノードとＳｕｃノードとに関する値域の始点及び終点の両方が管理される形態が用いられる。
【００６５】
図７は、第１実施形態におけるツリー生成部１４の動作例を示すフローチャートである。ツリー生成部１４は、任意のノード１１（対象ノード１１）生成対象の属性及び階層が指定された生成要求を受けると、生成対象の属性を特定し（Ｓ５１）、指定された階層に応じて、次のように動作する（Ｓ５２）。
【００６６】
ツリー生成部１４は、指定された階層が０の場合、値域格納部２３に格納される値域情報に基づいて、対象ノード１１の階層０のツリーデータにおける根ツリーノードの各エントリを生成する。ツリー生成部１４は、第１エントリには、対象ノード１１の値域始点と、対象ノード１１を特定し得るデータへのポインタとを設定する（Ｓ５３）。
【００６７】
次に、ツリー生成部１４は、対象ノード１１の階層０のツリーデータにおける根ツリーノードの第２エントリを生成する（Ｓ５４）。ツリー生成部１４は、第２エントリには、対象ノード１１のＳｕｃノードの値域始点と、対象ノード１１のＳｕｃノードのノード特定データへのポインタとを設定する。
【００６８】
次に、ツリー生成部１４は、対象ノード１１の階層０のツリーデータにおける根ツリーノードの第３エントリを生成する（Ｓ５５）。ツリー生成部１４は、第３エントリには、対象ノード１１のＳｕｃノードの値域終点と、値無し（Ｎｕｌｌ）とを設定する。
【００６９】
ツリー生成部１４は、指定された階層が１の場合、まず、リンクテーブル１９を参照して対象ノード１１のリンク先ノードｍを特定する（Ｓ６１）。複数のリンク先ノードが存在する場合には、その中の１つがリンク先ノードｍとして特定される。ｍの初期値は１である。
【００７０】
ツリー生成部１４は、階層１のツリーデータにおける根ツリーノードの第ｍエントリを生成する（Ｓ６２）。ツリー生成部１４は、第ｍエントリには、リンク先ノードｍの値域起点と、そのリンク先ノードｍのノード特定データへのポインタとを設定する。このとき、ツリー生成部１４は、リンクテーブル１９からリンク先ノードｍの通信アドレスを取得し、この通信アドレスを用いて当該リンク先ノードｍからその値域起点及びそのノード特定データを取得する。
【００７１】
ツリー生成部１４は、全リンク先ノードについて上述の（Ｓ６１）及び（Ｓ６２）をそれぞれ実行する（Ｓ６６）。
【００７２】
ツリー生成部１４は、そのリンク先ノードｍが最後のリンク先ノードであれば（Ｓ６３；ＹＥＳ）、第（ｍ＋１）エントリを生成し（Ｓ６４）、更に、第（ｍ＋２）エントリを生成する（Ｓ６５）。具体的には、ツリー生成部１４は、第（ｍ＋１）エントリには、リンク先ノードｍの値域終点と、そのリンク先ノードｍのＳｕｃノードのノード特定データへのポインタとを設定する（Ｓ６４）。更に、ツリー生成部１４は、第（ｍ＋２）エントリには、リンク先ノードｍのＳｕｃノードの値域終点を設定する（Ｓ６５）。上述の通り、リンク先ノードｍの値域終点、リンク先ノードｍのＳｕｃノードのノード特定データ、リンク先ノードｍのＳｕｃノードの値域終点は、リンク先ノードｍから取得される。ツリー生成部１４は、最後のエントリのポインタには、値無し（Ｎｕｌｌ）を設定する。
【００７３】
ツリー生成部１４は、指定された階層がＬ（Ｌは２以上）の場合、上述の（Ｓ６１）と同様に、対象ノード１１のリンク先ノードｍを特定する（Ｓ５６）。続いて、ツリー生成部１４は、そのリンク先ノードｍに階層（Ｌ−１）のツリーデータを要求し、この要求に応じて、当該リンク先ノードｍから階層（Ｌ−１）のツリーデータを取得する（Ｓ５７）。このときも上述のように、リンク先ノードｍの通信アドレスがリンクテーブル１９から取得される。
【００７４】
ツリー生成部１４は、取得されたツリーデータから、階層Ｌのツリーデータの根ツリーノードの或るポインタで特定されるツリーノード以下を生成する（Ｓ５８）。即ち、ツリー生成部１４は、その取得されたツリーデータに基づいて、２段目以降のツリーノードを生成する。取得されたツリーデータが２段のツリーノードから形成去れている場合には、ツリー生成部１４は、根ツリーノードに、その２段のツリーデータを接続する。
【００７５】
続いて、ツリー生成部１４は、階層Ｌのツリーデータの根ツリーノードの第ｍエントリを生成する（Ｓ５９）。ツリー生成部１４は、第ｍエントリには、取得されたツリーデータの根ツリーノードの第１エントリに設定されている値域境界値と、取得されたツリーデータの根ツリーノードから生成されたツリーデータへのポインタとを設定する。この時、第ｍエントリ以外のツリーと重複した情報は適宜削除しても良い。
【００７６】
ツリー生成部１４は、全リンク先ノードについて上述の（Ｓ５６）、（Ｓ５７）、（Ｓ５８）及び（Ｓ５９）をそれぞれ実行する（Ｓ６０）。ツリー生成部１４は、階層Ｌのツリーデータの根ツリーノードの最後のリンクについては、ツリーデータの根ツリーノードの最後のエントリに設定されている値域終点と、ポインタが値無し（Ｎｕｌｌ）であるエントリを設定する。
【００７７】
上述の図７の例では、階層１のツリーデータの生成工程と階層Ｌ（Ｌ≧２）のツリーデータの生成工程とを区別して表記されたが、階層１のツリーデータについても階層Ｌのツリーデータと同様の工程で生成されるようにしてもよい。この場合、工程（Ｓ５２）では、階層が０か、Ｌ（Ｌ≧１）かが判定され、階層１が指定された場合には、工程（Ｓ５６）以降が実行されるようにすればよい。
【００７８】
図８は、第１実施形態におけるツリー更新部１５及びバージョン比較部１６の動作例を示すフローチャートである。各ノード１１（以下の説明では対象ノード１１）は、所定タイミングで、ツリー更新部１５に次のように動作させる。
【００７９】
ツリー更新部１５は、まず、リンクテーブル１９を参照して対象ノード１１のリンク先ノードｍを特定する（Ｓ７０）。複数のリンク先ノードが存在する場合には、その中の１つがリンク先ノードｍとして特定される。ｍの初期値は１である。
【００８０】
続いて、ツリー更新部１５は、対象ノード１１の階層２以上の各階層について、根ツリーノードに含まれるリンク先ノードｍに対応付けられたポインタで特定されるツリーノードのバージョン情報をそれぞれ取得する（Ｓ７１）。該当ポインタで特定される子ツリーノードが枝ツリーノードである場合、その子ツリーノード及びその配下の全ツリーノードのバージョン情報が取得されてもよい。
【００８１】
ツリー更新部１５は、階層２以上の各階層について取得された各バージョン情報をそれぞれ含むバージョン確認要求をリンク先ノードｍに送信する（Ｓ７２）。このときも上述のように、リンク先ノードｍの通信アドレスがリンクテーブル１９から取得される。
【００８２】
リンク先ノードｍは、このバージョン確認要求を受信すると（Ｓ８１）、バージョン比較部１６に次のように動作させる。バージョン比較部１６は、バージョン確認要求に含まれる各階層ｎのバージョン情報を１段下の各階層（ｎ−１）のバージョン情報とそれぞれ比較する（Ｓ８２）。例えば、バージョン確認要求に含まれる階層２のバージョン情報は、リンク先ノードｍの階層１のバージョン情報と比較され、バージョン確認要求に含まれる階層３のバージョン情報は、リンク先ノードｍの階層２のバージョン情報と比較される。
【００８３】
バージョン比較部１６は、上記比較（Ｓ８２）の結果、バージョンが異なる階層におけるツリーデータ（バージョン情報を含む）を、リンク先ノードｍが持つ値域情報（リンク先ノードｍの階層０のツリーデータに相当）と共に、対象ノード１１に返信する（Ｓ８３）。ここで、バージョンが異なる階層のツリーデータが複数のツリーノードから形成されている場合には、それら複数のツリーノードに関するデータとバージョン情報が返信される。このとき、バージョン確認要求に含まれる階層ｎとリンク先ノードｍの階層（ｎ−１）との間でバージョンが異なる場合、階層ｎのツリーデータ及びバージョン情報として、リンク先ノードｍの階層（ｎ−１）のツリーデータ及びバージョン情報が返信に設定される。
【００８４】
対象ノード１１は、この返信を受信すると（Ｓ７３）、ツリー更新部１５に次のように動作させる。まず、ツリー更新部１５は、階層１のツリーデータに関し、リンク先ノードｍが持つ値域情報に対応するエントリに設定される値域境界値と、返信に含まれるリンク先ノードｍが持つ最新の値域情報とを比較する。ツリー更新部１５は、それらが異なっていれば、当該エントリの値域境界値を最新の値域情報で更新し、階層１のツリーデータのバージョン情報を繰り上げる（Ｓ７４）。
【００８５】
次に、ツリー更新部１５は、その返信を参照して、バージョンが異なる階層が存在するか否かを判断する（Ｓ７５）。
【００８６】
ツリー更新部１５は、対象ノード１１のバージョンが異なる階層における、リンク先ノードｍに対応する部分ツリーデータを、その返信に含まれる新ツリーデータで更新する（Ｓ７６）。例えば、ツリー更新部１５は、階層２のバージョンが異なる場合には、対象ノード１１の階層２のツリーデータの中の、根ツリーノードに含まれるリンク先ノードに対応するポインタで特定される子ツリーノード以下を、その返信に含まれるツリーデータで更新する。このとき、該当子ツリーノード以下の各ツリーノードのバージョン情報も更新される。また、階層２の根ツリーノードの、リンク先ノードに対応するエントリの値域境界値も更新される。
【００８７】
更に、ツリー更新部１５は、バージョンが異なる階層の根ツリーノードのバージョン情報を繰り上げる（Ｓ７７）。ツリー更新部１５は、全リンク先ノードについて上述の（Ｓ７０）から（Ｓ７７）をそれぞれ実行する（Ｓ７８）。
【００８８】
上述の図８では、対象ノード１１の階層２以上の各階層を対象に処理される例が示されたが、階層１以上の各階層を対象に処理されるようにしてもよい。この場合には、工程（Ｓ７１）では、ツリー更新部１５は、対象ノード１１の階層１以上の各階層について、根ツリーノードに含まれるリンク先ノードｍに対応付けられたポインタで特定されるツリーノードのバージョン情報をそれぞれ取得するようにすればよい。工程（Ｓ８３）では、バージョン比較部１６は、リンク先ノードｍの値域境界値を返信しなくてもよく、ツリー更新部１５は、工程（Ｓ７４）を実行しなくてもよい。
【００８９】
図９は、第１実施形態におけるツリー探索部１３の動作例を示すフローチャートである。ツリー探索部１３は、データ操作部１２から、対象属性と、属性値又は属性値の範囲とを取得すると、任意のノード１１（以降、対象ノード１１と表記）のツリー格納部２０から対象属性に関するツリー構造データを取得する（Ｓ９０）。ツリー探索部１３は、階層Ｌに初期値０を設定する（Ｓ９１）。階層０は最下位階層であり、階層Ｌ（１以上）がそれより上段の階層である。
【００９０】
ツリー探索部１３は、取得されたツリー構造データの中に、階層Ｌのツリーデータが存在するか否かを判定する（Ｓ９２）。ツリー探索部１３は、階層Ｌのツリーデータが存在しない場合（Ｓ９２；ＮＯ）、ツリー生成部１４に、対象ノード１１の階層Ｌのツリーデータの作成を要求する（Ｓ９３）。この要求に応じて、上述のように、対象ノード１１の階層Ｌのツリーデータが生成される。
【００９１】
ツリー探索部１３は、階層Ｌのツリーデータを取得し（Ｓ９４）、その階層Ｌのツリーデータから、対象属性の属性値又は属性値の範囲に対応する値域を持つノード（宛先ノード）を特定する（Ｓ９５）。この宛先ノードの特定処理の詳細については図１０を用いて後述する。
【００９２】
ツリー探索部１３は、宛先ノードの特定に成功すると（Ｓ９６；ＹＥＳ）、宛先ノードに関する情報を出力する（Ｓ９７）。この出力された情報に基づいて、データ操作部１２が、その宛先ノードに、データアクセス要求を転送する。
【００９３】
一方で、宛先ノードの特定に失敗すると（Ｓ９６；ＮＯ）、ツリー探索部１３は、階層Ｌを１増加させ（Ｌ＝Ｌ＋１）（Ｓ９８）、増加された階層Ｌに関し処理（Ｓ９２）以降を実行する。以降、ツリー探索部１３は、宛先ノードが特定されるまで、探索対象の階層を順次上げていく。なお、一つのデータサーバ１０（物理サーバ）上に複数の仮想ノード（論理ノード１１）を設ける場合には、一つの階層において全ての仮想ノードの宛先ノード特定に失敗すると、階層Ｌを１増加させるようにしてもよい。
【００９４】
図１０は、第１実施形態におけるツリー探索部１３の、階層Ｌのツリーデータから宛先ノードを特定する動作の例を示すフローチャートである。即ち、図１０には、図９の（Ｓ９５）の詳細動作が示される。まず、ツリー探索部１３は、階層Ｌのツリーデータの根ツリーノードを特定する（Ｓ１００）。まず、階層Ｌには初期値０（最上位層を示す）が設定される（Ｓ１０１）。
【００９５】
続いて、ツリー探索部１３は、特定されたツリーノード（ここでは根ツリーノード）の第１エントリの値域境界値を基準値とした、対象属性の属性値空間における循環順序に基づいて、特定されたツリーノードの中から、対象属性の属性値又は属性値の範囲に対応する値域を包含するエントリを特定する（Ｓ１０２）。この循環順序は、上述した通り、ＩＤリングに対応して属性値空間が持つリング構造と対応する。
【００９６】
ツリー探索部１３は、その特定されたツリーノードからエントリを特定することができない場合には（Ｓ１０３；ＮＯ）、宛先ノードの特定失敗を決定する（Ｓ１０８）。一方で、ツリー探索部１３は、エントリを特定することに成功した場合には（Ｓ１０３；ＹＥＳ）、特定されたエントリのポインタがノード特定データを指すか否かを判定する（Ｓ１０４）。
【００９７】
ツリー探索部１３は、ノード特定データを指す場合には（Ｓ１０５；ＹＥＳ）、そのポインタが指すノード特定データを取得する（Ｓ１０７）。この処理が宛先ノードの特定に対応する。
【００９８】
ツリー探索部１３は、ノード特定データを指さない場合（Ｓ１０５；ＮＯ）、即ち、そのポインタが子ツリーノードを指す場合には、そのポインタが指す子ツリーノードを特定する（Ｓ１０６）。ツリー探索部１３は、この特定されたツリーノードに関し、（Ｓ１０２）以降を実行する。
【００９９】
〔第１実施形態の作用及び効果〕
上述したように、第１実施形態では、対象属性の属性値又は属性値の範囲に関するデータアクセス要求に応じて、ノード１１は、自ノード１１のツリー格納部２０に格納されるツリー構造データを用いて、そのデータアクセス要求の対象となる部分データを格納する宛先ノードを特定する。これにより、第１実施形態によれば、データアクセス要求を或るノード１１で特定された宛先ノードに直接に転送することができるため、データアクセス要求のノード間転送に伴うデータアクセス時間の増加を防ぐことができる。
【０１００】
更に、第１実施形態では、各ノード１１が持つ、値域情報が反映されたツリー構造データは、各ノード１１のリンク先ノードから取得されるツリーデータにより自動生成される。また、第１実施形態では、ツリー構造データに含まれる各ツリーノードにはそれぞれバージョン情報が付されており、各ノード１１が、データアクセス処理のバックグラウンドにより、所定のタイミングで、このバージョン情報を用いて自身のツリー構造データのバージョン確認及び更新を行う。このとき、各ノード１１は、値域変更を反映した最新のツリーデータをリンク先ノードから取得する。
【０１０１】
このように、第１実施形態によれば、値域情報がノード１１とリンク先ノードとの間でやりとりされるため、値域情報を集中管理するメタデータサーバ等のような特定サーバ群を設ける必要がなく、これにより、特定サーバ群への負荷集中を防ぐことができる。また、特定サーバ群を設けた場合、それらが単一障害点とならないようにシステムを堅牢化させて管理する必要が生じるところ、上述のような構成により、特定サーバ群を設けることに伴う、障害対策や運用保守の労力を低減させることができる。第１実施形態によれば、各ノード１１で個別に生成される値域情報が何らかの理由で消失したとしても、リンク先ノードから再度取得することで復元可能であるため、各ノード１１に関する障害対策や運用保守の労力も低減させることができる。
【０１０２】
更に、第１実施形態では、各ノード１１が、自律的にかつデータアクセス処理とは別に、値域情報（ツリー構造データ）を最新の状態に保つように動作するため、宛先ノードとして特定されたノード１１に対象の属性値又は属性値の範囲に対応する部分データが格納されていないといったアクセスミスを減らすことができる。即ち、第１実施形態によれば、値域変更の全ノードへの伝達時間を短縮することでデータアクセス実行時のアクセスミスを減らすことができ、ひいては、データアクセス時間の増加を低減させることができる。
【０１０３】
また、第１実施形態では、値域情報を反映するツリー構造データが、ノードＩＤのリンク関係と同様の構造を持つように形成され、値域情報（ツリー構造データ）のバージョン確認や取得は、各ノード１１と各ノード１１のリンク先ノードとの間で行われる。これにより、第１実施形態によれば、各ノード１１にとって、所定時間にバージョン確認（値域変更確認）を行う回数は、各ノード１１のリンク数となるため、各ノード１１における値域変更確認のための負荷も抑制することができる。
【０１０４】
また、第１実施形態では、各ノード１１が所定時間毎にバージョン確認を行うだけでなく、データアクセスの実行時にツリー構造データの更新を行っても良い。データアクセスの実行時とは、ツリー構造データを参照して、あるキー値に対応するノードＩＤを取得し、そのノードにアクセス後に、既に値域が古くなっておりアクセスが無効と失敗した時である。この時、そのツリー構造データ内の値ツリーノードから葉ツリーノードへの経路と対応するリンクに関して、ツリー構造の更新を行うこともできる。
【０１０５】
［第２実施形態］
第１実施形態では、ノードＩＤに基づくリンク関係の構築の手法は限定されていなかった。第２実施形態では、当該リンク関係の構築手法として新たな手法が適応され、これに関連するシステムパラメータの調整処理が加えられる。第２実施形態における分散システム１の構成は、第１実施形態と同様であり、データサーバ１０の処理が第１実施形態と異なる。以下、第２実施形態におけるデータサーバ１０について第１実施形態と異なる内容を中心に説明し、第１実施形態と同様の内容については適宜省略する。
【０１０６】
〔装置構成〕
図１１は、第２実施形態におけるデータサーバ１０の処理構成例を概念的に示す図である。第２実施形態におけるデータサーバ１０は、第１実施形態の構成に加えて、パラメータ設定部３１を更に有する。
【０１０７】
リンク生成部１７は、新たなアルゴリズム（以降、拡張Ｋｏｏｒｄｅと表記する）により、ノードＩＤに基づくリンク関係を構築し、その内容をリンクテーブル１９に反映させる。
【０１０８】
周知のＫｏｏｒｄｅでは、各ノード１１が、Ｓｕｃノードと、各ノード１１のＩＤをパラメータｋ（自然数）倍して得られる値に対するＰｒｅｄノードと、このＰｒｅｄノードから（ｋ−１）個分のＳｕｃノードとそれぞれリンクを確立する。周知のＫｏｏｒｄｅでは、全ノード１１のリンク先ノードの数が固定値ｋで決められていた。周知のＫｏｏｒｄｅは、ｄｅ  Ｂｒｕｉｊｎグラフのノードでありつつ、そのＩＤがノードとして論理的に存在していないノードを不在ノード（Imaginary Note）とし、この不在ノードはそのＰｒｅｄノードが管理することとしており、必要となるリンク数の分布の期待値を取る。即ち、本発明が、ｄｅ  Ｂｒｕｉｊｎグラフのノード間でホップするために必要なリンク数の分布を導出しているが、周知の手法は、当該分布の期待値のみをとって、リンク先ノード数を固定的にｋとしていたと解釈できる。そのため、周知のＫｏｏｒｄｅでは、必要な次数（リンク先ノードの数）より余分な次数が存在する場合もあれば、必要な次数より少ない場合もあり、不足する場合は、Ｓｕｃノードへのルーティング（転送）により補われていた。また、リンクのさせ方とは独立に、周知のＫｏｏｒｄｅは、ｋ進数と対応する（ｌｏｇ２ｋ）ビット数のシフト演算を行うため、ｋは２の指数乗に限られていた。
【０１０９】
そこで、第２実施形態における拡張Ｋｏｏｒｄｅでは、各ノード１１におけるリンク先ノードの数（次数）を確率的な次数とする。具体的には、拡張Ｋｏｏｒｄｅでは、各ノード１１が、自ノードのＩＤをパラメータｋ（２以上の整数）倍などして得られる値に対するＰｒｅｄノードである第１リンク先ノードと、自ノードのＳｕｃノードのＩＤをパラメータｋ倍などして得られる値に対するＰｒｅｄノードである第２リンク先ノードと、ＩＤリングにおいて第１リンク先ノードと第２リンク先ノードとの間に存在するリンク先ノードとに対してそれぞれリンクを確立する。これにより、拡張Ｋｏｏｒｄｅでは、各ノード１１に対し決定されるリンク先ノードの数（次数）は、パラメータｋで制御される確率分布となり、多くのノード１１はパラメータｋより小さい次数を持ち、一部のノード１１はパラメータｋより大きな次数を持つことになる。但し、次数の期待値はｋ＋１となる。なお、上述の「ＩＤをパラメータｋ倍などして得られる値」とは、説明の便宜のために、（ＩＤ×ｋ）を２ｂ（ＩＤ空間のサイズ）で割った余りの意味を簡略化した表現である。他の箇所においても、「（ＩＤ×ｋ）を２ｂ（ＩＤ空間のサイズ）で割った余り」の意味を示す表現として、「ＩＤをパラメータｋ倍して得られる値」と簡略化される場合がある。
【０１１０】
ツリー更新部１５は、ポーリング間隔Ｔの値を保持しており、このポーリング間隔Ｔにより、当該バージョン確認を実行する。ポーリング間隔Ｔは、各ノードの次数に反比例する値であっても良く、システム全体に渡って同一の値でも良い。反比例する場合には、各ノードのポーリング負荷が均一になるというメリットがある。システム全体に渡って、同一の値である場合には、値域変更が起こってから、各ノードのツリーが本来の値域に反映されるまでの時間を一定以内に制約することができるようになる。
【０１１１】
パラメータ設定部３１は、或るノード１１における値域の変更が分散システム１内の全ノード１１に伝達されるまでの最大時間ｗｍａｘ、各ノード１１により実行されるバージョン確認の単位時間負荷λ、実行時のツリー更新に関わるツリーの最大高さｈｍａｘなどに対する、システム要求（制約）を満たすように、パラメータであるｋ及びＴの少なくとも一方を設定する。システムの要求とは、或る値以下であるべきという上限値制約の設定や、なるべく小さい負荷にしたいといった最小化要求である。また、最大高さｈｍａｘには、ツリーの高さ１段あたりにかかる１ホップの通信遅延及び処理時間（τ０と表記する）がシステム要求（制約）としてかかることになる。ここで、更新にかかる実行時の遅延は、（ｈｍａｘ×τ０）時間となり、τ０は、予め決められた値となる。単位時間負荷λは、例えば、各ノードが実行する１秒毎のバージョン確認回数を示す。以降、更新にかかる実行時の遅延を単に実行時遅延と表記し、ツリーの高さ１段あたりにかかる１ホップの通信遅延及び処理時間を１ホップ辺りの実行遅延と表記する。
【０１１２】
パラメータｋ及びＴの設定方式としては次のような各方式が考えられる。第１のパラメータ設定方式では、Ｔが全ノード１１（ノード総数Ｎ）で同じであり、上記最大時間ｗｍａｘに対する制約時間ｗｃが与えられると見なす。第２のパラメータ設定方式では、Ｔが全ノードで異なってもよく、単位時間負荷λに対する制約負荷λｃに基づいてノード毎のポーリング間隔Ｔが決定される。パラメータ設定部３１は決定されたポーリング間隔Ｔでツリー更新部１５が保持する値を更新する。一方、第３のパラメータ設定方式では、ツリーの最大高さｈｍａｘに対するツリーの高さ制約ｈｃに基づいて、パラメータｋを決定する。
【０１１３】
なお、上記制約時間ｗｃ、上記制約負荷λｃ、及び、ツリーの高さ制約ｈｃは、他の装置から通信装置７を介して取得されてもよいし、入出力Ｉ／Ｆ４に接続されるユーザインタフェース装置がユーザにより操作されることにより入力されてもよいし、可搬型の記憶媒体から入出力Ｉ／Ｆ４を介して取得されてもよい。
【０１１４】
パラメータ設定部３１は、第１のパラメータ設定方式では、取得された制約時間ｗｃと、ノード１１の総数Ｎと、リンク生成部１７により用いられるパラメータｋとを用いて、下記（式１）を満足するポーリング間隔Ｔを算出する。また、パラメータ設定部３１は、第２のパラメータ設定方式では、取得された制約負荷λｃと、リンク生成部１７により取得される、そのノードのリンク先ノードの数（次数）Ｄを用いて、下記（式２）を満足するポーリング間隔Ｔを算出する。パラメータ設定部３１は、第３のパラメータ設定方式では、取得されたツリーの高さ制約ｈｃを用いて、下記（式３）によりパラメータｋを設定する。なお、上述した１ホップ辺りの実行時遅延（τ０）と、実行時遅延の制約から、ツリーの高さ制約ｈｃが算出されても良い。
【数１】
2013171953.tif 000003
【０１１５】
以降では、ポーリング間隔Ｔは、ノード全体に渡って同一の値である、又は、ノード毎に異なる場合には、上記（式２）で設定されたポーリング間隔の分布から得られる値であるとする。例えば、期待値は（１＋ｋ）／λｃとなる。ここで、上記単位時間負荷λと、最大時間ｗｍａｘとは、各ノード１１のポーリング間隔Ｔと、パラメータｋに応じて変化する。上述のように出力次数の期待値はｋ＋１であることから、単位時間負荷λは下記（式４）のように示すことができる。また、値域の変更が全てのノード１１に行きわたるまでにかかる時間ｗの期待値は下記（式５）で示される。最大時間ｗｍａｘは、下記（式６）のように示すことが出来る。
【数２】
2013171953.tif 000004
【０１１６】
上記（式５）の右辺は、次のように導出される。即ち、各ノード１１が実行する各バージョン確認が互いに同一かつ独立に一定のタイミングで行われ、それが（ｌｏｇｋＮ）段存在する場合、値域変更の伝搬に要する時間ｗは、（ｌｏｇｋＮ）個の一様分布Ｕ（０，Ｔ）に従う確率変数の和であるＩｒｗｉｎ−Ｈａｌｌ分布に従う。そして、上記（式５）の右辺は、その時間ｗの期待値から導出される。この分布の最大値として、上記（式６）が得られる。
【０１１７】
〔第２実施形態の作用及び効果〕
第２実施形態では、各ノード１１のリンク生成部１７は、拡張Ｋｏｏｒｄｅアルゴリズムにより、各ノード１１のリンク先ノードを決定する。拡張Ｋｏｏｒｄｅでは、上述したように、各ノード１１におけるリンク先ノードの数（次数）が確率的に決定されるものとした。これにより、周知のＫｏｏｒｄｅでは、ノードＩＤがハッシュにより生成されることに起因する確率的な要素が、各ノード１１のリンク数（定数）には表れず、Ｓｕｃノードとそれ以外のノードとの間の利用割合に表れていたのに対して、拡張Ｋｏｏｒｄｅでは、各ノード１１のリンク数が確率的になる。
【０１１８】
従って、拡張Ｋｏｏｒｄｅを用いた第２実施形態では、特に同一のデータサーバ１０に複数の仮想ノード（論理ノード１１）を設定する場合、一つのデータサーバ１０にはリンク数の多いノード１１とリンク数の少ないノード１１が存在することになり、各ノード１１でのツリー構造データのバージョン確認の負荷に差が生じることになる。しかしながら、各データサーバ１０に所定数のノード１１を実現させることにより、リンク数の多いノード１１とリンク数の少ないノード１１が同一のデータサーバ１０で実現される可能性が高まり、結果として、各データサーバ１０のバージョン確認負荷を実質的に一定とすることができる。
【０１１９】
また、周知のＫｏｏｒｄｅでは、一つのノードが他のノードにリンクする数（次数、特に出力次数）が一定であったが、一つのノードが他のノードからリンクされる数（入力次数）は、確率的でばらつきがあった。拡張Ｋｏｏｒｄｅでは、このばらつきが存在するものの、周知のＫｏｏｒｄｅよりもそのばらつきは小さく、負荷分散されやすい。出力次数のばらつきであれば、上述の第２のパラメータ設定方式に示されるように、ポーリング間隔Ｔなどの他の要因を考慮することにより負荷の均一化を図ることは可能である。しかしながら、「リンクされてしまう数」である入力次数は、上述のように負荷の均一化を図ることが難しいため、拡張Ｋｏｏｒｄｅのように、次数のばらつきが少ないことは望ましい性質である。
【０１２０】
また、第２実施形態では、拡張Ｋｏｏｒｄｅで決定されたリンク関係に応じて、階層１以上のツリーデータが生成されるため、バージョン確認要求の送信先を、Ｓｕｃノードを除外してリンク先ノードのみとすることができ、値域情報を反映するツリー構造データの管理を容易にすることができる。すなわち、各ノードからｈホップ先のノード群へのパスをバランスした木構造とすることができる。
【０１２１】
更に、第２実施形態では、値域変更の最大伝達時間ｗｍａｘ及びバージョン確認の単位時間負荷λに対する制約時間τｃ及び制約負荷λｃといったシステム要求（制約）が与えられると、それらを実現するポーリング間隔Ｔが決定され、そのポーリング間隔Ｔにより、ツリー構造データのバージョン確認、即ち、値域変更確認が各ノード１１で行われる。よって、第２実施形態によれば、各ノード１１における値域情報のバージョン確認処理により、予期せぬ負荷が発生するのを防ぐことができる。
【０１２２】
［第３実施形態］
上述の各実施形態では、部分データを格納するノード１１を実現する各データサーバ１０が上述のような処理を実行していたが、部分データを格納せずノード１１を実現しない装置において、上述のような処理が実行されてもよい。第３実施形態における分散システム１は、部分データを格納せずノード１１を実現しない装置として、データ操作クライアント５０を更に有する。以下、第３実施形態の分散システム１について、第１実施形態と異なる内容を中心に説明し、第１実施形態と同じ内容については適宜省略する。
【０１２３】
〔システム構成〕
図１２は、第３実施形態における分散システム１の構成例を概念的に示す図である。第３実施形態における分散システム１は、第１実施形態の構成に加えて、複数のデータ操作クライアント（以降、単にクライアントとも表記する）５０を更に有する。クライアント５０は、ネットワーク９を介してデータサーバ１０と通信可能に接続される。クライアント５０は、データサーバ１０と同様に、アプリケーションや他の端末からの要求に応じて、データサーバ１０に格納されるデータにアクセスし、所望のデータを取得する。なお、クライアント５０のハードウェア構成もデータサーバ１０と同様であり、本実施形態は、クライアント５０のハードウェア構成を限定しない。
【０１２４】
〔装置構成〕
図１３は、第３実施形態におけるデータ操作クライアント５０の処理構成例を概念的に示す図である。図１３に示されるように、クライアント５０は、データ操作部１２、ツリー探索部１３、ツリー生成部１４、ツリー更新部１５、バージョン比較部１６、リンク生成部１７、リンクテーブル１９、ツリー格納部２０等を有する。これら各処理部は、基本的には、第１実施形態と同様である。
【０１２５】
リンク生成部１７は、複数のデータサーバ１０で実現される複数のノード１１の中の任意の１以上のノード１１と、クライアント５０とのリンク関係を構築し、このリンク関係をリンクテーブル１９に反映する。全てのノードが、他の全ノードに関する値域を保持しているため、クライアント５０は、任意の１つのノードのみのリンク関係を持つようにしてもよい。クライアント５０は、各ノード１１のノードＩＤで構築されるＩＤ空間には参加しない、即ち、各ノード１１から自発的にアクセスされる対象ではないため、クライアント５０におけるリンク関係の構築手法は何ら制限されない。
【０１２６】
ツリー格納部２０に格納されるツリー構造データは、クライアント５０がＩＤリング上における隣接ノードを持たないため、階層０のツリーデータを持たない。階層１以上の各階層のツリーデータについては、第１実施形態と同様である。これにより、ツリー生成部１４は、階層０のツリーデータを生成しないことを除き、第１実施形態と同様である。
【０１２７】
〔第３実施形態の作用及び効果〕
このように、第３実施形態では、部分データを格納せずノード１１を実現しないクライアント５０において、第１実施形態と同様の処理が行われる。よって、第３実施形態におけるクライアント５０がデータアクセス要求を取得した場合でも、第１実施形態と同様の作用及び効果を奏することができる。
【０１２８】
以下に実施例を挙げ、上述の各実施形態を更に詳細に説明する。本発明は以下の各実施例から何ら制限を受けない。
【実施例１】
【０１２９】
上述の第１実施形態の分散システム１において拡張Ｋｏｏｒｄｅが利用される形態の例を実施例１として以下に説明する。実施例１では、ノードＩＤのＩＤ空間が持つ有限範囲は、［０，１０２４）であり、分散システム１内で９個のノード１１が実現される。また、説明を簡単にするために、１つの属性に対する処理のみが説明される。以降、或るＩＤ値を持つノードをノード（ＩＤ値）と表記する。【０１３０】
図１４は、実施例１におけるＩＤリングと値域情報との関係を概念的に示す図である。図１４の例によれば、ノード（７０）は（１０，２５］の値域を持ち、ノード（８０３）は（１７５，２５５］及び（０，３］の値域を持つ。【０１３１】
各ノード１１のリンク生成部１７は、拡張Ｋｏｏｒｄｅアルゴリズムにより、自ノード１１のリンク先ノードを決定する。実施例１では、拡張Ｋｏｏｒｄｅアルゴリズムで利用されるパラメータｋが２に設定される。【０１３２】
図１５は、実施例１において生成されるリンク関係の一部を示す図である。ノード（４１３）は、上述の第１リンク先ノードとしてのノード（８０３）と、上述の第２リンク先ノードとしてのノード（７０）と、ＩＤリングにおいてそれらノードの間に存在する上述の第３リンク先ノードとしてのノード（９８０）とリンクを張る。ノード（８０３）は、ノード（４１３）のＩＤ（４１３）をパラメータｋ（２）倍して得られる値（８２６）に対するＰｒｅｄノードである。ノード（７０）は、ノード（４１３）のＳｕｃノード（５５１）のＩＤ（５５１）をパラメータｋ（２）倍して得られる値（７８＝１１０２−１０２４）のＰｒｅｄノードである。【０１３３】
ノード（８０３）は、ノード（５５１）からノード（８０３）までの各ノードとリンクを持つ。ノード（５５１）は、ノード（８０３）のＩＤ（８０３）をパラメータｋ（２）倍して得られる値（５８２＝１６０６−１０２４）のＰｒｅｄノードである。ノード（８０３）は、ノード（８０３）のＳｕｃノード（９８０）のＩＤ（９８０）をパラメータｋ（２）倍して得られる値（９３６＝１９６０−１０２４）のＰｒｅｄノードである。なお、第２リンク先ノードとしてのノード（８０３）は、自ノードであるため、そのリンク情報は格納されない。ノード（５５１）は、ノード（７０）とノード（１２９）とリンクを張る。また、ノード７０は、ノード（１２９）とノード（２５０）とリンクを張る。【０１３４】
このようなリンク関係によれば、ノード（５５１）は、２ホップでノード（７０）からノード（２５０）まで到達する。このようなリンク関係が、各ノード１１のリンク生成部１７により生成され、各ノード１１のリンクテーブル１９に格納される。【０１３５】
このようなリンク関係が構築されている状態で、データ操作部１２が対象属性の属性値（３５）へのデータアクセス要求を取得したと仮定して、以下、実施例１におけるツリー探索部１３及びツリー生成部１４の動作について図７、図９及び図１０のフローチャートを参照しながら説明する。このとき、データ操作部１２は、ツリー探索部１３に対して、ノード（４１３）を対象ノードとして、その属性値（３５）を含む部分データを格納するノード１１を特定するように指示すると仮定する。【０１３６】
ツリー探索部１３は、対象属性の属性値（３５）を取得し（Ｓ９０）、階層Ｌに初期値０を設定し（Ｓ９１）、階層０のツリーデータが存在するか否かを判定する（Ｓ９２）。ツリー探索部１３は、階層０のツリーデータが存在しないため（Ｓ９２；ＮＯ）、ツリー生成部１４に、ノード（４１３）の階層０のツリーデータの生成を要求する（Ｓ９３）。【０１３７】
ところで、実施例１では、各ノードにおける値域情報の管理形態として、上記管理形態６、即ち、自ノードとＳｕｃノードとに関する値域の始点及び終点の両方が管理される形態が用いられる。よって、このとき、ノード（４１３）は、値域格納部２３に、自ノード（４１３）の値域の始点（５３）及び終点（６７）、並びに、Ｓｕｃノード（５５１）の始点（６７）及び終点（１３８）を持つ。【０１３８】
ツリー生成部１４は、自ノード（４１３）の値域始点（５３）及び値域終点（６７）、Ｓｕｃノード（５５１）の値域始点（６７）及び値域終点（１３８）に基づいて、以下のような階層０のツリーデータを生成する（Ｓ５３）。
第１エントリ：値域境界値（５３）、ノード（４１３）に関するポインタ
第２エントリ：値域境界値（６７）、ノード（５５１）に関するポインタ
第３エントリ：値域境界値（１３８）、Ｎｕｌｌ【０１３９】
ツリー探索部１３は、この階層０のツリーデータから、属性値（３５）を包含する値域を持つ宛先ノードの特定を試みる（Ｓ９５）。しかしながら、階層０のツリーデータが示す値域は、（５３，１３８］であるため、属性値（３５）は含まれない。よって、ツリー探索部１３は、階層０のツリーデータでは宛先ノードの特定ができないため（Ｓ９６；ＮＯ）、探索対象の階層Ｌを１段上げる（Ｓ９８）。【０１４０】
ツリー探索部１３は、階層１のツリーデータが存在しないため（Ｓ９２；ＮＯ）、ツリー生成部１４に、ノード（４１３）の階層１のツリーデータの生成を要求する（Ｓ９３）。ツリー生成部１４は、リンク先ノード（８０３）の値域始点（１７５）、リンク先ノード（９８０）の値域始点（３）、リンク先ノード（７０）の値域始点（１０）及び値域終点（２５）、リンク先ノード（７０）のＳｕｃノード（１２９）の値域終点（３２）に基づいて、以下のような階層１のツリーデータを生成する（Ｓ６２）。
第１エントリ：値域境界値（１７５）、ノード（８０３）に関するポインタ
第２エントリ：値域境界値（３）、ノード（９８０）に関するポインタ
第３エントリ：値域境界値（１０）、ノード（７０）に関するポインタ
第４エントリ：値域境界値（２５）、ノード（１２９）に関するポインタ
第５エントリ：値域境界値（３２）、Ｎｕｌｌ【０１４１】
ツリー探索部１３は、この階層１のツリーデータから、属性値（３５）を包含する値域を持つ宛先ノードの特定を試みる（Ｓ９５）。しかしながら、階層１のツリーデータが示す値域は、（１７５，３２］であるため、属性値（３５）は含まれない。よって、ツリー探索部１３は、階層１のツリーデータでは宛先ノードの特定ができないため（Ｓ９６；ＮＯ）、探索対象の階層Ｌを更に１段上げる（Ｓ９８）。【０１４２】
ツリー探索部１３は、階層２のツリーデータが存在しないため（Ｓ９２；ＮＯ）、ツリー生成部１４に、ノード（４１３）の階層２のツリーデータの生成を要求する（Ｓ９３）。ツリー生成部１４は、リンク先ノード（８０３、９８０及び７０）から、階層１のツリーデータをそれぞれ取得し（Ｓ５７）、取得されたツリーデータに基づいて、階層２のツリーデータを生成する（Ｓ５８、Ｓ５９）。これにより、階層２のツリーデータの根ツリーノードが次のように生成される。
第１エントリ：値域境界値（６７）、子ツリーノードへのポインタ（リンク先ノード（８０３）に対応）
第２エントリ：値域境界値（１７５）、子ツリーノードへのポインタ（リンク先ノード（９８０）に対応）
第３エントリ：値域境界値（２５）、子ツリーノードへのポインタ（リンク先ノード（７０）に対応）
第４エントリ：値域境界値（６７）、Ｎｕｌｌ【０１４３】
ここで、階層２のツリーデータの根ツリーノードが示す値域（６７，６７］は、全値域をカバーしているため、属性値（５３）を含む。この包含判定は、６７を基準とした循環順序であり、（６７，６７］は（６７，２５５］∪［０，６７］と見なされ、属性値（３５）はこれに含まれる。更に、ツリー探索部１３は、（３２，５３］を値域とするエントリを特定し、そのエントリのポインタを辿り、根ツリーノードの一段下のツリーノードにて、ノード（２５０）のノード特定データへのポインタを特定する（Ｓ１０７）。【０１４４】
これにより、データ操作部１２は、ツリー探索部１３から取得されたノード（２５０）のノード特定データに基づいて、ノード（２５０）の通信アドレスを取得し、その通信アドレスを用いて、ノード（２５０）に属性値（３５）のデータアクセス処理を行う。なお、このようにして生成されるツリー構造データが図１６で示される。図１６は、実施例１において各ノード１１で生成されるツリー構造データの一部を示す図である。【０１４５】
次に、実施例１におけるツリー更新部１５及びバージョン比較部１６の動作例について図８を参照し説明する。ここでは、ノード（２５０）とノード（１２９）との間で負荷分散が行われ、図１７に示されるように値域変更が行われたものと仮定する。図１７は、実施例１における負荷分散の例を概念的に示す図である。この負荷分散により、ノード（１２９）は、値域（２５，３８］を持つ部分データを格納し、ノード（２５０）は、値域（３８，５３］を持つ部分データを格納する。なお、この負荷分散における負荷は、データ格納量であっても、データアクセス頻度であっても良い。また、データサーバ１０辺りの負荷を指標として、論理ノード１１辺りの負荷を均一化しても良い。【０１４６】
ここでは、ツリー更新部１５及びバージョン比較部１６の処理対象がノード（４１３）である場合を例に挙げる。このとき、ノード（４１３）は、図１６に示されるようなツリー構造データを持つと仮定する。ツリー更新部１５は、所定のタイミングで、次のようなバージョン確認処理を行う。【０１４７】
まず、ツリー更新部１５は、ノード（４１３）のリンクテーブル１９を参照することにより、ノード（４１３）のリンク先ノード（８０３、９８０、７０）を認識し、その中の１つのリンク先ノード（８０３）を特定する（Ｓ７０）。続いて、ツリー更新部１５は、ノード（４１３）のツリー構造データ内の階層２の根ツリーノードに設定されているリンク先ノード（８０３）に対応するポインタで特定されるツリーノードのバージョン情報（バージョン１（ver.1））を取得する（Ｓ７１）。ツリー更新部１５は、階層２のバージョン情報（バージョン１）を含むバージョン確認要求をリンク先ノード（８０３）に送信する（Ｓ７２）。【０１４８】
リンク先ノード（８０３）がそのバージョン確認要求を受信すると（Ｓ８１）、バージョン比較部１６が、それに含まれる階層２のバージョン情報（バージョン１）と、リンク先ノード（８０３）の階層１のバージョン情報（バージョン１）とを比較する（Ｓ８２）。ここでは、バージョンは同一である。そこで、バージョン比較部１６は、リンク先ノード（８０３）が持つ値域情報を含む返信を送る（Ｓ８３）。実施例１における各ノードの値域情報管理形態（管理形態６）によれば、リンク先ノード（８０３）が持つ値域情報として、リンク先ノード（８０３）の値域始点（１７５）、リンク先ノード（８０３）のＳｕｃノード（９８０）の値域始点（３）及び値域終点（１０）が返信される。【０１４９】
ツリー更新部１５は、その返信を受けると（Ｓ７３）、ノード（４１３）の階層１のツリーデータにおける、リンク先ノード（８０３）が持つ値域情報に対応する第１エントリから第３エントリに設定されている値域境界値（１７５、３及び１０）と、その返信に含まれるリンク先ノード（８０３）が持つ最新の値域情報（１７５、３及び１０）とを比較する。ここでは、両者は同一であり、値域変更されていないと判定される。【０１５０】
続いて、ツリー更新部１５は、その返信を参照することにより、バージョンが異なる階層が存在するか否かを判定する（Ｓ７５）。ここでは、バージョンが異なる階層が存在しないので（Ｓ７５；ＮＯ）、ツリー更新部１５は、次のリンク先ノード（９８０）を特定する（Ｓ７０）。このとき、ノード（９８０）は、図１８に示されるようなツリー構造データを持つと仮定する。【０１５１】
図１８は、実施例１における負荷分散後のノード（９８０）のツリー構造データの例を概念的に示す図である。即ち、ノード（９８０）のリンク先ノード（１２９）の値域境界値が変更されているため、ノード（９８０）の階層１のツリーデータのバージョン情報が２に繰り上げられている。【０１５２】
ツリー更新部１５は、リンク先ノード（９８０）に関しても同様に処理（Ｓ７１）を実行し、階層２のバージョン情報（バージョン１）を含むバージョン確認要求をリンク先ノード（９８０）に送信する（Ｓ７２）。【０１５３】
リンク先ノード（９８０）がそのバージョン確認要求を受信すると（Ｓ８１）、バージョン比較部１６が、それに含まれる階層２のバージョン情報（バージョン１）と、リンク先ノード（９８０）の階層１のバージョン情報（バージョン２）とを比較する（Ｓ８２）。ここでは、バージョンが異なるため、バージョン比較部１６は、リンク先ノード（９８０）の階層１のツリーデータ（バージョン情報含む）と、リンク先ノード（９８０）が持つ値域情報（３、１０及び２５）とを含む返信を送る（Ｓ８３）。【０１５４】
ツリー更新部１５は、その返信を受けると（Ｓ７３）、ノード（４１３）の階層１のツリーデータにおける、リンク先ノード（９８０）が持つ値域情報に対応する第２エントリから第４エントリに設定されている値域境界値（３、１０及び２５）と、その返信に含まれるリンク先ノード（９８０）が持つ最新の値域情報（３、１０及び２５）とを比較する。ここでは、両者は同一であり、値域変更されていないと判定される。【０１５５】
続いて、ツリー更新部１５は、その返信に基づき、階層２のバージョンが異なると判定し（Ｓ７５；ＹＥＳ）、階層２の根ツリーノードに含まれる、リンク先ノード（９８０）に対応するポインタで特定されるツリーノードを、その返信に含まれる、リンク先ノード（９８０）の階層１のツリーデータで更新する（Ｓ７６）。これにより、そのポインタで特定されるツリーノードのバージョン情報は２となる。なお、当該更新は、返信に含まれるツリーデータの複製であってもよいし、根ツリーノードに設定される値域境界値との関係で、返信に含まれるツリーデータ内の値域境界値情報が省かれてもよい。【０１５６】
更に、ツリー更新部１５は、取得されたリンク先ノード（９８０）の階層１のツリーデータの先頭エントリの値域境界値（１７５）を、ノード（４１３）の階層２のツリーデータにおける、リンク先ノード（９８０）に対応付けられたポインタを含むエントリの値域境界値に設定し、階層２の根ツリーノードのバージョン情報を繰り上げる（Ｓ７７）。続いて、ツリー更新部１５は、次のリンク先ノード（７０）を特定する（Ｓ７０）。以降、リンク先ノード（７０）についても同様のバージョン確認処理が実行される。【０１５７】
図１９は、実施例１におけるノード（４１３）のバージョン更新後のツリー構造データの例を概念的に示す図である。図１９に示されるように、階層２のツリーデータに関し、根ツリーノードのバージョン情報（Ver.3）、リンク先ノード（９８０）に対応付けられたポインタで特定される子ツリーノードのバージョン情報（Ver.2）、リンク先ノード（７０）に対応付けられたポインタで特定される子ツリーノードのバージョン情報（Ver.2）及び値域境界値（３８）がそれぞれ更新されている。また、ノード（４１３）以外で、ノード（９８０）へのリンクを有しているノードについても同様に処理され、それぞれ新たな値域情報が取得される。【０１５８】
なお、リンク先ノード（９８０）から取得されたツリーデータとリンク先ノード（７０）から取得されたツリーデータとでは重複するエントリ（値域境界値（２５、３８及び５３）を含む３つのエントリ）が存在するため、図１９の例では、前のリンク先ノード（９８０）に対応付けられたポインタで特定される子ツリーノードからはその重複するエントリは排除されている。階層２以上のツリーデータの根ツリーノード以外のツリーノードは、返信に含まれるツリーデータの複製であってもよいし、このように冗長性を排除するためにそのツリーデータから変形されたものであってもよい。なお、このように、各枝（葉）ツリーノード間の冗長性を排除する場合、バージョン管理とツリーノード間の差分管理を対応づけておくことが望ましい。上述の例では、冗長なため削除されたエントリにおいて値域境界値の変更が発生していたが、リンク先ノード（９８０）に対応付けられたポインタで特定される子ツリーノードのバージョン情報が繰り上げられた。しかしながら、冗長なため削除されるエントリに対する更新（自分のＳｕｃと重複する箇所）については、バージョン情報を繰り上げないようにしてもよい。【０１５９】
次に、実施例２として、上述の第２実施形態で利用される、拡張Ｋｏｏｒｄｅ及びパラメータについて説明する。
【実施例２】
【０１６０】
拡張Ｋｏｏｒｄｅの入力次数（indegree）、出力次数（outdegree）、及び、構築される木の高さ（又はホップ数）は、各ノードのＳｕｃノードまでの距離に関する確率変数に強く依存する。１つの物理サーバ（データサーバ１０）辺りの仮想サーバ数（論理ノード１１の数）をｖ、論理ノード１１の総数をＮとすると、隣接ノードまでの距離に対応する確率変数は幾何分布に従い、その仮想サーバ分ｖの和は、負の二項分布ＮＢ（ｖ、ｐ）に従う。また、或る範囲ｘに含まれるノード数は二項分布Ｂ（ｘ、ｐ）に従う。ｐは、Ｎ／２ｂである。出力次数（δOUT）及び入力次数（δIN）は、下記（式Ｘ１）及び（式Ｘ２）で与えられる。
【数３】
2013171953.tif 000005
【０１６１】
ツリーの階層については、各ノードにて最も高いツリーの高さｈｍａｘの上限の分布が容易に求まる。ｈｍａｘは、ｈホップ先のノード群がカバーするＩＤの範囲をｒｈとすると、ｒｈ＞２ｂを満たす最小の高さ（ｈ）である。ノードとＳｕｃノードとの距離をｒとすると、ｒｈはｒｋｈよりも広いため、ｈｍａｘは、少なくともｒｋｈ＞２ｂとなる最小のｈ以下であり、これが上限ｈｍａｘとなる。この上限の確率分布は、ｆ（ｈ）＝２ｂ／ｋｈとすると、上記（式Ｘ３）で与えられる。【０１６２】
ここで、或るノード１１における値域の変更が分散システム１内の全ノード１１に伝達されるまでの最大時間ｗｍａｘの制約（制約時間ｗｃ）及び実行時遅延の上限制約を設定した上で、各ノード１１により実行されるバージョン確認の単位時間負荷λを最小化することを考える。ここでは、ラグランジュ乗数法による最適化を行う。ラグランジュ乗数をλ１とλ２とすると、ＫＫＴ（Karush-Kuhn-Tucker）条件は、λ１≧０、（ｗｃ−ＴｌｏｇｋＮ）≧０、λ１（ｗｃ−ＴｌｏｇｋＮ）＝０、及び、λ２≧０、（ｈｃ−ｌｏｇｋＮ）≧０、λ２（ｈｃ−ｌｏｇｋＮ）＝０となる。ｈｃとは、上述のとおり、ツリーの高さ制約ｈｃである。これら条件を制約とし、下記（式Ｘ４）のラグランジュ関数を最小化する。
【数４】
2013171953.tif 000006
上記（式Ｘ４）をポーリング間隔Ｔで偏微分すると、下記（式Ｘ５）が得られる。
【数５】
2013171953.tif 000007
【０１６３】
ここで、λ１＝０とすると、Ｔ＞０及びｋ＞０よりＴ→∞で上述の単位時間負荷λは最小となるが、これには、制約時間ｗｃがｗｃ＞∞である必要があり、現実的でない。よって、ＫＫＴ条件からｗｃ＝ＴｌｏｇｋＮである。最適点では上記（式Ｘ５）が０であるため、下記（式Ｘ６）が得られる。
【数６】
2013171953.tif 000008
【０１６４】
一方、上記（式Ｘ４）をｋで偏微分して、上記（式Ｘ６）を用いると、下記（式Ｘ７）が得られる。
【数７】
2013171953.tif 000009
【０１６５】
ここで、（ｈｃ−ｌｏｇｋＮ）＞０である場合を考える（条件（ｉ）と表記）。この時、ＫＫＴ条件よりλ２＝０であり、上記（式Ｘ８）を０とするｋは、ｌｏｇｅｋ＝（１＋ｋ）／ｋを満たすｋ＊であり、ｋ＊＝３．５９．．．である。ｋのこの値を用いると、条件（ｉ）は、ｈｃ＞０．７８ｌｏｇｅＮを満たす場合と対応する。例えば、Ｎ＝１０００の場合、設定されたｈｃがおよそ５．４以上の場合と対応する。この時、ポーリング間隔Ｔは、下記（式Ｘ９）により設定される。
【数８】
2013171953.tif 000010
【０１６６】
上記条件（ｉ）以外の場合、ｈｃ＝ｌｏｇｋＮであることから、パラメータｋは、Ｎの（１／ｈｃ）乗で、ポーリング間隔Ｔは、Ｔ＝ｗｃ／ｈｃで決定される。なお、ｄｅ  Ｂｒｕｉｊｎ  ｇｒａｐｈでの２ビットシフトと対応することから、ｋ＊は便宜的にｋ＝４とするのが好ましい。【０１６７】
各ノード１１は、リンクを構築する際に、与えられたツリーの高さ制約ｈｃ２を用いて、少なくともｐｒｅｄノード（ｋｍ）からｐｒｅｄノード（ｋｍ＋ｋρ）までのノードとリンクするようにしても良い。ρは、以下の（式Ｘ１０）で示される。このようにすることで、全てのノード間でのホップ数の上限（直径）をｈｃ２以下に抑える事が出来る。なお、ｋｍとは、「ｋｍ  ｍｏｄ  ２ｂ」を簡略化した表記である。
【数９】
2013171953.tif 000011
【０１６８】
［変形例］
上述の各実施形態及び各変形例におけるバージョン確認処理では、対象ノードのリンク先ノード側でバージョン情報の比較が行われ（図８のＳ８２）、バージョンが異なる階層のツリーデータがそのリンク先ノードから対象ノードへ返信されていた（図８のＳ８３）。このような構成は、リンク先ノードから対象ノードへ階層２以降の全ツリーデータが送られ、対象ノード側でバージョン情報の比較が行われるようにされてもよい。【０１６９】
［補足］
上述の拡張Ｋｏｏｒｄｅアルゴリズムは、上述のような各実施形態及び各実施例で示されるような態様以外に適用されても効果的である。例えば、当該拡張Ｋｏｏｒｄｅアルゴリズムは、属性値が順序付けられていないデータ構造におけるＤＨＴ（Distributed Hash Table）に適用されてもよい。この場合、次のような実施態様が考えられる。【０１７０】
データが分割された複数の部分データを格納する複数の論理ノードの中の少なくとも１つの対象論理ノードを実現する分散データ管理装置であって、
前記対象論理ノードは、
リング構造を有する有限の識別子空間内で前記複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、前記対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、
前記複数の部分データの中の少なくとも１つを格納するデータ格納部と、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記対象ノード識別子をパラメータｋ（ｋは自然数）倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第１リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータｋ倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第２リンク先論理ノード、及び、前記識別子空間における該第１リンク先論理ノードの識別子と該第２リンク先論理ノードの識別子との間の識別子を持つ少なくとも１つの第３リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含むリンク情報を格納するリンクテーブルと、
を備える分散データ管理装置。【０１７１】
データが分割された複数の部分データを格納する複数の論理ノードの中の少なくとも１つの対象論理ノードであって、リング構造を有する有限の識別子空間内で該複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、該対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、該複数の部分データの中の少なくとも１つを格納するデータ格納部とを有する該対象論理ノードを実現するコンピュータが、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記対象ノード識別子をパラメータｋ（ｋは自然数）倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第１リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータｋ倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第２リンク先論理ノード、及び、前記識別子空間における該第１リンク先論理ノードの識別子と該第２リンク先論理ノードの識別子との間の識別子を持つ少なくとも１つの第３リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含むリンク情報を生成する、
分散データ管理方法。【０１７２】
上述の各実施形態及び各変形例は、内容が相反しない範囲で組み合わせることができる。また、上述の説明で用いた複数のフローチャートでは、複数のステップ（処理）が順番に記載されているが、本実施形態で実行される処理ステップの実行順序は、その記載の順番に制限されない。本実施形態では、図示される処理ステップの順番を内容的に支障のない範囲で変更することができる。【０１７３】
上記の各実施形態及び各変形例の一部又は全部は、以下の付記のようにも特定され得る。但し、各実施形態及び各変形例が以下の記載に限定されるものではない。【０１７４】
（付記１）
属性値順に順序付けられたデータが分割された複数の部分データであって属性毎の値域をそれぞれ有する複数の部分データを格納する複数の論理ノードの中の少なくとも１つの対象論理ノードを実現する分散データ管理装置であって、
前記対象論理ノードは、
リング構造を有する有限の識別子空間内で前記複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、前記対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、
前記複数の部分データの中の少なくとも１つを格納するデータ格納部と、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記識別子空間内における前記対象ノード識別子との間の関係に応じて確立される前記対象論理ノードとリンク先論理ノードとの間のリンク情報を格納するリンクテーブルと、
前記データ格納部に格納される前記部分データに対応する属性毎の値域境界値であって、該属性毎の該値域境界が前記識別子空間内において前記対象論理ノードと前記対象論理ノードと隣接する論理ノードとの間に位置する該属性毎の該値域境界値を格納する値域格納部と、
アクセス要求に対応する前記部分データを格納する論理ノードを特定するための、値域をそれぞれ示す複数のツリーノードから構成される属性毎のツリー構造データであって、前記リンク先論理ノードと対応付けられた子ツリーノードへのポインタと、該ポインタを選択するための値域を示す値とから形成される少なくとも１つのエントリを含む根ツリーノードを有するツリー構造データを格納するツリー格納部と、
を備える分散データ管理装置。【０１７５】
（付記２）
前記対象論理ノードは、
前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードからツリーデータを取得し、該取得されたツリーデータから前記根ツリーノードより下段の少なくとも１つのツリーノードを生成するツリー生成部を更に備える付記１に記載の分散データ管理装置。【０１７６】
（付記３）
前記ツリー格納部に格納される前記ツリー構造データは、複数階層を持ち、各階層にツリーデータをそれぞれ持ち、第１階層のツリーデータは、前記リンク先論理ノードが前記値域格納部に格納する値域情報に対応するエントリを有し、前記第１階層より上位の階層Ｌ（Ｌは２以上）のツリーデータは、前記根ツリーノードを含み、
前記ツリー生成部は、前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードから、前記リンク先論理ノードに格納される階層（Ｌ−１）のツリーデータを取得し、取得された階層（Ｌ−１）のツリーデータから、前記階層Ｌのツリーデータの中の前記リンク先論理ノードに対応する部分ツリーデータを生成する、
付記２に記載の分散データ管理装置。【０１７７】
（付記４）
前記ツリー格納部に格納される前記各ツリーデータを構成する各ツリーノードは、バージョン情報をそれぞれ含み、
前記対象論理ノードは、
前記階層Ｌの前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードに対して、該ポインタが指す子ツリーノードのバージョン情報が設定されたバージョン確認要求を送信し、該バージョン確認要求に対する該リンク先論理ノードからの返信に含まれるツリーデータ及びバージョン情報により、各ツリーノード及び各ツリーノードのバージョン情報を更新するツリー更新部と、
他の論理ノードから前記バージョン確認要求を受信し、該バージョン確認要求に含まれる前記階層Ｌに関するバージョン情報を、前記対象論理ノードが持つ階層（Ｌ−１）のツリーデータのバージョン情報とそれぞれ比較し、バージョンが異なる階層（Ｌ−１）のツリーデータをバージョン情報と共に該他の論理ノードへ返信するバージョン比較部と、
を更に備える付記３に記載の分散データ管理装置。【０１７８】
（付記５）
前記対象論理ノードが、
探索対象属性に関する前記ツリー構造データに含まれるツリーノードの第１エントリが示す値域境界値を該探索対象属性の属性値空間内の基準値とし、該基準値から該属性値空間内の最大値までの間の任意の値が、該属性値空間内の最小値から該基準値までの間の任意の値より小さくなる場合を含む、該属性値空間の循環順序に基づく包含判定により、前記ツリー構造データから探索対象の属性値を値域に含むエントリを特定するツリー探索部を更に備える付記４に記載の分散データ管理装置。【０１７９】
（付記６）
前記各階層の根ツリーノードには、前記属性値空間における全属性値を包含しない値域がそれぞれ設定され、
前記ツリー探索部は、或る階層の前記ツリーデータから、前記探索対象属性値を値域に含むエントリを特定できない場合には、１段上の階層のツリーデータの探索を試み、該１段上の階層のツリーデータが存在しない場合には、前記ツリー生成部に、該１段上の階層のツリーデータの生成を依頼する、
付記５に記載の分散データ管理装置。【０１８０】
（付記７）
前記リンクテーブルに格納される前記リンク情報は、前記対象ノード識別子をパラメータｋ（ｋは自然数）倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第１リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータｋ倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第２リンク先論理ノード、及び、前記識別子空間における該第１リンク先論理ノードの識別子と該第２リンク先論理ノードの識別子との間の識別子を持つ少なくとも１つの第３リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含む、
付記１から６のいずれか１つに記載の分散データ管理装置。【０１８１】
（付記８）
前記リンクテーブルは、前記対象論理ノードから、前記対象ノード識別子をパラメータｋ（ｋは自然数）倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第１リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータｋ倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第２リンク先論理ノード、及び、前記識別子空間における該第１リンク先論理ノードの識別子と該第２リンク先論理ノードの識別子との間の識別子を持つ少なくとも１つの第３リンク先論理ノードへの複数リンクを含むリンク情報を格納し、
前記ツリー更新部は、前記バージョン確認要求をポーリング間隔Ｔで送信し、
前記対象論理ノードは、
前記複数の論理ノードの少なくとも１つにおける値域の変更が前記複数の論理ノードの全てに伝達されるまでの最大時間に対するシステム制約時間ｗｃ、又は、前記各論理ノードが前記バージョン確認要求を送信する単位時間負荷に対するシステム制約負荷λｃを取得し、取得されたシステム制約時間ｗｃ又は取得されたシステム制約負荷λｃ、及び、前記論理ノードの総数Ｎ又は前記対象論理ノードのリンク先ノードの数Ｄを、下記（式１）又は下記（式２）に適用することにより、前記ポーリング間隔Ｔを算出するパラメータ設定部、
を更に備える付記４から６のいずれか１つに記載の分散データ管理装置。
【数１０】
2013171953.tif 000012
ｋは前記パラメータｋを示す。【０１８２】
（付記９）
前記パラメータｋが４に設定される付記７又は８に記載の分散データ管理装置。【０１８３】
（付記１０）
アクセス要求に対応する部分データを格納しており、付記６に記載の分散データ管理装置で実現される前記対象論理ノードを該アクセス要求の宛先として特定する分散データ操作装置であって、
前記対象論理ノードを含む複数のリンク先論理ノードと通信可能となるリンク情報を格納するリンクテーブルと、
前記ツリー格納部と、
前記ツリー更新部と、
前記ツリー探索部と、
を備える分散データ操作装置。【０１８４】
（付記１１）
属性値順に順序付けられたデータが分割された複数の部分データであって属性毎の値域をそれぞれ有する複数の部分データを格納する複数の論理ノードの中の少なくとも１つの対象論理ノードをコンピュータに実現させるプログラムであって、
前記対象論理ノードが、
リング構造を有する有限の識別子空間内で前記複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、前記対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、
前記複数の部分データの中の少なくとも１つを格納するデータ格納部と、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記識別子空間内における前記対象ノード識別子との間の関係に応じて確立される前記対象論理ノードとリンク先論理ノードとの間のリンク情報を格納するリンクテーブルと、
前記データ格納部に格納される前記部分データに対応する属性毎の値域境界値であって、該属性毎の該値域境界が前記識別子空間内において前記対象論理ノードと前記対象論理ノードと隣接する論理ノードとの間に位置する該属性毎の該値域境界値を格納する値域格納部と、
アクセス要求に対応する前記部分データを格納する論理ノードを特定するための、値域をそれぞれ示す複数のツリーノードから構成される属性毎のツリー構造データであって、前記リンク先論理ノードと対応付けられた子ツリーノードへのポインタと、該ポインタを選択するための値域を示す値とから形成される少なくとも１つのエントリを含む根ツリーノードを有するツリー構造データを格納するツリー格納部と、
を備えるプログラム。【０１８５】
（付記１２）
前記対象論理ノードが、前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードからツリーデータを取得し、該取得されたツリーデータから前記根ツリーノードより下段の少なくとも１つのツリーノードを生成するツリー生成部を更に備える付記１１に記載のプログラム。【０１８６】
（付記１３）
前記ツリー格納部に格納される前記ツリー構造データは、複数階層を持ち、各階層にツリーデータをそれぞれ持ち、第１階層のツリーデータは、前記リンク先論理ノードが前記値域格納部に格納する値域情報に対応するエントリを有し、前記第１階層より上位の階層Ｌ（Ｌは２以上）のツリーデータは、前記根ツリーノードを含み、
前記ツリー生成部は、前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードから、前記リンク先論理ノードに格納される階層（Ｌ−１）のツリーデータを取得し、取得された階層（Ｌ−１）のツリーデータから、前記階層Ｌのツリーデータの中の前記リンク先論理ノードに対応する部分ツリーデータを生成する、
付記１２に記載のプログラム。【０１８７】
（付記１４）
前記ツリー格納部に格納される前記各ツリーデータを構成する各ツリーノードは、バージョン情報をそれぞれ含み、
前記対象論理ノードは、
前記階層Ｌの前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードに対して、該ポインタが指す子ツリーノードのバージョン情報が設定されたバージョン確認要求を送信し、該バージョン確認要求に対する該リンク先論理ノードからの返信に含まれるツリーデータ及びバージョン情報により、各ツリーノード及び各ツリーノードのバージョン情報を更新するツリー更新部と、
他の論理ノードから前記バージョン確認要求を受信し、該バージョン確認要求に含まれる前記階層Ｌに関するバージョン情報を、前記対象論理ノードが持つ階層（Ｌ−１）のツリーデータのバージョン情報とそれぞれ比較し、バージョンが異なる階層（Ｌ−１）のツリーデータをバージョン情報と共に該他の論理ノードへ返信するバージョン比較部と、
を更に備える付記１３に記載のプログラム。【０１８８】
（付記１５）
前記対象論理ノードが、
探索対象属性に関する前記ツリー構造データに含まれるツリーノードの第１エントリが示す値域境界値を該探索対象属性の属性値空間内の基準値とし、該基準値から該属性値空間内の最大値までの間の任意の値が、該属性値空間内の最小値から該基準値までの間の任意の値より小さくなる場合を含む、該属性値空間の循環順序に基づく包含判定により、前記ツリー構造データから探索対象の属性値を値域に含むエントリを特定するツリー探索部を更に備える付記１４に記載のプログラム。【０１８９】
（付記１６）
前記各階層の根ツリーノードには、前記属性値空間における全属性値を包含しない値域がそれぞれ設定され、
前記ツリー探索部は、或る階層の前記ツリーデータから、前記探索対象属性値を値域に含むエントリを特定できない場合には、１段上の階層のツリーデータの探索を試み、該１段上の階層のツリーデータが存在しない場合には、前記ツリー生成部に、該１段上の階層のツリーデータの生成を依頼する、
付記１５に記載のプログラム。【０１９０】
（付記１７）
前記リンクテーブルに格納される前記リンク情報は、前記対象ノード識別子をパラメータｋ（ｋは自然数）倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第１リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータｋ倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第２リンク先論理ノード、及び、前記識別子空間における該第１リンク先論理ノードの識別子と該第２リンク先論理ノードの識別子との間の識別子を持つ少なくとも１つの第３リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含む、
付記１１から１６のいずれか１つに記載のプログラム。【０１９１】
（付記１８）
前記リンクテーブルは、前記対象論理ノードから、前記対象ノード識別子をパラメータｋ（ｋは自然数）倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第１リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータｋ倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第２リンク先論理ノード、及び、前記識別子空間における該第１リンク先論理ノードの識別子と該第２リンク先論理ノードの識別子との間の識別子を持つ少なくとも１つの第３リンク先論理ノードへの複数リンクを含むリンク情報を格納し、
前記ツリー更新部は、前記バージョン確認要求をポーリング間隔Ｔで送信し、
前記対象論理ノードは、
前記複数の論理ノードの少なくとも１つにおける値域の変更が前記複数の論理ノードの全てに伝達されるまでの最大時間に対するシステム制約時間ｗｃ、又は、前記各論理ノードが前記バージョン確認要求を送信する単位時間負荷に対するシステム制約負荷λｃを取得し、取得されたシステム制約時間ｗｃ又は取得されたシステム制約負荷λｃ、及び、前記論理ノードの総数Ｎ又は前記対象論理ノードのリンク先ノードの数Ｄを、下記（式１）又は下記（式２）に適用することにより、前記ポーリング間隔Ｔを算出するパラメータ設定部、
を更に備える付記１４に記載のプログラム。
【数１１】
2013171953.tif 000013
ｋは前記パラメータｋを示す。【０１９２】
（付記１９）
前記パラメータｋが４に設定される付記１７又は１８に記載のプログラム。【０１９３】
（付記２０）
データが分割された複数の部分データを格納する複数の論理ノードの中の少なくとも１つの対象論理ノードを実現する分散データ管理装置であって、
前記対象論理ノードは、
リング構造を有する有限の識別子空間内で前記複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、前記対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、
前記複数の部分データの中の少なくとも１つを格納するデータ格納部と、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記対象ノード識別子をパラメータｋ（ｋは自然数）倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第１リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータｋ倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第２リンク先論理ノード、及び、前記識別子空間における該第１リンク先論理ノードの識別子と該第２リンク先論理ノードの識別子との間の識別子を持つ少なくとも１つの第３リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含むリンク情報を格納するリンクテーブルと、
を備える分散データ管理装置。【０１９４】
（付記２１）
データが分割された複数の部分データを格納する複数の論理ノードの中の少なくとも１つの対象論理ノードであって、リング構造を有する有限の識別子空間内で該複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、該対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、該複数の部分データの中の少なくとも１つを格納するデータ格納部とを有する該対象論理ノードを実現するコンピュータが、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記対象ノード識別子をパラメータｋ（ｋは自然数）倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第１リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータｋ倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第２リンク先論理ノード、及び、前記識別子空間における該第１リンク先論理ノードの識別子と該第２リンク先論理ノードの識別子との間の識別子を持つ少なくとも１つの第３リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含むリンク情報を生成する、
分散データ管理方法。【０１９５】
（付記２２）
付記１１から１９のいずれか１つに記載のプログラムをコンピュータに読み取り可能に記録する記録媒体。【０１９６】
この出願は、２０１２年５月１５日に出願された日本出願特願２０１２−１１１１８９号を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１】
2013171953.tif 000016
【図２】
2013171953.tif 000017
【図３】
2013171953.tif 000018
【図４】
2013171953.tif 000019
【図５】
2013171953.tif 000020
【図６Ａ】
2013171953.tif 000021
【図６Ｂ】
2013171953.tif 000022
【図７】
2013171953.tif 000023
【図８】
2013171953.tif 000024
【図９】
2013171953.tif 000025
【図１０】
2013171953.tif 000026
【図１１】
2013171953.tif 000027
【図１２】
2013171953.tif 000028
【図１３】
2013171953.tif 000029
【図１４】
2013171953.tif 000030
【図１５】
2013171953.tif 000031
【図１６】
2013171953.tif 000032
【図１７】
2013171953.tif 000033
【図１８】
2013171953.tif 000034
【図１９】
2013171953.tif 000035
【国際調査報告】
2013171953.tif 000036
2013171953.tif 000037
2013171953.tif 000038
2013171953.tif 000039