(57)【要約】  データ管理の負荷が集中することを抑制する。  情報処理装置（１０）は、キーの集合を複数のセグメントに分割し、キーと対応付けて記憶されるデータをセグメント単位で管理する情報処理システムに用いられる。記憶部（１１）は、複数のセグメントのうち少なくともセグメント＃１，＃２について、キーとセグメントとの関係を示すセグメント情報を記憶する。制御部（１２）は、セグメント情報を参照し、セグメント＃１に属するキーと対応付けて記憶されているデータの量と閾値＃１に基づいて、セグメント＃１を２以上のセグメントに分割するか判定する。閾値＃１は、セグメント＃２を分割するか判定するために用いられる閾値＃２とは異なる値をとる。
2012164735.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 Dirk 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−１（ｎは自然数）とし、値域をループ状にしたハッシュ値の空間を考える。サーバ装置１００，１００ａ，１００ｂ，１００ｃそれぞれの識別情報（例えば、アドレス）にハッシュ関数を適用して、各サーバ装置に対応するハッシュ値を算出する。また、セグメントのラベルにハッシュ関数を適用して、当該セグメントに対応するハッシュ値を算出する。そして、各サーバ装置のハッシュ値とセグメントのハッシュ値のループ上での位置関係に基づいて、当該セグメントを配置するサーバ装置を決定する。例えば、ループ上で、セグメントのハッシュ値より先にある最小のハッシュ値をもつサーバ装置を選択する。
【００４６】
例えば、サーバ装置１００のハッシュ値ｈ（ｓ１）とサーバ装置１００ａのハッシュ値ｈ（ｓ２）とラベル０のハッシュ値ｈ（０）とが、ｈ（ｓ２）＞ｈ（０）＞ｈ（ｓ１）の関係にある場合、ラベル０のセグメントをサーバ装置１００ａに配置する。また、サーバ装置１００ｂのハッシュ値ｈ（ｓ３）とサーバ装置１００ｃのハッシュ値ｈ（ｓ４）とラベル００１のハッシュ値ｈ（００１）とが、ｈ（ｓ４）＞ｈ（００１）＞ｈ（ｓ３）の関係にある場合、ラベル００１のセグメントをサーバ装置１００ｃに配置する。
【００４７】
なお、ラベルのＬＳＢ（Least Significant Bit）が０である場合、ＬＳＢからＭＳＢ（Most Significant Bit）に向かって連続する０を削除して、ハッシュ関数を適用する。ただし、ＭＳＢの０は削除しない。例えば、ラベル００，０００はラベル０に変換され、ラベル１０はラベル１に変換される。よって、ラベル０，００，０００のハッシュ値は同一となり、ラベル１，１０のハッシュ値は同一となる。これにより、あるセグメントを２以上のセグメントに分割したとき、分割後の２以上のセグメントの少なくとも１つは、元のセグメントと同じサーバ装置に配置されることになる。
【００４８】
ただし、サーバ装置１００，１００ａ，１００ｂ，１００ｃへのセグメントの配置方法は、上記方法に限定されない。例えば、セグメントのラベルから算出されたハッシュ値をサーバ装置の数で割って余り（剰余）を求め、剰余に応じてセグメントを配置するサーバ装置を選択する方法が考えられる。例えば、ハッシュ値を４で割り、剰余＝０のときはサーバ装置１００、剰余＝１のときはサーバ装置１００ａ、剰余＝２のときはサーバ装置１００ｂ、剰余＝３のときはサーバ装置１００ｃを選択する。
【００４９】
図７は、サーバ装置のソフトウェア例を示すブロック図である。サーバ装置１００は、通信処理部１１０、イベント処理部１２０およびデータ記憶部１３０を有する。通信処理部１１０およびイベント処理部１２０は、例えば、ＣＰＵ１０１およびＲＡＭ１０２を用いて実行されるプログラムとして実現できる。データ記憶部１３０は、例えば、ＲＡＭ１０２やＨＤＤ１０３上の記憶領域として実現できる。サーバ装置１００ａ，１００ｂ，１００ｃも、サーバ装置１００と同様のブロック構成によって実現できる。
【００５０】
通信処理部１１０は、リクエスト受信部１１１、セグメント情報記憶部１１２、セグメント管理部１１３およびメッセージ処理部１１４を有する。
リクエスト受信部１１１は、クライアント装置３００からリクエストを受信し、所望のセグメントが配置されたサーバ装置の判定をセグメント管理部１１３に依頼する。また、リクエスト受信部１１１は、読み出されたデータまたは書き込み結果をメッセージ処理部１１４から取得し、レスポンスとしてクライアント装置３００に送信する。
【００５１】
セグメント情報記憶部１１２は、図５のようなセグメント管理ツリーを記載したセグメント情報を記憶する。セグメント情報は、セグメントの分割に伴って更新される。セグメント情報記憶部１１２は、ハッシュ関数を示す情報を記憶してもよい。なお、セグメント情報記憶部１１２は、ＲＡＭ１０２またはＨＤＤ１０３上の記憶領域として実現できる。
【００５２】
セグメント管理部１１３は、セグメント情報記憶部１１２に記憶されたセグメント情報に基づいて、リクエストで指定されたキーまたはキーの範囲に対応する１またはそれ以上のセグメントを検索する。そして、セグメントのラベルとハッシュ関数から、検索されたセグメントが配置されている１またはそれ以上のサーバ装置を判定する。セグメント管理部１１３は、検索されたセグメントが自サーバ装置にある場合、イベント処理部１２０にデータ処理を依頼する。検索されたセグメントが他のサーバ装置にある場合、メッセージ処理部１１４に当該他のサーバ装置へのメッセージの送信を依頼する。
【００５３】
また、セグメント管理部１１３は、イベント処理部１２０からセグメントを分割した旨の報告があると、セグメント情報記憶部１１２に記憶されたセグメント情報を更新する。そして、セグメントの更新を示すメッセージを他のサーバ装置に送信するよう、メッセージ処理部１１４に依頼する。また、セグメント管理部１１３は、メッセージ処理部１１４からの依頼に応じて、セグメント情報記憶部１１２に記憶されたセグメント情報を更新する。なお、セグメント管理部１１３は、セグメントが配置され得るサーバ装置の識別情報を、設定情報として管理装置２００から受信して保持している。
【００５４】
メッセージ処理部１１４は、他のサーバ装置（サーバ装置１００ａ，１００ｂ，１００ｃ）との間でメッセージを送受信する。メッセージ処理部１１４は、他のサーバ装置からリード要求やライト要求のメッセージを受信すると、イベント処理部１２０にデータ処理を依頼する。また、セグメント管理部１１３からの依頼に応じて、他のサーバ装置にリード要求やライト要求のメッセージを送信する。また、メッセージ処理部１１４は、セグメント管理部１１３からの依頼に応じて、他のサーバ装置にセグメント更新のメッセージを送信する。また、他のサーバ装置からセグメント更新のメッセージを受信すると、セグメント管理部１１３にセグメント情報の更新を依頼する。
【００５５】
イベント処理部１２０は、データ処理部１２１、算出式記憶部１２２、閾値算出部１２３および分割判定部１２４を有する。
データ処理部１２１は、セグメント管理部１１３またはメッセージ処理部１１４からの依頼に応じて、データ処理を行う。キーまたはキーの範囲を指定したリード要求である場合、データ処理部１２１は、キーに対応するデータまたはキーの範囲に対応するデータ群をデータ記憶部１３０から読み出す。キーを指定したライト要求である場合、データ処理部１２１は、キーに対応付けてデータをデータ記憶部１３０に書き込む。
【００５６】
また、データ処理部１２１は、データをデータ記憶部１３０に書き込んだ場合、セグメントの分割の要否を分割判定部１２４に問い合わせる。分割判定部１２４で分割を要すると判定された場合、データ処理部１２１は、分割処理を行う。例えば、データ記憶部１３０に記憶されたデータの一部を他のサーバ装置に移動させる。また、セグメントを分割した旨をセグメント管理部１１３に報告する。
【００５７】
算出式記憶部１２２は、セグメントを分割するか判定するための閾値を算出する算出式を記憶する。閾値は、後述するように、分割の要否を判定するセグメントのラベルに基づいて算出される。閾値の算出式は、管理装置２００のユーザが記述し、管理装置２００が算出式記憶部１２２に設定する。なお、算出式記憶部１２２は、ＲＡＭ１０２またはＨＤＤ１０３上の記憶領域として実現できる。
【００５８】
閾値算出部１２３は、分割判定部１２４から指定されたセグメントのラベルと、算出式記憶部１２２に記憶された閾値の算出式から、指定されたセグメントの閾値を算出する。そして、算出した閾値を分割判定部１２４に回答する。
【００５９】
分割判定部１２４は、データ処理部１２１からの問い合わせに応じて、データの書き込みが行われたセグメントの分割の要否を判定する。分割判定部１２４は、書き込みが行われたセグメントのラベルを指定して、閾値算出部１２３に閾値の算出を依頼する。セグメントのラベルは、例えば、セグメント情報を参照して、ライト要求で指定されたキーから求める。また、分割判定部１２４は、データ記憶部１３０を参照して、書き込みが行われたセグメントのデータ量（例えば、当該セグメントに属するキーに対応付けられたデータの総量）を求める。そして、分割判定部１２４は、データ量が閾値を超える場合、分割を要すると判定し、データ量が閾値以下の場合、分割を要しないと判定する。
【００６０】
データ記憶部１３０は、キーとデータを対応付けて記憶する。データ記憶部１３０は、記憶領域をセグメント毎に分割して、キーとデータを記憶してもよい。
図８は、リクエスト処理を示すフローチャートである。ここでは、サーバ装置１００が処理を行う場合を考える。サーバ装置１００ａ，１００ｂ，１００ｃも、サーバ装置１００と同様の処理を行う。以下、図８に示す処理をステップ番号に沿って説明する。
【００６１】
（ステップＳ１１）リクエスト受信部１１１は、クライアント装置３００からリクエストを受信する。リクエストの種類には、１つのキーを指定したリード要求、キーの範囲を指定したリード要求、および、１つのキーを指定したライト要求が含まれる。
【００６２】
（ステップＳ１２）セグメント管理部１１３は、ステップＳ１１受信されたリクエストがキーの範囲を指定したものか判断する。範囲指定のリクエストである場合、処理をステップＳ１４に進める。それ以外の場合、処理をステップＳ１３に進める。
【００６３】
（ステップＳ１３）セグメント管理部１１３は、セグメント情報記憶部１１２に記憶されたセグメント情報を参照して、リクエストで指定されたキーの属するセグメントを検索する。セグメントの検索では、例えば、ｂ進数（ｂは２以上の整数）で表現したキーのプレフィックスとラベルを、セグメント管理ツリーのルートノードから葉ノードに向かって比較していき、プレフィックスと一致するラベルをもつ葉ノードを特定する。特定した葉ノードに相当するセグメントが、検索されるセグメントである。
【００６４】
（ステップＳ１４）セグメント管理部１１３は、セグメント情報を参照して、リクエストで指定された範囲内のキーを少なくとも１つ含むセグメントを全て検索する。複数のセグメントの検索では、例えば、範囲内のキーの最大値と最小値とに共通する最長のプレフィックスを求め、当該プレフィックスをラベルとしてもつノードを特定する。そして、特定したノード以下の複数の葉ノードを特定する。特定した複数の葉ノードに相当する複数のセグメントが、検索されるセグメントである。
【００６５】
例えば、キーの範囲が０００１０〜００１０１の場合、キーの最小値０００１０と最大値００１０１とに共通する最長のプレフィックスは、００である。よって、ラベル００のノードより下位にある、ラベル０００，００１の葉ノードが特定される。そして、ラベル０００に相当するセグメントとラベル００１に相当するセグメントとが検索される。
【００６６】
（ステップＳ１５）セグメント管理部１１３は、ステップＳ１３またはステップＳ１４で検索されたセグメントのラベルにハッシュ関数を適用し、ハッシュ値を算出する。そして、ハッシュ値からセグメントが配置されているサーバ装置を特定する。サーバ装置は、例えば、図６に示した方法で特定される。ステップＳ１４で複数のセグメントが検索された場合、複数のサーバ装置が特定されることがある。以下のステップＳ１６〜Ｓ１８の処理が、特定されたサーバ装置毎またはセグメント毎に実行される。
【００６７】
（ステップＳ１６）セグメント管理部１１３は、データ処理の対象のセグメントが配置されたサーバ装置として、他のサーバ装置がステップＳ１５で特定されたか判断する。他のサーバ装置が特定された場合、処理をステップＳ１７に進める。自装置（サーバ装置１００）が特定された場合、処理をステップＳ１８に進める。
【００６８】
（ステップＳ１７）メッセージ処理部１１４は、ステップＳ１５で特定された他のサーバ装置に対して、リード要求またはライト要求を示すメッセージを送信する。メッセージには、クライアント装置３００からのリクエストで指定されたキーまたはキーの範囲のうち、宛先のサーバ装置に記憶されているキーまたはキーの範囲が含まれる。その後、メッセージ処理部１１４は、応答のメッセージを他のサーバ装置から受信する。応答のメッセージには、キーに対応するデータまたは書き込み完了の報告が含まれる。
【００６９】
（ステップＳ１８）データ処理部１２１は、クライアント装置３００からのリクエストに応じたデータ処理を行う。リード要求の場合、リクエストで指定されたキーまたはキーの範囲のうち、自装置に記憶されているキーまたはキーの範囲に対応するデータをデータ記憶部１３０から読み出す。ライト要求の場合、リクエストに含まれるキーとデータとを対応付けて、データ記憶部１３０に書き込む。
【００７０】
（ステップＳ１９）リクエスト受信部１１１は、ステップＳ１１で受信したリクエストに対するレスポンスをクライアント装置３００に送信する。リクエストがリード要求である場合、レスポンスとして、ステップＳ１７，Ｓ１８で自装置または他のサーバ装置から読み出されたデータを送信する。リクエストがライト要求である場合、レスポンスとして、ステップＳ１７，Ｓ１８で確認された書き込み完了の報告を送信する。
【００７１】
図９は、セグメント分割を示すフローチャートである。ここでは、サーバ装置１００が処理を行う場合を考える。サーバ装置１００ａ，１００ｂ，１００ｃも、サーバ装置１００と同様の処理を行う。以下、図９に示す処理をステップ番号に沿って説明する。
【００７２】
（ステップＳ２１）分割判定部１２４は、データ処理部１２１がデータ記憶部１３０に書き込んだデータのキーを特定する。そして、セグメント情報記憶部１１２に記憶されたセグメント情報に基づいて、キーに対応するセグメントを検索する。
【００７３】
（ステップＳ２２）閾値算出部１２３は、算出式記憶部１２２に記憶された算出式に、ステップＳ２１で検索されたセグメントのラベルを代入し、当該セグメントの閾値を算出する。閾値の算出式としては、例えば、以下に示す数式（１）を用いる。数式（１）において、Ｌはラベル、Ｒは所定のルート閾値、ｂはセグメント管理ツリーの分岐数を示す。また、ｌｅｎｇｔｈ（Ｌ）はラベルのビット数を示し、ｖａｌｕｅ（Ｌ）はラベルＬが表す１０進数表現の値を示す。
【００７４】
【数１】
2012164735.tif 000003
【００７５】
（ステップＳ２３）分割判定部１２４は、データ記憶部１３０を参照して、ステップＳ２１で検索したセグメントのデータ量（例えば、当該セグメントに属するキーに対応付けられているデータの総量）を算出する。そして、データ量がステップＳ２２で算出された閾値を超えているか判断する。データ量が閾値を超える場合、処理をステップＳ２４に進める。データ量が閾値以下の場合、処理を終了する。
【００７６】
（ステップＳ２４）セグメント管理部１１３は、ステップＳ２１で検索されたセグメントを分割して得られるｂ個の子セグメントを定義する。例えば、セグメントのラベルがＬでありｂ＝２の場合、ラベルＬ＋０，Ｌ＋１の子セグメントを定義する。
【００７７】
（ステップＳ２５）データ処理部１２１は、データ記憶部１３０から、ステップＳ２１で検索されたセグメントに属するキーを１つ選択する。
（ステップＳ２６）データ処理部１２１は、ステップＳ２４で定義された子セグメントの中から、ステップＳ２５で選択したキーのプレフィックスと一致するラベルをもつ子セグメントを特定する。そして、データ処理部１２１は、ステップＳ２５で選択したキーを特定した子セグメントに割り当てる。
【００７８】
（ステップＳ２７）データ処理部１２１は、ステップＳ２５で全てのキーを選択したか判断する。全てのキーを選択した場合、処理をステップＳ２８に進める。未選択のキーが存在する場合、処理をステップＳ２５に進める。
【００７９】
（ステップＳ２８）セグメント管理部１１３は、ステップＳ２４で定義した子セグメントのラベルにハッシュ関数を適用し、子セグメントそれぞれの配置先のサーバ装置を特定する。データ処理部１２１は、他のサーバ装置に配置される子セグメントのデータ（当該子セグメントに属するキーと対応付けられているデータ）をデータ記憶部１３０から読み出し、他のサーバ装置に送信する。データ送信が完了すると、他のサーバ装置に配置される子セグメントのデータをデータ記憶部１３０から削除する。
【００８０】
（ステップＳ２９）セグメント管理部１１３は、ステップＳ２４のセグメント分割が反映されるように、セグメント情報記憶部１１２に記憶されているセグメント情報を更新する。メッセージ処理部１１４は、セグメントの更新を他の全てのサーバ装置に通知する。
【００８１】
図１０は、セグメントの閾値の例を示す図である。図１０の閾値の例は、図５のセグメント管理ツリーに数式（１）を適用して算出したものである。
各階層レベルの左端ノード（ルートノードおよびラベル０，００，０００のノード）に対応するセグメントには、所定のルート閾値Ｒが設定される。Ｒとして、１００［ＭＢ（メガバイト）］などのデータ量が予め決められている。左端ノード以外のノードに対応するセグメントには、Ｒを２f倍した閾値が設定される。ｆは分数で表現でき、分母の計算にはラベルのビット数が用いられ、分子にはラベルの表す値が用いられる。よって、同一の階層レベルのセグメント間では、ｆが異なる値となり、閾値が異なる値となる。
【００８２】
ラベル１のセグメントには、ｆ＝１／２であるため、閾値１．４１Ｒが設定される。ラベル０１のセグメントには、ｆ＝１／４であるため、閾値１．１９Ｒが設定される。ラベル１０のセグメントには、ｆ＝２／４であるため、閾値１．４１Ｒが設定される。ラベル１１のセグメントには、ｆ＝３／４であるため、閾値１．６８Ｒが設定される。
【００８３】
ここで、サーバ装置１００，１００ａ，１００ｂ，１００ｃがデータを記憶していない状態（データ集合が空の状態）から、一定の速度でキー空間全体に対して均等にデータが追加される場合を考える。例えば、ルート閾値をＲ［ＭＢ］とし、キー空間全体に対してＳ［ＭＢ／秒］（例えば、１［ＭＢ／秒］）の速度でデータが追加されるとする。
【００８４】
この場合、データ追加を開始してからの経過時間として、ルートノードのセグメントでは、Ｒ／Ｓ［秒］でデータ量が閾値に達する。ラベル０のセグメントでは、２Ｒ／Ｓ［秒］でデータ量が閾値に達する。ラベル１のセグメントでは、２．８２Ｒ／Ｓ［秒］でデータ量が閾値に達する。ラベル００のセグメントでは、４Ｒ／Ｓ［秒］でデータ量が閾値に達する。ラベル０１のセグメントでは、４．７６Ｒ／Ｓ［秒］でデータ量が閾値に達する。ラベル１０のセグメントでは、５．６４Ｒ／Ｓ［秒］でデータ量が閾値に達する。ラベル１１のセグメントでは、６．７２Ｒ／Ｓ［秒］でデータ量が閾値に達する。ラベル０００のセグメントでは、８Ｒ／Ｓ［秒］でデータ量が閾値に達する。ラベル００１のセグメントでは、８．７２Ｒ／Ｓ［秒］でデータ量が閾値に達する。
【００８５】
このように、数式（１）に従って各セグメントの閾値を算出すると、データがキー空間に対して均等に追加される場合には、上位の階層レベルのセグメントの分割が完了した後に、下位の階層レベルのセグメントの分割が行われる。例えば、ラベル１のセグメントが分割された後に、ラベル００のセグメントが分割される。ラベル１１のセグメントが分割された後に、ラベル０００のセグメントが分割される。また、全てのセグメントの分割が異なるタイミングで行われる。セグメントを分割するか否かは、当該セグメントのラベルから判定できるため、セグメント間で独立に判定できる。
【００８６】
なお、図１０の例では、各階層レベルの左端ノードにルート閾値Ｒを付与し、左端ノードから右端ノードに向かって閾値を増加させたが、各階層レベルの右端ノードにルート閾値Ｒを付与し、右端ノードから左端ノードに向かって閾値を増加させてもよい。また、上記の説明では、データ量と閾値とを比較してセグメントを分割するか判定しているが、データ量と閾値とを比較してセグメントを統合するか判定してもよい。例えば、ラベル０００，００１のセグメントのデータ量の合計が閾値以下のとき、当該２つのセグメントを統合すると判定してもよい。そのとき、分割の判定に用いる閾値と統合の判定に用いる閾値とは、異なる算出式から算出してもよい。
【００８７】
図１１は、リクエスト処理およびセグメント分割を示すシーケンス図である。クライアント装置３００がサーバ装置１００に対して、データの書き込みのリクエストを送信し、データの書き込みによってセグメント分割が発生する場合を考える。
【００８８】
（ステップＳ３１）クライアント装置３００は、データの書き込みを示すリクエストをサーバ装置１００に送信する。リクエストには、キーとデータが含まれる。
（ステップＳ３２）サーバ装置１００は、自装置が有するセグメント情報からキーの属するセグメントを検索し、ラベルとハッシュ関数を用いて当該セグメントが配置されているサーバ装置（ここでは、サーバ装置１００ａ）を特定する。そして、ライト要求のメッセージをサーバ装置１００ａに送信する。メッセージには、キーとデータが含まれる。
【００８９】
（ステップＳ３３）サーバ装置１００ａは、サーバ装置１００から受信したメッセージに含まれるキーとデータとを対応付けて、自装置が有する記憶装置に書き込む。そして、書き込み完了を示すレスポンスをサーバ装置１００に送信する。
【００９０】
（ステップＳ３４）サーバ装置１００は、サーバ装置１００ａで書き込みが完了したことを確認すると、クライアント装置３００にレスポンスを送信する。
（ステップＳ３５）サーバ装置１００ａは、データの書き込みによって、セグメントのデータ量が閾値を超えたことを検出する。すると、サーバ装置１００ａは、当該セグメントをｂ個（例えば、２個）のセグメントに更に分割する。
【００９１】
（ステップＳ３６）サーバ装置１００ａは、ラベルとハッシュ関数を用いて、分割後のセグメントが配置されるサーバ装置（ここでは、サーバ装置１００ａ，１００ｂ）を特定する。そして、サーバ装置１００ｂに配置されるセグメントのキーとデータをサーバ装置１００ｂに送信する。なお、前述の通り、１つのセグメントを２つの子セグメントに分割したとき、一方の子セグメントが元のセグメントと同じサーバ装置に配置され、他の子セグメントが元のセグメントと異なるサーバ装置に配置されるようにすることもできる。
【００９２】
（ステップＳ３７）サーバ装置１００ｂは、サーバ装置１００ａから受信したキーとデータを対応付けて、自装置が有する記憶装置に書き込む。そして、書き込み完了を示すレスポンスをサーバ装置１００ａに送信する。
【００９３】
（ステップＳ３８）サーバ装置１００ａは、サーバ装置１００ｂへの複製が完了したセグメントのキーとデータを、自装置が有する記憶装置から削除する。また、サーバ装置１００ａは、セグメントの分割が反映されるように、自装置が有するセグメント情報を更新する。そして、サーバ装置１００ａは、セグメントの更新を示す通知を、他の全てのサーバ装置（サーバ装置１００，１００ｂ，１００ｃ）に送信する。
【００９４】
（ステップＳ３９）サーバ装置１００，１００ｂ，１００ｃは、サーバ装置１００ａからの通知に基づいて、自装置が有するセグメント情報を更新する。そして、セグメント情報の更新完了を示すレスポンスを、サーバ装置１００ａに送信する。これにより、サーバ装置１００ａによるセグメント情報の更新が、サーバ装置１００，１００ｂ，１００ｃが有するセグメント情報に反映され、セグメント情報が同期された状態となる。
【００９５】
第２の実施の形態によれば、サーバ装置１００，１００ａ，１００ｂ，１００ｃはキーとデータを対応付けて記憶し、クライアント装置３００から指定されたキーについてデータ処理を行うので、データ処理の複雑性を低減でき負荷が低くなる。また、データが複数のサーバ装置に分散して記憶されると共に、何れのサーバ装置もクライアント装置３００からリクエストを受け付けることができるので、ボトルネックとなる装置が生じないように設計可能であり、情報処理システムの可用性が向上する。
【００９６】
また、キー空間を複数のセグメントに分割し、セグメント単位でデータがサーバ装置に配置されるので、値の近いキーに対応するデータ同士が同一のサーバ装置に記憶される確率が高くなり、キーの範囲を指定したデータ処理を効率的に実行できる。また、セグメント分割の要否は、セグメントのラベルに基づいてセグメント毎に独立に判定できるので、各サーバ装置が他のサーバ装置とネゴシエーションを行わずに判定でき、スケーラビリティを向上できる。また、セグメント分割の要否を判定するための閾値が、セグメント間で異なるように算出されるので、複数のセグメントの分割が同時期に集中する確率を低減することができ、情報処理システムの負荷を軽減できる。
【００９７】
なお、前述のように、第２の実施の形態のデータ管理は、コンピュータとしてのサーバ装置１００，１００ａ，１００ｂ，１００ｃに、それぞれデータ管理プログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体３３）に記録しておくことができる。記録媒体として、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。
【００９８】
プログラムを流通させる場合、例えば、当該プログラムを記録した可搬記録媒体が提供される。また、プログラムを他のコンピュータの記憶装置に格納しておき、ネットワーク４１経由でプログラムを配布することもできる。コンピュータは、例えば、可搬記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを記憶装置（例えば、ＨＤＤ１０３）に格納し、当該記憶装置からプログラムを読み込んで実行する。ただし、可搬記録媒体から読み込んだプログラムを直接実行してもよく、他のコンピュータからネットワーク４１を介して受信したプログラムを直接実行してもよい。
【００９９】
上記については単に本発明の原理を示すものである。更に、多数の変形や変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応する全ての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【０１００】
１０  情報処理装置
１１  記憶部
１２  制御部
２１，２２  記憶装置
【図１】
2012164735.tif 000004
【図２】
2012164735.tif 000005
【図３】
2012164735.tif 000006
【図４】
2012164735.tif 000007
【図５】
2012164735.tif 000008
【図６】
2012164735.tif 000009
【図７】
2012164735.tif 000010
【図８】
2012164735.tif 000011
【図９】
2012164735.tif 000012
【図１０】
2012164735.tif 000013
【図１１】
2012164735.tif 000014
【手続補正書】
【提出日】平成26年6月2日(2014.6.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
キーの集合を複数のセグメントに分割し、キーと対応付けて記憶装置に記憶されるデータをセグメント単位で管理する情報処理システムに用いられる情報処理装置であって、
前記複数のセグメントを階層構造で表現し、前記複数のセグメントのうち少なくとも第１および第２のセグメントについて、キーとセグメントとの関係を示すセグメント情報を記憶する記憶部と、
前記セグメント情報を参照し、前記第１のセグメントに属するキーと対応付けて記憶されているデータの量と第１の閾値とに基づいて、前記第１のセグメントを２以上のセグメントに分割するか判定する制御部と、を有し、
前記第１の閾値は、前記第２のセグメントを分割するか判定するために用いられる第２の閾値とは異なる値をとり、
前記複数のセグメントそれぞれの閾値は、少なくとも同じ階層レベルのセグメント間では異なる値になるように算出される、情報処理装置。
【請求項２】
前記セグメント情報は、前記第１および第２のセグメントの識別情報を含み、
前記第１の閾値は、前記第１のセグメントの識別情報に基づいて算出され、前記第２の閾値は、前記第２のセグメントの識別情報に基づいて算出される、
請求項１記載の情報処理装置。
【請求項３】
前記情報処理システムは、複数の記憶装置を有し、前記複数の記憶装置の中からデータを格納する記憶装置をセグメント単位で選択し、
前記制御部は、前記第１のセグメントから分割された前記２以上のセグメントの少なくとも１つについて、データを格納する記憶装置が変更されるよう制御する、
請求項１または２記載の情報処理装置。
【請求項４】
キーの集合を複数のセグメントに分割し、キーと対応付けて記憶装置に記憶されるデータをセグメント単位で管理する情報処理システムが行うデータ管理方法であって、
前記複数のセグメントのうちの第１のセグメントに属するキーと対応付けて前記記憶装置に記憶されているデータの量を算出し、
算出したデータの量と前記第１のセグメントに応じた第１の閾値とに基づいて、前記第１のセグメントを２以上のセグメントに分割するか判定し、
前記第１の閾値は、前記複数のセグメントのうちの第２のセグメントを分割するか判定するために用いられる第２の閾値とは異なる値をとり、
前記複数のセグメントは階層構造で表現され、前記複数のセグメントそれぞれの閾値は、少なくとも同じ階層レベルのセグメント間では異なる値になるように算出される、データ管理方法。
【請求項５】
キーの集合を複数のセグメントに分割し、キーと対応付けて記憶装置に記憶されるデータをセグメント単位で管理する情報処理システムに用いられるコンピュータに実行させるデータ管理プログラムであって、前記コンピュータに、
前記複数のセグメントのうちの第１のセグメントに属するキーと対応付けて前記記憶装置に記憶されているデータの量を算出し、
算出したデータの量と前記第１のセグメントに応じた第１の閾値とに基づいて、前記第１のセグメントを２以上のセグメントに分割するか判定する、処理を実行させ、
前記第１の閾値は、前記複数のセグメントのうちの第２のセグメントを分割するか判定するために用いられる第２の閾値とは異なる値をとり、
前記複数のセグメントは階層構造で表現され、前記複数のセグメントそれぞれの閾値は、少なくとも同じ階層レベルのセグメント間では異なる値になるように算出される、データ管理プログラム。
【請求項６】
キーの集合を複数のセグメントに分割し、キーと対応付けて記憶装置に記憶されるデータをセグメント単位で管理する情報処理システムに用いられる情報処理装置であって、
前記複数のセグメントのうち少なくとも第１および第２のセグメントについて、キーとセグメントとの関係を示し、前記第１および第２のセグメントの識別情報を含むセグメント情報を記憶する記憶部と、
前記セグメント情報を参照し、前記第１のセグメントに属するキーと対応付けて記憶されているデータの量と第１の閾値とに基づいて、前記第１のセグメントを２以上のセグメントに分割するか判定する制御部と、を有し、
前記第１の閾値は、前記第２のセグメントを分割するか判定するために用いられる第２の閾値とは異なる値をとり、
前記第１の閾値は、前記第１のセグメントの識別情報に基づいて算出され、前記第２の閾値は、前記第２のセグメントの識別情報に基づいて算出される、情報処理装置。
【請求項７】
前記セグメント情報は、前記複数のセグメントを階層構造で表現し、
前記複数のセグメントそれぞれの閾値は、少なくとも同じ階層レベルのセグメント間では異なる値になるように算出される、
請求項６記載の情報処理装置。
【請求項８】
前記情報処理システムは、複数の記憶装置を有し、前記複数の記憶装置の中からデータを格納する記憶装置をセグメント単位で選択し、
前記制御部は、前記第１のセグメントから分割された前記２以上のセグメントの少なくとも１つについて、データを格納する記憶装置が変更されるよう制御する、
請求項６または７記載の情報処理装置。
【請求項９】
キーの集合を複数のセグメントに分割し、キーと対応付けて記憶装置に記憶されるデータをセグメント単位で管理する情報処理システムが行うデータ管理方法であって、
前記複数のセグメントのうちの第１のセグメントに属するキーと対応付けて前記記憶装置に記憶されているデータの量を算出し、
算出したデータの量と前記第１のセグメントに応じた第１の閾値とに基づいて、前記第１のセグメントを２以上のセグメントに分割するか判定し、
前記第１の閾値は、前記複数のセグメントのうちの第２のセグメントを分割するか判定するために用いられる第２の閾値とは異なる値をとり、
前記第１の閾値は、前記第１のセグメントの識別情報に基づいて算出され、前記第２の閾値は、前記第２のセグメントの識別情報に基づいて算出される、データ管理方法。
【請求項１０】
キーの集合を複数のセグメントに分割し、キーと対応付けて記憶装置に記憶されるデータをセグメント単位で管理する情報処理システムに用いられるコンピュータに実行させるデータ管理プログラムであって、前記コンピュータに、
前記複数のセグメントのうちの第１のセグメントに属するキーと対応付けて前記記憶装置に記憶されているデータの量を算出し、
算出したデータの量と前記第１のセグメントに応じた第１の閾値とに基づいて、前記第１のセグメントを２以上のセグメントに分割するか判定する、処理を実行させ、
前記第１の閾値は、前記複数のセグメントのうちの第２のセグメントを分割するか判定するために用いられる第２の閾値とは異なる値をとり、
前記第１の閾値は、前記第１のセグメントの識別情報に基づいて算出され、前記第２の閾値は、前記第２のセグメントの識別情報に基づいて算出される、データ管理プログラム。
【国際調査報告】
2012164735.tif 000015
2012164735.tif 000016
2012164735.tif 000017
2012164735.tif 000018