以下、本発明の実施の形態につき図面を参照して説明する。
<オーバーレイネットワークシステムの構成>
図1は本発明の一実施形態に係るオーバーレイネットワークシステムの構成を示すブロック図である。図1において、オーバーレイネットワーク10は、ノードIDがID0,ID1,ID3,ID4,ID6及びID7の6つのノード20-0,20-1,20-3,20-4,20-6及び20-7により構成されている。図1に示されるように、ノード20-0,20-1,20-3,20-4,20-6及び20-7によって構成されるオーバーレイネットワーク10の論理的なネットワーク構成は、非特許文献3に記載されているようなリング状である。図1では、オーバーレイネットワーク10を構成するノード20-0,20-1,20-3,20-4,20-6及び20-7は、実線の丸印で表されている。
本実施形態では、オーバーレイネットワーク10上での「距離」が、任意の2つのIDが当該オーバーレイネットワーク10のリング上において時計回りでどれだけ離れているかによって表される。本実施形態で適用される距離算定規則に従えば、図1では、例えば、ID3とID5との距離は2であり、ID3とID2との距離は7である。ID3に対して、ID5はID6よりも「近く」、ID2はID6よりも「遠い」。但し、図1のオーバーレイネットワークシステムの例では、ノードIDがそれぞれID2及びID5の2つのノード20-2及び20-5は、オーバーレイネットワーク10を構成していない。これらのノード20-2及び20-5は、図1では破線の丸印で表されている。なお、「距離」の定義(距離算定規則)は、上記実施形態に限定されるものではない。
オーバーレイネットワーク10を構成するノード20-0,20-1,20-3,20-4,20-6及び20-7と、オーバーレイネットワーク10を構成していないノード20-2及び20-5と、クライアント端末30とは、物理的には、アンダーレイネットワークに接続されている。アンダーレイネットワークはIP(Internet Protocol)により構築される物理的なネットワークを指し、オーバーレイネットワーク10はアンダーレイネットワークの上位に構築される論理的なネットワークを指す。
図1において、実線の丸印及び破線の丸印の近傍には、対応するノードIDを示す1桁の数値が表記されている。また、図1において、実線の丸印の近傍には、対応するノードのアドレスも表記されている。本実施形態では、ノードのアドレスには、当該ノードのアンダーレイネットワーク上のIPアドレスが用いられる。また図1には、ノード20-3及び20-7がそれぞれ保持している構成情報40-3及び40-7が示されている。なお、図1では省略されているが、ノード20-0,20-1,20-4及び20-5も、構成情報40-3または40-7に相当する構成情報を保持している。
<ノードのハードウェア構成>
図2は、ノード20-i(i=0,1,…7)のハードウェア構成を示すブロック図である。ノード20-iは図1に示されるノード20-0,20-1,20-3,20-4,20-6及び20-7だけでなく、オーバーレイネットワーク10を構成していないノード20-2及び20-5をも指す。
本実施形態において、ノード20-iは、他のノード20-iと連携することにより、オーバーレイネットワーク10を構成することが可能なコンピュータである。図1の例では、ノード20-0,20-1,20-3,20-4,20-6及び20-7が連携することにより、オーバーレイネットワーク10を構成している。オーバーレイネットワーク10は、ノード20-iによるオブジェクトの登録や、登録済みオブジェクトの参照を実現する。
ノード20-iは、処理ユニット21と、主記憶装置22と、補助記憶装置23と、通信機構24と、入出力装置25とを含む。補助記憶装置23は例えばハードディスクドライブを用いて構成される。補助記憶装置23には、プログラム230が格納されたコンピュータ読み取り可能な記憶媒体231が装着されている。プログラム230は、主として、ノード20-iがクライアント端末30から要求されたオブジェクトの新規登録動作、更新登録動作または参照動作を行うのに用いられる。通信機構24は、他のノードとIPアドレスを用いて通信する。
<ノードとクライアント端末の機能構成>
図3は、ノード20-iと、当該ノード20-iにアクセス可能なクライアント端末30の機能構成を示すブロック図である。
ノード20-iは、通信機構24と、要求受付部26と、オブジェクト記憶部27と、制御部28とを含む。
要求受付部26は、クライアント端末30とノード20-iとの間の当該ノード20-iのインタフェイスをなす。要求受付部26は、クライアント端末30から送られるオブジェクトの登録または参照を指示する要求(以下、登録・参照要求と称する)を受信する。要求受付部26は、クライアント端末30からの登録・参照要求に対する制御部28からの応答を当該クライアント端末30に返す。
オブジェクト記憶部27は、オブジェクトを登録するのに用いられる記憶部である。オブジェクト記憶部27は、例えば、図2に示すノード20-i内の補助記憶装置23の記憶領域を用いて実現される。
制御部28は、ノード20-iの要求受付部26で受信された登録・参照要求、またはノード20-iの通信機構24で受信された他のノードによって中継された登録・参照要求に基づいて、当該要求の実行のための制御を行う。具体的には制御部28は、登録・参照要求のノード間ルーティング、オブジェクト記憶部27へのオブジェクトの新規登録、オブジェクト記憶部27へのオブジェクトの更新登録、またはオブジェクト記憶部27に登録されているオブジェクトの参照を制御する。これらの詳細については後述する。
制御部28は、構成記憶部281、構成管理部282、ルーティング部283及びオブジェクトアクセス部284を含む。
構成記憶部281は、オーバーレイネットワーク10の構成を管理するのに必要な構成情報40-iを記憶するのに用いられる。構成記憶部281は、例えば、図2に示される主記憶装置22の所定記憶領域を用いて構成される。構成管理部282は、構成記憶部281に格納されている構成情報40-iに基づいて、オーバーレイネットワーク10の構成を管理する。
ルーティング部283は、要求受付部26で受信された登録・参照要求、または通信機構24で受信された他のノードによって中継された登録・参照要求に基づいて、ルーティングを実行する。本実施形態におけるルーティングとは、登録・参照要求で指定されたオブジェクトの登録・参照先のノードのアドレスを取得するための処理を指す。このルーティングは、構成情報40-iを参照することによって行われる。
ルーティング部283は、選択・判定部283a及び中継部283bを含む。選択・判定部283aは、登録・参照要求で指定されたオブジェクトの登録・参照先のノードを、当該オブジェクトのオブジェクトID及び構成情報40-iに基づいて選択し、当該選択したノードがノード20-i自身(自ノード)であるかを判定する。中継部283bは、選択・判定部283aによって選択されたノードがノード20-i自身(自ノード)でないと判定された場合に、登録・参照要求を当該選択されたノードに中継する。
オブジェクトアクセス部284は、オブジェクト記憶部27へのオブジェクトの新規登録もしくは更新登録、またはオブジェクト記憶部27に登録されているオブジェクトの参照を行う。オブジェクトアクセス部284は、衝突検出部284aと、再構成部284b及び284cとを含む。但し、再構成部284b及び284cは、本実施形態では用いられず、後述する変形例で用いられるものとする。
本実施形態において、各ノード20-iに含まれている構成管理部282、ルーティング部283及びオブジェクトアクセス部284は、図2に示されるノード20-i内の処理ユニット21が、記憶媒体231に格納されているプログラム230を当該ノード20-i内の主記憶装置22に読み込んで実行することにより実現される機能モジュールである。しかし、構成管理部282、ルーティング部283及びオブジェクトアクセス部284の少なくとも1つがハードウェアとして実現されてもよい。
クライアント端末30は、オーバーレイネットワーク10を利用してオブジェクトの登録・参照を行う主体となるコンピュータである。クライアント端末30は、ノード20-iと同様のハードウェア構成を有するものとする。クライアント端末30は、例えば機能モジュールとしてのユーザプログラム実行部31及び登録・参照要求処理部32を含む。
ユーザプログラム実行部31は、オブジェクトを登録または参照する動作(以下、登録・参照動作と称する)を要求するためのユーザプログラムを実行する。ユーザプログラム実行部31は、登録・参照要求処理部32を介して、オーバーレイネットワーク10へのオブジェクトの新規登録もしくは更新登録、またはオーバーレイネットワーク10に登録されているオブジェクトの参照を行う。
ユーザプログラム実行部31は、オブジェクトID設定部311及び312を含む。オブジェクトID設定部311は、オーバーレイネットワーク10へのオブジェクトの新規登録時に、当該オブジェクトを識別するためのIDであるオブジェクトIDを設定する第1のオブジェクトID設定部として機能する。オブジェクトID設定部312は、オーバーレイネットワーク10へのオブジェクトの更新登録時、つまり更新後のオブジェクトの登録時に、当該更新後のオブジェクトを識別するためのオブジェクトIDを設定する第2のオブジェクトID設定部として機能する。
登録・参照要求処理部32は、ユーザプログラム実行部31によって発行される登録・参照要求をノード20-iに送信する一方、当該登録・参照要求に対するノード20-iからの応答を受信してユーザプログラム実行部31に転送するための要求・応答転送処理を行う。
図3には、クライアント端末30のユーザプログラム実行部31によって登録・参照要求が発行された場合の、当該登録・参照要求の流れが矢印A1で示されている。また図3には、登録・参照要求に対する応答の流れが矢印A2で示されている。
<構成情報>
図4は、ノード20-iの構成記憶部281に格納されている構成情報40-iのデータ構造例を示す。構成情報40-iは、ノード情報41-i及びネットワーク構成情報42-iから構成される。
ノード情報41-iは、当該ノード情報41-iを含む構成情報40-iを保持するノード20-i自身(以下、自ノードと称する)に関する情報である。構成情報40-iを保持するノード20-iはオーバーレイネットワーク10に参加しており、当該オーバーレイネットワーク10の一構成要素である。ノード情報41-iは、例えば、ビット数m、ノードID及びアドレスから構成される。
アドレスは、自ノードに固有のアドレスである。本実施形態においてアドレスは、自ノードのIPアドレスである。図4に示される構成情報40-iはiが7の例、つまりノード20-7(i=7)が保持する構成情報40-7の例を示しており、アドレスは当該ノード20-7のIPアドレス「192.168.0.1」である。
ノードIDは、自ノードに固有のIDである。本実施形態においてノードIDには、従来技術と同様に、自ノードのアドレスのハッシュ値が用いられる。
ビット数mは、オーバーレイネットワーク10を構成する各ノードのノードIDのビット数を示す。このビット数mにより、オーバーレイネットワーク10を構成可能なノードの数の上限が決まる。つまり、オーバーレイネットワーク10を構成するノードのノードIDとして取り得る値の範囲が決まる。また、ビット数mは、後述するようにオブジェクトIDの範囲にも関係する。本実施形態では、mは3である。この場合、ノードIDとして取り得る値の範囲は、0から7(2m−1=23−1=7)である。
ネットワーク構成情報42-iは、オーバーレイネットワーク10の論理的な構成を示す情報である。ネットワーク構成情報42-iは、例えば、オーバーレイネットワーク10を構成する全てのノードについて、当該ノードのノードID及びアドレス対から構成される。ネットワーク構成情報42-iは更に、オーバーレイネットワーク10を構成していないものの、当該オーバーレイネットワーク10を構成可能なノードのノードID及び「null」を示すアドレスの対を含む。このノードID及び「null」を示すアドレスの対における「null」は、対応するノードIDを持つノードがオーバーレイネットワーク10上に存在せず、当該オーバーレイネットワーク10を構成していないことを示す。
本実施形態では、ノード20-iが保持する構成情報40-iは、オーバーレイネットワーク10の構築に当たって、管理者が例えば当該ノード20-iの入出力装置25を操作することによって、当該ノード20-iの構成記憶部281に格納されるものとする。この操作は、オーバーレイネットワーク10を構成すべき全てのノード20-iに対して行われる。つまり本実施形態では、オーバーレイネットワーク10を構成すべき各ノード20-iに、当該ノード20-iに固有のノード情報41-iを含む構成情報40-iを、管理者の操作により事前に登録しておくものとする。また、この操作がクライアント端末30を用いて行われてもよい。また、オーバーレイネットワーク10を構成する各ノード20-iが相互に通信を行うことにより構成情報40-iを自律的に生成し、生成された構成情報40-iが対応するノード20-iに登録される構成とすることも可能である。
<オーバーレイネットワークシステム上でのオブジェクトの取り扱い>
従来技術によって実現されるオーバーレイネットワークシステムは、オーバーレイネットワークを構成するノード群の中から、各々のConsistentHashingのアルゴリズムに基づいてノードを選出して、そのノードを対象にオブジェクトを登録するための登録機能と、そのノードを対象にオブジェクトを参照するための参照機能とを提供するのが一般的である。
登録機能によれば、オブジェクトをオーバーレイネットワークに入力することにより、当該オーバーレイネットワークを構成するノードに当該オブジェクトが登録される。この登録機能は、登録されるオブジェクトを識別するためのオブジェクトIDを得る機能を有する。
参照機能によれば、登録済みのオブジェクトのオブジェクトIDをオーバーレイネットワークに入力することにより、当該オブジェクトIDを持つオブジェクトが取得される。
従来技術では、オブジェクトのオブジェクトIDとして、当該オブジェクト自体または当該オブジェクトの「名前」のハッシュ値が設定される。そして、オブジェクトに設定されたオブジェクトIDと、オーバーレイネットワークを構成するノードのノードIDとの間で、従来技術に固有のConsistentHashingアルゴリズムに基づいて、オブジェクトの登録先ノードが決定される。
これに対して本実施形態では、従来技術にはない、2つの技術的な特徴がある。
第1の技術的特徴は、オブジェクトを登録するための機能が、新規登録機能と更新登録機能の2種類より構成される点である。
新規登録機能は従来技術における登録機能に相当する。新規登録機能によれば、新規作成されたオブジェクトをオーバーレイネットワークに入力することにより、当該オーバーレイネットワークを構成するノードに当該オブジェクトが登録される。この新規登録機能は、登録されたオブジェクトを識別するためのオブジェクトIDを得る機能を有する。
更新登録機能によれば、既に登録されている更新前のオブジェクトのオブジェクトIDと、更新後のオブジェクトとをオーバーレイネットワークに入力することにより、更新前のオブジェクトが登録されているノードに更新後のオブジェクトも登録される。この更新後のオブジェクトの登録を、更新登録と称する。ここで、更新前のオブジェクトは、新規登録されたオブジェクト、または以前に更新登録されたオブジェクトである。更新登録機能は、更新登録されるべき更新後のオブジェクトを識別するためのオブジェクトIDを得る機能を有する。
第2の技術的特徴は、オブジェクトのオブジェクトIDを生成して当該オブジェクトに設定するためのオブジェクトID設定機能にある。本実施形態におけるオブジェクトID設定機能の特徴は、新規登録と更新登録との違いを考慮してオブジェクトIDを生成・設定することにある。このために、オブジェクトIDは、後述する「ツリー部」と「コンテンツ部」とから構成される。
本実施形態においては、これらの特徴により、詳細を後述するように、更新前後のオブジェクトを同じノードに登録できる。オブジェクトの重複部分は更新前後のオブジェクト間で生じやすい。このため、更新前後のオブジェクトを同一のノードに登録することによって、同じノード内に閉じて更新前後のオブジェクトの重複排除を行うことができる。また、従来技術と異なり、更新前後のオブジェクトを複数のノードで連携して管理する必要がないため、より高い信頼性・可用性を得ながら、オブジェクト間の重複排除を効果的に実現することができる。
次に、オブジェクトIDの設定方法、オブジェクト登録先ノードの選択方法及びオブジェクトの登録・参照動作について、順次説明する。
<オブジェクトIDの設定方法>
本実施形態では、オブジェクトIDのツリー部及びコンテンツ部の値が取り得る範囲は、ノードIDと等しいものとする。つまり、本実施形態においては、オブジェクトIDのツリー部及びコンテンツ部の値が取り得る範囲は、いずれも0から7(=2m−1=23−1=7)である。
ここで、オブジェクトIDが設定されるオブジェクトをオブジェクト“obj”で表し、オブジェクト“obj”のオブジェクトIDをオブジェクトID“OID”で表す。オブジェクトID“OID”のツリー部及びコンテンツ部の値を、それぞれOIDt及びOIDcで表し、オブジェクトID“OID”をOID={OIDt,OIDc}の形式で表す。例えばOID={2,5}とは、ツリー部の値が2、コンテンツ部の値が5であるオブジェクトID“OID”を示す。なお、オブジェクトID“OID”のツリー部及びコンテンツ部を、それぞれOIDt及びOIDcで表すこともある。
本実施形態では、新規登録されるオブジェクトのオブジェクトIDを構成するツリー部及びコンテンツ部の各値は、クライアント端末30のオブジェクトID設定部311によって当該オブジェクトのハッシュ値から生成される。ハッシュ値の生成には、例えばSHA1やMD5のようなハッシュ関数が用いられる。このハッシュ関数は、オーバーレイネットワーク10を構成する全てのノードと、クライアント端末30との間で共通である。このハッシュ関数を用いて生成されるハッシュ値のビット長は、ノードIDのビット長と等しいとする。なお、新規登録されるオブジェクトに固有の値(つまりオブジェクトから生成される当該オブジェクトの代表値)であれば、当該オブジェクトのハッシュ値以外の値を、当該オブジェクトのオブジェクトIDを構成するツリー部及びコンテンツ部の各値に用いても構わない。
<オブジェクト登録先ノードの選択方法>
本実施形態では、オーバーレイネットワーク10上でのオブジェクト“obj”の登録先のノードとして、オブジェクトID“OID”のツリー部の値OIDtに対して最も近いノードIDを持つノードが選択される。このようなノードを、オブジェクト“obj”の「successor」と定義する。オーバーレイネットワーク10を構成する全てのノード20-iの選択・判定部283aは、この規則に基づいてオブジェクトの登録先ノードを決定して選択する。
図1のオーバーレイネットワークシステムにおいては、オブジェクトID“OID”のコンテンツ部の値がxであるものとすると、それぞれ、OID={3,x},OID={2,x},OID={7,x}であるオブジェクトIDのオブジェクトの登録先ノード「successor」は、次のようになる。
オブジェクトID{3,x}のオブジェクトのsuccessor
=ノードIDが3(ID3)のノード(アドレス10.0.0.1)
オブジェクトID{2,x}のオブジェクトのsuccessor
=ノードIDが3(ID3)のノード(アドレス10.0.0.1)
オブジェクトID{7,x}のオブジェクトのsuccessor
=ノードIDが7(ID7)のノード(アドレス192.168.0.1)
前述したように、ノードIDがy(IDy)のノードは、ノード“y”と称される。そこで以降の説明では、ノードIDがy(IDy)のノードをノード“y”と表記することもある。例えば「ノード“3”」は「ノードIDが3のノード」を示し、「ノード“7”」は「ノードIDが7のノード」を示す。
<オブジェクトの登録・参照動作>
本実施形態では、オブジェクトを登録するための登録動作として、新規登録機能による新規登録動作と、更新登録機能による更新登録動作とが用意されている。新規登録動作及び更新登録動作の特徴は、同じノードに更新前後のオブジェクトが登録されるようにするために、上述のようなオブジェクトIDの設定方法を適用することにある。これによって、更新前後のオブジェクトの重複排除をより容易に実現できる。
・オブジェクトの新規登録動作
まず、図1のオーバーレイネットワークシステムにおいてオブジェクト“obj”を新規登録するときの動作を、図5乃至図7を参照して説明する。図5は、オブジェクトの新規登録動作における情報の流れを示す図、図6はオブジェクトの新規登録動作におけるクライアント端末側の処理手順を示すフローチャート、図7はオブジェクトの新規登録・更新登録動作におけるノード側の処理手順を示すフローチャートである。
クライアント端末30のオブジェクトID設定部311は、新規登録されるべきオブジェクト“obj”のハッシュ値h(obj)を計算し(ステップ601)、このハッシュ値h(obj)を、図5において矢印501で示すように、当該オブジェクト“obj”のオブジェクトID“OID”におけるツリー部OIDtの値及びコンテンツ部OIDcの値として設定する(ステップ602)。この例では、OID={OIDt,OIDc}={2,2}であったとする。なお、以降の説明では、オブジェクトID“OID”を、オブジェクトID{OIDt,OIDc}と表記することもある。
ユーザプログラム実行部31は、オブジェクトID“OID”が設定されたオブジェクト“obj”をオーバーレイネットワーク10に新規登録するための新規登録要求を発行する(ステップ603)。このステップ603において、新規登録要求は、クライアント端末30の登録・参照要求処理部32によって、オーバーレイネットワーク10を構成するノード群のうちの任意のノード20-iに送信される。ここでは新規登録要求が、図5において矢印502で示すように、ノード20-7(ノード“7”)に送信されたものとする。新規登録要求は、オブジェクト“obj”及びオブジェクトID“OID”を含む。ここでは、OID={OIDt,OIDc}={2,2}である。
クライアント端末30からノード20-7に送信された新規登録要求は、当該ノード20-7の要求受付部26で受信されて、制御部28に渡される。すると制御部28では、ルーティング部283の選択・判定部283aが、要求されたオブジェクト“obj”のオブジェクトID“OID”におけるツリー部の値OIDtと、構成記憶部281に格納されている構成情報40-7のネットワーク構成情報42-7とに基づき、当該ネットワーク構成情報42-7から、オブジェクト“obj”のsuccessorとなるノードのアドレスを選択する(ステップ701)。オブジェクト“obj”のsuccessorとなるノードは、ネットワーク構成情報42-7によって示される、オーバーレイネットワーク10を構成しているノード群のうち、オブジェクトID“OID”のツリー部の値OIDtに最も近いノードIDを持つノードである。本実施形態のようにOIDt=2の場合、ノードIDが3のノードであるノード20-3(ノード“3”)のアドレスが選択される。
選択・判定部283aは、選択されたアドレスのノード20-3が自ノードであるかを判定する(ステップ702)。本実施形態のように自ノードでない場合(ステップ702のNo)、ルーティング部283の中継部283bは選択されたアドレスのノード20-3宛てに、クライアント端末30からの新規登録要求を通信機構24を介して図5において矢印503で示すように送信する(ステップ703)。このような送信を中継送信と呼ぶ。また中継送信を行うノードを中継ノードと呼ぶ。
ノード20-7によってノード20-3に中継送信された新規登録要求は、当該ノード20-3の通信機構24で受信されて、制御部28に渡される。するとノード20-3では、選択・判定部283aが、要求されたオブジェクト“obj”のオブジェクトID“OID”におけるツリー部の値OIDtに基づき、構成記憶部281に格納されている構成情報40-7のネットワーク構成情報42-7から、オブジェクト“obj”のsuccessorとなるノードのアドレスを選択する(ステップ701)。ここでは、ノード20-3が選択される。
選択・判定部283aは、選択されたノード20-3が自ノードであるかを判定する(ステップ702)。本実施形態のように自ノードである場合(ステップ702のYes)、選択・判定部283aは、自ノードが、要求されたオブジェクト“obj”のsuccessorであることを確認する。
するとノード20-3の衝突検出部284aは、要求されたオブジェクト“obj”のオブジェクトID“OID”(ここではオブジェクトID{2,2})と同一のオブジェクトIDを持つオブジェクトが、当該オブジェクトIDに対応付けて自ノードのオブジェクト記憶部27に登録されているかを調べる(ステップ704,705)。もし、オブジェクトID“OID”と同一のオブジェクトIDを持つオブジェクトが未だ登録されていないことが確認できたならば(ステップ705のNo)、ノード20-3のオブジェクトアクセス部284は、要求されたオブジェクト“obj”をオブジェクトID“OID”に対応付けて、図5において矢印504で示すようにオブジェクト記憶部27に登録する(ステップ706)。
すると、ノード20-3の制御部28は新規登録要求の送信元のノード20-7(つまり中継ノード20-7)に対し、通信機構24を介して、図5において矢印505で示すように登録成功の応答を返す(ステップ707)。この応答は、要求されたオブジェクト“obj”のオブジェクトID“OID”を含む。
ノード20-7の制御部28は、ノード20-3から返された登録成功の応答を通信機構24を介して受信する。するとノード20-7の制御部28は新規登録要求の送信元のクライアント端末30に対し、要求受付部26を介して、図5において矢印506で示すように登録成功の応答(オブジェクトID“OID”)を返す。
クライアント端末30は、ノード20-7に新規登録要求を送信すると(ステップ603)、当該要求に対する応答を待つ(ステップ604)。この状態で、ノード20-7からクライアント端末30に登録成功の応答が返されると、クライアント端末30は当該登録成功の応答を受信する。
・オブジェクトの新規登録動作(ハッシュ衝突あり)
本実施形態では、オブジェクトを新規登録する際に設定されるオブジェクトIDのツリー部及びコンテンツ部の値には、当該オブジェクトIDを持つオブジェクト(つまりコンテンツ)のハッシュ値(代表値)が用いられる。このため、ハッシュ衝突が起きると、異なるオブジェクトの間でオブジェクトIDが衝突する。この場合、一方のオブジェクトである既登録のオブジェクトが他方のオブジェクトである新規登録されるべきオブジェクトで上書きされてしまう。
そこで本実施形態では、要求されたオブジェクトのハッシュ値(オブジェクトID)と当該オブジェクトとは異なる既登録のオブジェクトのハッシュ値(オブジェクトID)との衝突を検出することにより、登録要求をエラーとして処理する手法を適用している。このハッシュ値の衝突を招くときの新規登録動作について、前述したハッシュ値の衝突を招かないときの新規登録動作と相違する点を中心に、図7のフローチャートに加えて、図8のオブジェクトの新規登録動作における情報の流れを示す図を参照して説明する。なお、図8において、図5と等価な部分には同一参照符号を付してある。
今、ノード20-3の制御部28が、ノード20-7によって中継送信されたクライアント端末30からの新規登録要求を通信機構24を介して受信したものとする。そして、自ノード(ノード20-3)が、要求されたオブジェクト“obj”のsuccessorであることが、ノード20-3のルーティング部283によって確認されたものとする(ステップ702のYes)。また、ノード20-3のオブジェクト記憶部27には、図8に示すように、オブジェクトIDが{2,2}のオブジェクト“objx”が登録されているものとする。
この場合、要求されたオブジェクト“obj”のオブジェクトID“OID”(OID={2,2})と同一のオブジェクトID(ID“objx”)を持つオブジェクト“objx”が、当該オブジェクトID(ID“objx”)に対応付けて既にオブジェクト記憶部27に登録されていることが、ノード20-3の衝突検出部284aによって確認される(ステップ705のYes)。
すると衝突検出部284aは、要求されたオブジェクト“obj”のオブジェクトID“OID”(OLD={OIDt,OIDc}={2,2})に基づいて、オブジェクト記憶部27から当該オブジェクトID“OID”を持つオブジェクト“objx”を読み込む(ステップ708)。このステップ708において衝突検出部284aは、要求されたオブジェクト“obj”が読み込んだオブジェクト“objx”と同一であるかを調べるために、図8において矢印801で示すように、両オブジェクトを比較する。そして衝突検出部284aは、オブジェクト比較の結果に基づき、要求されたオブジェクト“obj”が読み込んだオブジェクト“objx”と同一であるかを判定する(ステップ709)。
もし、両オブジェクトが同一でないと判定した場合(ステップ709のNo)、衝突検出部284aは異なるオブジェクトのハッシュ値(オブジェクトID)が衝突していることを検出したと判定する。この場合、ノード20-3の制御部28は、新規登録要求の送信元のノード20-7に対し、通信機構24を介して、図8において矢印802で示すようにエラー発生(ハッシュ衝突)の応答を返す(ステップ710)。
ノード20-7の制御部28は、ノード20-3から返されたエラー発生の応答を通信機構24を介して受信する。するとノード20-7の制御部28は新規登録要求の送信元のクライアント端末30に対し、要求受付部26を介して、図5において矢印803で示すようにエラー発生の応答を返す。
クライアント端末30は、ノード20-7から返されたエラー発生の応答を受け取る。
一方、両オブジェクトが同一であると判定した場合(ステップ709のYes)、オブジェクトアクセス部284は、異なるオブジェクトのハッシュ値(オブジェクトID)の衝突ではないことを確認する。このように、要求されたオブジェクト“obj”と同一のオブジェクトが既にオブジェクト記憶部27に登録されている場合、オブジェクトアクセス部284は当該オブジェクト“obj”をオブジェクト記憶部27に登録する動作を行わない。この状態で、ノード20-3の制御部28は、オブジェクトアクセス部284によってオブジェクト“obj”がオブジェクト記憶部27に登録された場合と同様に、新規登録要求の送信元のノード20-7に対して登録成功の応答を返す(ステップ707)。
本実施形態では、オブジェクト“obj”の新規登録を要求するクライアント端末30のオブジェクトID設定部311が、当該オブジェクト“obj”のハッシュ値を計算して、当該ハッシュ値に基づいて当該オブジェクト“obj”のオブジェクトIDを設定している。しかし、これらの処理が必ずしもクライアント端末30のオブジェクトID設定部311で行われる必要はない。例えば中継ノードまたは新規登録先ノード(successor)にオブジェクトID設定部311に相当するオブジェクトID設定部を設け、当該中継ノードまたは新規登録先ノードのオブジェクトID設定部でオブジェクトIDを設定してもよい。なお、新規登録先ノードでオブジェクト“obj”のオブジェクトIDを設定する場合、中継ノードは、当該中継ノードの選択・判定部283aによる新規登録先ノードの選択を可能とするために、オブジェクト“obj”のハッシュ値を計算して、当該ハッシュ値をオブジェクト“obj”のオブジェクトIDにおけるツリー部として設定する必要がある。
また本実施形態では、要求されたオブジェクト“obj”のオブジェクトID“OID”と同一のオブジェクトIDを持つオブジェクトが既にオブジェクト記憶部27に登録されているかを衝突検出部284aが確認することによって(ステップ704,705)、ハッシュ値の衝突が検出される。しかし本実施形態では、新規登録されるオブジェクトのオブジェクトIDにおけるツリー部及びコンテンツ部には、いずれも当該オブジェクトのハッシュ値が用いられる。このため、要求されたオブジェクト“obj”のオブジェクトID“OID”と少なくともツリー部が同一のオブジェクトIDを持つオブジェクトが既にオブジェクト記憶部27に登録されているかを衝突検出部284aが確認することによって、ハッシュ値の衝突が検出される構成であっても構わない。
・オブジェクトの更新登録動作
次に、図1のオーバーレイネットワークシステムにおいてオブジェクト“obj”を更新登録するときの動作を、新規登録動作と相違する点を中心に、図7のフローチャートに加えて、図9及び図10を参照して説明する。図9はオブジェクトの更新登録動作における情報の流れを示す図、図10はオブジェクトの更新登録動作におけるクライアント端末側の処理手順を示すフローチャートである。
クライアント端末30のユーザプログラム実行部31が、図9において矢印901で示されるように、オブジェクト“objp”をオブジェクト“obj”に更新したものとする。するとユーザプログラム実行部31のオブジェクトID設定部312は、オブジェクト“obj”の更新登録のために、当該更新登録されるべきオブジェクト“obj”(つまり更新後のオブジェクト“obj”)のハッシュ値h(obj)を計算する(ステップ101)。
次にオブジェクトID設定部312は、更新前のオブジェクト“objp”のオブジェクトID“OIDp”におけるツリー部OIDptの値を、図9において矢印902で示されるように、更新後のオブジェクト“obj”のオブジェクトID“OID”におけるツリー部OIDtの値として設定する(ステップ102)。このステップ102においてオブジェクトID設定部312は、計算されたハッシュ値h(obj)を、更新後のオブジェクト“obj”のオブジェクトID“OID”におけるコンテンツ部OIDcの値として、図9において矢印902で示されるように設定する。このように本実施形態では、更新前のオブジェクトのオブジェクトIDのツリー部の値が、更新後のオブジェクトのオブジェクトIDのツリー部の値として継承される。このため、オブジェクトのオブジェクトIDのツリー部の値は、更新前後で変化しない。これに対し、更新後のオブジェクトのオブジェクトIDのコンテンツ部の値には、当該更新後のオブジェクトのハッシュ値が用いられる。このため、オブジェクトのオブジェクトIDのコンテンツ部の値は、一般に更新前後で異なる。
図9の例では、更新前のオブジェクト“objp”のオブジェクトID“OIDp”が{2,2}であったのに対して、更新後のオブジェクト“obj”のオブジェクトID“OID”が{2,6}に設定される。
クライアント端末30のユーザプログラム実行部31は、オブジェクトID“OID”が設定されたオブジェクト“obj”をオーバーレイネットワーク10に更新登録するための更新登録要求を発行する(ステップ103)。このステップ103において、更新登録要求は、クライアント端末30の登録・参照要求処理部32によって、図9において矢印903で示されるように、オーバーレイネットワーク10を構成するノード群のうちの任意のノード20-iに送信される。図9の例では、任意のノードノード20-iはノード20-7である。更新登録要求は、オブジェクト“obj”及びオブジェクトID“OID”(OID={OIDt,OIDc}={2,6})を含む。
クライアント端末30からノード20-7に送信された更新登録要求は、当該ノード20-7の要求受付部26で受信されて、制御部28に渡される。すると制御部28では、ルーティング部283の選択・判定部283aが、要求されたオブジェクト“obj”のオブジェクトID“OID”におけるツリー部の値OIDtに基づき、構成記憶部281に格納されている構成情報40-7のネットワーク構成情報42-7から、オブジェクト“obj”のsuccessorとなるノードのアドレスを選択する(ステップ701)。本実施形態のようにOIDt=2の場合、ノードIDが3のノードであるノード20-3(ノード“3”)が選択される。
ルーティング部283の中継部283bは、選択・判定部283aによって選択されたノード20-3が本実施形態のように自ノードでない場合(ステップ702のNo)、クライアント端末30からの更新登録要求を通信機構24を介して、図9において矢印904で示すように当該ノード20-3に中継送信する(ステップ703)。
ノード20-7によってノード20-3に中継送信された更新登録要求は、当該ノード20-3で受信される。するノード20-3の選択・判定部283aは、要求されたオブジェクト“obj”のオブジェクトID“OID”におけるツリー部の値OIDtに基づき、構成情報40-7のネットワーク構成情報42-7から、オブジェクト“obj”のsuccessorとなるノードのアドレスを選択する(ステップ701)。ここでは、ノード20-3自身のアドレスが選択される。
選択・判定部283aは、選択されたノード20-3が自ノードであると判定することにより(ステップ702のYes)、自ノードが、要求されたオブジェクト“obj”のsuccessorであることを確認する。この場合、ノード20-3の衝突検出部284aは、要求されたオブジェクト“obj”のオブジェクトID“OID”(ここではオブジェクトID{2,6})と同一のオブジェクトIDを持つオブジェクトが、当該オブジェクトIDに対応付けて自ノードのオブジェクト記憶部27に登録されているかを調べる(ステップ704,705)。つまり衝突検出部284aは、オブジェクトID“OID”と重複するオブジェクトIDを持つオブジェクトが自ノードに登録されているかを調べる。
もし、オブジェクトID“OID”と同一のオブジェクトIDを持つオブジェクトが未だ登録されていないことが確認されたならば(ステップ705のNo)、ノード20-3のオブジェクトアクセス部284は、要求されたオブジェクト“obj”を、図9において矢印905で示すようにオブジェクト記憶部27に登録する(ステップ706)。
このように本実施形態においては、オブジェクト“objp”の更新後のオブジェクト“obj”は、オブジェクトIDのツリー部の値がオブジェクト“objp”のそれと同一に設定されるため、オブジェクト“objp”が登録されているノード20-3に登録される。しかも、更新後のオブジェクト“obj”は、オブジェクトIDのコンテンツ部の値が、オブジェクト“objp”のそれと異なることから、基本的にはオブジェクト“objp”に上書きされるおそれはない。
オブジェクト“obj”がノード20-3のオブジェクト記憶部27に登録されると、ノード20-3はノード20-7に対して、図9において矢印906で示すように登録成功の応答(オブジェクトID“OID”)を返す(ステップ707)。
ノード20-7は登録成功の応答を受信すると、図9において矢印907で示すように登録成功の応答(オブジェクトID“OID”)をクライアント端末30に返す。
・オブジェクトの更新登録動作(ハッシュ衝突あり)
本実施形態では、オブジェクトの更新登録動作においても、オブジェクトの新規登録動作の場合と同様に、要求されたオブジェクト“obj”のハッシュ値(オブジェクトID)と当該オブジェクトとは異なる既登録のオブジェクト“objx”のハッシュ値(オブジェクトID)との衝突を図7のフローチャートに従って検出することにより、登録要求をエラーとして処理する手法を適用している。これにより、既登録のオブジェクト“objx”が、当該オブジェクト“objx”とは異なる要求されたオブジェクト“obj”で上書きされるのを防止できる。
図11に、ハッシュ値の衝突を招くときのオブジェクトの更新登録動作における情報の流れを示す。図11において、図9と等価な部分には同一参照符号を付してある。
図11の例では、要求されたオブジェクト“obj”のオブジェクトID“OID”(OLD={OIDt,OIDc}={2,6})と同一のオブジェクトIDを持つオブジェクト“objx”が、既にオブジェクト記憶部27に登録されている(ステップ705のYes)。この例では、ノード20-3の衝突検出部284aは、図11において矢印111で示すようにオブジェクト“obj”及び“objx”を比較することにより(ステップ708)、両オブジェクトが同一でないことを確認する(ステップ709のNo)。
この場合、ノード20-3はノード20-7に対し、図11において矢印112で示すようにエラー発生(ハッシュ衝突)の応答を返す(ステップ710)。するとノード20-7は、図11において矢印113で示すようにエラー発生(ハッシュ衝突)の応答をクライアント端末30に返す。
本実施形態によれば、オーバーレイネットワークシステムにおけるオブジェクトの登録を、新規登録と更新登録とに分け、それぞれでオブジェクトIDの設定方法、つまり「ツリー部」と「コンテンツ部」の設定方法に工夫を持たせている。特に、更新後のオブジェクトのオブジェクトIDにおけるツリー部として、更新前のオブジェクトのオブジェクトIDにおけるツリー部の値を継承している。これによって、更新前後のオブジェクトを同じノードに登録することができる。オブジェクトの重複部分は更新前後のオブジェクト間で生じやすい。このため、更新前後のオブジェクトを同じノードに登録することにより、当該更新前後のオブジェクトのデータに類似性があるときには、更新前後のオブジェクト間で重複排除を行う効果は大きい。
従来技術では、更新前後のオブジェクトが複数のノード間で分散して登録されることになる。このため、従来技術において更新前後のオブジェクト間で重複排除を行うためには、ノード間での複雑な連携動作が必要となる。これに対して本実施形態では、更新前後のオブジェクトを同じノードに登録することができるため、そのノード内でオブジェクトの重複排除を行えばよい。よって本実施形態によれば、従来技術と比較して、より高い信頼性・可用性を得ながら、オブジェクト間の重複排除を実現することができる。なお、同じノードに登録されたオブジェクト間の重複排除は周知の技術を用いて容易に実現できるため、当該重複排除の具体的な説明は省略する。
本実施形態では、オブジェクト“obj”の更新登録を要求するクライアント端末30のオブジェクトID設定部312が、当該オブジェクト“obj”のハッシュ値を計算し、当該ハッシュ値と更新前のオブジェクト“objp”のオブジェクトID“OIDp”におけるツリー部OIDptの値とに基づいて当該オブジェクト“obj”のオブジェクトIDを設定している。しかし、これらの処理が必ずしもクライアント端末30のオブジェクトID設定部312で行われる必要はない。例えば中継ノードまたは更新登録先ノード(successor)にオブジェクトID設定部312に相当するオブジェクトID設定部を設け、当該中継ノードまたは更新登録先ノードのオブジェクトID設定部でオブジェクトIDを設定してもよい。この場合、クライアント端末30から中継ノードに送信される更新登録要求に、更新前のオブジェクト“objp”のオブジェクトID“OIDp”における少なくともツリー部の値OIDptを含める必要がある。また、更新登録先ノードでオブジェクト“obj”のオブジェクトIDを設定する場合、中継ノードはクライアント端末30から受信した更新登録要求に含まれているツリー部の値OIDptを、オブジェクト“obj”のオブジェクトIDにおけるツリー部の値OIDtとして用いれば良い。
本実施形態では、オブジェクトの新規登録動作で設定されるオブジェクトIDのツリー部及びコンテンツ部の値には、当該オブジェクト(つまりコンテンツ)のハッシュ値が用いられる。しかし、ツリー部の値に必ずしもオブジェクトのハッシュ値(代表値)を用いる必要はなく、例えば既登録のオブジェクトのオブジェクトIDのツリー部とは重複しない値を用いてもよい。同様に、コンテンツ部の値に必ずしもオブジェクトのハッシュ値を用いる必要はなく、任意の値を用いてもよい。
また本実施形態では、オブジェクトの更新登録動作で設定されるオブジェクトIDのコンテンツ部の値には、当該オブジェクトのハッシュ値が用いられる。しかし、コンテンツ部の値に必ずしもオブジェクトのハッシュ値を用いる必要はなく、既登録のオブジェクトのうちツリー部が同一のオブジェクトIDの集合に対して、コンテンツ部が重複しない値を用いてもよい。
・オブジェクトの参照動作
次に、図1のオーバーレイネットワークシステムにおいてオブジェクト“obj”を参照するときの動作を、図12のオブジェクトの参照動作における情報の流れを示す図を参照して簡単に説明する。
今、クライアント端末30が、参照されるべきオブジェクトobj”のオブジェクトID“OID”を、図12において矢印121で示すように、例えばユーザの操作に従って入力したものとする。するとクライアント端末30は、オブジェクトID“OID”を持つオブジェクトobj”を参照するための参照要求を、オーバーレイネットワーク10を構成するノード群のうちの任意のノード20-iに送信する。ここでは、参照要求が、図12において矢印122で示すように、ノード20-7(ノード“7”)に送信されたものとする。参照要求は、オブジェクトID“OID”を含む。ここでは、OID={OIDt,OIDc}={2,2}であるものとする。
クライアント端末30により送信された参照要求はノード20-7で受信される。すると、ノード20-7の選択・判定部283aは、当該参照要求に含まれているオブジェクトID“OID”におけるツリー部の値OIDt(=2)をもとに、ネットワーク構成情報42-7からオブジェクト“obj”のsuccessorとなるノードのアドレスを選択する。ここでは、ノード20-3(ノード“3”)のアドレスが選択される。ノード20-7の中継部283bは、選択されたアドレスのノード20-3宛てに、図12において矢印123で示すように参照要求を中継送信する。
ノード20-3は、ノード20-7により中継送信された参照要求を受信すると、オブジェクトID“OID”におけるツリー部の値OIDt(=2)をもとに、自身が当該オブジェクトID“OID”を持つオブジェクト“obj”のsuccessorであることを確認する。ノード20-3は、自身がsuccessorであると確認できた場合、オブジェクトID“OID”を持つオブジェクト“obj”が、当該オブジェクトID“OID”に対応付けて当該ノード20-3のオブジェクト記憶部27に登録されているかを判定する。
図12の例では、オブジェクト“obj”は、ノード20-3のオブジェクト記憶部27に登録されている。この場合、ノード20-3は、図12において矢印124で示すようにオブジェクト“obj”を読み出す。そしてノード20-3は、参照成功の応答を、図12において矢印125で示すようにノード20-7に返す。この参照成功の応答は、読み出したオブジェクト“obj”を含む。
ノード20-7はノード20-3から返された参照成功の応答(オブジェクト“obj”)を受信すると、参照成功の応答(オブジェクト“obj”)を、図12において矢印126で示すようにクライアント端末30に返す。クライアント端末30は、ノード20-7から返された参照成功の応答(オブジェクト“obj”)を受信する。
[変形例]
次に、上記実施形態の変形例について説明する。
上記実施形態では、ハッシュ衝突により異なるオブジェクトの間でオブジェクトIDが衝突したことが検出された場合には、エラーとして処理される。そこで上記実施形態の変形例の特徴は、異なるオブジェクトの間でオブジェクトIDが衝突するのを回避する仕組みを提供することにある。
<オブジェクトIDの構成>
オブジェクトIDは、上記実施形態と同様にツリー部及びコンテンツ部より構成される。本変形例で適用されるオブジェクトIDが上記実施形態と相違する点は、オブジェクトIDのツリー部及びコンテンツ部の各々が、いずれも、代表値部及び非代表値部から構成されることである。ツリー部及びコンテンツ部の各代表値部が取り得る値の範囲は、オーバーレイネットワーク10を構成する各ノードのノードIDが取り得る値の範囲と等しいものとする。つまり、本変形例においては、オブジェクトIDのツリー部及びコンテンツ部の各代表値部が取り得る値の範囲は、0から7(2m−1=23−1=7)である。これに対し、非代表値部が取り得る値の範囲については特に定められていない。
本変形例では、オブジェクト“obj”のオブジェクトID“OID”は、
OID={OIDt,OIDc}
={OIDthOIDts,OIDchOIDcs}
OIDt…ツリー部の値
OIDth…ツリー部の代表値部の値
OIDtsツリー部の非代表値部の値
OIDc…コンテンツ部の値
OIDch…コンテンツ部の代表値部の値
OIDcs…コンテンツ部の非代表値部の値
のように表わされる。
例えば、オブジェクトIDが{12,34}であるとは、
ツリー部の代表値部の値が1
ツリー部の非代表値部の値が2
コンテンツ部の代表値部の値が3
コンテンツ部の非代表値部の値が4
であることを示す。
<オブジェクトIDの設定方法>
本変形例では、オブジェクトを新規登録する際に設定されるオブジェクトIDのツリー部及びコンテンツ部の各代表値部の値は、当該オブジェクトのハッシュ値から生成される。ハッシュ値の生成には、例えばSHA1やMD5のようなハッシュ関数が用いられる。このハッシュ関数は、オーバーレイネットワーク10を構成する全てのノードと、クライアント端末30との間で共通である。
<オブジェクト登録先ノードの選択方法>
本変形例では、オーバーレイネットワーク10上でのオブジェクト“obj”の登録先のノードとして、オブジェクトID“OID”におけるツリー部の代表値部の値OIDthに対して最も近いノードIDを持つノードが選択される。このようなノードを、オブジェクト“obj”の「successor」と定義する。オーバーレイネットワーク10を構成する全てのノードは、この規則に基づいてオブジェクトの登録先ノードを決定する。
図1のオーバーレイネットワークシステムにおいては、オブジェクトID“OID”のコンテンツ部の値がx、ツリー部の非代表値部の値がyであるものとすると、それぞれ、OID={3y,x},OID={2y,x},OID={7y,x}であるオブジェクトIDのオブジェクトの登録先ノード「successor」は、次のようになる。
オブジェクトID{3y,x}のオブジェクトのsuccessor
=ノード“3”(アドレス10.0.0.1)
オブジェクトID{2y,x}のオブジェクトのsuccessor
=ノード“3”(アドレス10.0.0.1)
オブジェクトID{7y,x}のオブジェクトのsuccessor
=ノード“7”(アドレス192.168.0.1)
<オブジェクトの登録・参照動作>
次に、本変形例におけるオブジェクトの登録と参照の動作について説明する。オブジェクトの登録動作については、上記実施形態と同様に、新規登録動作と更新登録動作とに分けて説明する。
・オブジェクトの新規登録動作
まず、図1のオーバーレイネットワークシステムにおいてオブジェクト“obj”を新規登録するときの動作を、図13乃至図15を参照して説明する。図13はオブジェクトの新規登録動作における情報の流れを示す図、図14はオブジェクトの新規登録動作におけるクライアント端末側の処理手順を示すフローチャート、図15はオブジェクトの新規登録動作におけるノード側の処理手順を示すフローチャートである。
クライアント端末30のオブジェクトID設定部311は、新規登録されるべきオブジェクト“obj”のハッシュ値h(obj)を計算する(ステップ141)。オブジェクトID設定部311は、このハッシュ値h(obj)に基づいて、オブジェクト“obj”の仮のオブジェクトID(以下、仮オブジェクトIDと称する)“TOID”を次のように設定する(ステップ142)。
まずオブジェクトID設定部311は、仮オブジェクトID“TOID”におけるツリー部の代表値部の値TOIDth及びコンテンツ部の代表値部の値TOIDchとして、いずれもオブジェクト“obj”のハッシュ値h(obj)を設定する。またオブジェクトID設定部311は、仮オブジェクトID“TOID”におけるツリー部の非代表値部の値TOIDts及びコンテンツ部の非代表値部の値TOIDcsとして、いずれも任意の値、例えば“0”を設定する。この例では、TOID={TOIDt,TOIDc}={TOIDthTOIDts,TOIDchTOIDcs}={20,20}であったとする。この場合、オブジェクト“obj”の仮オブジェクトID“TOID”、つまり仮オブジェクトID{TOIDt,TOIDc}として、図13において矢印131で示すように、{20,20}が設定される。
クライアント端末30のユーザプログラム実行部31は、仮オブジェクトID“TOID”が設定されたオブジェクト“obj”をオーバーレイネットワーク10に新規登録するための新規登録要求を発行する(ステップ143)。このステップ143において、新規登録要求は、クライアント端末30の登録・参照要求処理部32によって、オーバーレイネットワーク10を構成するノード群のうちの任意のノード20-iに送信される。ここでは新規登録要求が、図13において矢印132で示すように、ノード20-7(ノード“7”)に送信されたものとする。新規登録要求は、オブジェクト“obj”及び仮オブジェクトID“TOID”を含む。ここでは、TOID={TOIDt,TOIDc}={TOIDthTOIDts,TOIDchTOIDcs}={20,20}である。
クライアント端末30からノード20-7に送信された新規登録要求は、当該ノード20-7の要求受付部26で受信されて、制御部28に渡される。すると制御部28では、ルーティング部283の選択・判定部283aが、要求されたオブジェクト“obj”の仮オブジェクトID“TOID”におけるツリー部の代表値部の値TOIDthと、構成記憶部281に格納されている構成情報40-7のネットワーク構成情報42-7とに基づき、当該ネットワーク構成情報42-7から、オブジェクト“obj”のsuccessorとなるノードのアドレスを選択する(ステップ151)。オブジェクト“obj”のsuccessorとなるノードは、ネットワーク構成情報42-7によって示される、オーバーレイネットワーク10を構成しているノード群のうち、仮オブジェクトID“TOID”におけるツリー部の代表値部の値TOIDthに最も近いノードIDを持つノードである。本変形例のようにTOIDth=2の場合、ノードIDが3のノードであるノード20-3(ノード“3”)のアドレスが選択される。
選択・判定部283aによって選択されたアドレスのノード20-3が本変形例のように自ノードでない場合(ステップ152のNo)、ノード20-3の中継部283bは選択されアドレスのノード20-3宛てに、クライアント端末30からの新規登録要求を図13において矢印133で示すように中継送信する(ステップ153)。このノード20-3宛てに中継送信された新規登録要求は、当該ノード20-3で受信される。
するとノード20-3のルーティング部283は、中継送信された新規登録要求で要求されたオブジェクト“obj”におけるツリー部の代表値部の値TOIDthに基づき、自ノードが、要求されたオブジェクト“obj”のsuccessorであることを確認する(ステップ152のYes)。この場合、ノード20-3の衝突検出部284aは、要求されたオブジェクト“obj”の仮オブジェクトID“TOID”とツリー部の値が同一のオブジェクトIDを持つオブジェクトが、“当該オブジェクトIDに対応付けて自ノードのオブジェクト記憶部27に登録されているかを調べる(ステップ154,155)。本変形例では、仮オブジェクトID“TOIDは{20,20}であることから、ツリー部の値が“20”であるオブジェクトIDを持つオブジェクトが、ノード20-3のオブジェクト記憶部27に登録されているかが調べられる。
図13の例では、ツリー部の値が“20”であるオブジェクトIDを持つオブジェクトは、ノード20-3のオブジェクト記憶部27に登録されていないものとする(ステップ155のNo)。この場合、ノード20-3の再構成部(第1の再構成部)284bは、仮オブジェクトID“TOID”={20,20}をオブジェクトID“OID”={20,20}として設定する(ステップ156)。ノード20-3のオブジェクトアクセス部284は要求されたオブジェクト“obj”を、この設定されたオブジェクトID“OID”に対応付けて、図13において矢印134で示すようにオブジェクト記憶部27に登録する(ステップ157)。
すると、ノード20-3の制御部28はノード20-7に対し、要求受付部26を介して、図13において矢印135で示すように新規登録成功の応答を返す(ステップ158)。この応答は、要求されたオブジェクト“obj”のオブジェクトID“OID”(OID={20,20})を含む。
ノード20-7の制御部28は、ノード20-3から返された新規登録成功の応答を通信機構24を介して受信する。するとノード20-7の制御部28は新規登録要求の送信元のクライアント端末30に対し、要求受付部26を介して、図13において矢印136で示すように新規登録成功の応答(オブジェクトID“OID”={20,20})を返す。
クライアント端末30は、ノード20-7から返される新規登録成功の応答(オブジェクトID“OID”={20,20})を受信する。
・オブジェクトの新規登録動作(オブジェクトIDの衝突あり)
本変形例では、オブジェクトIDのツリー部及びコンテンツ部の各代表値部の値には、当該オブジェクトIDを持つオブジェクト(コンテンツ)のハッシュ値(代表値)が用いられる。また、ツリー部及びコンテンツ部の各非代表値部の値には、任意の値が用いられる。このため、異なるオブジェクトの間でオブジェクトIDが衝突する可能性がある。
そこで本変形例では、新規登録が要求されたオブジェクトのオブジェクトIDと当該オブジェクトとは異なる既登録のオブジェクトのオブジェクトIDとの衝突(更に詳細には、ツリー部の衝突)が新規登録先ノード(successor)の衝突検出部284aによって検出されると、要求されたオブジェクトのオブジェクトIDにおけるツリー部の非代表値部の値を再構成部284bが再選択することにより、オブジェクトIDの衝突を回避する手法を適用している。このようにオブジェクトIDの衝突を回避することにより、要求されたオブジェクトを確実に登録可能とする。
以下、オブジェクトIDの衝突を招くときの新規登録動作について、前述したオブジェクトIDの衝突を招かないときの新規登録動作と相違する点を中心に、図15のフローチャートに加えて、図16のオブジェクトの新規登録動作における情報の流れを示す図を参照して説明する。なお、図16において、図13と等価な部分には同一参照符号を付してある。
今、ノード20-3の制御部28が、ノード20-7によって中継送信されたクライアント端末30からの新規登録要求を通信機構24を介して受信したものとする。そして、自ノード(ノード20-3)が、要求されたオブジェクト“obj”のsuccessorであることが、ノード20-3のルーティング部283によって確認されたものとする(ステップ152のYes)。また、ノード20-3のオブジェクト記憶部27には、図16に示すように、オブジェクトIDが{20,20}のオブジェクト“objx”が登録されているものとする。
この場合、要求されたオブジェクト“obj”の仮オブジェクトID“TOID”(TOID={20,20})とツリー部の値が同一のオブジェクトID(ID“objx”)を持つオブジェクト“objx”が、“当該オブジェクトID(ID“objx”)に対応付けて自ノードのオブジェクト記憶部27に登録されていること、つまりオブジェクトID(ツリー部)の衝突が、図16において矢印161で示すように、ノード20-3の衝突検出部284aによって確認される(ステップ155のYes)。
するとノード20-3の再構成部284bは、オブジェクト記憶部27に登録されているオブジェクトの群の中から、オブジェクトIDにおけるツリー部の代表値部の値が、要求されたオブジェクト“obj”の仮オブジェクトID“TOID”のそれと同一のオブジェクトの集合を特定する(ステップ159)。ここでは、オブジェクトIDにおけるツリー部の代表値部の値が“2”のオブジェクトの集合が特定される。
次に再構成部284bは、特定されたオブジェクトの集合に含まれる各オブジェクトのオブジェクトIDにおけるツリー部の非代表値部の値に基づき、非代表値部が取り得る値の範囲(ここでは0〜7)の中から、当該オブジェクトの集合の中でツリー部の非代表値部の値として未だ使用されていない値NOIDtsを選択する(ステップ15A)。ここでは、“0”が使用中であることから、NOIDts=1が選択されたものとする。
次に再構成部284bは、仮オブジェクトID“TOID”と選択した値NOIDts(=1)とに基づいて、要求されたオブジェクト“obj”のオブジェクトID“OID”(OID={OIDt,OIDc}={OIDthOIDts,OIDchOIDcs}を、
OIDth=TOIDth=2
OIDts=NOIDts=1
OIDc=TOIDc=TOIDchTOIDcs=20
のように設定する(ステップ15B)。
このように、オブジェクトID“OID”におけるツリー部の代表値部の値OIDth及びオブジェクトID“OID”におけるコンテンツ部の値OIDcには、それぞれ、仮オブジェクトID“TOID”におけるツリー部の代表値部の値TOIDth(=2)及び仮オブジェクトID“TOID”におけるコンテンツ部の値TOIDc(=20)が継承される。一方、オブジェクトID“OID”におけるツリー部の非代表値部の値OIDtsには、ステップ15Bで選択された値NOIDts(=1)が用いられる。これにより、要求されたオブジェクト“obj”のオブジェクトID“OID”として、図16において矢印162で示すように{21,20}が設定される。
この場合、オブジェクトアクセス部284は、要求されたオブジェクト“obj”をステップ15Bで設定されたオブジェクトID“OID”に対応付けて、図16において矢印163で示すようにオブジェクト記憶部27に登録する(ステップ157)。以降の動作は、図16において矢印164及び165で示すように、新規登録成功の応答がオブジェクトID“OID”として{21,20}を含む以外、オブジェクトIDの衝突が検出されなかった場合と同様である。
このように本変形例においては、オブジェクトの新規登録先ノードにおいてオブジェクトID(ツリー部)の衝突を検出したときには、新規登録が要求されたオブジェクトのオブジェクトIDが再構成される。更に詳細には、オブジェクトIDのツリー部の非代表値部の値が再構成される。これにより、オブジェクトIDの衝突を回避しながら、要求されたオブジェクトを確実に登録することができる。
本変形例では、オブジェクト“obj”の新規登録を要求するクライアント端末30のオブジェクトID設定部311が、当該オブジェクト“obj”のハッシュ値を計算して、当該ハッシュ値に基づいて当該オブジェクト“obj”の仮オブジェクトIDを設定している。しかし、これらの処理が必ずしもクライアント端末30のオブジェクトID設定部311で行われる必要はなく、例えば中継ノードまたは新規登録先ノード(successor)で行われてもよい。なお、新規登録先ノードでオブジェクト“obj”のオブジェクトIDを設定する場合、中継ノードは、中継ノードの選択・判定部283aによる新規登録先ノードの選択を可能とするために、オブジェクト“obj”のハッシュ値を計算して、当該ハッシュ値をオブジェクト“obj”の仮オブジェクトIDにおけるツリー部として設定する必要がある。
・オブジェクトの更新登録動作
次に、図1のオーバーレイネットワークシステムにおいてオブジェクト“obj”を更新登録するときの動作を、新規登録動作と相違する点を中心に、図15のフローチャートに加えて、図17乃至図19を参照して説明する。図17はオブジェクトの更新登録動作における情報の流れを示す図、図18はオブジェクトの更新登録動作におけるクライアント端末側の処理手順を示すフローチャート、図19はオブジェクトの更新登録動作におけるノード側の処理手順を示すフローチャートである。
クライアント端末30のユーザプログラム実行部31が、図17において矢印171で示されるように、オブジェクト“objp”をオブジェクト“obj”に更新したものとする。するとユーザプログラム実行部31のオブジェクトID設定部312は、オブジェクト“obj”の更新登録のために、当該更新登録されるべきオブジェクト“obj”(つまり更新後のオブジェクト“obj”)のハッシュ値h(obj)を計算する(ステップ181)。オブジェクトID設定部312は、このハッシュ値h(obj)に基づいて、オブジェクト“obj”の仮オブジェクトID“TOID”を次のように設定する(ステップ182)。
まずオブジェクトID設定部312は、仮オブジェクトID“TOID”におけるツリー部の代表値部の値TOIDth及び非代表値部の値TOIDtsとして、更新前のオブジェクト“objp”が持つオブジェクトID“OIDp”におけるツリー部の代表値部の値OIDpth及び非代表値部の値OIDptsを、それぞれ設定する。ここで、更新前のオブジェクト“objp”が持つオブジェクトID“OIDp”は図17に示されるように{20,20}であるものとすると、更新後のオブジェクト“obj”に設定される仮オブジェクトID“TOID”のツリー部には、図17において矢印172で示されるように、オブジェクトID“OIDp”のツリー部の値20が継承される。
またオブジェクトID設定部312は、仮オブジェクトID“TOID”のコンテンツ部の代表値部TOIDchとして、計算されたハッシュ値h(obj)を設定する。またオブジェクトID設定部312は、仮オブジェクトID“TOID”におけるコンテンツ部の非代表値部TOIDcsとして、任意の値、例えば“0”を設定する。ここで、更新後のオブジェクト“obj”のハッシュ値h(obj)は“6”であるものとすると、更新後のオブジェクト“obj”に設定される仮オブジェクトID“TOID”のコンテンツ部の値には、図17において矢印172で示されるように“60”が用いられる。つまり、更新後のオブジェクト“obj”の仮オブジェクトID“TOID”として、{20,60}が設定される。
このように本変形例では、更新前のオブジェクトのオブジェクトIDのツリー部の値が、更新後のオブジェクトの仮オブジェクトIDのツリー部の値として継承される。これに対し、更新後のオブジェクトのオブジェクトIDのコンテンツ部の代表値部及び非代表値部の値には、それぞれ、当該更新後のオブジェクトのハッシュ値及び任意の値が用いられる。これにより図17の例では、更新前のオブジェクト“objp”のオブジェクトID“OIDp”が{20,20}であったのに対して、更新後のオブジェクト“obj”の仮オブジェクトID“TOID”が{20,60}に設定される。
するとクライアント端末30は、オブジェクト“obj”及び仮オブジェクトID“TOID”(TOID={TOIDt,TOIDc}={TOIDthTOIDts,TOIDchTOIDcs}={20,60})を含む更新登録要求を、オーバーレイネットワーク10を構成するノード群のうちの任意のノード20-i、例えばノード20-7に、図17において矢印173で示されるように送信する(ステップ183)。
クライアント端末30からノード20-7に送信された更新登録要求は、当該ノード20-7の要求受付部26で受信されて、制御部28に渡される。すると制御部28では、ルーティング部283の選択・判定部283aが、要求されたオブジェクト“obj”の仮オブジェクトID“TOID”におけるツリー部の代表値部の値TOIDthに基づき、構成記憶部281に格納されている構成情報40-7のネットワーク構成情報42-7から、オブジェクト“obj”のsuccessorとなるノードのアドレスを選択する(ステップ191)。本変形例のようにTOIDth=2の場合、ノードIDが3のノードであるノード20-3(ノード“3”)が選択される。
ルーティング部283の中継部283bは、選択・判定部283aによって選択されたノード20-3が本変形例のように自ノードでない場合(ステップ192のNo)、クライアント端末30からの更新登録要求を通信機構24を介して、図17において矢印174で示すように当該ノード20-3に中継送信する(ステップ193)。
ノード20-7によってノード20-3に中継送信された更新登録要求は、当該ノード20-3で受信される。するノード20-3の選択・判定部283aは、要求されたオブジェクト“obj”の仮オブジェクトID“TOID”におけるツリー部の代表値部の値TOIDthに基づき、構成情報40-7のネットワーク構成情報42-7から、オブジェクト“obj”のsuccessorとなるノードのアドレスを選択する(ステップ191)。ここでは、ノード20-3自身のアドレスが選択される。
選択・判定部283aは、選択されたノード20-3が自ノードであると判定することにより(ステップ192のYes)、自ノードが、要求されたオブジェクト“obj”のsuccessorであることを確認する。この場合、ノード20-3の衝突検出部284aは、要求されたオブジェクト“obj”の仮オブジェクトID“TOID”と同一のオブジェクトIDを持つオブジェクトが、当該オブジェクトIDに対応付けて自ノードのオブジェクト記憶部27に登録されているかを調べる(ステップ194,195)。本変形例では、仮オブジェクトID“TOID”は{20,60}である。このため、オブジェクトIDが{20,60}のオブジェクトが、ノード20-3のオブジェクト記憶部27に既に登録されているか、つまりオブジェクトIDとしての{20,60}が重複しているかが調べられる。
図17の例では、オブジェクトIDが{20,60}のオブジェクトは、ノード20-3のオブジェクト記憶部27に登録されていないものとする(ステップ195のNo)。この場合、ノード20-3の再構成部(第2の再構成部)284cは、仮オブジェクトID“TOID”={20,60}をオブジェクトID“OID”={20,60}として設定する(ステップ196)。するとノード20-3のオブジェクトアクセス部284は、要求されたオブジェクト“obj”をオブジェクトID“OID”に対応付けて、図17において矢印175で示すようにオブジェクト記憶部27に登録する(ステップ197)。
オブジェクト“obj”が登録されると、ノード20-3の制御部28はノード20-7に対し、要求受付部26を介して、図17において矢印176で示すように更新登録成功の応答を返す(ステップ198)。この応答は、要求されたオブジェクト“obj”のオブジェクトID“OID”(OID={20,60})を含む。
ノード20-7の制御部28は、ノード20-3から返された更新登録成功の応答を通信機構24を介して受信する。するとノード20-7の制御部28は更新登録要求の送信元のクライアント端末30に対し、要求受付部26を介して、図17において矢印177で示すように更新登録成功の応答(オブジェクトID“OID”={20,60})を返す。
クライアント端末30は、ノード20-7から返される更新登録成功の応答(オブジェクトID“OID”={20,60})を受信する。
・オブジェクトの更新登録動作(オブジェクトIDの衝突あり)
本変形例では、更新後のオブジェクトのオブジェクトIDにおけるコンテンツ部の代表値部の値には、当該更新後のオブジェクトの(コンテンツ)のハッシュ値(代表値)が用いられ、当該コンテンツ部の非代表値部の値には、任意の値が用いられる。このため更新前後で、異なるオブジェクトの間でオブジェクトIDが衝突する可能性がある。
そこで本変形例では、更新登録が要求されたオブジェクトのオブジェクトIDと当該オブジェクトとは異なる既登録のオブジェクトのオブジェクトIDとの衝突が更新登録先ノード(successor)の衝突検出部284aによって検出されると、要求されたオブジェクトのオブジェクトIDにおけるコンテンツ部の非代表値部の値を再構成部284cが再選択することにより、オブジェクトIDの衝突を回避する手法を適用している。
以下、オブジェクトIDの衝突を招くときの更新登録動作について、前述したオブジェクトIDの衝突を招かないときの更新登録動作と相違する点を中心に、図19のフローチャートに加えて、図20のオブジェクトの更新登録動作における情報の流れを示す図を参照して説明する。なお、図20において、図17と等価な部分には同一参照符号を付してある。
今、ノード20-3の制御部28が、ノード20-7によって中継送信されたクライアント端末30からの更新登録要求を通信機構24を介して受信したものとする。そして、自ノード(ノード20-3)が、要求されたオブジェクト“obj”のsuccessorであることが、ノード20-3のルーティング部283によって確認されたものとする(ステップ192のYes)。また、ノード20-3のオブジェクト記憶部27には、図20に示すように、オブジェクトIDが{20,60}のオブジェクト“objx”が登録されているものとする。
このような例では、要求されたオブジェクト“obj”の仮オブジェクトID“TOID”(TOID={20,60})と同一のオブジェクトID(ID“objx”)を持つオブジェクト“objx”が、“当該オブジェクトID(ID“objx”)に対応付けて自ノードのオブジェクト記憶部27に登録されていること、つまりオブジェクトIDの衝突が、図20において矢印201で示すように、ノード20-3の衝突検出部284aによって確認される(ステップ195のYes)。
するとノード20-3の再構成部284cは、オブジェクト記憶部27に登録されているオブジェクトの群の中から、オブジェクトIDにおけるツリー部の値が、要求されたオブジェクト“obj”の仮オブジェクトID“TOID”におけるツリー部の値TOIDt(=60)と同一で、かつ、オブジェクトIDにおけるコンテンツ部の代表値部の値が、当該仮オブジェクトID“TOID”におけるコンテンツ部の代表値部の値TOIDch(=0)と同一のオブジェクトの集合を特定する(ステップ199)。ここでは、オブジェクトIDにおける、ツリー部の値が“20”で、かつ、コンテンツ部の代表値部の値が“6”のオブジェクトの集合が特定される。
次に再構成部284cは、特定されたオブジェクトの集合に含まれる各オブジェクトのオブジェクトIDにおけるコンテンツ部の非代表値部の値に基づき、非代表値部が取り得る値の範囲(ここでは0〜7)の中から、当該オブジェクトの集合の中でコンテンツ部の非代表値部の値として未だ使用されていない値NOIDcsを選択する(ステップ19A)。ここでは、“0”が使用中であることから、NOIDcs=1が選択されたものとする。
すると再構成部284cは、仮オブジェクトID“TOID”と選択した値NOIDcs(=1)とに基づいて、要求されたオブジェクト“obj”のオブジェクトID“OID”(OID={OIDt,OIDc}={OIDthOIDts,OIDchOIDcs}を、
OIDt=TOIDt=20
OIDch=TOIDch=6
OIDcs=NOIDcs=1
のように設定する(ステップ19B)。
このように、オブジェクトID“OID”におけるツリー部の値OIDt及びオブジェクトID“OID”におけるコンテンツ部の代表値部の値OIDchには、それぞれ、仮オブジェクトID“TOID”におけるツリー部の値TOIDt(=20)及び仮オブジェクトID“TOID”におけるコンテンツ部の代表値部の値TOIDch(=6)が継承される。一方、オブジェクトID“OID”におけるコンテンツ部の非代表値部の値OIDcsには、ステップ19Bで選択された値NOIDcs(=1)が用いられる。これにより、要求されたオブジェクト“obj”のオブジェクトID“OID”として、図20において矢印202で示すように{20,61}が設定される。
この場合、ノード20-3のオブジェクトアクセス部284は、要求されたオブジェクト“obj”をステップ19Bで設定されたオブジェクトID“OID”に対応付けて、図20において矢印203で示すようにオブジェクト記憶部27に登録する(ステップ197)。以降の動作は、図20において矢印204及び205で示すように、更新登録成功の応答がオブジェクトID“OID”として{20,61}を含む以外、オブジェクトIDの衝突が検出されなかった場合と同様である。
このように本変形例においては、オブジェクトの更新登録先ノードにおいてオブジェクトIDの衝突を検出したときには、更新登録が要求されたオブジェクトのオブジェクトIDが再構成される。更に詳細には、オブジェクトIDのコンテンツ部の非代表値部の値が再構成される。これにより、オブジェクトIDの衝突を回避しながら、要求されたオブジェクトを確実に登録することができる。
本変形例では、オブジェクト“obj”の更新登録を要求するクライアント端末30のオブジェクトID設定部312が、当該オブジェクト“obj”のハッシュ値を計算して、当該ハッシュ値と更新前のオブジェクト“objp”のオブジェクトID“OIDp”とに基づいて当該オブジェクト“obj”の仮オブジェクトID“TOID”を設定している。しかし、これらの処理が必ずしもクライアント端末30のオブジェクトID設定部312で行われる必要はなく、例えば中継ノードまたは更新登録先ノード(successor)で行われてもよい。この場合、クライアント端末30から中継ノードに送信される更新登録要求に、更新前のオブジェクト“objp”のオブジェクトID“OIDp”における少なくともツリー部の値OIDpt(={OIDpth,OIDpts})を含める必要がある。また、更新登録先ノードでオブジェクト“obj”の仮オブジェクトID“TOID”を設定する場合、中継ノードはクライアント端末30から受信した更新登録要求に含まれているツリー部の値OIDpt(={OIDpth,OIDpts})を、オブジェクト“obj”の仮オブジェクトID“TOID”におけるツリー部の値TOIDt(={TOIDth,TOIDts})として用いれば良い。
・オブジェクトの参照動作
次に、図1のオーバーレイネットワークシステムにおいてオブジェクト“obj”を参照するときの動作を、図21のオブジェクトの参照動作における情報の流れを示す図を参照して簡単に説明する。
今、クライアント端末30が、参照されるべきオブジェクトobj”のオブジェクトID“OID”を、図21において矢印211で示すように、例えばユーザの操作に従って入力したものとする。するとクライアント端末30は、オブジェクトID“OID”を持つオブジェクトobj”を参照するための参照要求を、オーバーレイネットワーク10を構成するノード群のうちの任意のノード20-iに送信する。ここでは、参照要求が、図21において矢印212で示すように、ノード20-7(ノード“7”)に送信されたものとする。参照要求は、オブジェクトID“OID”を含む。ここでは、OID={OIDt,OIDc}={OIDthOIDts,OIDchOIDcs}={20,20}であるものとする。
ノード20-7は、クライアント端末30により送信された参照要求を受信すると、当該参照要求に含まれているオブジェクトID“OID”におけるツリー部の代表値部の値OIDthOIDts(=2)をもとに、ネットワーク構成情報42-7からオブジェクト“obj”のsuccessorとなるノードのアドレスを選択する。ここでは、ノード20-3(ノード“3”)のアドレスが選択される。ノード20-7は、選択したアドレスのノード20-3宛てに、図21において矢印213で示すように参照要求を中継送信する。
ノード20-3は、ノード20-7により中継送信された参照要求を受信すると、オブジェクトID“OID”におけるツリー部の代表値部の値OIDthOIDts(=2)をもとに、自身が当該オブジェクトID“OID”を持つオブジェクト“obj”のsuccessorであることを確認する。ノード20-3は、自身がsuccessorであると確認できた場合、オブジェクトID“OID”を持つオブジェクト“obj”が、当該オブジェクトID“OID”に対応付けて当該ノード20-3のオブジェクト記憶部27に登録されているかを判定する。
図21の例では、オブジェクト“obj”は、ノード20-3のオブジェクト記憶部27に登録されている。この場合、ノード20-3は、図21において矢印214で示すようにオブジェクト“obj”を読み出す。そしてノード20-3は、参照成功の応答を、図21において矢印215で示すようにノード20-7に返す。この参照成功の応答は、読み出したオブジェクト“obj”を含む。
ノード20-7はノード20-3から返された参照成功の応答(オブジェクト“obj”)を受信すると、参照成功の応答(オブジェクト“obj”)を、図21において矢印216で示すようにクライアント端末30に返す。クライアント端末30は、ノード20-7から返された参照成功の応答(オブジェクト“obj”)を受信する。
本変形例によれば、オーバーレイネットワークシステムにおけるオブジェクトの登録を、新規登録と更新登録とに分け、それぞれで特徴あるオブジェクトIDの設定手法を適用する一方、オブジェクトIDの衝突を回避する仕組みを適用することにより、オブジェクトIDの衝突を回避しながら、更新前後のオブジェクトを同じノードに登録することができる。このため従来技術と異なって、更新前後のオブジェクトを複数のノードで連携して管理する必要がなく、同じノード内に閉じて更新前後のオブジェクトの重複排除を行うことができる。これによって従来技術と比較して、オブジェクトIDの衝突を回避しながら、信頼性・可用性をより高めてオブジェクト間の重複排除を実現できる。
本変形例では、新規登録されるオブジェクトのオブジェクトIDにおけるツリー部及びコンテンツ部の代表値部には、当該オブジェクトのハッシュ値(代表値)が用いられるものの、当該ツリー部及びコンテンツ部の非代表値部には任意の値が用いられる。また、オブジェクトIDの衝突が発生した場合には、ツリー部の非代表値部のみが再設定される。このため、新規登録されるオブジェクトのオブジェクトIDにおけるツリー部及びコンテンツ部の値は異なる可能性がある。このような場合、新規登録されたオブジェクトと更新登録されたオブジェクトとを、そのオブジェクトIDから判別できない。
そこで、新規登録される(新規作成された)オブジェクトのオブジェクトIDにおけるツリー部及びコンテンツ部のそれぞれ非代表値部に同一の任意の値を設定し、オブジェクトのオブジェクトIDにおけるツリー部の非代表値部の値を再構成した場合には、当該オブジェクトIDにおけるコンテンツ部の非代表値部の値も、当該再構成後の非代表値部の値に再構成するようにしてもよい。このようにすると、新規登録されるオブジェクトのオブジェクトIDは、ツリー部とコンテンツ部の値が同じになる。このため、新規登録されたオブジェクトと更新登録されたオブジェクトとを、そのオブジェクトIDのツリー部とコンテンツ部の値が同じであるかによって判別することができる。
なお、本発明は、上記実施形態またはその変形例そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態またはその変形例に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を形成できる。例えば、実施形態またはその変形例に示される全構成要素から幾つかの構成要素を削除してもよい。