以下、図面を参照し、本発明の実施形態を説明する。図1は、本発明の一実施形態による分散型のデータ管理システムの構成を示している。図1において、複数のデータ管理装置1、ユーザ端末2、データファイル蓄積装置3が、通信ネットワーク400を介して互いに通信を行うことが可能なように接続されている。データ管理装置1、ユーザ端末2、およびデータファイル蓄積装置3は共にコンピュータである。各々のデータ管理装置1、ユーザ端末2、およびデータファイル蓄積装置3では、データの加工や演算を行う処理装置、データを保存するための記憶装置、ユーザがコンピュータへの指示を入力するための入力装置、および処理結果を出力する出力装置等のハードウェアと、コンピュータを制御する手順や命令をまとめたソフトウェア(プログラム)とが協働して動作することによって、所望の機能が実現される。
データ管理装置1において、通信処理部10は、他のデータ管理装置1やユーザ端末2、データファイル蓄積装置3との通信を制御し、各種メッセージの送信や受信を行う。処理部11は、データ管理に係る様々な処理を実行する。一時記憶部12は、処理中の情報を一時的に記憶する。経路表記憶部13は経路表を記憶し、データ管理表記憶部14はデータ管理表を記憶する。経路表およびデータ管理表の詳細は後述する。経路表記憶部13とデータ管理表記憶部14は異なる記録媒体で構成されていてもよいし、同一の記録媒体内の異なる記録領域で構成されていてもよい。
処理部11において、Join処理部110は、自身のデータ管理装置1がデータ管理システムに新たに追加される場合に、経路表記憶部13に格納される経路表に対する情報の設定に係る処理を実行する。Stabilization処理部111は、自身のデータ管理装置1がSUCCESSORとして認識している他のデータ管理装置1に対して、そのPREDECESSORの情報を定期的に確認するStabilization処理を実行する。メッセージ処理部112は、他のデータ管理装置1やユーザ端末2から受信されたメッセージに基づいて様々な処理を実行する。
経路表記憶部13が記憶する経路表には、他のデータ管理装置1との通信に必要な情報(例えばIPアドレスおよびポート番号)が含まれている。図2は経路表の一例を示している。経路表は、SUCCESSORおよびPREDECESSORを管理する2つのエントリと、「SUCCESSOR List」または「Finger Table」と呼ばれる部分とから成る。
SUCCESSORを管理するエントリには、SUCCESSORとなる他のデータ管理装置1の識別子(装置識別子)と、そのデータ管理装置1のIPアドレスおよびポート番号とが含まれている。PREDECESSORを管理するエントリには、PREDECESSORとなる他のデータ管理装置1の識別子(装置識別子)と、そのデータ管理装置1のIPアドレスおよびポート番号とが含まれている。「SUCCESSOR List」または「Finger Table」には、m台分(m≧0)のデータ管理装置1の識別子(装置識別子)と、それらのデータ管理装置1のIPアドレスおよびポート番号とが含まれている。
データ管理表記憶部14が記憶するデータ管理表には、自身のデータ管理装置1が管理する所定の数値範囲内の識別子が付与されたデータについての情報が含まれている。図3はデータ管理表の一例を示している。図3が示すようにデータ管理表には、個々のデータについて、各データに付与されている識別子(データ識別子)、および各データが保存されているデータファイル蓄積装置3のIPアドレスとポート番号を示す情報が含まれている。
図1に示される各装置は、必要に応じて各種メッセージの送受信を行う。図4はメッセージの一例を示している。宛先IPアドレスフィールド501、宛先ポート番号フィールド502には、それぞれメッセージの宛先である装置のIPアドレス、ポート番号が記録されている。送信元IPアドレスフィールド503、送信元ポート番号フィールド504には、それぞれメッセージの送信元である装置のIPアドレス、ポート番号が記録されている。処理対象識別子フィールド505には、処理対象となる識別子が記録されている。メッセージ内容フィールド506には、後述する4種類のメッセージ内容のうちのいずれか1つが記録されている。発信元IPアドレスフィールド507、発信元ポート番号フィールド508には、それぞれメッセージを作成し、最初に発信した装置のIPアドレス、ポート番号が記録されている。
メッセージを最初に発信する装置は、送信元IPアドレスフィールド503と発信元IPアドレスフィールド507、送信元ポート番号フィールド504と発信元ポート番号フィールド508にそれぞれ同一の情報を記録する。また、他装置から受信したメッセージを転送する装置は、送信元IPアドレスフィールド503と送信元ポート番号フィールド504を自身の情報に書き換えると共に、宛先IPアドレスフィールド501と宛先ポート番号フィールド502を転送先の装置の情報に書き換えてメッセージを送信する。
メッセージ内容は、「担当装置確認要求」、「PREDECESSOR通知」、「PREDECESSOR確認要求」、「設定完了通知」のいずれかである。「担当装置確認要求」は、処理対象識別子で示されるデータの管理を担当しているデータ管理装置1の情報の確認を要求することを示している。「PREDECESSOR通知」は、PREDECESSORの情報を通知することを示している。「PREDECESSOR確認要求」は、PREDECESSORの情報の確認を要求することを示している。「設定完了通知」は、新しくデータ管理システムに追加されたデータ管理装置1のSUCCESSOR/PREDECESSOR両エントリの設定完了を通知することを示している。
メッセージ内容が「担当装置確認要求」の場合、処理対象識別子フィールドには、確認対象となるデータの識別子が記録されている。メッセージ内容が「PREDECESSOR通知」の場合、処理対象識別子フィールドには、メッセージの宛先にとって新たなPREDECESSORとなるデータ管理装置1の識別子が記録されている。メッセージ内容が「PREDECESSOR確認要求」および「設定完了通知」の場合、処理対象識別子フィールドは使用されない。
次に、本実施形態によるデータ管理システムの動作を説明する。まず、図5および図6を参照し、新たなデータ管理装置がデータ管理システムに追加される場合のデータ管理装置の動作(第1の動作例)を説明する。本動作例では、データ管理装置npとnsの間にデータ管理装置nが新しく追加される場合を想定する。データ管理装置nが追加される前のデータ管理システムでは、各データ管理装置は互いにSUCCESSORとPREDECESSORを認識している。データ管理装置Xが認識しているSUCCESSORおよびPREDECESSORをそれぞれSucc(X),Pred(X)とすると、初期状態ではSucc(np) = ns,Pred(ns) = npである。また、Pred(np) = n1,Succ(ns) = n2とする(図6(a))。
まず、新しくシステムに加入するデータ管理装置n(Succ(n) = Null,Pred(n) = Null)は、あらかじめ認識しているデータ管理装置に対して、自身の識別子(ID(n))を担当するデータ管理装置(つまりID(n)にとってのSUCCESSOR)を尋ねる。具体的には、データ管理装置nのJoin処理部110は、ID(n)を担当するデータ管理装置を問い合わせるため、メッセージ内容が「担当装置確認要求」を示すメッセージを生成し、通信処理部10へ出力する。通信処理部10は、あらかじめ認識しているデータ管理装置へメッセージを送信する(ステップS100)。そのデータ管理装置からメッセージの返信があった場合、通信処理部10は、受信したメッセージをJoin処理部110へ出力する。Join処理部110はメッセージの内容を解析し、ID(n)を担当するデータ管理装置が存在するか否かを判断する(ステップS101)。
ID(n)を担当するデータ管理装置が存在しない場合には処理が終了する。また、ID(n)を担当するデータ管理装置が存在する場合、Join処理部110はそのデータ管理装置の情報(識別子、IPアドレス、ポート番号)をメッセージから抽出して一時記憶部12に保存すると共に、経路表記憶部13にその情報を格納し、経路表のSUCCESSORとして設定する。また、Join処理部110は、そのSUCCESSOR(データ管理装置ns)に対して、自身の情報(識別子、IPアドレス、ポート番号)と、自身がPREDECESSORであることとを通知するため、メッセージ内容が「PREDECESSOR通知」を示すメッセージ(本発明の第1の情報通知メッセージに対応)を生成し、通信処理部10を介してメッセージを送信する(ステップS102)。
通知を受けたデータ管理装置nsは、その情報を一時記憶部12に保存する。すなわち、メッセージ処理部112は、通信処理部10を介してデータ管理装置nからのメッセージを受信し、メッセージに含まれるデータ管理装置nの情報を一時記憶部12に保存する(ステップS200)。この時点では、Succ(n) = ns,Pred(n) = Nullである(図6(b))。
続いて、データ管理装置npは、自身がSUCCESSORとして認識しているデータ管理装置に対して、PREDECESSORの情報を定期的に確認する。具体的には、Stabilization処理部111は、メッセージ内容が「PREDECESSOR確認要求」を示すメッセージを生成し、通信処理部10を介してデータ管理装置nsへメッセージを送信する(ステップS300)。なお、この確認処理(Stabilization処理)は全てのデータ管理装置が定期的に行っているが、ここでは説明の煩雑さを避けるため、データ管理装置npについてのみ触れることとする。
データ管理装置npからのメッセージを受信したデータ管理装置nsは、自身が保有するPREDECESSORの情報をデータ管理装置npに通知する。具体的には、まずメッセージ処理部112は、通信処理部10を介してメッセージを受信する(ステップS201)。続いて、メッセージ処理部112は、ステップS200で保存したPREDECESSORの情報を一時記憶部12から読み出すと共に、経路表記憶部13内の経路表からPREDECESSORの情報を読み出し、両者を比較する(ステップS202)。
比較の結果、両者が異なる場合には、メッセージ処理部112は、一時記憶部12のPREDECESSORの情報を含むメッセージ(本発明の第2の情報通知メッセージに対応)を生成し、通信処理部10を介してメッセージをデータ管理装置npへ送信する(ステップS203)。また、ステップS202での比較の結果、両者が同一の場合には、メッセージ処理部112は、経路表のPREDECESSORの情報を含むメッセージを生成し、通信処理部10を介してメッセージをデータ管理装置npへ送信する(ステップS204)。本例では、一時記憶部12のPREDECESSORの情報と経路表のPREDECESSORの情報が異なるため、一時記憶部12に記録されているPREDECESSORの情報(データ管理装置nの情報)がデータ管理装置npに通知される。
データ管理装置npにおいて、Stabilization処理部111は、通信処理部10を介してSUCCESSORからのメッセージを受信し、メッセージに含まれる情報を一時記憶部12にノード情報として保存する(ステップS301、図6(c))。続いて、Stabilization処理部111は、一時記憶部12に保存したノード情報を自身のノード情報と比較する(ステップS302)。
比較の結果、両者が同一であった場合、Stabilization処理部111は、「SUCCESSORにとってのPREDECESSOR」=「自身」と正しく設定されていると判断し、処理を終了する。また、比較の結果、両者が異なる場合、Stabilization処理部111は、「SUCCESSORにとってのPREDECESSOR」≠「自身」であると判断し、一時記憶部12に保存されているノード情報に対応するデータ管理装置(データ管理装置n)に対して、自身の情報(識別子、IPアドレス、ポート番号)と、自身がPREDECESSORであることとを通知するためのメッセージ(本発明の第3の情報通知メッセージに対応)を生成し、通信処理部10を介してメッセージを送信する(ステップS303)。
データ管理装置nにおいて、Join処理部110は、通信処理部10を介してデータ管理装置npからのメッセージを受信し、メッセージに含まれる情報を一時記憶部12に保存すると共に、経路表記憶部13にその情報を格納し、経路表のPREDECESSORとして設定する(ステップS103)。この時点では、Succ(n) = ns,Pred(n) = npである(図6(d))。データ管理装置nは、SUCCESSORおよびPREDECESSOR両エントリの設定が完了したため、両エントリに対応するデータ管理装置に対して、設定完了を通知する。具体的には、Join処理部110は、設定完了を通知するため、メッセージ内容が「設定完了通知」を示すメッセージ(本発明の設定完了通知メッセージに対応)を生成し、通信処理部10を介して、データ管理装置nsおよびnpへメッセージを送信する(ステップS104)。
データ管理装置nからのメッセージを受信したデータ管理装置nsおよびnpは、それぞれ一時記憶部12に保存されていた情報で経路表を更新する。具体的には、データ管理装置nsにおいて、メッセージ処理部112は、通信処理部10を介してデータ管理装置nからのメッセージを受信し、設定完了を示すそのメッセージに基づいて、ステップS200で保存した情報(データ管理装置nの情報)を一時記憶部12から読み出し、経路表記憶部13内の経路表に格納されているPREDECESSORエントリの情報を、一時記憶部12から読み出した情報に書き換える(ステップS205)。
また、データ管理装置npにおいて、Stabilization処理部111は、通信処理部10を介してデータ管理装置nからのメッセージを受信し、設定完了を示すそのメッセージに基づいて、ステップS301で保存した情報(データ管理装置nの情報)を一時記憶部12から読み出し、経路表記憶部13内の経路表に格納されているSUCCESSORエントリの情報を、一時記憶部12から読み出した情報に書き換える(ステップS304)。
上記の処理に続いて、データ管理表の設定処理および更新処理が行われる。データ管理装置nsのメッセージ処理部112は、データ管理表記憶部14内のデータ管理表に格納されている情報のうち、識別子が (np, n] (np+1以上かつn以下)であるエントリの情報を含むメッセージを生成する。メッセージ処理部112は、通信処理部10を介して、PREDECESSORとして認識しているデータ管理装置nへメッセージを送信し、上記のエントリをデータ管理表から削除する(ステップS206)。
データ管理装置nのJoin処理部110は、通信処理部10を介してメッセージを受信し、メッセージに含まれる上記のエントリの情報をデータ管理表に格納する(ステップS105)。この時点では、Succ(np) = n,Pred(ns) = nであり(図6(e))、各データ管理装置における経路表およびデータ管理表に係る処理が終了する。
上記の動作によれば、データ管理装置が新しくデータ管理システムに追加される動作の途中においても、任意の識別子に対して、常に当該識別子を担当するデータ管理装置が存在するため、任意の識別子に対して常に新規データ情報の登録やデータの名前解決が可能となる。
図5では、メッセージ処理部112の動作のうち、新規データ管理装置の追加に関係する動作しか示されていない。そこで、図7を参照し、メッセージ処理部112全体の動作を説明する。通信処理部10は、メッセージの宛先IPアドレスおよび宛先ポート番号が自身を指すメッセージのみ受信し、メッセージ処理部112へメッセージを出力する(ステップS400 )。メッセージ処理部112はメッセージを参照し、メッセージ内容を判断する(ステップS401)。この判断結果に応じて、ステップS402〜S405のいずれかの処理が行われる。
メッセージ内容が担当装置確認要求であった場合には、処理Aが行われ(ステップS402)、メッセージ内容がPREDECESSOR通知であった場合には、処理Bが行われ(ステップS403)、メッセージ内容がPREDECESSOR確認であった場合には、処理Cが行われ(ステップS404)メッセージ内容が設定完了通知であった場合には、処理Dが行われる(ステップS405)。
次に、ステップS402〜S405の処理の詳細を説明する。図8は処理Aの内容を示している。データの管理を担当しているデータ管理装置1の情報の確認がメッセージの発信元から要求されている場合、メッセージ処理部112はメッセージ内の処理対象識別子を確認し、その処理対象識別子が、自身の担当する識別子の範囲に含まれるか否かを判定する(ステップS501)。処理対象識別子が、自身の担当する識別子の範囲に含まれる場合、メッセージ処理部112は、発信元に対して、自身のデータ管理装置1が担当装置であることを通知するためのメッセージを生成し、通信処理部10を介してメッセージを発信元へ送信する(ステップS502)。
また、処理対象識別子が、自身の担当する識別子の範囲に含まれていない場合、メッセージ処理部112は経路表記憶部13から経路表を読み出し(ステップS503)、経路表内のデータ管理装置1の識別子と処理対象識別子を比較して、メッセージの転送先となるデータ管理装置1を決定する(ステップS504)。続いて、メッセージ処理部112はメッセージの宛先IPアドレスおよび宛先ポート番号を転送先のデータ管理装置1のIPアドレスおよびポート番号に書き換えると共に、送信元IPアドレスおよび送信元ポート番号を自身のIPアドレスおよびポート番号に書き換え、通信処理部10を介してメッセージを転送する(ステップS505)。
図9は処理Bの内容を示している。メッセージが宛先にとっての新たなPREDECESSORを通知している場合、メッセージ処理部112は、メッセージに含まれる新規PREDECESSORの識別子、IPアドレス、ポート番号の情報(メッセージ中の処理対象識別子、発信元IPアドレス、発信元ポート番号の各情報)を一時記憶部12に保存する(ステップS600)。
図10は処理Cの内容を示している。自身のPREDECESSORの情報がメッセージの発信元から要求されている場合、メッセージ処理部112は、図9のステップS600で保存したPREDECESSORの情報を一時記憶部12から読み出すと共に、経路表記憶部13内の経路表からPREDECESSORの情報を読み出し、両者を比較する(ステップS700)。
比較の結果、両者が異なる場合には、メッセージ処理部112は、一時記憶部12に保存されているPREDECESSORの情報を含むメッセージを生成し、通信処理部10を介してメッセージを発信元へ送信する(ステップS701)。また、ステップS700での比較の結果、両者が同一の場合には、メッセージ処理部112は、経路表に格納されているPREDECESSORの情報を含むメッセージを生成し、通信処理部10を介してメッセージを発信元へ送信する(ステップS702)。
図11は処理Dの内容を示している。新しくデータ管理システムに追加されたデータ管理装置1のSUCCESSOR/PREDECESSOR両エントリの設定完了が通知された場合、メッセージ処理部112は、図9のステップS600で保存したPREDECESSORの情報を一時記憶部12から読み出し、経路表記憶部13内の経路表に格納されているPREDECESSORエントリの情報を、一時記憶部12から読み出した情報に書き換えることによって、経路表の内容を更新する(ステップS800)。
続いて、メッセージ処理部112は、データ管理表記憶部14内のデータ管理表に格納されている情報のうち、新しくデータ管理システムに追加されたデータ管理装置が担当すべき識別子が格納されているエントリの情報を含むメッセージを生成する。メッセージ処理部112は、通信処理部10を介して、PREDECESSORとして認識しているデータ管理装置1へメッセージを送信し、上記のエントリをデータ管理表から削除する(ステップS801)。
次に、図12を参照し、新たなデータ管理装置がデータ管理システムに追加される場合のデータ管理装置の動作の変形例(第2の動作例)を説明する。第2の動作例は、上述した第1の動作例におけるSUCCESSORとPREDECESSORの役割を逆にしたものであり、第2の動作例でも第1の動作例と同様の効果が得られる。本動作例でも、データ管理装置npとnsの間にデータ管理装置nが新しく追加される場合を想定する。
データ管理装置nが追加される前のデータ管理システムでは、各データ管理装置は互いにSUCCESSORとPREDECESSORを認識しており、初期状態ではSucc(np) = ns,Pred(ns) = npである(図12(a))。新しくシステムに加入するデータ管理装置n(Succ(n) = Null,Pred(n) = Null)は、あらかじめ認識しているデータ管理装置に対して、自身の識別子(ID(n))を担当するデータ管理装置の経路表上のPREDECESSOR(つまりID(n)にとってのPREDECESSOR)を尋ねる。
具体的には、データ管理装置nのJoin処理部110は、問い合わせのためのメッセージを生成し、通信処理部10を介して、あらかじめ認識しているデータ管理装置へメッセージを送信する。そのデータ管理装置からメッセージの返信があり、ID(n)にとってのPREDECESSORが見つかった場合、Join処理部110はPREDECESSORの情報(識別子、IPアドレス、ポート番号)をメッセージから抽出して一時記憶部12に保存すると共に、経路表記憶部13にその情報を格納し、経路表のPREDECESSORとして設定する。
また、Join処理部110は、PREDECESSOR(データ管理装置np)に対して、自身の情報(識別子、IPアドレス、ポート番号)と、自身がSUCCESSORであることとを通知するためのメッセージ(本発明の第1の情報通知メッセージに対応)を生成し、通信処理部10を介してメッセージを送信する。データ管理装置npのメッセージ処理部112は、通信処理部10を介してデータ管理装置nからのメッセージを受信し、メッセージに含まれるデータ管理装置nの情報を一時記憶部12に保存する。この時点では、Succ(n) = Null,Pred(n) = npである(図12(b))。
続いて、データ管理装置nsは、自身がPREDECESSORとして認識しているデータ管理装置に対して、SUCCESSORの情報を確認するためのメッセージを定期的に送信する。具体的には、データ管理装置nsのStabilization処理部111は、SUCCESSOR確認用のメッセージを生成し、通信処理部10を介してデータ管理装置npへメッセージを送信する。なお、この確認処理は全てのデータ管理装置が定期的に行っているが、ここでは説明の煩雑さを避けるため、データ管理装置nsについてのみ触れることとする。
データ管理装置nsからのメッセージを受信したデータ管理装置npは、自身が保有するSUCCESSORの情報をデータ管理装置npに通知する。具体的には、データ管理装置npのメッセージ処理部112は、SUCCESSORの情報を一時記憶部12から読み出すと共に、経路表記憶部13内の経路表からSUCCESSORの情報を読み出し、両者を比較する。比較の結果、両者が異なる場合には、メッセージ処理部112は、一時記憶部12のSUCCESSORの情報を含むメッセージ(本発明の第2の情報通知メッセージに対応)を生成し、通信処理部10を介してメッセージをデータ管理装置nsへ送信する。
また、比較の結果、両者が同一の場合には、メッセージ処理部112は、経路表のSUCCESSORの情報を含むメッセージを生成し、通信処理部10を介してメッセージをデータ管理装置nsへ送信する。本例では、一時記憶部12のSUCCESSORの情報と経路表のSUCCESSORの情報が異なるため、一時記憶部12に記録されているSUCCESSORの情報(データ管理装置nの情報)がデータ管理装置nsに通知される。データ管理装置nsにおいて、Stabilization処理部111は、通信処理部10を介してデータ管理装置npからのメッセージを受信し、メッセージに含まれる情報を一時記憶部12にノード情報として保存する(図12(c))。
続いて、Stabilization処理部111は、一時記憶部12に保存したノード情報を自身のノード情報と比較する。比較の結果、両者が同一であった場合、Stabilization処理部111は、「PREDECESSORにとってのSUCCESSOR」=「自身」と正しく設定されていると判断し、処理を終了する。また、比較の結果、両者が異なる場合、Stabilization処理部111は、「PREDECESSORにとってのSUCCESSOR」≠「自身」であると判断し、一時記憶部12に保存されているノード情報に対応するデータ管理装置(データ管理装置n)に対して、自身の情報(識別子、IPアドレス、ポート番号)と、自身がSUCCESSORであることとを通知するためのメッセージ(本発明の第3の情報通知メッセージに対応)を生成し、通信処理部10を介してメッセージを送信する。
データ管理装置nにおいて、Join処理部110は、通信処理部10を介してデータ管理装置nsからのメッセージを受信し、メッセージに含まれる情報を一時記憶部12に保存すると共に、経路表記憶部13にその情報を格納し、経路表のSUCCESSORとして設定する。この時点では、Succ(n) = ns,Pred(n) = npである(図12(d))。データ管理装置nは、SUCCESSORおよびPREDECESSOR両エントリの設定が完了したため、両エントリに対応するデータ管理装置に対して、設定完了を通知する。具体的には、Join処理部110は、設定完了を通知するためのメッセージ(本発明の設定完了通知メッセージに対応)を生成し、通信処理部10を介して、データ管理装置nsおよびnpへメッセージを送信する。
データ管理装置nからのメッセージを受信したデータ管理装置nsおよびnpは、それぞれ一時記憶部12に保存されていた情報で経路表を更新する。具体的には、データ管理装置nsにおいて、Stabilization処理部111は、通信処理部10を介してデータ管理装置nからのメッセージを受信し、設定完了を示すそのメッセージに基づいて、データ管理装置nの情報を一時記憶部12から読み出し、経路表記憶部13内の経路表に格納されているPREDECESSORエントリの情報をデータ管理装置nの情報に書き換える。
また、データ管理装置npにおいて、メッセージ処理部112は、通信処理部10を介してデータ管理装置nからのメッセージを受信し、設定完了を示すそのメッセージに基づいて、データ管理装置nの情報を一時記憶部12から読み出し、経路表記憶部13内の経路表に格納されているSUCCESSORエントリの情報をデータ管理装置nの情報に書き換える。
上記の処理に続いて、データ管理表の設定処理および更新処理が行われる。データ管理装置nsのStabilization処理部111は、データ管理表記憶部14内のデータ管理表に格納されている情報のうち、識別子が (np, n] (np+1以上かつn以下)であるエントリの情報を含むメッセージを生成する。Stabilization処理部111は、通信処理部10を介して、PREDECESSORとして認識しているデータ管理装置nへメッセージを送信し、上記のエントリをデータ管理表から削除する。
データ管理装置nのJoin処理部110は、通信処理部10を介してメッセージを受信し、メッセージに含まれる上記のエントリの情報をデータ管理表に格納する。この時点では、Succ(np) = n,Pred(ns) = nであり(図12(e))、各データ管理装置における経路表およびデータ管理表に係る処理が終了する。
上記の動作によれば、データ管理装置が新しくデータ管理システムに追加される動作の途中においても、任意の識別子に対して、常に当該識別子を担当するデータ管理装置が存在するため、任意の識別子に対して常に新規データ情報の登録やデータの名前解決が可能となる。
次に、図13を参照し、新たなデータ管理装置がデータ管理システムに追加される場合のデータ管理装置の動作の他の変形例(第3の動作例)を説明する。第1および第2の動作例では、データ管理装置nが、あらかじめ認識しているデータ管理装置に対して、ID(n)にとってのSUCCESSORとPREDECESSORのどちらか一方を尋ねるが、第3の動作例ではそれらの両方を尋ねる。
データ管理装置nが追加される前のデータ管理システムでは、各データ管理装置は互いにSUCCESSORとPREDECESSORを認識しており、初期状態ではSucc(np) = ns,Pred(ns) = npである(図13(a))。新しくシステムに加入するデータ管理装置n(Succ(n) = Null,Pred(n) = Null)は、あらかじめ認識しているデータ管理装置に対して、自身の識別子(ID(n))に対するSUCCESSORおよびPREDECESSORの両方を尋ねる。
具体的には、データ管理装置nのJoin処理部110は、問い合わせのためのメッセージを生成し、通信処理部10を介して、あらかじめ認識しているデータ管理装置へメッセージを送信する。そのデータ管理装置からメッセージの返信があり、ID(n)にとってのSUCCESSORおよびPREDECESSORが見つかった場合、Join処理部110はSUCCESSORおよびPREDECESSORの情報(識別子、IPアドレス、ポート番号)をメッセージから抽出して一時記憶部12に保存すると共に、経路表記憶部13にその情報を格納し、経路表のSUCCESSORおよびPREDECESSORとして設定する。
続いて、Join処理部110は、SUCCESSOR(データ管理装置ns)に対して、自身の情報(識別子、IPアドレス、ポート番号)と、自身がPREDECESSORであることとを通知するためのメッセージ(本発明の第1の情報通知メッセージに対応)を生成し、通信処理部10を介してメッセージを送信する。同様に、Join処理部110は、PREDECESSOR(データ管理装置np)に対して、自身の情報(識別子、IPアドレス、ポート番号)と、自身がSUCCESSORであることとを通知するためのメッセージ(本発明の第2の情報通知メッセージに対応)を生成し、通信処理部10を介してメッセージを送信する。
データ管理装置nsおよびnpのメッセージ処理部112は、通信処理部10を介してデータ管理装置nからのメッセージを受信し、メッセージに含まれるデータ管理装置nの情報を一時記憶部12に保存する。この時点では、Succ(n) = ns,Pred(n) = npである(図13(b))。
データ管理装置nは、SUCCESSORおよびPREDECESSOR両エントリの設定が完了したため、両エントリに対応するデータ管理装置に対して、設定完了を通知する。具体的には、Join処理部110は、設定完了を通知するためのメッセージ(本発明の設定完了通知メッセージに対応)を生成し、通信処理部10を介して、データ管理装置nsおよびnpへメッセージを送信する。
データ管理装置nからのメッセージを受信したデータ管理装置nsおよびnpは、それぞれ一時記憶部12に保存されていた情報で経路表を更新する。具体的には、データ管理装置nsにおいて、メッセージ処理部112は、通信処理部10を介してデータ管理装置nからのメッセージを受信し、設定完了を示すそのメッセージに基づいて、データ管理装置nの情報を一時記憶部12から読み出し、経路表記憶部13内の経路表に格納されているPREDECESSORエントリの情報をデータ管理装置nの情報に書き換える。
また、データ管理装置npにおいて、メッセージ処理部112は、通信処理部10を介してデータ管理装置nからのメッセージを受信し、設定完了を示すそのメッセージに基づいて、データ管理装置nの情報を一時記憶部12から読み出し、経路表記憶部13内の経路表に格納されているSUCCESSORエントリの情報をデータ管理装置nの情報に書き換える。
上記の処理に続いて、データ管理表の設定処理および更新処理が行われる。データ管理装置nsのメッセージ処理部112は、データ管理表記憶部14内のデータ管理表に格納されている情報のうち、識別子が (np, n] (np+1以上かつn以下)であるエントリの情報を含むメッセージを生成する。メッセージ処理部112は、通信処理部10を介して、PREDECESSORとして認識しているデータ管理装置nへメッセージを送信し、上記のエントリをデータ管理表から削除する。
データ管理装置nのJoin処理部110は、通信処理部10を介してメッセージを受信し、メッセージに含まれる上記のエントリの情報をデータ管理表に格納する。この時点では、Succ(np) = n,Pred(ns) = nであり(図13(c))、各データ管理装置における経路表およびデータ管理表に係る処理が終了する。
上記の動作によれば、データ管理装置が新しくデータ管理システムに追加される動作の途中においても、任意の識別子に対して、常に当該識別子を担当するデータ管理装置が存在するため、任意の識別子に対して常に新規データ情報の登録やデータの名前解決が可能となる。
第3の動作例における最初の段階では、SUCCESSORとPREDECESSORの両方を探索するため、どちらか一方しか探索しない第1および第2の動作例と比較して処理時間を要する。しかし、第3の動作例におけるSUCCESSORとPREDECESSOR両方の探索が終了した段階(図13(b))が、第1および第2の動作例における図6(d)および図12(d)の段階に相当するため、ほぼStabilizationプロトコルの待ち時間分だけ処理時間が短縮される。このため、処理全体で比較した場合、第3の動作例では第1および第2の動作例と比較して、処理時間が短縮されるという効果が得られる。また、第3の動作例はStabilizationプロトコルを必要としないため、新規分散データ管理装置の追加処理に要する時間がほぼ一定であるという効果がある(第1および第2の動作例では、最大でStabilizationプロトコルの実行間隔分だけ処理時間がばらつく)。
上述したように、本実施形態では、データ管理システムに新たに追加される新規データ管理装置が、識別子空間上で自身に隣接する各データ管理装置の情報を経路表に格納した後で、識別子空間上で新規データ管理装置に隣接する各データ管理装置が経路表の情報を新規データ管理装置の情報に更新する。これによって、識別子空間上の任意の位置の識別子に対応するデータ管理装置が常に存在する状態が保たれるため、データ管理システムに新たなデータ管理装置が追加される際にも、新規データ情報の登録等が可能となる。このように、本実施形態によるデータ管理装置は、データ管理システムの安定性を保つように適切な処理を行うことができる。
また、経路表に対する情報の設定および更新に伴って、データ管理装置がデータ管理表に対する情報の設定および更新を行うことによって、データ管理システムに新たなデータ管理装置が追加される際にも、データの名前解決等が可能となる。
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。例えば、図5において、経路表の設定完了が通知された後に新規データ管理装置のデータ管理表の設定が行われているが、図5において、経路表の設定完了が通知される前に新規データ管理装置のデータ管理表の設定が行われるようにしてもよい。
1・・・データ管理装置、2・・・ユーザ端末、3・・・データファイル蓄積装置、10・・・通信処理部、11・・・処理部、12・・・一時記憶部、13・・・経路表記憶部、14・・・データ管理表記憶部、110・・・Join処理部、111・・・Stabilization処理部、112・・・メッセージ処理部、400・・・通信ネットワーク