(57)【要約】【課題】多数のユーザが共同利用するＤＨＴデータ管理機構において、ユーザ毎に使用可能な資源を管理する。【解決手段】管理部１１が仮想ノードを設定し、データ管理システム２に格納されたデータへのアクセス処理を各仮想ノードに振り分け、マッピング部１２により仮想ノードとデータ管理システム２のノード２０とを関連付ける。これにより、ユーザが利用するノード２０を限定することができる。さらに、仮想ノード数、仮想ノードとノード２０のマッピングを調整することで、ユーザがデータ管理システム２において使用可能な資源を管理することができる。【選択図】図１
2009295127.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードによりＰ２Ｐネットワークを構成し、分散ハッシュテーブルを利用して前記ノードを管理する分散データ管理装置へのアクセス方法であって、
管理手段により、前記ノードを仮想的に表す仮想ノードのクラスタをユーザ毎に設定し、前記分散データ管理装置が格納するデータへのアクセス処理を前記仮想ノードのいずれかに分散して割り振るステップと、
マッピング手段により、前記仮想ノードに前記ノードを関連付けるステップと、
を有することを特徴とするアクセス方法。
【請求項２】
前記割り振るステップは、前記クラスタにハッシュ空間を与え、前記仮想ノードのそれぞれに前記ハッシュ空間を分割した部分ハッシュ空間を割り当て、前記データのハッシュ値に基づいて前記アクセス処理を割り振ることを特徴とする請求項１記載のアクセス方法。
【請求項３】
複数のノードによりＰ２Ｐネットワークを構成し、分散ハッシュテーブルを利用して前記ノードを管理する分散データ管理装置へのアクセス装置であって、
前記ノードを仮想的に表す仮想ノードのクラスタをユーザ毎に設定し、前記分散データ管理装置が格納するデータへのアクセス処理を前記仮想ノードのいずれかに分散して割り振る管理手段と、
前記仮想ノードに前記ノードを関連付けるマッピング手段と、
を有することを特徴とするアクセス装置。
【請求項４】
前記管理手段は、前記クラスタにハッシュ空間を与え、前記仮想ノードのそれぞれに前記ハッシュ空間を分割した部分ハッシュ空間を割り当て、前記データのハッシュ値に基づいて前記アクセス処理を割り振ることを特徴とする請求項３記載のアクセス装置。
【請求項５】
分散データ管理装置とその分散データ管理装置へのアクセスに用いるアクセス装置とを備えた分散データ管理システムであって、
前記分散データ管理装置は、
データを格納させる複数のノードを備え、
前記複数のノードによりＰ２Ｐネットワークを構成し、分散ハッシュテーブルを利用して前記ノードを管理するものであって、
前記アクセス装置は、
前記ノードを仮想的に表す仮想ノードのクラスタをユーザ毎に設定し、前記分散データ管理装置が格納するデータへのアクセス処理を前記仮想ノードのいずれかに分散して割り振る管理手段と、
前記仮想ノードに前記ノードを関連付けるマッピング手段と、
を有することを特徴とする分散データ管理システム。
【請求項６】
前記管理手段は、前記クラスタにハッシュ空間を与え、前記仮想ノードのそれぞれに前記ハッシュ空間を分割した部分ハッシュ空間を割り当て、前記データのハッシュ値に基づいて前記アクセス処理を割り振ることを特徴とする請求項５記載の分散データ管理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを複数の計算機に分散して格納する技術に関する。
【背景技術】
【０００２】
分散データ管理機構は、ネットワークで接続されたローカルストレージを持つ計算機（ノード）で構成されたクラスタの各ノードにデータを分散格納するデータ管理機構である。クライアントにとって、分散データ管理機構は一つの巨大なストレージを持つデータ管理機構であり、一台の計算機では実現不可能な大容量のデータ管理空間を提供可能な、拡張性を持つデータ管理機構である。
【０００３】
分散データ管理機構はデータの格納位置管理手法により、メタデータサーバ型とＰ２Ｐ型とに分類される。メタデータサーバ型は、データの格納位置を一つのノード（メタデータサーバ）が管理する。一方、Ｐ２Ｐ型はデータの格納位置を複数のノードが管理する。特に、分散ハッシュテーブル（ＤＨＴ：Distributed Hash Table）を用いてデータの格納位置を管理するものとして、ＤＨＴ  Ｐ２Ｐデータ管理機構（以下、ＤＨＴデータ管理機構という）が知られている。
【０００４】
ＤＨＴデータ管理機構は、ハッシュの結果の範囲（ハッシュ空間）をシステムの各ノードが分割して持ち、格納されるデータのＩＤの値を含むハッシュ空間を持つノードにそのデータを格納する分散データ管理機構である。ＤＨＴデータ管理機構は、Chord, Pastry などのＤＨＴルーティングアルゴリズムを用い、システムを構成するいずれのノードからでもデータを格納したノードを検索することができる。
【０００５】
メタデータサーバがボトルネックになることにより、拡張性が制限されるメタデータサーバ型に比べ、ＤＨＴデータ管理機構は、どのノードからでもデータを格納するノードを検索可能であり、メタデータサーバのようなボトルネックがない為、拡張性と可用性に優れている。
【０００６】
既存のＤＨＴデータ管理機構は、システムの性能を最大限に発揮させるため、システムの資源を適切に管理する負荷分散手法を具備している。ＤＨＴデータ管理機構の負荷分散手法で最も有名で一般的な方式が仮想サーバ（Virtual Server）を用いた負荷分散方式（以下「仮想サーバ方式」とする）であり、多くの研究がされ、実際に運用されているものもある（非特許文献１，２参照）。
【０００７】
仮想サーバ方式は、全体のハッシュ空間を複数の部分ハッシュ空間に分割し、一つの部分ハッシュ空間を一つの仮想サーバが受け持つ。データのアクセス要求は、論理的にはデータＩＤ（データの識別のハッシュ値）を含む部分ハッシュ空間を持つ仮想サーバが管理する。一般的に、仮想サーバが管理する部分ハッシュ空間と実際のノード（以下「実ノード」とする）をマッピングすることで仮想サーバへのアクセス要求が実ノードと関連付けられ、データへのアクセス要求はマッピングされた実ノードが処理する。仮想サーバ方式は、システムの実ノードの負荷分布状態に基づいて、仮想サーバと実ノードのマッピングを変更することにより負荷分布を調節する。
【非特許文献１】Giuseppe DeCandia, Deniz Hastorun, Madan Jampani, Gunavardhan Kakulapati, Avinash Lakshman, Alex Pilchin, Swaminathan Sivasubramanian, Peter Vosshall and Werner Vogels, "Dynamo:Amazon's Highly Available Key-value Store", SOSP'07, 2007, p.205-220
【非特許文献２】Brighten Godfrey, Karthik Lakshminarayanan, Sonesh Surana, Richard Karp and Ion stoica, "Load Balancing in Dynamic Structured P2P Systems", INFOCOM 2004. Twenty-third AnnalJoint Conference of the IEEE Computer and Communications Societies, 2004, Vol.4, p2253-2262
【発明の開示】
【発明が解決しようとする課題】
【０００８】
仮想サーバ方式は、ノードの負荷情報だけに基づいて、システム全体の性能が最大限に発揮できるよう資源を管理している。システムの資源を均等に使用するために、ユーザのデータは全仮想サーバに分散格納され、一つの仮想サーバには異なるユーザのデータが一緒に格納されるので、ＤＨＴデータ管理機構の資源をユーザ毎に最適に管理することが不可能となる。例えば、あるユーザが継続的に負荷の高いアクセス要求をあるデータに対して行う場合、システムは、負荷を分散するために、そのデータを格納している仮想サーバを負荷の少ない別の実ノードに移動させる。これにより、システム全体の性能を向上させることはできるが、そのユーザが資源を独占することとなり、システムに負担を掛けていない他のユーザの資源の利用を制限することになる。
【０００９】
また、あるユーザが必要な資源が保証できなくて、そのユーザのために実ノードを追加しようとした場合、ユーザのデータはシステムの全実ノードに格納されるため、そのユーザのためのピンポイントな資源の投入が難しいという問題がある。既存のシステムでは、システム全体の性能を向上させるために、あるユーザが必要とする資源以上の実ノードを追加するしかない。
【００１０】
このように、従来のＤＨＴデータ管理機構では、ユーザ毎に使用可能な資源を管理することができなかった。
【００１１】
本発明は、上記に鑑みてなされたものであり、その課題とするところは、多数のユーザが共同利用するＤＨＴデータ管理機構において、ユーザ毎に使用可能な資源を管理することにある。
【課題を解決するための手段】
【００１２】
第１の本発明に係るアクセス方法は、複数のノードによりＰ２Ｐネットワークを構成し、分散ハッシュテーブルを利用してノードを管理する分散データ管理装置へのアクセス方法であって、管理手段により、ノードを仮想的に表す仮想ノードのクラスタをユーザ毎に設定し、分散データ管理装置が格納するデータへのアクセス処理を仮想ノードのいずれかに分散して割り振るステップと、マッピング手段により、仮想ノードにノードを関連付けるステップと、を有することを特徴とする。
【００１３】
本発明にあっては、ユーザ毎に複数の仮想ノードを設定し、データへのアクセス処理を各仮想ノードに振り分け、仮想ノードと実際にデータを管理するノードとを関連付けることにより、ユーザが利用するノードを限定することができ、仮想ノードの数、あるいは、仮想ノードとノードとの関連付け（マッピング）を調整することで、ユーザが分散データ管理装置において使用可能な資源を管理することができる。
【００１４】
また、アクセス処理の振り分けを分散データ管理装置外（ユーザ側）で行うことにより、分散データ管理装置にアクセスするユーザが増加しても分散データ管理装置の負荷の増加を抑えることができる。
【００１５】
上記アクセス方法において、割り振るステップは、クラスタにハッシュ空間を与え、仮想ノードのそれぞれにハッシュ空間を分割した部分ハッシュ空間を割り当て、データのハッシュ値に基づいてアクセス処理を割り振ることを特徴とする。
【００１６】
本発明にあっては、仮想ノードに部分ハッシュ空間を割り当て、データのハッシュ値に基づいてそのデータを管理する仮想ノードを決定することにより、データを仮想ノードに一様に分散して管理させることが可能となる。
【００１７】
第２の本発明に係るアクセス装置は、複数のノードによりＰ２Ｐネットワークを構成し、分散ハッシュテーブルを利用してノードを管理する分散データ管理装置へのアクセス装置であって、ノードを仮想的に表す仮想ノードのクラスタをユーザ毎に設定し、分散データ管理装置が格納するデータへのアクセス処理を仮想ノードのいずれかに分散して割り振る管理手段と、仮想ノードにノードを関連付けるマッピング手段と、を有することを特徴とする。
【００１８】
上記アクセス装置において、管理手段は、クラスタにハッシュ空間を与え、仮想ノードのそれぞれにハッシュ空間を分割した部分ハッシュ空間を割り当て、データのハッシュ値に基づいてアクセス処理を割り振ることを特徴とする。
【００１９】
第３の本発明に係る分散データ管理システムは、分散データ管理装置とその分散データ管理装置へのアクセスに用いるアクセス装置とを備えた分散データ管理システムであって、分散データ管理装置は、データを格納させる複数のノードを備え、複数のノードによりＰ２Ｐネットワークを構成し、分散ハッシュテーブルを利用してノードを管理するものであって、アクセス装置は、ノードを仮想的に表す仮想ノードのクラスタをユーザ毎に設定し、分散データ管理装置が格納するデータへのアクセス処理を仮想ノードのいずれかに分散して割り振る管理手段と、仮想ノードにノードを関連付けるマッピング手段と、を有することを特徴とする。
【００２０】
上記分散データ管理システムにおいて、管理手段は、クラスタにハッシュ空間を与え、仮想ノードのそれぞれにハッシュ空間を分割した部分ハッシュ空間を割り当て、データのハッシュ値に基づいてアクセス処理を割り振ることを特徴とする。
【発明の効果】
【００２１】
本発明によれば、多数のユーザが共同利用するＤＨＴデータ管理機構において、ユーザ毎に使用可能な資源を管理することができる。
【発明を実施するための最良の形態】
【００２２】
以下、本発明の実施の形態について図面を用いて説明する。
【００２３】
図１は、本実施の形態におけるアクセス装置を用いてデータ管理システムに格納されたデータにアクセスするシステムの構成を示す全体構成図である。同図に示すアクセス装置１０は、クライアント端末１に備えられ、データ管理システム２に格納されたデータにアクセスするものである。クライアント端末１、データ管理システム２は、ネットワーク４に接続されており、ＴＣＰなどの相互通信可能な通信プロトコルを用いて通信を行う。
【００２４】
データ管理システム２は、それぞれがネットワーク４に接続された複数のノード２０を持つＰ２Ｐ（Peer-to-peer）ネットワークで構成されている。各ノード２０に、それぞれが担当する部分ハッシュ空間を割り当て、分散ハッシュテーブル（ＤＨＴ：Distributed Hash Table）を用いてデータの格納位置を管理する分散ハッシュ法を利用する。部分ハッシュ空間は、ハッシュ空間全体をノード２０の個数分に分割したものであり、各ノード２０それぞれに別々の部分ハッシュ空間が割り当てられる。
【００２５】
ノード２０は、負荷分散装置２１、ルーティング装置２２、Ｉ／Ｏ管理装置２３およびローカルストレージ２４を備える。ノード２０の備える負荷分散装置２１、ルーティング装置２２およびＩ／Ｏ管理装置２３は、演算処理装置、記憶装置、メモリ等を備えた計算機により構成して、各部の処理をプログラムによって実行させるものとしてもよい。通常、パーソナルコンピュータ、サーバコンピュータなどをノード２０として利用するが、ローカルストレージ２４を備える計算機であれば、携帯電話機などもノード２０として利用可能である。
【００２６】
負荷分散装置２１は、ノード２０の負荷情報、性能情報を管理し、ノード２０間の負荷が偏った場合、負荷分散政策に基づき、負荷の高いノード２０から負荷の低いノード２０にデータを移動させることによりデータ管理システム２全体の負荷を分散させる装置である。データを移動させた場合、ＤＨＴの規則に従って、ノード２０の受け持つ部分ハッシュ空間の変更処理を行う。
【００２７】
ルーティング装置２２は、あるノード２０に到達したアクセス要求がそのノード２０が担当しないデータに対する要求である場合、つまり、そのデータのハッシュ値がノード２０が受け持つ部分ハッシュ空間に含まれない場合、そのアクセス要求を該当するデータを管理するノード２０に到達するように再伝送する。あるノード２０に到達したアクセス要求が担当するデータに対する要求である場合、自分の位置をクライアント端末１に通知する。そして、クライアント端末１は、そのノード２０のＩ／Ｏ管理装置２３を介してデータにアクセスする。ルーティング装置２２は、Chord, Pastry などのＤＨＴルーティングアルゴリズムを用いてルーティング処理を行う。
【００２８】
Ｉ／Ｏ管理装置２３は、クライアント端末１からデータを受け取りローカルストレージ２４に記録する。また、クライアント端末１が要求するデータをローカルストレージ２４から読み出し、クライアント端末１に送信する。
【００２９】
クライアント端末１は、アクセス装置１０を備える。アクセス装置１０は、演算処理装置、記憶装置、メモリ等を備えた計算機により構成して、各部の処理をプログラムによって実行させるものとしてもよい。パーソナルコンピュータなどをクライアント端末１として利用するが、サーバコンピュータ、携帯電話機などを利用することも可能である。アクセス装置１０は、クライアント端末１の要求に応じ、データが格納されているノード２０を特定し、Ｉ／Ｏ管理装置２３を介してデータにアクセスする装置である。アクセス装置１０は、管理部１１およびマッピング部１２を備える。
【００３０】
管理部１１は、内部でユーザ毎に仮想ノードのクラスタを設定し、ユーザのアクセス要求を処理すべき仮想ノードを決定する。仮想ノード自身は、データを格納するものではなく、ユーザのデータを各ノード２０に振り分けるための機構である。
【００３１】
マッピング部１２は、仮想ノードと実際にデータを格納するノード２０とを関連付ける。
【００３２】
管理部１１によりデータを格納する仮想ノードを振り分け、マッピング部１２により仮想ノードと実際のノード２０とを関連付けて、関連付けられたノード２０にデータを格納させる。管理部１１、マッピング部１２の詳細については後述する。
【００３３】
認証システム３がネットワーク４に接続されており、ユーザに関する情報を管理する。ユーザに関する情報としては、例えば、後述する仮想ノード情報がある。ユーザは、ユニークなユーザＩＤで識別される。認証システム３としては、例えば、Kerberos システム等を用いる。
【００３４】
次に、ユーザの登録について説明する。データ管理システム２の利用を開始するユーザは、利用を開始する前にユーザの登録を行う。ユーザの登録は、データ管理システム２の管理者が行う。ユーザ登録時に、ユーザの要望に応じてユーザが利用可能なノード２０の上限を決め、その上限と同じ数の仮想ノード情報を作成する。作成された仮想ノード情報は、認証システム３に格納される。仮想ノード情報は、アクセス装置１０の管理部１１で管理される仮想ノードに関する情報であり、アクセス装置１０は、ユーザ認証後に、この仮想ノード情報を読み込んで仮想ノードを構成する。
【００３５】
仮想ノード情報は、図２に示すように、ユーザＩＤ、ノードＩＤ、部分ハッシュ空間、現在使用容量および最大容量で構成される。
【００３６】
ユーザＩＤは、ユーザを識別する文字列データである。
【００３７】
ノードＩＤは、仮想ノードを識別する数値データである。ノードＩＤの値は、０以上の整数であり、同一ユーザのノードＩＤは重複しない。
【００３８】
部分ハッシュ空間は、仮想ノードが受け持つ部分ハッシュ空間の範囲を示しており、部分ハッシュ空間の始まりの値と終わりの値のペアで構成される。ユーザがＮ個の仮想ノードを利用する場合、ハッシュ空間の全体を連続したＮ個の部分ハッシュ空間に分割し、仮想ノードのそれぞれに各部分ハッシュ空間を割り当てる。つまり、管理部１１に構成される仮想ノードのクラスタにハッシュ空間を与え、そのハッシュ空間を分割した部分ハッシュ空間を仮想ノードのそれぞれに割り当てる。本実施の形態では、ハッシュ空間全体では、データ管理システム２が使用するハッシュ空間と同じ大きさである。
【００３９】
現在使用容量は、ユーザがその仮想ノードに関連付けられたノード２０に格納しているデータの総量を示す数値データである。単位は、ＭＢ，ＧＢ，ＴＢなどが設定可能である。
【００４０】
最大容量は、ユーザがその仮想ノードに関連付けられたノード２０に格納可能なデータの総量を示す数値データである。単位は、現在使用容量と同じものを用いる。
【００４１】
次に、ユーザ登録時における仮想ノード情報の作成について説明する。図３は、仮想ノード情報を作成する処理の流れを示すフローチャートである。
【００４２】
まず、ユーザは、利用可能な最大ノード数Ｎと仮想ノードの最大容量Ｃを設定する（ステップ３０１）。最大容量Ｃは、ユーザ別、仮想ノード別に設定することも可能であるが、本実施の形態においては、全ての仮想ノードにおいて同じ値を持つものとする。最大ノード数Ｎは、ユーザの要望に応じて設定可能である。資源を多く必要とするユーザに大きい値を与える。
【００４３】
続いて、ハッシュ空間全体をＮ個の部分ハッシュ空間に分割する（ステップ３０２）。部分ハッシュ空間は、互いに重複する範囲がなく、全ての部分ハッシュ空間をユニオンすると元のハッシュ空間が生成可能となるように分割する。また、本実施の形態では、部分ハッシュ空間それぞれの大きさが等しくなるように分割する。
【００４４】
続いて、仮想ノード情報を作成する（ステップ３０３）。仮想ノード情報のユーザＩＤに登録するユーザのＩＤを代入し、部分ハッシュ空間にまだ仮想ノード情報に代入されていない部分ハッシュ空間を代入し、他のノードＩＤと重複しないようにノードＩＤを設定する。現在使用容量には０を、最大容量には最大容量Ｃを代入する。そして、Ｎ個の仮想ノード情報を作成したか否かを判断し（ステップ３０４）、すべて作成していない場合には、ステップ３０３に戻り次の仮想ノード情報の作成を行う。
【００４５】
Ｎ個の仮想ノード情報を作成し終えたら、作成した仮想ノード情報を認証システム３に格納する（ステップ３０５）。このとき、作成した仮想ノード情報のそれぞれに対応する各ノード２０にも、仮想ノード情報を格納する。仮想ノードとノード２０との対応は、後述するマッピング部１２で用いるマッピングアルゴリズムにより特定することができる。
【００４６】
なお、本実施の形態においては、認証システム３に仮想ノード情報を格納したが、データ管理システム２に仮想ノード情報をデータとして格納してもよい。このとき、ユーザＩＤを１からＬ回まで連鎖的にハッシュさせてＬ個のハッシュ値を作成し、そのハッシュ値に対応するノード２０に仮想ノード情報を格納する。これにより、仮想ノード情報がＬ個複製されてデータ管理システム２に格納されることになる。Ｌは任意に設定可能であり、データ管理システム２で全ユーザに共通の値である。
【００４７】
ユーザ登録を行った後は、ユーザが認証システム３にアクセスして認証することで、仮想ノード情報がアクセス装置１０に読み込まれてデータ管理システム２にアクセスが可能となる。
【００４８】
次に、アクセス装置１０の管理部１１について説明する。
【００４９】
図４は、管理部１１の処理を説明するための説明図である。同図に示すように、管理部１１は、データＩＤを入力し、そのデータを管理する仮想ノードのノードＩＤを出力する。データＩＤは、データの識別（例えば、データ名など）をハッシュ関数でハッシュした値である。ハッシュ関数としては、例えば、SHA-1 を利用する。
【００５０】
まず、ユーザが認証システム３により認証されると、管理部１１は、認証システム３に格納された仮想ノード情報を読み込み、管理部１１のメモリ上に仮想ノードリストを構成する。仮想ノードリストは、仮想ノード情報に従って生成された仮想ノードのリストであり、仮想ノードを、その仮想ノードに割り当てられた部分ハッシュ空間の始まりの値の順に整列させている。この仮想ノードリストは、管理部１１が備えたメモリ上で管理され、一定時間毎（例えば、約２０分毎）に内容を更新する。
【００５１】
管理部１１にデータＩＤが入力されると、そのデータＩＤを管理すべき仮想ノードを検索する。具体的には、入力されたデータＩＤを含む部分ハッシュ空間を管理する仮想ノードを検索する。検索には二分探索アルゴリズムを用いる。そして、管理部１１は、検索された仮想ノードのノードＩＤを出力する。
【００５２】
このように、データの識別をハッシュさせたデータＩＤを用いてそのデータを管理する仮想ノードを決定するので、データが仮想ノードに一様に分散して格納される。
【００５３】
次に、アクセス装置１０のマッピング部１２について説明する。
【００５４】
図５は、マッピング部１２の処理を説明するための説明図である。同図に示すように、マッピング部１２は、ユーザＩＤと仮想ノードのノードＩＤとを入力し、仮想ノードに対応する実ＩＤを出力する。実ＩＤは、データ管理システム２が各ノード２０に割り当てたハッシュ空間全体の範囲内の値である。データ管理システム２は、この実ＩＤを利用してノード２０を探す。
【００５５】
マッピング部１２が出力する実ＩＤによりデータが管理されるノード２０が決定するので、データをなるべく均等に分散させるために、マッピング部１２は、以下の２つの要件を満たすように実ＩＤを決める。
【００５６】
１．実ＩＤがハッシュ空間において一様に分布すること。
【００５７】
２．ユーザＩＤとノードＩＤが分かれば同じ実ＩＤを計算可能であること。
【００５８】
本実施の形態においては、SHA-1 アルゴリズムを用いて、ユーザＩＤをノードＩＤ回連鎖的にハッシュした値を実ＩＤとして利用する。
【００５９】
このマッピング部１２により仮想ノードは、ノード２０のいずれかに関連付けられる。ノード２０は、同一ユーザの仮想ノードを複数関連付けられるものでもよい。もちろん他のユーザの仮想ノードを関連付けられてもよい。例えば、あるノード２０の負荷が増大したときに、そのノード２０は負荷分散装置２１を用いて、仮想ノードのデータをまるごと別のノード２０に移動させることで負荷を減少することができる。
【００６０】
次に、クライアント端末がデータを格納しているノードを検索するプロセスについて説明する。図６は、ノードを検索するプロセスを説明するための説明図である。
【００６１】
まずクライアント端末１は、アクセスするデータの識別（データ名）をアクセス装置１０に通知する。そして、アクセス装置１０は、データ名をハッシュ関数でハッシュしてデータＩＤを生成し、生成したデータＩＤを管理部１１に入力する。管理部１１は、データＩＤに対応する仮想ノードのノードＩＤを検索して出力する。そして、マッピング部１２は、ユーザＩＤ、仮想ノードのノードＩＤを入力し、その仮想ノードに対応する実ＩＤを出力する。
【００６２】
アクセス装置１０は、データ管理システム２の任意のノード２０に対して、得られた実ＩＤにより、所望のデータが格納されているノード２０の位置の検索を要求する。ノード２０は、ＤＨＴルーティングアルゴリズムを用いて実ＩＤに対応するノード２０を検索する。
【００６３】
クライアント端末１は、データが格納されたノード２０の位置が特定されたら、そのノード２０に対してデータへのアクセス（更新／参照）を要求し、データの書き込み、読み出しなどの処理を行う。
【００６４】
図７は、本実施の形態におけるＩ／Ｏ管理装置２３を説明するための説明図である。同図に示すように、Ｉ／Ｏ管理装置２３は、ユーザ毎の仮想ノードを管理するユーザ別仮想ノードリストをメモリ上に構成する。ユーザ別仮想ノードリストは、そのノード２０に対応する仮想ノードをユーザ毎に関連付けたものであり、ユーザ毎の仮想ノードに対するデータの検索やアクセス要求を容易にするものである。ユーザ別仮想ノードリストは、ユーザ登録時に格納される仮想ノード情報に基づいて構成される。
【００６５】
ユーザ別仮想ノードリストは２段階で構成される。一段階目は、ノード２０に対応する仮想ノードの情報をユーザ別にまとめたものである。ユーザ毎に、仮想ノードのノードＩＤをＫｅｙとした二分探索木である。二段階目は、ユーザＩＤとそのユーザＩＤに対応する上記二分探索木へのポインタとのペアで構成された、ユーザＩＤをＫｅｙとした二分探索木である。
【００６６】
Ｉ／Ｏ管理装置２３は、ユーザ別仮想ノードリストの一段階目の階層と同じ構造のディレクトリ構造をローカルストレージ２４に作成する。データディレクトリの下に、ユーザＩＤを名前としたディレクトリを作成し、そのディレクトリの下に仮想ノードのノードＩＤを名前としてディレクトリを作成する。例えば、ユーザＡの、ノードＩＤが 2 の仮想ノードのデータは、"/Data/ユーザＡ/2/" というディレクトリの下に格納される。このディレクトリ以下の使用容量を調べることで仮想ノードの現在使用容量を算出することができる。これらのディレクトリの作成は、ユーザ登録時に格納される仮想ノード情報に基づいて行う。
【００６７】
ここで、クライアント端末１からデータ更新要求が来た場合のＩ／Ｏ管理装置２３の動作について説明する。
【００６８】
クライアント端末１は、更新したいデータを格納するノード２０の位置を得た後、実ＩＤ、ユーザＩＤ、ノードＩＤ、データＩＤと更新するデータの内容をそのノード２０に伝送する。ノード２０のＩ／Ｏ管理装置２３は、ユーザＩＤとノードＩＤを用いてユーザ別仮想ノードリストから仮想ノードを探索する。ここで、仮想ノードが無い場合は、エラーを返す。仮想ノードが存在する場合は、ローカルストレージ２４に格納されているデータを更新する。
【００６９】
データを更新した後、そのデータが格納されていたディレクトリ以下の使用容量が変化した場合は、ユーザ別仮想ノードリストの対応する仮想ノードの現在使用容量を変更する。そして、クライアント端末１に成功メッセージとともに現在使用容量を通知する。クライアント端末１のアクセス装置１０は、通知された現在使用容量を用いて対応する仮想ノードの現在使用容量を変更する。
【００７０】
クライアント端末１からの参照要求も上記更新要求と同様の処理が行われる。
【００７１】
次に、仮想ノードの追加について説明する。ユーザは、当初の予定より資源が必要な場合、システムの管理者に対して仮想ノードの追加を要求する。仮想ノードの追加は、管理者が仮想ノード情報を追加することにより行う。
【００７２】
図８は、仮想ノード情報を追加する処理の流れを示すフローチャートである。まず、管理者は、仮想ノードを追加するユーザの仮想ノード情報を認証システム３から読み出す（ステップ５０１）。
【００７３】
ユーザからの要請に基づいて追加する仮想ノード数Ｐ、最大容量Ｃを決める（ステップ５０２）。本実施の形態では、ユーザ登録時に設定した最大容量Ｃをそのまま用いる。
【００７４】
続いて、ハッシュ空間をＮ＋Ｐ個の部分ハッシュ空間に分割する（ステップ５０３）。現在の仮想ノード数ＮにＰ個の仮想ノードを追加するので、部分ハッシュ空間の個数がＮ＋Ｐになるように分割する。本実施の形態では、ハッシュ空間を分割する方法としては、以下の２つの方式のいずれか１つを管理者が選択する。
【００７５】
方式１は、ハッシュ空間全体をＮ＋Ｐ個の連続した部分ハッシュ空間に分割するものである。このとき、部分ハッシュ空間は互いに重複する部分がなく、全ての部分ハッシュ空間をユニオンすると元のハッシュ空間が生成できる。また、部分ハッシュ空間それぞれの大きさが等しくなるように分割する。
【００７６】
方式２は、既存の部分ハッシュ空間をＰ個選択し、それぞれを半分に分割するものである。Ｎ＜Ｐの場合、つまり、既存の部分ハッシュ空間の数がＰ個より少ない場合は方式１を用いる。
【００７７】
Ｎ＋Ｐ個の部分ハッシュ空間を作成したら、まず既存の仮想ノードに部分ハッシュ空間を割り当てる。例えば、既存の仮想ノードへの割り当ては、部分ハッシュ空間にＩＤ（０から始まる整数）を順番に与え、既存の仮想ノードには、その仮想ノードのノードＩＤと同じ値を持つ部分ハッシュ空間のＩＤを割り当てることにより行う。
【００７８】
既存の仮想ノードへの部分ハッシュ空間の割り当てが完了したら、新たな仮想ノード情報を追加する（ステップ５０４）。追加した仮想ノード情報のユーザＩＤ、ノードＩＤを設定し、追加した仮想ノード情報の部分ハッシュ空間には、まだ仮想ノードに割り当てられていない部分ハッシュ空間を割り当てる。現在使用容量には０を、最大容量には最大容量Ｃを代入する。そして、Ｐ個の仮想ノード情報を追加したか否かを判断し（ステップ５０５）、まだ追加する仮想ノード情報がある場合には、ステップ５０４へ戻る。
【００７９】
Ｐ個の仮想ノード情報を追加し終えたら、変更した仮想ノード情報を認証システム３に格納する（ステップ５０６）。
【００８０】
最後に、部分ハッシュ空間が変更された影響を受けるデータを移動する（ステップ５０７）。既存の仮想ノードに割り当てられた部分ハッシュ空間が変更されるため、一部のデータについては、そのデータＩＤに基づいて決定される仮想ノードが変更される。仮想ノードが変更されることにより、そのデータを格納するノード２０が変わる場合がある。このようにデータＩＤに基づいて決定される仮想ノードが変更されるデータは、新たな仮想ノードに対応するノード２０に移動させる必要がある。ノード２０間のデータ移動は、データ管理システム２の負荷分散装置２１を用いて行う。
【００８１】
図９に仮想ノードの追加に伴う部分ハッシュ空間の範囲が変更される様子を示した。同図では、１２時の方向を全体ハッシュ空間の始まりと終わりの点として全体ハッシュ空間を円で表し、各仮想ノードを、その仮想ノードに割り当てられた部分ハッシュ空間の始まりの値に対応する位置に配置した。時計回りにハッシュ値が大きくなっている。同図に示す各仮想ノードから出ている矢印は各仮想ノードが担当する部分ハッシュ空間の範囲を示している。
【００８２】
図９では、仮想ノード１，２に仮想ノード３，４を追加した様子を示している。仮想ノード３は、追加前の仮想ノード１に割り当てられた部分ハッシュ空間に配置され、仮想ノード４は、追加前の仮想ノード２に割り当てられた部分ハッシュ空間に配置された。よって、仮想ノード１，２が管理していたデータの一部は、仮想ノード３，４が管理することとなるので、それらのデータを移動する必要がある。
【００８３】
まず、各仮想ノードは、仮想ノード追加以前に自身が担当していた部分ハッシュ空間の終わりの値（以下、「以前値」とする）と、仮想ノード追加後に自身が担当する部分ハッシュ空間の終わりの値（以下、「現在値」とする）を比べる。現在値が以前値より小さい場合は、現在値から以前値の範囲のデータをその範囲を担当する仮想ノードに移動する。
【００８４】
データを移動するときには、（ユーザＩＤ，移動元ノードＩＤ，移動先ノードＩＤ，移動データ範囲）の情報を作成する。移動元ノードＩＤは、移動させるデータを管理する仮想ノードのノードＩＤである。移動先ノードＩＤは、データを移動する先の仮想ノードのノードＩＤである。移動データ範囲は、現在値と以前値のペアであり、現在値が範囲の始まり、以前値が範囲の終わりを示す。移動元ノードＩＤと移動先ノードＩＤにマッピングアルゴリズムを適用してそれぞれの実ＩＤを得る。そして、得られた実ＩＤに対応するノード２０の負荷分散装置２１によりデータを移動する。
【００８５】
次に、仮想ノードの削除について説明する。仮想ノードの削除も追加と同様に、管理者が仮想ノード情報の削除することにより行う。
【００８６】
図１０は、仮想ノード情報を削除する処理の流れを示すフローチャートである。まず、削除する仮想ノード数Ｍを決め（ステップ７０１）、削除する仮想ノード数Ｍが現在の仮想ノード数Ｎよりも小さく、Ｎ個の仮想ノードの現在使用容量の合計が（Ｎ−Ｍ）×最大容量より少ない場合（ステップ７０２）、仮想ノードを削除する処理を続ける。
【００８７】
管理者は、仮想ノード情報を認証システム３から読み出す（ステップ７０３）。
【００８８】
続いて、削除する仮想ノード情報を決定する（ステップ７０４）。基本的に、ノードＩＤが大きい順に削除するＭ個の仮想ノード情報を選ぶ。
【００８９】
続いて、ハッシュ空間をＮ−Ｍ個の部分ハッシュ空間に分割する（ステップ７０５）。本実施の形態では、以下の２つの方式のいずれか１つを管理者が選択する。
【００９０】
方式１は、ハッシュ空間全体をＮ−Ｍ個の連続した部分ハッシュ空間に分割する。このとき、部分ハッシュ空間は互いに重複する部分がなく、全ての部分ハッシュ空間をユニオンすると元のハッシュ空間が生成できる。また、部分ハッシュ空間それぞれの大きさが等しくなるように分割する。
【００９１】
方式２は、削除する仮想ノードに割り当てられた部分ハッシュ空間を、その部分ハッシュ空間の前の部分を割り当てられた仮想ノードの部分ハッシュ空間とユニオンさせる。
【００９２】
そして、部分ハッシュ空間が変更された影響を受けるデータを移動する（ステップ７０６）。仮想ノードの追加と同様に、仮想ノードの削除においてもノード２０間で一部のデータ移動が必要となる。
【００９３】
データの移動が終了したら、仮想ノード情報を削除する（ステップ７０７）。仮想ノード情報を削除する場合、ノード２０に格納された仮想ノード情報も削除する。ローカルストレージ２４に作成されたディレクトリも削除する。Ｍ個の仮想ノード情報を削除したら（ステップ７０８）、変更した仮想ノード情報を認証システム３に格納する（ステップ７０９）。
【００９４】
図１１では、仮想ノード１，２，３，４から仮想ノード３，４を削除した様子を示している。図１１の見方は、図９と同様である。
【００９５】
削除時のデータの移動は、二段階で行われる。まず一段階目は、削除する仮想ノードが受け持っていたデータを図１１のハッシュ空間において反時計回りで最初に出会う仮想ノード（削除されないもの）に移動させる。図１１の例では、仮想ノード３のデータは仮想ノード１に移動され、仮想ノード４のデータは仮想ノード２に移動される。
【００９６】
続いて、二段階目は、削除される仮想ノードから移動されたデータのうち、その仮想ノードに割り当てられた新しい部分ハッシュ空間の終わりの値よりも大きなデータＩＤを持つもの、つまり、その仮想ノードに割り当てられた部分ハッシュ空間内に無いデータを担当する仮想ノードに移動する。
【００９７】
データの移動は、ノードの追加時と同様に、（ユーザＩＤ，移動元ノードＩＤ，移動先ノードＩＤ，移動データ範囲）の情報を作成し、各ノードＩＤを実ＩＤに変換して負荷分散装置２１により行う。
【００９８】
なお、二段階でデータを移動させなくとも、データ移動コストを削減するために、移動すべきデータの移動先になる仮想ノードを先に計算し、データの移動を一回で行ってもよい。
【００９９】
したがって、本実施の形態によれば、管理部１１が仮想ノードを設定し、データ管理システム２に格納されたデータへのアクセス処理を各仮想ノードに振り分け、マッピング部１２により仮想ノードとデータ管理システム２のノード２０とを関連付けることにより、ユーザが利用するノード２０を仮想ノード数以下に限定することができる。さらに、仮想ノード数、仮想ノードとノード２０のマッピングを調整することで、ユーザがデータ管理システム２において使用可能な資源を管理することができる。
【０１００】
本実施の形態によれば、アクセス処理の振り分けをクライアント端末１のアクセス装置１０により行うことで、データ管理システム２の負荷を軽減することが可能となる。
【０１０１】
本実施の形態によれば、管理部１１は、仮想ノードに部分ハッシュ空間を割り当て、データの識別のハッシュ値に基づいてそのデータを管理する仮想ノードを決定することにより、データを仮想ノードに一様に分散して管理させることが可能となり、実際にデータを格納するノードにおいてもデータを分散して管理させることができる。したがって、特定のノードがボトルネックとはならず、システム全体の資源使用効率もよい。
【０１０２】
このように、本実施の形態によれば、ユーザ（アクセス装置１０）毎に資源を管理することができるので、例えば、メールやログの格納の為にデータ管理システム２を使用するユーザは、大容量の格納空間を必要とするが、大量のアクセス処理資源は必要としないので、仮想ノードを少数のノード２０にマッピングしておく。一方、大容量の格納空間と大量のアクセス処理を必要とする動画参照サービスの為にデータ管理システム２を使用するユーザに対しては、多くの仮想ノードを多くのノード２０にマッピングする、というようにユーザの利用形態に合わせてシステムの資源を管理することができる。
【０１０３】
また、あるユーザの為に資源を投入する必要がある場合、データ管理システム２にノード２０を追加した後、そのユーザの仮想ノードのマッピングを変更することにより、特定のユーザに対して必要な資源をピンポイントで追加することが可能となる。
【図面の簡単な説明】
【０１０４】
【図１】本実施の形態におけるデータ管理システムの構成を示す全体構成図である。
【図２】仮想ノード情報の構成を示す図である。
【図３】仮想ノード情報を作成する処理の流れを示すフローチャートである。
【図４】アクセス装置の管理部を説明するための説明図である。
【図５】アクセス装置のマッピング部を説明するための説明図である。
【図６】本実施の形態におけるデータ管理システムがノードを検索するプロセスを説明するための説明図である。
【図７】ノードのＩ／Ｏ管理装置の構成を示すブロック図である。
【図８】仮想ノード情報を追加する処理の流れを示すフローチャートである。
【図９】仮想ノードを追加するときに仮想ノードに割り当てられた部分ハッシュ空間が変更させる様子を示す図である。
【図１０】仮想ノード情報を削除する処理の流れを示すフローチャートである。
【図１１】仮想ノードを削除するときに仮想ノードに割り当てられた部分ハッシュ空間が変更させる様子を示す図である。
【符号の説明】
【０１０５】
１…クライアント端末
２…データ管理システム
３…認証システム
４…ネットワーク
１０…アクセス装置
１１…管理部
１２…マッピング部
２０…ノード
２１…負荷分散装置
２２…ルーティング装置
２３…管理装置
２４…ローカルストレージ
【図１】
2009295127.tif 000003
【図２】
2009295127.tif 000004
【図３】
2009295127.tif 000005
【図４】
2009295127.tif 000006
【図５】
2009295127.tif 000007
【図６】
2009295127.tif 000008
【図７】
2009295127.tif 000009
【図８】
2009295127.tif 000010
【図９】
2009295127.tif 000011
【図１０】
2009295127.tif 000012
【図１１】
2009295127.tif 000013