(57)【特許請求の範囲】
【請求項１】
データを分散して管理する分散管理システムで利用可能なデータ管理装置において、
所定のハッシュ関数を適用して得られるハッシュ値が第１の範囲に属するキー情報と、該キー情報に対応するデータとを関連づけて記憶する第１の記憶手段と、
前記第１の記憶手段に記憶されたデータのうち、対応するキー情報に前記所定のハッシュ関数を適用して得られるハッシュ値が、ある範囲に属する特定のデータの格納先を該データ管理装置から他のデータ管理装置に変更する変更処理を行う場合に、該特定のデータと、該特定のデータに対応するキー情報とを前記他のデータ管理装置に送信する通信手段と、
前記変更処理の際に、前記ある範囲に対応づけて前記他のデータ管理装置の識別情報を記憶する第２の記憶手段と、
前記変更処理の後に、第１のキー情報に対応するデータについての処理要求を受信した場合に、該第１のキー情報に前記所定のハッシュ関数を適用して得られたハッシュ値が前記ある範囲に属することを検出すると、該ある範囲に対応づけて記憶した前記他のデータ管理装置の識別情報を該要求の要求元に送信する制御手段と、
を備えたことを特徴とするデータ管理装置。
【請求項２】
前記第１の範囲より前記ある範囲が狭い場合に、前記第２の記憶手段は、前記第１の範囲に属し、かつ、前記ある範囲に属さない範囲であって、前記変更処理の実行後も該データ管理装置が格納先となるデータに対応するキー情報に前記所定のハッシュ関数を適用して得られる全てのハッシュ値を含む第２の範囲に対応づけて該データ管理装置の識別情報を記憶し、
前記制御手段は、前記変更処理の後に、第２のキー情報に対応するデータについての処理要求を受信した場合に、該第２のキー情報に前記所定のハッシュ関数を適用して得られたハッシュ値が前記第２の範囲に属することを検出すると、該第２のキー情報に対応するデータを前記第１の記憶手段から読み出して、該要求の要求元に送信する、
ことを特徴とする請求項１記載のデータ管理装置。
【請求項３】
キー情報に所定のハッシュ関数を適用して得られるハッシュ値の範囲ごとに、対応するデータの量を示す情報を記憶する第３の記憶手段と、
複数のデータ管理装置のそれぞれの識別情報と対応する格納領域についての空き容量を示す情報とを記憶する第４の記憶手段と、
前記通信手段は、前記第１の記憶手段に記憶されたデータのうち、対応するキー情報に前記所定のハッシュ関数を適用して得られるハッシュ値が、対応するデータの量が相対的に多い範囲に属する特定のデータの格納先を、該データ管理装置から、該データ管理装置よりも空き容量の多い他のデータ管理装置に変更する変更処理を行う場合に、該特定のデータと、該特定のデータに対応するキー情報とを前記他のデータ管理装置に送信する、
ことを特徴とする請求項１又は２記載のデータ管理装置。
【請求項４】
前記制御手段は、前記変更処理の際又は変更処理の後に、前記ある範囲に属する特定のデータに関する書き込み要求が受信された場合、前記他のデータ管理装置の識別情報を該要求の要求元に送信する、
ことを特徴とする請求項１乃至３いずれか一項記載のデータ管理装置。
【請求項５】
前記制御手段は、前記変更処理の際又は変更処理の後に、前記ある範囲に属する特定のデータに関する取得要求が受信された場合、前記特定のデータが前記他のデータ管理装置に送信されていなければ前記特定のデータを該要求の要求元に送信し、前記特定のデータが送信済みであれば前記他のデータ管理装置の識別情報を該要求の要求元に送信する、
ことを特徴とする請求項１乃至４いずれか一項記載のデータ管理装置。
【請求項６】
前記第３の記憶手段が記憶する情報に基づいて、該データ管理装置が対応する範囲の中でデータの量が相対的に多い範囲を複数の範囲に分割し、該分割の結果に基づいて前記第３の記憶手段及び前記第２の記憶手段を更新する分割手段を有することを特徴とする請求項３記載のデータ管理装置。
【請求項７】
前記第３の記憶手段が記憶する情報に基づいて、当該データ管理装置が対応する範囲の中でデータの量が相対的に少ない複数の範囲を統合し、該統合の結果に基づいて前記第３の記憶手段及び前記第２の記憶手段を更新する統合部を有することを特徴とする請求項３記載のデータ管理装置。
【請求項８】
前記第１の記憶手段は、アクセス性能に応じて複数の階層を有し、
データの操作頻度に応じて、データを第１の階層から第２の階層へ移動させる移動手段とを備え、
前記第２の記憶手段は、前記範囲及び前記階層の組み合わせごとにデータ管理装置の識別情報を記憶する、
ことを特徴とする請求項１乃至７いずれか一項記載のデータ管理装置。
【請求項９】
請求項１乃至８いずれか一項記載の複数の前記データ管理装置を含むデータ管理システム。
【請求項１０】
データを分散して管理する分散管理システムで利用可能なデータ管理装置が、
所定のハッシュ関数を適用して得られるハッシュ値が第１の範囲に属するキー情報と、該キー情報に対応するデータとを関連づけて第１の記憶手段に記憶し、
前記第１の記憶手段に記憶されたデータのうち、対応するキー情報に前記所定のハッシュ関数を適用して得られるハッシュ値が、ある範囲に属する特定のデータの格納先を該データ管理装置から他のデータ管理装置に変更する変更処理を行う場合に、該特定のデータと、該特定のデータに対応するキー情報とを前記他のデータ管理装置に送信し、
前記変更処理の際に、前記ある範囲に対応づけて前記他のデータ管理装置の識別情報を第２の記憶手段に記憶し、
前記変更処理の後に、第１のキー情報に対応するデータについての処理要求を受信した場合に、該第１のキー情報に前記所定のハッシュ関数を適用して得られたハッシュ値が前記ある範囲に属することを検出すると、該ある範囲に対応づけて記憶した前記他のデータ管理装置の識別情報を該要求の要求元に送信する、
処理を実行することを特徴とするデータ管理方法。
【請求項１１】
データを分散して管理する分散管理システムで利用可能なデータ管理装置に、
所定のハッシュ関数を適用して得られるハッシュ値が第１の範囲に属するキー情報と、該キー情報に対応するデータとを関連づけて第１の記憶手段に記憶し、
前記第１の記憶手段に記憶されたデータのうち、対応するキー情報に前記所定のハッシュ関数を適用して得られるハッシュ値が、ある範囲に属する特定のデータの格納先を該データ管理装置から他のデータ管理装置に変更する変更処理を行う場合に、該特定のデータと、該特定のデータに対応するキー情報とを前記他のデータ管理装置に送信し、
前記変更処理の際に、前記ある範囲に対応づけて前記他のデータ管理装置の識別情報を第２の記憶手段に記憶し、
前記変更処理の後に、第１のキー情報に対応するデータについての処理要求を受信した場合に、該第１のキー情報に前記所定のハッシュ関数を適用して得られたハッシュ値が前記ある範囲に属することを検出すると、該ある範囲に対応づけて記憶した前記他のデータ管理装置の識別情報を該要求の要求元に送信する、
処理を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ管理装置、データ管理システム、データ管理方法、及びプログラムに関する。
【背景技術】
【０００２】
Ｋｅｙ−Ｖａｌｕｅストア（以下、「ＫＶＳ」という。）は、プログラミング言語における連想配列に相当する機能を提供するデータベース技術又はデータベースをいう。すなわち、ＫＶＳは、管理対象のデータ（値）に、任意のキーを対応付けて、キーとデータとの組を管理する。データへのアクセスは、キーの指定によって行われる。キーとデータとの組の配置先が、複数のノードに分散されている形態は、分散Ｋｅｙ−Ｖａｌｕｅストア（以下、「分散ＫＶＳ」という。）と呼ばれる。
【０００３】
分散ＫＶＳでは、キーのハッシュ値が写像された空間（以下、「ハッシュ空間」という。）が、複数に分割されて各ノードに割り当てられる。ハッシュ空間の分割方法の一つとして、コンシステントハッシュ（Ｃｏｎｓｉｓｔｅｎｔ  Ｈａｓｈｉｎｇ）が知られている。コンシステントハッシュでは、各ノードの識別名（例えば、サーバ名）のハッシュ値によって、ハッシュ空間の中で各ノードが担当する範囲（以下、「担当範囲」という。）が決定される。例えば、ノードＡ、Ｂ、及びＣの三つのノードが存在し、ノードＡのサーバ名のハッシュ値は「１０」、ノードＢのサーバ名のハッシュ値は「４０」、ノードＣのサーバ名のハッシュ値は「９０」であるとする。なお、ハッシュ空間の全範囲は、０以上１００以下であるとする。
【０００４】
この場合、例えば、ノードＡの担当範囲は、１０以上４０未満となり、ノードＢの担当範囲は、４０以上９０未満となり、ノードＣの担当範囲は、９０以上１００未満及び０以上１０未満となる。この状態は、例えば、図１に示されるように表現することができる。
【０００５】
図１は、コンシステントハッシュに基づくハッシュ空間の分割例を示す図である。同図における円周Ｈは、管理対象となるハッシュ空間を示す。円周Ｈ上において、Ａ、Ｂ、又はＣの文字が記された円は、ノードＡ、Ｂ、又はＣを示す。範囲Ｈａは、ノードＡの担当範囲を示し、範囲Ｈｂは、ノードＢの担当範囲を示し、範囲Ｈｃは、ノードＣの担当範囲を示す。
【０００６】
クライアントは、アクセス対象のデータのキーのハッシュ値を算出し、当該ハッシュ値を担当範囲に含むノードに対して、アクセス要求を発行する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００８−２３３９６８号公報
【特許文献２】特許第４２８１６５８号公報
【特許文献３】特開２００７−３２３６６８号公報
【特許文献４】特許第４４１８２８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
コンシステントハッシュの場合、各ノードの担当範囲は、各ノードのサーバ名等に基づいて固定的に定まる。したがって、図１からも明らかなように、ノード間において担当範囲の大きさに大きな不均衡が生じる可能性がある。その結果、一部のノードにデータや負荷が偏る状態が容易に発生し、斯かる状態を是正するのが困難であるという問題がある。
【０００９】
そこで、１側面では、分散ＫＶＳにおけるデータの配置に関して柔軟性を向上させることのできるデータ管理装置、データ管理システム、データ管理方法、及びプログラムの提供を目的とする。
【課題を解決するための手段】
【００１０】
一つの案では、データを分散して管理する分散管理システムで利用可能なデータ管理装置において、所定のハッシュ関数を適用して得られるハッシュ値が第１の範囲に属するキー情報と、該キー情報に対応するデータとを関連づけて記憶する第１の記憶手段と、前記第１の記憶手段に記憶されたデータのうち、対応するキー情報に前記所定のハッシュ関数を適用して得られるハッシュ値が、ある範囲に属する特定のデータの格納先を該データ管理装置から他のデータ管理装置に変更する変更処理を行う場合に、該特定のデータと、該特定のデータに対応するキー情報とを前記他のデータ管理装置に送信する通信手段と、前記変更処理の際に、前記ある範囲に対応づけて前記他のデータ管理装置の識別情報を記憶する第２の記憶手段と、前記変更処理の後に、第１のキー情報に対応するデータについての処理要求を受信した場合に、該第１のキー情報に前記所定のハッシュ関数を適用して得られたハッシュ値が前記ある範囲に属することを検出すると、該ある範囲に対応づけて記憶した前記他のデータ管理装置の識別情報を該要求の要求元に送信する制御手段とを備えたことを特徴とする。
【発明の効果】
【００１１】
一態様によれば、分散ＫＶＳにおけるデータの配置に関して柔軟性を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】コンシステントハッシュに基づくハッシュ空間の分割例を示す図である。
【図２】本発明の実施の形態におけるデータ管理システムの構成例を示す図である。
【図３】本発明の実施の形態におけるサーバ装置のハードウェア構成例を示す図である。
【図４】第一の実施の形態のデータ管理システムの機能構成例を示す図である。
【図５】データ操作処理の基本的な処理手順を説明するためのシーケンス図である。
【図６】クライアント装置における配置情報記憶部の構成例を示す図である。
【図７】サーバ装置における配置情報記憶部の構成例を示す図である。
【図８】サーバ情報記憶部の構成例を示す図である。
【図９】担当範囲情報記憶部の構成例を示す図である。
【図１０】分割範囲の再配置処理の処理手順の一例を説明するためのシーケンス図である。
【図１１】再配置中の配置情報記憶部の例を示す図である。
【図１２】再配置後の配置情報記憶部の例を示す図である。
【図１３】再配置中におけるＰｕｔ要求に応じて実行される処理手順の一例を説明するためのシーケンス図である。
【図１４】再配置中におけるＧｅｔ要求に応じて実行される第一の処理手順の一例を説明するためのシーケンス図である。
【図１５】再配置中におけるＧｅｔ要求に応じて実行される第二の処理手順の一例を説明するためのシーケンス図である。
【図１６】第二の実施の形態のデータ管理システムの機能構成例を示す図である。
【図１７】分割範囲の分割及び統合の処理手順の一例を説明するためのフローチャートである。
【図１８】分割範囲の分割後の担当範囲情報記憶部の一例を示す図である。
【図１９】分割範囲の分割後の配置情報記憶部の一例を示す図である。
【図２０】第三の実施の形態のデータ管理システムの機能構成例を示す図である。
【図２１】第三の実施の形態の配置情報記憶部の構成例を示す図である。
【図２２】第三の実施の形態のサーバ情報記憶部の構成例を示す図である。
【図２３】第三の実施の形態の担当範囲情報記憶部の構成例を示す図である。
【図２４】第三の実施の形態においてＧｅｔ要求に応じて実行される処理手順の一例を説明するためのシーケンス図である。
【図２５】第三の実施の形態においてＰｕｔ要求に応じて実行される処理手順の一例を説明するためのシーケンス図である。
【発明を実施するための形態】
【００１３】
以下、図面に基づいて本発明の実施の形態を説明する。図２は、本発明の実施の形態におけるデータ管理システムの構成例を示す図である。同図において、データ管理システム１は、サーバ装置１０ａ、１０ｂ、及び１０ｃ等の複数のサーバ装置１０と、一以上のクライアント装置２０とを含む。各サーバ装置１０及びクライアント装置２０は、ＬＡＮ（Local Area Network）又はインターネット等のネットワーク３０（有線又は無線の別は問わない。）を介して通信可能とされている。
【００１４】
データ管理システム１は、分散Ｋｅｙ−Ｖａｌｕｅストア（以下、「分散ＫＶＳ」という。）として機能するコンピュータシステムである。すなわち、データ管理システム１では、キーとデータ（値）との複数の組が、複数のサーバ装置１０に分散されて管理される。
【００１５】
各サーバ装置１０は、Ｋｅｙ−Ｖａｌｕｅストアとして機能する、データ管理するノードの一例である。各サーバ装置１０は、当該サーバ装置１０に割り当てられたハッシュ空間の範囲（以下、「担当範囲」という。）に属するキー及びデータの組を管理（記憶）する。キーは、データの識別情報又はラベルに相当する。キーとしては、データ名、ファイル名、データＩＤ等、各データを識別可能な情報を用いることができる。データの種別は所定のものに限定されない。例えば、数値、文字、文字列、文書データ、画像データ、動画データ、音声データ、又はその他の電子データ等、各種のデータが管理対象となりうる。
【００１６】
ハッシュ空間とは、キーに対して所定のハッシュ関数を適用して得られるハッシュ値が写像された空間をいう。または、ハッシュ空間は、当該ハッシュ値が取り得る範囲として捉えられてもよい。本実施の形態において、ハッシュ空間は、サーバ装置１０の台数よりも大きな数に分割される。例えば、サーバ装置１０の台数が「３」であれば、ハッシュ空間は４以上に分割される。ハッシュ空間の分割後の各範囲（以下、「分割範囲」という。）は、任意の方法によって各サーバ装置１０に割り当てられる。すなわち、本実施の形態では、サーバ装置１０の識別情報（例えば、サーバ名）に基づいて、当該サーバ装置１０の担当範囲が決まるのではなく、まず、ハッシュ空間が分割範囲に分割された後に、分割範囲が各サーバ装置１０に割り当てられる。ハッシュ空間は、サーバ装置１０の台数を超えて分割されるため、２以上の分割範囲を担当範囲に含むサーバ装置１０が存在する。
【００１７】
クライアント装置２０は、各サーバ装置１０に管理されているデータを利用するコンピュータである。
【００１８】
図３は、本発明の実施の形態におけるサーバ装置のハードウェア構成例を示す図である。図３のサーバ装置１０は、それぞれバスＢで相互に接続されているドライブ装置１００、補助記憶装置１０２、メモリ装置１０３、ＣＰＵ１０４、及びインタフェース装置１０５等を有する。
【００１９】
サーバ装置１０での処理を実現するプログラムは、記録媒体１０１によって提供される。プログラムを記録した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。但し、プログラムのインストールは必ずしも記録媒体１０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００２０】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従ってサーバ装置１０に係る機能を実行する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。
【００２１】
なお、記録媒体１０１の一例としては、ＣＤ−ＲＯＭ、ＤＶＤディスク、又はＵＳＢメモリ等の可搬型の記録媒体が挙げられる。また、補助記憶装置１０２の一例としては、ＨＤＤ（Hard Disk Drive）又はフラッシュメモリ等が挙げられる。記録媒体１０１及び補助記憶装置１０２のいずれについても、コンピュータ読み取り可能な記録媒体に相当する。
【００２２】
なお、クライアント装置２０も、図３と同様のハードウェアを有していてもよい。但し、クライアント装置２０がユーザによって直接操作される場合、キーボード及びマウス等の入力装置や、液晶ディスプレイ等の表示装置がクライアント装置２０に接続されているのが好適である。
【００２３】
図４は、第一の実施の形態のデータ管理システムの機能構成例を示す図である。同図において、クライアント装置２０は、操作要求部２１及び配置情報記憶部２２等を有する。
【００２４】
操作要求部２１は、サーバ装置１０に対してデータの操作を要求する。データの操作の一例として、Ｐｕｔ及びＧｅｔが有る。データのＰｕｔとは、データの書き込みをいい、データのＧｅｔとは、データの取得をいう。操作要求部２１は、例えば、クライアント装置２０にインストールされたプログラムがクライアント装置２０のＣＰＵに実行させる処理により実現される。
【００２５】
配置情報記憶部２２は、分割範囲ごとに、当該分割範囲に対応する（当該分割範囲を担当範囲に含む）サーバ装置１０の識別情報（以下、「サーバ名」という。）を記憶する。配置情報記憶部２２は、例えば、クライアント装置２０の補助記憶装置を用いて実現可能である。
【００２６】
各サーバ装置１０は、データ記憶部１１、配置情報記憶部１２、サーバ情報記憶部１３、及び担当範囲情報記憶部１４等を有する。これら各記憶部は、例えば、補助記憶装置１０２を用いて実現可能である。但し、配置情報記憶部１２、サーバ情報記憶部１３、及び担当範囲情報記憶部１４は、サーバ装置１０とネットワークを介して接続される記憶装置を用いて実現されてもよい。
【００２７】
データ記憶部１１は、キーとデータとの組を記憶する。配置情報記憶部１２は、分割範囲ごとに、当該分割範囲に対応するサーバ装置１０のサーバ名を記憶する。サーバ情報記憶部１３は、各サーバ装置１０のデータ記憶部１１の状態を示す情報（例えば、空き容量等）を記憶する。担当範囲情報記憶部１４は、担当範囲に属する分割範囲ごとに、データの配置状態（データ数やデータの量）を示す情報を記憶する。
【００２８】
各サーバ装置１０は、また、操作部１５、再配置実行部１６、及び情報交換部１７等を有する。
【００２９】
操作部１５は、クライアント装置２０からのデータの操作要求（Ｐｕｔ要求又はＧｅｔ要求等）に応じた処理を実行する。具体的には、Ｐｕｔ要求が受信された場合、操作部１５は、Ｐｕｔ要求に指定されているキーとデータとの組をデータ記憶部１１に記憶する。また、Ｇｅｔ要求が受信された場合、操作部１５は、Ｇｅｔ要求に指定されているキーに対するデータをデータ記憶部１１より取得し、当該データをクライアント装置２０に返信する。
【００３０】
再配置実行部１６は、自装置（当該サーバ装置１０）の担当範囲の中で、一部の分割範囲にデータの配置が偏った場合に、当該分割範囲の担当を他のサーバ装置１０に変更（再配置）するための処理を実行する。分割範囲の担当の変更（再配置）は、当該分割範囲に属するデータの再配置をも意味する。同図において、再配置実行部１６は、再配置対象特定部１６１、再配置先特定部１６２、及び転送部１６３を含む。再配置対象特定部１６１は、再配置対象とする分割範囲を特定する。例えば、再配置対象特定部１６１は、相対的にデータの量が多い分割範囲を再配置対象として特定する。再配置先特定部１６２は、再配置対象とされた分割範囲に関して再配置先とするサーバ装置１０を判定する。例えば、再配置先特定部１６２は、自装置よりも空き容量の多い他のサーバ装置１０を再配置先として特定する。転送部１６３は、再配置対象とされた分割範囲に属するキー及びデータの組を、再配置先のサーバ装置１０に転送する。
【００３１】
情報交換部１７は、配置情報記憶部１２が記憶する情報及びサーバ情報記憶部１３が記憶する情報を他のサーバ装置２０と定期的に、又は当該情報が更新されたときに交換する。したがって、各サーバ装置２０の配置情報記憶部１２及びサーバ情報記憶部１３の状態は、情報交換部１７によって同期が図られる。
【００３２】
なお、同図では、便宜上、サーバ装置１０ａ及び１０ｂのみが図示されているが、サーバ装置１０ｃ等も、サーバ装置１０ａ及び１０ｂと同様の機能構成を有する。また、特定のサーバ装置１０又は特定のサーバ装置の構成要素に言及する場合、当該特定のサーバ装置１０の末尾のアルファベット（ａ、ｂ、又はｃ等）と同じアルファベットを符号の後に付加する。
【００３３】
以下、データ管理システム１において実行される処理手順について説明する。図５は、データ操作処理の基本的な処理手順を説明するためのシーケンス図である。
【００３４】
クライアント装置２０において、データの操作（Ｐｕｔ又はＧｅｔ）の必要が生じると、操作要求部２１は、操作対象のデータのキー（以下、「データキー」という。）に対して所定のハッシュ関数を適用し、当該データキーに対するハッシュ値を取得（算出）する（Ｓ１０１）。続いて、操作要求部２１は、配置情報記憶部２２を参照して、操作対象のデータを記憶しているサーバ装置１０（担当サーバ）を判定する（Ｓ１０２）。
【００３５】
図６は、クライアント装置における配置情報記憶部の構成例を示す図である。同図に示されるように、配置情報記憶部２２は、分割範囲ごとに、当該分割範囲のハッシュ値の範囲と当該分割範囲を担当範囲に含むサーバ装置１０（当該分割範囲の担当サーバ）のサーバ名とを記憶する。
【００３６】
したがって、操作要求部２１は、ステップＳ１０１において取得されたハッシュ値が含まれる分割範囲に対応するサーバ名を配置情報記憶部２２を参照して判定する。ここでは、サーバ装置１０ａが担当サーバであると判定されたこととする。なお、本実施の形態において、サーバ装置１０ａ、１０ｂ、１０ｃのサーバ名は、順番に、「Ａ」、「Ｂ」、「Ｃ」であるとする。
【００３７】
続いて、操作要求部２１は、担当サーバであるサーバ装置１０ａに対して操作対象のデータの操作要求（Ｐｕｔ要求又はＧｅｔ要求）を送信する（Ｓ１０３）。Ｐｕｔ要求には、データキー及び書き込み（登録）対象のデータが指定される。Ｇｅｔ要求には、取得対象のデータのデータキーが指定される。
【００３８】
当該操作要求を受信したサーバ装置１０ａの操作部１５ａは、配置情報記憶部１２ａを参照して、当該操作要求において操作対象とされているデータが属する分割範囲に関して、サーバ装置１０ａが担当サーバであるか否かを判定する（Ｓ１０４）。すなわち、当該データが、当該サーバ装置１０ａに配置されているか（記憶されているか）否かが判定される。
【００３９】
図７は、サーバ装置における配置情報記憶部の構成例を示す図である。同図に示されるように、配置情報記憶部１２ａは、配置情報記憶部２２（図６）に対して、バージョンの項目（列）が追加されている。バージョンは、分割範囲とサーバ名（担当サーバ）との対応関係が変化するたびに（すなわち、分割範囲の再配置が実行されるたびに）、１が加算される情報である。また、分割範囲の再配置の実行中において、バージョンは、再配置の実行中であることを示す値に更新される。したがって、バージョンは、分割範囲に関して再配置の実行中であるか否かを判定するためにも用いられる。なお、同図では、配置情報記憶部１２ａの例が示されているが、各サーバ装置１０の配置情報記憶部１２の記憶内容は、各サーバ装置１０の情報交換部１７によって同期が図られているため、基本的に一致する。
【００４０】
操作部１５ａは、操作要求に指定されたデータキーに所定のハッシュ関数を適用してハッシュ値を算出し、配置情報記憶部１２ａにおいて、当該ハッシュ値が含まれる分割範囲に対応するサーバ名を特定することにより、サーバ装置１０ａが担当サーバであるか否かを判定する。すなわち、当該ハッシュ値が含まれる分割範囲のサーバ名が、「Ａ」であれば、サーバ装置１０ａが担当サーバであると判定される。
【００４１】
サーバ装置１０ａが担当サーバである場合、操作部１５ａは、操作要求に応じた処理を実行する（Ｓ１０５）。操作要求がＰｕｔ要求である場合、操作部１５ａは、Ｐｕｔ要求に指定されたデータキー及びデータの組を、データ記憶部１１ａに記憶する。この際、当該データキーに対応付けられてデータ記憶部１１ａに記憶されているデータが有る場合、データ記憶部１１ａに記憶されているデータは、Ｐｕｔ要求において指定されたデータによって更新（上書き）される。また、操作要求がＧｅｔ要求である場合、操作部１５ａは、Ｇｅｔ要求に指定されたデータキーに対応づけられているデータをデータ記憶部１１ａより取得する。
【００４２】
なお、操作要求が、Ｐｕｔ要求である場合、操作部１５ａは、必要に応じて、当該サーバ装置１０のサーバ情報記憶部１３ａが記憶している情報及び担当範囲情報記憶部１４ａが記憶している情報を更新する。
【００４３】
図８は、サーバ情報記憶部の構成例を示す図である。同図において、サーバ情報記憶部１３ａは、データ管理システム１に含まれるサーバ装置１０ごとに、サーバ名、バージョン、全体容量、及び空き容量等を記憶する。バージョンは、全体容量や空き容量等の更新に応じて値が大きくなるパラメータである。すなわち、バージョンは、サーバ情報記憶部１３ａのレコードの新しさを示すパラメータである。全体容量は、各サーバ装置１０のデータ記憶部１１の容量である。すなわち、各サーバ装置１０が管理可能（記憶可能）なデータ量の最大値（上限値）である。空き容量は、各サーバ装置１０のデータ記憶部１１の空き容量である。なお、同図では、サーバ情報記憶部１３ａの例が示されているが、各サーバ装置１０のサーバ情報記憶部１３の記憶内容は、各サーバ装置１０の情報交換部１７によって同期が図られているため、基本的に一致する。
【００４４】
Ｐｕｔ要求に応じたデータの書き込みによって、サーバ装置１０ａのデータ記憶部１１ａの空き容量が変化した場合、操作部１５ａは、サーバ情報記憶部１３ａにおいて、サーバ装置１０ａに対するレコードの空き容量の値を変化後の値に更新する。更新後のレコードの内容は、情報交換部１７ａによって、他のサーバ装置１０に通知（転送）される。通知のタイミングは定期的なものであってもよいし、更新に応じたものであってもよいし、その双方の組み合わせであってもよい。また、他のサーバ装置１０への通知方法は、マルチキャストであってもよいし、仮想的なリングトポロジ上を、順番に伝達されてもよい。
【００４５】
また、図９は、担当範囲情報記憶部の構成例を示す図である。同図では、サーバ装置１０ａにおける担当範囲情報記憶部１４ａの記憶内容が例示されている。他のサーバ装置１０の担当範囲情報記憶部１４も、同図の担当範囲情報記憶部１４ａと同様の構成を有するが、記憶内容は、各サーバ装置１０の担当範囲に応じて異なる。
【００４６】
同図において、担当範囲情報記憶部１４ａは、サーバ装置１０ａの担当範囲に含まれる分割範囲ごとに、当該分割範囲のハッシュ値の範囲、データ数、及びデータ総量等を記憶する。データ数は、データキーのハッシュ値が分割範囲に属するデータの数である。データ総量は、データキーのハッシュ値が分割範囲に属するデータのデータサイズ（データ量）の総和（総量）である。
【００４７】
操作部１５ａは、Ｐｕｔ要求に指定されたデータが書き込まれた（配置された）、分割範囲のデータ数及びデータ総量が、当該データの書き込みによって変化した場合、当該分割範囲に関して、担当範囲情報記憶部１４ａにおけるデータ数又はデータ総量の値を更新する。
【００４８】
続いて、操作部１５ａは、操作要求に対する応答を、操作要求元のクライアント装置２０に返信する（Ｓ１０６）。Ｐｕｔ要求に対しては、データの書き込みの成否を示す情報が返信される。Ｇｅｔ要求に対しては、取得されたデータが返信される。
【００４９】
続いて、分割範囲の再配置処理について説明する。図１０は、分割範囲の再配置処理の処理手順の一例を説明するためのシーケンス図である。同図では、サーバ装置１０ａ（サーバＡ）の担当する分割範囲が、サーバ装置１０ｃ（サーバＣ）に再配置される例が示されている。
【００５０】
各サーバ装置１０の再配置実行部１６は、例えば、定期的（周期的）にサーバ情報記憶部１３（図８）を参照して、当該サーバ装置１０のデータ記憶部１１の状態が、再配置の実行条件（以下、「再配置実行条件」という。）を満たすか否かを判定する。再配置実行条件は、運用に応じて適宜定められればよい。例えば、全てのサーバ装置１０の中で、空き容量又は空き容量率が最も少ないことが再配置実行条件の一例として挙げられる。ここで、空き容量率は、全体容量に対する空き容量の割合である。但し、空き容量又は空き容量率が最も少ないことが再配置実行条件となった場合、常に再配置が実行されることになってしまう。全てのサーバ装置１０の中で、空き容量又は空き容量率が最も少ないサーバ装置１０は、常に存在するからである。したがって、再配置の頻発を抑制するための条件が更に付加されるとよい。例えば、データ管理システム１全体において、再配置が実行されてから所定時間が経過するまでは再配置の実行は禁止されてもよい。すなわち、再配置は、所定時間内において１回に制限されてもよい。また、他のいずれかの（又は他の全ての）サーバ装置１０の空き容量又は空き容量率よりも、当該サーバ装置１０の空き容量又は空き容量率が所定値分下回っていることが再配置実行条件とされてもよい。
【００５１】
図１０では、ステップＳ１１１において、サーバ装置１０ａの再配置実行部１６ａが、サーバ装置１０ａのデータ記憶部１１ａの状態が再配置条件を満たすと判定したこととする。
【００５２】
続いて、再配置対象特定部１６１ａは、再配置対象とする分割範囲を特定する（Ｓ１１２）。例えば、担当範囲情報記憶部１４ａにおいて、データ数又はデータ総量が相対的に大きい分割範囲が再配置対象として特定される。具体的には、データ数又はデータ総量が最大である又は上位Ｎ番目までの分割範囲が再配置対象として特定される。上位Ｎ番目のＮの値は、サーバ情報記憶部１３において、サーバ装置１０ａと、他のサーバ装置１０との空き容量又は空き容量率との差に応じて定められてもよい。すなわち、再配置の実行後において、サーバ装置１０ａと、他のサーバ装置１０との空き容量又は空き容量率との差が、所定値未満となるようにＮの値が決定されてもよい。同図では、「１０以上２０未満」の分割範囲が再配置対象として特定されたこととする。
【００５３】
続いて、再配置先特定部１６２ａは、サーバ情報記憶部１３ａを参照して、再配置先とするサーバ装置１０を特定する（Ｓ１１３）。例えば、サーバ情報記憶部１３ａにおいて、空き容量又は空き容量率が最大であるサーバ装置１０が、再配置先として特定される。同図では、サーバ装置１０ｃが、再配置先として特定されたこととする。
【００５４】
なお、再配置対象及び再配置先は、上記以外の方法によって特定されてもよい。
【００５５】
続いて、転送部１６３ａは、再配置先のサーバ装置１０ｃに対して、再配置対象の分割範囲の受入の可否の問い合わせを送信する（Ｓ１１４）。当該問い合わせには、例えば、分割範囲のハッシュ値の範囲を示す情報、当該分割範囲のデータ数及びデータ総量等が指定される。当該データ数及びデータ総量は、担当範囲情報記憶部１４ａより取得可能である。
【００５６】
サーバ装置１０ｃの転送部１６３ｃは、当該問い合わせに応じ、受入の可否を判定する（Ｓ１１５）。例えば、転送部１６３ｃは、当該問い合わせに指定されたデータ数及びデータ総量分の空き容量が、データ記憶部１１ｃに有るか否かを判定する。なお、データ装置１０ａのサーバ情報記憶部１３ａにおけるサーバ装置１０ｃに関する情報と、データ装置１０ｃのサーバ情報記憶部１３ｃにおけるサーバ装置１０ｃに関する情報との間にはずれ（相違点）が生じる可能性がある。すなわち、各サーバ装置１０の情報交換部１７による情報交換のタイミングによっては、一時的に各サーバ装置１０における情報の間に不整合が発生する可能性がある。また、サーバ装置１０ｃは、ステップＳ１１４の問い合わせの直前に、サーバ装置１０ｂより、ステップＳ１１４と同様の問い合わせを受け、当該問い合わせに対して肯定的な応答をしている可能性もある。したがって、ステップＳ１０４の前に、サーバ装置１０ａにおいて、サーバ装置１０ｃの空き容量が十分であることが確認されていたとしても、転送部１６３ｃは、必ずしも受け入れが可能であると判定するとは限らない。
【００５７】
受け入れ可能である場合、転送部１６３ｃは、配置情報記憶部１２ｃにおいて、再配置対象の分割範囲に関するレコードを図１１に示されるように更新する（Ｓ１１６）。
【００５８】
図１１は、再配置中の配置情報記憶部の例を示す図である。同図の配置情報記憶部１２ｃと、図７の配置情報記憶部１２ａとを比較すると、「１０以上２０未満」の分割範囲に関して、バージョンが１０から１１に更新され、サーバ名が「Ａ」から「Ａ→Ｃ」に更新されている。「Ａ→Ｃ」は、サーバ装置１０ａからサーバ装置１０ｃに再配置中（転送中（変更処理中））であることを示す。
【００５９】
続いて、転送部１６３ｃは、サーバ装置１０ａに対して、データの転送要求を送信する（Ｓ１１７）。当該転送要求には、配置情報記憶部１２ｃにおいて更新されたレコードも含められる。サーバ装置１０ａの転送部１６３ａは、当該転送要求を受信すると、当該転送要求に含められているレコードを、配置情報記憶部１２ａに上書きする。その結果、サーバ装置１０ａの配置情報記憶部１２ａの記憶内容も、図１１に示した通りとなる。なお、各サーバ装置１０の配置情報記憶部１２のレコードは、情報交換部１７によって交換される。他のサーバ装置１０より配置情報記憶部１２のレコードを受信した情報交換部１７は、受信されたレコードのバージョンと、当該サーバ装置１０の配置情報記憶部１２において当該レコードに対応するレコードのバージョンとを比較する。受信されたレコードのバージョンの方が新しい場合（値が大きい場合）、情報交換部１７は、当該サーバ装置１０の配置情報記憶部１２に対して受信されたレコードを上書きする。
【００６０】
したがって、配置情報記憶部１２ｃにおいて更新されたレコードは、情報交換部１７ｃによって、他のサーバ装置１０に通知（転送）される。よって、当該レコードは、必ずしもステップＳ１１７における転送要求に含まれなくてもよい。但し、再配置処理の当事者であるサーバ装置１０ａとサーバ装置１０ｃとの間では、配置情報記憶部１２の記憶内容の不整合の期間は短い方が望ましい。したがって、配置情報記憶部１２ｃにおいて更新されたレコードは、ステップＳ１１７における転送要求に含まれるのが望ましい。
【００６１】
続いて、転送部１６３ａは、再配置対象の分割範囲に属する全てのデータキー及びデータの組（レコード）をデータ記憶部１１ａより取得し、サーバ装置１０ｃに転送する（Ｓ１１８）。この際、転送が完了したデータキー及びデータの組は、データ記憶部１１ａより削除される。全てのデータキー及びデータの組の転送が完了すると、転送部１６３ａは、サーバ情報記憶部１３ａ及び担当範囲情報記憶部１４ａの記憶内容を更新する（Ｓ１１９）。すなわち、転送部１６３ａは、サーバ情報記憶部１３ａに関してサーバ装置１０ａに対する空き容量を、転送されたデータキー及びデータの組の分だけ増加させる。また、転送部１６３ａは、再配置対象の分割範囲に係るレコードを担当範囲情報記憶部１４ａより削除する。なお、サーバ情報記憶部１３ａ及び担当範囲情報記憶部１４ａの記憶内容の更新は、データキー及びデータの組の転送の進行に応じて、逐次的に行われてもよい。
【００６２】
一方、サーバ装置１０ｃの転送部１６３ｃは、受信されるデータキー及びデータの組をデータ記憶部１１ｃに記憶する。転送対象の全てのデータキー及びデータの組の受信が完了すると、転送部１６３ｃは、サーバ情報記憶部１３ｃ、担当範囲情報記憶部１４ｃ、及び配置情報記憶部１２ｃの記憶内容を更新する（Ｓ１２１）。すなわち、転送部１６３ｃは、データ記憶部１１ｃに関して、サーバ装置１０ｃに対する空き容量を、受信されたデータキー及びデータの組の分だけ減少させる。また、転送部１６３ｃは、担当範囲情報記憶部１４ｃに対して、再配置対象の分割範囲に係るレコードを追加する。なお、サーバ情報記憶部１３ｃ及び担当範囲情報記憶部１４ｃの記憶内容の更新は、データキー及びデータの組の転送の進行に応じて、逐次行われてもよい。
【００６３】
また、転送部１６３ｃは、配置情報記憶部１２ｃにおいて、再配置対象の分割範囲に関するレコードを図１２に示されるように更新する。
【００６４】
図１２は、再配置後の配置情報記憶部の例を示す図である。同図の配置情報記憶部１２ｃと、図１１の配置情報記憶部１２ｃとを比較すると、「１０以上２０未満」の分割範囲に関して、バージョンが１１から１２に更新され、サーバ名が「Ａ→Ｃ」から「Ｃ」に更新されている。
【００６５】
サーバ装置１０ａにおいて更新されたサーバ情報記憶部１３ａ及び担当範囲情報記憶部１４ａの記憶内容、並びにサーバ装置１０ｃにおいて更新されたサーバ情報記憶部１３ｃ、担当範囲情報記憶部１４ｃ、及び配置情報記憶部１２ｃの記憶内容は、各サーバ装置１０の情報交換部１７による処理によって、各サーバ装置１０に伝達及び反映される。
【００６６】
なお、ステップＳ１１５において、転送部１６３ｃは、受け入れは不可能であると判定すると、受け入れは不可能であることを示す応答（エラー応答）をサーバ装置１０ａに返信する。この場合、サーバ装置１０ａの再配置実行部１６ａは、ステップＳ１１１からの処理を繰り返す。繰り返しの際においては、例えば、再配置対象や再配置先が変更されてもよい。また、繰り返しの間に、各サーバ装置１０の情報交換部１７による情報交換によって、サーバ情報記憶部１３ａの記憶内容が更新された場合は、更新後の記憶内容に基づいて、改めて再配置対象及び再配置先等が判定されればよい。
【００６７】
続いて、再配置の実行中（図１０のステップＳ１１８の実行中）において、再配置対象の分割範囲に属するデータに関するＰｕｔ要求が、サーバ装置１０ａにおいて受信された場合に実行される処理手順について説明する。
【００６８】
図１３は、再配置中におけるＰｕｔ要求に応じて実行される処理手順の一例を説明するためのシーケンス図である。
【００６９】
ステップＳ１３１及びＳ１３２の処理内容は、図５のステップＳ１０１及びＳ１０２と同じである。ここでは、「１０以上２０未満」の分割範囲に属するデータがＰｕｔ対象であるとする。したがって、クライアント装置２０の操作要求部２１は、図６に示した配置情報記憶部２２を参照して、サーバ装置１０ａが担当サーバであると判定する。
【００７０】
続いて、クライアント装置２０の操作要求部２１は、Ｐｕｔ要求をサーバ装置１０ａに対して送信する（Ｓ１３３）。当該Ｐｕｔ要求を受信したサーバ装置１０ａの操作部１５ａは、配置情報記憶部１２ａを参照して、Ｐｕｔ対象とされているデータが属する分割範囲に関して、サーバ装置１０ａが担当サーバであるか否かを判定する（Ｓ１３４）。図１０のステップＳ１１８の実行中において、サーバ装置１０ａの配置情報記憶部１２ａの記憶内容は、図１１に示されるように更新されている。したがって、操作部１５ａは、サーバ装置１０ｃが担当サーバであると判定する（サーバ装置１０ｃが担当サーバであることを検出する）。そこで、操作部１５ａは、Ｐｕｔ要求に応じた処理は実行せずに、Ｐｕｔの失敗（エラー）を示し、かつ、Ｐｕｔ対象のデータが属する分割範囲はサーバ装置１０ａからサーバ装置１０ｃへ再配置中であることを示す応答を、クライアント装置２０に返信する（Ｓ１３５）。すなわち、当該応答には、サーバ装置１０ａのサーバ名とサーバ装置１０ｃのサーバ名とが含まれる。但し、サーバ装置１０ａのサーバ名は含まれなくてもよい。再配置元がサーバ装置１０ａであることは、クライアント装置２０は判定可能だからである。
【００７１】
クライアント装置２０の操作要求部２１は、当該応答を受信すると、配置情報記憶部２２において、Ｐｕｔ対象のデータが属する分割範囲のサーバ名を、「Ａ→Ｃ」に更新する（Ｓ１３６）。すなわち、当該分割範囲がサーバ装置１０ａからサーバ装置１０ｃへ再配置中であることが、配置情報記憶部２２に反映される。
【００７２】
続いて、操作要求部２１は、Ｐｕｔ対象のデータが属する分割範囲がサーバ装置１０ｃへ再配置中であることに基づいて、サーバ装置１０ｃに対して、ステップＳ１３３と同じ内容のＰｕｔ要求を送信する（Ｓ１３７）。このように、Ｐｕｔの失敗と共に、Ｐｕｔ対象のデータが属する分割範囲はサーバ装置１０ａからサーバ装置１０ｃへ再配置中であることを示す応答がサーバ装置１０ａから返信されることで、クライアント装置２０は、Ｐｕｔ要求の送信先とすべきサーバ装置１０を特定することができる。
【００７３】
当該Ｐｕｔ要求を受信したサーバ装置１０ｃの操作部１５ｃは、配置情報記憶部１２ｃを参照して、Ｐｕｔ対象とされているデータが属する分割範囲に関して、サーバ装置１０ｃが担当サーバであるか否かを判定する。このタイミングにおいて、配置情報記憶部１２ｃの記憶内容は、図１１に示される通りである。したがって、操作部１５ｃは、サーバ装置１０ｃが担当サーバに移行中であると判定する。
【００７４】
続いて、操作部１５ｃは、Ｐｕｔ要求に応じた処理を実行する（Ｓ１３９）。すなわち、Ｐｕｔ要求に指定されたデータキー及びデータが、データ記憶部１１ｃに書き込まれる。続いて、操作部１５ｃは、Ｐｕｔ要求の成否を示す情報を含む応答をクライアント装置２０に返信する（Ｓ１４０）。
【００７５】
なお、ステップＳ１３９において書き込まれたデータと同一データキーに係るデータが、その後にサーバ装置１０ａから転送された場合、転送部１６３ｃは、サーバ装置１０ｃから転送されたデータを破棄する。Ｐｕｔ要求に応じた処理が無効となってしまうのを回避するためである。
【００７６】
続いて、再配置の実行中（図１０のステップＳ１１８の実行中）において、再配置対象の分割範囲に属するデータに関するＧｅｔ要求が、サーバ装置１０ａにおいて受信された場合に実行される処理手順について説明する。
【００７７】
図１４は、再配置中におけるＧｅｔ要求に応じて実行される第一の処理手順の一例を説明するためのシーケンス図である。
【００７８】
ステップＳ１５１〜Ｓ１５３の処理内容は、ステップＳ１５３における操作要求がＧｅｔ要求である点を除いて、図１３のステップＳ１３１〜Ｓ１３３と同じである。
【００７９】
Ｇｅｔ要求を受信したサーバ装置１０ａの操作部１５ａは、配置情報記憶部１２ａを参照して、Ｇｅｔ対象とされているデータが属する分割範囲に関して、サーバ装置１０ａが担当サーバであるか否かを判定する（Ｓ１５４）。図１０のステップＳ１１８の実行中において、サーバ装置１０ａの配置情報記憶部１２ａの記憶内容は、図１１に示されるように更新されている。したがって、操作部１５ａは、Ｇｅｔ対象とされているデータが属する分割範囲は、サーバ装置１０ａからサーバ装置１０ｃに再配置中であることを認識する（サーバ装置１０ａからサーバ装置１０ｃに再配置中であることを検出する）。但し、当該データが未転送であれば、Ｇｅｔ要求に応じることができる。そこで、操作部１５ａは、Ｇｅｔ要求に指定されたデータキーに対応するデータに関して、データ記憶部１１ａからの取得を試みる（Ｓ１５５）。ここでは、当該データの取得に失敗したこととする。すなわち、当該データは、既に転送済みであったとする。
【００８０】
データの取得の失敗に応じ、操作部１５ａは、Ｇｅｔの失敗（エラー）を示し、かつ、Ｇｅｔ対象のデータが属する分割範囲はサーバ装置１０ａからサーバ装置１０ｃへ再配置中であることを示す応答を、クライアント装置２０に返信する（Ｓ１５６）すなわち、当該応答には、サーバ装置１０ａのサーバ名とサーバ装置１０ｃのサーバ名とが含まれる。但し、サーバ装置１０ａのサーバ名は含まれなくてもよい。
【００８１】
クライアント装置２０の操作要求部２１は、当該応答を受信すると、配置情報記憶部２２において、Ｇｅｔ対象のデータが属する分割範囲のサーバ名を、「Ａ→Ｃ」に更新する（Ｓ１５７）。続いて、操作要求部２１は、Ｇｅｔの失敗、及びＧｅｔ対象のデータが属する分割範囲がサーバ装置１０ｃへ再配置中であることに基づいて、サーバ装置１０ｃに対して、ステップＳ１５３と同じ内容のＧｅｔ要求を送信する（Ｓ１５８）。このように、Ｇｅｔの失敗と共に、Ｇｅｔ対象のデータが属する分割範囲はサーバ装置１０ａからサーバ装置１０ｃへ再配置中であることを示す応答がサーバ装置１０ａから返信されることで、クライアント装置２０は、Ｇｅｔ要求の送信先とすべきサーバ装置１０を特定することができる。
【００８２】
Ｇｅｔ要求を受信したサーバ装置１０ｃの操作部１５ｃは、ステップＳ１５４及びＳ１５５と同様の処理を実行する（Ｓ１５９、Ｓ１６０）。Ｇｅｔ対象のデータは既にサーバ装置１０ｃに転送されているため、ステップＳ１６０では、当該データの取得に成功する。そこで、操作部１５ｃは、取得されたデータを含む応答をクライアント装置２０に返信する（Ｓ１６１）。その結果、クライアント装置２０は、所望のデータを入手することができる。
【００８３】
なお、ステップＳ１５５において、データの取得に成功した場合、すなわち、Ｇｅｔ対象のデータが未転送であった場合、操作部１５ａは、当該データを含む応答をクライアント装置２０に返信する。この際、当該データが属する分割範囲がサーバ装置１０ａからサーバ装置１０ｃへ再配置中であることを示す情報は、当該応答に含まれてもよいし、含まれなくてもよい。次回に当該分割範囲に属するデータに関してクライアント装置２０から操作要求が受信され、当該データが転送済みのために当該操作に失敗した際に、サーバ装置１０ａは、ステップＳ１５６と同様に当該分割範囲が再配置中であることをクライアント装置２０に通知できるからである。
【００８４】
続いて、図１４の処理の実行後であって、かつ、図１０のステップＳ１１８が継続中であるタイミングにおいて、再配置対象の分割範囲に属するデータに関するＧｅｔ要求が、サーバ装置１０ａにおいて再度受信された場合に実行される処理手順について説明する。図１４の処理の実行後であるということは、クライアント装置２０が、「１０以上２０未満」の分割範囲に関して、サーバ装置１０ａからサーバ装置１０ｃへ再配置中であることを知っていることを意味する。
【００８５】
図１５は、再配置中におけるＧｅｔ要求に応じて実行される第二の処理手順の一例を説明するためのシーケンス図である。
【００８６】
ステップＳ１７１及びＳ１７２において、クライアント装置２０の操作要求部２１は、図１４のステップＳ１５１及びＳ１５２と同様の処理を実行する。但し、ステップＳ１７２のタイミングにおける配置情報記憶部２２において、「１０以上２０未満」の分割範囲に対応するサーバ名は、「Ａ→Ｃ」となっている。したがって、Ｇｅｔ対象のデータはサーバ装置１０ａ又はサーバ装置１０ｃのいずれかに存在することが分かる。そこで、操作要求部２１は、サーバ装置１０ａ及びサーバ装置１０ｃの双方に対して、同じ内容のＧｅｔ要求を同時に（並列的に）送信する（Ｓ１７３）。二つのサーバ装置１０に対して同じ内容のＧｅｔ要求を同時に（並列的に）送信することで、所望のデータが取得されるまでの時間を短縮することができる。
【００８７】
ここでは、Ｇｅｔ対象のデータは、既にサーバ装置１０ｃに転送済みであるとする。したがって、サーバ装置１０ａの操作部１５ａは、ステップＳ１７４〜Ｓ１７６において、図１４のステップＳ１５４〜Ｓ１５６と同様の処理を実行する。また、サーバ装置１０ｃの操作部１５ｃは、ステップＳ１７７〜Ｓ１７９において、図１４のステップＳ１５９〜Ｓ１６１と同様の処理を実行する。
【００８８】
なお、Ｇｅｔ対象のデータが未転送であった場合、サーバ装置１０ａの操作部１５ａは、ステップＳ１７６において、当該データを含む応答を返信する。一方、サーバ装置１０ｃの操作部１５ｃは、ステップＳ１７９において、Ｇｅｔの失敗（エラー）を示し、かつ、Ｇｅｔ対象のデータが属する分割範囲はサーバ装置１０ａからサーバ装置１０ｃへ再配置中であることを示す応答を、クライアント装置２０に返信する。すなわち、当該応答には、サーバ装置１０ａのサーバ名とサーバ装置１０ｃのサーバ名とが含まれる。
【００８９】
続いて、図１０の再配置処理の実行後（再配置の完了後）に、再配置対象の分割範囲に属するデータに関する操作要求が、サーバ装置１０ａにおいて受信された場合に実行される処理手順について説明する。クライアント装置２０の配置情報記憶部２２の記憶内容は、図６に示される通りであるとする。すなわち、配置情報記憶部２２には、当該分割範囲に関して再配置が行われたことは反映されていないこととする。
【００９０】
この場合、Ｐｕｔ要求の場合もＧｅｔ要求の場合も、図１３と同様の処理手順が実行される。但し、サーバ装置１０ａ及びサーバ装置１０ｃのそれぞれの配置情報記憶部１２の記憶内容は、図１２に示される通りである。したがって、ステップＳ１３５において、操作部１５ａは、操作（Ｐｕｔ又はＧｅｔ）の失敗（エラー）を示し、かつ、操作対象のデータが属する分割範囲はサーバ装置１０ｃへ再配置済みであることを示す応答を、クライアント装置２０に返信する。すなわち、当該応答には、サーバ装置１０ｃのサーバ名が含まれる。
【００９１】
したがって、ステップＳ１３６において、クライアント装置２０の操作要求部２１は、配置情報記憶部２２において、操作対象のデータが属する分割範囲に対するサーバ名を「Ｃ」に更新する。したがって、その後に当該分割範囲に属するデータに対して操作が必要となった場合、クライアント装置２０は、再配置先であるサーバ装置１０ｃに対して操作要求を送信することができる。
【００９２】
上述したように、第一の実施の形態によれば、ハッシュ空間は、サーバ装置１０の数より多い数の分割範囲に分割され、各分割範囲は、必要に応じてサーバ装置１０間で再配置される。したがって、各サーバ装置１０へのデータの配置に関して柔軟性を向上させることができる。その結果、一部のサーバ装置１０に対してデータが偏った状態が継続し、当該サーバ装置１０の負荷が増加した状態が継続する可能性を低下させることができる。
【００９３】
次に、第二の実施の形態について説明する。第二の実施の形態では、第一の実施の形態と異なる点について説明する。したがって、特に言及されない点については、第一の実施の形態と同様でよい。
【００９４】
図１６は、第二の実施の形態のデータ管理システムの機能構成例を示す図である。サーバ装置１０の数の増加又は減少や、各分割範囲に対するデータの配置分布の変化等によっては、分割範囲の再配置を行っても、サーバ装置１０間の不均衡の是正が困難となる可能性が考えられる。そこで、第二の実施の形態の各サーバ装置１０は、更に、ハッシュ空間管理部１８を有する。
【００９５】
ハッシュ空間管理部１８は、一部の分割範囲にデータの配置が偏った場合等に、分割範囲間のデータの配置状態の不均衡を是正するための処理を実行する。具体的には、ハッシュ空間管理部１８は、分割部１８１及び統合部１８２等を含む。分割部１８１は、データの量が相対的に多い分割範囲を複数に分割する。統合部１８２は、データの量が相対的に少ない分割範囲を他の分割範囲と統合する。
【００９６】
ハッシュ空間管理部１８が実行する処理手順について説明する。図１７は、分割範囲の分割及び統合の処理手順の一例を説明するためのフローチャートである。ハッシュ空間管理部１８は、例えば、定期的に、同図の処理を実行する。
【００９７】
ステップＳ２０１において、ハッシュ空間管理部１８は、一つの分割範囲に対するデータ総量の適正値を算出する。当該適正値は、例えば、以下の式（１）に基づいて算出される。
適正値＝データ管理システム１のデータ量の総和÷分割範囲の数  ・・・（１）
データ管理システム１のデータ量の総和は、サーバ情報記憶部１３の全体容量の総和から空き容量の総和を差し引くことによって求めることができる。また、分割範囲の総和は、配置情報記憶部１２を参照して求めることができる。
【００９８】
例えば、図８のサーバ情報記憶部１３ａに基づけば、全体容量の総和は、１００＋１００＋１２０＝３２０［ＴＢ］である。また、空き容量の総和は、２０＋３０＋４０＝９０［ＴＢ］である。したがって、データ管理システム１のデータ量の総和は、３２０−９０＝２３０［ＴＢ］である。また、図７の配置情報記憶部１２ａに基づけば、分割範囲の数は、１０個である。したがって、適正値は、２３０÷１０＝２３［ＴＢ］である。
【００９９】
続いて、ハッシュ空間管理部１８は、担当範囲情報記憶部１４に記憶されているデータ総量が、適正値×αよりも大きい分割範囲の有無を判定する（Ｓ２０２）。αは、適正値に対して何割増しの値が、一つの分割範囲に対して過大であるかを規定する１より大きな係数である。αの値は、運用に応じて適宜定められればよい。例えば、α＝２．０であるとすると、２３×２．０＝４６［ＴＢ］＝４７１０４［ＧＢ］よりもデータ総量の大きい分割範囲の有無が判定される。
【０１００】
例えば、図９の担当範囲情報記憶部１４ａによれば、「１０以上２０未満」の分割範囲がステップＳ２０２の条件に合致する。そこで、ハッシュ空間管理部１８は、当該分割範囲を分割対象とする。なお、分割対象は、他の方法によって選択されてもよい。例えば、係数αではなく、絶対値を適正値に加算した値よりもデータ総量が大きな分割範囲が分割対象とされてもよい。また、適正値も他の方法によって算出されてもよい。例えば、データ量ではなく、データ数に基づいて適正値が算出されてもよい。いずれの場合であっても、相対的にデータ総量又はデータ数が大きな分割範囲が分割対象とされるのが好ましい。
【０１０１】
続いて、ハッシュ空間管理部１８は、分割数を判定する（Ｓ２０３）。例えば、分割後の各分割範囲のそれぞれのデータ総量が、適正値以下となる最小の分割数が判定されてもよい。または、固定的な値（例えば、「５」）が分割数とされてもよい。分割した結果、データ総量が極端に小さい分割範囲が形成されたとしても、ステップＳ２０５以降において説明する分割範囲の統合処理によって、斯かる不均衡を是正することができる。
【０１０２】
ここでは、分割数は「２」であると判定されたこととする。
【０１０３】
続いて、ハッシュ空間管理部１８は、分割対象の分割範囲を分割数分の範囲に分割する（Ｓ２０４）。分割範囲の分割とは、具体的には、担当範囲情報記憶部１４及び配置情報記憶部１２の更新を意味する。
【０１０４】
したがって、例えば、図９の担当範囲情報記憶部１４ａは、図１８に示されるように更新される。図１８は、分割範囲の分割後の担当範囲情報記憶部の一例を示す図である。
【０１０５】
同図では、図９における「１０以上２０未満」の分割範囲が、「１０以上１５未満」の分割範囲と、「１５以上２０未満」の分割範囲とに分割された例が示されている。ハッシュ空間管理部１８は、分割前の「１０以上２０未満」の分割範囲に属していた各データのデータキーに基づいて、当該各データが、「１０以上１５未満」の分割範囲と、「１５以上２０未満」の分割範囲のいずれに属するかを判定する。ハッシュ空間管理部１８は、判定結果に基づいて、「１０以上１５未満」の分割範囲と、「１５以上２０未満」の分割範囲とのそれぞれのデータ数及びデータ総量を分割後の担当範囲情報記憶部１４ａに記憶する。
【０１０６】
また、例えば、図７の分割後の配置情報記憶部１２ａは、図１９に示されるように更新される。図１９は、分割範囲の分割後の配置情報記憶部の一例を示す図である。
【０１０７】
同図では、図７における「１０以上２０未満」の分割範囲が、「１０以上１５未満」の分割範囲と、「１５以上２０未満」の分割範囲とに分割された例が示されている。ハッシュ空間管理部１８は、分割後の二つの分割範囲のバージョンの値を、分割前の分割範囲のバージョンに１を加算した値とする。分割後の二つの分割範囲のサーバ名は、分割前の分割範囲のサーバ名と同じである。
【０１０８】
なお、ステップＳ２０２の条件に合致する分割範囲が複数有る場合、ステップＳ２０３及びＳ２０４は、複数の分割範囲に関して実行されてもよい。
【０１０９】
一方、ステップＳ２０２の条件に合致する分割範囲が無い場合（Ｓ２０２でＮｏ）、ハッシュ空間管理部１８は、担当範囲情報記憶部１４に記憶されているデータ総量が、適正値×βよりも小さい分割範囲の有無を判定する（Ｓ２０５）。βは、適正値に対して何割減の値が、一つの分割範囲に対して過小であるかを規定する、０より大きく１未満の係数である。βの値は、運用に応じて適宜定められればよい。例えば、βは、αの逆数であってもよい。
【０１１０】
例えば、β＝０．２であるとすると、２３×０．２＝４．６［ＴＢ］＝４７１０．４［ＧＢ］よりもデータ総量の小さい分割範囲の有無が判定される。
【０１１１】
例えば、図９の担当範囲情報記憶部１４ａによれば、「２０以上３０未満」の分割範囲と、「８０以上９０未満」の分割範囲とが、ステップＳ２０５の条件に合致する。そこで、ハッシュ空間管理部１８は、当該分割範囲を統合対象とする。なお、統合対象は、分割対象と同様に、他の方法によって選択されてもよい。
【０１１２】
続いて、ハッシュ空間管理部１８は、統合相手とする分割範囲を判定する（Ｓ２０６）。例えば、上記の例のように、複数の分割範囲が統合対象とされた場合、統合対象同士が相互に統合相手として選択されてもよい。また、統合対象が一つである場合は、統合対象の分割範囲のデータ総量との和が、適正値×αより小さい分割範囲が統合相手として選択されてもよい。又は、統合対象が一つである場合は、統合対象以外の分割範囲の中で、データ総量が最小である分割範囲が統合相手として選択されてもよい。なお、三つ以上の分割範囲が一つの分割範囲に統合されてもよい。
【０１１３】
続いて、ハッシュ空間管理部１８は、統合対象の分割範囲と統合相手の分割範囲とを一つの分割範囲に統合する（Ｓ２０７）。分割範囲の統合とは、具体的には、担当範囲情報記憶部１４及び配置情報記憶部１２の更新を意味する。
【０１１４】
すなわち、担当範囲情報記憶部１４において、統合対象の分割範囲に係るレコードと、統合相手の分割範囲に係るレコードとが一つのレコードに統合される。この際、統合後のレコードのデータ数及びデータ総量のそれぞれ値は、統合されるレコードの値が合算されたものとなる。
【０１１５】
また、配置情報記憶部１２において、統合対象の分割範囲に係るレコードと、統合相手の分割範囲に係るレコードとが一つのレコードに統合される。この際、統合後のレコードのバージョンは、例えば、統合されるレコードのバージョンの最大値に１が加算された値となる。
【０１１６】
分割範囲の分割結果又は統合結果である、担当範囲情報記憶部１４及び配置情報記憶部１２の記憶内容は、情報交換部１７によって、他のサーバ装置１０の担当範囲情報記憶部１４及び配置情報記憶部１２に反映される。したがって、分割範囲の分割後又は統合後における分割範囲の再配置は、分割後又は統合後の分割範囲を単位として実行される。
【０１１７】
なお、分割後又は統合後の分割範囲は、例えば、図１３のステップＳ１３５、図１４のステップＳ１５６、又は図１５のステップＳ１７６等、操作対象のデータを有していないサーバ装置１０が操作要求を受信した際の応答においてクライアント装置２０に通知される。この際、操作対象のデータを有しているサーバ名と共に、操作要求に指定されたデータキーが属する分割範囲のハッシュ値の範囲が応答に含められる。クライアント装置２０の操作要求部２１は、当該応答に含まれているサーバ名及び分割範囲のハッシュ値の範囲に基づいて、配置情報記憶部２２の記憶内容を更新する。したがって、クライアント装置２０には、分割又は統合の結果は、操作対象とされた分割範囲ごとに反映される。
【０１１８】
上述したように、第二の実施の形態によれば、既存の分割範囲の間にデータ配置の分布に関して偏りが生じた場合であっても、分割範囲の分割又は統合によって、分割範囲間の偏りを是正することができる。
【０１１９】
次に、第三の実施の形態について説明する。第三の実施の形態では、第一又は第二の実施の形態と異なる点について説明する。したがって、特に言及されない点については、第一又は第二の実施の形態と同様でよい。
【０１２０】
第三の実施の形態では、データ記憶部１１は、例えば、アクセス性能の異なる複数の補助記憶装置１０２によって実現される場合を想定する。例えば、データ記憶部１１は、階層１として、アクセス速度が相対的に高速なＳＳＤ（Solid State Drive）を有し、階層２として、アクセス速度が相対的に低速なＨＤＤ（Hard Disk Drive）を有する。但し、全てのサーバ装置１０のデータ記憶部１１が、二つの階層を有していなくてもよい。
【０１２１】
図２０は、第三の実施の形態のデータ管理システムの機能構成例を示す図である。同図において、各サーバ装置１０は、階層間移動部１９を更に有する。階層間移動部１９は、データ記憶部１１が記憶するデータの操作頻度（操作回数）に応じて、データの記憶先の階層を移動させる。例えば、階層間移動部１９は、操作頻度の高いデータを、階層２から階層１へ移動させ、操作頻度の低いデータを、階層１から階層２に移動させる。なお、階層間の移動の単位は、データ単位であり、分割範囲単位ではない。同じ分割範囲に属するデータ間においても、操作頻度は大きく異なる可能性が有るからである。なお、操作頻度は、データ記憶部１１において、データキー及びデータの組に関連付けて記憶されている。データに対してＧｅｔ又はＰｕｔが実行された場合、当該データの操作頻度に１が加算される。
【０１２２】
データ記憶部１１が複数の階層を有することにより、各サーバ装置１０の配置情報記憶部１２、サーバ情報記憶部１３、及び担当範囲情報記憶部１４は、例えば、次のように拡張される。
【０１２３】
図２１は、第三の実施の形態の配置情報記憶部の構成例を示す図である。同図に示されるように、第三の実施の形態の配置情報記憶部１２は、各分割範囲に関して、階層別に、バージョン及び担当サーバを記憶する。第三の実施の形態では、同じ分割範囲に属するデータであっても、階層１の属するデータと階層２に属するデータとが有るからである。また、同じ分割範囲に対する二つの階層は、必ずしも同じサーバ装置１０のデータ記憶部１１でなくてよい。上記したように、全てのサーバ装置１０が、二つの階層を有していなくてもよい状況において、各分割範囲に二つの階層を割り当てるためには、階層１の担当サーバと階層２の担当サーバとが異なる状態が許容される必要があるからである。
【０１２４】
本実施の形態では、サーバ装置１０ａ及びサーバ装置１０ｂは、ＳＳＤ（階層１）及びＨＤＤ（階層２）の双方を有し、サーバ装置１０ｃはＨＤＤ（階層２）のみを有し、サーバ装置１０ｄはＳＳＤ（階層１）のみを有しているとする。各分割範囲の各階層に対する担当サーバの割り当ては、任意の方法に基づいて実行されればよい。なお、第三の実施の形態では、サーバ装置１０ａ〜１０ｄの４台のサーバ装置１０が、データ管理システム１に含まれていることとする。
【０１２５】
図２１によれば、例えば、「０以上１０未満」の分割範囲に属し、サーバ装置１０ｄの階層１に記憶されているデータに関して、操作頻度が所定値Ａを未満となった場合、階層間移動部１９は、当該データをサーバ装置１０ｃの階層２に移動させる。また、サーバ装置１０ｃの階層２に記憶されているデータに関して、操作頻度が所定値Ｂを超えた場合、階層間移動部１９は、当該データをサーバ装置１０ｄの階層１に移動させる。他の分割範囲に関しても同様である。
【０１２６】
図２２は、第三の実施の形態のサーバ情報記憶部の構成例を示す図である。同図に示されるように、第三の実施の形態のサーバ情報記憶部１３は、各サーバ装置１０に関して、階層別に、バージョン、全体容量、及び空き容量等を記憶する。なお、該当する階層を有していないサーバ装置１０に関して、当該階層に関する各項目の値はブランク（空欄）となっている。
【０１２７】
図２３は、第三の実施の形態の担当範囲情報記憶部の構成例を示す図である。同図では、サーバ装置１０ａにおける担当範囲情報記憶部１４ａの記憶内容が例示されている。但し、他のサーバ装置１０の担当範囲情報記憶部１４も、同図の担当範囲情報記憶部１４と同様の構成を有する。
【０１２８】
同図に示されるように、第三の実施の形態の担当範囲情報記憶部１４ａは、サーバ装置１０ａの担当範囲に含まれる各分割範囲に関して、階層別に、データ数及びデータ総量を記憶する。一方の階層のみがサーバ装置１０ａの担当範囲である分割範囲に関しては、当該階層に関してのみ、データ数及びデータ総量が記憶されている。
【０１２９】
なお、クライアント装置２０は、階層１に関する情報のみを配置情報記憶部２２に記憶している。したがって、配置情報記憶部２２の構成は、図６と同様でよい。
【０１３０】
以下、第三の実施の形態のデータ管理システム１において実行される処理手順について説明する。
【０１３１】
図２４は、第三の実施の形態においてＧｅｔ要求に応じて実行される処理手順の一例を説明するためのシーケンス図である。
【０１３２】
ステップＳ３０１〜Ｓ３０３は、図５のステップＳ１０１〜Ｓ１０３と同様でよい。但し、ステップＳ３０３における操作要求は、Ｇｅｔ要求である。また、Ｇｅｔ対象のデータのデータキーのハッシュ値は、「１０以上２０未満」であるとする。したがって、クライアント装置２０の配置情報記憶部２２の記憶内容が、図２１の階層１の部分（但し、バージョンは含まれない）と同じであれば、Ｇｅｔ要求は、サーバ名が「Ｄ」であるサーバ装置１０ｄに送信される。
【０１３３】
Ｇｅｔ要求を受信したサーバ装置１０ｄの操作部１５ｄは、Ｇｅｔ対象とされているデータに関して、サーバ装置１０ｄが担当サーバであるか否かを判定する（Ｓ３０４）。具体的には、操作部１５ｄは、まず、配置情報記憶部１２ｄを参照して、Ｇｅｔ要求に指定されているデータキーのハッシュ値が属する分割範囲の階層１及び階層２の少なくともいずれか一方に関して、サーバ装置１０ｄが担当サーバであるか否かを確認する。少なくともいずれか一方の階層に関してサーバ装置１０ｄが担当サーバである場合、操作部１５ｄは、当該階層より、Ｇｅｔ要求に指定されているデータキーに対応するデータの取得を試みる。図２１の例に基づけば、「１０以上２０未満」の分割範囲に関して、サーバ装置１０ｄは、階層１の担当サーバである。したがって、操作部１５ｄは、階層１より当該データの取得を試みる。なお、サーバ装置１０ｄが、双方の階層の担当サーバであった場合、操作部１５ｄは、双方の階層から当該データの取得を試みる。
【０１３４】
階層１からのデータの取得に失敗した場合、操作部１５ｄは、配置情報記憶部１２ｄ（図２１）を参照して、「１０以上２０未満」の分割範囲の階層２の担当サーバは、サーバ装置１０ａであることを特定する。例えば、階層間移動部１９ｄによって当該データが階層２に移動されている場合、階層１からの当該データの取得は失敗する。
【０１３５】
続いて、操作部１５ｄは、Ｇｅｔの失敗（エラー）を示し、かつ、Ｇｅｔ対象のデータは、サーバ装置１０ａが有していることを示す応答を、クライアント装置２０に返信する（Ｓ３０５）。すなわち、当該応答には、サーバ装置１０ａのサーバ名が含まれる。クライアント装置２０の操作要求部２１は、当該応答を受信すると、サーバ装置１０ａに対して、ステップＳ３０３と同じ内容のＧｅｔ要求を送信する（Ｓ３０６）。
【０１３６】
Ｇｅｔ要求を受信したサーバ装置１０ａの操作部１５ａは、Ｇｅｔ対象とされているデータに関して、サーバ装置１０ａが担当サーバであるか否かを判定する（Ｓ３０７）。ここでの判定手順は、ステップＳ３０４と同様でよいため省略する。操作部１５ａは、判定結果に基づいて、Ｇｅｔ対象のデータを階層２より取得する（Ｓ３０８）。続いて、操作部１５ａは、取得されたデータを含む応答を、クライアント装置２０に返信する。その結果、クライアント装置２０は、所望のデータを取得することができる。
【０１３７】
図２５は、第三の実施の形態においてＰｕｔ要求に応じて実行される処理手順の一例を説明するためのシーケンス図である。
【０１３８】
ステップＳ３２１〜Ｓ３２４の処理手順は、図２４のステップＳ３０１〜Ｓ３０４とほぼ同様である。但し、ステップＳ３２３における操作要求は、Ｐｕｔ要求である。なお、Ｐｕｔ要求に指定されているデータキーのハッシュ値は、図２４においてＧｅｔ要求に指定された値と同じ（１０以上２０未満）であるとする。したがって、Ｐｕｔ要求は、サーバ装置１０ｄに送信される。
【０１３９】
Ｐｕｔ要求に指定されたデータキーに対するデータが階層１に存在しない場合、操作部１５ｄは、配置情報記憶部１２ｄ（図２１）に基づいて、階層２の担当サーバであるサーバ装置１０ａに対して、当該データキーが指定された削除要求を送信する（Ｓ３２５）。サーバ装置１０ａの操作部１５ａは、当該削除要求に応じ、当該データキー及び当該データキーに対応するデータの組をデータ記憶部１１ａより削除する（Ｓ３２６）。操作部１５ａは、削除の成功を示す応答をサーバ装置１０ｄに返信する（Ｓ３２７）。
【０１４０】
サーバ装置１０ｄの操作部１５ｄは、削除の成功の応答の受信に応じ、ステップＳ３２３において受信されたＰｕｔ要求に応じた処理を実行する（Ｓ３２８）。すなわち、操作部１５ｄは、Ｐｕｔ要求に指定されたデータキー及びデータの組を階層１に記憶する。すなわち、Ｐｕｔ要求に係るデータは、引き続き操作対象とされる可能性が高いため、階層１に記憶しておき、アクセス速度を高めようというわけである。また、データ装置１０ａに対する削除要求の送信は、同一データの重複管理を回避するための措置である。
【０１４１】
階層１へのデータキー及びデータの組の書き込みに成功すると、操作部１５ｄは、Ｐｕｔに成功したことを示す応答をクライアント装置２０に返信する（Ｓ３２９）。
【０１４２】
なお、第三の実施の形態において、分割範囲の再配置は、分割範囲の階層別に実行される。例えば、「１０以上２０未満」の分割範囲の階層１は、当該分割範囲の階層２とは別に再配置の対象とされる。
【０１４３】
クライアント装置２０の配置情報記憶部２２への再配置結果の反映は、第一の実施の形態と同様に行われればよい。具体的には、クライアント装置２０の配置情報記憶部２２は、階層１に関する担当サーバのみが記憶されているため、クライアント装置２０からの操作要求は、まず、階層１の担当サーバに送信される。当該操作要求を受信したサーバ装置１０の操作部１５は、配置情報記憶部１２において、操作要求に係るデータが属する分割範囲の階層１の担当サーバが、当該サーバ装置１０でない場合、エラーと共に、当該担当サーバへの再配置中又は再配置後であることを示す応答をクライアント装置２０に返信する。クライアント装置２０の操作要求部２１は、当該応答に基づいて、配置情報記憶部２２を更新する。
【０１４４】
ところで、第三の実施の形態において、クライアント装置２０の配置情報記憶部２２は、各分割範囲に関して、各階層（階層１及び階層２）の担当サーバを記憶するようにしてもよい。すなわち、配置情報記憶部２２は、例えば、図２１から「バージョン」の項目（列）が除去された構成を有していてもよい。
【０１４５】
この場合、クライアント装置２０の操作要求部２１は、図２４及び図２５において説明したように、まず、階層１の担当サーバに対して操作要求を送信してもよい。または、最初の操作要求の送信先を階層２の担当サーバとしてもよい。更に、階層１及び階層２のそれぞれの担当サーバに同時に（並列的に）操作要求を送信してもよい。
【０１４６】
上述したように、第三の実施の形態によれば、データ記憶部１１が複数の階層を有している場合において、第一の実施の形態及び第二の実施の形態と同様の効果を得ることができる。
【０１４７】
なお、本実施の形態において、サーバ装置１０は、データ管理装置の一例である。データ記憶部１１は、第１の記憶手段の一例である。転送部１６３は、通信手段の一例である。第２の記憶手段は、配置情報記憶部１２の一例である。操作部１５は、制御手段の一例である。担当範囲情報記憶部１４は、第３の記憶手段の一例である。サーバ情報記憶部１３は、第４の記憶手段の一例である。分割部１８１は、分割手段の一例である。統合部１８２は、統合手段の一例である。
【０１４８】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【０１４９】
以上の説明に関し、更に以下の項を開示する。
（付記１）
データを分散して管理する分散管理システムで利用可能なデータ管理装置において、
所定のハッシュ関数を適用して得られるハッシュ値が第１の範囲に属するキー情報と、該キー情報に対応するデータとを関連づけて記憶する第１の記憶手段と、
前記第１の記憶手段に記憶されたデータのうち、対応するキー情報に前記所定のハッシュ関数を適用して得られるハッシュ値が、ある範囲に属する特定のデータの格納先を該データ管理装置から他のデータ管理装置に変更する変更処理を行う場合に、該特定のデータと、該特定のデータに対応するキー情報とを前記他のデータ管理装置に送信する通信手段と、
前記変更処理の際に、前記ある範囲に対応づけて前記他のデータ管理装置の識別情報を記憶する第２の記憶手段と、
前記変更処理の後に、第１のキー情報に対応するデータについての処理要求を受信した場合に、該第１のキー情報に前記所定のハッシュ関数を適用して得られたハッシュ値が前記ある範囲に属することを検出すると、該ある範囲に対応づけて記憶した前記他のデータ管理装置の識別情報を該要求の要求元に送信する制御手段と、
を備えたことを特徴とするデータ管理装置。
（付記２）
前記第１の範囲より前記ある範囲が狭い場合に、前記第２の記憶手段は、前記第１の範囲に属し、かつ、前記ある範囲に属さない範囲であって、前記変更処理の実行後も該データ管理装置が格納先となるデータに対応するキー情報に前記所定のハッシュ関数を適用して得られる全てのハッシュ値を含む第２の範囲に対応づけて該データ管理装置の識別情報を記憶し、
前記制御手段は、前記変更処理の後に、第２のキー情報に対応するデータについての処理要求を受信した場合に、該第２のキー情報に前記所定のハッシュ関数を適用して得られたハッシュ値が前記第２の範囲に属することを検出すると、該第２のキー情報に対応するデータを前記第１の記憶手段から読み出して、該要求の要求元に送信する制御手段と、
を備えたことを特徴とする付記１記載のデータ管理装置。
（付記３）
キー情報に所定のハッシュ関数を適用して得られるハッシュ値の範囲ごとに、対応するデータの量を示す情報を記憶する第３の記憶手段と、
複数のデータ管理装置のそれぞれの識別情報と対応する格納領域についての空き容量を示す情報とを記憶する第４の記憶手段と、
前記通信手段は、前記第１の記憶手段に記憶されたデータのうち、対応するキー情報に前記所定のハッシュ関数を適用して得られるハッシュ値が、対応するデータの量が相対的に多い範囲に属する特定のデータの格納先を、該データ管理装置から、該データ管理装置よりも空き容量の多い他のデータ管理装置に変更する変更処理を行う場合に、該特定のデータと、該特定のデータに対応するキー情報とを前記他のデータ管理装置に送信する、
ことを特徴とする付記１又は２記載のデータ管理装置。
（付記４）
前記制御手段は、前記変更処理の際又は変更処理の後に、前記ある範囲に属する特定のデータに関する書き込み要求が受信された場合、前記他のデータ管理装置の識別情報を該要求の要求元に送信する、
ことを特徴とする付記１乃至３いずれか一項記載のデータ管理装置。
（付記５）
前記制御手段は、前記変更処理の際又は変更処理の後に、前記ある範囲に属する特定のデータに関する取得要求が受信された場合、前記特定のデータが前記他のデータ管理装置に送信されていなければ前記特定のデータを該要求の要求元に送信し、前記特定のデータが送信済みであれば前記他のデータ管理装置の識別情報を該要求の要求元に送信する、
ことを特徴とする付記１乃至４いずれか一項記載のデータ管理装置。
（付記６）
前記第３の記憶手段が記憶する情報に基づいて、該データ管理装置が対応する範囲の中でデータの量が相対的に多い範囲を複数の範囲に分割し、該分割の結果に基づいて前記第３の記憶手段及び前記第２の記憶手段を更新する分割手段を有することを特徴とする付記１乃至５いずれか一項記載のデータ管理装置。
（付記７）
前記第３の記憶手段が記憶する情報に基づいて、当該データ管理装置が対応する範囲の中でデータの量が相対的に少ない複数の範囲を統合し、該統合の結果に基づいて前記第３の記憶手段及び前記第２の記憶手段を更新する統合部を有することを特徴とする付記１乃至６いずれか一項記載のデータ管理装置。
（付記８）
前記第１の記憶手段は、アクセス性能に応じて複数の階層を有し、
データの操作頻度に応じて、データを第１の階層から第２の階層へ移動させる移動手段とを備え、
前記第２の記憶手段は、前記範囲及び前記階層に対応づけてデータ管理装置の識別情報を記憶する、
ことを特徴とする付記１乃至７記載のデータ管理装置。
（付記９）
付記１乃至８いずれか一項記載の複数の前記データ管理装置を含むデータ管理システム。
（付記１０）
データを分散して管理する分散管理システムで利用可能なデータ管理装置が、
所定のハッシュ関数を適用して得られるハッシュ値が第１の範囲に属するキー情報と、該キー情報に対応するデータとを関連づけて第１の記憶手段に記憶し、
前記第１の記憶手段に記憶されたデータのうち、対応するキー情報に前記所定のハッシュ関数を適用して得られるハッシュ値が、ある範囲に属する特定のデータの格納先を該データ管理装置から他のデータ管理装置に変更する変更処理を行う場合に、該特定のデータと、該特定のデータに対応するキー情報とを前記他のデータ管理装置に送信し、
前記変更処理の際に、前記ある範囲に対応づけて前記他のデータ管理装置の識別情報を第２の記憶手段に記憶し、
前記変更処理の後に、第１のキー情報に対応するデータについての処理要求を受信した場合に、該第１のキー情報に前記所定のハッシュ関数を適用して得られたハッシュ値が前記ある範囲に属することを検出すると、該ある範囲に対応づけて記憶した前記他のデータ管理装置の識別情報を該要求の要求元に送信する、
処理を実行することを特徴とするデータ管理方法。
（付記１１）
前記第１の範囲より前記ある範囲が狭い場合に、前記第２の記憶手段は、前記第１の範囲に属し、かつ、前記ある範囲に属さない範囲であって、前記変更処理の実行後も該データ管理装置が格納先となるデータに対応するキー情報に前記所定のハッシュ関数を適用して得られる全てのハッシュ値を含む第２の範囲に対応づけて該データ管理装置の識別情報を記憶し、
前記要求元に送信する処理は、前記変更処理の後に、第２のキー情報に対応するデータについての処理要求を受信した場合に、該第２のキー情報に前記所定のハッシュ関数を適用して得られたハッシュ値が前記第２の範囲に属することを検出すると、該第２のキー情報に対応するデータを前記第１の記憶手段から読み出して、該要求の要求元に送信する、
ことを特徴とする付記１０記載のデータ管理方法。
（付記１２）
キー情報に所定のハッシュ関数を適用して得られるハッシュ値の範囲ごとに、対応するデータの量を示す情報を第３の記憶手段に記憶し、
複数のデータ管理装置のそれぞれの識別情報と対応する格納領域についての空き容量を示す情報とを第４の記憶手段に記憶し、
前記他のデータ管理装置に送信する処理は、前記第１の記憶手段に記憶されたデータのうち、対応するキー情報に前記所定のハッシュ関数を適用して得られるハッシュ値が、対応するデータの量が相対的に多い範囲に属する特定のデータの格納先を、該データ管理装置から、該データ管理装置よりも空き容量の多い他のデータ管理装置に変更する変更処理を行う場合に、該特定のデータと、該特定のデータに対応するキー情報とを前記他のデータ管理装置に送信する、
ことを特徴とする付記１０又は１１記載のデータ管理方法。
（付記１３）
前記要求元に送信する処理は、前記変更処理の際又は変更処理の後に、前記ある範囲に属する特定のデータに関する書き込み要求が受信された場合、前記他のデータ管理装置の識別情報を該要求の要求元に送信する、
ことを特徴とする付記１０乃至１２いずれか一項記載のデータ管理方法。
（付記１４）
前記要求元に送信する処理は、前記変更処理の際又は変更処理の後に、前記ある範囲に属する特定のデータに関する取得要求が受信された場合、前記特定のデータが前記他のデータ管理装置に送信されていなければ前記特定のデータを該要求の要求元に送信し、前記特定のデータが送信済みであれば前記他のデータ管理装置の識別情報を該要求の要求元に送信する、
ことを特徴とする付記１０乃至１３いずれか一項記載のデータ管理方法。
（付記１５）
前記第３の記憶手段が記憶する情報に基づいて、該データ管理装置が対応する範囲の中でデータの量が相対的に多い範囲を複数の範囲に分割し、該分割の結果に基づいて前記第３の記憶手段及び前記第２の記憶手段を更新する処理をデータ管理装置が実行することを特徴とする付記１０乃至１４いずれか一項記載のデータ管理方法。
（付記１６）
前記第３の記憶手段が記憶する情報に基づいて、当該データ管理装置が対応する範囲の中でデータの量が相対的に少ない複数の範囲を統合し、該統合の結果に基づいて前記第３の記憶手段及び前記第２の記憶手段を更新する処理を前記データ管理装置が実行することを特徴とする付記１０乃至１５いずれか一項記載のデータ管理方法。
（付記１７）
前記第１の記憶手段は、アクセス性能に応じて複数の階層を有し、
データの操作頻度に応じて、データを第１の階層から第２の階層へ移動させる処理を前記データ管理装置が実行し、
前記第２の記憶手段は、前記範囲及び前記階層に対応づけてデータ管理装置の識別情報を記憶する、
ことを特徴とする付記１０乃至１６記載のデータ管理方法。
（付記１８）
データを分散して管理する分散管理システムで利用可能なデータ管理装置に、
所定のハッシュ関数を適用して得られるハッシュ値が第１の範囲に属するキー情報と、該キー情報に対応するデータとを関連づけて第１の記憶手段に記憶し、
前記第１の記憶手段に記憶されたデータのうち、対応するキー情報に前記所定のハッシュ関数を適用して得られるハッシュ値が、ある範囲に属する特定のデータの格納先を該データ管理装置から他のデータ管理装置に変更する変更処理を行う場合に、該特定のデータと、該特定のデータに対応するキー情報とを前記他のデータ管理装置に送信し、
前記変更処理の際に、前記ある範囲に対応づけて前記他のデータ管理装置の識別情報を第２の記憶手段に記憶し、
前記変更処理の後に、第１のキー情報に対応するデータについての処理要求を受信した場合に、該第１のキー情報に前記所定のハッシュ関数を適用して得られたハッシュ値が前記ある範囲に属することを検出すると、該ある範囲に対応づけて記憶した前記他のデータ管理装置の識別情報を該要求の要求元に送信する、
処理を実行させることを特徴とするプログラム。
（付記１９）
前記第１の範囲より前記ある範囲が狭い場合に、前記第２の記憶手段は、前記第１の範囲に属し、かつ、前記ある範囲に属さない範囲であって、前記変更処理の実行後も該データ管理装置が格納先となるデータに対応するキー情報に前記所定のハッシュ関数を適用して得られる全てのハッシュ値を含む第２の範囲に対応づけて該データ管理装置の識別情報を記憶し、
前記要求元に送信する処理は、前記変更処理の後に、第２のキー情報に対応するデータについての処理要求を受信した場合に、該第２のキー情報に前記所定のハッシュ関数を適用して得られたハッシュ値が前記第２の範囲に属することを検出すると、該第２のキー情報に対応するデータを前記第１の記憶手段から読み出して、該要求の要求元に送信する、
ことを特徴とする付記１８記載のプログラム。
（付記２０）
キー情報に所定のハッシュ関数を適用して得られるハッシュ値の範囲ごとに、対応するデータの量を示す情報を第３の記憶手段に記憶し、
複数のデータ管理装置のそれぞれの識別情報と対応する格納領域についての空き容量を示す情報とを第４の記憶手段に記憶する処理を前記データ管理装置に実行させ、
前記他のデータ管理装置に送信する処理は、前記第１の記憶手段に記憶されたデータのうち、対応するキー情報に前記所定のハッシュ関数を適用して得られるハッシュ値が、対応するデータの量が相対的に多い範囲に属する特定のデータの格納先を、該データ管理装置から、該データ管理装置よりも空き容量の多い他のデータ管理装置に変更する変更処理を行う場合に、該特定のデータと、該特定のデータに対応するキー情報とを前記他のデータ管理装置に送信する、
ことを特徴とする付記１８又は１９記載のプログラム。
（付記２１）
前記要求元に送信する処理は、前記変更処理の際又は変更処理の後に、前記ある範囲に属する特定のデータに関する書き込み要求が受信された場合、前記他のデータ管理装置の識別情報を該要求の要求元に送信する、
ことを特徴とする付記１８乃至２０いずれか一項記載のプログラム。
（付記２２）
前記要求元に送信する処理は、前記変更処理の際又は変更処理の後に、前記ある範囲に属する特定のデータに関する取得要求が受信された場合、前記特定のデータが前記他のデータ管理装置に送信されていなければ前記特定のデータを該要求の要求元に送信し、前記特定のデータが送信済みであれば前記他のデータ管理装置の識別情報を該要求の要求元に送信する、
ことを特徴とする付記１８乃至２１いずれか一項記載のプログラム。
（付記２３）
前記第３の記憶手段が記憶する情報に基づいて、該データ管理装置が対応する範囲の中でデータの量が相対的に多い範囲を複数の範囲に分割し、該分割の結果に基づいて前記第３の記憶手段及び前記第２の記憶手段を更新する処理をデータ管理装置が実行することを特徴とする付記１８乃至２２いずれか一項記載のプログラム。
（付記２４）
前記第３の記憶手段が記憶する情報に基づいて、当該データ管理装置が対応する範囲の中でデータの量が相対的に少ない複数の範囲を統合し、該統合の結果に基づいて前記第３の記憶手段及び前記第２の記憶手段を更新する処理をデータ管理装置が実行することを特徴とする付記１８乃至２３いずれか一項記載のプログラム。
（付記２５）
前記第１の記憶手段は、アクセス性能に応じて複数の階層を有し、
データの操作頻度に応じて、データを第１の階層から第２の階層へ移動させる処理を前記データ管理装置に実行させ、
前記第２の記憶手段は、前記範囲及び前記階層に対応づけてデータ管理装置の識別情報を記憶する、
ことを特徴とする付記１８乃至２４記載のプログラム。
【符号の説明】
【０１５０】
１            データ管理システム
１０          サーバ装置
１１          データ記憶部
１２          配置情報記憶部
１３          サーバ情報記憶部
１４          担当範囲情報記憶部
１５          操作部
１６          再配置実行部
１７          情報交換部
１８          ハッシュ空間管理部
１９          階層間移動部
２０          クライアント装置
２１          操作要求部
２２          配置情報記憶部
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        ＣＰＵ
１０５        インタフェース装置
１６１        再配置対象特定部
１６２        再配置先特定部
１６３        転送部
１８１        分割部
１８２        統合部
Ｂ            バス
【図１】
0005733124.tif 000002
【図２】
0005733124.tif 000003
【図３】
0005733124.tif 000004
【図４】
0005733124.tif 000005
【図５】
0005733124.tif 000006
【図６】
0005733124.tif 000007
【図７】
0005733124.tif 000008
【図８】
0005733124.tif 000009
【図９】
0005733124.tif 000010
【図１０】
0005733124.tif 000011
【図１１】
0005733124.tif 000012
【図１２】
0005733124.tif 000013
【図１３】
0005733124.tif 000014
【図１４】
0005733124.tif 000015
【図１５】
0005733124.tif 000016
【図１６】
0005733124.tif 000017
【図１７】
0005733124.tif 000018
【図１８】
0005733124.tif 000019
【図１９】
0005733124.tif 000020
【図２０】
0005733124.tif 000021
【図２１】
0005733124.tif 000022
【図２２】
0005733124.tif 000023
【図２３】
0005733124.tif 000024
【図２４】
0005733124.tif 000025
【図２５】
0005733124.tif 000026