(57)【要約】本発明は、大量のクエリが転送されても、ネットワーク負荷、シリアライズ処理の負荷およびデシリアライズ処理の負荷を低減できる。  情報処理装置は、ある値の範囲を特定するクエリを受け取り、ある値を示すキーを記憶し、所定のキーが示す値に最も近い値を示すキーである次キーを、前記クエリで特定される範囲に含まれるいずれかの値を示す各キーの中から算出し、算出した次キーが示す値と記憶している各キーがそれぞれ示す値との大小関係に基づいて、その各キーから一のキーを特定し、特定した一のキーの値に基づいて識別される装置の識別子である転送先ノード識別子を特定し、特定した転送先ノード識別子に対応する前述の一のキーが示す値に基づいて、転送先ノード識別子で識別される装置が算出しうる次キーの範囲の境界を示すキーである転送先最終キーを記憶している各キーの中から算出し、クエリと転送先最終キーとを転送先ノード識別子で識別される装置へ転送する。
2012102103.tif 000002
【特許請求の範囲】
【請求項１】
ある値の範囲を特定するクエリを受け取る受信手段と、
ある値を示すキーを記憶する経路管理手段と、
所定のキーが示す値に最も近い値を示すキーである次キーを、前記クエリで特定される範囲に含まれるいずれかの値を示す各キーの中から算出する次キー算出手段と、
前記次キーが示す値と前記経路管理手段が記憶する各キーがそれぞれ示す値との大小関係に基づいて、当該各キーから一のキーを特定し当該一のキーの値に基づいて識別される装置の識別子である転送先ノード識別子を特定するクエリ転送制御手段と、
前記転送先ノード識別子に対応する前記一のキーが示す値に基づいて、当該転送先ノード識別子で識別される装置が算出しうる次キーの範囲の境界を示すキーである転送先最終キーを前記経路管理手段が記憶する各キーの中から算出する最終キー算出手段と、を備え、
前記クエリ転送制御手段は、前記クエリと前記転送先最終キーとを前記転送先ノード識別子で識別される装置へ転送する、情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記最終キー算出手段は、前記受信手段が前記クエリとともに転送先最終キーを受け取ったか否かに基づいて、自情報処理装置が算出しうる次キーの範囲の境界を示すキーである最終キーを特定し、
前記クエリ転送制御手段は、前記次キー算出手段が算出した次キーが示す値と前記所定のキーが示す値と前記最終キーが示す値との間で所定の大小関係にあるか否か判定し、
前記クエリ転送制御手段は、前記所定の大小関係にあると判定した場合に、前記次キーが示す値と前記経路管理手段が記憶する各キーがそれぞれ示す値との大小関係に基づいて、当該各キーから一のキーを特定し、当該一のキーの値に基づいて識別される装置の識別子である転送先ノード識別子を特定する、情報処理装置。
【請求項３】
請求項２に記載の情報処理装置であって、
前記クエリ転送制御手段は、前記所定の大小関係にないと判定した場合に、前記クエリと前記転送先最終キーとを前記転送先ノード識別子で識別される装置へ転送する、情報処理装置。
【請求項４】
請求項２または３に記載の情報処理装置であって、
前記受信手段は、前記クエリとともに転送先最終キーを受け取ったか否かを判定し、
前記最終キー算出手段は、前記受信手段が転送先最終キーを受け取ったと判定した場合に、当該転送先最終キーを自情報処理装置の最終キーと特定する、情報処理装置。
【請求項５】
請求項３に記載の情報処理装置であって、
前記受信手段は、前記クエリとともに転送先最終キーを受け取ったか否か判定し、
前記最終キー算出手段は、前記受信手段が転送先最終キーを受け取っていないと判定した場合に、自情報処理装置に対応する一のキーを最終キーと特定する、情報処理装置。
【請求項６】
請求項１ないし５のいずれか１項に記載の情報処理装置であって、
前記情報処理装置は、ある所定のキーの集合を示す割当キー範囲を記憶し、
前記次キー算出手段は、前記割当キー範囲に含まれるキーが示す最大値に最も近い値を示す前記次キーを、前記クエリで特定される範囲に含まれるいずれかの値を示す各キーの中から算出する、情報処理装置。
【請求項７】
請求項６に記載の情報処理装置であって、
前記クエリ転送制御手段は、前記次キー算出手段が算出した次キーが示す値が、前記割当キー範囲に含まれるキーが示す最大値と前記最終キーが示す値との間にあるという前記所定の関係があるか否か判定する、情報処理装置。
【請求項８】
請求項６または７に記載の情報処理装置であって、
前記次キー算出手段は、前記割当キー範囲に含まれるキーが示す最大値に最も近い値を示す前記次キーを、前記クエリで特定される範囲に含まれるいずれかの値を示す各キーの中から算出する、情報処理装置。
【請求項９】
請求項１ないし８のいずれか１項に記載の情報処理装置であって、
前記クエリ転送制御手段は、前記次キーが示す値を超えない最大値を示すキーを、前記経路管理手段が記憶する各キーから特定し、特定したキーの値に基づいて、識別される装置の識別子である転送先ノード識別子を特定する、情報処理装置。
【請求項１０】
請求項９に記載の情報処理装置であって、
前記最終キー算出手段は、前記クエリ転送制御手段が特定したキーが示す値より大きくその値に最も近い値を示す転送先最終キーを前記経路管理手段が記憶する各キーの中から算出する、情報処理装置。
【請求項１１】
請求項１ないし１０のいずれか１項に記載の情報処理装置であって、
クエリは複数の属性に対してそれぞれの属性値の範囲を示す情報であり、
クエリで特定される値の範囲は、前記属性値の範囲に含まれる各属性値のすべての組み合わせを、それぞれの属性からなる属性空間で定義される空間充填曲線に写像することで得られる値の範囲であり、
キーはある属性値の組み合わせに基づいて定められる値であり、
前記次キー算出手段は、前記所定のキーが示す値と前記空間充填曲線上で最も近い値を示すキーを前記クエリで特定される値の範囲に含まれる値を示すキーの中から特定する、情報処理装置。
【請求項１２】
請求項１ないし１１のいずれか１項に記載の情報処理装置であって、
クエリは、一の属性の属性値の集合であるサブキー群を少なくとも一つ含み、
キーの値は、各属性値の組み合わせに基づいて一意に特定される値であり、
前記次キー算出手段は、それぞれの属性からなる属性空間の中から、前記クエリに含まれる前記サブキー群のそれぞれから特定される属性値の組み合わせの集合により特定される少なくとも一部の部分空間であるクエリエリアを当該クエリに基づいて特定し、
前記次キー算出手段は、前記割当キー範囲に含まれる所定のキーの値に基づいて特定される各属性値のいずれかに所定数加算し、加算後の属性値を含む前記各属性の組み合わせに基づいて特定される値を有するキーである増分キーを少なくとも一つ特定し、
前記キー算出手段は、前記増分キーが示す値に基づいて特定される各属性値の組み合わせで特定される空間である増分エリアの少なくとも一部が前記クエリエリアに包含されるか否かを判定し、
前記次キー算出手段は、前記増分エリアの少なくとも一部が前記クエリエリアに包含されると判定した場合に、前記増分エリアと前記クエリエリアとで共通する属性値の組み合わせのうち、それぞれ最小の属性値の組み合わせに基づいて特定される値を有するキーを、次キーとして算出する、情報処理装置。
【請求項１３】
請求項１に記載の情報処理装置であって、
ある装置を示すノード識別子と当該装置の割当キー範囲に含まれるキーのうち最小値を示すキーとを対応付けて記憶する最小割当キー保持手段を備え、
前記経路管理手段は、ある装置を示すノード識別子と当該装置の割当キー範囲に含まれるキーのうち最大値を示すキーとを対応付けて記憶し、
前記クエリ転送制御手段は、前記次キーが示す値と前記経路管理手段が記憶する各キーがそれぞれ示す値との大小関係に基づいて、当該各キーから一のキーを特定し当該一のキーの値に対応付けられているノード識別子を前記転送先ノード識別子として特定し、
前記最終キー算出手段は、前記クエリ転送制御手段が特定した転送先ノード識別子に対応する前記一のキー以外のキーでかつ前記次キーが示す値に最も近い値を示すキーを前記経路管理手段から特定し、この特定したキーに対応付けられているノード識別子を特定し、このノード識別子に対応付けられているキーが示す値から所定数を減じた値を示すキーを前記最小キー保持手段から読み出し、この読み出したキーを前記転送先最終キーとして算出する、情報処理装置。
【請求項１４】
請求項１に記載の情報処理装置であって、
ある装置を示すノード識別子と当該装置の割当キー範囲に含まれるキーのうち最小値を示すキーとを対応付けて記憶する最小割当キー保持手段を備え、
前記経路管理手段は、あるキーと当該キーを自装置の割当キー範囲に含む当該装置を識別できるノード識別子である一のキーとを対応付けて記憶し、
前記クエリ転送制御手段は、前記次キーが示す値を超えない最大値を示すキーに対応付けられているノード識別子を前記転送先ノード識別子として前記経路管理手段の中から特定し、
前記最終キー算出手段は、前記クエリ転送制御手段が特定した転送先ノード識別子以外のノード識別子でかつ前記次キーが示す値に最も近い値を示すキーであるノード識別子を前記経路管理手段から特定し、特定したノード識別子に対応付けられているキーが示す値から所定数を減じた値を示すキーを前記最小割当キー保持手段から読み出し、この読み出したキーを前記転送先最終キーとして算出する、情報処理装置。
【請求項１５】
請求項１ないし１４のいずれか１項に記載の情報処理装置であって、
前記情報処理装置は、ある所定のキーの集合を示す割当キー範囲を記憶し、
前記情報処理装置は、クエリを処理するクエリ処理手段を備え、
前記次キー算出手段は、前記受信手段がクエリを受け取ると、受け取ったクエリと前記割当キー範囲に含まれるキーのうち最小値を示すキーに最も近い値を示すキーである次キーを、前記クエリで特定される範囲に含まれるいずれかの値を示す各キーの中から算出し、算出した次キーが前記割当キー範囲に含まれる場合に前記クエリを前記クエリ処理手段に渡す、情報処理装置。
【請求項１６】
少なくとも一つの情報処理装置を備え、
当該情報処理装置は、
ある値の範囲を特定するクエリを受け取る受信手段と、
ある値を示すキーを記憶する経路管理手段と、
所定のキーが示す値に最も近い値を示すキーである次キーを、前記クエリで特定される範囲に含まれるいずれかの値を示す各キーの中から算出する次キー算出手段と、
前記次キーが示す値と前記経路管理手段が記憶する各キーがそれぞれ示す値との大小関係に基づいて、当該各キーから一のキーを特定し当該一のキーの値に基づいて識別される情報処理装置の識別子である転送先ノード識別子を特定するクエリ転送制御手段と、
前記転送先ノード識別子に対応する前記一のキーが示す値に基づいて、当該転送先ノード識別子で識別される情報処理装置が算出しうる次キーの範囲の境界を示すキーである転送先最終キーを前記経路管理手段が記憶する各キーの中から算出する最終キー算出手段と、を含み、
前記クエリ転送制御手段は、前記クエリと前記転送先最終キーとを前記転送先ノード識別子で識別される情報処理装置へ転送する、情報処理システム。
【請求項１７】
ある値の範囲を特定するクエリを受け取り、
ある値を示すキーを記憶し、
所定のキーが示す値に最も近い値を示すキーである次キーを、前記クエリで特定される範囲に含まれるいずれかの値を示す各キーの中から算出し、
前記次キーが示す値と前記記憶する各キーがそれぞれ示す値との大小関係に基づいて、当該各キーから一のキーを特定し当該一のキーの値に基づいて識別される装置の識別子である転送先ノード識別子を特定し、
前記転送先ノード識別子に対応する前記一のキーが示す値に基づいて、当該転送先ノード識別子で識別される装置が算出しうる次キーの範囲の境界を示すキーである転送先最終キーを前記記憶する各キーの中から算出し、
前記クエリと前記転送先最終キーとを前記転送先ノード識別子で識別される装置へ転送する、情報処理方法。
【請求項１８】
コンピュータに、
ある値の範囲を特定するクエリを受け取る処理と、
ある値を示すキーを記憶する処理と、
所定のキーが示す値に最も近い値を示すキーである次キーを、前記クエリで特定される範囲に含まれるいずれかの値を示す各キーの中から算出する処理と、
前記次キーが示す値と前記記憶する各キーがそれぞれ示す値との大小関係に基づいて、当該各キーから一のキーを特定し当該一のキーの値に基づいて識別される装置の識別子である転送先ノード識別子を特定する処理と、
前記転送先ノード識別子に対応する前記一のキーが示す値に基づいて、当該転送先ノード識別子で識別される装置が算出しうる次キーの範囲の境界を示すキーである転送先最終キーを前記記憶する各キーの中から算出する処理と、
前記クエリと前記転送先最終キーとを前記転送先ノード識別子で識別される装置へ転送する処理と、を実行させるための情報処理プログラムを格納する記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、構造化Ｐ２Ｐ（Ｐｅｅｒ−ｔｏ−Ｐｅｅｒ）におけるクエリの転送方法に関する。
【背景技術】
【０００２】
構造化Ｐ２Ｐ（Ｐｅｅｒ−ｔｏ−Ｐｅｅｒ）では、システムを構成するノードは、外部システムから入力されるクエリを分担して処理する。ノードは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やメモリから構成される装置のメモリ上に配備されるプログラムである。該プログラムをＣＰＵが読み込んで実行することで、このＣＰＵを備えるコンピュータは、データやクエリを転送したり、メモリ上に保持したりするノードとして機能する。クエリからハッシュ関数などによって生成される値（キー）によって、該クエリが到達するべきノードが決定される。構造化Ｐ２Ｐではキーがとりうる値の空間であるキー空間が定義され、各ノードにキー空間の一部が範囲（キー範囲）としてそれぞれ割り当てられる。ノードに割り当てられるキーは、該ノードの割当キーと呼ばれ、割り当てられるキーの範囲は割当キー範囲と呼ばれる。割当キー範囲のうち、最小の値を示すキーは最小割当キーと呼ばれ、割当キー範囲のうち、最大の値を示すキーは最大割当キーと呼ばれる。
外部システムから入力されたクエリは、０以上のノードを経由して、該クエリから生成したキーが割り当てられたノードに送信される。クエリから複数のキーが生成される可能性があり、その場合、各キーが割り当てられたノードの全てに該クエリが送信される。経由されるノードの特定は、ルーティングプロトコルに依存する。あるキーが割り当てられたノードにクエリが送信されるとき、該キーは、該ノードの宛先キーと呼ばれる。
外部システムからデータが入力されると、ノードは、該データからキーを生成し、生成したキーが割り当てられたノードへ、データを転送する。よって、同じキーが生成されるデータとクエリとが、そのキーが割り当てられた同一のノードに送信される。各ノードがデータとクエリとの完全一致を判定する場合には、データを入力としてハッシュ関数により得られる値をキーとし、クエリで指定されるデータを入力としてハッシュ関数により得られる値をキーとする構成であればよい。これにより、完全一致するデータとクエリとが同一のノードに到達することとなる。
外部システムから入力されるクエリを、そのクエリを処理すべきノードにルーティングする方法が開示されている（例えば非特許文献１参照）。
非特許文献１に記載された技術は、例えば以下のように動作する。Ｐ２Ｐシステムの各ノードは、多次元の属性のそれぞれの値を示す属性値を、空間充填曲線を使って１次元のデータを示すキーにマッピングする。そしてクエリが入力されると、各ノードは、該クエリからある値を示すキーの集合であるキー範囲を生成する。次に、ノードは、該クエリが各キー範囲の最小キーが割り当てられたノードに送信されるように、該クエリの転送先のノードを決定する。そして該ノードは、その転送先のノードに該クエリを送信する。クエリは、０以上のノードを経由して、該キーが割り当てられたノードに送信される。クエリの転送先のノードは、クエリを受信し、受信したクエリを処理する。その処理の際、該ノードに割り当てられたキー範囲の最大値よりもクエリのキー範囲の最大値の方が大きい場合、該ノードはサクセッサ（ｓｕｃｃｅｓｓｏｒ）に受信したクエリを転送する。ノードのサクセッサとは、該ノードの割当キーが示すそれぞれの値の最大値に１を加えた値を示すキーが割り当てられたノードである。ノードがそのサクセッサにクエリを転送する処理は、クエリから生成されたキー範囲の最大値が該ノードに割り当てられたキー範囲の最大値よりも小さくなるまで繰り返される。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Ｐｒａｓａｎｎａ  Ｇａｎｅｓａｎ  ｅｔ  ａｌ．，“Ｏｎｅ  ｔｏｒｕｓ  ｔｏ  ｒｕｌｅ  ｔｈｅｍ  ａｌｌ：Ｍｕｌｔｉ−ｄｉｍｅｎｓｉｏｎａｌ  ｑｕｅｒｉｅｓ  ｉｎ  ｐ２ｐ  ｓｙｓｔｅｍｓ，”Ｉｎ  ＷｅｂＤＢ  ’０４：Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ７ｔｈＩｎｔｅｒｎａｔｉｏｎａｌ  Ｗｏｒｋｓｈｏｐ  ｏｎ  ｔｈｅ  Ｗｅｂ  ａｎｄ  Ｄａｔａｂａｓｅｓ，ｐａｇｅｓ  １９−２４，Ｎｅｗ  Ｙｏｒｋ，ＮＹ，ＵＳＡ，２００４．ＡＣＭ  Ｐｒｅｓｓ．
【非特許文献２】Ｃｈｒｉｓｔｉａｎ  Ｂｏｈｍ  ｅｔ  ａｌ．，“ＸＺ−Ｏｒｄｅｒｉｎｇ：Ａ  Ｓｐａｃｅ−Ｆｉｌｌｉｎｇ  Ｃｕｒｖｅｆｏｒ  Ｏｂｊｅｃｔｓ  ｗｉｔｈ  Ｓｐａｔｉａｌ  Ｅｘｔｅｎｓｉｏｎ，”Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ６ｔｈ  ＩｎｔｅｒｎａｔｉｏｎａｌＳｙｍｐｏｓｉｕｍ  ｏｎ  Ａｄｖａｎｃｅｓ  ｉｎ  Ｓｐａｔｉａｌ  Ｄａｔａｂａｓｅｓ，ｐａｇｅｓ  ７５−９０，Ｊｕｌｙ  ２０−２３，１９９９．
【非特許文献３】Ｉｏｎ  Ｓｔｏｉｃａ  ｅｔ  ａｌ．，“Ｃｈｏｒｄ：Ａ  Ｓｃａｌａｂｌｅ  Ｐｅｅｒ−ｔｏ−ｐｅｅｒ  Ｌｏｏｋｕｐ  Ｓｅｒｖｉｃｅ  ｆｏｒ  Ｉｎｔｅｒｎｅｔ  Ａｐｐｌｉｃａｔｉｏｎｓ，”Ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ２００１  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎＡｐｐｌｉｃａｔｉｏｎｓ，Ｔｅｃｈｎｏｌｏｇｉｅｓ，Ａｒｃｈｉｔｅｃｔｕｒｅｓ，ａｎｄ  Ｐｒｏｔｏｃｏｌｓ  Ｆｏｒ  Ｃｏｍｐｕｔｅｒ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ．ＳＩＧＣＯＭＭ  ’０１．ＡＣＭ，Ｎｅｗ  Ｙｏｒｋ，ＮＹ，１４９−１６０．
【発明の概要】
【発明が解決しようとする課題】
【０００４】
非特許文献１に記載された技術は、クエリからキー範囲を生成し、そのキー範囲をクエリとともに各ノードに転送する。各ノードは、キー範囲を転送する際にそのキー範囲のシリアライズを行い、キー範囲を受信する際にそのキー範囲のデシリアライズを行う。したがって、非特許文献１に記載された技術は、大量のクエリが転送されるときにネットワーク負荷、シリアライズ処理の負荷およびデシリアライズ処理の負荷が大きい。
本発明の目的の一例は、大量のクエリが転送されても、ネットワーク負荷、シリアライズ処理の負荷およびデシリアライズ処理の負荷を低減できる情報処理装置、情報処理方法および情報処理プログラムを提供することである。
【課題を解決するための手段】
【０００５】
本発明の一態様における第一の情報処理装置は、ある値の範囲を特定するクエリを受け取る受信部と、ある値を示すキーを記憶する経路管理部と、所定のキーが示す値に最も近い値を示すキーである次キーを、前記クエリで特定される範囲に含まれるいずれかの値を示す各キーの中から算出する次キー算出部と、前記次キーが示す値と前記経路管理部が記憶する各キーがそれぞれ示す値との大小関係に基づいて、当該各キーから一のキーを特定し当該一のキーの値に基づいて識別される装置の識別子である転送先ノード識別子を特定するクエリ転送制御部と、前記転送先ノード識別子に対応する前記一のキーが示す値に基づいて、当該転送先ノード識別子で識別される装置が算出しうる次キーの範囲の境界を示すキーである転送先最終キーを前記経路管理部が記憶する各キーの中から算出する最終キー算出部と、を備え、前記クエリ転送制御部は、前記クエリと前記転送先最終キーとを前記転送先ノード識別子で識別される装置へ転送する。
本発明の一態様における第一の情報処理システムは、少なくとも一つの情報処理装置を備え、当該情報処理装置は、ある値の範囲を特定するクエリを受け取る受信部と、ある値を示すキーを記憶する経路管理部と、所定のキーが示す値に最も近い値を示すキーである次キーを、前記クエリで特定される範囲に含まれるいずれかの値を示す各キーの中から算出する次キー算出部と、前記次キーが示す値と前記経路管理部が記憶する各キーがそれぞれ示す値との大小関係に基づいて、当該各キーから一のキーを特定し当該一のキーの値に基づいて識別される情報処理装置の識別子である転送先ノード識別子を特定するクエリ転送制御部と、前記転送先ノード識別子に対応する前記一のキーが示す値に基づいて、当該転送先ノード識別子で識別される情報処理装置が算出しうる次キーの範囲の境界を示すキーである転送先最終キーを前記経路管理部が記憶する各キーの中から算出する最終キー算出部と、を含み、前記クエリ転送制御部は、前記クエリと前記転送先最終キーとを前記転送先ノード識別子で識別される情報処理装置へ転送する。
本発明の一態様における第一の情報処理方法は、ある値の範囲を特定するクエリを受け取り、ある値を示すキーを記憶し、所定のキーが示す値に最も近い値を示すキーである次キーを、前記クエリで特定される範囲に含まれるいずれかの値を示す各キーの中から算出し、前記次キーが示す値と前記記憶する各キーがそれぞれ示す値との大小関係に基づいて、当該各キーから一のキーを特定し当該一のキーの値に基づいて識別される装置の識別子である転送先ノード識別子を特定し、前記転送先ノード識別子に対応する前記一のキーが示す値に基づいて、当該転送先ノード識別子で識別される装置が算出しうる次キーの範囲の境界を示すキーである転送先最終キーを前記記憶する各キーの中から算出し、前記クエリと前記転送先最終キーとを前記転送先ノード識別子で識別される装置へ転送する。
本発明の一態様における第一の情報処理プログラムは、コンピュータに、ある値の範囲を特定するクエリを受け取る処理と、ある値を示すキーを記憶する処理と、所定のキーが示す値に最も近い値を示すキーである次キーを、前記クエリで特定される範囲に含まれるいずれかの値を示す各キーの中から算出する処理と、前記次キーが示す値と前記記憶する各キーがそれぞれ示す値との大小関係に基づいて、当該各キーから一のキーを特定し当該一のキーの値に基づいて識別される装置の識別子である転送先ノード識別子を特定する処理と、前記転送先ノード識別子に対応する前記一のキーが示す値に基づいて、当該転送先ノード識別子で識別される装置が算出しうる次キーの範囲の境界を示すキーである転送先最終キーを前記記憶する各キーの中から算出する処理と、前記クエリと前記転送先最終キーとを前記転送先ノード識別子で識別される装置へ転送する処理とを実行させる。
本発明の一態様における第一の記録媒体は、コンピュータに、ある値の範囲を特定するクエリを受け取る処理と、ある値を示すキーを記憶する処理と、所定のキーが示す値に最も近い値を示すキーである次キーを、前記クエリで特定される範囲に含まれるいずれかの値を示す各キーの中から算出する処理と、前記次キーが示す値と前記記憶する各キーがそれぞれ示す値との大小関係に基づいて、当該各キーから一のキーを特定し当該一のキーの値に基づいて識別される装置の識別子である転送先ノード識別子を特定する処理と、前記転送先ノード識別子に対応する前記一のキーが示す値に基づいて、当該転送先ノード識別子で識別される装置が算出しうる次キーの範囲の境界を示すキーである転送先最終キーを前記記憶する各キーの中から算出する処理と、前記クエリと前記転送先最終キーとを前記転送先ノード識別子で識別される装置へ転送する処理とを実行させる情報処理プログラムを記録する。
【発明の効果】
【０００６】
本発明の効果の一例は、大量のクエリが転送されても、ネットワーク負荷、シリアライズ処理の負荷およびデシリアライズ処理の負荷を低減できることである。
【図面の簡単な説明】
【０００７】
【図１】図１は、本発明の第一の実施の形態における情報処理システムの構成を示すブロック図である。
【図２】図２は、二次元の属性を示す例である。
【図３】図３は、情報処理システムが、空間充填曲線を使って、多次元の属性を１次元の情報を示すキーにマッピングする手順の一例を示す図である。
【図４】図４は、本発明の第一の実施の形態におけるノードの構成を示すブロック図である。
【図５】図５は、経路管理部が、各ノードの最大割当キーを記憶する構成の一例を示す図である。
【図６】図６は、次キーの算出例を示す図である。
【図７】図７は、ノードが備えるプログラム記憶装置を示すブロック図である。
【図８】図８は、本発明の第一の実施の形態におけるノードの動作の概要の一例を示すフローチャートである。
【図９】図９は、クエリ転送制御部が生成するメッセージの例を示す図である。
【図１０】図１０は、本発明の第一の実施の形態におけるノードの次キー算出部の動作の概要の一例を示すフローチャートである。
【図１１】図１１は、本発明の第一の実施の形態におけるノードの次キー算出部による次キー探索の処理の動作の概要の一例を示すフローチャートである。
【図１２】図１２は、次キー算出部の次キー探索における動作の具体例を示す図である。
【図１３】図１３は、インデックスｉの具体例を示す図である。
【図１４】図１４は、本発明の第一の実施の形態におけるノードの次キー算出部によるｘエリア探索の処理の動作の概要の一例を示すフローチャートである。
【図１５】図１５は、本発明の第一の実施の形態におけるノードの次キー算出部によるｙエリア探索の処理の動作の概要の一例を示すフローチャートである。
【図１６】図１６は、本発明の第一の実施の形態におけるノードの次キー算出部による次キー生成の処理の動作の概要の一例を示すフローチャートである。
【図１７】図１７は、次キー算出部が特定したヒルベルト曲線を模式的に示した図である。
【図１８】図１８は、本発明の第二の実施の形態におけるノードの構成を示すブロック図である。
【図１９】図１９は、本発明の第二の実施の形態におけるノードの動作のうち第一の実施の形態におけるノードと異なる動作の概要の一例を示すフローチャートである。
【図２０】図２０は、本発明の第三の実施の形態におけるノードの構成を示すブロック図である。
【図２１】図２１は、最小割当キー保持部が保持する最小割当キー表の例を示す図である。
【図２２】図２２は、本発明の第三の実施の形態におけるノードの動作のうち第一の実施の形態におけるノードと異なる動作の概要の一例を示すフローチャートである。
【図２３】図２３は、本発明の第三の実施の形態におけるノードの動作の具体例を示す説明図である。
【図２４】図２４は、本発明の第四の実施の形態におけるノードの構成を示すブロック図である。
【図２５】図２５は、経路管理部が記憶する情報の一例である。
【図２６】図２６は、本発明の第五の実施の形態における情報処理システムが備えるノードの構成を示すブロック図である。
【図２７】図２７は、ノードが備えるプログラム記憶装置を示すブロック図である。
【発明を実施するための形態】
【０００８】
本発明を実施するための形態について図面を参照して詳細に説明する。なお、各図面および明細書記載の各実施の形態において、同様の機能を備える構成要素には同様の符号が与えられている。
［第一の実施の形態］
図１は、本発明の第一の実施の形態における情報処理システム１０の構成を示すブロック図である。
図１を参照すると、本発明の第一の実施の形態における情報処理システム１０は、複数のノード１００ａないしノード１００ｒを備える。ここで、ノード１００ａないしノード１００ｒは、以下代表してノード１００とも記載される。各ノード１００は、少なくとも一つの他のノード１００と通信可能に接続されている。
第一の実施の形態における情報処理システム１０において、クエリを受信した各ノード１００は、クエリと共に各ノード１００が検索の責任を負うべきキーの境界を示す最終のキー（最終キー）をノードに転送する。つまり各ノード１００は、キー範囲を送信する必要がない。ここで検索とは、クエリに対応するキーを検索することを意味する。
各ノード１００が、キー範囲を転送する場合には、送信側のノードがキー範囲に含まれる各キーのデータをシリアライズしなければならない。また、受信側のノードは、シリアライズされたデータを受信した場合に、それをデシリアライズしなければならない。よって、第一の実施の形態における情報処理システム１０は、ネットワーク負荷をさらに軽減できる。さらに第一の実施の形態における情報処理システム１０は、各ノード１００におけるシリアライズ、デシリアライズにかかる処理の負担を軽減させることができる。以下、第一の実施の形態における情報処理システム１０について詳細に説明する。
情報処理システム１０は、空間充填曲線を使って多次元の属性を、ある値を示すキーにマッピングする。図２は、二次元の属性を示す例である。二次元の属性のそれぞれの属性値の組み合わせが、あるキー８０３にマッピングされる。例えば、図２において、二次元の属性からなる空間である属性空間８０４の少なくとも一部を示すクエリエリア８０５に含まれるある属性値の組み合わせ（ｘａ，ｙａ）が、あるキー８０３にマッピングされている。
図１において、情報処理システム１０は、ノード１００ａからノード１００ｒまでを備える。そして、それぞれのノード１００に対して一次元のキー空間８０１の一部のキー範囲８０２が割り当てられている。
本明細書において、データは、複数の属性を含んでもよい。例えば、データは、位置情報として「緯度」属性と「経度」属性とを含んでもよい。属性は、属性の種別を識別する情報である属性名と、属性名に対する値（属性値）を含む。例えば、「緯度」属性は、属性名「緯度」と、属性値「北緯３５度４０分」とをそれぞれ含んでもよい。
本明細書において、クエリは、属性値の範囲を指定する情報であってもよい。例えば、クエリは、北緯３５度３０分から北緯３５度５０分まで、東経１３９度４０分から東経１３９度５０分までといったように各属性値の範囲を指定する情報であってもよい。「北緯３５度４０分、東経１３９度４６分」というデータは、前述のクエリで指定される範囲に含まれる。よって該データは、前述のクエリ「北緯３５度３０分から北緯３５度５０分まで、東経１３９度４０分から東経１３９度５０分まで」に合致する。
次に、情報処理システム１０が、空間充填曲線を使って、多次元の属性を一次元の情報を示すキーにマッピングする手順について説明する。
図３は、情報処理システム１０が、空間充填曲線を使って、多次元の属性を一次元の情報を示すキーにマッピングする手順の一例を示す図である。
本例は、属性ｘと属性ｙとを含む二次元の属性が一次元の情報を示すキーにマッピングされる例である。まず、属性ｘの属性値範囲と属性ｙの属性値範囲とから、属性ｘサブキー範囲［０１１，１０１］と属性ｙサブキー範囲［００，０１］が生成される。ここで、サブキーとは、キーを生成するために使用される値である。図３の例では、属性ｘのサブキーは、３ビットである。また属性ｙのサブキーは、２ビットである。本例において、属性ｘサブキー範囲に含まれるサブキー集合｛０１１，１００，１０１｝と属性ｙサブキー範囲に含まれるサブキー集合｛００，０１｝の全組み合わせについて、各ビットを交互に並べたビット列がキーである。例えば、「０１１」と「００」の各ビットが交互に並べられると、「００１０１」が生成される。以上の処理により、属性ｘの属性値範囲と属性ｙの属性値範囲から、２×３個（＝６個）のキーが生成される。本明細書では、サブキーの組み合わせである、「０１１」と「００」と、からキーを生成することを、「（０１１，００）からキーを生成する」と表記する。上記のキー生成方法は例示であって、キー生成方法は、サブキー集合に含まれるビットの組み合わせに基づいてキーが生成される方法であればよい。
図４は、本発明の第一の実施の形態におけるノード１００の構成を示すブロック図である。
図４を参照すると、本発明の第一の実施の形態におけるノード１００は、受信部１０１と、経路管理部１０２と、次キー算出部１０３と、クエリ転送制御部１０４と、最終キー算出部１０５とを備える。
＝＝＝受信部１０１＝＝＝
受信部１０１は、図示しない外部システムまたは他のノード１００から少なくともクエリを含む情報を受け取る。受信部１０１は、受け取ったクエリを後述の次キー算出部１０３に渡す。
受信部１０１は、クエリと共に転送先最終キーを受け取ったか否かを判定する。転送先最終キーとは、そのクエリを受け取ったノード１００が検索の責任を負うべきキーの境界を示す最終のキー（最終キー）である。
＝＝＝経路管理部１０２＝＝＝
経路管理部１０２は、あるキーと、そのキーが割り当てられたノード１００に到達するための次の転送先であるノード１００を識別できる識別子とを対応付けて記憶する。そして経路管理部１０２は、一つのキー（宛先キー）を受け取ると、その宛先キーが示す値と記憶している各キーが示す値とを比較し、それらの値の大小関係に応じて一つの識別子を特定し、それを返す。
ノード１００に割り当てられるキーは、該ノードの割当キーと呼ばれ、割り当てられるキーの範囲は割当キー範囲と呼ばれる。割当キー範囲のうち、最小の値を示すキーは最小割当キーと呼ばれ、割当キー範囲のうち、最大の値を示すキーは最大割当キーと呼ばれる。ノード１００は割当キー範囲を示す情報を記憶してもよい。ノード１００が記憶する割当キー範囲を示す情報とは、最小割当キーおよび最大割当キーでもよいし、割当キー範囲に含まれるすべてのキーであってもよい。
キーはいずれかのノード１００を識別できる情報であってもよい。また、キーは、ノード１００を識別できる識別子、またはノードアドレスであってもよい。キーは、あるノードを識別できる識別子またはノードアドレスに一意に対応する情報であってもよい。
具体的には、経路管理部１０２は、ノード１００を識別できる識別子としてノードアドレスと、そのノード１００の最大割当キーと、を対応付けて記憶してもよい。
キーが各ノード１００の識別子である場合、経路管理部１０２は各ノード１００のノードアドレスとして、そのノード１００の最大割当キーを記憶してもよい。つまりこの場合、経路管理部１０２は、図５に示されるように、各ノード１００の最大割当キーを記憶してもよい。そしてこの最大割当キーが各ノード１００を識別できる識別子となっている。経路管理部１０２は、記憶している最大割当キーに基づいて、対応するノードのノードアドレスを算出してもよい。
経路管理部１０２は、ある宛先キーを受け取る。そして経路管理部１０２は、例えば、その宛先キーが示す値より大きくその値に最も近い値を示すキーを、自身が記憶しているキーの中から特定してもよい。この場合、経路管理部１０２は、宛先キーが示す値より大きい値を示すキーを記憶していない場合、最小値を示すキーを特定してもよい。そして経路管理部１０２は、特定したキーに対応付けられているノード１００の識別子を特定する。
また、経路管理部１０２は、例えば、その宛先キーが示す値を超えない最大値を示すキーを、自身が記憶しているキーの中から特定してもよい。この場合、経路管理部１０２は、宛先キーが示す値を超えない値を示すキーを記憶していない場合、最小値を示すキーを特定してもよい。
経路管理部１０２は、ノード１００の識別子に基づいてそのノード１００のノードアドレスを特定してもよい。また、ノード１００の識別子は、そのノード１００のノードアドレスであってもよい。第一の実施の形態では、ノード１００を識別できる識別子は、そのノード１００のノードアドレスであると仮定する。
各ノード１００は、この経路を示す情報を生成するために、少なくとも自ノード１００のノードアドレスと自ノード１００の最大割当キーとを他のノード１００に通知する。各ノード１００の経路管理部１０２は、通知される情報を元に他ノード１００との経路を示す情報（経路表）を生成し、その情報を記憶する。この経路表とは、具体的には前述の、あるキーと、そのキーが割り当てられたノード１００に到達するための次の転送先であるノード１００を識別できる識別子とを対応付けた情報である。
＝＝＝次キー算出部１０３＝＝＝
次キー算出部１０３は、受信部１０１がクエリを受け取ると、自ノード１００の最大割当キーとそのクエリとに基づき次キーを算出する。
あるキーｋの次キーとは、以下のように特定される。キーｋの次キーは、クエリに含まれる各属性の属性値範囲に含まれるそれぞれの属性値の組み合わせに基づいて特定される所定の値を示す各キーの中で、キーｋが示す値よりも大きく、かつ、その値に最も近い値を示すキーである。ただし、キーｋが示す値が、前述の所定の値のいずれよりも大きい場合、キーｋの次キーは、前述の所定の値の中で最小値を示すキーである。
図６は、次キー算出部１０３による次キーの算出例を示す図である。図６は、５ビットのキーにおける例である。クエリで指定された緯度の範囲と経度の範囲とから生成されたキーは、「００１０１」と「００１１１」と［１００００，１００１１］との６つのキーであると仮定する。図６において、次キー算出部１０３は、あるキー（現在キーｋｃｕｒｒｅｎｔ）の次のキー（次キーｋｎｅｘｔ）を算出すると仮定する。例えば、ｋｃｕｒｒｅｎｔが「１１１０１」である場合、ｋｃｕｒｒｅｎｔの次キーｋｎｅｘｔは、時計回りで次のキーである「００１０１」と特定される。また同様に、ｋｃｕｒｒｅｎｔが「００１０１」である場合、ｋｎｅｘｔは、「００１１１」と特定される。同様に、ｋｃｕｒｒｅｎｔが「１０００１」である場合、ｋｎｅｘｔは、「１００１０」と特定される。
本実施の形態において、キーが取り得る値の最大値を示すキー（図６では「１１１１１」）の値に１加算した値を示すキーは、キーが取り得る値の最小値を示すキー（図６では「０００００」）である。また、キーが取り得る値の最小値を示すキー（図６では「０００００」）の値に１減算した値を示すキーは、キーが取り得る値の最大値を示すキー（図６では「１１１１１」）である。また本実施の形態において、キーを示す値が０より小さい値、または全ノード数を超える値、すなわちキーが取り得る値の最大値を超える値となった場合には、それらの値は、ノード数を法としたそれらの値に合同な値に置き換えられてもよい。
また、次キー算出部１０３は、後述のクエリ転送制御部１０４から検査対象キーｋを受け取ると、その検査対象キーｋを元に次キーを、クエリに含まれる各属性の属性値範囲から生成される各キーの中から算出する。そして次キー算出部１０３は、算出した次キーをクエリ転送制御部１０４に渡す。
＝＝＝クエリ転送制御部１０４＝＝＝
クエリ転送制御部１０４は、次キー算出部１０３が算出した次キーを受け取る。そしてクエリ転送制御部１０４は、受け取った次キーが自ノード１００の最大割当キーから最終キーまでのいずれかのキーであるか否か判定する。ここで、自ノード１００の最終キーは、受信部１０１がクエリを受け取った際に、後述の最終キー算出部１０５が特定する。
クエリ転送制御部１０４は、次キーが自ノード１００の最大割当キーから最終キーまでのいずれかのキーであると判定した場合に、以下の処理を行う。
まず、クエリ転送制御部１０４は、経路管理部１０２を参照し、次キーに対応するノードアドレス“ａｄｄｒ”を取得する。そしてクエリ転送制御部１０４は、ノードアドレス“ａｄｄｒ”を後述の最終キー算出部１０５に渡す。
クエリ転送制御部１０４は、次キー算出部１０３に、最終キー算出部１０５が算出した最終キーである検査対象キーｋを渡す。次キー算出部１０３は、検査対象キーｋを受け取ると、その検査対象キーｋを元に次キーを再び算出し、その次キーをクエリ転送制御部１０４に渡す。
一方、特定された次キーが自ノード１００の最大割当キーから最終キーまでのいずれかのキーでなければ、クエリ転送制御部１０４は、以下の処理を行う。すなわちクエリ転送制御部１０４は、最終キー算出部１０５が生成した転送リストの各対について、対の一方である転送先最終キーと、クエリとを含むメッセージを生成する。そしてクエリ転送制御部１０４は、生成したメッセージを対のもう一方である転送先ノードアドレスで特定されるノードに送信する。転送リストについての説明は、後述される。
＝＝＝最終キー算出部１０５＝＝＝
最終キー算出部１０５は、受信部１０１がクエリとともに転送先最終キーを受け取っていないと判定した場合に、以下の処理を実行する。すなわち最終キー算出部１０５は、自ノード１００の最小割当キーから１を減じた値を示すキーを最終キーと算出する。自ノード１００の最小割当キーが示す値が、キーの取り得る値の最小値であった場合、最終キー算出部１０５は、キーが取り得る値の最大値を示すキーを最終キーと特定する。
また、最終キー算出部１０５は、受信部１０１がクエリと共に転送先最終キーを受け取っていると判定した場合に、その受け取った転送先最終キーを自ノード１００の最終キーと特定する。
最終キー算出部１０５は、クエリ転送制御部１０４からノードアドレス“ａｄｄｒ”を受け取った場合に以下の処理を実行する。すなわち、最終キー算出部１０５は、経路管理部１０２を参照し、経路管理部１０２に記憶されるノードアドレスから、“ａｄｄｒ”以外で、次キーからの距離が最も小さいキーが割り当てられているノードアドレス“ｎｅｘｔ”を特定する。すなわち最終キー算出部１０５は、ノードアドレス“ａｄｄｒ”に対応付けられているキーが示す値より大きくその値に最も値が近い値を示すキーに対応付けられているノードアドレスを“ｎｅｘｔ”と特定する。距離についての説明は、後述される。
次に、最終キー算出部１０５は、経路管理部１０２を参照し、ノードアドレス“ｎｅｘｔ”に対応付けられているキーを検査対象キーｋと特定する。
最終キー算出部１０５は、“ａｄｄｒ”を転送先ノードアドレス、検査対象キーｋを転送先最終キーとし、それらの対を転送リストに挿入する。転送リストとは、クエリの転送先のノードアドレスを示す転送先ノードアドレスと、該クエリと共に送信する最終キーである転送先最終キーと、の対を要素に含むリストである。
受信部１０１と、経路管理部１０２と、次キー算出部１０３と、クエリ転送制御部１０４と、最終キー算出部１０５とは、例えば、プログラム（情報処理プログラム）によって動作するＣＰＵによって実現される。受信部１０１と、経路管理部１０２と、次キー算出部１０３と、クエリ転送制御部１０４と、最終キー算出部１０５とが、同一のＣＰＵによって実現されてもよい。この場合、プログラムは、例えば、ノード１００が備えるプログラム記憶装置１２１（図７参照）に記憶される。ＣＰＵ１２２は、そのプログラムを読み込み、そのプログラムにしたがって、受信部１０１と、経路管理部１０２と、次キー算出部１０３と、クエリ転送制御部１０４と、最終キー算出部１０５として動作すればよい。
また、前述のプログラムのコードを記録した記録媒体（または記憶媒体）が、ノード１００に供給され、ノード１００が記録媒体に格納されたプログラムのコードを読み出し実行してもよい。すなわち、本発明は、第一の実施の形態におけるノード１００が実行するためのソフトウェア（情報処理プログラム）を一時的に記憶するまたは非一時的に記憶する記録媒体１２４も含む。
経路管理部１０２は、例えば、ハードディスク１２３のような記憶装置によって実現されてもよい。
次に、本発明の第一の実施の形態におけるノード１００の動作の一例について説明する。図８は、本発明の第一の実施の形態におけるノード１００の動作の概要の一例を示すフローチャートである。
受信部１０１は、図示しない外部システム、または他のノード１００から少なくともクエリを含む情報を受け取る（ステップＤ１）。そして受信部１０１は、受け取った情報に転送先最終キーが含まれているか否か判定する（ステップＤ２）。受信部１０１が、受け取った情報に転送先最終キーが含まれていると判定した場合に（ステップＤ２の“Ｙｅｓ”）、以下の処理を実行する。すなわち最終キー算出部１０５は、受け取った転送先最終キーを自ノード１００の最終キーとして特定する（ステップＤ３）。そしてノード１００の処理はステップＤ５へ移行する。一方、受信部１０１が、受け取った情報に転送先最終キーが含まれていないと判定した場合（ステップＤ２の“Ｎｏ”）に、最終キー算出部１０５は、以下の処理を実行する。すなわち最終キー算出部１０５は、自ノードの最小割当キーから１を減じた値を示すキーを自ノード１００の最終キーと算出する（ステップＤ４）。そして、ノード１００の処理は、ステップＤ５へ移行する。
次キー算出部１０３は、自ノード１００の最大割当キーを検査対象キーｋと特定する（ステップＤ５）。そして、次キー算出部１０３は、検査対象キーｋの次キーを、受信部１０１が受け取ったクエリに基づいて算出する（ステップＤ６）。
そしてクエリ転送制御部１０４は、次キー算出部１０３が算出する次キーが示す値（ｋ１）が、自ノード１００の最大割当キーが示す値（ｋ２）と最終キーが示す値（ｋ３）との間にあるか否か判定する（ステップＤ７）。
「ｋ１がｋ２とｋ３との間にある」とは、値ｋ２に対して１ずつ加算した際の結果が、値ｋ３に達する前に値ｋ１となる場合があることをいう。ここで、ｋ２に対して１ずつ加算した際の結果が、キーが取り得る値の最大値ＭＡＸに達した場合、ＭＡＸに対して１を加算した結果の値はキーがとりうる値の最小値ＭＩＮであるとみなされる。
ステップＤ７において、最終キーは、ステップＤ１においてクエリとともに受け取った最終キー、または、ステップＤ４において最終キー算出部１０５が算出した最終キーのいずれかである。
クエリ転送制御部１０４は、次キーが示す値が自ノード１００の最大割当キーが示す値と最終キーが示す値との間にあると判定した場合（ステップＤ７の“Ｙｅｓ”）、以下の処理を実行する。すなわちクエリ転送制御部１０４は、検査対象キーｋの次キーを以前にすでに次キー算出部１０３から受け取っているか否か判定する（ステップＤ８）。この場合、クエリ転送制御部１０４は、次キー算出部１０３から次キーを受け取るたびに、その次キーを記憶しておいてもよい。
クエリ転送制御部１０４は、検査対象キーｋの次キーをすでに次キー算出部１０３から受け取っていると判定した場合に（ステップＤ８の“Ｙｅｓ”）、クエリ転送制御部１０４の処理は、後述されるステップＤ１５に移行する。
一方、クエリ転送制御部１０４は、検査対象キーｋの次キーをまだ次キー算出部１０３から受け取っていないと判定した場合（ステップＤ８の“Ｎｏ”）、以下の処理を実行する。すなわちクエリ転送制御部１０４は、経路管理部１０２を参照し、次キーに対応するノードアドレス“ａｄｄｒ”を取得する（ステップＤ９）。クエリ転送制御部１０４は、取得したノードアドレス“ａｄｄｒ”を最終キー算出部１０５に渡す。
最終キー算出部１０５は、経路管理部１０２に記憶されているノードの中から、“ａｄｄｒ”以外で、かつ、次キーとの距離が最も小さいキーが割り当てられているノードのノードアドレス“ｎｅｘｔ”を取得する（ステップＤ１０）。
ここで、距離とは、ルーティングプロトコルに応じて特定される。例えばルーティングプロトコルとしてＣｈｏｒｄが適用された場合、距離とは、ノード間の『時計回り距離』となる。キーｋ１からキーｋ２までの時計回り距離は、ｋ１＜ｋ２が成り立つ場合、ｋ２−ｋ１となる。図６は、時計回り距離を算出する具体例を示す図である。図６は、５ビットのキーにおける例を示す図である。例えば、キー「００１０１」（１０進数で５）からキー「００１１１」（１０進数で７）までの距離は、７−５＝２となる。ｋ１＜ｋ２が成り立たない場合、距離は、数式ＭＡＸ−ｋ１＋ｋ２＋１で算出される。ＭＡＸは、キーが取り得る値の最大値を示す。図６の例では、ＭＡＸの値は、「１１１１１」（１０進数で３１）である。例えば、図６に示されるｋｃｕｒｒｅｎｔ（１０進数で２９）からｋｎｅｘｔ（１０進数で５）までの距離は、３１−２９＋５＋１＝８である。
前述のノードアドレス“ｎｅｘｔ”の取得方法が、以下では説明される。例えば、ノード１００ａ、１００ｂおよび１００ｃの割当キー範囲がそれぞれ［０，１０］、［２０，３０］、［４０，５０］であると仮定する。ノード１００ａに割り当てられているキーからノード１００ｂに割り当てられているキーへの距離は、２０−１０＝１０と算出される。また、ノード１００ａに割り当てられているキーからノード１００ｃに割り当てられているキーへの距離は、４０−１０＝３０と算出される。よって、ノード１００ｂ、１００ｃのうち、ノード１００ａに割り当てられているキーからの距離が最も小さいキーが割り当てられているノードは、１００ｂである。各ノードの割当キーは、連続した値を示すキーであり、かつ、排他的である。よって、クエリ転送制御部１０４または経路管理部１０２は、ノード１００の割当キーのいずれか一つをノード１００毎に記憶していれば、それらのノード１００の位置関係を算出することができる。
最終キー算出部１０５は、経路管理部１０２においてノードアドレス“ｎｅｘｔ”に対応付けられて記憶されているキーを新たな検査対象キーｋと特定する（ステップＤ１１）。
最終キー算出部１０５は、新たな検査対象キーｋが示す値（ｋ４）が、次キー算出部１０３が算出する次キーが示す値（ｋ１）と最終キーが示す値（ｋ３）との間にあるか否か判定する（ステップＤ１２）。
最終キー算出部１０５は、新たな検査対象キーｋが示す値が、次キー算出部１０３が算出する次キーが示す値と最終キーが示す値との間にあると判定した場合（ステップＤ１２の“Ｙｅｓ”）、以下の処理を実行する。すなわち最終キー算出部１０５は、ノードアドレス“ａｄｄｒ”を要素の一つである転送先ノードアドレスとし、検査対象キーｋを要素のもう一つである転送先最終キーとした、対を転送リストに挿入する（ステップＤ１３）。そしてノード１００の処理は、ステップＤ６へと移行する。
一方、最終キー算出部１０５は、新たな検査対象キーｋが示す値が、次キー算出部１０３が算出する次キーが示す値と最終キーが示す値との間にないと判定した場合（ステップＤ１２の“Ｎｏ”）、以下の処理を実行する。すなわち、最終キー算出部１０５は、ノードアドレス“ａｄｄｒ”を要素の一つである転送先ノードアドレスとし、自ノード１００の最終キーを要素のもう一つである転送先最終キーとした、対を転送リストに挿入する（ステップＤ１４）。そしてノード１００の処理は、ステップＤ１５へと移行する。
ステップＤ７の処理において、次キーが示す値が自ノードの最小割当キーが示す値と最終キーが示す値との間にないと判定した場合（ステップＤ７の“Ｎｏ”）、クエリ転送制御部１０４は、次の処理を実行する。すなわちクエリ転送制御部１０４は、最終キー算出部１０５が生成した転送リストに含まれる各対について、対の一方の要素である転送先最終キーと、対応するクエリとに基づいて図９に示される構造のメッセージを生成する。図９は、クエリ８２０と転送先最終キー８２１とを含むメッセージ８１９の例を示す図である。そしてクエリ転送制御部１０４は、生成したメッセージを対のもう一方の要素である転送先ノードアドレスで特定されるノード１００へ送信する（ステップＤ１５）。
図１０は、本発明の第一の実施の形態におけるノード１００の次キー算出部１０３の動作の概要の一例を示すフローチャートである。
次キー算出部１０３は、クエリと、ある一つのキーである現在キーｋｃｕｒｒｅｎｔとを受け取る（ステップＥ１）。そして次キー算出部１０３は、クエリを構成する属性ｘの属性値範囲、属性ｙの属性値範囲からそれぞれ、属性ｘサブキー範囲［ｘｍｉｎ，ｘｍａｘ］と属性ｙサブキー範囲［ｙｍｉｎ，ｙｍａｘ］を生成する（ステップＥ２）。ここで、属性ｘサブキー範囲と属性ｙサブキー範囲とに基づいて特定される長方形は、クエリエリアと呼ばれ、［ｘｍｉｎ，ｘｍａｘ，ｙｍｉｎ，ｙｍａｘ］と表記される。
次キー算出部１０３は、現在キーｋｃｕｒｒｅｎｔが、キーの取り得る値の最大値であるか否か判定する（ステップＥ３）。次キー算出部１０３は、次キーがキーの取り得る値の最大値であると判定した場合（ステップＥ３の“Ｙｅｓ”）、ｘｍｉｎとｙｍｉｎとから一のキーを生成する。そして次キー算出部１０３は、生成したキーを次キーｋｎｅｘｔとして算出する（ステップＥ４）。そして次キー算出部１０３の処理は終了する。図６に示される例の場合、キーの取り得る値の最大値は、「１１１１１」である。
次キー算出部１０３は、次キーがキーの取り得る値の最大値でないと判定した場合（ステップＥ３の“Ｎｏ”）、現在のキーｋｃｕｒｒｅｎｔが示す値に１を加算した値を示すキーｋｔｍｐを算出する（ステップＥ５）。ｋｔｍｐは、次キーの候補である。
次キー算出部１０３は、ｋｔｍｐから属性ｘサブキーｘｔｍｐと属性ｙサブキーｙｔｍｐを導出する（ステップＥ６）。例えば、ｋｔｍｐが、「１１１１０」である場合、ｘｔｍｐは、キーの奇数ビットに基づいて「１１０」と導出される。また、ｙｔｍｐは、キーの偶数ビットに基づいて「１１」と導出される。
そして次キー算出部１０３は、（ｘｍａｘ，ｙｍａｘ）に基づいてキーａｍａｘを生成する。キーａｍａｘは、属性ｘサブキー範囲［ｘｍｉｎ，ｘｍａｘ］と属性ｙサブキー範囲［ｙｍｉｎ，ｙｍａｘ］とに基づいて生成されるキーのうちの最大値を示すキーである。
次に、次キー算出部１０３は、（ｘｔｍｐ，ｙｔｍｐ）がクエリエリア［ｘｍｉｎ，ｘｍａｘ，ｙｍｉｎ，ｙｍａｘ］に含まれているか否かを判定する（ステップＥ７）。次キー算出部１０３は、（ｘｔｍｐ，ｙｔｍｐ）がクエリエリア［ｘｍｉｎ，ｘｍａｘ，ｙｍｉｎ，ｙｍａｘ］に含まれていると判定した場合（ステップＥ７の“Ｙｅｓ”）、ｋｔｍｐを次キーｋｎｅｘｔとして算出する（ステップＥ８）。一方、次キー算出部１０３は、（ｘｔｍｐ，ｙｔｍｐ）がクエリエリア［ｘｍｉｎ，ｘｍａｘ，ｙｍｉｎ，ｙｍａｘ］に含まれていないと判定した場合（ステップＥ７の“Ｎｏ”）、ｋｔｍｐ＞ａｍａｘが成り立つか否か判定する（ステップＥ９）。次キー算出部１０３は、ｋｔｍｐ＞ａｍａｘが成り立つと判定した場合（ステップＥ９の“Ｙｅｓ”）、次キー算出部１０３の処理は、ステップＥ４に移行する。なお、この場合は、次キーの候補に、ｋｔｍｐが示す値以上の値を示すキーが存在しない場合に該当する。
一方、次キー算出部１０３は、ｋｔｍｐ＞ａｍａｘが成り立たないと判定した場合（ステップＥ９の“Ｎｏ”）、次キー探索を実行する（ステップＥ１０）。次キー探索の具体例は、後述される。
図１１は、本発明の第一の実施の形態におけるノード１００の次キー算出部１０３による前述ステップＥ１０における次キー探索の処理の動作の概要の一例を示すフローチャートである。また図１２は、次キー算出部１０３の次キー探索における動作の具体例を示す図である。なお、図１１ないし図１６に示される次キー探索の処理の動作は、空間充填曲線として、ＸＺ−Ｏｒｄｅｒが適用されている例である。空間充填曲線として他の曲線が適用される例は、後述される。
図１２を参照すると、現在キーｋｃｕｒｒｅｎｔ８２２は、「０１００１」である。この場合、ｋｔｍｐ８２３は、ｋｃｕｒｒｅｎｔに１を加えた値「０１０１０」である。次キー算出部１０３は、ｋｔｍｐから属性ｘサブキーｘｔｍｐ＝「０００」と属性ｙサブキーｙｔｍｐ＝「１１」を導出する。２つのサブキーから特定されるキー空間上の点（０００，１１）は、クエリエリア［０１１，１０１，００，０１］に含まれない。ａｍａｘ８２４は、（ｘｍａｘ，ｙｍａｘ）＝（１０１，０１）から求められるキー「１００１１」である。ここで、ｋｔｍｐ＝「０１０１０」であるため、ｋｔｍｐ＞ａｍａｘは、成立しない。よって、次キー算出部１０３は、以下で説明する次キー探索の処理を実行する。
次キー探索は、探索する対象のエリア（探索エリア）を、探索エリア内に次キーが見つかるまで、再帰的に拡大する点が特徴である。本例において、探索エリアは、［ｘｓ−ｍｉｎ，ｘｓ−ｍａｘ，ｙｓ−ｍｉｎ，ｙｓ−ｍａｘ］と表記される。
次キー算出部１０３は、［ｘｓ−ｍｉｎ，ｘｓ−ｍａｘ，ｙｓ−ｍｉｎ，ｙｓ−ｍａｘ］の初期値を、［ｘｔｍｐ，ｘｔｍｐ，ｙｔｍｐ，ｙｔｍｐ］と特定する（ステップＥ１００１）。図１２の例では、探索エリアは、［０００，０００，１１，１１］である。
次キー算出部１０３は、インデックスｉを１にセットする（ステップＥ１００２）。このインデックスｉは、図１３に示されるように、キーに含まれるビット列の下位ビットからの桁数を表す。次キー算出部１０３は、インデックスｉが奇数であるか偶数であるかを判定する（ステップＥ１００３）。
次キー算出部１０３は、インデックスｉを１からキーを構成するビット数になるまでインクリメントすることで探索エリアを拡大する。ｉが奇数の場合（ステップＥ１００３の『奇数』）、ｘエリア探索を行う（ステップＥ１００４）。ｘエリア探索の具体例は、後述される。一方、ｉが偶数の場合（ステップＥ１００３の『偶数』）、ｙエリア探索を行う（ステップＥ１００５）。ｙエリア探索の具体例は、後述される。
次キー算出部１０３は、ｘエリア探索、またはｙエリア探索を行うことで次キーが存在するエリアがあるか否か判定する（ステップＥ１００６）。次キー算出部１０３は、次キーが存在するエリアがあると判定した場合（ステップＥ１００６の“Ｙｅｓ”）、次キー生成を行う（ステップＥ１００７）。次キー生成の具体例は、後述される。一方、次キー算出部１０３は、次キーが存在するエリアがないと判定した場合（ステップＥ１００６の“Ｎｏ”）、ｉをインクリメントする（ステップＥ１００８）。そして次キー算出部１０３の処理は、ステップＥ１００３に移行する。
インデックスｉの初期値は１である。したがって次キー算出部１０３は、まずｘエリア探索を行う。ｘエリア探索とは、ｘ軸方向に探索エリアを拡大し、増分エリアに次キーが含まれているかどうかを判定する処理である。増分エリアとは、探索エリアが拡大された際の、拡大後の探索エリアから拡大前の探索エリアが除かれたエリアである。またｙエリア探索とは、ｙ軸方向に探索エリアを拡大し、増分エリアに次キーが含まれているかどうかを判定する処理である。
図１４は、本発明の第一の実施の形態におけるノード１００の次キー算出部１０３による前述ステップＥ１００４におけるｘエリア探索の処理の動作の概要の一例を示すフローチャートである。
次キー算出部１０３は、探索エリア［ｘｓ−ｍｉｎ，ｘｓ−ｍａｘ，ｙｓ−ｍｉｎ，ｙｓ−ｍａｘ］のうち、ｘｓ−ｍｉｎの（ｉ＋１）／２ビット目を０にセットし、ｘｓ−ｍａｘの（ｉ＋１）／２ビット目を１にセットする（ステップＥ１４０１）。この処理によって、探索エリアがｘ軸方向に拡大し、探索エリアの大きさは、拡大前の２倍になる。
図１２の例では、インデックスｉ＝１の場合、次キー算出部１０３は、探索エリア［ｘｓ−ｍｉｎ，ｘｓ−ｍａｘ，ｙｓ−ｍｉｎ，ｙｓ−ｍａｘ］＝［０００，０００，１１，１１］のｘｓ−ｍｉｎとｘｓ−ｍａｘの（ｉ＋１）／２ビット目、すなわち１ビット目を更新する。そして、次キー算出部１０３は、探索エリアを［０００，００１，１１，１１］に更新する。
次に、次キー算出部１０３は、増分エリアに対応するキーの示す値が、拡大前の検索エリアに対応するキーの示す値よりも大きいか否か判定する（ステップＥ１４０２）。具体的には、次キー算出部１０３は、ｘｔｍｐの（ｉ＋１）／２ビット目が０であるか否か判定する。ｘｔｍｐの（ｉ＋１）／２ビット目が０であれば、増分エリアに対応するキーが示す値が拡大前の検索エリアに対応するキーが示す値よりも大きくなる。
例えば図１２を参照すると、探索エリアが［０００，０００，１１，１１］から［０００，００１，１１，１１］へと拡大される場合、［００１，００１，１１，１１］が増分エリアである。この場合、増分エリアに対応するキー「０１０１１」が、拡大前の検索エリアに対応するキー「０１０１０」よりも大きい。増分エリアに対応するキーが、拡大前の検索エリアに対応するキーよりも大きいことは、ｘｔｍｐ、すなわち「０００」の（ｉ＋１）／２ビット目、すなわち１ビット目が０であることから導き出せる。
次キー算出部１０３は、増分エリアに対応するキーの示す値が、拡大前の検索エリアに対応するキーの示す値よりも大きいと判定した場合（ステップＥ１４０２の“Ｙｅｓ”）、以下の処理を実行する。すなわち次キー算出部１０３は、探索エリア［ｘｓ−ｍｉｎ，ｘｓ−ｍａｘ，ｙｓ−ｍｉｎ，ｙｓ−ｍａｘ］から増分エリア［ｘｓ−ｍｉｄ，ｘｓ−ｍａｘ，ｙｓ−ｍｉｎ，ｙｓ−ｍａｘ］を算出する（ステップＥ１４０３）。ここで、ｘｓ−ｍｉｄとは、ｘｓ−ｍｉｎの（ｉ＋１）／２ビット目を１にセットした値である。
例えば、図１２の例において、ｉ＝１、ｘｓ−ｍｉｎ＝「０００」、ｘｓ−ｍａｘ＝「００１」である場合を仮定する。すると次キー算出部１０３は、ｘｓ−ｍｉｎの１ビット目に１をセットした値をｘｓ−ｍｉｄと算出する。すなわち次キー算出部１０３は、ｘｓ−ｍｉｄ＝「００１」と算出する。
一方、次キー算出部１０３は、増分エリアに対応するキーの示す値が、拡大前の検索エリアに対応するキーの示す値よりも大きくないと判定した場合（ステップＥ１４０２の“Ｎｏ”）、「探索は未完である」という情報を通知する。そして次キー算出部１０３は、ｘエリア探索の処理を終了する（ステップＥ１４０４）。
次キー算出部１０３は、クエリエリア［ｘｍｉｎ，ｘｍａｘ，ｙｍｉｎ，ｙｍａｘ］が増分エリア［ｘｓ−ｍｉｄ，ｘｓ−ｍａｘ，ｙｓ−ｍｉｎ，ｙｓ−ｍａｘ］とオーバーラップするか否か判定する（ステップＥ１４０５）。次キー算出部１０３は、クエリエリアと増分エリアとがオーバーラップすると判定した場合（ステップＥ１４０５の“Ｙｅｓ”）、次キーが増分エリアに存在する値という情報を通知して、ｘエリア探索の処理を終了する（ステップＥ１４０６）。
一方、次キー算出部１０３は、クエリエリアと増分エリアとがオーバーラップしないと判定した場合（ステップＥ１４０５の“Ｙｅｓ”）、探索は未完であるという情報を通知して、ｘエリア探索の処理を終了する（ステップＥ１４０４）。図１２の例では、クエリエリア［０１１，１０１，００，０１］は、増分エリア［００１，００１，１１，１１］とオーバーラップしない。よって、次キー算出部１０３は、次キーが存在するエリアは見つからなかったと判定する。
図１５は、本発明の第一の実施の形態におけるノード１００の次キー算出部１０３による前述ステップＥ１００５におけるｙエリア探索の処理の動作の概要の一例を示すフローチャートである。ｙエリア探索の処理の動作は、ｘエリア探索の動作と類似している。よって説明は、省略される。
図１２の例では、ｉ＝１の場合に、探索は未完となる。よって次キー算出部１０３は、ｉをインクリメントする。インクリメント後のｉは、２であり、偶数である。よって次キー算出部１０３は、ｙエリア探索を実行する。ｙエリア探索において、探索エリアが［０００，００１，１１，１１］から［０００，００１，１０，１１］へと拡大される。増分エリアに対応するキーは、拡大前の探索エリアに対応するキーより小さい。よって、次キー算出部１０３は、次キーが存在するエリアは見つからなかったと判定する。
次キー算出部１０３は、以上のようなｘエリア探索とｙエリア探索を、増分エリアがクエリエリアとオーバーラップするまで、交互に実行する。
例えばｉ＝５の場合に、探索エリアが［０００，０１１，００，１１］から［０００，１１１，００，１１］へと拡大される。増分エリア［１００，１１１，００，１１］は、クエリエリア［０１１，１０１，００，０１］とオーバーラップする。よって次キー算出部１０３は、次キーが存在するエリアが見つかったと判定する。
次キー算出部１０３は、次キーが存在する増分エリアが見つかったと判定したら、次キー生成を行う。
図１６は、本発明の第一の実施の形態におけるノード１００の次キー算出部１０３による前述ステップＥ１００７における次キー生成の処理の動作の概要の一例を示すフローチャートである。
まず、次キー算出部１０３は、増分エリアとクエリエリアでオーバーラップしているエリアを取り出す（ステップＥ１７０１）。取り出したエリアの（ｘ軸の最小値，ｙ軸の最小値）に基づいて生成されるキーが次キーである。具体的には、次キー算出部１０３は以下のように動作する。
次キー算出部１０３は、インデックスｉが偶数であるか奇数であるかを判定する（ステップＥ１７０２）。ｉが奇数であれば（ステップＥ１７０２の奇数）、次キー算出部１０３は、ｘ軸の最小値を、ｘｓ−ｍｉｄとｘｍｉｎとのうちより大きいほうの値と特定する。また次キー算出部１０３は、ｙ軸の最小値を、ｙｓ−ｍｉｎとｙｍｉｎとのうちより大きいほうの値と特定する。
すなわち、ｉが奇数であれば、次キー算出部１０３は、（ｘ軸の最小値，ｙ軸の最小値）＝（ｘｓ−ｍｉｄとｘｍｉｎのうちより大きいほうの値，ｙｓ−ｍｉｎとｙｍｉｎのうちより大きいほうの値）と算出する（ステップＥ１７０３）。一方、ｉが偶数であれば（ステップＥ１７０２の偶数）、同様に次キー算出部１０３は、（ｘ軸の最小値，ｙ軸の最小値）＝（ｘｓ−ｍｉｎとｘｍｉｎのうちより大きいほうの値，ｙｓ−ｍｉｄとｙｍｉｎのうちより大きいほうの値）と算出する（ステップＥ１７０４）。
次キー算出部１０３は、算出したｘ軸の最小値およびｙ軸の最小値に基づいて次キーを算出する（ステップＥ１７０５）。図１２の例では、次キー算出部１０３は、（ｘ軸の最小値，ｙ軸の最小値）＝（１００，００）と算出する。よってその値に基づいて生成されたキー「１００００」が次キーである。
図１１ないし図１６に示される次キー探索の処理の動作は、空間充填曲線として、ＸＺ−Ｏｒｄｅｒが適用されている例である。空間充填曲線として他の曲線が適用されてもよい。例えば空間充填曲線として、非特許文献２に示されるような、ヒルベルト曲線（Ｈｉｌｂｅｒｔ  ｃｕｒｖｅ）、グレイコード（Ｇｒａｙ  ｃｏｄｅ）、ペアノ曲線（Ｐｅａｎｏ  ｃｕｒｖｅ）、Ｚ−ｍｉｒｒｏｒ、Ｕ−ｉｎｄｅｘが適用されてもよい。次キー算出部１０３は、前述ステップＥ１０における次キー探索の処理の動作を適用する空間充填曲線に基づいて適宜変更する。
例えば、次キー算出部１０３は、空間充填曲線としてヒルベルト曲線を利用した場合、以下のように前述ステップＥ１０における次キー探索の処理を行う。
まず、次キー算出部１０３は、ヒルベルト曲線を算出する。具体的には次キー算出部１０３は、属性ｘサブキーのビット数および属性ｙサブキーのビット数の最大値をヒルベルト曲線の位数と特定する。そして次キー算出部１０３は、キーの取り得る値の最小値を起点としてヒルベルト曲線を特定する。図１７は、次キー算出部１０３が特定したヒルベルト曲線を模式的に示した図である。
そして、次キー算出部１０３は、図１７に示された情報を元に、前述のステップＥ１００１ないしステップＥ１００８の処理を実行すればよい。本例におけるステップＥ１００１ないしステップＥ１００８の処理は前述の各処理と同様である。
第一の実施の形態における情報処理システム１０において、クエリを受信した各ノード１００は、クエリと共に各ノード１００が責任を負うべきキーの境界を示す最終のキー（最終キー）をノード１００に転送する。つまり各ノード１００は、キー範囲を送信する必要がない。
各ノード１００が、キー範囲を転送する場合には、送信側のノードがキー範囲に含まれる各キーのデータをシリアライズしなければならない。また、受信側のノードは、シリアライズされたデータを受信した場合に、それをデシリアライズしなければならない。よって、第一の実施の形態における情報処理システム１０は、ネットワーク負荷をさらに軽減できる。さらに第一の実施の形態における情報処理システム１０は、各ノード１００におけるシリアライズ、デシリアライズにかかる処理の負担を軽減させることができる。
［第二の実施の形態］
第二の実施の形態における情報処理システム２０は、第一の実施の形態における情報処理システム１０と同様に、少なくとも一つのノード２００を備える。
図１８は、本発明の第二の実施の形態におけるノード２００の構成を示すブロック図である。
図１８を参照すると、本発明の第二の実施の形態におけるノード２００は、受信部１０１と、経路管理部１０２と、次キー算出部２０３と、クエリ転送制御部１０４と、最終キー算出部１０５と、クエリ処理部２０６とを備える。
第二の実施の形態におけるノード２００は、クエリを受け取り、受け取ったクエリを処理する。
＝＝＝次キー算出部２０３＝＝＝
次キー算出部２０３は、第一の実施の形態における次キー算出部１０３が備える機能のほかに以下の機能を備える。
次キー算出部２０３は、受信部１０１がクエリを受け取ると、受け取ったクエリと自ノード２００の最小割当キーとに基づいて次キーを算出する。そして、次キー算出部２０３は、算出した次キーが自ノード２００の割当キーであるか否か判定する。算出された次キーが自ノード２００の割当キーであれば、次キー算出部２０３は、クエリをクエリ処理部２０６に渡す。
次キー算出部２０３が次キーを算出する方法は第一の実施の形態における次キー算出部１０３が次キーを算出する方法と同様である。
＝＝＝クエリ処理部２０６＝＝＝
クエリ処理部２０６は、次キー算出部２０３からクエリを受け取り、受け取ったクエリを処理する。クエリ処理部２０６が行う処理は、情報処理システム２０の応用方法によって異なる。例えば、情報処理システム２０は、Ｐｕｂｌｉｓｈ／Ｓｕｂｓｃｒｉｂｅ型のシステムとして利用されうる。
Ｐｕｂｌｉｓｈ／Ｓｕｂｓｃｒｉｂｅ型のシステムでは、アプリケーションが、あらかじめデータの条件（データの条件とは、これまでの説明のクエリに相当する）をシステムに登録する。データの条件に合致するイベントが発生すると、そのイベントは、データの条件を登録したアプリケーションに通知される。イベントがシステムに入力されることは、Ｐｕｂｌｉｓｈと、データの条件がシステムに登録されることは、Ｓｕｂｓｃｒｉｂｅとそれぞれ呼ばれる。
第二の実施の形態において、例えばあらかじめ、ユーザがデータの条件（データ条件）を情報処理システム２０に登録しておく。そしてデータ条件にマッチするデータが情報処理システム２０に入力されたら、該データを、データ条件を登録した外部システムに通知する。この場合、データ条件とは、クエリに相当する。よってクエリ処理部２０６は、クエリをメモリ上に記憶し、データが入力されたときにクエリとデータとの合致判定をする機能手段を備える。その後、データがクエリ処理部２０６に入力されたら、クエリ処理部２０６は、メモリ上に保持しているクエリとの合致判定を行う。クエリ処理部２０６は、合致したと判定した場合に、所定の通知先にその旨を通知する。
図１９は、本発明の第二の実施の形態におけるノード２００の動作のうち第一の実施の形態におけるノードとは異なる動作の概要の一例を示すフローチャートである。本発明の第二の実施の形態におけるノード２００の動作のうち、第一の実施の形態におけるノード１００の動作と同様の機能の説明は、省略される。
ノード２００は、図８におけるステップＤ１ないしＤ４とそれぞれ同様の処理を行う。そしてノード２００は、図８におけるステップＤ３またはステップＤ４の処理が終了した後、図１９に示すステップＦ１の処理を行う。
図１９におけるステップＦ１において、次キー算出部２０３は、受信部１０１が受け取ったクエリと、自ノード２００の最小割当キーと、に基づいて、該最小割当キーの次キーを算出する（ステップＦ１）。そして次キー算出部２０３は、算出した次キーが自ノード２００の割当キーであるか否か判定する（ステップＦ２）。
次キー算出部２０３は、算出した次キーが自ノード２００の割当キーであると判定した場合（ステップＦ２の“Ｙｅｓ”）、該クエリをクエリ処理部２０６に渡す。クエリ処理部２０６は、次キー算出部２０３から受け取ったクエリを処理する（ステップＦ３）。そしてノード２００の処理は、図８に示すステップＤ８に移行する。
一方、次キー算出部２０３が、算出した次キーが自ノード２００の割当キーでないと判定した場合（ステップＦ２の“Ｎｏ”）、ノード２００の処理は、図８におけるステップＤに移行する。以降、ノード２００の処理は、図８におけるステップＤ８ないしＤ１５と同様である。
第二の実施の形態における情報処理システム２０は、クエリを受け取り、受け取ったクエリに基づいて算出される次キーが自ノード２００の割当キーであるか否かに基づいてクエリを処理するか否か判定する。つまり各ノード１００は、クエリを処理するに当たって、キー範囲を送信する必要がない。
よって第二の実施の形態における情報処理システム２０は、キー範囲の送信にかかるネットワーク負荷を軽減できる。また、第二の実施の形態における情報処理システム２０は、各ノード２００におけるシリアライズ、デシリアライズにかかる処理の負担を軽減させることができる。
［第三の実施の形態］
第三の実施の形態における情報処理システム３０は、第一の実施の形態における情報処理システム１０と同様に、少なくとも一つのノード３００を備える。
図２０は、本発明の第三の実施の形態におけるノード３００の構成を示すブロック図である。
図２０を参照すると、本発明の第三の実施の形態におけるノード３００は、受信部１０１と、経路管理部１０２と、次キー算出部１０３と、クエリ転送制御部１０４と、最終キー算出部３０５と、最小割当キー保持部３０７と、を備える。
＝＝＝最小割当キー保持部３０７＝＝＝
最小割当キー保持部３０７は、他のノード３００のノードアドレスと該ノード３００の最小割当キーとを対応付けて保持する。最小割当キー保持部３０７が保持する最小割当キー表の例が図２１に示されている。図２１に示される例は、ノード３００ｂが保持する最小割当キー表８０６、ノード３００ｊが保持する最小割当キー表８０７およびノード３００ｍが保持する最小割当キー表８０８、である。図２１を参照すると、ノード３００ｂの最小割当キー保持部３０７は、ノードアドレスｃ、ｄ、ｆ、ｊに対して、それらのノード３００の最小割当キーが、それぞれ、ｋｃ−ｍｉｎ、ｋｄ−ｍｉｎ、ｋｆ−ｍｉｎ、ｋｊ−ｍｉｎであることを記憶している。
経路管理部１０２が他ノード３００との経路を示す情報（経路表）を生成するときに、ノード３００がノードアドレスを別のノード３００に通知する処理を行う。該ノード３００の最小割当キーは、その通知メッセージに含まれてもよい。最小割当キー保持部３０７は、経路管理部１０２が受け取った通知メッセージに含まれるノードアドレスと、最小割当キーとを対応付けて記憶する。これによって、経路管理部１０２が他ノード３００との経路を示す情報を構築する際に、最小割当キー保持部３０７は、最小割当キー表を記憶することができる。
＝＝＝最終キー算出部３０５＝＝＝
最終キー算出部３０５は、クエリ転送制御部１０４からノードアドレス“ａｄｄｒ”を受け取る。そして、最終キー算出部３０５は、経路管理部１０２を参照し、経路管理部１０２に記憶されるノードアドレスから、“ａｄｄｒ”以外で、次キーからの距離が最も小さいキーが割り当てられているノードアドレス“ｎｅｘｔ”を特定する。すなわち最終キー算出部３０５は、ノードアドレス“ａｄｄｒ”に対応付けられているキーが示す値より大きくその値に最も値が近い値を示すキーに対応付けられているノードアドレスを“ｎｅｘｔ”と特定する。ここで距離は、第一の実施の形態において説明された距離と同様である。
次に、最終キー算出部３０５は、最小割当キー保持部３０７を参照し、ノードアドレス“ｎｅｘｔ”に対応付けられているキーが示す値から所定の値を減じた値を示すキーを検査対象キーｋと特定する。この所定の値とは例えば１であってもよい。
最終キー算出部３０５は、“ａｄｄｒ”を転送先ノードアドレス、検査対象キーｋを転送先最終キーとし、それらの対を転送リストに挿入する。転送リストとは、第一の実施の形態における転送リストと同様である。
最終キー算出部３０５は、受信部１０１がクエリとともに転送先最終キーを受け取っていないと判定した場合に、以下の処理を実行する。すなわち最終キー算出部３０５は、自ノード３００の最小割当キーから例えば１を減じた値を示すキーを最終キーと算出する。自ノード３００の最小割当キーが示す値が、キーの取り得る値の最小値であった場合、最終キー算出部３０５は、キーが取り得る値の最大値を示すキーを最終キーと特定する。
また、最終キー算出部３０５は、受信部１０１がクエリと共に転送先最終キーを受け取っていると判定した場合に、その受け取った転送先最終キーを自ノード３００の最終キーと特定する。
図２２は本発明の第三の実施の形態におけるノード３００の動作のうち第一の実施の形態とは異なる動作の概要の一例を示すフローチャートである。本発明の第三の実施の形態におけるノード３００の動作のうち、第一の実施の形態におけるノード１００の動作と同様の機能の説明は省略される。
また図２３は、本発明の第三の実施の形態におけるノード３００の動作の具体例を示す説明図である。
ノード３００は、図８におけるステップＤ１ないしＤ１０およびＤ１２ないしＤ１５の処理をそれぞれ行う。そして、ノード３００は、ステップＤ１０の処理が終了した後、図２２に示すステップＧ１の処理を行う。
図２２におけるステップＧ１において、最終キー算出部３０５は、最小割当キー保持部３０７を参照し、ノードアドレス“ｎｅｘｔ”に対応付けられているキーが示す値から１を減じた値を示すキーを検査対象キーｋと特定する（ステップＧ１）。そしてノード３００の処理は、図８におけるステップＤ１２に移行する。
次に、図２３を参照して、図８および図２２で示されるノード３００の動作の具体例を説明する。本例において、クエリは属性ｘと属性ｙとを含んでいる。また本例において、属性ｘサブキー範囲に含まれるサブキー集合｛０１１，１００，１０１｝と属性ｙサブキー範囲に含まれるサブキー集合｛００，０１｝の全組み合わせについて、各ビットを交互に並べたビット列がキーである。そしてこのビット列は、各ノード３００を識別できるノードアドレスである。また、実在するノードは、「１１１０１」、「００１１０」、「０１０１０」、「０１１０１」、「１０００１」および「１０１１１」であると仮定する。
まず、ノード「１１１０１」の受信部１０１がクエリを受け取る（ステップＤ１）。ノード「１１１０１」の経路管理部１０２は、経路表として、実在する各ノードを示すキー「００１１０」および「０１１０１」を保持している。ノード「１１１０１」の最大割当キーは「１１１０１」であり、最小割当キーは「１１０００」である。
受信部１０１はクエリとともに転送先最終キーを受け取っていないので（ステップＤ２の“Ｎｏ”）、最終キー算出部３０５は、自ノードの最小割当キーから１を減じた値を示すキー「１０１１１」を最終キーと特定する（ステップＤ４）。
次キー算出部１０３は、自ノードの最大割当キー「１１１０１」を検査対象キーｋと特定する（ステップＤ５）。そして、次キー算出部１０３は、検査対象キーｋの次キーを算出する（ステップＤ６）。すると、次キーは「００１０１」と算出される。
そしてクエリ転送制御部１０４は、算出する次キーが示す値（ｋ１）が、自ノードの最大割当キーが示す値（ｋ２）と最終キーが示す値（ｋ３）との間にあるか否か判定する（ステップＤ７）。本例において、ｋ１、ｋ２、およびｋ３の値は、それぞれ、ｋ１＝「００１０１」、ｋ２＝「１１１０１」、ｋ３＝「１０１１１」である。図２３によれば、クエリ転送制御部１０４は、算出する次キーが示す値（ｋ１）が、自ノードの最大割当キーが示す値（ｋ２）と最終キーが示す値（ｋ３）との間にあると判定する（ステップＤ７の“Ｙｅｓ”）。
クエリ転送制御部１０４は、検査対象キーｋの次キーを以前にすでに自ノードの次キー算出部１０３から受け取っていないと判定する（ステップＤ８の“Ｎｏ”）。
クエリ転送制御部１０４は、経路管理部１０２を参照し、次キー「００１０１」に対応するノードアドレス“ａｄｄｒ”を取得する（ステップＤ９）。この場合、経路管理部１０２は、次キー「００１０１」が示す値を超えない値を示すキーを記憶していない。よってクエリ転送制御部１０４は、最小値を示すキー「００１１０」をノードアドレス“ａｄｄｒ”として取得する。
クエリ転送制御部１０４は、取得したノードアドレス「００１１０」を最終キー算出部３０５に渡す。最終キー算出部３０５は、経路管理部１０２に記憶されているノードの中から、「００１１０」以外で、かつ、次キーとの距離が最も小さいキーが割り当てられているノードのノードアドレス“ｎｅｘｔ”を取得する（ステップＤ１０）。この場合、最終キー算出部３０５は、“ｎｅｘｔ”として「０１１０１」を取得する。
最終キー算出部３０５は、最小割当キー保持部３０７を参照し、ノードアドレス「０１１０１」に対応付けられているキーが示す値から１を減じた値を示すキー「０１０１０」を検査対象キーｋと特定する（ステップＧ１）。
最終キー算出部３０５は、新たな検査対象キーｋが示す値（ｋ４＝０１０１０）が、次キー算出部１０３が算出する次キーが示す値（ｋ１＝００１０１）と最終キーが示す値（ｋ３＝１０１１１）との間にあるか否か判定する（ステップＤ１２）。
図２３によれば、最終キー算出部３０５は、新たな検査対象キーｋが示す値が、次キー算出部１０３が算出する次キーが示す値と最終キーが示す値との間にあると判定し（ステップＤ１２の“Ｙｅｓ”）、以下の処理を実行する。すなわち最終キー算出部３０５は、ノードアドレス“ａｄｄｒ”を要素の一つである転送先ノードアドレスとし、検査対象キーｋを要素のもう一つである転送先最終キーとした、対を転送リストに挿入する（ステップＤ１３）。ここで、ノードアドレス“ａｄｄｒ”は、「００１１０」である。また検査対象キーｋは、「０１０１０」である。そしてノード「１１１０１」の処理は、ステップＤ６へと移行する。
次キー算出部１０３は、検査対象キーｋの次キーを算出する（ステップＤ６）。すると、次キーは「１００００」と算出される。
そしてクエリ転送制御部１０４は、算出する次キーが示す値（ｋ１）が、自ノードの最大割当キーが示す値（ｋ２）と最終キーが示す値（ｋ３）との間にあるか否か判定する（ステップＤ７）。本例において、ｋ１、ｋ２、およびｋ３の値は、それぞれ、ｋ１＝「１００００」、ｋ２＝「１１１０１」、ｋ３＝「１０１１１」である。図２３によれば、クエリ転送制御部１０４は、算出する次キーが示す値（ｋ１）が、自ノードの最大割当キーが示す値（ｋ２）と最終キーが示す値（ｋ３）との間にあると判定する（ステップＤ７の“Ｙｅｓ”）。
クエリ転送制御部１０４は、検査対象キーｋの次キーを以前にすでに自ノードの次キー算出部１０３から受け取っていないと判定する（ステップＤ８の“Ｎｏ”）。
クエリ転送制御部１０４は、経路管理部１０２を参照し、次キー「１００００」に対応するノードアドレス“ａｄｄｒ”を取得する（ステップＤ９）。この場合、クエリ転送制御部１０４は、次キー「１００００」が示す値を超えない値のうち最大値を示すキー「０１１０１」をノードアドレス“ａｄｄｒ”として取得する。
クエリ転送制御部１０４は、取得したノードアドレス「０１１０１」を最終キー算出部３０５に渡す。最終キー算出部３０５は、経路管理部１０２に記憶されているノードの中から、「０１１０１」以外で、かつ、次キーとの距離が最も小さいキーが割り当てられているノードのノードアドレス“ｎｅｘｔ”を取得する（ステップＤ１０）。この場合、最終キー算出部３０５は、“ｎｅｘｔ”として「００１１０」を取得する。
最終キー算出部３０５は、最小割当キー保持部３０７を参照し、ノードアドレス「００１１０」に対応付けられているキー「１１１１０」が示す値から１を減じた値を示すキー「１１１０１」を検査対象キーｋと特定する（ステップＧ１）。
最終キー算出部３０５は、新たな検査対象キーｋが示す値（ｋ４＝１１１０１）が、次キー算出部１０３が算出する次キーが示す値（ｋ１＝００１０１）と最終キーが示す値（ｋ３＝１０１１１）との間にあるか否か判定する（ステップＤ１２）。
図２３によれば、最終キー算出部３０５は、新たな検査対象キーｋが示す値が、次キー算出部１０３が算出する次キーが示す値と最終キーが示す値との間にないと判定し（ステップＤ１２の“Ｎｏ”）、以下の処理を実行する。すなわち最終キー算出部３０５は、ノードアドレス“ａｄｄｒ”を要素の一つである転送先ノードアドレスとし、自ノードの最終キーを要素のもう一つである転送先最終キーとした、対を転送リストに挿入する（ステップＤ１４）。ここで、ノードアドレス“ａｄｄｒ”は「０１１０１である。また、自ノードの最終キーは「１０１１１」である。
クエリ転送制御部１０４は、最終キー算出部３０５が生成した転送リストに含まれる各対について、対の一方の要素である転送先最終キーと、対応するクエリとに基づいてメッセージを生成する。そしてクエリ転送制御部１０４は、生成したメッセージを対のもう一方の要素である転送先ノードアドレスで特定されるノードへ送信する（ステップＤ１５）。
以上より、ノード「１１１０１」は自ノードの最大割当キーから最終キーまでをキーの検索対象とし、クエリを転送先ノードアドレスで識別されるノードへ転送する。
ノード「１１１０１」よりメッセージを受け取ったノード「００１１０」は、該メッセージに含まれる転送先最終キー「０１０１０」を自ノードの最終キーと特定する（ステップＤ３）。そしてノード「００１１０」は、前述と同様に自ノードの最大割当キーから最終キーまでをキーの検索対象とし、クエリを転送先ノードアドレスで識別されるノードへ転送する。ノード「１１１０１」よりメッセージを受け取ったノード「０１１０１」の動作も上記と同様である。
最初にクエリを受信したノードからメッセージを転送される各ノードが検索対象とするキーの範囲は重複しない。なぜなら各メッセージに含まれる転送先最終キーは、次のメッセージの転送先であるノードアドレス“ｎｅｘｔ”から１を減じた値であり、メッセージを受け取ったノードは自ノードが示すキーの値から１ずつ加算する方向に検索を行うからである。
第三の実施の形態におけるノード転送システム３０は、クエリとともに、転送先最終キーを各ノードに転送する。転送先最終キーは、クエリが転送される自ノードのとなりの他のノードの最小割当キーが示す値から１を減じた値を示す最終キーである。また、各ノードは自ノードの最大割当キーから自ノードの最終キーまでのキーの範囲をキーの検索対象とする。したがって、ノード転送システム３０は、同一のクエリが同じノードを複数回経由する可能性を低減できる。
またノード転送システム３０は、クエリが異なる経路を通って二重に通知される可能性を低減できる。なぜなら、前述の各ノード３００のキーの検索対象は重複しないので、各ノードにはクエリが複数回到達しえないからである。
以上の利点により、第三の実施の形態におけるノード転送システム３０は、大量のクエリを転送する際にも高いパフォーマンスを得ることができる。
［第四の実施の形態］
第四の実施の形態における情報処理システム４０は、第三の実施の形態における情報処理システム３０と同様に、少なくとも一つのノード４００を備える。
図２４は、本発明の第四の実施の形態におけるノード４００の構成を示すブロック図である。
図２４を参照すると、本発明の第四の実施の形態におけるノード４００は、受信部１０１と、経路管理部４０２と、次キー算出部１０３と、クエリ転送制御部１０４と、最終キー算出部３０５と、最小割当キー保持部３０７と、を備える。
第四の実施の形態におけるノード４００は、クエリの次の転送先を特定するためのルーティングプロトコルとして、Ｃｈｏｒｄを適用した具体例である。
＝＝＝経路管理部４０２＝＝＝
経路管理部４０２は、キー（宛先キー）に対して、該キーが割り当てられたノードに到達するために、次の転送先であるノードを識別できるキーである識別キーを算出する。例えば、経路管理部４０２は、Ｃｈｏｒｄ（例えば、非特許文献３参照）などのルーティングプロトコルに基づいて、識別キーを算出する。Ｃｈｏｒｄは、宛先キーに最も近いキー（識別キー）が割り当てられたノードを次の転送先として特定するプロトコルである。
経路管理部４０２は、他のノード４００との経路を示す情報（例えば、Ｃｈｏｒｄであれば、Ｆｉｎｇｅｒ  ｔａｂｌｅに相当する）を記憶する。図２５は、経路管理部４０２が記憶する情報の一例である。この情報はフィンガーテーブル８２５とも呼ばれる。図２５において、「ｓｔａｒｔ」は、自ノード４００に対応付けられているキーが示す値に所定数だけ（例えば２ｉ、ただしｉは０以上の整数）加算した値を示すキーである。また、「ｉｎｔ．」は、「ｓｔａｒｔ」のキーに対応するキー範囲を示す情報である。例えばキーの値がｎであるキーに対応付けられているノードにおいて「ｓｔａｒｔ」は、ｎ＋２ｉ（ただしｉは０以上の整数）である。そしてこのキー「ｎ＋２ｉ」に対応付けられている「ｉｎｔ．」は、ｎ＋２ｉ≦ｋ＜２ｉ＋１を満たすキーｋの集合、すなわち、キーｋのキー範囲である。「ｓｕｃｃ．」は、ｉｎｔ．で示されている各キーに対応するノードのうちｓｔａｒｔに対応付けられているキーの値に最も近いキー（識別キー）で識別される他のノード４００を示す識別子である。本例において、識別キーとその識別キーで識別されるノード４００を示す識別子とは同一のものである。もちろん、識別キーとノード４００を識別できる識別子とは、互いに対応する他の情報であってもよい。
図２５において、「ｉｎｔ．」は、「ｓｕｃｃ．」で識別されるノードに対応付けられるキーの集合を示す情報であってもよい。また、「ｓｕｃｃ．」に含まれるノードの識別子は、ノードのノードアドレスであってもよい。
第四の実施の形態における情報処理システム４０は、特別なルーティングプロトコルでなく、一般的なＣｈｏｒｄに基づいて、大量のクエリが転送されても、ネットワーク負荷、シリアライズ処理の負荷およびデシリアライズ処理の負荷を低減できる。
［第五の実施の形態］
図２６は、本発明の第五の実施の形態における情報処理システム５０が備えるノード５００の構成を示すブロック図である。図２６を参照すると、ノード５００は、受信部５０１と、経路管理部５０２と、次キー算出部５０３と、クエリ転送制御部５０４と、最終キー算出部５０５とを備える。
受信部５０１は、ある値の範囲を特定するクエリを受け取る。そして受信部５０１は受け取ったクエリを後述の次キー算出部５０３に渡す。
経路管理部５０２は、ある値を示すキーを記憶する。
次キー算出部５０３は、次キーを受信部５０１から受け取ったクエリで特定される範囲に含まれるいずれかの値を示すキーの中から算出する。この次キーは、ノード５００に対応する値を示す所定のキーが示すその値に最も近い値を示すキーである。
クエリ転送制御部５０４は、次キー算出部５０３が算出した次キーが示す値と、経路管理部５０２が記憶するキーがそれぞれ示す値との大小関係を特定する。そしてクエリ転送制御部５０４は、特定した大小関係に基づいて経路管理部５０２が記憶するキーの中から一のキーを特定する。そしてクエリ転送制御部５０４は、特定した一のキーが示す値に基づいて識別される装置の識別子である転送先ノード識別子を特定する。
また、クエリ転送制御部５０４は、後述の最終キー算出部５０５が算出する転送先最終キーと受信部５０１が受け取るクエリとを、クエリ転送制御部５０４が特定した転送先ノード識別子で識別される装置へ転送する。
最終キー算出部５０５は、クエリ転送制御部５０４が特定した転送先ノード識別子に対応する前述の一のキーが示す値に基づいて、転送先最終キーを経路管理部５０２が記憶する各キーの中から算出する。転送先最終キーは、前述の転送先ノード識別子で識別される装置が算出しうる次キーの範囲の境界を示すキーである。
受信部５０１と、経路管理部５０２と、次キー算出部５０３と、クエリ転送制御部５０４と、最終キー算出部５０５とは、例えば、プログラム（情報処理プログラム）によって動作するＣＰＵによって実現される。受信部５０１と、経路管理部５０２と、次キー算出部５０３と、クエリ転送制御部５０４と、最終キー算出部５０５とが、同一のＣＰＵによって実現されてもよい。この場合、プログラムは、例えば、ノード５００が備えるプログラム記憶装置５２１（図２７参照）に記憶される。ＣＰＵ５２２は、そのプログラムを読み込み、そのプログラムにしたがって、受信部５０１と、経路管理部５０２と、次キー算出部５０３と、クエリ転送制御部５０４と、最終キー算出部５０５として動作すればよい。
また、前述のプログラムのコードを記録した記録媒体（または記憶媒体）が、ノード５００に供給され、ノード５００が記録媒体に格納されたプログラムのコードを読み出し実行してもよい。すなわち、本発明は、第五の実施の形態におけるノード５００が実行するためのソフトウェア（情報処理プログラム）を一時的に記憶するまたは非一時的に記憶する記録媒体５２４も含む。
経路管理部５０２は、例えば、ハードディスク５２３のような記憶装置によって実現されてもよい。
第五の実施の形態における情報処理システム５０は、上記の構成を含むノード５００を備えるので、大量のクエリが転送されても、ネットワーク負荷、シリアライズ処理の負荷およびデシリアライズ処理の負荷を低減できる。
以上、各実施の形態および実施例を参照して本発明を説明したが、本発明は上記実施の形態および実施例に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解しえる様々な変更をすることができる。
本発明の各実施の形態において、ノード１００、ノード２００、ノード３００、ノード４００およびノード５００は、情報処理装置またはその一部に備えられる。したがって、１つのノードが１つの情報処理装置から構成されてもよい。あるいは、１つのノードに、情報処理装置に含まれるメモリ、ＣＰＵおよびハードディスクなどの資源の少なくとも一部が割り当てられるように構成されてもよい。つまり、複数のノードが１つの情報処理装置から構成されてもよい。
この出願は、２０１１年１月２５日に出願された日本出願特願２０１１−０１２９４７を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０００９】
本発明の情報処理システムは、ＲＦＩＤ（Ｒａｄｉｏ  Ｆｒｅｑｕｅｎｃｙ  ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）やセンサなどのデバイスから大量に発生するデータ（イベント）を、それを要求するアプリケーションに対して配信するＰｕｂｌｉｓｈ／Ｓｕｂｓｃｒｉｂｅ型のシステムに応用されうる。
【符号の説明】
【００１０】
１０、２０、３０、４０、５０    情報処理システム
１００、２００、３００、４００、５００    ノード
１０１    受信部
１０２    経路管理部
１０３    次キー算出部
１０４    クエリ転送制御部
１０５    最終キー算出部
２０６    クエリ処理部
３０７    最小割当キー保持部
１２１、５２１    プログラム記憶装置
１２２、５２２    ＣＰＵ
１２３、５２３    ハードディスク
１２４、５２４    記録媒体
８０１    キー空間
８０２    キー範囲
８０３    キー
８０４    属性空間
８０５    クエリエリア
８０６、８０７、８０８    最小割当キー表
８１９    メッセージ
８２０    クエリ
８２１    転送先最終キー
８２２    ｋｃｕｒｒｅｎｔ
８２３    ｋｔｍｐ
８２４    ａｍａｘ
８２５    フィンガーテーブル
【図１】
2012102103.tif 000003
【図２】
2012102103.tif 000004
【図３】
2012102103.tif 000005
【図４】
2012102103.tif 000006
【図５】
2012102103.tif 000007
【図６】
2012102103.tif 000008
【図７】
2012102103.tif 000009
【図８】
2012102103.tif 000010
【図９】
2012102103.tif 000011
【図１０】
2012102103.tif 000012
【図１１】
2012102103.tif 000013
【図１２】
2012102103.tif 000014
【図１３】
2012102103.tif 000015
【図１４】
2012102103.tif 000016
【図１５】
2012102103.tif 000017
【図１６】
2012102103.tif 000018
【図１８】
2012102103.tif 000019
【図１９】
2012102103.tif 000020
【図２０】
2012102103.tif 000021
【図２１】
2012102103.tif 000022
【図２２】
2012102103.tif 000023
【図２３】
2012102103.tif 000024
【図２４】
2012102103.tif 000025
【図２５】
2012102103.tif 000026
【図２６】
2012102103.tif 000027
【図２７】
2012102103.tif 000028
【図１７】
2012102103.tif 000029
【手続補正書】
【提出日】平成25年7月10日(2013.7.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１２
【補正方法】変更
【補正の内容】
【請求項１２】
請求項１ないし１１のいずれか１項に記載の情報処理装置であって、
クエリは、一の属性の属性値の集合であるサブキー群を少なくとも一つ含み、
キーの値は、各属性値の組み合わせに基づいて一意に特定される値であり、
前記次キー算出手段は、それぞれの属性からなる属性空間の中から、前記クエリに含まれる前記サブキー群のそれぞれから特定される属性値の組み合わせの集合により特定される少なくとも一部の部分空間であるクエリエリアを当該クエリに基づいて特定し、
前記次キー算出手段は、前記割当キー範囲に含まれる所定のキーの値に基づいて特定される各属性値のいずれかに所定数加算し、加算後の属性値を含む前記各属性の組み合わせに基づいて特定される値を有するキーである増分キーを少なくとも一つ特定し、
前記次キー算出手段は、前記増分キーが示す値に基づいて特定される各属性値の組み合わせで特定される空間である増分エリアの少なくとも一部が前記クエリエリアに包含されるか否かを判定し、
前記次キー算出手段は、前記増分エリアの少なくとも一部が前記クエリエリアに包含されると判定した場合に、前記増分エリアと前記クエリエリアとで共通する属性値の組み合わせのうち、それぞれ最小の属性値の組み合わせに基づいて特定される値を有するキーを、次キーとして算出する、情報処理装置。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１３
【補正方法】変更
【補正の内容】
【請求項１３】
請求項１に記載の情報処理装置であって、
ある装置を示すノード識別子と当該装置の割当キー範囲に含まれるキーのうち最小値を示すキーとを対応付けて記憶する最小割当キー保持手段を備え、
前記経路管理手段は、ある装置を示すノード識別子と当該装置の割当キー範囲に含まれるキーのうち最大値を示すキーとを対応付けて記憶し、
前記クエリ転送制御手段は、前記次キーが示す値と前記経路管理手段が記憶する各キーがそれぞれ示す値との大小関係に基づいて、当該各キーから一のキーを特定し当該一のキーの値に対応付けられているノード識別子を前記転送先ノード識別子として特定し、
前記最終キー算出手段は、前記クエリ転送制御手段が特定した転送先ノード識別子に対応する前記一のキー以外のキーでかつ前記次キーが示す値に最も近い値を示すキーを前記経路管理手段から特定し、この特定したキーに対応付けられているノード識別子を特定し、このノード識別子に対応付けられているキーが示す値から所定数を減じた値を示すキーを前記最小割当キー保持手段から読み出し、この読み出したキーを前記転送先最終キーとして算出する、情報処理装置。
【手続補正３】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１８
【補正方法】変更
【補正の内容】
【請求項１８】
コンピュータに、
ある値の範囲を特定するクエリを受け取る処理と、
ある値を示すキーを記憶する処理と、
所定のキーが示す値に最も近い値を示すキーである次キーを、前記クエリで特定される範囲に含まれるいずれかの値を示す各キーの中から算出する処理と、
前記次キーが示す値と前記記憶する各キーがそれぞれ示す値との大小関係に基づいて、当該各キーから一のキーを特定し当該一のキーの値に基づいて識別される装置の識別子である転送先ノード識別子を特定する処理と、
前記転送先ノード識別子に対応する前記一のキーが示す値に基づいて、当該転送先ノード識別子で識別される装置が算出しうる次キーの範囲の境界を示すキーである転送先最終キーを前記記憶する各キーの中から算出する処理と、
前記クエリと前記転送先最終キーとを前記転送先ノード識別子で識別される装置へ転送する処理と、を実行させるための情報処理プログラム。
【国際調査報告】
2012102103.tif 000030
2012102103.tif 000031
2012102103.tif 000032