(57)【要約】  複数の記憶装置を備えた情報処理システムにおけるデータ管理のための通信量を低減する。  記憶部（１１）は、セグメントとキーとの対応関係を示すセグメント情報を記憶する。制御部（１２）は、一のセグメントに属するデータの増加に応じて、当該一のセグメントを複数に分割し、セグメント情報を更新する。また、制御部（１２）は、第１のセグメントから１回または階層的にＮ（Ｎ＞１）回の分割によって複数の第２のセグメントが得られたときに、Ｎが所定の条件を満たす場合には、複数の第２のセグメントの少なくとも１つに属するデータを、第１のセグメントに属するデータを記憶していた記憶装置から他の記憶装置へ移動することを許容する。Ｎが所定の条件を満たさない場合には、データの移動を制限する。
2013103012.tif 000002
【特許請求の範囲】
【請求項１】
記憶するデータに対応付けられるキーの集合を複数のセグメントに分割し、セグメント単位で複数の記憶装置へのデータの配置を管理する情報処理システムに用いられる、情報処理装置であって、
セグメントとキーとの対応関係を示すセグメント情報を記憶する記憶部と、
一のセグメントに属するデータの増加に応じて、当該一のセグメントを複数に分割し、前記セグメント情報を更新する制御部と、を有し、
前記制御部は、第１のセグメントから１回または階層的にＮ（Ｎ＞１）回の分割によって複数の第２のセグメントが得られたときに、前記Ｎが所定の条件を満たす場合には、前記複数の第２のセグメントの少なくとも１つに属するデータを、前記第１のセグメントに属するデータを記憶していた第１の記憶装置から第２の記憶装置へ移動することを許容し、前記Ｎが前記所定の条件を満たさない場合には、前記複数の第２のセグメントに属するデータの移動を制限する、情報処理装置。
【請求項２】
前記所定の条件は、前記第１のセグメントの階層と前記複数の第２のセグメントの階層との間の間隔が、２以上の所定の階層間隔の倍数であるという条件である、請求の範囲第１項記載の情報処理装置。
【請求項３】
各セグメントには、分割の深さに応じた長さのラベルが付与されており、前記制御部は、前記複数の第２のセグメントに付与されたラベルに基づいて、前記所定の条件を満たすか否か判定する、請求の範囲第１項または第２項記載の情報処理装置。
【請求項４】
前記所定の条件を満たすか否かは、同じ階層のセグメント間では判定結果が同じになる方法を用いて判定する、請求の範囲第１項乃至第３項の何れか一項に記載の情報処理装置。
【請求項５】
前記所定の条件を満たすか否かは、同じ階層のセグメント間でもセグメントによって判定結果が異なる方法を用いて判定する、請求の範囲第１項乃至第３項の何れか一項に記載の情報処理装置。
【請求項６】
記憶するデータに対応付けられるキーの集合を複数のセグメントに分割し、セグメント単位で複数の記憶装置へのデータの配置を管理する情報処理システムが行うデータ管理方法であって、
一のセグメントに属するデータの増加に応じて、当該一のセグメントを複数に分割し、セグメントとキーとの対応関係を示すセグメント情報を更新し、
第１のセグメントから１回または階層的にＮ（Ｎ＞１）回の分割によって複数の第２のセグメントが得られたときに、前記Ｎが所定の条件を満たす場合には、前記複数の第２のセグメントの少なくとも１つに属するデータを、前記第１のセグメントに属するデータを記憶していた第１の記憶装置から第２の記憶装置へ移動することを許容し、
前記Ｎが前記所定の条件を満たさない場合には、前記複数の第２のセグメントに属するデータの移動を制限する、データ管理方法。
【請求項７】
記憶するデータに対応付けられるキーの集合を複数のセグメントに分割し、セグメント単位で複数の記憶装置へのデータの配置を管理する情報処理システムに用いられるコンピュータに実行させるプログラムであって、前記コンピュータに、
一のセグメントに属するデータの増加に応じて、当該一のセグメントを複数に分割し、セグメントとキーとの対応関係を示すセグメント情報を更新し、
第１のセグメントから１回または階層的にＮ（Ｎ＞１）回の分割によって複数の第２のセグメントが得られたときに、前記Ｎが所定の条件を満たす場合には、前記複数の第２のセグメントの少なくとも１つに属するデータを、前記第１のセグメントに属するデータを記憶していた第１の記憶装置から第２の記憶装置へ移動することを許容し、
前記Ｎが前記所定の条件を満たさない場合には、前記複数の第２のセグメントに属するデータの移動を制限する、処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置、データ管理方法およびプログラムに関する。
【背景技術】
【０００２】
情報処理システムにおけるデータ管理方法の１つとして、キーとデータとを対応付けて１またはそれ以上の記憶装置に保存しておく方法がある。アプリケーションソフトウェアなどのソフトウェアは、例えば、キーを指定して、データの読み出し（リード）や書き込み（ライト）などのデータ操作を行う。データを複数の記憶装置に分散して保存する場合、例えば、キーとハッシュ関数を用いて、データの保存先の記憶装置を決定し、また、所望のデータが保存されている記憶装置を検索する。【０００３】
また、データを効率的に管理できるように、キーの集合を複数のセグメントに分割し、セグメント単位でデータを管理する方法がある。例えば、セグメント単位で、データの保存先の記憶装置を決定する方法が提案されている。キーの集合を複数のセグメントに分割してキーをセグメントに割り当てる方法として、例えば、ＰＨＴ（Prefix Hash Tree）と呼ばれる２分木を用いる方法が提案されている。【０００４】
ＰＨＴの各ノードには、ルートノードからの深さに応じた長さの２進数がラベルとして付与される。ルートノードは、ノード０とノード１を子ノードとしてもつ。ノード０は、ノード００とノード０１を子ノードとしてもつ。キーを２進数で表記したときのプレフィックス（キーの先頭から数ビットの部分）とラベルとを比較することで、各キーが何れか１つの葉ノード（子ノードをもたないノード）に割り当てられる。そして、葉ノードに相当するセグメント単位で、キーおよびデータが管理される。ＰＨＴの深さ（セグメントの分割の程度）は、例えば、管理するデータの量に応じて決定される。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Yatin Chawathe, Sriram Ramabhadran, Sylvia Ratnasamy, Anthony LaMarca, Scott Shenker and Joseph Hellerstein, "A Case Study in Building Layered DHT Applications", Proc. of the ACM SIGCOMM 2005 conference on Applications, technologies, architectures and protocols for computer communications, August 22-26, 2005.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、情報処理システムを運用するに従い、記憶装置にデータが書き込まれて、管理するデータの量が増加することがある。そこで、データをセグメント単位で管理するとき、データ量が大きくなったセグメントを、更に複数のセグメントに動的に分割することが考えられる。情報処理システムの負荷分散のため、分割によって得られた複数のセグメントの少なくとも１つについて、分割前のセグメントが割り当てられていた記憶装置から他の記憶装置にデータが移動され得る。【０００７】
しかし、セグメントが分割されるごとに記憶装置間でデータの移動が発生すると、データ管理のための通信量が増大し、本来のデータアクセスの妨げになるおそれがある、という問題がある。例えば、外部からのデータアクセスの多くがデータを追加するアクセスである場合、情報処理システム内のネットワーク上の通信量の半分が、記憶装置間でデータを移動するためのものになってしまう可能性もある。【０００８】
一つの側面では、本発明は、複数の記憶装置を備えた情報処理システムにおけるデータ管理のための通信量を低減できる情報処理装置、データ管理方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
一実施態様では、記憶するデータに対応付けられるキーの集合を複数のセグメントに分割し、セグメント単位で複数の記憶装置へのデータの配置を管理する情報処理システムに用いられる、情報処理装置が提供される。情報処理装置は、記憶部と制御部を有する。記憶部は、セグメントとキーとの対応関係を示すセグメント情報を記憶する。制御部は、一のセグメントに属するデータの増加に応じて、当該一のセグメントを複数に分割し、セグメント情報を更新する。また、制御部は、第１のセグメントから１回または階層的にＮ（Ｎ＞１）回の分割によって複数の第２のセグメントが得られたときに、Ｎが所定の条件を満たす場合には、複数の第２のセグメントの少なくとも１つに属するデータを、第１のセグメントに属するデータを記憶していた第１の記憶装置から第２の記憶装置へ移動することを許容し、Ｎが所定の条件を満たさない場合には、複数の第２のセグメントに属するデータの移動を制限する。【００１０】
また、一実施態様では、記憶するデータに対応付けられるキーの集合を複数のセグメントに分割し、セグメント単位で複数の記憶装置へのデータの配置を管理する情報処理システムが行うデータ管理方法が提供される。データ管理方法では、一のセグメントに属するデータの増加に応じて、当該一のセグメントを複数に分割し、セグメントとキーとの対応関係を示すセグメント情報を更新する。第１のセグメントから１回または階層的にＮ（Ｎ＞１）回の分割によって複数の第２のセグメントが得られたときに、Ｎが所定の条件を満たす場合には、複数の第２のセグメントの少なくとも１つに属するデータを、第１のセグメントに属するデータを記憶していた第１の記憶装置から第２の記憶装置へ移動することを許容する。Ｎが所定の条件を満たさない場合には、複数の第２のセグメントに属するデータの移動を制限する。【００１１】
また、一実施態様では、記憶するデータに対応付けられるキーの集合を複数のセグメントに分割し、セグメント単位で複数の記憶装置へのデータの配置を管理する情報処理システムに用いられるコンピュータに実行させるプログラムが提供される。このプログラムは、コンピュータに、以下の処理を実行させる。一のセグメントに属するデータの増加に応じて、当該一のセグメントを複数に分割し、セグメントとキーとの対応関係を示すセグメント情報を更新する。第１のセグメントから１回または階層的にＮ（Ｎ＞１）回の分割によって複数の第２のセグメントが得られたときに、Ｎが所定の条件を満たす場合には、複数の第２のセグメントの少なくとも１つに属するデータを、第１のセグメントに属するデータを記憶していた第１の記憶装置から第２の記憶装置へ移動することを許容する。Ｎが所定の条件を満たさない場合には、複数の第２のセグメントに属するデータの移動を制限する。
【発明の効果】
【００１２】
複数の記憶装置を備えた情報処理システムにおけるデータ管理のための通信量が低減される。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態の情報処理装置を示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】サーバ装置のハードウェア例を示すブロック図である。
【図４】リクエスト処理の例を示す図である。
【図５】セグメント管理ツリーの例を示す図である。
【図６】セグメントに属するデータのサーバ装置への配置方法の例を示す図である。
【図７】サーバ装置のソフトウェア例を示すブロック図である。
【図８】セグメント分割の一例を示すフローチャートである。
【図９】セグメントの閾値の例を示す図である。
【図１０】データ転送判定処理の一例を示すフローチャートである。
【図１１】ラベル変換方法１を適用した場合に転送が許容されるセグメントの例を示す図である。
【図１２】ラベル変換方法２を適用した場合に転送が許容されるセグメントの例を示す図である。
【図１３】リクエスト処理の一例を示すフローチャートである。
【図１４】情報処理システムの動作シーケンスの一例を示すシーケンス図である。
【発明を実施するための形態】
【００１４】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の情報処理装置を示す図である。情報処理装置１０は、記憶するデータに対応付けられるキーの集合を複数のセグメントに分割し、セグメント単位で記憶装置２０−１〜２０−ｎ（ｎは２以上の自然数）へのデータの配置を管理する情報処理システムに用いられる。記憶装置２０−１〜２０−ｎの一部は、情報処理装置１０が備える記憶装置であってもよい。情報処理装置１０は、記憶部１１および制御部１２を有する。
【００１５】
記憶部１１は、セグメント情報を記憶する。セグメント情報は、キーとセグメントとの関係を示す。セグメントは、図１に示されるように、階層構造で表現される。階層構造としては、例えば、トライ（Trie）木やプレフィックス木などが適用可能である。記憶部１１は、ＲＡＭ（Random Access Memory）やＨＤＤ（Hard Disk Drive）などの記憶装置であってもよい。
【００１６】
制御部１２は、セグメントに属するデータの増加（例えば、データ量の増加あるいはデータが存在するキーの数の増加）に応じて、そのセグメントを複数に分割し、セグメント情報を更新する。例えば、制御部１２は、記憶部１１のセグメント情報を参照し、あるセグメントに属するデータの量あるいはデータが存在するキーの数と閾値とに基づいて、セグメントを２以上のセグメントに分割する。データ量あるいはキー数は、例えば、セグメントが配置されている記憶装置にアクセスして確認できる。
【００１７】
図１では、１つのセグメントを２つのセグメントに階層的に分割していく例が示されている。丸印はセグメントを示し、矢印はそのセグメントに属するデータが、ある記憶装置から他の記憶装置に転送されることを示している。また、ｎは階層を示している。図１の例では、分割により、１つのセグメントから次々に２つのセグメントが生成され、ｎ＝５の階層では、１６個のセグメントが生成されている。
【００１８】
制御部１２は、あるセグメントを基準として階層的な分割によって複数のセグメントを生成したときに、各分割が所定の分割の深さの条件を満たすか判定する。分割が所定の分割の深さの条件を満たす場合には、制御部１２は、生成した複数のセグメントの少なくとも１つに属するデータを、もとのセグメントに属するデータを記憶している記憶装置から別の記憶装置へ移動（転送）することを許容する。また、分割が所定の分割の深さの条件を満たさない場合には、制御部１２は、生成した複数のセグメントに属するデータの移動を制限する。
【００１９】
なお、分割の深さの条件は、例えば、元のセグメントが属する階層と生成された複数のセグメントが属する階層との階層間隔が、２以上の所定階層間隔の倍数であるか否かである。階層間隔が所定階層間隔の倍数の場合には分割の深さの条件が満たされ、階層間隔が所定階層間隔の倍数ではない場合には分割の深さの条件が満たされない。所定階層間隔を示す情報は、例えば、予め記憶部１１に記憶されている。
【００２０】
例えば、所定階層間隔が２である場合、図１に示されるように、ｎ＝１の階層のセグメントｓｇ１を分割していったとき、ｎ＝２の階層では、ｎ＝１の階層との階層間隔が１である。そのため、第２階層のセグメントｓｇ２ａ，ｓｇ２ｂに属するデータの移動は制限される。
【００２１】
一方、ｎ＝３の階層では、ｎ＝１の階層との階層間隔が２である。そのため、制御部１２は、ｎ＝３の階層の複数のセグメントｓｇ３ａ，ｓｇ３ｂ，ｓｇ３ｃ，ｓｇ３ｄの少なくとも１つに属するデータを、ｎ＝１の階層のセグメントｓｇ１に属するデータを記憶している記憶装置から別の記憶装置へ転送することを許容する。図１に示すように、例えば、ｎ＝３の階層の３つのセグメントｓｇ３ｂ，ｓｇ３ｃ，ｓｇ３ｄに属するデータが、ｎ＝１の階層のセグメントｓｇ１に属するデータを記憶している記憶装置から別の記憶装置へ転送される。
【００２２】
また、図１において、制御部１２が、例えば、ｎ＝３の階層の一番右側に表記されているセグメントｓｇ３ｄを更に分割していったとき、ｎ＝４の階層では、ｎ＝１の階層との階層間隔が３である。そのため、セグメントｓｇ３ｄの子セグメントであるｎ＝４の階層のセグメントｓｇ４ａ，ｓｇ４ｂに属するデータの移動は制限される。一方、ｎ＝５の階層では、ｎ＝１の階層との階層間隔が４である。そのため、セグメントｓｇ３ｄの孫セグメントである複数のセグメントｓｇ５ａ，ｓｇ５ｂ，ｓｇ５ｃ，ｓｇ５ｄの少なくとも１つに属するデータは、セグメントｓｇ３ｄに属するデータを記憶している記憶装置から別の記憶装置へ転送することが許容される。図１のように、例えば、セグメントｓｇ５ｂ，ｓｇ５ｃ，ｓｇ５ｄに属するデータが、ｎ＝３のセグメントｓｇ３ｄに属するデータを記憶している記憶装置から別の記憶装置へ転送される。
【００２３】
ところで、図１に示される例では、セグメントｓｇ３ｄの孫セグメントであるセグメントｓｇ５ａに属するデータは転送されないが、これは、セグメントｓｇ３ｄに属するデータを記憶している記憶装置に留まることを示している。このように、あるセグメントに対する分割深さが同じ複数セグメント間で、転送を許容するものと許容しないものを区別する手法については後述する。
【００２４】
なお、制御部１２は、ＣＰＵ（Central Processing Unit）およびＲＡＭを用いて実行されるプログラムとして実現してもよい。
以上のように、制御部１２は、セグメントを階層的に分割して、そのセグメントの子孫である複数のセグメントを生成していく際、分割が所定の分割の深さの条件を満たさない場合は、生成されたセグメントに属するデータの他の記憶装置への移動を制限する。
【００２５】
これにより、セグメントの分割のたびにデータ転送が発生することがなくなるため、情報処理システムにおける負荷分散の際のデータ転送量の増加を抑制できる。このため、負荷分散時の記憶装置間でのデータ移動によって、ユーザによる情報処理システムへのデータアクセスなどの妨げになることを抑制できる。
【００２６】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムを示す図である。第２の実施の形態の情報処理システムは、サーバ装置１００，１００ａ，１００ｂ，１００ｃ、管理装置２００およびクライアント装置３００を含む。サーバ装置１００，１００ａ，１００ｂ，１００ｃおよび管理装置２００は、ネットワーク４１に接続されている。クライアント装置３００は、ネットワーク４２に接続されている。第２の実施の形態の情報処理システムは、いわゆるクラウドシステムとして実現してもよい。
【００２７】
サーバ装置１００，１００ａ，１００ｂ，１００ｃは、データを分散管理するサーバコンピュータである。サーバ装置１００，１００ａ，１００ｂ，１００ｃは、データを識別するためのキーとデータとを対応付けて記憶し、また、キーからデータが記憶されているサーバ装置を検索するためのセグメント情報を保持している。何れのサーバ装置も、クライアント装置３００からデータ処理のリクエストを受け付けることができる。キーを含むリクエストを受け付けたサーバ装置は、処理対象のデータが記憶されているサーバ装置をセグメント情報に基づいて検索し、検索されたサーバ装置にデータ処理を依頼する。
【００２８】
管理装置２００は、ユーザ（例えば、情報処理システムの管理者）が使用するコンピュータである。管理装置２００は、ユーザ操作に基づいて、サーバ装置１００，１００ａ，１００ｂ，１００ｃを管理する。例えば、管理装置２００は、データを記憶するサーバ装置が情報処理システムに追加されるとき、追加されるサーバ装置の情報をサーバ装置１００，１００ａ，１００ｂ，１００ｃに送信する。また、データの分散配置を調整するための設定情報を、サーバ装置１００，１００ａ，１００ｂ，１００ｃに送信する。
【００２９】
クライアント装置３００は、ユーザ（例えば、クラウドサービスの利用者）が使用するコンピュータである。クライアント装置３００では、例えば、サーバ装置１００，１００ａ，１００ｂ，１００ｃに記憶されるデータを扱うアプリケーションソフトウェアが実行される。クライアント装置３００は、ネットワーク４１，４２を介して、サーバ装置１００，１００ａ，１００ｂ，１００ｃのうちの任意のサーバ装置に、データ処理のリクエストを送信する。リクエストでは、１つのキーまたはキーの範囲が指定される。データ処理には、データの読み出し（リード）や書き込み（ライト）が含まれる。
【００３０】
何れのサーバ装置がクライアント装置３００からリクエストを受信しても、サーバ装置１００，１００ａ，１００ｂ，１００ｃの間でメッセージを伝送することで、要求されたデータ処理が実行される。このように、第２の実施の形態の情報処理システムは、できる限りデータ処理のボトルネックとなる装置が生じないように設計することが可能であり、可用性や応答性能などを向上させることができる。
【００３１】
（サーバ装置のハードウェア例）
図３は、サーバ装置のハードウェア例を示すブロック図である。サーバ装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、ディスクドライブ１０６および通信部１０７を有する。上記ユニットは、サーバ装置１００内でバスに接続されている。なお、サーバ装置１００ａ，１００ｂ，１００ｃ、管理装置２００およびクライアント装置３００も、サーバ装置１００と同様のハードウェアによって実現できる。
【００３２】
ＣＰＵ１０１は、サーバ装置１００における情報処理を制御する演算装置である。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部を読み出してＲＡＭ１０２に展開し、プログラムを実行する。なお、サーバ装置１００は、複数の演算装置を備えて、情報処理を分散して実行してもよい。
【００３３】
ＲＡＭ１０２は、ＣＰＵ１０１が扱うプログラムやデータを一時的に記憶しておく揮発性メモリである。なお、サーバ装置１００は、ＲＡＭ以外の種類のメモリを備えていてもよく、複数個のメモリを備えてもよい。
【００３４】
ＨＤＤ１０３は、ＯＳ（Operating System）プログラムやアプリケーションプログラムなどのプログラム、および、情報処理に用いられるデータを記憶する不揮発性の記憶装置である。ＨＤＤ１０３は、ＣＰＵ１０１の命令に従って、内蔵の磁気ディスクに対する読み書きを行う。なお、サーバ装置１００は、ＨＤＤ以外の不揮発性の記憶装置（例えば、ＳＳＤ（Solid State Drive））を備えていてもよく、複数の記憶装置を備えてもよい。
【００３５】
画像信号処理部１０４は、ＣＰＵ１０１の命令に従って、サーバ装置１００に接続されたディスプレイ３１に画像を出力する。ディスプレイ３１として、例えば、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００３６】
入力信号処理部１０５は、サーバ装置１００に接続された入力デバイス３２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス３２として、例えば、マウスやタッチパネルなどのポインティングデバイスや、キーボードなどを用いることができる。
【００３７】
ディスクドライブ１０６は、記録媒体３３に記録されたプログラムやデータを読み取る駆動装置である。記録媒体３３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。ディスクドライブ１０６は、例えば、ＣＰＵ１０１の命令に従って、記録媒体３３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００３８】
通信部１０７は、ネットワーク４１に接続して通信を行う通信インタフェースである。ネットワーク４１への接続方法は、有線でも無線でもよい。すなわち、通信部１０７は、有線通信インタフェースでも無線通信インタフェースでもよい。
【００３９】
（情報処理システムへのリクエスト例）
図４は、リクエスト処理の例を示す図である。図４では、リクエストとして、（Ａ）単一のキーを指定したリード要求、（Ｂ）キーの範囲を指定したリード要求、（Ｃ）ライト要求の例を挙げている。サーバ装置１００ａは、キーとデータの組（ｋｅｙ，ｖａｌｕｅ）として、（２，ｄａｔａ２），（３，ｄａｔａ３）を記憶し、サーバ装置１００ｃは、（４，ｄａｔａ４），（５，ｄａｔａ５）を記憶しているとする。
【００４０】
（Ａ）サーバ装置１００は、キー２を指定したリード要求ｇｅｔ（２）をクライアント装置３００から受信すると、キー２に対応するデータがサーバ装置１００ａに記憶されていると判定する。そして、キー２に対するリード要求を示すメッセージをサーバ装置１００ａに送信する。サーバ装置１００ａは、ｄａｔａ２をサーバ装置１００に送信する。サーバ装置１００は、ｄａｔａ２をクライアント装置３００に送信する。
【００４１】
（Ｂ）サーバ装置１００は、キーの範囲２〜５を指定したリード要求ｒａｎｇｅ＿ｇｅｔ（２，５）をクライアント装置３００から受信すると、キー２，３に対応するデータがサーバ装置１００ａに記憶され、キー４，５に対応するデータがサーバ装置１００ｃに記憶されていると判定する。そして、キー２，３に対するリード要求を示すメッセージをサーバ装置１００ａに送信し、キー４，５に対するリード要求を示すメッセージをサーバ装置１００ｃに送信する。サーバ装置１００ａは、ｄａｔａ２，３をサーバ装置１００に送信する。サーバ装置１００ｃは、ｄａｔａ４，５をサーバ装置１００に送信する。サーバ装置１００は、ｄａｔａ２〜５をクライアント装置３００に送信する。
【００４２】
（Ｃ）サーバ装置１００は、キー１を指定したライト要求ｓｅｔ（１，ｄａｔａ１）をクライアント装置３００から受信すると、キー１に対応するデータはサーバ装置１００ａに記憶されるものであると判定する。そして、キー１に対するライト要求を示すメッセージをサーバ装置１００ａに送信する。サーバ装置１００ａは、ｄａｔａ１を自身の記憶装置に書き込み、サーバ装置１００に書き込み完了を報告する。サーバ装置１００は、書き込み完了をクライアント装置３００に報告する。
【００４３】
なお、サーバ装置１００において、クライアント装置３００から受信したリクエストに含まれるキーから、そのキーに対応するデータがどのサーバ装置に格納されているかなどを判定する処理については後述する。
【００４４】
このように、サーバ装置１００，１００ａ，１００ｂ，１００ｃは、キーとデータとを対応付けて保持し、キー単位で記憶装置からのデータの読み出しや記憶装置へのデータの書き込みを行う。処理対象のキーは、例えば、クライアント装置３００で実行されるアプリケーションソフトウェアによって指定される。よって、サーバ装置１００，１００ａ，１００ｂ，１００ｃのデータ処理の複雑性が抑えられ、負荷が軽減される。
【００４５】
ライト要求で指定されたキーに対応するデータがまだ存在しない場合、当該ライト要求はデータの追加を意味する。一方、ライト要求で指定されたキーに対応するデータが既に存在する場合、当該ライト要求はデータの上書きを意味する。キーに対応するデータが存在するか否かの確認や上書き可否の判断は、例えば、クライアント装置３００で実行されるアプリケーションソフトウェアの責任で行われる。第２の実施の形態の情報処理システムは、例えば、時刻をキーとするデータ（例えば、ログデータ）の管理に利用できる。
【００４６】
（セグメント管理ツリーの例）
図５は、セグメント管理ツリーの例を示す図である。サーバ装置１００，１００ａ，１００ｂ，１００ｃは、セグメント管理ツリーを記述したセグメント情報を有する。セグメント管理ツリーとして、トライ木やプレフィックス木と呼ばれる順序付きツリーを用いることができる。前述の非特許文献１（Yatin Chawathe, Sriram Ramabhadran, Sylvia Ratnasamy, Anthony LaMarca, Scott Shenker and Joseph Hellerstein, "A Case Study in Building Layered DHT Applications"）に記載されたＰＨＴを用いてもよい。
【００４７】
セグメント管理ツリーでは、キー空間が、セグメントと呼ばれる区間に階層的に分割される。セグメント管理ツリーの各ノードがセグメントに相当する。各ノードには、当該ノードの深さに応じた長さのラベルが付与される。例えば、ルートノードの左の子ノードにラベル“０”が付与され、右の子ノードにラベル“１”が付与される。また、あるノードにラベルＬが付与されているとき、左の子ノードにラベルＬ＋０、右の子ノードにラベルをＬ＋１が付与される。キー空間に含まれる各キーは、当該キーのプレフィックスに一致するラベルが付与された何れか１つの葉ノード（子ノードをもたないノード）に対応付けられる。
【００４８】
一例として、キーが５ビットの２進数で表現できる場合を考える。クライアント装置３００から指定されるキーが２進数で表現されていない場合は、２進数に変換すればよい。また、図５に示したように、ラベル“０００”，“００１”，“０１”，“１０”，“１１”が付与された５つの葉ノードを含むセグメント管理ツリーを考える。この場合、キー０００００〜０００１１は、ラベル“０００”のノードに対応付けられる。キー００１００〜００１１１は、ラベル“００１”のノードに対応付けられる。キー０１０００〜０１１１１は、ラベル“０１”のノードに対応付けられる。キー１００００〜１０１１１は、ラベル“１０”のノードに対応付けられる。キー１１０００〜１１１１１は、ラベル“１１”のノードに対応付けられる。
【００４９】
セグメント管理ツリーの葉ノードに相当するセグメントに属するデータは、サーバ装置１００，１００ａ，１００ｂ，１００ｃ内の記憶装置（例えば、図３に示したようなＨＤＤ１０３）に記憶される。セグメントに属するデータを記憶する記憶装置を有するサーバ装置は、例えば、当該セグメントのラベルにハッシュ関数を適用して算出されるハッシュ値に基づいて決定することができる。
【００５０】
このように、セグメント単位でデータを配置するサーバ装置を決定することで、キーのローカリティを維持することができ、値の近いキーに対応付けられるデータ同士ができる限り同じサーバ装置に配置されるようになる。このため、範囲指定のリード要求など、範囲指定のデータ処理を効率的に実行できるようになる。セグメント管理ツリーの深さ（階層）は、サーバ装置１００，１００ａ，１００ｂ，１００ｃに記憶されたデータの量に応じて動的に調整される。後述するように、データ量の大きくなったセグメントは、更に複数のセグメントに動的に分割される。
【００５１】
なお、以上の説明では、セグメント管理ツリーの例として２分木を用いたが、任意の分岐数のツリーを用いてもよい。葉ノード以外の各ノードがそれぞれｂ個（ｂは２以上の整数）の子ノードを有する場合、各ノードにはｂ進数のラベルを付与すればよい。例えば、ｂ＝３の場合、ルートノードはラベル“０”，“１”，“２”の子ノードを有する。また、ラベル“０”のノードは、ラベル“００”，“０１”，“０２”の子ノードを有する。キーをセグメントに対応付けるときは、キーをｂ進数に変換して、キーのプレフィックスとラベルを比較すればよい。
【００５２】
（複数のサーバ装置へのデータの配置方法の例）
図６は、セグメントに属するデータのサーバ装置への配置方法の例を示す図である。前述の通り、セグメント管理ツリーの葉ノードに対応するセグメントに属するデータは、当該セグメントのラベルに応じてサーバ装置１００，１００ａ，１００ｂ，１００ｃの何れかに配置される。
【００５３】
ここでは、ハッシュ関数の値域（ハッシュ値が取り得る値）を０〜２n−１（ｎは自然数）とし、値域をループ状にしたハッシュ値の空間を考える。サーバ装置１００，１００ａ，１００ｂ，１００ｃは、それぞれの識別情報（例えば、アドレス）にハッシュ関数を適用して、各サーバ装置に対応するハッシュ値を算出する。また、サーバ装置１００，１００ａ，１００ｂ，１００ｃは、セグメントのラベルまたは、そのラベルを後述の変換方法で変換したラベルにハッシュ関数を適用して、当該セグメントに対応するハッシュ値を算出する。そして、サーバ装置１００，１００ａ，１００ｂ，１００ｃは、各サーバ装置のハッシュ値とセグメントのハッシュ値のループ上での位置関係に基づいて、当該セグメントに属するデータを配置するサーバ装置を決定する。例えば、ループ上で、セグメントのハッシュ値より先にある最小のハッシュ値をもつサーバ装置が選択される。
【００５４】
例えば、サーバ装置１００のハッシュ値がｈ（ｓ１）、サーバ装置１００ａのハッシュ値がｈ（ｓ２）、ラベル“０”のハッシュ値がｈ（０）であるとする。このときｈ（ｓ２）＞ｈ（０）＞ｈ（ｓ１）の関係にある場合、ラベル“０”のセグメントがサーバ装置１００ａに対応付けられる。また、サーバ装置１００ｂのハッシュ値がｈ（ｓ３）、サーバ装置１００ｃのハッシュ値がｈ（ｓ４）、ラベル“００１”のハッシュ値がｈ（００１）であるとする。このときｈ（ｓ４）＞ｈ（００１）＞ｈ（ｓ３）の関係にある場合、ラベル“００１”のセグメントがサーバ装置１００ｃに対応付ける。
【００５５】
ただし、サーバ装置１００，１００ａ，１００ｂ，１００ｃへのセグメントの配置方法は、上記方法に限定されない。例えば、セグメントのラベルから算出されたハッシュ値をサーバ装置の数で割って余り（剰余）を求め、剰余に応じてセグメントを配置するサーバ装置を選択する方法が考えられる。例えば、ハッシュ値を４で割り、剰余＝０のときはサーバ装置１００、剰余＝１のときはサーバ装置１００ａ、剰余＝２のときはサーバ装置１００ｂ、剰余＝３のときはサーバ装置１００ｃが選択される。
【００５６】
（サーバ装置のソフトウェア例）
図７は、サーバ装置のソフトウェア例を示すブロック図である。
サーバ装置１００は、通信処理部１１０、格納先決定部１２０、イベント処理部１３０およびデータ記憶部１４０を有する。通信処理部１１０、格納先決定部１２０、イベント処理部１３０は、例えば、図３に示したようなＣＰＵ１０１およびＲＡＭ１０２を用いて実行されるプログラムとして実現できる。データ記憶部１４０は、例えば、図３に示したようなＲＡＭ１０２やＨＤＤ１０３上の記憶領域として実現できる。図２に示したサーバ装置１００ａ，１００ｂ，１００ｃも、サーバ装置１００と同様のブロック構成によって実現できる。
【００５７】
通信処理部１１０は、リクエスト受信部１１１、転送条件記憶部１１２、データ送信部１１３、メッセージ処理部１１４を有する。
リクエスト受信部１１１は、図２に示したようなクライアント装置３００からリクエストを受信すると、そのリクエストをメッセージ処理部１１４に通知する。また、リクエスト受信部１１１は、データ記憶部１４０から読み出されたデータまたはデータ記憶部１４０への書き込み結果をメッセージ処理部１１４から取得し、レスポンスとしてクライアント装置３００に送信する。
【００５８】
転送条件記憶部１１２は、後述するセグメントの分割処理の際に、分割したセグメントに属するデータを、そのデータを記憶しているサーバ装置から他のサーバ装置に転送するか否かを決める転送条件の情報を記憶する。転送条件には、例えば、図５に示したようなセグメント管理ツリーにおいて、あるセグメントから階層的に分割されて生成されるセグメントに属するデータに対して、何階層間隔ごとに転送を許容するかが規定されている。転送条件は、あるノード（セグメント）の子孫ノードに属するデータを、何世代間隔ごとに転送を許容するか規定する条件である、ということもできる。なお、転送条件記憶部１１２は、例えば、図３に示したような、ＲＡＭ１０２またはＨＤＤ１０３上の記憶領域として実現できる。
【００５９】
データ送信部１１３は、セグメントの分割処理の際に、転送条件記憶部１１２に記憶されている転送条件を参照する。そして、データ送信部１１３は、分割後のセグメントに属するデータがデータ記憶部１４０にある場合、転送条件に基づいて、分割後の少なくとも１つのセグメントに属するデータを他のサーバ装置に転送すべきか判定する。さらにデータ送信部１１３は、転送すべきと判定したとき、格納先決定部１２０に分割後の各セグメントに属するデータの格納先となるサーバ装置を問い合わせる。格納先決定部１２０で指定されたサーバ装置が自身のサーバ装置１００ではない場合には、データ送信部１１３は、送信すべきデータをデータ処理部１３１に要求して、そのデータを受信する。そして、データ送信部１１３は、そのデータを格納先決定部１２０で決定されたサーバ装置に送信する。
【００６０】
メッセージ処理部１１４は、他のサーバ装置（サーバ装置１００ａ，１００ｂ，１００ｃ）との間でメッセージを送受信する。メッセージ処理部１１４は、他のサーバ装置からリード要求やライト要求のメッセージを受信すると、イベント処理部１３０にデータ処理を依頼する。また、メッセージ処理部１１４は、例えば、セグメントの分割処理が発生した際に、セグメント管理部１２２からの依頼に応じて、他のサーバ装置にセグメント更新のメッセージを送信する。また、他のサーバ装置からセグメント更新のメッセージを受信すると、セグメント管理部１２２にセグメント情報の更新を依頼する。
【００６１】
また、メッセージ処理部１１４は、リクエスト受信部１１１で受信されたクライアント装置３００からのリクエストを受け取る。リクエストがライト要求の場合、メッセージ処理部１１４は、リクエストに含まれるキーを格納先決定部１２０に渡し、データを書き込むサーバ装置を問い合わせる。格納先のサーバ装置がサーバ装置１００である場合には、メッセージ処理部１１４は、データを、イベント処理部１３０を介してデータ記憶部１４０に格納する。格納先が他のサーバ装置である場合には、メッセージ処理部１１４は、そのサーバ装置にリクエストを転送する。リクエストがリード要求の場合、メッセージ処理部１１４は、リクエストに含まれるキーを格納先決定部１２０に渡し、データが存在するサーバ装置を問い合わせる。格納先のサーバ装置がサーバ装置１００である場合には、メッセージ処理部１１４は、イベント処理部１３０を介してデータ記憶部１４０からデータを取り出す。格納先が他のサーバ装置である場合には、メッセージ処理部１１４は、そのサーバ装置にリクエストを転送する。
【００６２】
格納先決定部１２０は、セグメント情報記憶部１２１とセグメント管理部１２２を有する。
セグメント情報記憶部１２１は、図５のようなセグメント管理ツリーを記載したセグメント情報を記憶する。セグメント情報は、セグメントの分割に伴って更新される。セグメント情報記憶部１２１は、ハッシュ関数を示す情報を記憶してもよい。なお、セグメント情報記憶部１２１は、ＲＡＭ１０２またはＨＤＤ１０３上の記憶領域として実現できる。
【００６３】
セグメント管理部１２２は、セグメント情報記憶部１２１に記憶されたセグメント情報に基づいて、リクエストで指定されたキーまたはキーの範囲に対応する１またはそれ以上のセグメントを検索する。そして、セグメント管理部１２２は、セグメントのラベルまたは後述の方法で変換したラベルとハッシュ関数から、検索されたセグメントに属するデータが配置されている１またはそれ以上のサーバ装置を判定する。また、セグメント管理部１２２は、検索されたセグメントに属するデータが自サーバ装置にある場合、イベント処理部１３０にデータ処理を依頼する。検索されたセグメントに属するデータが他のサーバ装置にある場合、メッセージ処理部１１４に当該他のサーバ装置へのメッセージの送信を依頼する。
【００６４】
さらに、セグメント管理部１２２は、イベント処理部１３０からセグメントを分割した旨の報告があると、セグメント情報記憶部１２１に記憶されたセグメント情報を更新する。そして、セグメントの更新を示すメッセージを他のサーバ装置に送信するよう、メッセージ処理部１１４に依頼する。また、セグメント管理部１２２は、メッセージ処理部１１４からの依頼に応じて、セグメント情報記憶部１２１に記憶されたセグメント情報を更新する。なお、セグメント管理部１２２は、セグメントが配置され得るサーバ装置の識別情報を、設定情報として管理装置２００から受信して保持している。
【００６５】
イベント処理部１３０は、データ処理部１３１、算出式記憶部１３２、閾値算出部１３３および分割判定部１３４を有する。
データ処理部１３１は、セグメント管理部１２２またはメッセージ処理部１１４からの依頼に応じて、データ処理を行う。キーまたはキーの範囲を指定したリード要求である場合、データ処理部１３１は、キーに対応するデータまたはキーの範囲に対応するデータ群をデータ記憶部１４０から読み出す。キーを指定したライト要求である場合、データ処理部１３１は、キーに対応付けてデータをデータ記憶部１４０に書き込む。
【００６６】
また、データ処理部１３１は、データをデータ記憶部１４０に書き込んだ場合、セグメントの分割の要否を分割判定部１３４に問い合わせる。分割判定部１３４で分割を要すると判定された場合、データ処理部１３１は、セグメントの分割処理を行い、セグメントを分割した旨をセグメント管理部１２２に報告する。さらに、データ処理部１３１は、データ送信部１１３の要求に応じて、分割されたセグメントの１つまたは複数に属するデータを、データ送信部１１３に送る。
【００６７】
算出式記憶部１３２は、セグメントを分割するか判定するための閾値を算出する算出式を記憶する。閾値は、後述するように、分割の要否を判定するセグメントのラベルに基づいて算出される。閾値の算出式は、例えば、管理装置２００のユーザが記述し、管理装置２００が算出式記憶部１３２に設定する。なお、算出式記憶部１３２は、例えば、図３に示したような、ＲＡＭ１０２またはＨＤＤ１０３上の記憶領域として実現できる。
【００６８】
閾値算出部１３３は、分割判定部１３４から指定されたセグメントのラベルと、算出式記憶部１３２に記憶された閾値の算出式から、指定されたセグメントの閾値を算出する。そして、算出した閾値を分割判定部１３４に回答する。
【００６９】
分割判定部１３４は、データ処理部１３１からの問い合わせに応じて、データの書き込みが行われたセグメントの分割の要否を判定する。分割判定部１３４は、書き込みが行われたセグメントのラベルを指定して、閾値算出部１３３に閾値の算出を依頼する。セグメントのラベルは、例えば、セグメント情報を参照して、ライト要求で指定されたキーから求める。また、分割判定部１３４は、データ記憶部１４０を参照して、書き込みが行われたセグメントのデータ量あるいはデータ数（例えば、当該セグメントに属するキーに対応付けられたデータの総量または総数）を求める。そして、分割判定部１３４は、データ量あるいはデータ数が閾値を超える場合、分割を要すると判定し、データ量あるいはデータ数が閾値以下の場合、分割を要しないと判定する。
【００７０】
なお、分割判定部１３４は、定期的に、各セグメントに属するデータ量あるいはデータ数をチェックし、データ量あるいはデータ数が閾値を超えているセグメントに対して、分割を要すると判定するようにしてもよい。
【００７１】
データ記憶部１４０は、キーとデータを対応付けて記憶する。データ記憶部１４０は、記憶領域をセグメント毎に分割して、キーとデータを記憶してもよい。
（セグメント分割処理）
図８は、セグメント分割の一例を示すフローチャートである。ここでは、サーバ装置１００が処理を行う場合を考える。サーバ装置１００ａ，１００ｂ，１００ｃも、サーバ装置１００と同様の処理を行う。以下、図８に示す処理をステップ番号に沿って説明する。
【００７２】
（ステップＳ１１）分割判定部１３４は、データ処理部１３１がデータ記憶部１４０に書き込んだデータのキーを特定する。そして、セグメント情報記憶部１２１に記憶されたセグメント情報に基づいて、キーに対応するセグメントを検索する。
【００７３】
（ステップＳ１２）閾値算出部１３３は、算出式記憶部１３２に記憶された算出式に、ステップＳ１１の処理で検索されたセグメントのラベルを代入し、当該セグメントの閾値を算出する。閾値の算出式は、例えば、以下のように表せる。
【００７４】
閾値ｔｈ（Ｌ）＝Ｒ×２((f×N)ノ小数部)          （１）
ｆ＝ｖａｌｕｅ（Ｌ）／ｂlength(L)          （２）
式（１）において、ｔｈ（Ｌ）は、あるラベルＬのセグメントに適用する閾値を示している。また、Ｒは所定のルート閾値、Ｎは前述した転送を許容する階層間隔を示している。式（２）において、ｂはセグメント管理ツリーの分岐数を示す。また、ｌｅｎｇｔｈ（Ｌ）はラベルのビット数を示し、ｖａｌｕｅ（Ｌ）はラベルＬが表す１０進数表現の値を示す。
【００７５】
（ステップＳ１３）分割判定部１３４は、データ記憶部１４０を参照して、ステップＳ１１の処理で検索したセグメントのデータ量（例えば、当該セグメントに属するキーに対応付けられているデータの総量）あるいはデータ数を算出する。そして、分割判定部１３４は、データ量あるいはデータ数がステップＳ１２の処理で算出された閾値を超えているか判断する。データ量あるいはデータ数が閾値を超える場合、ステップＳ１４の処理が行われる。データ量あるいはデータ数が閾値以下の場合、処理が終了する。
【００７６】
（ステップＳ１４）セグメント管理部１２２は、ステップＳ１１の処理で検索されたセグメントを分割して得られるｂ個の子セグメントを定義する。例えば、セグメントのラベルがＬでありｂ＝２の場合、セグメント管理部１２２は、ラベルＬ＋０，Ｌ＋１の子セグメントを定義する。
【００７７】
（ステップＳ１５）データ処理部１３１は、データ記憶部１４０から、ステップＳ１１の処理で検索されたセグメントに属するキーを１つ選択する。
（ステップＳ１６）データ処理部１３１は、ステップＳ１４の処理で定義された子セグメントの中から、ステップＳ１５の処理で選択したキーのプレフィックスと一致するラベルをもつ子セグメントを特定する。そして、データ処理部１３１は、ステップＳ１５の処理で選択したキーを、特定した子セグメントに割り当てる。
【００７８】
（ステップＳ１７）データ処理部１３１は、ステップＳ１５の処理で全てのキーを選択したか判断する。全てのキーが選択された場合、ステップＳ１８の処理が行われる。未選択のキーが存在する場合、ステップＳ１５からの処理が繰り返される。
【００７９】
（ステップＳ１８）データ送信部１１３は、複数の子セグメントの何れかに属するデータを他のサーバ装置に転送することを許可するか判定する処理（データ転送判定処理）を行う。データ転送判定処理の一例については後述する。データ送信部１１３が、データ転送を許可すると判定した場合にはステップＳ１９の処理が行われ、データ転送を許可しないと判定した場合にはステップＳ２０の処理が行われる。
【００８０】
（ステップＳ１９）データ送信部１１３は、他のサーバ装置に配置される子セグメントに属するデータ（当該子セグメントに属するキーと対応付けられているデータ）を、データ処理部１３１を介してデータ記憶部１４０から読み出し、他のサーバ装置に送信する。データの送信が完了すると、データ送信部１１３は、データ処理部１３１に対してデータの送信が完了した旨を通知する。データ処理部１３１は、データ送信部１１３からデータの送信が完了したことを通知されると、他のサーバ装置に配置される子セグメントのデータをデータ記憶部１４０から削除する。
【００８１】
（ステップＳ２０）セグメント管理部１２２は、ステップＳ１４の処理で実施されたセグメント分割が反映されるように、セグメント情報記憶部１２１に記憶されているセグメント情報を更新する。メッセージ処理部１１４は、セグメントの更新を他の全てのサーバ装置に通知する。
【００８２】
なお、上記の分割処理では、ライト対象のセグメントを分割する例を示したが、定期的に現在のセグメント管理ツリーの最下層の各セグメントに属するデータ量またはデータ数と閾値との比較結果に応じて分割処理を実施するようにしてもよい。
【００８３】
また、上記の分割処理では、検索されたライト対象のセグメントのラベルから閾値を算出し、算出した閾値をステップＳ１３の処理で使用していたが、これに限定されない。例えば、各セグメントが生成された段階で、閾値算出部１３３が閾値を算出し、記憶部（例えば、セグメント情報記憶部１２１）に記憶しておくようにしてもよい。その場合、分割判定部１３４は、ステップＳ１１の処理で検索されたセグメントに対応する閾値を記憶部から取り出して、ステップＳ１３の処理で使用する。また、閾値は、全セグメントで同一の値としてもよい。
【００８４】
図９は、セグメントの閾値の例を示す図である。図９の閾値の例は、図５に示した２分木で表現されたセグメント管理ツリーに式（１）を適用して算出したものである。
ただし、図９の例では、ルート閾値Ｒ＝１２８［ＭＢ］、転送を許容する階層間隔Ｎ＝４としている。
【００８５】
各階層レベル（ｎ＝１〜５）の左端ノード（ルートノード（ラベル“Φ”）およびラベル“０”，“００”，“０００”，“００００”のノード）に対応するセグメントには、ルート閾値Ｒ＝１２８が設定される。左端ノード以外のノードに対応するセグメントには、１２８を２((f×N)ノ小数部)倍した閾値が設定される。
【００８６】
例えば、ラベル“１”のセグメントでは、前述した式（２）からｆ＝０．５となる。式（１）では、ｆ×Ｎ＝０．５×４＝２．０であり、小数部は０であるから、閾値ｔｈ（“１”）＝１２８×２0＝１２８［ＭＢ］となる。
【００８７】
また、ラベル“１１１”のセグメントでは、前述した式（２）からｆ＝７／２3＝０．８７５となる。式（１）では、ｆ×Ｎ＝０．８７５×４＝３．５であり、小数部は０．５であるから、閾値ｔｈ（“１１１”）＝１２８×２0.5≒１８１［ＭＢ］となる。
【００８８】
図９には、他のセグメントについても式（１），（２）に基づいて算出された閾値とｆの値が表記されている。
式（１）に基づいて閾値を算出することで、分割したときに転送が生じる可能性がある階層に属するセグメントにおいて、分割されるタイミングをずらすことができる。図９に示したようなセグメント管理ツリーにおいて、転送を許容する階層間隔Ｎ＝４としているので、例えば、ｎ＝４の階層のラベル“０００”，“００１”のセグメントは、分割されたときに転送が生じる可能性がある（詳細は後述する）。ラベル“０００”のセグメントに対応づけられた閾値が１２８［ＭＢ］で、ラベル“００１”のセグメントに対応づけられた閾値が１８１である。このような閾値を適用することで、キー空間全体に対して均等に一定の速度でデータが追加される場合を考えると、ラベル“０００”のセグメントに対して、ラベル“００１”のセグメントの分割されるタイミングを遅らせることができる。
【００８９】
また、式（１）に従って各セグメントの閾値を算出すると、データがキー空間に対して均等に追加される場合には、上位の階層のセグメントの分割が完了した後に、下位の階層のセグメントの分割が行われる。例えば、ラベル“１”のセグメントが分割された後に、ラベル“００”のセグメントが分割される。ラベル“１１”のセグメントが分割された後に、ラベル“０００”のセグメントが分割される。ラベル“１１１”のセグメントが分割された後に、ラベル“００００”のセグメントが分割される。
【００９０】
（データ転送判定処理）
図８のフローチャートにおけるステップＳ１８の処理（データ転送判定処理）の例を説明する。
【００９１】
図１０は、データ転送判定処理の一例を示すフローチャートである。ここでも、サーバ装置１００が処理を行う場合を考える。サーバ装置１００ａ，１００ｂ，１００ｃも、サーバ装置１００と同様の処理を行う。以下、図１０に示す処理をステップ番号に沿って説明する。
【００９２】
（ステップＳ２１）データ送信部１１３は、図８に示したフローチャートのステップＳ１４の処理で定義された子セグメントのラベルを、例えば、以下のようにして変換する。変換手法としては、例えば、以下の２通りがある。
【００９３】
（ラベル変換方法１）
データ送信部１１３は、転送条件記憶部１１２に格納されている転送を許容する階層間隔Ｎを参照する。そして、データ送信部１１３は、例えば、２進数で表されるセグメントのラベルの先頭から、Ｎの倍数のビットだけ残し、端数のビットを削除する。
【００９４】
例えば、Ｎ＝４とした場合、上記変換方法によれば、図９に示したようなセグメント管理ツリーでは、ｎ＝１〜４の階層のセグメントにおけるラベルの値は削除され、ｎ＝５の階層のセグメントのラベルは全てのビットが残る。
【００９５】
さらに、データ送信部１１３は、ラベルのＬＳＢ（Least Significant Bit）からＭＳＢ（Most Significant Bit）に向かってＮの倍数分のビットが連続して０の場合、Ｎの倍数分の連続する０を削除する。
【００９６】
例えば、Ｎ＝４とした場合、ラベル“１１１１００００”はラベル“１１１１”に変換され、ラベル“１０１００００００００”はラベル“１０１”に変換される。
（ラベル変換方法２）
データ送信部１１３は、例えば、２進数で表されるセグメントのラベルに対して、式（２）を適用してｆの値を求める。なお、ｆの値は、閾値を算出する処理（図８のステップＳ１２の処理）で求められたものを、データ送信部１１３が取得して用いるようにしてもよい。
【００９７】
データ送信部１１３は、ラベルのビット数をＮで割った余り（Ａ）がｆ×Ｎの整数部に一致する場合は、ラベルの値をそのまま維持する。Ａがｆ×Ｎの整数部に一致しない場合には、そのラベルのＬＳＢからＭＳＢに向かってＡビットを削除する。
【００９８】
また、ラベル変換方法１と同様に、データ送信部１１３は、ラベルのＬＳＢからＭＳＢに向かってＮの倍数分のビットが連続して０の場合、Ｎの倍数分の連続する０を削除する。
【００９９】
（ステップＳ２２）データ送信部１１３は、上記の２つのラベル変換方法の何れかを実行した後、セグメント管理部１２２に対して、子セグメントのラベルまたは変換されたラベルを通知し、子セグメントに属するデータを配置するサーバ装置を問い合わせる。
【０１００】
（ステップＳ２３）セグメント管理部１２２は、子セグメントのラベルまたは変換されたラベルにハッシュ関数を適用して、その子セグメントに対応するハッシュ値を算出する。そして、セグメント管理部１２２は、図６に示したように、各サーバ装置のハッシュ値とセグメントのハッシュ値のループ上での位置関係に基づいて、その子セグメントに属するデータを配置するサーバ装置を決定する。また、セグメント管理部１２２は、決定したサーバ装置をデータ送信部１１３に通知する。
【０１０１】
（ステップＳ２４）データ送信部１１３は、決定されたサーバ装置が、予め、ステップＳ２１，Ｓ２２と同様の処理により決定されている親セグメントに属するデータを配置するサーバ装置と異なっているか判定する。複数の子セグメントのそれぞれについて決定されたサーバ装置の中に、親セグメントに属するデータを配置するサーバ装置と異なっているものがある場合には、ステップＳ２５の処理が行われる。複数の子セグメントのそれぞれについて決定されたサーバ装置が全て、親セグメントに属するデータを配置するサーバ装置と同じであれば、ステップＳ２６の処理が行われる。
【０１０２】
（ステップＳ２５）データ送信部１１３は、親セグメントに対応付けられたサーバ装置と異なるサーバ装置が指定された子セグメントに対して、その子セグメントに属するデータを親セグメントに対応付けられたサーバ装置から、指定されたサーバ装置に転送することを許可する。
【０１０３】
（ステップＳ２６）データ送信部１１３は、子セグメントに属するデータを、親セグメントに対応付けられたサーバ装置から他のサーバ装置へ転送することを許可しない。
（ラベル変換方法１の適用例）
図１１は、ラベル変換方法１を適用した場合に転送が許容されるセグメントの例を示す図である。図１１では、図９に示したセグメント管理ツリーと同様のものが示されている。
【０１０４】
なお、以下では、ｎ＝１のセグメントに属するデータがサーバ装置１００のデータ記憶部１５０に格納されるものとして説明する。矢印が付加されているセグメントは、そのセグメントに属するデータが、サーバ装置１００から、他のサーバ装置へ転送が許容されるセグメントであることを示している。
【０１０５】
転送を許容する階層間隔Ｎ＝４として、上記のラベル変換方法１を適用した場合、前述のようにｎ＝１〜ｎ＝４の階層のセグメントのラベルを一部削除した値でハッシュ値を算出するため、ハッシュ値は同じ値となる。そのため、セグメント管理部１２２は、転送先として同じサーバ装置１００をデータ送信部１１３に指定する。そのため、ｎ＝１〜ｎ＝４の階層のセグメントに属するデータの移動は発生しない。
【０１０６】
ｎ＝５の階層では、ラベル“００００”のセグメントについては、上記のラベル変換方法１により全ての“０”が削除されるため、同じサーバ装置１００が指定される。ｎ＝５の階層のその他のセグメントについては、各セグメントのラベルの値に応じてセグメント管理部１２２で転送先のサーバ装置が指定される。ただし、サーバ装置の数などによっては、セグメント管理部１２２で同じサーバ装置１００が指定されるセグメントが生じる場合もある。その場合には、データ送信部１１３は、そのセグメントに属するデータを、サーバ装置１００から他のサーバ装置に転送しない。
【０１０７】
図１１に示すようなセグメント管理ツリーにおいて、更にセグメントの分割を進めていったとき、Ｎ＝４として、ラベル変換方法１を適用すると、４階層間隔ごとに、転送が許可されるセグメントが現れる。
【０１０８】
このように、ラベル変換方法１を適用すると、所定の分割深さ（階層間隔）が満たされない場合は、生成されたセグメントに属するデータの他の記憶装置への移動が制限される。これにより、情報処理システムにおける負荷分散の際の平均データ転送量の増加を抑制できる。このため、負荷分散時の記憶装置間でのデータ移動によって、ユーザによる情報処理システムへのデータアクセスなどの妨げになることを抑制できる。
【０１０９】
（ラベル変換方法２の適用例）
図１２は、ラベル変換方法２を適用した場合に転送が許容されるセグメントの例を示す図である。図１２では、図９に示したセグメント管理ツリーと同様のものが示されている。
【０１１０】
なお、以下でも、ｎ＝１のセグメントに属するデータがサーバ装置１００のデータ記憶部１５０に格納されるものとして説明する。また、矢印が付加されているセグメントは、そのセグメントに属するデータが、サーバ装置１００から、他のサーバ装置へ転送が許容されるセグメントであることを示している。
【０１１１】
転送を許容する階層間隔Ｎ＝４として、上記のラベル変換方法２を適用した場合、ｎ＝２の階層のラベル“０”のセグメントは、ラベルのビット数が１であり、Ｎ＝４で割った余り（Ａ）が１であり、ｆ×Ｎ＝０．０である。この場合、Ａ＝１がｆ×Ｎ＝０．０の整数部に一致しないため、ラベルのＬＳＢからＭＳＢに向かって１ビット削除される。その結果、ラベルのビットは全て削除される。従って、ハッシュ値は、ｎ＝１の階層のセグメントと同じとなり、セグメント管理部１２２は、転送先としてサーバ装置１００をデータ送信部１１３に指定する。そのため、ラベル“０”のセグメントに属するデータの移動は発生しない。ラベル“１”のセグメントについても同様に、ハッシュ値は、ｎ＝１の階層のセグメントと同じとなり、セグメント管理部１２２は、転送先としてサーバ装置１００をデータ送信部１１３に指定する。そのため、ラベル“１”のセグメントに属するデータの移動は発生しない。
【０１１２】
ｎ＝３の階層では、各セグメントのラベルのビット数が２であり、Ｎ＝４で割った余り（Ａ）が２である。ｆ×４の整数部が２に一致するのは、ラベル“１０”のセグメントである。そのため、データ送信部１１３は、ラベル“１０”をセグメント管理部１２２に通知する。セグメント管理部１２２は、ラベル“１０”に対応したハッシュ値を求め、そのハッシュ値をもとに、ラベル“１０”のセグメントに属するデータの転送先となるサーバ装置を決定し、データ送信部１１３に通知する。データ送信部１１３は、通知されたサーバ装置がサーバ装置１００と異なる場合には、ラベル“１０”のセグメントに属するデータを通知されたサーバ装置に転送する。
【０１１３】
ｎ＝３の階層のその他のセグメントは、ラベル変換方法２によってビット数分のデータが削除されるため、ハッシュ値は、ｎ＝１の階層のセグメントと同じとなる。そのため、セグメント管理部１２２は、転送先としてサーバ装置１００をデータ送信部１１３に指定する。そのため、それらのセグメントに属するデータの移動は発生しない。
【０１１４】
ｎ＝４の階層では、各セグメントのラベルのビット数が３であり、Ｎ＝４で割った余り（Ａ）が３である。ｆ×４の整数部が３に一致するのは、ラベル“１１０”，“１１１”のセグメントである。そのため、データ送信部１１３は、ラベル“１１０”，“１１１”をセグメント管理部１２２に通知する。セグメント管理部１２２は、ラベル“１１０”，“１１１”に対応したハッシュ値を求め、そのハッシュ値をもとに、ラベル“１１０”，“１１１”のセグメントに属するデータの転送先となるサーバ装置を決定し、データ送信部１１３に通知する。データ送信部１１３は、通知されたサーバ装置がサーバ装置１００と異なる場合には、ラベル“１１０”，“１１１”のセグメントに属するデータを通知されたサーバ装置に転送する。
【０１１５】
ｎ＝４の階層のその他のセグメントは、ラベル変換方法２によってビット数分のデータが削除されるため、ハッシュ値は、ｎ＝１の階層のセグメントと同じとなる。そのため、セグメント管理部１２２は、転送先としてサーバ装置１００をデータ送信部１１３に指定する。そのため、それらのセグメントに属するデータの移動は発生しない。
【０１１６】
ｎ＝５の階層では、各セグメントのラベルのビット数が４であり、Ｎ＝４で割った余り（Ａ）が０である。ｆ×４の整数部が０に一致するのは、ラベル“００００”〜“００１１”のセグメントある。ただし、ラベル“００００”は、ＬＳＢからＭＳＢに向かってＮの倍数（１倍）だけ０が連続しているため、削除される。ラベル“０１００”〜“０１１１”については、Ａ＝０であるため、削除されない。そのため、データ送信部１１３は、ラベル“（空）”〜“０１１１”をセグメント管理部１２２に通知する。セグメント管理部１２２は、ラベル“（空）”〜“０１１１”に対応したハッシュ値を求め、そのハッシュ値をもとに、ラベル“（空）”〜“０１１１”のセグメントに属するデータの転送先となるサーバ装置を決定し、データ送信部１１３に通知する。ラベル“（空）”については、ハッシュ値はｎ＝１の階層のセグメントと同じになるので、サーバ装置１００が指定される。ラベル“０００１”〜“０１１１”のセグメントに関しては、データ送信部１１３は、通知されたサーバ装置がサーバ装置１００と異なる場合には、それらのセグメントに属するデータを通知されたサーバ装置に転送する。
【０１１７】
なお、ラベル“１０００”〜“１１１１”についても、Ａ＝０であるためラベルの値は削除されない。しかし、ラベル“１０”またはラベル“１１０”，“１１１”のセグメントで転送が発生した場合、ラベル“１０００”〜“１１１１”のセグメントは、分割の深さの条件を満たさない。すなわち、ラベル“１０”またはラベル“１１０”，“１１１”のセグメントが属する階層と、ラベル“１０００”〜“１１１１”のセグメントが属する階層との階層間隔はＮ＝４未満である。そのため、データ送信部１１３は、それらのセグメントに属するデータの移動を許容しない。なお、更にセグメントの分割が進むと、ラベル“１０”のセグメントや、ラベル“１１０”，“１１１”の子孫では、４階層間隔ごとにデータの移動が許容されるセグメントが現れることになる。ラベル“０００１”〜“０１１１”のセグメントの子孫についても同様である。
【０１１８】
このように、図１２の例では、セグメント管理ツリーにおいて、データの転送が許容されるセグメントが１つの階層に集中せず、複数階層にわたって配置されている。
以上のようにラベル変換方法２を適用すると、ラベル変換方法１を適用した場合と同様の効果が得られるとともに、複数のセグメントの間でデータ転送が発生するタイミングをずらすことができ、データ転送の発生が同時期に集中することを抑制することができる。このため、情報処理システムの負荷を軽減できる。
【０１１９】
上記のようなデータ転送判定処理は、図２に示したような他のサーバ装置１００ａ，１００ｂ，１００ｃについても、各サーバ装置が有しているセグメントの情報を用いて同様に行うことが可能である。
【０１２０】
（リクエスト処理）
図１３は、リクエスト処理の一例を示すフローチャートである。ここでは、サーバ装置１００が処理を行う場合を考える。サーバ装置１００ａ，１００ｂ，１００ｃも、サーバ装置１００と同様の処理を行う。以下、図１３に示す処理をステップ番号に沿って説明する。
【０１２１】
（ステップＳ３１）リクエスト受信部１１１は、クライアント装置３００からリクエストを受信する。リクエストの種類には、１つのキーを指定したリード要求、キーの範囲を指定したリード要求、および、１つのキーを指定したライト要求が含まれる。
【０１２２】
（ステップＳ３２）セグメント管理部１２２は、ステップＳ３１の処理で受信されたリクエストがキーの範囲を指定したものか判断する。範囲指定のリクエストである場合、ステップＳ３４の処理が行われる。それ以外の場合、ステップＳ３３が行われる。
【０１２３】
（ステップＳ３３）セグメント管理部１２２は、セグメント情報記憶部１２１に記憶されたセグメント情報を参照して、リクエストで指定されたキーの属するセグメントを検索する。セグメントの検索では、例えば、ｂ進数（ｂは２以上の整数）で表現したキーのプレフィックスとラベルを、セグメント管理ツリーのルートノードから葉ノードに向かって比較していき、プレフィックスと一致するラベルをもつ葉ノードが特定される。特定した葉ノードに相当するセグメントが、検索されるセグメントである。
【０１２４】
（ステップＳ３４）セグメント管理部１２２は、セグメント情報を参照して、リクエストで指定された範囲内のキーを少なくとも１つ含むセグメントを全て検索する。複数のセグメントの検索では、例えば、範囲内のキーの最大値と最小値とに共通する最長のプレフィックスを求め、当該プレフィックスをラベルとしてもつノードが特定される。そして、セグメント管理部１２２は、特定したノード以下の複数の葉ノードを特定する。特定した複数の葉ノードに相当する複数のセグメントが、検索されるセグメントである。
【０１２５】
例えば、キーの範囲が０００１０〜００１０１の場合、キーの最小値０００１０と最大値００１０１とに共通する最長のプレフィックスは、００である。よって、ラベル“００”のノードより下位にある、ラベル“０００”，“００１”の葉ノードが特定される。そして、ラベル“０００”に相当するセグメントとラベル“００１”に相当するセグメントとが検索される。
【０１２６】
（ステップＳ３５）セグメント管理部１２２は、ステップＳ３３またはステップＳ３４の処理で検索されたセグメントのラベルを、上記のデータ転送判定処理で適用されたラベル変換方法１，２の何れかを用いて変換する。そしてセグメント管理部１２２は、ラベルまたは変換されたラベルに対してハッシュ関数を適用し、ハッシュ値を算出する。そして、セグメント管理部１２２は、ハッシュ値からセグメントが配置されているサーバ装置を特定する。サーバ装置は、例えば、図６に示した方法で特定される。ステップＳ３４の処理で複数のセグメントが検索された場合、複数のサーバ装置が特定されることがある。以下のステップＳ３６〜Ｓ３８の処理が、特定されたサーバ装置毎またはセグメント毎に実行される。
【０１２７】
（ステップＳ３６）セグメント管理部１２２は、データ処理の対象のセグメントが配置されたサーバ装置として、他のサーバ装置がステップＳ３５の処理で特定されたか判断する。他のサーバ装置が特定された場合、ステップＳ３７の処理が行われる。自装置（サーバ装置１００）が特定された場合、ステップＳ３８の処理が行われる。
【０１２８】
（ステップＳ３７）メッセージ処理部１１４は、ステップＳ３５の処理で特定された他のサーバ装置に対して、リード要求またはライト要求を示すメッセージを送信する。メッセージには、クライアント装置３００からのリクエストで指定されたキーまたはキーの範囲のうち、宛先のサーバ装置に記憶されているキーまたはキーの範囲が含まれる。その後、メッセージ処理部１１４は、応答のメッセージを他のサーバ装置から受信する。応答のメッセージには、キーに対応するデータまたは書き込み完了の報告が含まれる。
【０１２９】
（ステップＳ３８）データ処理部１３１は、クライアント装置３００からのリクエストに応じたデータ処理を行う。リード要求の場合、リクエストで指定されたキーまたはキーの範囲のうち、自装置に記憶されているキーまたはキーの範囲に対応するデータをデータ記憶部１４０から読み出す。ライト要求の場合、リクエストに含まれるキーとデータとを対応付けて、データ記憶部１４０に書き込む。
【０１３０】
（ステップＳ３９）リクエスト受信部１１１は、ステップＳ３１で受信したリクエストに対するレスポンスをクライアント装置３００に送信する。リクエストがリード要求である場合、レスポンスとして、ステップＳ３７，Ｓ３８で自装置または他のサーバ装置から読み出されたデータを送信する。リクエストがライト要求である場合、レスポンスとして、ステップＳ３７，Ｓ３８で確認された書き込み完了の報告を送信する。
【０１３１】
（情報処理システムの動作シーケンス例）
図１４は、情報処理システムの動作シーケンスの一例を示すシーケンス図である。クライアント装置３００がサーバ装置１００に対して、データの書き込みのリクエストを送信し、データの書き込みによってセグメント分割が発生する場合を考える。
【０１３２】
（ステップＳ４１）クライアント装置３００は、データの書き込みを示すリクエストをサーバ装置１００に送信する。リクエストには、キーとデータが含まれる。
（ステップＳ４２）サーバ装置１００は、自装置が有するセグメント情報からキーの属するセグメントを検索し、ラベルを、適用されたラベル変換方法１または２を用いて変換する。そして、サーバ装置１００は、変換されたラベルとハッシュ関数を用いて当該セグメントに属するデータが配置されているサーバ装置（ここでは、サーバ装置１００ａ）を特定する。そして、ライト要求のメッセージをサーバ装置１００ａに送信する。メッセージには、キーとデータが含まれる。
【０１３３】
（ステップＳ４３）サーバ装置１００ａは、サーバ装置１００から受信したメッセージに含まれるキーとデータとを対応付けて、自装置が有する記憶装置に書き込む。そして、書き込み完了を示すレスポンスをサーバ装置１００に送信する。
【０１３４】
（ステップＳ４４）サーバ装置１００は、サーバ装置１００ａで書き込みが完了したことを確認すると、クライアント装置３００にレスポンスを送信する。
（ステップＳ４５）サーバ装置１００ａは、データの書き込みによって、セグメントのデータの量またはデータ数が閾値を超えたことを検出する。すると、サーバ装置１００ａは、当該セグメントをｂ個（例えば、２個）のセグメントに更に分割する。
【０１３５】
（ステップＳ４６）サーバ装置１００ａは、図１０に示したようなデータ転送判定処理を行う。以下では、分割後の２つのセグメントに属するデータが、サーバ装置１００ａ，１００ｂに分散して記憶されるものとする。
【０１３６】
（ステップＳ４７）サーバ装置１００ａは、サーバ装置１００ｂに記憶されるキーとデータをサーバ装置１００ｂに送信する。
（ステップＳ４８）サーバ装置１００ｂは、サーバ装置１００ａから受信したキーとデータを対応付けて、自装置が有する記憶装置に書き込む。そして、書き込み完了を示すレスポンスをサーバ装置１００ａに送信する。
【０１３７】
（ステップＳ４９）サーバ装置１００ａは、サーバ装置１００ｂへの複製が完了したセグメントのデータを、自装置が有する記憶装置から削除する。また、サーバ装置１００ａは、セグメントの分割が反映されるように、自装置が有するセグメント情報を更新する。そして、サーバ装置１００ａは、セグメントの更新を示す通知を、他の全てのサーバ装置（サーバ装置１００，１００ｂ，１００ｃ）に送信する。
【０１３８】
（ステップＳ５０）サーバ装置１００，１００ｂ，１００ｃは、サーバ装置１００ａからの通知に基づいて、自装置が有するセグメント情報を更新する。そして、セグメント情報の更新完了を示すレスポンスを、サーバ装置１００ａに送信する。これにより、サーバ装置１００ａによるセグメント情報の更新が、サーバ装置１００，１００ｂ，１００ｃが有するセグメント情報に反映される。
【０１３９】
第２の実施の形態によれば、サーバ装置１００，１００ａ，１００ｂ，１００ｃはキーとデータを対応付けて記憶し、クライアント装置３００から指定されたキーについてデータ処理を行うので、データ処理の複雑性を低減でき負荷が低くなる。また、データが複数のサーバ装置に分散して記憶されると共に、何れのサーバ装置もクライアント装置３００からリクエストを受け付けることができるので、ボトルネックとなる装置が生じないように設計可能であり、情報処理システムの可用性が向上する。
【０１４０】
また、キー空間を複数のセグメントに分割し、セグメント単位でデータがサーバ装置に配置されるので、値の近いキーに対応するデータ同士が同一のサーバ装置に記憶される確率が高くなり、キーの範囲を指定したデータ処理を効率的に実行できる。また、セグメント分割やデータ転送の要否は、セグメントのラベルに基づいてセグメント毎に独立に判定できるので、各サーバ装置が他のサーバ装置とネゴシエーションを行わずに判定でき、スケーラビリティを向上できる。
【０１４１】
また、所定の分割深さ（階層間隔）を満たさない場合は、生成されたセグメントに属するデータの他の記憶装置への移動が制限される。これにより、情報処理システムにおける負荷分散の際の平均データ転送量の増加を抑制できる。このため、負荷分散時の記憶装置間でのデータ移動によって、ユーザによる情報処理システムへのデータアクセスなどの妨げになることを抑制できる。
【０１４２】
また、データ転送判定処理において、ラベル変換方法２を適用すると、複数のセグメントの間で、データ転送が発生するタイミングをずらすことができ、データ転送の発生が同時期に集中することを抑制することができる。このため、情報処理システムの負荷を軽減できる。
【０１４３】
なお、前述のように、第２の実施の形態のデータ管理は、コンピュータとしてのサーバ装置１００，１００ａ，１００ｂ，１００ｃに、それぞれデータ管理プログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体３３）に記録しておくことができる。記録媒体として、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。
【０１４４】
プログラムを流通させる場合、例えば、当該プログラムを記録した可搬記録媒体が提供される。また、プログラムを他のコンピュータの記憶装置に格納しておき、ネットワーク４１経由でプログラムを配布することもできる。コンピュータは、例えば、可搬記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを記憶装置（例えば、ＨＤＤ１０３）に格納し、当該記憶装置からプログラムを読み込んで実行する。ただし、可搬記録媒体から読み込んだプログラムを直接実行してもよく、他のコンピュータからネットワーク４１を介して受信したプログラムを直接実行してもよい。
【０１４５】
上記については単に本発明の原理を示すものである。更に、多数の変形や変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応する全ての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【０１４６】
１０  情報処理装置
１１  記憶部
１２  制御部
２０−１〜２０−ｎ  記憶装置
ｓｇ１，ｓｇ２ａ，ｓｇ２ｂ，ｓｇ３ａ，ｓｇ３ｂ，ｓｇ３ｃ，ｓｇ３ｄ，ｓｇ４ａ，ｓｇ４ｂ，ｓｇ５ａ，ｓｇ５ｂ，ｓｇ５ｃ，ｓｇ５ｄ  セグメント
【図１】
2013103012.tif 000003
【図２】
2013103012.tif 000004
【図３】
2013103012.tif 000005
【図４】
2013103012.tif 000006
【図５】
2013103012.tif 000007
【図６】
2013103012.tif 000008
【図７】
2013103012.tif 000009
【図８】
2013103012.tif 000010
【図９】
2013103012.tif 000011
【図１０】
2013103012.tif 000012
【図１１】
2013103012.tif 000013
【図１２】
2013103012.tif 000014
【図１３】
2013103012.tif 000015
【図１４】
2013103012.tif 000016
【手続補正書】
【提出日】平成26年6月25日(2014.6.25)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００７４
【補正方法】変更
【補正の内容】
【００７４】
閾値ｔｈ（Ｌ）＝Ｒ×２＾（（ｆ×Ｎ）の小数部）          （１）
ｆ＝ｖａｌｕｅ（Ｌ）／ｂlength(L)          （２）
式（１）において、ｔｈ（Ｌ）は、あるラベルＬのセグメントに適用する閾値を示している。また、Ｒは所定のルート閾値、Ｎは前述した転送を許容する階層間隔を示している。式（２）において、ｂはセグメント管理ツリーの分岐数を示す。また、ｌｅｎｇｔｈ（Ｌ）はラベルＬのビット数を示し、ｖａｌｕｅ（Ｌ）はラベルＬが表す１０進数表現の値を示す。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００７９
【補正方法】変更
【補正の内容】
【００７９】
（ステップＳ１８）データ送信部１１３は、ｂ個の子セグメントの何れかに属するデータを他のサーバ装置に転送することを許可するか判定する処理（データ転送判定処理）を行う。データ転送判定処理の一例については後述する。データ送信部１１３が、データ転送を許可すると判定した場合にはステップＳ１９の処理が行われ、データ転送を許可しないと判定した場合にはステップＳ２０の処理が行われる。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０１０４
【補正方法】変更
【補正の内容】
【０１０４】
なお、以下では、ｎ＝１のセグメントに属するデータがサーバ装置１００のデータ記憶部１４０に格納されるものとして説明する。矢印が付加されているセグメントは、そのセグメントに属するデータが、サーバ装置１００から、他のサーバ装置へ転送が許容されるセグメントであることを示している。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０１１０
【補正方法】変更
【補正の内容】
【０１１０】
なお、以下でも、ｎ＝１のセグメントに属するデータがサーバ装置１００のデータ記憶部１４０に格納されるものとして説明する。また、矢印が付加されているセグメントは、そのセグメントに属するデータが、サーバ装置１００から、他のサーバ装置へ転送が許容されるセグメントであることを示している。
【手続補正５】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
記憶するデータに対応付けられるキーの集合を複数のセグメントに分割し、セグメント単位で複数の記憶装置へのデータの配置を管理する情報処理システムに用いられる、情報処理装置であって、
セグメントとキーとの対応関係を示すセグメント情報を記憶する記憶部と、
一のセグメントに属するデータの増加に応じて、当該一のセグメントを複数に分割し、前記セグメント情報を更新する制御部と、を有し、
前記制御部は、第１のセグメントから１回または階層的にＮ（Ｎ＞１）回の分割によって複数の第２のセグメントが得られたときに、前記Ｎが所定の条件を満たす場合には、前記複数の第２のセグメントの少なくとも１つに属するデータを、前記第１のセグメントに属するデータを記憶していた第１の記憶装置から第２の記憶装置へ移動することを許容し、前記Ｎが前記所定の条件を満たさない場合には、前記複数の第２のセグメントに属するデータの移動を制限する、情報処理装置。
【請求項２】
前記所定の条件は、前記第１のセグメントの階層と前記複数の第２のセグメントの階層との間の間隔が、２以上の所定の階層間隔の倍数であるという条件である、請求項１記載の情報処理装置。
【請求項３】
各セグメントには、分割の深さに応じた長さのラベルが付与されており、前記制御部は、前記複数の第２のセグメントに付与されたラベルに基づいて、前記所定の条件を満たすか否か判定する、請求項１または２記載の情報処理装置。
【請求項４】
前記所定の条件を満たすか否かは、同じ階層のセグメント間では判定結果が同じになる方法を用いて判定する、請求項１乃至３の何れか一項に記載の情報処理装置。
【請求項５】
前記所定の条件を満たすか否かは、同じ階層のセグメント間でもセグメントによって判定結果が異なる方法を用いて判定する、請求項１乃至３の何れか一項に記載の情報処理装置。
【請求項６】
記憶するデータに対応付けられるキーの集合を複数のセグメントに分割し、セグメント単位で複数の記憶装置へのデータの配置を管理する情報処理システムが行うデータ管理方法であって、
一のセグメントに属するデータの増加に応じて、当該一のセグメントを複数に分割し、セグメントとキーとの対応関係を示すセグメント情報を更新し、
第１のセグメントから１回または階層的にＮ（Ｎ＞１）回の分割によって複数の第２のセグメントが得られたときに、前記Ｎが所定の条件を満たす場合には、前記複数の第２のセグメントの少なくとも１つに属するデータを、前記第１のセグメントに属するデータを記憶していた第１の記憶装置から第２の記憶装置へ移動することを許容し、
前記Ｎが前記所定の条件を満たさない場合には、前記複数の第２のセグメントに属するデータの移動を制限する、データ管理方法。
【請求項７】
記憶するデータに対応付けられるキーの集合を複数のセグメントに分割し、セグメント単位で複数の記憶装置へのデータの配置を管理する情報処理システムに用いられるコンピュータに実行させるプログラムであって、前記コンピュータに、
一のセグメントに属するデータの増加に応じて、当該一のセグメントを複数に分割し、セグメントとキーとの対応関係を示すセグメント情報を更新し、
第１のセグメントから１回または階層的にＮ（Ｎ＞１）回の分割によって複数の第２のセグメントが得られたときに、前記Ｎが所定の条件を満たす場合には、前記複数の第２のセグメントの少なくとも１つに属するデータを、前記第１のセグメントに属するデータを記憶していた第１の記憶装置から第２の記憶装置へ移動することを許容し、
前記Ｎが前記所定の条件を満たさない場合には、前記複数の第２のセグメントに属するデータの移動を制限する、処理を実行させるプログラム。
【国際調査報告】
2013103012.tif 000017
2013103012.tif 000018
2013103012.tif 000019
2013103012.tif 000020