(57)【要約】【課題】データ集合間のデータ移動を許容した分散処理システムに於いて、データの転送回数を削減することにより、データの処理時間を削減する。【解決手段】データ移動部４２２６が、データ集合から別のデータ集合に指定データを移動した場合、指定データを移動すると共に、データ保存部４２２７が移動元データ集合に指定データに係る移動先情報を残し、移動先データ集合に含まれる指定データには移動元情報を残しておく。この移動したデータに対するアクセス要求が実行されたならば、先ず移動元データ集合を格納している移動元ノードにアクセスし、転送先決定部４２２１が移動元データ集合に含まれる移動先情報によって移動先データ集合の識別子を取得し、信号転送部４２２２が移動先ノードを特定してアクセスする。【選択図】図２
2014074944.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードが協調して動作する分散データ管理システムに於いて、
各前記ノードは、
１または複数のデータを含むデータ集合および当該データ集合の識別子を格納するデータ部と、
前記データ集合の識別子を参照して、前記データ集合がいずれのノードに格納されているかを特定する処理部と、を備えており、
指定されたデータである指定データを移動先データ集合に移動する移動要求を受けるステップと、
前記指定データを含むデータ集合である指定データ集合を格納する格納先ノードを特定するステップと、
を各前記ノードの前記処理部に実行させ、
更に前記格納先ノードが自ノードならば、
前記移動先データ集合の識別子を参照して前記指定データの移動先である移動先ノードを特定するステップと、
前記移動先ノードの前記移動先データ集合に前記指定データの実体を移動するステップと、
前記指定データに含まれる移動元データ集合の識別子の情報を参照して移動元ノードを特定するステップと、
を各前記ノードの前記処理部に実行させ、
更に前記自ノードが前記移動元ノードでないならば、
前記移動元ノードに対して前記移動元データ集合に含まれる移動元データに、少なくとも前記移動先データ集合の識別子の情報を設定する要求を送信するステップ、
を各前記ノードの前記処理部に実行させるための分散データ管理プログラム。
【請求項２】
前記移動元ノードに対して前記移動元データ集合に含まれる前記移動元データに、前記移動先データ集合の識別子の情報を設定する要求を送信するステップを前記処理部に実行させたのち、
前記指定データ集合に含まれる前記指定データに係る情報を全て削除するステップ、
を各前記ノードの前記処理部に実行させるための請求項１に記載の分散データ管理プログラム。
【請求項３】
移動する前記指定データの実体を受信するステップを前記処理部に実行させ、
前記移動先データ集合の識別子が前記移動元データ集合の識別子と異なるならば、
前記移動先データ集合に前記指定データの実体を設定するステップと、
前記移動先データ集合に前記指定データの前記移動元データ集合の識別子の情報を設定するステップと、を前記処理部に実行させ、
前記移動先データ集合の識別子が前記移動元データ集合の識別子と同一ならば、
前記移動先データ集合に前記指定データの実体を設定するステップと、
前記移動先データ集合に前記指定データの前記移動元データ集合の識別子の情報を削除するステップと、
を前記処理部に実行させるための請求項１または請求項２に記載の分散データ管理プログラム。
【請求項４】
前記指定データを前記移動先データ集合に移動する前記移動要求には、前記指定データの識別子、前記指定データ集合の識別子、および、前記移動先データ集合の識別子が含まれている、
ことを特徴とする請求項１ないし請求項３のいずれか１項に記載の分散データ管理プログラム。
【請求項５】
前記処理部は更に、
各前記データの識別子を参照して当該データが格納されている前記データ集合を特定する手段を備え、
前記指定データを前記移動先データ集合に移動する前記移動要求には、前記指定データの識別子と前記移動先データ集合の識別子とが含まれている、
ことを特徴とする請求項１ないし請求項４のいずれか１項に記載の分散データ管理プログラム。
【請求項６】
前記指定データへのアクセス要求を受信するステップと、
前記指定データを含む前記指定データ集合の前記格納先ノードを特定するステップと、
を前記処理部に実行させ、
更に前記格納先ノードが前記自ノード以外ならば、前記格納先ノードに前記アクセス要求を転送するステップを、前記格納先ノードが前記自ノードならば、前記指定データ集合から前記指定データに係る情報を取得するステップを前記処理部に実行させ、
更に、前記指定データの実体が存在したならば、前記アクセス要求を実行するステップを前記処理部に実行させ、前記指定データの実体が存在しなかったならば、前記指定データの前記移動先データ集合の識別子の情報に基づいて、前記移動先ノードを決定するステップと、前記移動先ノードに前記アクセス要求を転送するステップと、
を前記処理部に実行させるための請求項１ないし請求項５のいずれか１項に記載の分散データ管理プログラム。
【請求項７】
複数のノードである分散データ管理装置が協調して動作する分散データ管理システムに於いて、
１または複数のデータを含むデータ集合および当該データ集合の識別子を格納する記憶部と、
指定データを移動先データ集合に移動する移動要求を受信すると、前記指定データを含む指定データ集合の格納先ノードを特定する転送先決定部と、
前記格納先ノードが自ノード以外ならば、前記格納先ノードに前記移動要求を転送する信号転送部と、
前記格納先ノードが前記自ノードならば、前記移動先データ集合の識別子を参照して前記指定データの移動先ノードを特定して、前記移動先ノードの前記移動先データ集合に前記指定データの実体を移動して、前記指定データの移動元データ集合の識別子を参照して移動元ノードを特定するデータ移動部と、
前記自ノードが前記移動元ノードでないならば、前記移動元ノードに対して前記移動元データ集合に含まれる移動元データに、少なくとも前記移動先データ集合の識別子の情報を設定する要求を送信するデータ保存部と、
を備えることを特徴とする分散データ管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のノードが協調して動作する分散処理システムに於いて、システム全体で管理されるデータを各ノードが分担して管理するために実行される分散データ管理プログラム、および、各ノードである分散データ管理装置に関する。
【背景技術】
【０００２】
一般的に、複数のノードが協調して動作する分散処理システムは、ノード台数の増大によって更なる処理性能を獲得する際に用いられる。分散処理システムは、例えば、大規模データベースのデータ管理に於いて有効である。
分散処理システムの各ノードで実行される分散データ管理プログラムは、一般的なデータの管理機能に加えて、その分散処理システムに於ける処理担当ノードの決定機能を有している。この分散データ管理プログラムが実行されたとき、各ノードは、分散処理システムに於ける処理の状態データを管理対象とする。
【０００３】
この分散データ管理プログラムに用いられる手法として、コンシステント・ハッシュ法を挙げることができる（非特許文献１）。
コンシステント・ハッシュ法は、複数のサーバが多量のデータを分担して管理する分散処理プログラムの一形態である。コンシステント・ハッシュ法の原理は、分散データ管理プログラムを実行するノードと、ノードによって管理されるデータのそれぞれに識別子を割り当て、あるノードが管理するデータの識別子の範囲を、ノード自身の識別子と、自身よりも値の小さい識別子を持つノードの中では最も大きい値の識別子を持つノードの識別子との間として定めるものである。
コンシステント・ハッシュ法を実装したソフトウェアプログラムのインタフェースは、データの保存要求と取得要求のみを受け付ける単純なものである。コンシステント・ハッシュ法を実行するノードは、受信した信号が要求するデータの識別子を参照して、複数のサーバのうち指定されたデータを管理しているサーバを特定し、特定したサーバに対して、データの保存要求や取得要求を転送する。
【０００４】
ここでは、分散データ管理プログラムに於いて、単体のデータを管理する機能だけでなく、データ間で関連性の高いデータ群について、データ集合の単位でデータを管理する機能を考える。
【０００５】
図１０（ａ），（ｂ）は、コンシステント・ハッシュ法に於けるＩＤ空間を示す図である。
【０００６】
図１０（ａ）は、ＩＤ空間５とノードの識別子とデータ集合の識別子との関係を示す図である。
ＩＤ空間５は、円環状である。円環状のＩＤ空間５には、ノードの識別子６−１〜６−６と、データ集合の識別子７−１〜７−７が並んでいる。
データ集合の識別子７−１からノードの識別子６−１への矢印は、このデータ集合の識別子７−１の担当がノードの識別子６−１であることを示している。このとき、ノードの識別子６−１で示されるノードに、データ集合の識別子７−１で示されるデータ集合が格納される。
データ集合の識別子７−２からノードの識別子６−２への矢印は、このデータ集合の識別子７−２の担当がノードの識別子６−２であることを示している。このとき、ノードの識別子６−２で示されるノードに、データ集合の識別子７−２で示されるデータ集合が格納される。
データ集合の識別子７−３からノードの識別子６−４への矢印は、このデータ集合の識別子７−３の担当がノードの識別子６−４であることを示している。このとき、ノードの識別子６−４で示されるノードに、データ集合の識別子７−３で示されるデータ集合が格納される。
データ集合の識別子７−４〜７−６からノードの識別子６−５への矢印は、このデータ集合の識別子７−４〜７−６の担当がノードの識別子６−５であることを示している。このとき、ノードの識別子６−５で示されるノードに、データ集合の識別子７−４〜７−６で示されるデータ集合が格納される。
データ集合の識別子７−７からノードの識別子６−６への矢印は、このデータ集合の識別子７−７の担当がノードの識別子６−６であることを示している。このとき、ノードの識別子６−６で示されるノードに、データ集合の識別子７−７で示されるデータ集合が格納される。
以下、ノードの識別子６−１〜６−６を特に区別しないときには、単にノードの識別子６と記載する。データ集合の識別子７−１〜７−７を特に区別しないときには、単にデータ集合の識別子７と記載する。
【０００７】
図１０（ｂ）は、各データ集合の識別子と、データ集合が格納するデータとの関係を示す図である。
ノード（ｎ）４−ｎは、識別子1740f0d5のデータ集合を有し、識別子1740f0d5のデータ集合は、複数のセッション状態データを含んでいる。このノード（ｎ）４−ｎの識別子は、例えば、図１０（ａ）のノードの識別子６のいずれかである。データ集合の識別子1740f0d5は、例えば図１０（ａ）のデータ集合の識別子７のいずれかに対応している。
セッション状態データであるSession1は、データの識別子であるSession1.idの値が、例えば3c2af102であり、セッション状態データの実体かつセッション状態であるSession1.stateの値が、例えば「confirmed」（確立状態）である。データ集合の識別子1740f0d5は、ＩＤ空間５に存在している。各ノードは、データ集合の識別子1740f0d5を参照し、コンシステント・ハッシュ法による演算を行うことで、識別子1740f0d5のデータ集合を担当しているノードの識別子６を特定し、よって、識別子1740f0d5のデータ集合を格納しているノード（ｎ）４−ｎを特定することができる。
【０００８】
ノードの識別子６やデータ集合の識別子７は、例えばハッシュ関数などの、無作為な値を返す演算方法によって算出される。ノードの識別子６の値およびデータ集合の識別子７の値は無作為なので、各ノードが担当するデータの量は平準化され、データ処理の負荷を分散することが可能となる。更に、１つの実際のノードに対して複数の仮想的な識別子（以下、仮想識別子）を割り当て、この仮想識別子それぞれの担当するＩＤ空間５上の領域の全てを実際のノードが管理することによって、負荷分散性を更に向上する方法もある。
【０００９】
コンシステント・ハッシュ法の特徴は、分散処理システムを構成するノードが増減した際に、各ノード間で分担していたデータの担当替えが一部に限定され、ノード数に依らず所定量のデータ移動しか発生しないことである。
このようなコンシステント・ハッシュ法の適用例の１つとして、ＳＩＰ  Ｓｅｒｖｌｅｔ（非特許文献２）コンテナのようなセッション制御を行うアプリケーションサーバの実装が考えられる。
ＳＩＰ  Ｓｅｒｖｌｅｔとは、セッション制御プロトコルの１つであるＳＩＰ（Session Initiation Protocol）を用いるサーバアプリケーションを簡易に実装可能にするＪａｖａ（登録商標）用のＡＰＩ（Application Programming Interface）の規定であり、これを実装したものがＳＩＰ  Ｓｅｒｖｌｅｔコンテナである。このようなＳＩＰのアプリケーションサーバに於いては、ＳＩＰに於いてＢ２ＢＵＡ（Back-to-Back User Agent）と呼ばれる、２つのセッション状態を関連付けて管理する形態が用いられることが多い。ＳＩＰ  Ｓｅｒｖｌｅｔではこの２つ（ないしそれ以上）の関連するセッション状態を、ＳＡＳ（SIP Application Session）というデータ集合に格納するものとし、ＳＩＰ  Ｓｅｒｖｌｅｔコンテナの多くの実装に於いて、このＳＡＳ（データ集合）の単位でデータを格納している。
【００１０】
コンシステント・ハッシュ法をＳＩＰ  Ｓｅｒｖｌｅｔコンテナに適用する場合には、このＳＡＳ（データ集合）を単位として、ＳＡＳ（データ集合）の識別子に基づいて、どのノードにＳＡＳ（データ集合）を割り当てるかを判断する。更に、クライアントからのＳＩＰ信号にＳＡＳ（データ集合）の識別子をパラメータとして含ませる。これにより、指定したＳＡＳ（データ集合）を管理するノードに対して、信号を転送することができる。
【先行技術文献】
【非特許文献】
【００１１】
【非特許文献１】D. Karger, E. Lehman, T. Leighton, M. Levine, D. Lewin, and R. Panigrahy、“Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web”、in Proceedings of the 29th ACM Symposium on Theory of Computing (STOC'97)、May 1997、pp.654-663、［online］、［平成２４年９月２６日検索］、インターネット<URL:http://www.akamai.com/dl/technical_publications/ConsistenHashingandRandomTreesDistributedCachingprotocolsforrelievingHotSpotsontheworldwideweb.pdf>
【非特許文献２】Java Community Process、“JSR 289: SIP Servlet v1.1"、［online］、Aug. 2008.［平成２４年９月２０日検索］、インターネット<URL:http://jcp.org/en/jsr/detail?id=289>
【発明の概要】
【発明が解決しようとする課題】
【００１２】
ＳＩＰ  Ｓｅｒｖｌｅｔの規定では、データ集合（ＳＡＳ）間のデータ（セッション状態データ）の移動は認められていない。一方で、サービスの可能性としては、例えばある端末Ａ，Ｂ間の通話と、別の端末Ｃ，Ｄ間の通話が存在しているときに、一方の話者をスワップし、端末Ａ，Ｄ間と端末Ｃ，Ｂ間の通話に切り替えるようなサービスというものが考えられる。これはＳＩＰ  Ｓｅｒｖｌｅｔを利用したＳＩＰアプリケーション上では、端末Ａに対するセッション状態データと端末Ｂに対するセッション状態データとを含むデータ集合であるＳＡＳ−αから、端末Ｃに対するセッション状態データと端末Ｄに対するセッション状態データとを含むＳＡＳ−βに、端末Ｂに対するセッション状態データを移動し、逆にＳＡＳ−βからＳＡＳ−αに端末Ｄに対するセッション状態データを移動する操作によって実現される。
【００１３】
このようなサービスを実現するために、前記した操作をＳＩＰ  Ｓｅｒｖｌｅｔの規定を拡張することで許容した場合も、ＳＩＰ  Ｓｅｒｖｌｅｔコンテナの適用には実装上は困難が伴う。前記したように、コンシステント・ハッシュ法をＳＩＰ  Ｓｅｒｖｌｅｔコンテナに適用する場合は、一般にＳＡＳ（データ集合）の単位でデータを格納し、ＳＡＳ（データ集合）の識別子を指定した信号を転送している。しかし、ＳＡＳ（データ集合）間のデータ移動を許容した場合、ＳＡＳ（データ集合）の識別子を指定した信号の転送を行っても、転送した先のＳＡＳ（データ集合）から指定したデータが移動してしまっている可能性があり、指定したデータを格納するノードに転送することができない。
本発明ではＳＩＰのように、サーバ側でデータ集合間でのデータの移動があったことをクライアント側が関知しないプロトコルを扱うサーバを対象としている。そのためクライアントは、データの移動前後で変わらず移動前のＳＡＳ（データ集合）の識別子を指定した信号を送信する。
【００１４】
これに対し、最も単純にＳＡＳ（データ集合）間のデータの移動をＳＩＰ  Ｓｅｒｖｌｅｔコンテナに適用させるには、データ集合（ＳＡＳ）の単位で転送する前に、個々のデータ（セッション状態データ）の単位で転送を行う方法が考えられる。
この方法に於いて、各ノードは、ＳＡＳ（データ集合）の識別子に対応させて、そのＳＡＳ（データ集合）に関連するセッション状態データを格納する。それに加えて、各ノードは、セッション状態データの識別子に対応させて、そのセッション状態データを格納しているＳＡＳ（データ集合）の識別子を格納する。セッション状態データに対するアクセス要求信号を受信した際には、まずアクセス要求信号に含まれたパラメータである指定セッションの識別子を参照して、コンシステント・ハッシュ法により、指定セッション状態データを担当（格納）するノードを特定して、特定したノードに対してアクセス要求信号を転送する。次に、転送されたアクセス要求信号を受信したノードは、このノードが保持するセッション識別子に対応するＳＡＳ（データ集合）の識別子から、指定セッションを格納するＳＡＳ（データ集合）を担当（格納）するノードに対して、更にアクセス要求信号を転送する。
すなわち、初回はデータの識別子に基づく転送を行い、２回目は、当該データを格納するデータ集合の識別子に基づく転送を行う。これによって、データ集合間でデータが移動した場合も、移動先データ集合を保持するノードに対してアクセス要求信号を転送することが可能になる。
しかし、この方法では、データの移動の有無に関わらず、全てのデータに対する信号について２段階の転送が必要となり、全ての信号の処理時間が増大してしまうという欠点がある。
【００１５】
そこで、本発明は、データ集合間のデータ移動を許容した分散処理システムに於いて、データの転送回数を削減し、よってデータの処理時間を削減できる分散データ管理プログラムおよび分散データ管理装置を提供することを課題とする。
【課題を解決するための手段】
【００１６】
前記した課題を解決するため、請求項１に記載の発明では、複数のノードが協調して動作する分散データ管理システムに於いて、各前記ノードは、１または複数のデータを含むデータ集合および当該データ集合の識別子を格納するデータ部と、前記データ集合の識別子を参照して、前記データ集合がいずれのノードに格納されているかを特定する処理部と、を備えており、指定されたデータである指定データを移動先データ集合に移動する移動要求を受けるステップと、前記指定データを含むデータ集合である指定データ集合を格納する格納先ノードを特定するステップと、を各前記ノードの前記処理部に実行させ、更に前記格納先ノードが自ノードならば、前記移動先データ集合の識別子を参照して前記指定データの移動先である移動先ノードを特定するステップと、前記移動先ノードの前記移動先データ集合に前記指定データの実体を移動するステップと、前記指定データに含まれる移動元データ集合の識別子の情報を参照して移動元ノードを特定するステップと、を各前記ノードの前記処理部に実行させ、更に前記自ノードが前記移動元ノードでないならば、前記移動元ノードに対して前記移動元データ集合に含まれる移動元データに、少なくとも前記移動先データ集合の識別子の情報を設定する要求を送信するステップ、を各前記ノードの前記処理部に実行させるための分散データ管理プログラムとした。
【００１７】
請求項７に記載の発明では、複数のノードである分散データ管理装置が協調して動作する分散データ管理システムに於いて、１または複数のデータを含むデータ集合および当該データ集合の識別子を格納する記憶部と、指定データを移動先データ集合に移動する移動要求を受信すると、前記指定データを含む指定データ集合の格納先ノードを特定する転送先決定部と、前記格納先ノードが自ノード以外ならば、前記格納先ノードに前記移動要求を転送する信号転送部と、前記格納先ノードが前記自ノードならば、前記移動先データ集合の識別子を参照して前記指定データの移動先ノードを特定して、前記移動先ノードの前記移動先データ集合に前記指定データの実体を移動して、前記指定データの移動元データ集合の識別子を参照して移動元ノードを特定するデータ移動部と、前記自ノードが前記移動元ノードでないならば、前記移動元ノードに対して前記移動元データ集合に含まれる移動元データに、少なくとも前記移動先データ集合の識別子の情報を設定する要求を送信するデータ保存部と、を備えることを特徴とする分散データ管理装置とした。
【００１８】
このようにすることで、指定データを移動するたびに、当該指定データの移動元データに含まれる移動先情報を常に更新しているので、移動しているデータに係る要求を、２回以下の転送で処理することができる。これにより、データの移動の有無に関らず、そのデータを処理する要求（信号）の転送回数を削減し、データの処理時間を削減することができる。
【００１９】
請求項２に記載の発明では、前記移動元ノードに対して前記移動元データ集合に含まれる前記移動元データに、前記移動先データ集合の識別子の情報を設定する要求を送信するステップを前記処理部に実行させたのち、前記指定データ集合に含まれる前記指定データに係る情報を全て削除するステップ、を各前記ノードの前記処理部に実行させるための請求項１に記載の分散データ管理プログラムとした。
【００２０】
このようにすることで、指定データをデータ集合間で何回移動しても、当該指定データに係る情報を、移動元データ集合と移動先データ集合の２箇所のみに限定することができる。これにより、使用される記憶容量を削減することができる。
【００２１】
請求項３に記載の発明では、移動する前記指定データの実体を受信するステップを前記処理部に実行させ、前記移動先データ集合の識別子が前記移動元データ集合の識別子と異なるならば、前記移動先データ集合に前記指定データの実体を設定するステップと、前記移動先データ集合に前記指定データの前記移動元データ集合の識別子の情報を設定するステップと、を前記処理部に実行させ、前記移動先データ集合の識別子が前記移動元データ集合の識別子と同一ならば、前記移動先データ集合に前記指定データの実体を設定するステップと、前記移動先データ集合に前記指定データの前記移動元データ集合の識別子の情報を削除するステップと、を前記処理部に実行させるための請求項１または請求項２に記載の分散データ管理プログラムとした。
【００２２】
このようにすることで、当該指定データの移動が２回以上行われたときであっても、移動先データ集合を格納するノードから、移動元データ集合を格納するノードに対して、新たな移動先データ集合の識別子を送信することができる。
更に、当該データが生成されたときの移動元データ集合に当該データが移動されたときには、移動元情報を削除して、当該データが生成されたときの状態に戻すことができる。これにより、使用される記憶容量を削減することができる。
【００２３】
請求項４に記載の発明では、前記指定データを前記移動先データ集合に移動する前記移動要求には、前記指定データの識別子、前記指定データ集合の識別子、および、前記移動先データ集合の識別子が含まれている、ことを特徴とする請求項１ないし請求項３のいずれか１項に記載の分散データ管理プログラムとした。
【００２４】
このようにすることで、各ノードは、移動要求に含まれている指定データ集合の識別子に基づいて、指定データが格納されているデータ集合を迅速に特定することができる。
【００２５】
請求項５に記載の発明では、各前記ノードの前記処理部は更に、各前記データの識別子を参照して当該データが格納されている前記データ集合を特定する手段を備え、前記指定データを前記移動先データ集合に移動する前記移動要求には、前記指定データの識別子と前記移動先データ集合の識別子とが含まれている、ことを特徴とする請求項１ないし請求項４のいずれか１項に記載の分散データ管理プログラムとした。
【００２６】
このようにすることで、移動要求に含まれるパラメータを減らすことができるので、ネットワーク負荷を軽減することができる。
【００２７】
請求項６に記載の発明では、前記指定データへのアクセス要求を受信するステップと、前記指定データを含む前記指定データ集合の前記格納先ノードを特定するステップと、を前記処理部に実行させ、更に前記格納先ノードが前記自ノード以外ならば、前記格納先ノードに前記アクセス要求を転送するステップを、前記格納先ノードが前記自ノードならば、前記指定データ集合から前記指定データに係る情報を取得するステップを前記処理部に実行させ、更に、前記指定データの実体が存在したならば、前記アクセス要求を実行するステップを前記処理部に実行させ、前記指定データの実体が存在しなかったならば、前記指定データの前記移動先データ集合の識別子の情報に基づいて、前記移動先ノードを決定するステップと、前記移動先ノードに前記アクセス要求を転送するステップと、を前記処理部に実行させるための請求項１ないし請求項５のいずれか１項に記載の分散データ管理プログラムとした。
【００２８】
このようにすることで、移動していないデータに係る要求は転送無しに処理できると共に、移動しているデータについても、２回以下の転送回数で、当該要求を格納先ノードに転送して処理することができる。更に、そのデータを処理する要求（信号）の転送回数を削減し、データの処理時間を削減することができる。
【発明の効果】
【００２９】
本発明によれば、データ集合間のデータ移動を許容した分散処理システムに於いて、データの転送回数を削減し、よってデータの処理時間を削減することができる。
【図面の簡単な説明】
【００３０】
【図１】本実施形態に於ける分散データ管理システムを示す概略の構成図である。
【図２】本実施形態に於ける分散データ管理プログラムを示す概略の構成図である。
【図３】本実施形態に於けるデータ集合の例を示す図である。
【図４】本実施形態に於けるデータの移動要求処理を示すフローチャートである。
【図５】本実施形態に於けるデータの保存処理と移動先更新処理を示すフローチャートである。
【図６】本実施形態に於けるデータ集合間のデータ移動処理（その１）を示すシーケンス図である。
【図７】本実施形態に於けるデータ集合間のデータ移動処理（その２）を示すシーケンス図である。
【図８】本実施形態に於けるアクセス要求処理を示すフローチャートである。
【図９】本実施形態に於けるアクセス要求を示すシーケンス図である。
【図１０】コンシステント・ハッシュ法に於けるＩＤ空間を示す図である。
【発明を実施するための形態】
【００３１】
以降、本発明を実施するための形態を、各図を参照して詳細に説明する。
【００３２】
（本実施形態の構成）
【００３３】
図１は、本実施形態に於ける分散データ管理システムを示す概略の構成図である。
【００３４】
分散データ管理システム１は、全て同一の複数のノード（１）４−１、ノード（２）４−２、…、ノード（ｎ）４−ｎを有している。ノード（１）４−１、ノード（２）４−２、…、ノード（ｎ）４−ｎは、アプリケーション４１と分散データ管理プログラム４２とを実行している。以下、ノード（１）４−１、ノード（２）４−２、…、ノード（ｎ）４−ｎを特に区別しないときには、単にノード４と記載する。ノード４は、ロードバランサ３を介してクライアント２−１〜２−ｍに接続されている。ノード４は、各ノード４に分散されているデータを管理する分散データ管理装置である。この分散データ管理システム１は、複数のノード４が協調して動作することにより、各ノード４に分散されているデータ集合およびデータを管理するものである。
クライアント２−１〜２−ｍは、ロードバランサ３を介して各ノード４に接続されている。以下、クライアント２−１〜２−ｍを特に区別しないときには、単にクライアント２と記載する。クライアント２は、ロードバランサ３を介してノード４に要求を送信することによって、この分散データ管理システム１上のデータの取得や保存を行うものである。
【００３５】
ロードバランサ３は、各クライアント２と各ノード４との間に配置されている。クライアント２は、各ノード４に対して直接にアクセスが可能である。しかし、ロードバランサ３は、特定のノード４に負荷が集中しないように、クライアント２からの要求を無作為にノード４に振り分けている。
分散データ管理プログラム４２は、分散データ管理装置であるノード４上で実行され、各ノード４に分散されているデータを管理するためのソフトウェアプログラムである。
アプリケーション４１は、分散データ管理装置であるノード４上で実行されて、各データを利用して所定のプロトコル処理を行うためのソフトウェアプログラムである。分散データ管理プログラム４２は、ノード４の図示しないＨＤＤ（Hard Disk Drive）などに記憶され、ノード４の図示しないＣＰＵ（Central Processing Unit）によって実行されて、分散データなどを記憶するデータ部４２１と、記憶した分散データなどを処理する処理部４２２とを具現化するものである。
アプリケーション４１は、例えば、分散データ管理プログラム４２に対して状態データを保存し、この状態データを利用してＳＩＰ信号の処理を行うＳＩＰアプリケーションなどである。
【００３６】
図２は、本実施形態に於ける分散データ管理プログラムを示す概略の構成図である。
分散データ管理プログラム４２は、分散データなどを記憶するデータ部４２１と、記憶した分散データなどを処理する処理部４２２とを具現化する。
データ部４２１は、データ集合の識別子と当該データ集合の値とが対として格納されるデータ群４２１１と、各ノード４の識別子と当該ノード４のアドレスとが対として格納されるアドレス表４２１２とを格納している。更に、データ部４２１の各データ集合の値は、１または複数のデータを含んでいる。本実施形態では、データ集合の識別子やセッション状態データの識別子やノードの識別子としてハッシュ値を用いており、図２では８桁の１６進数で示している。しかし、これに限られず、任意長かつ任意の値を識別子として用いてもよい。
処理部４２２は、受信した信号によって指定された指定データの格納先であるノード（格納先ノード）を決定する転送先決定部４２２１と、転送先である格納先ノードに信号を転送する信号転送部４２２２と、ノード４を追加するノード追加部４２２３と、ノード４を削除するノード削除部４２２４と、データ集合の格納先ノードに於いて信号の要求に基づいてデータの取得を行うデータ取得部４２２５と、データ集合間でデータを移動するデータ移動部４２２６と、このデータ集合の格納先ノードに於いて、信号の要求に基づいてデータの保存、作成または更新を行うデータ保存部４２２７とを備えている。
【００３７】
処理部４２２は、データ集合の識別子によって、このデータ集合がいずれのノード４に格納されているかを特定する機能を有している。
転送先決定部４２２１は、例えば、移動要求を受信し、この移動要求によって指定された指定データを、この移動要求に含まれた移動先の識別子で示される移動先のデータ集合（移動先データ集合：図３（ｂ））に移動する際に、この指定データを含むデータ集合（指定データ集合）の格納先ノードを特定する。
信号転送部４２２２は、例えば、転送先決定部４２２１が特定した格納先ノードが自ノード以外ならば、格納先ノードに対して移動要求を転送するものである。
データ取得部４２２５は、信号の要求を受信した際に、この信号で指定されたデータ集合の識別子とデータの識別子とに基づいて、要求されたデータの取得を行うものである。
データ移動部４２２６は、例えば、転送先決定部４２２１が特定した格納先ノードが自ノードならば、移動先データ集合の識別子を参照して指定データの移動先ノードを特定して、移動先ノードの移動先データ集合に、指定データの実体を移動するものである。更にデータ移動部４２２６は、指定データに係る移動元情報（SessionX.orgParent：図３（ｂ））を参照して移動元集合を特定し、更に移動元ノードを特定する。
データ保存部４２２７は、にデータ移動部４２２６が特定した移動元ノードが自ノードならば、移動元データ集合に含まれるデータ（移動元データ）に、移動先データ集合の識別子の情報および指定データの実体が存在しない旨の情報を設定するものである。
【００３８】
図３（ａ），（ｂ）は、本実施形態に於けるデータ集合の例を示す図である。
【００３９】
図３（ａ）は、新たに生成されたデータ（セッション情報）を示す図である。
ノード（２）４−２は、識別子1740f0d5のデータ集合を有している。識別子1740f0d5のデータ集合は、このデータ集合の値として、１または複数のセッション状態データを含んでいる。セッション状態データであるSession1は、その識別子であるSession1.idの値が3c2af102であり、セッション状態データの実体の存在情報であるSession1.existの値が「true」（真）であり、セッション状態データの実体であるSession1.stateの値が「confirmed」（確立状態）である。
【００４０】
図３（ｂ）は、移動されたデータ（セッション情報）を示す図である。
ここでは、識別子1740f0d5のデータ集合（移動元データ集合）から、識別子d14ec862のデータ集合（移動先データ集合）へと、識別子3c2af102のセッション状態データを移動したあとの状態を示している。
識別子1740f0d5のデータ集合に於いて、セッション状態データであるSession1は、その識別子であるSession1.idの値が3c2af102であり、セッション状態データの実体の存在情報であるSession1.existの値が「false」（偽）であり、このデータに係る移動先情報として、Session1.curParentの値にd14ec862が設定されている。移動元データ集合に含まれるセッション状態データは、移動元のデータ（移動元データ）に係る情報である。このデータに係る移動先情報には、移動先データ集合の識別子の情報が設定されている。分散データ管理プログラム４２の実行によって具現化された処理部４２２は、移動先データ集合の識別子を参照し、コンシステント・ハッシュ法により、移動先データ集合を格納する移動先ノードを特定する。
以下、SessionXとして、セッション状態データ全般を示し、SessionX.idとしてセッション状態データの識別子を示し、SessionX.existとしてセッション状態データの存在情報を示し、SessionX.curParentとして、セッション状態データに係る移動先情報を示す場合がある。
【００４１】
移動先である識別子d14ec862のデータ集合（移動先データ集合）に於いて、セッション状態データは、Session2という名前で管理されている。セッション状態データであるSession2は、その存在を示すSession2.existという値が「true」（真）であり、その状態を示すSession2.stateの値が「confirmed」（確立状態）である。移動先データ集合に含まれるセッション状態データは、移動先のデータ（移動先データ）に係る情報である。本実施形態に於いて、セッション状態データへのアクセス要求に対しては、セッション状態を示すSession2.stateの値が応答される。セッション状態を示すSession2.stateは、セッション状態データの実体である。セッション状態データであるSession2は、その移動元データ集合の識別子の情報である1740f0d5という値がSession2.orgParentに設定される。
以下、SessionX.stateとしてセッション状態データの実体を示し、SessionX.orgParentとして、セッション状態データに係る移動元情報を示す場合がある。
【００４２】
データ集合間を移動した図３（ｂ）のデータを、再度移動する場合に、このノード（３）４−３は、この移動元データ集合の識別子を参照し、コンシステント・ハッシュ法により、移動元データ集合を格納する移動元ノードであるノード（２）４−２を特定する。ノード（３）４−３は更に、移動元ノードであるノード（２）４−２にアクセスし、移動元データ集合に含まれる移動元データに係る移動先情報（Session1.curParent）を、再度の移動先データ集合の識別子の情報に設定する。この処理の詳細は、後記する図４と図５に記載する。このような処理により、データ集合間でデータを何度移動しても、常に２回以下の信号の転送によって、指定データを含むデータ集合にアクセス信号を転送することができる。
本実施形態のノード４の処理部４２２は、一度移動したデータを、移動前のデータ集合に戻すように再び移動した場合は、後記する図５に示すように、移動先情報（SessionX.curParent）などを追加せず、一度も移動していないのと同じ状態（図３（ａ）参照）へと戻している。これにより、データを格納する領域を減らし、かつ処理時間を短縮することができる。
【００４３】
（本実施形態の動作）
【００４４】
図４は、本実施形態に於けるデータの移動要求処理を示すフローチャートである。
各ノード４は、分散データ管理プログラム４２の実行によって処理部４２２を具現化する。この処理部４２２は、データの移動要求を受信すると、データの移動要求処理を開始する。以下のステップＳ３０〜Ｓ４１に於いて、処理の主体は全て同一のノード（自ノード）である。
【００４５】
ステップＳ３０に於いて、処理部４２２は、クライアント２からロードバランサ３を介して受信したデータの移動要求を解釈する。データの移動要求は、例えば、移動対象となる指定データの識別子と、この指定データを含む指定データ集合の識別子と、移動先データ集合の識別子をパラメータとして含んでいる。
ステップＳ３１に於いて、転送先決定部４２２１は、データの移動要求に含まれる指定データ集合の識別子を参照し、コンシステント・ハッシュ法により、この指定データ集合を格納するノード４である格納先ノードを特定する。
ステップＳ３２に於いて、転送先決定部４２２１は、自ノードが格納先ノードであるか否かを判断する。転送先決定部４２２１は、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ３３の処理を行い、当該判断条件が成立したならば（Ｙｅｓ）、ステップＳ３４の処理を行う。
ステップＳ３３に於いて、信号転送部４２２２は、格納先ノードに対してデータの移動要求を転送し、図４の処理を終了する。
【００４６】
ステップＳ３４に於いて、転送先決定部４２２１は、データの移動要求に含まれる移動先データ集合の識別子を参照し、コンシステント・ハッシュ法により、移動先データ集合を格納する移動先ノードを特定する。
ステップＳ３５に於いて、データ移動部４２２６は、移動先ノードに対して、当該指定データの実体（SessionX.state）を移動先データ集合に移動する要求を送信する。
ステップＳ３６に於いて、データ移動部４２２６は、当該指定データに係る移動元情報（SessionX.orgParent）に設定された移動元データ集合の識別子を参照し、コンシステント・ハッシュ法により、移動元データ集合を格納する移動元ノードを特定する。なお、当該指定データが移動元情報（SessionX.orgParent）を有していないときには、自ノードが移動元ノードである。
ステップＳ３７に於いて、データ移動部４２２６は、自ノードが移動元ノードであるか否かを判断する。データ移動部４２２６は、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ３８の処理を行い、当該判断条件が成立したならば（Ｙｅｓ）、ステップＳ４０の処理を行う。
ステップＳ３８に於いて、データ移動部４２２６は、移動元ノードに対して、当該指定データに係る移動先更新要求を送信する。
ステップＳ３９に於いて、データ移動部４２２６は、当該指定データに係る情報を全て削除する。これにより、当該指定データに係る情報を、移動元データ集合と移動先データ集合の２箇所に限定し、使用する記憶容量を削減することができる。ステップＳ３９の処理が終了すると、データ移動部４２２６は、図４の処理を終了する。
【００４７】
ステップＳ４０に於いて、データ保存部４２２７は、移動元データ集合に、当該指定データに係る移動先情報（SessionX.curParent）の項目を追加する。
ステップＳ４１に於いて、データ保存部４２２７は、当該指定データに係る移動先情報（SessionX.curParent）に、移動先データ集合の識別子を設定し、図４の処理を終了する。
【００４８】
自ノードが、移動要求に含まれた指定データ集合を含む格納先ノードでなかったときには、図４の処理のうち、ステップＳ３０〜Ｓ３３の処理を行う。
自ノードが格納先ノードであり、かつ、移動要求に含まれた指定データに係る移動元情報（SessionX.orgParent）に設定された移動元データ集合を含む移動元ノードであったときには、図４の処理のうち、ステップＳ３０〜Ｓ３２，Ｓ３４〜Ｓ３７，Ｓ４０，Ｓ４１の処理を行う。
自ノードが格納先ノードであり、かつ、移動要求に含まれた指定データに係る移動元情報（SessionX.orgParent）に設定された移動元データ集合を含む移動元ノードでなかったときには、図４の処理のうち、ステップＳ３０〜Ｓ３２，Ｓ３４〜Ｓ３９の処理を行う。
【００４９】
図５（ａ），（ｂ）は、本実施形態に於けるデータの保存処理と移動先更新処理とを示すフローチャートである。
【００５０】
図５（ａ）は、データの保存処理を示すフローチャートである。
分散データ管理プログラム４２の実行によって具現化された処理部４２２は、図４のステップＳ３５で送信された指定データの実体（SessionX.state）と移動要求とを受信すると、データ保存処理を開始する。
ステップＳ５０に於いて、処理部４２２は、指定データの実体（SessionX.state）と移動要求とを受信し、移動要求を解釈する。この移動要求は、例えば、移動対象となる指定データの識別子と、この指定データの新たな移動先データ集合の識別子と、移動元データ集合の識別子とを含んでいる。
ステップＳ５１に於いて、データ保存部４２２７は、移動元データ集合と移動先データ集合とが同一であるか否かを判断する。データ保存部４２２７は、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ５２の処理を行い、当該判断条件が成立したならば（Ｙｅｓ）、ステップＳ５５の処理を行う。
ステップＳ５２に於いて、データ保存部４２２７は、移動先データ集合に当該指定データの実体（SessionX.state）を保存する。
【００５１】
ステップＳ５３に於いて、データ保存部４２２７は、当該指定データに係る移動元情報（SessionX.orgParent）の項目を追加する。
ステップＳ５４に於いて、データ保存部４２２７は、当該指定データに係る移動元情報（SessionX.orgParent）に移動元データ集合の識別子を設定し、図５（ａ）の処理を終了する。
ステップＳ５５に於いて、データ保存部４２２７は、移動先データ集合に当該指定データの実体（SessionX.state）を保存する。
ステップＳ５６に於いて、データ保存部４２２７は、当該指定データに係る移動先情報（SessionX.curParent）を削除し、図５（ａ）の処理を終了する。
【００５２】
図５（ｂ）は、データの移動先更新処理を示すフローチャートである。
分散データ管理プログラム４２の実行によって具現化された処理部４２２は、図４のステップＳ３８で送信された移動先更新要求を受信すると、データの移動先更新処理を開始する。
ステップＳ６０に於いて、処理部４２２は、受信した移動先更新要求を解釈する。この移動先更新要求には、例えば、指定データの識別子と、移動元データ集合の識別子と、移動先データ集合の識別子とを含んでいる。
ステップＳ６１に於いて、データ保存部４２２７は、移動元データ集合と移動先データ集合とが同一であるか否かを判断する。データ保存部４２２７は、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ６２の処理を行い、当該判断条件が成立したならば（Ｙｅｓ）、図５（ｂ）の処理を終了する。
ステップＳ６２に於いて、データ保存部４２２７は、移動元データ集合が含んでいる当該指定データに係る移動先情報（SessionX.curParent）に、移動先データ集合の識別子を設定し、図５（ｂ）の処理を終了する。
【００５３】
図６は、本実施形態に於けるデータ集合間のデータ移動処理（その１）を示すシーケンス図である。
このシーケンスＳ１１〜Ｓ１８は、ノード（２）４−２に指定データが新たに生成されたのち、ノード（１）４−１がアプリケーション４１を実行し、指定データを、ノード（２）４−２からノード（３）４−３に移動するように要求した場合を示している。
【００５４】
シーケンスＳ１１に於いて、ノード（１）４−１は、アプリケーション４１を実行して、自ノードの分散データ管理プログラム４２が具現化した処理部４２２に対して、データ移動要求を行う。この移動要求は、指定データを含む指定データ集合の識別子と、移動する指定データの識別子と、移動先データ集合の識別子とをパラメータとして含んでいる。
シーケンスＳ１２に於いて、ノード（１）４−１は、分散データ管理プログラム４２を実行して、データ移動要求に含まれる指定データ集合の識別子を参照し、コンシステント・ハッシュ法により、指定データ集合を格納する格納先ノードを特定する。特定された格納先ノードは、ノード（２）４−２であるとする。以下のシーケンスでは、分散データ管理プログラム４２の実行に係る記載を省略する。
シーケンスＳ１３に於いて、ノード（１）４−１は、ノード（２）４−２に対して、データの移動要求を送信する。
【００５５】
シーケンスＳ１４に於いて、ノード（２）４−２は、データ移動要求に含まれる移動先データ集合の識別子を参照し、コンシステント・ハッシュ法により、移動先データ集合を格納する移動先ノードを特定する。ここで、移動先ノードは、ノード（３）４−３である。図６に於いて、指定データは生成直後であり、一度も移動されていないものとする。
シーケンスＳ１５に於いて、ノード（２）４−２は、ノード（３）４−３に対して、指定データの実体（SessionX.state）の移動要求を送信する。
シーケンスＳ１６に於いて、ノード（２）４−２は、指定データに係る移動元情報（SessionX.orgParent）に格納されている移動元データ集合の識別子を参照し、コンシステント・ハッシュ法により、移動元データ集合を格納する移動元ノードを特定する。ここで、移動元ノードは、自ノードであるノード（２）４−２である。
シーケンスＳ１８に於いて、ノード（２）４−２は、移動元データ集合に含まれる指定データに係る移動先情報（SessionX.curParent）を更新する。ノード（２）４−２は、この指定データに係る移動先情報（SessionX.curParent）に、指定データの実体（SessionX.state）が保存されている移動先データ集合の識別子を設定する。
【００５６】
図７は、本実施形態に於けるデータ集合間のデータ移動処理（その２）を示すシーケンス図である。図６に示すデータ移動処理（その１）と同一の要素には同一の符号を付与している。
このシーケンスＳ１１〜Ｓ１８ａは、分散データ管理システム１が、図６に示すシーケンスＳ１１〜Ｓ１８を実行した後に、更にノード（１）４−１がアプリケーション４１を実行し、指定データを、ノード（３）４−３からノード（４）４−４に移動するように要求した場合を示している。
シーケンスＳ１１に於いて、図６のシーケンスＳ１１と同様に、ノード（１）４−１は、アプリケーション４１を実行して、自ノードの分散データ管理プログラム４２の実行によって具現化した処理部４２２に対して、データ移動要求を行う。この移動要求は、指定データを含む指定データ集合の識別子と、移動する指定データの識別子と、移動先データ集合の識別子とをパラメータとして含んでいる。
シーケンスＳ１２に於いて、図６のシーケンスＳ１２と同様に、ノード（１）４−１は、分散データ管理プログラム４２を実行して、データの移動要求に含まれる指定データ集合の識別子を参照し、コンシステント・ハッシュ法により、指定データ集合を格納する格納先ノードを特定する。ここで特定された格納先ノードは、ノード（３）４−３である。なお、以下のシーケンスでは、分散データ管理プログラム４２の実行の記載を省略する。
【００５７】
シーケンスＳ１３ａに於いて、ノード（１）４−１は、ノード（３）４−３に対して、データの移動要求を送信する。
シーケンスＳ１４ａに於いて、ノード（３）４−３は、データの移動要求に含まれる移動先データ集合の識別子を参照し、コンシステント・ハッシュ法により、移動先データ集合を格納する移動先ノードを特定する。ここでは、移動先ノードは、ノード（４）４−４である。図７に於いて、指定データは既に１度移動済みであるため、指定データに係る移動元情報（SessionX.orgParent）に格納されていた移動元データ集合の識別子を取得し、一時的に保存しておく。
シーケンスＳ１５ａに於いて、ノード（３）４−３は、移動先であるノード（４）４−４に対して、指定データの実体（SessionX.state）の移動要求を送信する。
【００５８】
シーケンスＳ１６ａに於いて、ノード（３）４−３は、先ほど保存しておいた移動元データ集合の識別子を参照し、コンシステント・ハッシュ法により、移動元データ集合を格納する移動元ノードを特定する。ここで、特定した移動元ノードは、ノード（２）４−２である。
シーケンスＳ１７ａに於いて、ノード（３）４−３は、ノード（２）４−２に対して、指定データの移動先更新要求を送信する。これにより、ノード（３）４−３は、ノード（２）４−２に対して、指定データの実体（SessionX.state）をノード（３）４−３からノード（４）４−４の移動先データ集合に移動したことを通知する。
シーケンスＳ１８ａに於いて、ノード（２）４−２は、指定データに係る移動先情報（SessionX.curParent）を、指定データの実体（SessionX.state）を含んだ移動先データ集合の識別子に更新する。
【００５９】
図８は、本実施形態に於けるアクセス要求処理を示すフローチャートである。
分散データ管理プログラム４２の実行により具現化された処理部４２２は、データのアクセス要求を受信すると、アクセス要求処理を開始する。以下のステップＳ７０〜Ｓ８０に於いて、処理の主体は全て同一のノード（自ノード）である。
ステップＳ７０に於いて、処理部４２２は、データのアクセス要求を受信し、アクセス要求を解釈する。このアクセス要求は、例えば、アクセスの対象となる指定データの識別子と、この指定データを含む指定データ集合の識別子とを含んでいる。
ステップＳ７１に於いて、データ取得部４２２５は、データのアクセス要求に含まれる指定データ集合の識別子を参照し、コンシステント・ハッシュ法により、指定データ集合を格納するノード４である格納先ノードを特定する。
ステップＳ７２に於いて、データ取得部４２２５は、自ノードが格納先ノードであるか否かを判断する。データ取得部４２２５は、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ７３の処理を行い、当該判断条件が成立したならば（Ｙｅｓ）、ステップＳ７４の処理を行う。
【００６０】
ステップＳ７３に於いて、データ取得部４２２５は、格納先ノードに対してアクセス要求を転送し、図８の処理を終了する。
ステップＳ７４に於いて、データ取得部４２２５は、指定データ集合から、アクセス要求で指定された当該指定データを取得する。
ステップＳ７５に於いて、データ取得部４２２５は、当該指定データの実体（SessionX.state）が存在するか否かを判断する。データ取得部４２２５は、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ７８の処理を行い、当該判断条件が成立したならば（Ｙｅｓ）、ステップＳ７６の処理を行う。
ステップＳ７６に於いて、データ保存部４２２７は、当該指定データの実体（SessionX.state）に対して、アクセス要求を実行する。
ステップＳ７７に於いて、データ保存部４２２７は、アクセス要求の実行結果を、アクセス要求の送信元であるクライアント２に応答し、図８の処理を終了する。
【００６１】
ステップＳ７８に於いて、データ保存部４２２７は、当該指定データに係る移動先情報（SessionX.curParent）に格納された移動先データ集合の識別子を取得する。
ステップＳ７９に於いて、データ保存部４２２７は、移動先データ集合の識別子を参照し、コンシステント・ハッシュ法により、移動先データ集合を格納する移動先ノードを特定する。
ステップＳ８０に於いて、データ保存部４２２７は、移動先ノードに対して、当該指定データへのアクセス要求を転送し、図８の処理を終了する。
【００６２】
自ノードが、アクセス要求に含まれた指定データ集合を含む格納先ノードでなかったときには、図８の処理のうち、ステップＳ７０〜Ｓ７３の処理を行う。
自ノードが、アクセス要求に含まれた指定データ集合を含む格納先ノードであり、かつ、指定データ集合に当該指定データの実体（SessionX.state）が存在していなかったときには、図８の処理のうち、ステップＳ７０〜Ｓ７２，Ｓ７４，Ｓ７５，Ｓ７８〜Ｓ８０の処理を行う。
自ノードが、アクセス要求に含まれた指定データ集合を含む格納先ノードであり、かつ、指定データ集合に当該指定データの実体（SessionX.state）が存在していたときには、図８の処理のうち、ステップＳ７０〜Ｓ７２，Ｓ７４〜Ｓ７７の処理を行う。
【００６３】
図９は、本実施形態に於けるアクセス要求の送受信の一例を示すシーケンス図である。
このシーケンスＳ０１〜Ｓ０９は、分散データ管理システム１が、クライアント２が送信したアクセス要求を受信して、このアクセス要求に対する応答信号を送信する場合を示している。このシーケンスＳ０１〜Ｓ０９に於いて、図３（ｂ）に示すように、ノード（２）４−２が、移動元データ集合を格納しており、ノード（３）４−３が、移動先データ集合を格納している。
【００６４】
シーケンスＳ０１に於いて、クライアント２は、ロードバランサ３に対してアクセス要求を送信する。このアクセス要求は、アクセスの対象となる指定データの識別子3c2af102と、この指定データを含む指定データ集合の識別子1740f0d5とをパラメータとして含んでいる。
シーケンスＳ０２に於いて、ロードバランサ３は、無作為にいずれかのノード４に、アクセス要求を振り分ける。ここでは、ロードバランサ３は、アクセス要求をノード（１）４−１に振り分けている。
シーケンスＳ０３に於いて、ノード（１）４−１は、分散データ管理プログラム４２を実行して、アクセス要求に含まれる指定データ集合の識別子を参照し、コンシステント・ハッシュ法により、指定データ集合を格納している格納先のノード４を特定する。ここでは、ノード（２）４−２が、格納先として特定されている。以下のシーケンスでは、分散データ管理プログラム４２の実行に関する記載を省略する。
シーケンスＳ０４に於いて、ノード（１）４−１は、ノード（２）４−２に対して、このアクセス要求を転送する。このアクセス要求は、アクセスの対象となる指定データの識別子3c2af102と、この指定データを含む指定データ集合の識別子1740f0d5とをパラメータとして含んでいる。
シーケンスＳ０５に於いて、ノード（２）４−２は、指定データ集合に含まれる指定データに係る情報を取得する。ここでは指定データの存在を表す値が、「false」（偽）であり、指定データの実体（Session1.state）に代わり、指定データに係る移動先情報（Session1.curParent）が残されている。ここで指定データ集合は、図３（ｂ）に示す移動元データ集合である。
【００６５】
シーケンスＳ０６に於いて、ノード（２）４−２は、指定データに係る移動先情報（Session1.curParent）に設定された移動先データ集合の識別子を参照し、コンシステント・ハッシュ法により、転送先のノード４を特定する。ここで特定した転送先は、ノード（３）４−３である。ノード（２）４−２は更に、アクセス要求に含まれる指定データ集合の識別子として、移動先データ集合の識別子d14ec862を設定する。
シーケンスＳ０７に於いて、ノード（２）４−２は、アクセス要求を、ノード（３）４−３に転送する。このアクセス要求には、アクセスの対象となる指定データの識別子3c2af102と、この指定データの本体を含む移動先データ集合の識別子d14ec862とをパラメータとして含んでいる。
シーケンスＳ０８に於いて、ノード（３）４−３は、アクセス要求を受信したので、アクセス要求に含まれる指定データ集合の識別子d14ec862に基づき、指定データ集合を取得し、更に指定データの識別子3c2af102に基づき、指定データの実体（Session2.state）にアクセスする。ここで指定データ集合は、図３（ｂ）に示す移動先データ集合である。
シーケンスＳ０９に於いて、ノード（３）４−３は、アプリケーション４１により、指定データの実体（Session2.state）に所定の処理を行う。ここで、ノード（３）４−３のアプリケーション４１は、指定データの実体（Session2.state）を含む応答信号をクライアント２に応答することにより、指定データの実体（Session2.state）をクライアント２に送信する処理を行う。
【００６６】
（本実施形態の効果）
以上説明した本実施形態では、次の（Ａ）〜（Ｆ）のような効果がある。
【００６７】
（Ａ）  データ集合間のデータ移動を許容した分散処理システムに於いて、移動しているデータに係る要求（信号）を、２回以下の転送で処理することができる。これにより、データの転送が行われた場合でも、そのデータを処理する要求（信号）の転送回数を削減し、データの処理時間を削減することができる。
【００６８】
（Ｂ）  データ集合間のデータ移動を許容した分散処理システムに於いて、移動していないデータに係る要求（信号）は、転送無しに処理することができる。更に、そのデータを処理する要求（信号）の転送回数を削減し、データの処理時間を削減することができる。
【００６９】
（Ｃ）  指定データをデータ集合間で何回移動しても、当該指定データに係る情報を、移動元データ集合と移動先データ集合の２箇所のみに限定することができる。これにより、使用される記憶容量を削減することができる。
【００７０】
（Ｄ）  移動先データの識別子と対応づけて移動元情報（SessionX.orgParent）が設定されているので、指定データの移動が２回以上行われたときであっても、移動先データ集合を格納する移動先ノードから、移動元データ集合を格納する移動元ノードに対して、新たな移動先データ集合の識別子を送信することができる。
【００７１】
（Ｅ）  データが生成されたときの移動元データ集合に、当該データが移動されたとき、当該データが生成された状態に戻っている。これにより、使用される記憶容量を更に削減することができる。
【００７２】
（Ｆ）  移動要求には指定データ集合の識別子が含まれているので、各ノード４は、移動要求を受信した際に、指定データが格納されているデータ集合を迅速に特定することができる。
【００７３】
（変形例）
本発明は、上記実施形態に限定されることなく、本発明の趣旨を逸脱しない範囲で、変更実施が可能であり、例えば、次の（ａ）〜（ｄ）のようなものがある。
【００７４】
（ａ）  上記実施形態では、処理部４２２は、各種要求に含まれる指定データの識別子と指定データ集合の識別子の両方を用いて指定データを検索している。しかし、これに限られず、処理部４２２は、データの識別子から当該データが格納されているデータ集合の識別子を特定する手段を設けて、各種要求に含まれる指定データの識別子のみを用いて、指定データを検索してもよく、本発明では何ら制限しない。これにより、各種要求（信号）に含まれるパラメータの個数を減らすことができ、ネットワーク負荷を軽減することができる。
【００７５】
（ｂ）  データ集合間のデータ移動が発生する契機については、何らかの信号受信や、所定周期ごとの定期処理などが考えられる。しかし、これは分散データ管理プログラム４２上で提供されるサービス、つまり分散データ管理プログラム４２上で実行されるアプリケーション４１に依存するものであり、本発明では何ら制限しない。
【００７６】
（ｃ）  上記実施形態では、各ノード４が、分散データ管理プログラム４２を実行することにより、分散データを管理している。しかし、これに限られず、データ群４２１１とアドレス表４２１２とを格納するデータ部と、処理部４２２と同様な処理部を備える分散データ管理装置によって各ノード４を構成してもよく、本発明では何ら制限しない。
【００７７】
（ｄ）  上記実施形態では、ノード４の処理部４２２は、コンシステント・ハッシュ法により、データ集合の識別子を参照し、当該データ集合が格納されているノード４を特定している。しかし、これに限られず、ノード４の処理部４２２は、データ集合の識別子を参照して当該データ集合が格納されているノード４を特定することができる任意の方法を用いてもよく、本発明では何ら制限しない。
【符号の説明】
【００７８】
１  分散データ管理システム
２  クライアント
３  ロードバランサ
４  ノード  （分散データ管理装置）
４１  アプリケーション
４２  分散データ管理プログラム
４２１  データ部
４２１１  データ群
４２１２  アドレス表
４２２  処理部
４２２１  転送先決定部
４２２２  信号転送部
４２２３  ノード追加部
４２２４  ノード削除部
４２２５  データ取得部
４２２６  データ移動部
４２２７  データ保存部
５  ＩＤ空間
６  ノードの識別子
７  データ集合の識別子
【図１】
2014074944.tif 000003
【図２】
2014074944.tif 000004
【図３】
2014074944.tif 000005
【図４】
2014074944.tif 000006
【図５】
2014074944.tif 000007
【図６】
2014074944.tif 000008
【図７】
2014074944.tif 000009
【図８】
2014074944.tif 000010
【図９】
2014074944.tif 000011
【図１０】
2014074944.tif 000012