(57)【特許請求の範囲】
【請求項１】
所定の関数を適用して得られるキーと該キーに対応するデータのペアを複数のノードに分散して記憶するシステムを管理するコンピュータに、
複数のシステムに共通の識別子と、前記識別子に共通に割り当てられたキーと、前記識別子に割り当てられたノードの情報とを管理テーブルに記憶し、
いずれのシステムにも割り当てられていないノードの集合であるノードプールのノード数が前記システムの数以上のとき、前記システムの数と同数のノードを前記ノードプールから抽出し、抽出した前記ノードを前記共通の識別子と共にそれぞれのシステムに割り当て、識別子ごとに共通のキーを割り当てて前記管理テーブルを更新する
処理を実行させる、情報管理プログラム。
【請求項２】
前記抽出する処理では、
前記ノードプールに含まれるノード同士についてノード間の通信にかかる時間を監視し、前記時間の合計が最小となるノードの組み合わせを抽出する処理が実行される
請求項１に記載の情報管理プログラム。
【請求項３】
前記複数のシステムのうち第１のシステムに含まれる第１のノードが、指定された前記キーに対応する情報の要求を受け付けたとき、
前記第１のノードは、
前記ノードの割り当てに基づいて、指定された前記キーを保持するノードが割り当てられている前記識別子を特定し、前記第１のシステムに含まれるノードのうち、特定した前記識別子に割り当てられている第２のノードに問い合わせ、
前記第２のノードから応答がない場合、前記複数のシステムのうち前記第１のシステムとは異なる第２のシステムに含まれるノードの中から、特定した前記識別子に割り当てられている第３のノードに問い合わせる
請求項１又は２に記載の情報管理プログラム。
【請求項４】
前記情報管理プログラムは、
同じ前記識別子に割り当てられているノードのうち、問い合わせに対して応答があるノードの数が所定の閾値より小さいとき、該識別子に対する全てのノードの割り当てを解除し、割り当てが解除された前記ノードのうち応答がある前記ノードを前記ノードプールに含める
処理をさらに実行させる、請求項１〜３のいずれか１項に記載の情報管理プログラム。
【請求項５】
所定の関数を適用して得られるキーと該キーに対応するデータのペアを複数のノードに分散して記憶するシステムを管理するコンピュータが、
複数のシステムに共通の識別子と、前記識別子に共通に割り当てられたキーと、前記識別子に割り当てられたノードの情報とを管理テーブルに記憶し、
いずれのシステムにも割り当てられていないノードの集合であるノードプールのノード数が前記システムの数以上のとき、前記システムの数と同数のノードを前記ノードプールから抽出し、抽出した前記ノードを前記共通の識別子と共にそれぞれのシステムに割り当て、識別子ごとに共通のキーを割り当てて前記管理テーブルを更新する
情報管理方法。
【請求項６】
所定の関数を適用して得られるキーと該キーに対応するデータのペアを複数のノードに分散して記憶するシステムを管理する情報管理装置であって、
複数のシステムに共通の識別子と、前記識別子に共通に割り当てられたキーと、前記識別子に割り当てられたノードの情報とを記憶する管理テーブルが格納される記憶部と、
いずれのシステムにも割り当てられていないノードの集合であるノードプールのノード数が前記システムの数以上のとき、前記システムの数と同数のノードを前記ノードプールから抽出し、抽出した前記ノードを前記共通の識別子と共にそれぞれのシステムに割り当て、識別子ごとに共通のキーを割り当てて前記管理テーブルを更新する制御部と
を有する、情報管理装置。
【請求項７】
所定の関数を適用して得られるキーと該キーに対応するデータのペアを複数のノードに分散して記憶するシステムにおける情報管理方法であって、
前記複数のノードのうち前記システムを管理する管理ノードが、
複数のシステムに共通の識別子と、前記識別子に共通に割り当てられたキーと、前記識別子に割り当てられたノードの情報とを管理テーブルに記憶し、
いずれのシステムにも割り当てられていないノードの集合であるノードプールのノード数が前記システムの数以上のとき、前記システムの数と同数のノードを前記ノードプールから抽出し、抽出した前記ノードを前記共通の識別子と共にそれぞれのシステムに割り当て、識別子ごとに共通のキーを割り当てて前記管理テーブルを更新する、情報管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報管理プログラム、情報管理方法、及び情報管理装置に関する。
【背景技術】
【０００２】
世の中に存在する様々なデバイスに通信機能を持たせ、そのデバイスによる遠隔計測や、そのデバイスから収集される情報の活用などを実現するＩｏＴ（Internet of Things）技術が広く普及しつつある。こうしたＩｏＴ技術を活用する上で、各種デバイスによって収集される大量の情報をより効率良く管理し、所望の情報をより素早く検索できるようにする技術の開発が望まれている。
【０００３】
大量の情報を効率良く管理する方法としては、例えば、検索時に用いるキーを紐付けた情報（値）を複数の場所（ノード）に分散して格納する自律分散ＫＶＳ（Key-Value Store）と呼ばれる技術がある。自律分散ＫＶＳのシステムでは、キーと値のペアが格納されるノードを一意に決定できるようにしてキーによる値の検索を可能にするために、ＤＨＴ（Distributed Hash Table）やＳｋｉｐ  Ｇｒａｐｈなどのアルゴリズムが利用される。
【０００４】
例えば、ＤＨＴの１つであるＣｈｏｒｄでは、予め設定された複数のＩＤ（IDentification）に所定の規則に基づいてノードが割り当てられ、各ＩＤに対するノードの割り当てに応じてノードへのキーの割り当てが決定される。つまり、自律分散ＫＶＳのシステムへのノードの参加や離脱に対し、ノードの割り当てやキーの割り当てが自律的に決定される。そのため、自律分散ＫＶＳのシステムでは、ノードの追加や削減が容易であり、高いスケーラビリティを実現することが可能である。
【０００５】
なお、ｍ桁の連続数値に管理キーの値を対応付けて管理するシステムにおいて、連続数値の範囲を複数の範囲に分割し、管理キーとデータのペアを分割数と同じ数だけ複製して複数のノードに記憶させ、データの冗長化を実現する方法が提案されている。また、キーと、そのキーに対応するデータの元データとを含む登録情報をＤＨＴのノードに記憶させる際に、データのハッシュ値から登録情報の順序を決め、その順序に基づいて同一ノードに記憶させる登録情報を決定する方法が提案されている。また、単一のマスターノードがデータに固有の識別子をスレーブノードに振り分ける方法が提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１３／０２７７８４号
【特許文献２】特開２０１１−１９８１９９号公報
【特許文献３】特開２００９−２０７５７号公報
【特許文献４】特開２０１２−１７８０２５号公報
【非特許文献】
【０００７】
【非特許文献１】David Karger, Eric Lehman, Tom Leighton, Matthew Levine, Daniel Lewin, Rina Panigrahy, "Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web", http://dl.acm.org.citation.cfm?id=383071
【発明の概要】
【発明が解決しようとする課題】
【０００８】
自律分散ＫＶＳのシステムでは、ノードが離脱すると、そのノードに格納されているキーと値のペア（ＫＶペア）が失われる。そのため、自律分散ＫＶＳのシステムでは、上記の提案技術のようにＫＶペアを複製して複数のノードに格納し、そのＫＶペアの消失を防止する対策がとられる。しかし、ノードの参加及び離脱が頻繁に生じると、ＫＶペアを他のノードへ複製する処理が頻繁に発生し、その際に生じるノード間の通信負荷が大きくなる。
【０００９】
また、ノードの参加及び離脱が生じると、ノードの検索に用いる情報の更新処理が発生する。そのため、頻繁なノードの参加及び離脱はノードの処理負荷も増大させる。従って、システムへの参加及び離脱が頻繁に生じうる移動端末などをノードとする場合、ノード間の通信負荷やノードの処理負荷が増大してシステム性能が低下するリスクが生じうる。
【００１０】
１つの側面によれば、本開示の目的は、頻繁な参加及び離脱が生じうるノードによるシステム性能の低下リスクを抑制することが可能な、情報管理プログラム、情報管理方法、及び情報管理装置を提供することにある。
【課題を解決するための手段】
【００１１】
１つの側面によれば、所定の関数を適用して得られるキーと該キーに対応するデータのペアを複数のノードに分散して記憶するシステムを管理するコンピュータが、複数のシステムに共通の識別子と、識別子に共通に割り当てられたキーと、識別子に割り当てられたノードの情報とを管理テーブルに記憶し、いずれのシステムにも割り当てられていないノードの集合であるノードプールのノード数がシステムの数以上のとき、システムの数と同数のノードをノードプールから抽出し、抽出したノードを共通の識別子と共にそれぞれのシステムに割り当て、識別子ごとに共通のキーを割り当てて管理テーブルを更新する情報管理方法が提供される。
【発明の効果】
【００１２】
頻繁な参加及び離脱が生じうるノードによるシステム性能の低下リスクを抑制することができる。
【図面の簡単な説明】
【００１３】
【図１】第１実施形態に係る情報管理装置の一例を示した図である。
【図２】自律分散ＫＶＳシステムの一例（Ｃｈｏｒｄ）について説明するための第１の図である。
【図３】自律分散ＫＶＳシステムの一例（Ｃｈｏｒｄ）について説明するための第２の図である。
【図４】自律分散ＫＶＳシステムの一例（Ｃｈｏｒｄ）について説明するための第３の図である。
【図５】第２実施形態に係る多重化分散ＫＶＳシステムの一例を示した図である。
【図６】第２実施形態に係る多重化分散ＫＶＳシステムにおけるノードの管理について説明するための図である。
【図７】第２実施形態に係るノードが保持するルーティングテーブルの一例を示した図である。
【図８】第２実施形態に係るノードの機能を実現可能なハードウェアの一例を示した図である。
【図９】第２実施形態に係る初期ノードが有する機能の一例を示したブロック図である。
【図１０】第２実施形態に係る操作履歴の一例を示した図である。
【図１１】第２実施形態に係るルーティングテーブルの一例を示した図である。
【図１２】第２実施形態に係る初期ノードリストの一例を示した図である。
【図１３】第２実施形態に係る同ＩＤノードリストの一例を示した図である。
【図１４】第２実施形態に係るノードプール情報の一例を示した図である。
【図１５】第２実施形態に係るＲＴＴデータの一例を示した図である。
【図１６】第２実施形態に係る通常ノードが有する機能の一例を示したブロック図である。
【図１７】第２実施形態に係るノードの割り当て方法について説明するための図である。
【図１８】第２実施形態に係るノードの参加時に実行される処理の流れについて説明するためのフロー図である。
【図１９】第２実施形態に係るＫＶＳ操作の受け付け時に実行される処理の流れについて説明するためのフロー図である。
【図２０】第２実施形態に係る同期及び死活監視の処理について説明するための図である。
【図２１】第２実施形態に係る同期及び死活監視の処理の流れについて説明するための第１のシーケンス図である。
【図２２】第２実施形態に係る同期及び死活監視の処理の流れについて説明するための第２のシーケンス図である。
【図２３】第２実施形態に係る再参加及び同期の処理について説明するための図である。
【図２４】第２実施形態に係る再参加及び同期の処理の流れについて説明するためのシーケンス図である。
【図２５】第２実施形態に係るＲＴＴ測定時の処理の流れについて説明するためのフロー図である。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照しながら、本発明の実施形態について説明する。なお、本明細書及び図面において実質的に同一の機能を有する要素については、同一の符号を付することにより重複説明を省略する場合がある。
【００１５】
＜１．第１実施形態＞
図１を参照しながら、第１実施形態について説明する。第１実施形態は、ＤＨＴなどを利用して自律分散ＫＶＳを実現するシステムにおいてノードの離脱による情報の消失を防止する技術に関する。また、第１実施形態は、頻繁にシステムへの参加・離脱を繰り返す可能性のあるノードが存在する場合でも、ノードの離脱時に生じるノード間の通信負荷やノードの処理負荷を低減する仕組みに関する。
【００１６】
なお、図１は、第１実施形態に係る情報管理装置の一例を示した図である。図１に示した情報管理装置１０は、第１実施形態に係る情報管理装置の一例である。また、情報管理装置１０は、ノードの参加や離脱を管理する役割が割り当てられているノード（初期ノード）の１つである。図１の例において、情報管理装置１０は、ノードＮ０１に対応する。
【００１７】
図１に示すように、情報管理装置１０は、記憶部１１及び制御部１２を有する。
なお、記憶部１１は、ＲＡＭ（Random Access Memory）などの揮発性記憶装置、或いは、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性記憶装置である。制御部１２は、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサである。但し、制御部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの電子回路であってもよい。制御部１２は、例えば、記憶部１１又は他のメモリに記憶されたプログラムを実行する。
【００１８】
情報管理装置１０は、ノードを管理する。ノードは、自身に割り当てられたキーに対応する情報（管理テーブル１１ａ）を保持する。ノードは、例えば、携帯電話やスマートフォンなどの移動端末、カーナビゲーションシステムなどの車載端末、或いは、パーソナルコンピュータやサーバ装置などの情報処理装置である。また、ノードは、ＬＡＮ（Local Area Network）やインターネットなどのネットワークを利用して他のノードと通信する機能を有する。
【００１９】
制御部１２は、複数の識別番号（ＩＤ）が設定されているＩＤ空間の識別番号にノードを割り当て、ＩＤ空間へのノードの割り当てに基づいて個々のノードにキーを割り当てることで、識別番号を介して特定のキーを保持するノードを特定可能にする。なお、複数の識別番号にはそれぞれ１つのノードが割り当てられうる。また、１つのＩＤ空間に割り当てられているノードの集合は１つのシステムを形成する。
【００２０】
図１には、３つのＩＤ空間２１、２２、２３が例示されている。ＩＤ空間２１は、例えば、８つの黒点を有する１つのリングで表現される。黒点の近傍に記載されている数字は、その黒点の位置に対応する識別番号である。黒点を囲む円は、その黒点に対応する識別番号に割り当てられているノードを表す。図１の例では、ＩＤ空間２１の識別番号「０」にノードＮ０１が割り当てられている。
【００２１】
制御部１２は、識別番号の設定が共通するＩＤ空間２１、２２、２３を利用してノードを管理する。つまり、制御部１２は、ＩＤ空間２１、２２、２３に対応する複数のシステムを管理する。図１に示すように、ＩＤ空間２２、２３は８つの黒点を有する１つのリングで表現され、その黒点の位置にＩＤ空間２１と同じ識別番号が設定される。
【００２２】
なお、図１には３つのＩＤ空間を利用する例を示しているが、利用するＩＤ空間の数は２又は４以上であってもよい。また、図１の例では、説明の都合上、個々のＩＤ空間について、ＤＨＴの１つであるＣｈｏｒｄのＩＤ空間と同じ表現を用いているが、採用するアルゴリズムの種類に応じて表現を変形することが可能である。つまり、ＩＤ空間の多重化を実現する第１実施形態の技術を適用可能な範囲でＩＤ空間の表現を変形してもよい。
【００２３】
記憶部１１は、ＩＤ空間２１、２２、２３に対応する複数のシステムについて、識別番号への割り当ての対象となるノードを収容するノードプール３０の情報を記憶する。
制御部１２は、ノードからシステムへの参加要求を受け付けたとき、そのノードを一旦ノードプール３０に収容する。また、制御部１２は、ノードプール３０に収容されているノードの数がシステムの数以上のとき、システムの数と同数のノードをノードプール３０から選択する。そして、制御部１２は、選択したノードをそれぞれ複数のシステムの同じ識別番号に割り当てる。
【００２４】
つまり、制御部１２は、参加要求を出しているノードを待機させ、待機しているノードの数がＩＤ空間の数より多い場合に、各ＩＤ空間の同じ識別番号にノードを１つずつ割り当てる。図１の例ではＩＤ空間の数が３であるため、制御部１２は、ノードプール３０に収容されているノードの数が３以上になってから、３つのノードをＩＤ空間２１、２２、２３のそれぞれに対して割り当てる。例えば、制御部１２は、ＩＤ空間２１、２２、２３の識別番号「６」に３つのノードをそれぞれ割り当てる。
【００２５】
参加要求を出しているノードがＩＤ空間の数以上集まってから、各ＩＤ空間の同じ識別番号にノードを割り当てることで、ノードの割り当てが同じシステムが実現される。各システムにおけるキーの割り当てはノードの割り当てで決まるため、ノードの割り当てが同じシステム間では同じ識別番号のノードに同じキーが割り当てられる。
【００２６】
例えば、Ｃｈｏｒｄのアルゴリズムを採用する場合、ＩＤ空間２１、２２、２３の識別番号「０」に割り当てられているノードＮ０１、Ｎ０２、Ｎ０３には、キーＫ１、Ｋ７（Ｋ１、Ｋ７のキーＩＤはそれぞれ「１」、「７」）が割り当てられる。識別番号「６」にノードが割り当てられると、割り当てられたノードにキーＫ１が割り当てられ、識別番号「０」のノードＮ０１、Ｎ０２、Ｎ０３にはキーＫ７が割り当てられる。
【００２７】
上記のように、情報管理装置１０は、所定の関数を適用して得られるキーと該キーに対応するデータのペアを複数のノードに分散して記憶するシステムを管理する。記憶部１１には、複数のシステムに共通の識別子と、識別子に共通に割り当てられたキーと、識別子に割り当てられたノードの情報とを記憶する管理テーブル１１ａが格納される。
【００２８】
制御部１２は、いずれのシステムにも割り当てられていないノードの集合であるノードプール３０のノード数がシステムの数以上のとき、システムの数と同数のノードをノードプール３０から抽出し、抽出したノードを共通の識別子と共にそれぞれのシステムに割り当て、識別子ごとに共通のキーを割り当てて管理テーブル１１ａを更新する。
【００２９】
上述した第１実施形態の技術を適用すれば、同じノードの割り当てを有する複数のシステムが構築でき、同じ識別番号に割り当てられているノードには同じキーが割り当てられる。また、各システムのＩＤ空間に設定されている識別番号の系列が同じであるため、指定されたキーに対応する情報の操作が識別番号を介して各システムのノードに反映されるため、キー、情報、ノードの関係がシステム間で容易に同期されうる。
【００３０】
その結果、複製されたシステムが存在するのと同じ状態になり、一部のシステムにあるノードが離脱しても、他のシステムにあるノードが情報を保持しているため、ノードの離脱による情報の消失を防止することができる。また、第１実施形態の技術を適用すれば、同じＩＤ空間に割り当てられている複数のノードに対し、バックアップ用に同じ情報を保持させなくても情報の消失を防止できる。
【００３１】
そのため、ノードの参加や離脱の際にバックアップ用の情報をノード間でやり取りする負担を回避することができ、頻繁に参加と離脱を繰り返すノードが存在しても、参加と離脱時に生じる通信負荷や処理負荷の増大が抑制される。
【００３２】
以上、第１実施形態について説明した。
＜２．第２実施形態＞
次に、第２実施形態について説明する。第２実施形態は、ＤＨＴなどを利用して自律分散ＫＶＳを実現するシステム（自律分散ＫＶＳシステム）においてノードの離脱による情報の消失を防止する技術に関する。また、第２実施形態は、頻繁にシステムへの参加・離脱を繰り返す可能性のあるノードが存在する場合でも、ノードの離脱時に生じるノード間の通信負荷やノードの処理負荷を低減する仕組みに関する。
【００３３】
［２−１．自律分散ＫＶＳシステムの例］
自律分散ＫＶＳシステムでは、指定されたキーに対する値を保持しているノードを特定できるようにするＤＨＴなどの技術が利用される。ここでは、ＤＨＴの１つであるＣｈｏｒｄについて説明すると共に、自律分散ＫＶＳシステムで利用できる他の技術について述べる。なお、説明の都合上、Ｃｈｏｒｄのアルゴリズムを主な例として挙げるが、第２実施形態の技術を適用可能な範囲はこれに限定されない。
【００３４】
（Ｃｈｏｒｄ）
図２〜図４を参照しながら、自律分散ＫＶＳシステムの実現に利用可能なＣｈｏｒｄのアルゴリズム（以下、単にＣｈｏｒｄと称する。）について説明する。
【００３５】
なお、図２は、自律分散ＫＶＳシステムの一例（Ｃｈｏｒｄ）について説明するための第１の図である。図３は、自律分散ＫＶＳシステムの一例（Ｃｈｏｒｄ）について説明するための第２の図である。図４は、自律分散ＫＶＳシステムの一例（Ｃｈｏｒｄ）について説明するための第３の図である。
【００３６】
Ｃｈｏｒｄでは、リング状のＩＤ空間にＩＤを割り振り、設定された規則に基づいてＩＤに対するノードの割り当て及びノードに対するキーの割り当てを決めることで、特定のキーが割り当てられたノードを一意に決める仕組みを実現している。
【００３７】
図２の例は、ｍビット（ｍ＝３）のＩＤが割り振られたＩＤ空間に３つのノード（Ｎｏｄｅ＃０、Ｎｏｄｅ＃１、Ｎｏｄｅ＃３）を割り当てる方法を示している。また、図２の例は、３つのキー（Ｋｅｙ＃１、Ｋｅｙ＃２、Ｋｅｙ＃６）をノードに割り当てる方法を示している。
【００３８】
Ｎｏｄｅ＃ｉ（ｉ＝０，１，３）は「ＩＤ＝ｉ」の位置（以下、ＩＤ＃ｉと表記する。）に割り当てられる。なお、Ｎｏｄｅ＃ｉが割り当てられているＩＤをＮｏｄｅＩＤと表記する場合がある。また、Ｋｅｙ＃ｊの識別子は「ｊ」であり、この識別子をＫｅｙＩＤと表記する場合がある。
【００３９】
ＩＤ空間のノードにＫｅｙ＃ｊを割り当てるとき、Ｃｈｏｒｄでは、ＩＤ＃ｊ（ＫｅｙＩＤと同じ値のＩＤ）にノードが割り当てられている場合には、そのノードにＫｅｙ＃ｊが割り当てられる。一方、ＩＤ＃ｊにノードが割り当てられていない場合、リング上で、ＩＤ＃ｊより先にあるＩＤのうち、ノードが割り当てられている直近のＩＤ（Ｎｅｘｔ  ＮｏｄｅＩＤ）が特定され、Ｎｅｘｔ  ＮｏｄｅＩＤに割り当てられているノードにＫｅｙ＃ｊが割り当てられる。
【００４０】
図２の例では、ＩＤ＃１にＮｏｄｅ＃１が割り当てられているため、Ｋｅｙ＃１は、Ｎｏｄｅ＃１に割り当てられる。また、ＩＤ＃２にノードが割り当てられていないため、次にノードが割り当てられているＩＤ＃３にあるＮｏｄｅ＃３にＫｅｙ＃２が割り当てられる。同様に、ＩＤ＃６にノードが割り当てられていないため、次にノードが割り当てられているＩＤ＃０にあるＮｏｄｅ＃０にＫｅｙ＃６が割り当てられる。
【００４１】
Ｎｏｄｅ＃０、Ｎｏｄｅ＃１、Ｎｏｄｅ＃３は、Ｋｅｙ＃１、Ｋｅｙ＃２、Ｋｅｙ＃６の探索に利用するルーティングテーブルを保持している。ルーティングテーブルは、探索するキーのＫｅｙＩＤを含む範囲（Ｉｎｔｅｒｖａｌ）、及びそのキーを保持しているノード（Ｓｕｃｃｅｓｓｏｒ）に関する情報を有する。
【００４２】
例えば、図２（Ａ）は、Ｎｏｄｅ＃０が保持するルーティングテーブルである。Ｃｈｏｒｄの場合、ルーティングテーブルには、ｍ個のＩｎｔｅｒｖａｌと、各Ｉｎｔｅｒｖａｌに対応するＳｕｃｃｅｓｓｏｒのＩＤとが格納される。Ｉｎｔｅｒｖａｌは、ＮｏｄｅＩＤ（ｎ）及びルーティングテーブルの行番号（ｋ）に基づいて算出される。Ｉｎｔｅｒｖａｌの始点（Ｓｔａｒｔ（ｎ，ｋ））は、下記の式（１）により与えられる。
【００４３】
Ｓｔａｒｔ（ｎ，ｋ）＝（ｎ＋２k-1）  ｍｏｄ  ２m
…（１）
そして、Ｉｎｔｅｒｖａｌは、Ｓｔａｒｔ（ｎ，ｋ）以上、Ｓｔａｒｔ（ｎ＋１，ｋ）未満の範囲に設定される。例えば、ｎ＝０、ｋ＝１の場合、Ｓｔａｒｔ（０，１）は１となり、Ｓｔａｒｔ（１，１）は２となる。そのため、Ｎｏｄｅ＃０が保持するルーティングテーブルの１行目に記述されるＩｎｔｅｒｖａｌは１以上２未満となる。
【００４４】
Ｓｕｃｃｅｓｓｏｒ（図中ではＳｕｃ．と略記）は、Ｓｔａｒｔと同じ値のＩＤにノードが割り当てられている場合、Ｓｔａｒｔの値がＳｕｃｃｅｓｓｏｒの値となる。一方、Ｓｔａｒｔと同じ値のＩＤにノードが割り当てられていない場合、リング上でＳｔａｒｔの値と同じＩＤより先にあるＩＤのうち、ノードが割り当てられているＩＤ（Ｎｅｘｔ  ＮｏｄｅＩＤ）がＳｕｃｃｅｓｓｏｒの値となる。例えば、ｎ＝０、ｋ＝１の場合、Ｓｕｃｃｅｓｓｏｒは１となる。
【００４５】
同様に、ｋ＝２，３の場合についてＩｎｔｅｒｖａｌ及びＳｕｃｃｅｓｓｏｒを求めると、図２（Ａ）に示すようなルーティングテーブルが得られる。また、Ｎｏｄｅ＃１が保持するルーティングテーブルは、図２（Ｂ）のようになる。そして、Ｎｏｄｅ＃３が保持するルーティングテーブルは、図２（Ｃ）のようになる。
【００４６】
例えば、Ｎｏｄｅ＃０に対し、Ｋｅｙ＃２に紐付けられる値への操作が要求された場合、Ｎｏｄｅ＃０は、ルーティングテーブルを参照し、ＫｅｙＩＤである「２」を含むＩｎｔｅｒｖａｌ（［２，４））を特定する。そして、Ｎｏｄｅ＃０は、特定したＩｎｔｅｒｖａｌに対応するＳｕｃｃｅｓｓｏｒ（ＩＤ＃３にあるＮｏｄｅ＃３）がＫｅｙ＃２を保持していることを認識し、受け付けた操作をＮｏｄｅ＃３に要求する。
【００４７】
上記のように、Ｃｈｏｒｄは、ＩＤに対するノードの割り当てに基づいてキーの割り当てが決まるようにし、各ノードが特定のキーを保持するノードを探索できる仕組みを有する。そして、各ノードは、ノードの割り当てに基づいて予め計算されるＩｎｔｅｒｖａｌ及びＳｕｃｃｅｓｓｏｒを含むルーティングテーブルを保持し、このルーティングテーブルを利用して特定のキーを保持するノードを探索し、キーに紐付けられる値の操作を実施する。
【００４８】
また、新たなノードがＩＤ空間に追加される場合（ノードの参加）、少なくとも一部のノードが保持するルーティングテーブルが更新される。また、ノードの割り当てが変更されるため、キーの割り当ても更新されうる。
【００４９】
例えば、図３に示すように、Ｎｏｄｅ＃６が新たに参加した場合、Ｋｅｙ＃６はＮｏｄｅ＃６に割り当てられる。また、Ｎｏｄｅ＃０が保持するルーティングテーブルのうち、３行目のＳｕｃｃｅｓｓｏｒが「６」に変更される（図３（Ａ）を参照）。また、Ｎｏｄｅ＃１が保持するルーティングテーブルのうち、３行目のＳｕｃｃｅｓｓｏｒが「６」に変更される（図３（Ｂ）を参照）。また、Ｎｏｄｅ＃３が保持するルーティングテーブルのうち、１、２行目のＳｕｃｃｅｓｓｏｒが「６」に変更される（図３（Ｃ）を参照）。
【００５０】
Ｎｏｄｅ＃６が保持するルーティングテーブル（図３（Ｄ）を参照）の計算方法、及びＮｏｄｅ＃０、Ｎｏｄｅ＃１、Ｎｏｄｅ＃３が保持するルーティングテーブルの計算方法は、図２に示したルーティングテーブルの計算と同じである。このように、ノードの参加に応じて、キーの再割り当てやルーティングテーブルの更新が行われる。また、ＩＤ空間からノードが削除される場合（ノードの離脱）、図４（Ｎｏｄｅ＃１が離脱する例）に示すように、キーの再割り当てやルーティングテーブルの更新が行われる。
【００５１】
（その他の技術）
特定のキーを保持するノードを効率的に探索できるようにする仕組みとしては、上述したＣｈｏｒｄの他、ＣＡＮ（Content Addressable Network）、Ｐａｓｔｒｙ、ＫａｄｅｍｌｉａなどのＤＨＴがある。ＣＡＮは、キーを写像する論理空間（ＣｈｏｒｄのＩＤ空間に対応）としてＮ次元トーラスを採用する方式である。Ｐａｓｔｒｙは、論理空間としてＰａｓｔｒｙアルゴリズムを採用する方式である。Ｋａｄｅｍｌｉａは、論理空間として２分木を採用する方式である。また、各種ＤＨＴの他、自律分散ＫＶＳシステムの実現にＳｋｉｐ  Ｇｒａｐｈを利用することもできる。
【００５２】
第２実施形態に係る技術は、上述した様々な仕組みを採用する自律分散ＫＶＳシステムに広く適用可能である。
［２−２．多重化分散ＫＶＳシステム］
次に、図５〜図７を参照しながら、第２実施形態に係る多重化分散ＫＶＳシステムについて説明する。
【００５３】
図５は、第２実施形態に係る多重化分散ＫＶＳシステムの一例を示した図である。図６は、第２実施形態に係る多重化分散ＫＶＳシステムにおけるノードの管理について説明するための図である。図７は、第２実施形態に係るノードが保持するルーティングテーブルの一例を示した図である。
【００５４】
図５に示すように、第２実施形態に係る多重化分散ＫＶＳシステムは、例えば、制御装置１００、ＧＷ（Gateway）装置２００−１、２００−２、…、２００−Ｎ、及び端末装置３０１、３０２、３０３を有する。
【００５５】
制御装置１００は、例えば、パーソナルコンピュータやサーバ装置などのコンピュータである。ＧＷ装置２００−１、２００−２、…、２００−Ｎ、端末装置３０１、３０２、３０３は、例えば、パーソナルコンピュータ、携帯電話、スマートフォン、カーナビゲーションシステム、タブレット端末などの移動端末である。制御装置１００とＧＷ装置２００−１、２００−２、…、２００−Ｎとはネットワーク３００を介して通信することができる。ＧＷ装置２００−１は、ＢＴ（Bluetooth：登録商標）などの近距離通信を利用して端末装置３０１、３０２、３０３と通信することができる。
【００５６】
制御装置１００、ＧＷ装置２００−１、２００−２、…、２００−Ｎ、及び端末装置３０１、３０２、３０３は、それぞれＵＲＩ（Uniform Resource Identifier）やＩＰアドレスなどの特定情報に基づいて識別されうる。また、ＧＷ装置２００−１、２００−２、…、２００−Ｎ、及び端末装置３０１、３０２、３０３の少なくとも一部は、ＧＰＳ（Global Positioning System）、温度センサ、加速度センサなどの機能を有し、その機能を利用して取得した情報（センサ情報）を保持することができる。
【００５７】
例えば、端末装置３０１、３０２、３０３は、自身が保持するセンサ情報の種類や特徴と、自身の特定情報とを短距離通信でＧＷ装置２００−１に送信する。ＧＷ装置２００−１は、端末装置３０１、３０２、３０３の特定情報をそれぞれキーに紐付けて保持する。また、ＧＷ装置２００−２、…、２００−Ｎは、それぞれがセンサ情報を取得して保持し、自身の特定情報をキーに紐付けて保持する。この場合、ＧＷ装置２００−１、２００−２、…、２００−Ｎがそれぞれ自律分散ＫＶＳシステムのノードとなり、センサ情報の格納先を示す特定情報が、キーに紐付けられる値となる。
【００５８】
制御装置１００は、自律分散ＫＶＳシステムへの参加・離脱を管理するノード（初期ノード）を設定し、初期ノードに関する情報を他のノードに通知する機能を有する。例えば、制御装置１００は、Ｗｅｂサーバの機能を有し、その機能を利用して初期ノードに関する情報を他のノードに通知する。なお、図５の例は第２実施形態の技術を適用可能なシステムの一例を示したものであり、その適用範囲はこれに限定されない。但し、以下では、説明の都合上、ＧＷ装置２００−１、２００−２、…、２００−Ｎをノードと称する。
【００５９】
（ノードの種類・割り当て／キーの割り当て／ルーティングテーブル）
ノードには、初期ノードと通常ノードとがある。初期ノードは、ノードの参加や離脱を管理する機能（管理機能）を有するノードである。通常ノードは、初期ノードの管理機能が省略されたノードである。初期ノードは、制御装置１００により予め設定される。また、初期ノードが割り当てられているＩＤの情報は、制御装置１００により各ノードに通知される。また、初期ノード以外のノードは通常ノードとなる。
【００６０】
図６の例は、第２実施形態に係る多重化分散ＫＶＳシステムにおけるノードの割り当てを示している。図６に示すように、この多重化分散ＫＶＳシステムは、複数のＩＤ空間４０１、４０２、４０３を利用する。ＩＤ空間４０１、４０２、４０３は同じｍビットのＩＤ系列（ｍ＝３；ＩＤ＝０，１，…，７）を有する。
【００６１】
また、ＩＤ空間４０１、４０２、４０３の間ではノードの割り当てが共通となるように制御される。例えば、ＩＤ空間４０１のＩＤ＃０には初期ノード２１０が割り当てられている。この場合、ＩＤ空間４０２、４０３のＩＤ＃０にもノード（図６の例では通常ノード２２０、２３０）が割り当てられる。そして、ＩＤ空間４０１、４０２、４０３には同じＩＤ系列が設定され、ノードの割り当ても同じであるため、同じＩＤに割り当てられているノードには同じキー及び値が格納される。
【００６２】
図６の例では、ＩＤ空間４０１において、ＩＤ＃０に初期ノード２１０が割り当てられ、ＩＤ＃２に初期ノード２１２が割り当てられ、ＩＤ＃４に通常ノード２１４が割り当てられている。ＩＤ空間４０２では、ＩＤ＃０に通常ノード２２０が割り当てられ、ＩＤ＃２に通常ノード２２２が割り当てられ、ＩＤ＃４に通常ノード２２４が割り当てられている。ＩＤ空間４０３では、ＩＤ＃０に通常ノード２３０が割り当てられ、ＩＤ＃２に通常ノード２３２が割り当てられ、ＩＤ＃４に通常ノード２３４が割り当てられている。
【００６３】
例えば、ノードに割り当てられるキーとしてＫｅｙ＃０、Ｋｅｙ＃１、…、Ｋｅｙ＃７が用意されている場合、ＩＤ＃０に割り当てられているノードには、Ｋｅｙ＃５、Ｋｅｙ＃６、Ｋｅｙ＃７、Ｋｅｙ＃０が割り当てられる。ＩＤ＃２に割り当てられているノードには、Ｋｅｙ＃１、Ｋｅｙ＃２が割り当てられる。ＩＤ＃４に割り当てられているノードには、Ｋｅｙ＃３、Ｋｅｙ＃４が割り当てられる。そして、これらのキーに値が紐付けられ、そのキーを利用して値に対する操作が行われる。なお、ここではキーの割り当て方法の一例としてＣｈｏｒｄの規則（図２（Ｄ）を参照）を採用している。
【００６４】
このように、第２実施形態に係る多重化分散ＫＶＳシステムは、同じＩＤ系列を有するＩＤ空間を複数管理し、ＩＤに対するノードの割り当てを多重化することで、ノードごとキーと値のペアを冗長化する仕組みを採用している。この仕組みを実現するため、図６に示すように、初期ノード２１０、２１２は、それぞれノードプール４１０、４１２を管理する。ノードプール４１０、４１２は、システムへの参加を要求しているノードを一時的に収容し、ＩＤへの割り当てを待機させるためのプールである。
【００６５】
なお、ノードプール４１０、４１２は初期ノード２１０、２１２間の情報のやり取りにより同じ内容に維持される。図６の例では初期ノード２１０、２１２がそれぞれノードプール４１０、４１２を管理しているが、初期ノード２１０、２１２に共通のノードプールを１つ用意し、そのノードプールを初期ノード２１０、２１２のいずれか又は両方が管理する仕組みに変形できる。
【００６６】
例えば、初期ノード２１０が参加の要求を受け付けた場合、初期ノード２１０は、参加の要求を出したノードをノードプール４１０に一旦収容する。そして、初期ノード２１０は、ノードプール４１０に収容されているノードの数が、ＩＤ空間の数（図６の例では３）より大きいかを確認する。
【００６７】
収容されているノード数がＩＤ空間の数より大きい場合、初期ノード２１０は、ノードプール４１０からＩＤ空間の数と同数のノードを選択し、選択した各ノードに同じＩＤを割り振る。そして、初期ノード２１０は、ＩＤを割り振ったノードをＩＤ空間４０１、４０２、４０３の該当ＩＤに１つずつ割り当てる。この方法によれば、新規ノードの参加後もＩＤ空間４０１、４０２、４０３におけるノードの割り当てが同じ状態に維持される。
【００６８】
なお、第２実施形態に係る多重化分散ＫＶＳシステムの各ノードは、自身が属するＩＤ空間とは異なる他のＩＤ空間に属するノードにアクセスする機会がある。そのため、各ノードは、他のＩＤ空間に属するノードの情報を含むルーティングテーブルを保持する。例えば、ＩＤ＃０に割り当てられているノード（初期ノード２１０、通常ノード２２０、２３０）は、図７に示すようなルーティングテーブルを保持する。
【００６９】
図７に示すように、第２実施形態に係るルーティングテーブルは、ノードが割り当てられているＩＤ（ＮｏｄｅＩＤ：ｎ）、行番号ｋ、Ｓｔａｒｔ、Ｉｎｔｅｒｖａｌ、Ｓｕｃｃｅｓｓｏｒを有する。図２（Ａ）などに示したルーティングテーブルとの違いは、Ｓｕｃｃｅｓｓｏｒの欄に、他のＩＤ空間に属するノードの情報が含まれる点にある。
【００７０】
図７の例では、Ｓｕｃｃｅｓｓｏｒを特定するＩＤに加え、各ＩＤ空間のＳｕｃｃｅｓｓｏｒにアクセスするための情報（ＩＰ  Ａｄｄｒｅｓｓ）が記載されている。例えば、ｎ＝０、ｋ＝１に対応するＳｕｃｃｅｓｓｏｒのＩＤは２である。そして、ＩＤ＃２に割り当てられているＩＤ空間４０１、４０２、４０３のノードは、それぞれ初期ノード２１２、通常ノード２２２、２３２である。そのため、Ｓｕｃｃｅｓｓｏｒの欄には、初期ノード２１２、通常ノード２２２、２３２のＩＰ  Ａｄｄｒｅｓｓが記載される。
【００７１】
図７にはＩＤ＃０に割り当てられているノードが保持するルーティングテーブルの一例を示したが、他のＩＤに割り当てられているノードも、そのノードに対応するルーティングテーブルを保持している。そのため、あるＩＤ空間のノードが操作を受け付けたとき、そのノードは、自身が属するＩＤ空間から操作対象となる該当ノードを探索できるだけでなく、他のＩＤ空間から操作対象となる該当ノードを探索することが可能になる。
【００７２】
そして、上記のルーティングテーブルを利用することで、通信状態の良い該当ノードに操作を要求することができる。また、あるＩＤ空間の該当ノードが離脱した場合でも、他のＩＤ空間の該当ノードが処理を代替できるため、特別な処理を実行せずともシステムの運用を継続することができる。また、離脱したノードが再参加する際、離脱前のＩＤに割り当て、同じＩＤに割り当てられている他のノードと同期処理を実行することで、迅速に離脱前の状態へと復旧することが可能になる。
【００７３】
以上、多重化分散ＫＶＳシステムについて説明した。
［２−３．ハードウェア］
次に、図８を参照しながら、第２実施形態に係るノードの機能を実現可能なハードウェアについて説明する。図８は、第２実施形態に係るノードの機能を実現可能なハードウェアの一例を示した図である。
【００７４】
例えば、初期ノード２１０が有する機能は、図８に示すハードウェア資源を用いて実現することが可能である。つまり、初期ノード２１０が有する機能は、コンピュータプログラムを用いて図８に示すハードウェアを制御することにより実現される。
【００７５】
図８に示すように、このハードウェアは、主に、ＣＰＵ９０２と、ＲＯＭ（Read Only Memory）９０４と、ＲＡＭ９０６と、ホストバス９０８と、ブリッジ９１０とを有する。さらに、このハードウェアは、外部バス９１２と、インターフェース９１４と、入力部９１６と、出力部９１８と、記憶部９２０と、ドライブ９２２と、接続ポート９２４と、通信部９２６とを有する。
【００７６】
ＣＰＵ９０２は、例えば、演算処理装置又は制御装置として機能し、ＲＯＭ９０４、ＲＡＭ９０６、記憶部９２０、又はリムーバブル記録媒体９２８に記録された各種プログラムに基づいて各構成要素の動作全般又はその一部を制御する。ＲＯＭ９０４は、ＣＰＵ９０２に読み込まれるプログラムや演算に用いるデータなどを格納する記憶装置の一例である。ＲＡＭ９０６には、例えば、ＣＰＵ９０２に読み込まれるプログラムや、そのプログラムを実行する際に変化する各種パラメータなどが一時的又は永続的に格納される。
【００７７】
これらの要素は、例えば、高速なデータ伝送が可能なホストバス９０８を介して相互に接続される。一方、ホストバス９０８は、例えば、ブリッジ９１０を介して比較的データ伝送速度が低速な外部バス９１２に接続される。
【００７８】
入力部９１６としては、例えば、マウス、キーボード、タッチパネル、タッチパッド、ボタン、スイッチ、及びレバーなどが用いられる。また、入力部９１６としては、赤外線やその他の電波を利用して制御信号を送信することが可能なリモートコントローラが用いられることもある。また、入力部９１６は、ユーザが情報を入力するデバイスの他、ＧＰＳ、温度センサ、加速度センサなどのセンサ情報を収集し、収集した情報をＣＰＵ９０２などに入力するデバイスであってもよい。
【００７９】
出力部９１８としては、例えば、ＣＲＴ（Cathode Ray Tube）、ＬＣＤ（Liquid Crystal Display）、ＰＤＰ（Plasma Display Panel）、又はＥＬＤ（Electro-Luminescence Display）などのディスプレイ装置が用いられる。また、出力部９１８として、スピーカやヘッドホンなどのオーディオ出力装置、又はプリンタなどが用いられることもある。つまり、出力部９１８は、情報を視覚的又は聴覚的に出力することが可能な装置である。
【００８０】
記憶部９２０は、各種のデータを格納するための装置である。記憶部９２０としては、例えば、ＨＤＤなどの磁気記憶デバイスが用いられる。また、記憶部９２０として、ＳＳＤ（Solid State Drive）やＲＡＭディスクなどの半導体記憶デバイス、光記憶デバイス、又は光磁気記憶デバイスなどが用いられてもよい。
【００８１】
ドライブ９２２は、着脱可能な記録媒体であるリムーバブル記録媒体９２８に記録された情報を読み出し、又はリムーバブル記録媒体９２８に情報を書き込む装置である。リムーバブル記録媒体９２８としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリなどが用いられる。
【００８２】
接続ポート９２４は、例えば、ＵＳＢ（Universal Serial Bus）ポート、ＩＥＥＥ１３９４ポート、ＳＣＳＩ（Small Computer System Interface）、ＲＳ−２３２Ｃポート、又は光オーディオ端子など、外部接続機器９３０を接続するためのポートである。外部接続機器９３０としては、例えば、プリンタなどが用いられる。
【００８３】
通信部９２６は、ネットワーク９３２に接続するための通信デバイスである。通信部９２６としては、例えば、有線又は無線ＬＡＮ用の通信回路、ＷＵＳＢ（Wireless USB）用の通信回路、光通信用の通信回路やルータ、ＡＤＳＬ（Asymmetric Digital Subscriber Line）用の通信回路やルータ、携帯電話ネットワーク用の通信回路などが用いられる。通信部９２６に接続されるネットワーク９３２は、有線又は無線により接続されたネットワークであり、例えば、インターネット、ＬＡＮ、放送網、衛星通信回線などを含む。
【００８４】
なお、初期ノード２１０以外のノードが有する機能も図８に示したハードウェアを用いて実現可能である。つまり、ＧＷ装置２００−１、２００−２、…、２００−Ｎが有する機能は図８に示したハードウェアを用いて実現可能である。また、制御装置１００及び端末装置３０１、３０２、３０３が有する機能も図８に示したハードウェアを用いて実現可能である。また、図８に示したハードウェアのうち一部の要素を省略する変形や、さらに要素を追加する変形も許容される。
【００８５】
以上、ハードウェアについて説明した。
［２−４．機能］
次に、ノードの機能について説明する。
【００８６】
（初期ノード）
まず、図９を参照しながら、初期ノードの機能について説明する。図９は、第２実施形態に係る初期ノードが有する機能の一例を示したブロック図である。なお、ここでは説明の都合上、初期ノード２１０の機能を例に説明する。
【００８７】
図９に示すように、初期ノード２１０は、記憶部２４１、操作処理部２４２、探索処理部２４３、プール管理部２４４、参加処理部２４５、同期処理部２４６、死活監視部２４７、及び離脱処理部２４８を有する。
【００８８】
なお、記憶部２４１の機能は、上述したＲＡＭ９０６や記憶部９２０などを用いて実現できる。操作処理部２４２、探索処理部２４３、プール管理部２４４、参加処理部２４５、同期処理部２４６、死活監視部２４７、及び離脱処理部２４８の機能は、上述したＣＰＵ９０２などを用いて実現できる。
【００８９】
記憶部２４１には、ＫＶＳデータ２４１ａ、操作履歴２４１ｂ、ルーティングテーブル２４１ｃ、初期ノードリスト２４１ｄ、同ＩＤノードリスト２４１ｅ、ノードプール情報２４１ｆ、及びＲＴＴデータ２４１ｇが格納される。
【００９０】
ＫＶＳデータ２４１ａは、初期ノード２１０に割り当てられているキー（図６の例ではＫｅｙ＃５、Ｋｅｙ＃６、Ｋｅｙ＃７、Ｋｅｙ＃０）と、そのキーに紐付けられて保持される値（Ｖａｌｕｅ）とのペアである。
【００９１】
操作履歴２４１ｂは、図１０に示すように、初期ノード２１０又は初期ノード２１０と同じＩＤに割り当てられているノードが受け付けた操作の履歴である。図１０は、第２実施形態に係る操作履歴の一例を示した図である。
【００９２】
図１０に例示した操作履歴２４１ｂには、Ｋｅｙ＃５に値ｖａｌ０５を紐付けて格納する操作（ｐｕｔ  Ｋｅｙ＃５  ｖａｌ０５）、Ｋｅｙ＃６に値ｖａｌ０６を紐付けて格納する操作（ｐｕｔ  Ｋｅｙ＃６  ｖａｌ０６）が含まれている。また、この操作履歴２４１ｂには、Ｋｅｙ＃５の値ｖａｌ０５を削除する操作（ｄｅｌ  Ｋｅｙ＃５  ｖａｌ０５）、Ｋｅｙ＃７に値ｖａｌ０７を紐付けて格納する操作（ｐｕｔ  Ｋｅｙ＃７  ｖａｌ０７）も含まれている。
【００９３】
操作履歴２４１ｂには、操作を受け付けたノードの所属するＩＤ空間の情報が併せて記載される。例えば、Ｋｅｙ＃５に値ｖａｌ０５を紐付けて格納する操作を初期ノード２１０が受け付けた場合、操作履歴２４１ｂには、初期ノード２１０が所属するＩＤ空間４０１の情報が記載される。同様に、初期ノード２１０と同じＩＤを有するノードが受け付け、実行した操作の履歴が、その操作を受け付けたノードの所属するＩＤ空間の情報に対応付けて操作履歴２４１ｂとして記憶部２４１に蓄積される。
【００９４】
ルーティングテーブル２４１ｃは、キーを保持するノードを探索する際に利用される情報である。例えば、初期ノード２１０が利用するルーティングテーブル２４１ｃは、図１１のようになる。図１１は、第２実施形態に係るルーティングテーブルの一例を示した図である。
【００９５】
図１１に示すように、ルーティングテーブル２４１ｃには、例えば、行番号ｋ、Ｓｔａｒｔ、Ｉｎｔｅｒｖａｌ、Ｓｕｃｃｅｓｓｏｒが含まれる。また、Ｓｕｃｃｅｓｓｏｒの欄には、初期ノード２１０と同じＩＤ空間４０１に属するＳｕｃｃｅｓｓｏｒの情報（ＩＰ  Ａｄｄｒｅｓｓなど）の他、同じＩＤを有するＩＤ空間４０２、４０３のノードの情報（ＩＰ  Ａｄｄｒｅｓｓなど）が記載される。
【００９６】
初期ノードリスト２４１ｄは、図１２に示すように、制御装置１００により設定された全ての初期ノードの情報（ＩＰ  Ａｄｄｒｅｓｓなど）を列挙した情報である。図１２は、第２実施形態に係る初期ノードリストの一例を示した図である。図６の例では、初期ノード２１０、２１２が設定されているため、図１２に例示した初期ノードリスト２４１ｄには、初期ノード２１０、２１２の情報が記載されている。
【００９７】
同ＩＤノードリスト２４１ｅは、図１３に示すように、初期ノード２１０と同じＩＤに割り当てられているノードの情報（ＩＰ  Ａｄｄｒｅｓｓなど）を列挙した情報である。図１３は、第２実施形態に係る同ＩＤノードリストの一例を示した図である。図６の例では、初期ノード２１０と同じＩＤ＃０に通常ノード２２０、２３０が割り当てられているため、図１３に例示した同ＩＤノードリスト２４１ｅには、通常ノード２２０、２３０の情報が記載されている。
【００９８】
ノードプール情報２４１ｆは、図１４に示すように、ノードプール４１０に収容されているノードの情報（ＩＰ  Ａｄｄｒｅｓｓなど）を含む。図１４は、第２実施形態に係るノードプール情報の一例を示した図である。例えば、ノードプール４１０に通常ノード２１６、…が収容されている場合、ノードプール情報２４１ｆには、通常ノード２１６、…の情報が記載される。
【００９９】
ＲＴＴデータ２４１ｇは、図１５に示すように、ノードプール４１０に収容されているノードのペア毎に測定されたＲＴＴ（Round-Trip Time）を示すデータである。図１５は、第２実施形態に係るＲＴＴデータの一例を示した図である。ＲＴＴは、一方のノードから他方のノードにメッセージを送信し、そのメッセージに対する応答が他方のノードから一方のノードへと到達するまでにかかる時間である。ＲＴＴを参照することで、通信経路上におけるノード間の距離を評価することができる。
【０１００】
例えば、ＲＴＴデータ２４１ｇを参照し、ＲＴＴが小さいノードの組み合わせを抽出（クラスタリング）することで、通信経路上で近傍にあるノードの集合（近傍ノード群）が得られる。多重化分散ＫＶＳシステムでは、同一ＩＤに割り当てられているノード間で操作要求の転送や操作履歴の同期などが実施されるため、同一ＩＤに割り当てられるノード間の距離が短いほどシステムの性能が向上する。そのため、第２実施形態に係る多重化分散ＫＶＳシステムでは、近傍ノード群に属するノードが同一ＩＤに割り当てられる。その際、ＲＴＴデータ２４１ｇが利用される。
【０１０１】
再び図９を参照する。操作処理部２４２は、多重化分散ＫＶＳシステムの利用者又は他のノードから受け付けた操作の要求を処理する。
例えば、利用者は、制御装置１００を介して初期ノード２１０に操作を要求する。初期ノード２１０に割り当てられているキーに関する操作である場合、操作処理部２４２は、その要求に応じて操作をＫＶＳデータ２４１ａに反映させる。また、操作処理部２４２は、受け付けた操作の内容と、自身が所属するＩＤ空間４０１の情報を操作履歴２４１ｂに記載する。受け付けた操作の要求が他のノードから出されたものである場合、操作処理部２４２は、上記と同様に、その操作をＫＶＳデータ２４１ａに反映させ、操作履歴２４１ｂに記載を追加する。
【０１０２】
探索処理部２４３は、ルーティングテーブル２４１ｃを参照し、指定されたキーを保持するノードを特定する。例えば、初期ノード２１０に割り当てられていないキーに対する操作の要求を操作処理部２４２が受け付けた場合、探索処理部２４３は、ルーティングテーブル２４１ｃに基づいて、そのキーに対応するＳｕｃｃｅｓｓｏｒのＩＤを特定する。
【０１０３】
例えば、Ｋｅｙ＃１（ＫｅｙＩＤ＝１）に対する操作の要求が受け付けられた場合、探索処理部２４３は、ルーティングテーブル２４１ｃ（図１１を参照）を参照し、ＫｅｙＩＤを含むＩｎｔｅｒｖａｌ（［１，２））を特定する。また、探索処理部２４３は、特定したＩｎｔｅｒｖａｌに対応するＳｕｃｃｅｓｓｏｒのＩＤ（ＩＤ＝２）を特定する。そして、探索処理部２４３は、特定したＳｕｃｃｅｓｓｏｒのＩＤを操作処理部２４２に通知する。この通知を受けた操作処理部２４２は、Ｓｕｃｃｅｓｓｏｒに対して操作の要求を転送する。
【０１０４】
プール管理部２４４は、ノードプール４１０を管理する。
例えば、プール管理部２４４は、ノードプール４１０にノードが追加された場合、追加されたノードの情報（ＩＰ  Ａｄｄｒｅｓｓなど）を収集し、収集した情報をノードプール情報２４１ｆに記載する。また、プール管理部２４４は、初期ノード２１２に対してノードの追加を通知すると共に、追加されたノードの情報を初期ノード２１２に提供する。一方、プール管理部２４４は、初期ノード２１２からノードの追加を通知された場合、初期ノード２１２から提供されるノードの情報をノードプール情報２４１ｆに記載する。
【０１０５】
また、プール管理部２４４は、ノードプール４１０に収容されているノード間のＲＴＴを計測し、計測したＲＴＴをＲＴＴデータ２４１ｇに記載する。また、プール管理部２４４は、ＲＴＴデータ２４１ｇに記載のＲＴＴに基づいて近傍ノード群を抽出する。なお、ＲＴＴの計測は、予め設定された周期又はタイミングで実行される。また、近傍ノード群の抽出は、予め設定された周期又はタイミングで実行されてもよいし、或いは、参加処理部２４５によるノードの参加処理が実行されるタイミングで実行されてもよい。
【０１０６】
参加処理部２４５は、ノードの参加に関する処理を実行する。例えば、参加処理部２４５は、ＩＤに割り当てられていないノードから参加要求を受けた場合、そのノードをノードプール４１０に収容する。また、参加処理部２４５は、ノードプール情報２４１ｆを参照し、ノードプール４１０に収容されているノードの数がＩＤ空間の数以上である場合、ＩＤ空間の数と同数のノードを選択し、選択したノードに同じＩＤを割り振る。そして、参加処理部２４５は、ＩＤ空間４０１、４０２、４０３の同じＩＤに、選択したノードを１つずつ割り当てる。
【０１０７】
なお、参加処理部２４５は、ＩＤ空間の数と同数のノードを含む近傍ノード群がある場合にノードの選択、ＩＤの割り振り、及びＩＤへの割り当てを実行してもよい。この場合、ＩＤ空間の数以上のノードがノードプール４１０に存在していてもノードの参加が見送られる。一方、この方法によれば、通信経路上の距離が短いノードの組が同じＩＤに割り当てられるため、システムの性能向上に寄与する。
【０１０８】
同期処理部２４６は、同じＩＤに割り当てられているノード間で操作履歴２４１ｂを同期する。例えば、同期処理部２４６は、操作履歴２４１ｂに記載されている操作のうち、同じＩＤに割り当てられている他のノードに通知していない操作を特定し、特定した操作を同ＩＤノードリスト２４１ｅに記載されている各ノードに通知する。なお、同期の処理は、操作処理部２４２が操作を受け付ける度に実行してもよいし、予め設定された周期又はタイミングで実行してもよい。
【０１０９】
死活監視部２４７は、同期処理部２４６が同期の処理を実行する際、操作の通知に対する応答を監視し、その応答の有無に応じて通知先のノードが通信可能な状態にあるか否かを判断する。例えば、死活監視部２４７は、通知から応答までにかかる遅延時間を計測し、その遅延時間が予め設定された閾値より大きい場合、通知先のノードが通信不可の状態（離脱した状態）にあると判断する。
【０１１０】
また、死活監視部２４７は、離脱した状態にあると判断したノードの数をカウントする。そして、カウントした数が予め設定された閾値（例えば、２）以上の場合、死活監視部２４７は、離脱したノードの数が閾値以上であることを離脱処理部２４８に通知する。なお、死活監視部２４７は、初期ノード２１０以外の残存するノードの数をカウントし、カウントした数と予め設定された閾値（例えば、１）とを比較してもよい。また、死活監視部２４７は、離脱した状態にあると判断したノードの情報を同ＩＤノードリスト２４１ｅ及びルーティングテーブル２４１ｃから削除する。
【０１１１】
離脱処理部２４８は、初期ノード２１０を含め、同じＩＤに割り当てられているノードを離脱させる処理を実行する。例えば、離脱処理部２４８は、死活監視部２４７から、離脱した状態にあるノードの数が閾値以上である旨の通知を受けた場合、初期ノード２１０と異なるＩＤに割り当てられているノードの中から、ＫＶＳデータ２４１ａの移管先となる代替ノードを決定する。そして、離脱処理部２４８は、ＫＶＳデータ２４１ａを代替ノードに移管し、離脱処理の対象外である各ノードに初期ノード２１０の離脱を通知する。
【０１１２】
また、離脱処理部２４８は、初期ノード２１２に参加の要求を出す。初期ノード２１２に参加の要求を出すことで、初期ノード２１０はノードプール４１２に収容される。なお、離脱処理の対象となる他のノードがある場合、離脱処理部２４８は、その他のノードに対し、代替ノードの決定、ＫＶＳデータの移管、離脱の通知、及び参加の要求を行うように指示してもよい。
【０１１３】
また、離脱処理部２４８は、制御装置１００に対し、初期ノード２１０に代わる初期ノードの設定を依頼する。なお、初期ノード２１０以外に初期ノードがない場合、離脱処理部２４８は、離脱処理の対象外となる各ノードに初期ノード２１０の離脱を通知する前に、制御装置１００に初期ノードの設定を依頼する。そして、初期ノードが設定され、新たな初期ノードが各ノードに通知された後、離脱処理部２４８は、離脱の通知などの処理を実行し、新たな初期ノードに参加の要求を出す。
【０１１４】
以上、初期ノード２１０の機能について説明した。なお、初期ノード２１２の機能も同様である。
（通常ノード）
次に、図１６を参照しながら、通常ノードの機能について説明する。図１６は、第２実施形態に係る通常ノードが有する機能の一例を示したブロック図である。なお、ここでは説明の都合上、通常ノード２３０の機能を例に説明する。
【０１１５】
図１６に示すように、通常ノード２３０は、記憶部２５１、操作処理部２５２、探索処理部２５３、参加処理部２５４、同期処理部２５５、死活監視部２５６、及び離脱処理部２５７を有する。
【０１１６】
なお、記憶部２５１の機能は、上述したＲＡＭ９０６や記憶部９２０などを用いて実現できる。操作処理部２５２、探索処理部２５３、参加処理部２５４、同期処理部２５５、死活監視部２５６、及び離脱処理部２５７の機能は、上述したＣＰＵ９０２などを用いて実現できる。
【０１１７】
記憶部２５１には、ＫＶＳデータ２５１ａ、操作履歴２５１ｂ、ルーティングテーブル２５１ｃ、初期ノードリスト２５１ｄ、同ＩＤノードリスト２５１ｅが格納される。
ＫＶＳデータ２５１ａは、通常ノード２３０に割り当てられているキー（図６の例ではＫｅｙ＃５、Ｋｅｙ＃６、Ｋｅｙ＃７、Ｋｅｙ＃０）と、そのキーに紐付けられて保持される値（Ｖａｌｕｅ）とのペアである。
【０１１８】
操作履歴２５１ｂは、上述した操作履歴２４１ｂ（図１０を参照）と同様に、通常ノード２３０又は通常ノード２３０と同じＩＤに割り当てられているノードが受け付けた操作の履歴である。ルーティングテーブル２５１ｃは、上述したルーティングテーブル２４１ｃ（図１１を参照）と同様に、キーを保持するノードを探索する際に利用される情報である。
【０１１９】
初期ノードリスト２５１ｄは、上述した初期ノードリスト２４１ｄ（図１２を参照）と同様に、制御装置１００により設定された全ての初期ノードの情報（ＩＰ  Ａｄｄｒｅｓｓなど）を列挙した情報である。同ＩＤノードリスト２５１ｅは、上述した同ＩＤノードリスト２４１ｅ（図１３を参照）と同様に、通常ノード２３０と同じＩＤに割り当てられているノードの情報（ＩＰ  Ａｄｄｒｅｓｓなど）を列挙した情報である。
【０１２０】
なお、通常ノード２３０と初期ノード２１０とは同じＩＤに割り当てられるため、ルーティングテーブル２５１ｃ、同ＩＤノードリスト２５１ｅは同じ内容になる。また、初期ノードリスト２５１ｄは各ノードで共通の内容となる。
【０１２１】
操作処理部２５２は、多重化分散ＫＶＳシステムの利用者又は他のノードから受け付けた操作の要求を処理する。
例えば、利用者は、制御装置１００を介して通常ノード２３０に操作を要求する。通常ノード２３０に割り当てられているキーに関する操作である場合、操作処理部２５２は、その要求に応じて操作をＫＶＳデータ２５１ａに反映させる。また、操作処理部２５２は、受け付けた操作の内容と、自身が所属するＩＤ空間４０３の情報を操作履歴２５１ｂに記載する。受け付けた操作の要求が他のノードから出された要求である場合、操作処理部２５２は、上記と同様に、その操作をＫＶＳデータ２５１ａに反映させ、操作履歴２５１ｂに記載を追加する。
【０１２２】
探索処理部２５３は、ルーティングテーブル２５１ｃを参照し、指定されたキーを保持するノードを特定する。例えば、通常ノード２３０に割り当てられていないキーに対する操作の要求を操作処理部２５２が受け付けた場合、探索処理部２５３は、ルーティングテーブル２５１ｃに基づいて、そのキーに対応するＳｕｃｃｅｓｓｏｒのＩＤを特定する。そして、探索処理部２５３は、特定したＳｕｃｃｅｓｓｏｒのＩＤを操作処理部２５２に通知する。この通知を受けた操作処理部２５２は、Ｓｕｃｃｅｓｓｏｒに対して操作の要求を転送する。
【０１２３】
参加処理部２５４は、初期ノードリスト２５１ｄに記載されている初期ノードに参加の要求を出す。初期ノードからＩＤが割り振られ、通常ノード２３０がＩＤに割り当てられた場合、参加処理部２５４は、初期ノードからノードの割り当てに関する情報を取得し、ルーティングテーブル２５１ｃを生成する。なお、初期ノードがルーティングテーブル２５１ｃを生成する場合、参加処理部２５４は、初期ノードからルーティングテーブル２５１ｃを取得する。
【０１２４】
同期処理部２５５は、同じＩＤに割り当てられているノード間で操作履歴２５１ｂを同期する。例えば、同期処理部２５５は、操作履歴２５１ｂに記載されている操作のうち、同じＩＤに割り当てられている他のノードに通知していない操作を特定し、特定した操作を同ＩＤノードリスト２５１ｅに記載されている各ノードに通知する。
【０１２５】
なお、同期の処理は、操作処理部２５２が操作を受け付ける度に実行してもよいし、予め設定された周期又はタイミングで実行してもよい。また、同期処理部２５５は、通常ノード２３０の参加時に、同じＩＤのノードに対して同期を要求し、そのノードから取得した操作履歴を操作履歴２５１ｂとして記憶部２５１に格納し、その操作履歴２５１ｂからＫＶＳデータ２５１ａを生成してもよい。
【０１２６】
死活監視部２５６は、同期処理部２５５が同期の処理を実行する際、操作の通知に対する応答を監視し、その応答の有無に応じて通知先のノードが通信可能な状態にあるか否かを判断する。例えば、死活監視部２５６は、通知から応答までにかかる遅延時間を計測し、その遅延時間が予め設定された閾値より大きい場合、通知先のノードが通信不可の状態（離脱した状態）にあると判断する。
【０１２７】
また、死活監視部２５６は、離脱した状態にあると判断したノードの数をカウントする。そして、カウントした数が予め設定された閾値（例えば、２）以上の場合、死活監視部２５６は、離脱したノードの数が閾値以上であることを離脱処理部２５７に通知する。なお、死活監視部２５６は、通常ノード２３０以外の残存するノードの数をカウントし、カウントした数と予め設定された閾値（例えば、１）とを比較してもよい。また、死活監視部２５６は、離脱した状態にあると判断したノードの情報を同ＩＤノードリスト２５１ｅ及びルーティングテーブル２５１ｃから削除する。
【０１２８】
離脱処理部２５７は、通常ノード２３０を含め、同じＩＤに割り当てられているノードを離脱させる処理を実行する。例えば、離脱処理部２５７は、死活監視部２５６から、離脱した状態にあるノードの数が閾値以上である旨の通知を受けた場合、通常ノード２３０と異なるＩＤに割り当てられているノードの中から、ＫＶＳデータ２５１ａの移管先となる代替ノードを決定する。そして、離脱処理部２５７は、ＫＶＳデータ２５１ａを代替ノードに移管し、離脱処理の対象外である各ノードに通常ノード２３０の離脱を通知する。
【０１２９】
また、離脱処理部２５７は、初期ノード２１２に参加の要求を出す。初期ノード２１２に参加の要求を出すことで、通常ノード２３０はノードプール４１２に収容される。なお、離脱処理の対象となる他のノードがある場合、離脱処理部２５７は、その他のノードに対し、代替ノードの決定、ＫＶＳデータの移管、離脱の通知、及び参加の要求を行うように指示してもよい。
【０１３０】
以上、通常ノード２３０の機能について説明した。なお、通常ノード２３０以外の通常ノード（通常ノード２１４など）が有する機能も同様である。
［２−５．処理の流れ］
次に、多重化分散ＫＶＳシステムにおいて実行される処理の流れについて説明する。
【０１３１】
（ノードの参加）
まず、図１７及び図１８を参照しながら、ノードの参加時に実行される処理の流れについて説明する。図１７は、第２実施形態に係るノードの割り当て方法について説明するための図である。図１８は、第２実施形態に係るノードの参加時に実行される処理の流れについて説明するためのフロー図である。
【０１３２】
図１７の例は、通常ノード２１６が初期ノード２１０に参加の要求を出した場合に実行される割り当て処理の様子を示している。この例ではノードプール４１０に通常ノード２２６、２２７、２３３、２３６が収容されており、参加の要求を受けた初期ノード２１０は、通常ノード２１６をノードプール４１０に収容する。
【０１３３】
例えば、ＲＴＴデータ２４１ｇに基づいて通常ノード２１６、２２６、２３６が近傍ノード群として抽出できる場合、初期ノード２１０は、通常ノード２１６、２２６、２３６に同じＩＤ（この例ではＩＤ＃６）を割り当てる。そして、初期ノード２１０は、例えば、ＩＤ空間４０１のＩＤ＃６に通常ノード２１６を割り当て、ＩＤ空間４０２のＩＤ＃６に通常ノード２２６を割り当て、ＩＤ空間４０３のＩＤ＃６に通常ノード２３６を割り当てる。
【０１３４】
通常ノード２１６、２２６、２３６の参加によりノードの割り当てが変更されたため、各ノードが保持するルーティングテーブルが更新される。また、図６に示した例のようにＫｅｙ＃０、＃１、…、＃７がノードに割り当てられている場合、通常ノード２１６、２２６、２３６の参加によりキーの割り当ても変更される。この例では、初期ノード２１０及び通常ノード２２０、２３０に割り当てられていたＫｅｙ＃５、Ｋｅｙ＃６が通常ノード２１６、２２６、２３６に割り当てられる。
【０１３５】
上記のような参加の要求があると、初期ノード２１０は、以下の流れで処理を実行する（図１８を参照）。
（Ｓ１０１）参加処理部２４５は、通常ノード２１６から参加の要求を受け付ける。
【０１３６】
（Ｓ１０２）参加処理部２４５は、参加の要求を出した通常ノード２１６からノードの情報（ＩＰ  Ａｄｄｒｅｓｓ）を取得する。また、参加処理部２４５は、通常ノード２１６をノードプール４１０に追加する。つまり、参加処理部２４５は、通常ノード２１６の情報をノードプール情報２４１ｆに記載する。
【０１３７】
（Ｓ１０３）参加処理部２４５は、ノードプール情報２４１ｆを参照し、ノードプール４１０に収容されているノードの数が閾値ＴｈＪ以上であるか否かを判定する。閾値ＴｈＪは、例えば、ＩＤ空間の数（多重度）より大きい数に設定される。ノードの数が閾値ＴｈＪ以上である場合、処理はＳ１０４へと進む。一方、ノードの数が閾値ＴｈＪ未満である場合、処理はＳ１０８へと進む。
【０１３８】
（Ｓ１０４）参加処理部２４５は、ＲＴＴデータ２４１ｇを参照し、ＲＴＴの小さいＮ個（ＮはＩＤ空間の多重度）のノードを選択する。なお、近傍ノード群が抽出されている場合、参加処理部２４５は、Ｎ個のノードを含む近傍ノード群のノードを選択する。例えば、参加処理部２４５は、Ｎ個のノードから選択される全てのノードのペアについて測定されたＲＴＴの合計値を基準に、その合計値が最小になるノードの組を選択する。
【０１３９】
（Ｓ１０５）参加処理部２４５は、Ｓ１０４で選択したノードに同じＩＤを割り当てる。このとき、参加処理部２４５は、ＩＤ空間４０１、４０２、４０３の中でノードが割り当てられていないＩＤの中から１つのＩＤを特定し、特定したＩＤをＳ１０４で選択したノードに割り当てる。未割り当てのＩＤが複数ある場合、例えば、参加処理部２４５は、未割り当てのＩＤからランダムに１つのＩＤを選択してノードに割り当てる。
【０１４０】
（Ｓ１０６）参加処理部２４５は、同じＩＤを割り当てたＮ個のノードに対して異なるＩＤ空間４０１、４０２、４０３への参加を指示する。つまり、参加処理部２４５は、ＩＤ空間４０１、４０２、４０３の同じＩＤにそれぞれ１つのノードを割り当てる。
【０１４１】
（Ｓ１０７）参加処理部２４５は、同じＩＤを割り当てたＮ個のノードに対して、各ノードの情報（ＩＰ  Ａｄｄｒｅｓｓ）を通知する。つまり、参加処理部２４５は、これらＮ個のノードが同ＩＤノードリストを生成できるように、各ノードの情報を収集して各ノードに通知する。Ｓ１０７の処理が完了すると、図１８に示した一連の処理は終了する。
【０１４２】
（Ｓ１０８）参加処理部２４５は、参加の要求を出した通常ノード２１６に対し、プール保持状態であることを通知する。なお、プール保持状態とは、ノードプール４１０に収容され、ＩＤへの割り当てを待機している状態を言う。プール保持状態の通知を受けた通常ノード２１６は、初期ノード２１０からＩＤが割り当てられるのを待機する状態となる。Ｓ１０８の処理が完了すると、図１８に示した一連の処理は終了する。
【０１４３】
ここまで、ノードの参加時に実行される処理の流れについて説明してきた。
（ＫＶＳ操作）
次に、図１９を参照しながら、ＫＶＳ操作（ＫＶＳデータに対する操作）の受け付け時に実行される処理の流れについて説明する。図１９は、第２実施形態に係るＫＶＳ操作の受け付け時に実行される処理の流れについて説明するためのフロー図である。なお、ここでは説明の都合上、初期ノード２１０が操作の要求を受け付けた場合を例に説明する。
【０１４４】
（Ｓ１１１）操作処理部２４２は、ＫＶＳ操作（ＫＶＳデータに対する操作）の指示を受け付ける。ＫＶＳ操作の指示は、操作対象の値に紐付けられるキーの情報を含む。また、ＫＶＳ操作としては、例えば、値の格納（ｐｕｔ）、値の取得（ｇｅｔ）、値の削除（ｄｅｌ）などがある。
【０１４５】
（Ｓ１１２）操作処理部２４２は、受け付けたＫＶＳ操作の指示が自ノード（初期ノード２１０）宛ての指示であるか否かを判定する。
例えば、操作処理部２４２は、初期ノード２１０に割り当てられているキーの集合に、ＫＶＳ操作の指示で指定されたキーが含まれる場合、自ノード宛ての指示であると判定する。自ノード宛ての指示であると判定した場合、処理はＳ１１３へと進む。一方、自ノード宛ての指示ではないと判定した場合、処理はＳ１１４へと進む。
【０１４６】
（Ｓ１１３）操作処理部２４２は、ＫＶＳ操作の指示に応じた処理を実行する。
例えば、指示が値の格納（ｐｕｔ）である場合、操作処理部２４２は、指示に応じてキーと値とのペアをＫＶＳデータ２４１ａとして記憶部２４１に格納する。指示が値の取得（ｇｅｔ）である場合、操作処理部２４２は、指定されたキーに対応する値を記憶部２４１から取得し、取得した値をＫＶＳ操作の要求元に返す。指示が値の削除（ｄｅｌ）である場合、操作処理部２４２は、指定されたキーと値とを記憶部２４１から削除する。
【０１４７】
また、操作処理部２４２は、実行したＫＶＳ操作の内容と、初期ノード２１０が所属するＩＤ空間４０１の情報とを操作履歴２４１ｂに記録する。Ｓ１１３の処理が完了すると、図１９に示した一連の処理は終了する。
【０１４８】
（Ｓ１１４）操作処理部２４２は、ＫＶＳ操作の指示を宛先ノード（指定されたキーを保持するノード）に転送する。
例えば、操作処理部２４２は、指示に含まれるキーの情報を探索処理部２４３に通知し、そのキーを保持するノードのＩＰ  Ａｄｄｒｅｓｓを要求する。この要求を受けた探索処理部２４３は、ルーティングテーブル２４１ｃを参照し、通知されたキーを保持するノード（Ｓｕｃｃｅｓｓｏｒ）を特定する。そして、探索処理部２４３は、特定したノードのＩＰ  Ａｄｄｒｅｓｓを操作処理部２４２に通知する。
【０１４９】
操作処理部２４２は、探索ノードのＩＰ  Ａｄｄｒｅｓｓとして、同じＩＤに割り当てられている複数のノードのＩＰ  Ａｄｄｒｅｓｓを探索処理部２４３から取得する。操作処理部２４２は、取得したＩＰ  Ａｄｄｒｅｓｓのうち、初期ノード２１０と同じＩＤ空間４０１に属するノードのＩＰ  Ａｄｄｒｅｓｓを選択し、選択したＩＰ  ＡｄｄｒｅｓｓにＫＶＳ操作の指示を転送する。
【０１５０】
（Ｓ１１５）操作処理部２４２は、ＫＶＳ操作の指示を転送した後、宛先ノードから応答が返ってくるまでの時間（応答待ち時間）を計測する。そして、操作処理部２４２は、応答待ち時間が閾値ＴｈＲ以上であるか否かを判定する。閾値ＴｈＲは任意に設定可能であるが、例えば、初期ノード２１０と宛先ノードとの間のＲＴＴにマージンを加えた予測値に基づいて設定される。応答待ち時間が閾値ＴｈＲ以上の場合、処理はＳ１１７へと進む。一方、応答待ち時間が閾値ＴｈＲ以上でない場合、処理はＳ１１６へと進む。
【０１５１】
（Ｓ１１６）操作処理部２４２は、ＫＶＳ操作の転送先（宛先ノード）から応答を受信する。
ＫＶＳ操作が値の格納（ｐｕｔ）や削除（ｄｅｌ）である場合、操作処理部２４２は、宛先ノードにおける処理の完了を示す応答を受信する。ＫＶＳ操作が値の取得（ｇｅｔ）である場合、操作処理部２４２は、宛先ノードから応答として、指定されたキーに対応する値を取得する。この場合、操作処理部２４２は、取得した値をＫＶＳ操作の要求元に返す。Ｓ１１６の処理が完了すると、図１９に示した一連の処理は終了する。
【０１５２】
（Ｓ１１７）操作処理部２４２は、Ｓ１１４でＫＶＳ操作を転送した転送先と同じＩＤのノード（宛先ノード）があるか否かを判定する。
例えば、操作処理部２４２は、探索処理部２４３から取得したＩＰ  Ａｄｄｒｅｓｓのうち、初期ノード２１０とは異なるＩＤ空間４０２、４０３に属するノードのＩＰ  Ａｄｄｒｅｓｓを特定する。そして、操作処理部２４２は、特定したＩＰ  Ａｄｄｒｅｓｓに対して稼働確認のメッセージを送信する。
【０１５３】
送信したメッセージに対して少なくとも１つの応答が得られた場合、操作処理部２４２は、宛先ノードがあると判定する。宛先ノードがあると判定した場合、処理はＳ１１８へと進む。なお、複数のノードから応答が得られた場合、操作処理部２４２は、未選択のノードから１つのノードを宛先ノードとして選択する。一方、宛先ノードがないと判定した場合、処理はＳ１１９へと進む。
【０１５４】
（Ｓ１１８）操作処理部２４２は、ＫＶＳ操作の指示を宛先ノード（同じＩＤのノード）に転送する。Ｓ１１８の処理が完了すると、処理はＳ１１５へと進む。
（Ｓ１１９）操作処理部２４２は、ＫＶＳ操作がエラー終了した際の処理（エラー処理）を実行する。例えば、操作処理部２４２は、ＫＶＳ操作の操作元に対し、ＫＶＳ操作がエラー終了した旨を通知する。Ｓ１１９の処理が完了すると、図１９に示した一連の処理は終了する。
【０１５５】
ここまで、ＫＶＳ操作（ＫＶＳデータに対する操作）の受け付け時に実行される処理の流れについて説明してきた。
（操作履歴の同期・ノードの死活監視）
次に、図２０〜図２２を参照しながら、同期及び死活監視の処理の流れについて説明する。図２０は、第２実施形態に係る同期及び死活監視の処理について説明するための図である。図２１は、第２実施形態に係る同期及び死活監視の処理の流れについて説明するための第１のシーケンス図である。図２２は、第２実施形態に係る同期及び死活監視の処理の流れについて説明するための第２のシーケンス図である。
【０１５６】
図２０の例は、同じＩＤに割り当てられている通常ノード２１４、２２４、２３４の間で操作履歴及びＫＶＳデータを同期する様子を示している。なお、同期の処理は、予め設定された周期又はタイミングで実行されてもよいし、あるノードでＫＶＳ操作が完了し、操作履歴が更新されたタイミングで実行されてもよい。
【０１５７】
図２０の例では、通常ノード２３４がＫｅｙ＃３にｖａｌ０３を格納する操作（ｐｕｔ）を受け付け、通常ノード２２４がＫｅｙ＃４にｖａｌ０４を格納する操作（ｐｕｔ）を受け付けた段階までの操作履歴が同期済である。この状態で通常ノード２１４がＫｅｙ＃３の値ｖａｌ０３を削除する操作（ｄｅｌ）を受け付けた場合、図２０に示すように、この操作は未同期の操作履歴となる。
【０１５８】
この場合、通常ノード２１４は、同期の処理を実行するタイミングで、未同期の操作履歴を通常ノード２２４、２３４に通知し、操作履歴の同期を要求する。この要求を受けた通常ノード２２４、２３４は、通知された未同期の操作履歴をそれぞれ自身の操作履歴に追加する。また、通常ノード２２４、２３４は、追加した操作履歴に基づいて、それぞれ自身のＫＶＳデータを更新する。この例ではＫｅｙ＃３の値ｖａｌ０３が削除される。
【０１５９】
上記のように、同期の際、同じＩＤに割り当てられている全てのノードが通信を実施する。そのため、同期を実施する際に通信不可の状態にあるノードを検出することができる。例えば、通常ノード２１４は、通常ノード２２４、２３４にそれぞれ稼働状況を確認するメッセージを送信し、そのメッセージに対する応答が得られるか否かを確認する（死活監視）。そして、通常ノード２１４は、応答が得られたノードを対象に同期を実施する。
【０１６０】
通常ノード２１４に未通知の操作履歴がある場合、同じＩＤに割り当てられている通常ノード２１４、２２４、２３４が実行する処理は、例えば、以下の流れで実行される（図２１を参照）。
【０１６１】
（Ｓ１２１、Ｓ１２２）通常ノード２１４は、未通知の操作履歴を通常ノード２２４、２３４に送信する。このとき、通常ノード２１４は、同ＩＤノードリストを参照し、通常ノード２１４と同じＩＤに割り当てられている通常ノード２２４、２３４のＩＰ  Ａｄｄｒｅｓｓに対して未通知の操作履歴を送信する。
【０１６２】
（Ｓ１２３、Ｓ１２４）通常ノード２１４から未通知の操作履歴を受信した通常ノード２２４、２３４は、受信を完了した旨を示す応答を通常ノード２１４に返す。
（Ｓ１２５）通常ノード２１４は、通常ノード２２４、２３４から応答を受信し、応答の有無に基づいて通信が不可の状態にあるノードの数（通信不可ノード数）をカウントする。この例では通常ノード２２４、２３４が通信可能な状態にあるため、通信不可ノード数は０となる。
【０１６３】
また、通常ノード２１４は、通信不可ノード数が閾値ＴｈＮ以上であるか否かを判定する。閾値ＴｈＮは１以上の任意の数に設定できるが、例えば、ＩＤ空間の多重数から１を減じた数（この例では２）に設定される。
【０１６４】
ＩＤ空間の多重度が３の場合、通信不可ノード数が２の状態とは、通常ノード２１４と同じＩＤに割り当てられている他のノードが全て離脱した状態（正常に通信できない状態）にあることを意味する。つまり、ＫＶＳデータの冗長性が失われている状態にある。後述するように、このような状態にある場合、その冗長性を回復するための処理が実行される。Ｓ１２５の段階では通信不可ノード数が０であるから、通常ノード２１４は、通信不可ノード数が閾値ＴｈＮ以上ではないと判定し、そのまま動作を継続する。
【０１６５】
（Ｓ１２６、Ｓ１２７）通常ノード２２４は、通常ノード２１４から受信した未通知の操作履歴に基づいて自身が保持する操作履歴を更新する（図２０を参照）。また、通常ノード２２４は、更新後の操作履歴にある未実行のＫＶＳ操作（未通知の操作履歴に対応するＫＶＳ操作）を自身が保持するＫＶＳデータに適用する。そして、通常ノード２２４は、そのまま動作を継続する。
【０１６６】
（Ｓ１２８、Ｓ１２９）通常ノード２３４は、通常ノード２１４から受信した未通知の操作履歴に基づいて自身が保持する操作履歴を更新する（図２０を参照）。また、通常ノード２３４は、更新後の操作履歴にある未実行のＫＶＳ操作（未通知の操作履歴に対応するＫＶＳ操作）を自身が保持するＫＶＳデータに適用する。そして、通常ノード２３４は、そのまま動作を継続する。
【０１６７】
Ｓ１２５、Ｓ１２７、Ｓ１２９の処理が完了した後、通常ノード２１４、２２４、２３４はそのまま動作を継続する。そして、ある時点で通常ノード２３４が離脱し（後述するＳ１３０の処理）、さらに、通常ノード２１４が未通知の操作履歴を他のノードに通知する同期の処理を実行する場合、以下のように処理が進行する。
【０１６８】
（Ｓ１３０）通常ノード２３４が離脱する場合としては、例えば、通信環境の悪化や通常ノード２３４の電源断などがある。また、通常ノード２３４の利用者により多重化分散ＫＶＳシステムから離脱する操作が行われた場合などでも通常ノード２３４が離脱する。
【０１６９】
（Ｓ１３１、Ｓ１３２）同期の処理を実行するタイミングで、通常ノード２１４は、未通知の操作履歴を通常ノード２２４、２３４に送信する。このとき、通常ノード２１４は、同ＩＤノードリストを参照し、通常ノード２１４と同じＩＤに割り当てられている通常ノード２２４、２３４のＩＰ  Ａｄｄｒｅｓｓに対して未通知の操作履歴を送信する。
【０１７０】
（Ｓ１３３）通常ノード２１４から未通知の操作履歴を受信した通常ノード２２４は、受信を完了した旨を示す応答を通常ノード２１４に返す。一方、通常ノード２３４は既に離脱しているため、通常ノード２１４から通常ノード２３４に送信された未通知の操作履歴は通常ノード２３４に到達しない。そのため、通常ノード２３４は、未通知の操作履歴に対する応答を送信しない。
【０１７１】
（Ｓ１３４）通常ノード２１４は、通常ノード２２４から応答を受信し、応答の有無に基づいて通信が不可の状態にあるノードの数（通信不可ノード数）をカウントする。この例では通常ノード２２４から応答が得られ、通常ノード２３４からは応答が得られていないため、通信不可ノード数は１となる。
【０１７２】
また、通常ノード２１４は、通信不可ノード数が閾値ＴｈＮ以上であるか否かを判定する。Ｓ１３４の段階では通信不可ノード数が１であるから、通常ノード２１４は、通信不可ノード数が閾値ＴｈＮ以上ではないと判定し、そのまま動作を継続する。つまり、通常ノード２１４の他に、同じＩＤに割り当てられている通常ノード２２４が正常稼働しており、ＫＶＳデータの冗長性が維持されているため、通常ノード２１４の運用がそのまま継続される。
【０１７３】
（Ｓ１３５、Ｓ１３６）通常ノード２２４は、通常ノード２１４から受信した未通知の操作履歴に基づいて自身が保持する操作履歴を更新する（図２０を参照）。また、通常ノード２２４は、更新後の操作履歴にある未実行のＫＶＳ操作（未通知の操作履歴に対応するＫＶＳ操作）を自身が保持するＫＶＳデータに適用する。そして、通常ノード２２４は、そのまま動作を継続する。
【０１７４】
上記のように、多重化分散ＫＶＳシステムでは、同じＩＤに割り当てられているノードが複数存在するため、一部のノードが離脱しても、ＫＶＳデータの冗長性が失われない限り、そのまま運用を継続することができる。もちろん、完全に冗長性が失われる前に、冗長性が低下した段階で対処する仕組みにすることもできる。
【０１７５】
例えば、ＩＤ空間の多重度がＷ（Ｗ≧４）の場合、同じＩＤに割り当てられているノードの数が２になった時点で冗長性を回復するための処理を実施する仕組みに変形することができる。つまり、ＩＤ空間の多重度に応じて閾値ＴｈＮを適切に変形することで、ＫＶＳデータの消失に対するリスクを好適に抑制することができる。
【０１７６】
ここで、通信不可ノード数が閾値ＴｈＮ未満となった場合に実行される処理の流れについて説明する（図２２を参照）。
（Ｓ１４１、Ｓ１４２）通常ノード２２４、２３４が離脱する。
【０１７７】
（Ｓ１４３、Ｓ１４４）同期の処理を実行するタイミングで、通常ノード２１４は、未通知の操作履歴を通常ノード２２４、２３４に送信する。このとき、通常ノード２１４は、同ＩＤノードリストを参照し、通常ノード２１４と同じＩＤに割り当てられている通常ノード２２４、２３４のＩＰ  Ａｄｄｒｅｓｓに対して未通知の操作履歴を送信する。
【０１７８】
但し、通常ノード２２４、２３４は既に離脱しているため、未通知の操作履歴は通常ノード２２４、２３４に到達しない。そして、通常ノード２１４は、通常ノード２２４、２３４から未通知の操作履歴に対する応答を得ることができない。
【０１７９】
（Ｓ１４５）通常ノード２１４は、応答の有無に基づいて通信が不可の状態にあるノードの数（通信不可ノード数）をカウントする。この例では通常ノード２２４、２３４から応答が得られないため、通信不可ノード数は２となる。また、通常ノード２１４は、通信不可ノード数が閾値ＴｈＮ以上であるか否かを判定する。
【０１８０】
Ｓ１４５の段階では通信不可ノード数が２であるから、通常ノード２１４は、通信不可ノード数が閾値ＴｈＮ以上であると判定する。つまり、通常ノード２１４の他に、正常稼働している同じＩＤのノードが存在せず、ＫＶＳデータの冗長性が失われている。この場合、通常ノード２１４は、その対処としてＳ１４６以降の処理を実行する。
【０１８１】
（Ｓ１４６）通常ノード２１４は、ＫＶＳ操作の受け付けを停止する。
（Ｓ１４７）通常ノード２１４は、通常ノード２１４の機能を移管する移管先のノード（代替ノード）を特定する。
【０１８２】
例えば、通常ノード２１４は、自身が離脱した場合に、自身が保持するキーの割当先となるノードを探索し、そのノードを代替ノードとする。図６の例でＩＤ＃４のノードが離脱する場合、ＩＤ＃４のノードが保持するＫｅｙ＃３、Ｋｅｙ＃４は、ＩＤ＃０のノードに移管される。この場合、通常ノード２１４は、ＩＤ＃０のノード（初期ノード２１０）を代替ノードとする。なお、操作の受け付けを停止した後に、通常ノード２１４に対して要求されたＫＶＳ操作は、代替ノードに転送される。
【０１８３】
（Ｓ１４８、Ｓ１４９）通常ノード２１４は、自身が保持しているＫＶＳデータを代替ノードに移管する。そして、通常ノード２１４は、自身の離脱を各ノードに通知すると共に、初期ノード２１０に対して参加を要求する。初期ノード２１０に参加を要求することで、通常ノード２１４はノードプール４１０に収容される。
【０１８４】
上記のように、各ノードは、同期処理の中で通信不可ノード数を監視し、同じＩＤに割り当てられているノードの多重化が維持されているかを確認する。そして、ノードの多重化が十分でなく、ＫＶＳデータの冗長性が低下していると判断される状況にある場合、そのＩＤに割り当てられているノードを離脱させてノードプールに戻す制御が実施される。ノードプールに十分な数のノードがあれば、それら複数のノードが共通するＩＤに割り当てられ、ＫＶＳデータの冗長性が回復される。
【０１８５】
ここまで、同期及び死活監視の処理の流れについて説明してきた。
（ノードの再参加）
次に、図２３及び図２４を参照しながら、再参加及び同期の処理の流れについて説明する。図２３は、第２実施形態に係る再参加及び同期の処理について説明するための図である。図２４は、第２実施形態に係る再参加及び同期の処理の流れについて説明するためのシーケンス図である。
【０１８６】
図２３の例は、一旦離脱した通常ノード２３４が再参加する際に実施される同期の様子を示している。通常ノード２３４が移動端末である場合、通信環境の変化により一時的に通信不可の状態になることがある。この場合、通常ノード２３４は、図２１（Ｓ１３２、Ｓ１３４を参照）のように、離脱した状態にあると判断される。
【０１８７】
仮に、一時的に離脱状態になった通常ノード２３４を新たなＩＤに割り当てて再参加させると、通常ノード２３４が保持しているＫＶＳデータ及び操作履歴は利用できなくなる。そのため、一時的に通信不可の状態になった後、すぐに通常ノード２３４の通信状態が復旧する場合、通常ノード２３４を元のＩＤに再参加させ、既に保持しているＫＶＳデータや操作履歴を利用して運用を継続できれば、システムの負担を低減できる。
【０１８８】
図２１を参照しながら説明したように、多重化分散ＫＶＳシステムでは、同じＩＤに割り当てられているノードの一部が離脱した場合でも、残りのノードで運用が継続される。そのため、残りのノードで運用が継続されている際、一時的に離脱したノードを元のＩＤに再参加させ、図２３に示すように、離脱期間に更新されている操作履歴を同期させれば、再参加したノードを加えた状態で運用を継続することができる。
【０１８９】
図２３の例では、再参加した通常ノード２３４が、運用を継続している通常ノード２２４から操作履歴を取得している。この場合、通常ノード２３４は、通常ノード２２４から取得した操作履歴と、自身が保持している操作履歴とを比較し、両者の差分を抽出する。そして、通常ノード２３４は、抽出した差分を自身の操作履歴に反映させると共に、差分に含まれるＫＶＳ操作を自身のＫＶＳデータに反映させる。この処理により、通常ノード２２４、２３４のＫＶＳデータが同期される。
【０１９０】
つまり、通常ノード２３４が再参加する場合、通常ノード２３４及び通常ノード２３４と同じＩＤに割り当てられている通常ノード２１４、２２４は、以下の流れで処理を実行する（図２４を参照）。
【０１９１】
（Ｓ１５１、Ｓ１５２）通常ノード２３４が離脱する。その後、通常ノード２３４が再参加する。なお、離脱から再参加までの期間が所定期間（例えば、１秒など）より短い場合に再参加を許可する仕組みとしてもよい。
【０１９２】
（Ｓ１５３、Ｓ１５４）通常ノード２３４は、稼働確認のメッセージを通常ノード２１４、２２４に送信する。このとき、通常ノード２３４は、同ＩＤノードリストを参照し、通常ノード２３４と同じＩＤに割り当てられている通常ノード２１４、２２４のＩＰ  Ａｄｄｒｅｓｓに対して稼働確認のメッセージを送信する。
【０１９３】
（Ｓ１５５、Ｓ１５６）通常ノード２３４から稼働確認のメッセージを受信した通常ノード２１４、２２４は、受信を完了した旨を示す応答を通常ノード２３４に返す。
なお、この例では通常ノード２１４、２２４が稼働しているため、通常ノード２１４、２２４から稼働確認のメッセージに対する応答が通常ノード２３４に返される。しかし、図２２に示したように、既に通常ノード２１４、２２４が離脱している場合、稼働確認のメッセージに対する応答は通常ノード２３４に返されない。この場合、通常ノード２３４は、再参加の処理を終了し、例えば、初期ノード２１０に参加を要求する。
【０１９４】
（Ｓ１５７）通常ノード２３４は、操作履歴の同期を依頼するノード（同期先）を選択する。なお、同期先は、ランダムに選択されてもよいし、予め設定されている優先順位に基づいて選択されてもよい。例えば、通常ノード２３４が保持するＲＴＴデータに基づいてＲＴＴが小さいノードが優先的に同期先として選択されてもよいし、稼働確認のメッセージを送信してから応答が返るまでの時間が短いノードが選択されてもよい。図２４の例では、通常ノード２２４が選択されている。
【０１９５】
（Ｓ１５８）通常ノード２３４は、同期先として選択した通常ノード２２４に同期要求を送信する。
（Ｓ１５９）通常ノード２３４から同期要求を受けた通常ノード２２４は、自身が保持している操作履歴を通常ノード２３４に送信する。
【０１９６】
（Ｓ１６０、Ｓ１６１）通常ノード２３４は、通常ノード２２４から受信した操作履歴に基づいて自身が保持する操作履歴を更新する。また、通常ノード２３４は、更新後の操作履歴にある未実行のＫＶＳ操作（操作履歴の差分に対応するＫＶＳ操作）を自身が保持するＫＶＳデータに適用する。Ｓ１６１までの処理が完了した後、通常ノード２１４、２２４、２３４はそのまま動作を継続する。
【０１９７】
上記のように、一時的に離脱したノードを元のＩＤに割り当て、同じＩＤに割り当てられている他のノードと操作履歴を同期してＫＶＳデータを更新することで、多重化分散ＫＶＳシステムは離脱前の状態に復旧する。このような再参加を許容することで、新たなノードの参加に伴うルーティングテーブルの再構築、キーの再割り当て、ＫＶＳデータの移管などの処理を省略することができ、頻繁にノードの参加・離脱があってもシステムの性能低下を抑制することができる。
【０１９８】
ここまで、再参加及び同期の処理の流れについて説明してきた。
（ＲＴＴの計測）
次に、図２５を参照しながら、ＲＴＴ測定時の処理の流れについて説明する。図２５は、第２実施形態に係るＲＴＴ測定時の処理の流れについて説明するためのフロー図である。なお、ここでは説明の都合上、初期ノード２１０がＲＴＴを測定する場合を例に説明する。
【０１９９】
（Ｓ１７１）プール管理部２４４は、ノードプール情報２４１ｆを参照し、ノードプール４１０からノードのペアを選択する。
（Ｓ１７２）プール管理部２４４は、Ｓ１７１で選択したノード間のＲＴＴを測定する。例えば、プール管理部２４４は、選択したペアの一方に対して他方のＩＰ  Ａｄｄｒｅｓｓを通知し、ＩＰネットワークにおけるノードの到達性を確認するためのソフトウェアであるｐｉｎｇを利用してＲＴＴを測定するように指示する。そして、プール管理部２４４は、指示を与えたノードからＲＴＴを取得する。
【０２００】
（Ｓ１７３）プール管理部２４４は、Ｓ１７１で選択したノードのペアと、Ｓ１７２で取得したＲＴＴとを対応付け、ＲＴＴデータ２４１ｇとして記憶部２４１に保存する。
（Ｓ１７４）プール管理部２４４は、全てのペアを選択し終えたか否かを判定する。全てのペアを選択し終えた場合、処理はＳ１７５へと進む。一方、未選択のペアがある場合、処理はＳ１７１へと進む。
【０２０１】
（Ｓ１７５）プール管理部２４４は、ＲＴＴデータ２４１ｇを参照し、ＲＴＴが相互にＴｈＴ（例えば、１００ミリ秒など）より小さくなるノードの集合（近傍ノード群）を特定する（クラスタリング）。
【０２０２】
例えば、プール管理部２４４は、ノードプール４１０からＩＤ空間の多重度と同じ数のノードを選択し、選択したノードのペア毎にＲＴＴが閾値ＴｈＴより小さいか否かを判定する。そして、全てのペアのＲＴＴが閾値ＴｈＴより小さい場合、プール管理部２４４は、選択したノードの集合を近傍ノード群（図１５を参照）として特定する。
【０２０３】
Ｓ１７５の処理が完了すると、図２５に示した一連の処理は終了する。
以上、多重化分散ＫＶＳシステムにおいて実行される処理の流れについて説明した。
上記のように、多重化分散ＫＶＳシステムは、識別子を割り当てる論理空間を多重化し、識別子に割り当てるノードを冗長化させてＫＶＳデータの冗長化を図ることで、ノードの離脱によるデータの消失を防止している。また、同じ識別子に割り当てられた一部のノードが離脱しても冗長性が許容可能な範囲で維持されている場合には残りのノードで運用が継続される。
【０２０４】
そのため、ノードの離脱頻度が高い場合でも、離脱時に生じる処理負担を低減でき、システムの性能を安定的に維持することができる。また、一時的に離脱したノードが再参加する際、元の識別子に割り当てて他のノードと操作履歴を同期するため、ノードの離脱と再参加が頻繁に繰り返される場合でも、ルーティングテーブルの再計算などを省略でき、システムの性能が好適に維持される。つまり、ルーティングテーブルの更新コストや同期用データの転送コストを低減でき、参加・離脱の頻度が高いノードを多数含むシステムに第２実施形態の技術を適用した場合の効果は更に格別なものとなる。
【０２０５】
なお、識別子を割り当てる論理空間の規定やキーの探索アルゴリズムなどについてＣｈｏｒｄの方式を例に説明を進めてきたが、他のＤＨＴやＳｋｉｐ  Ｇｒａｐｈなどの方式に対しても第２実施形態の技術を適用可能である。つまり、論理空間の多重化、同一識別子に割り当てられるノードの一部が離脱した場合の処理、及び再参加時の処理などは、他の方式に同様に当てはめることが可能であり、こうした方式を採用する変形例についても当然に第２実施形態の技術的範囲に属する。
【０２０６】
以上、第２実施形態について説明した。
【符号の説明】
【０２０７】
１０  情報管理装置
１１  記憶部
１１ａ  管理テーブル
１２  制御部
２１、２２、２３  ＩＤ空間
３０  ノードプール
Ｋ１、Ｋ７  キー
Ｖ１、Ｖ７  値
Ｎ０１、Ｎ０２、Ｎ０３  ノード
【図１】
0006697158.tif 000002
【図２】
0006697158.tif 000003
【図３】
0006697158.tif 000004
【図４】
0006697158.tif 000005
【図５】
0006697158.tif 000006
【図６】
0006697158.tif 000007
【図７】
0006697158.tif 000008
【図８】
0006697158.tif 000009
【図９】
0006697158.tif 000010
【図１０】
0006697158.tif 000011
【図１１】
0006697158.tif 000012
【図１２】
0006697158.tif 000013
【図１３】
0006697158.tif 000014
【図１４】
0006697158.tif 000015
【図１５】
0006697158.tif 000016
【図１６】
0006697158.tif 000017
【図１７】
0006697158.tif 000018
【図１８】
0006697158.tif 000019
【図１９】
0006697158.tif 000020
【図２０】
0006697158.tif 000021
【図２１】
0006697158.tif 000022
【図２２】
0006697158.tif 000023
【図２３】
0006697158.tif 000024
【図２４】
0006697158.tif 000025
【図２５】
0006697158.tif 000026