(57)【特許請求の範囲】
【請求項１】
キーおよび当該キーに対応するバリューを有するデータの集合内の各データについて、前記データ内での前記キーと前記バリューに含まれる他のキーとの存在を示す指標値である前記データのキー特徴値を、前記キーの値および前記バリューに含まれる前記他のキーの値に基づいて算出し、
前記集合内の前記各データが有する前記キーをノードとし、前記キーと当該キーに対応するバリューに含まれる前記他のキーとの関連をノード間のエッジとするグラフを作成し、
作成された前記グラフを第１のグラフと第２のグラフとに分割し、
分割された前記第１のグラフ内の第１のキー群の存在を示す第１のグラフ特徴値を前記第１のキー群の各キーの値に基づいて算出するとともに、分割された前記第２のグラフ内の第２のキー群の存在を示す第２のグラフ特徴値を前記第２のキー群の各キーの値に基づいて算出し、
前記各データについて、前記キー特徴値と、前記第１および第２のグラフ特徴値と、に基づいて、前記第１のグラフに対応する第１のセグメントと前記第２のグラフに対応する第２のセグメントとのうち前記各データを配置させるセグメントを決定し、
前記各データを前記グラフに対応するセグメントから決定されたセグメントに配置し、
決定された前記セグメントに配置された前記各データの格納先を設定する、
処理をコンピュータに実行させることを特徴とする生成プログラム。
【請求項２】
前記配置する処理が前記各データを前記グラフに対応するセグメントから決定されたセグメントに配置させることにより、前記グラフに対応するセグメントと前記第１および第２のセグメントとが関連付けられた木構造データを生成する処理を前記コンピュータに実行させことを特徴とする請求項１に記載の生成プログラム。
【請求項３】
前記分割する処理は、
前記第１のグラフのノード数と前記第２のグラフのノード数とが均等、かつ、エッジを横切る本数が最小となるように分割することを特徴とする請求項２に記載の生成プログラム。
【請求項４】
前記グラフ特徴値を算出する処理は、
前記第１のキー群のサイズよりも小さいサイズとなる前記第１のグラフ特徴値を算出するとともに、前記第２のキー群のサイズよりも小さいサイズとなる前記第２のグラフ特徴値を算出することを特徴とする請求項２または３に記載の生成プログラム。
【請求項５】
前記決定する処理は、
登録対象キーおよび当該登録対象キーに対応する登録対象バリューを有する登録対象データのキー特徴値と、前記第１および第２のグラフ特徴値と、に基づいて、前記第１のグラフに対応する第１のセグメントと前記第２のグラフに対応する第２のセグメントのうち前記データを配置させるセグメントを決定することを特徴とする請求項２〜４のいずれか一つに記載の生成プログラム。
【請求項６】
前記第１および第２のセグメントの一方のセグメントの所属データ群のデータ数がしきい値に到達したことを検出する処理を前記コンピュータに実行させ、
前記分割する処理は、
検出された前記一方のセグメントに対応するグラフを第３のグラフと第４のグラフとに分割し、
前記グラフ特徴値を算出する処理は、
分割された前記第３のグラフ内の第３のキー群の存在を示す第３のグラフ特徴値を前記第３のキー群の各キーの値に基づいて算出するとともに、分割された前記第４のグラフ内の第４のキー群の存在を示す第４のグラフ特徴値を前記第４のキー群の各キーの値に基づいて算出し、
前記決定する処理は、
前記一方のセグメントの所属データ群の各所属データについて、当該所属データのキー特徴値と、前記第３および第４のグラフ特徴値と、に基づいて、前記第３のグラフに対応する第３のセグメントと前記第４のグラフに対応する第４のセグメントのうち前記所属データを配置させるセグメントを決定し、
前記木構造データを生成する処理は、
前記各所属データを前記一方のセグメントから前記決定する処理によって決定されたセグメントに配置させることにより、前記グラフに対応するセグメントと前記第１および第２のセグメントとが関連付けられ、かつ、前記一方のセグメントと前記第３および第４のセグメントが関連付けられた木構造データを作成することを特徴とする請求項５に記載の生成プログラム。
【請求項７】
要求元から格納済みバリューに対応するキーを含む取得要求を受け付け、
前記格納済みバリューに対応するキーおよび前記格納済みバリューを有するデータのキー特徴値と、前記木構造データ内で分岐する２つのセグメントに対応する２つのグラフ特徴値と、に基づいて、前記格納済みデータのキー特徴値に近い方のグラフ特徴値を有するグラフに対応するセグメントに遷移するセグメント探索を、遷移先のセグメントから分岐する２つのセグメントが存在しなくなるまで実行し、
探索されたセグメントに所属する所属データ群の格納先から前記格納済みバリューに対応するキーを用いて前記格納済みバリューを取得して、前記要求元に転送する、
処理を前記コンピュータに実行させることを特徴とする請求項２〜６のいずれか一つに記載の生成プログラム。
【請求項８】
キーおよび当該キーに対応するバリューを有するデータの集合内の各データについて、前記データ内での前記キーと前記バリューに含まれる他のキーとの存在を示す指標値である前記データのキー特徴値を、前記キーの値および前記バリューに含まれる前記他のキーの値に基づいて算出し、
前記集合内の前記各データが有する前記キーをノードとし、前記キーと当該キーに対応するバリューに含まれる前記他のキーとの関連をノード間のエッジとするグラフを作成し、
作成された前記グラフを第１のグラフと第２のグラフとに分割し、
分割された前記第１のグラフ内の第１のキー群の存在を示す第１のグラフ特徴値を前記第１のキー群の各キーの値に基づいて算出するとともに、分割された前記第２のグラフ内の第２のキー群の存在を示す第２のグラフ特徴値を前記第２のキー群の各キーの値に基づいて算出し、
前記各データについて、前記キー特徴値と、前記第１および第２のグラフ特徴値と、に基づいて、前記第１のグラフに対応する第１のセグメントと前記第２のグラフに対応する第２のセグメントとのうち前記各データを配置させるセグメントを決定し、
前記各データを前記グラフに対応するセグメントから決定されたセグメントに配置させることにより、前記グラフに対応するセグメントと前記第１および第２のセグメントとが関連付けられた木構造データを生成し、
前記第１および第２のセグメントの一方のセグメントの所属データ群のデータ数がしきい値に到達したことを検出し、
検出された前記一方のセグメントに対応するグラフを第３のグラフと第４のグラフとに分割し、
分割された前記第３のグラフ内の第３のキー群の存在を示す第３のグラフ特徴値を前記第３のキー群の各キーの値に基づいて算出するとともに、分割された前記第４のグラフ内の第４のキー群の存在を示す第４のグラフ特徴値を前記第４のキー群の各キーの値に基づいて算出し、
前記一方のセグメントの所属データ群の各所属データについて、当該所属データのキー特徴値と、前記第３および第４のグラフ特徴値と、に基づいて、前記第３のグラフに対応する第３のセグメントと前記第４のグラフに対応する第４のセグメントのうち前記所属データを配置させるセグメントを決定し、
前記各所属データを前記一方のセグメントから前記決定する処理によって決定されたセグメントに配置させることにより、前記グラフに対応するセグメントと前記第１および第２のセグメントとが関連付けられ、かつ、前記一方のセグメントと前記第３および第４のセグメントが関連付けられた木構造データを作成する
処理をコンピュータに実行させることを特徴とする生成プログラム。
【請求項９】
キーおよび当該キーに対応するバリューを有するデータの集合内の各データについて、前記データ内での前記キーと前記バリューに含まれる他のキーとの存在を示す指標値である前記データのキー特徴値を、前記キーの値および前記バリューに含まれる前記他のキーの値に基づいて算出し、
前記集合内の前記各データが有する前記キーをノードとし、前記キーと当該キーに対応するバリューに含まれる前記他のキーとの関連をノード間のエッジとするグラフを作成し、
作成された前記グラフを第１のグラフと第２のグラフとに分割し、
分割された前記第１のグラフ内の第１のキー群の存在を示す第１のグラフ特徴値を前記第１のキー群の各キーの値に基づいて算出するとともに、分割された前記第２のグラフ内の第２のキー群の存在を示す第２のグラフ特徴値を前記第２のキー群の各キーの値に基づいて算出し、
前記各データについて、前記キー特徴値と、前記第１および第２のグラフ特徴値と、に基づいて、前記第１のグラフに対応する第１のセグメントと前記第２のグラフに対応する第２のセグメントとのうち前記各データを配置させるセグメントを決定し、
前記各データを前記グラフに対応するセグメントから決定されたセグメントに配置し、
決定された前記セグメントに配置された前記各データの格納先を設定する、
処理をコンピュータが実行することを特徴とする生成方法。
【請求項１０】
キーおよび当該キーに対応するバリューを有するデータの集合内の各データについて、前記データ内での前記キーと前記バリューに含まれる他のキーとの存在を示す指標値である前記データのキー特徴値を、前記キーの値および前記バリューに含まれる前記他のキーの値に基づいて算出し、
前記集合内の前記各データが有する前記キーをノードとし、前記キーと当該キーに対応するバリューに含まれる前記他のキーとの関連をノード間のエッジとするグラフを作成し、
作成された前記グラフを第１のグラフと第２のグラフとに分割し、
分割された前記第１のグラフ内の第１のキー群の存在を示す第１のグラフ特徴値を前記第１のキー群の各キーの値に基づいて算出するとともに、分割された前記第２のグラフ内の第２のキー群の存在を示す第２のグラフ特徴値を前記第２のキー群の各キーの値に基づいて算出し、
前記各データについて、前記キー特徴値と、前記第１および第２のグラフ特徴値と、に基づいて、前記第１のグラフに対応する第１のセグメントと前記第２のグラフに対応する第２のセグメントとのうち前記各データを配置させるセグメントを決定し、
前記各データを前記グラフに対応するセグメントから決定されたセグメントに配置し、
決定された前記セグメントに配置された前記各データの格納先を設定する、
制御部を有することを特徴とする生成システム。
【請求項１１】
キーおよび当該キーに対応するバリューを有するデータの集合内の各データについて、前記データ内での前記キーと前記バリューに含まれる他のキーとの存在を示す指標値である前記データのキー特徴値を、前記キーの値および前記バリューに含まれる前記他のキーの値に基づいて算出し、
前記集合内の前記各データが有する前記キーをノードとし、前記キーと当該キーに対応するバリューに含まれる前記他のキーとの関連をノード間のエッジとするグラフを作成し、
作成された前記グラフを第１のグラフと第２のグラフとに分割し、
分割された前記第１のグラフ内の第１のキー群の存在を示す第１のグラフ特徴値を前記第１のキー群の各キーの値に基づいて算出するとともに、分割された前記第２のグラフ内の第２のキー群の存在を示す第２のグラフ特徴値を前記第２のキー群の各キーの値に基づいて算出し、
前記各データについて、前記キー特徴値と、前記第１および第２のグラフ特徴値と、に基づいて、前記第１のグラフに対応する第１のセグメントと前記第２のグラフに対応する第２のセグメントとのうち前記各データを配置させるセグメントを決定し、
前記各データを前記グラフに対応するセグメントから決定されたセグメントに配置させることにより、前記グラフに対応するセグメントと前記第１および第２のセグメントとが関連付けられた木構造データを生成し、
前記第１および第２のセグメントの一方のセグメントの所属データ群のデータ数がしきい値に到達したことを検出し、
検出された前記一方のセグメントに対応するグラフを第３のグラフと第４のグラフとに分割し、
分割された前記第３のグラフ内の第３のキー群の存在を示す第３のグラフ特徴値を前記第３のキー群の各キーの値に基づいて算出するとともに、分割された前記第４のグラフ内の第４のキー群の存在を示す第４のグラフ特徴値を前記第４のキー群の各キーの値に基づいて算出し、
前記一方のセグメントの所属データ群の各所属データについて、当該所属データのキー特徴値と、前記第３および第４のグラフ特徴値と、に基づいて、前記第３のグラフに対応する第３のセグメントと前記第４のグラフに対応する第４のセグメントのうち前記所属データを配置させるセグメントを決定し、
前記各所属データを前記一方のセグメントから前記決定する処理によって決定されたセグメントに配置させることにより、前記グラフに対応するセグメントと前記第１および第２のセグメントとが関連付けられ、かつ、前記一方のセグメントと前記第３および第４のセグメントが関連付けられた木構造データを作成する
処理をコンピュータが実行することを特徴とする生成方法。
【請求項１２】
キーおよび当該キーに対応するバリューを有するデータの集合内の各データについて、前記データ内での前記キーと前記バリューに含まれる他のキーとの存在を示す指標値である前記データのキー特徴値を、前記キーの値および前記バリューに含まれる前記他のキーの値に基づいて算出し、
前記集合内の前記各データが有する前記キーをノードとし、前記キーと当該キーに対応するバリューに含まれる前記他のキーとの関連をノード間のエッジとするグラフを作成し、
作成された前記グラフを第１のグラフと第２のグラフとに分割し、
分割された前記第１のグラフ内の第１のキー群の存在を示す第１のグラフ特徴値を前記第１のキー群の各キーの値に基づいて算出するとともに、分割された前記第２のグラフ内の第２のキー群の存在を示す第２のグラフ特徴値を前記第２のキー群の各キーの値に基づいて算出し、
前記各データについて、前記キー特徴値と、前記第１および第２のグラフ特徴値と、に基づいて、前記第１のグラフに対応する第１のセグメントと前記第２のグラフに対応する第２のセグメントとのうち前記各データを配置させるセグメントを決定し、
前記各データを前記グラフに対応するセグメントから決定されたセグメントに配置させることにより、前記グラフに対応するセグメントと前記第１および第２のセグメントとが関連付けられた木構造データを生成し、
前記第１および第２のセグメントの一方のセグメントの所属データ群のデータ数がしきい値に到達したことを検出し、
検出された前記一方のセグメントに対応するグラフを第３のグラフと第４のグラフとに分割し、
分割された前記第３のグラフ内の第３のキー群の存在を示す第３のグラフ特徴値を前記第３のキー群の各キーの値に基づいて算出するとともに、分割された前記第４のグラフ内の第４のキー群の存在を示す第４のグラフ特徴値を前記第４のキー群の各キーの値に基づいて算出し、
前記一方のセグメントの所属データ群の各所属データについて、当該所属データのキー特徴値と、前記第３および第４のグラフ特徴値と、に基づいて、前記第３のグラフに対応する第３のセグメントと前記第４のグラフに対応する第４のセグメントのうち前記所属データを配置させるセグメントを決定し、
前記各所属データを前記一方のセグメントから前記決定する処理によって決定されたセグメントに配置させることにより、前記グラフに対応するセグメントと前記第１および第２のセグメントとが関連付けられ、かつ、前記一方のセグメントと前記第３および第４のセグメントが関連付けられた木構造データを作成する
制御部を有することを特徴とする生成システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、生成プログラム、生成方法、および生成システムに関する。
【背景技術】
【０００２】
分散キーバリューストアというデータの管理方法がある。分散キーバリューストアは、データを構成するキー（ｋｅｙ）とバリュー（ｖａｌｕｅ）の対応を管理しており、ユーザはキーとバリューの対応を登録したりキーからバリューを参照したりすることができる。キーは、たとえば、固定の識別情報またはポインタであり、バリューは、たとえば、ウェブページやテキストデータなどの可変なデータである。分散キーバリューストアは複数のサーバから構成される。キーとバリューの組であるデータは、それらのサーバの一つ、あるいは、設定された冗長性に応じて複数個に配置される。その配置先は、キーのハッシュ値などに基づいて決定される。
【０００３】
また、特性の類似した関連ウェブページ群を発見する関連ウェブページ発見装置が開示されている。関連ウェブページ発見装置は、ウェブページをノード、ハイパーリンクをエッジとしたネットワークを隣接行列形式で表現し、ノードとその周辺ノードとのエッジの接続状態に基づいた特徴量を算出する。また、関連ウェブページ発見装置は、ウェブページ特徴量データベースを参照し、各ページの特徴量を基に、処理対象のページと関連するウェブページを算出して関連ウェブページ群を出力する。
【０００４】
また、構造を持った情報である回路を、小規模のグラフに変換し、小規模のグラフ間のマッチングをおこなう自動配置方法が開示されている。自動配置方法では、部分リストとネットリストからなる回路データとその配置をデータベースに記憶して、新規回路データとデータベース中の回路データをノードとエッジからなるグラフに変換する。そして、自動配置方法では、グラフ間のマッチングを行い、マッチング度の高い回路データを検索し、その回路データの対になる配置データに沿って、新規回路データを配置する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−１２３０３８号公報
【特許文献２】特開２０００−２００２９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
分散キーバリューストアのようにデータが複数のサーバに分散されて管理されている場合、続けて参照する確率が高いデータ同士のような関連性があるデータ同士を同一のサーバに記憶することにより、ディスクアクセスの回数を減らすことが可能になる。しかしながら、従来技術では、関連性のあるデータ同士をグループ化することが困難であるという問題がある。たとえば、キー同士の値に関連性がない場合、キーの値からデータ同士の関連性を特定できず、関連性のあるデータ同士を同一のサーバに記憶することが困難である。キー同士の属性に関連性がない場合についても同様である。
【０００７】
本発明は、データ内のキーの組み合わせからデータ同士の関連性を検出することにより、関連性のあるデータ同士をグループ化することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一側面によれば、キーおよび当該キーに対応するバリューを有するデータの集合内の各データについて、前記データ内での前記キーと前記バリューに含まれる他のキーとの存在を示す指標値である前記データのキー特徴値を、前記キーの値および前記バリューに含まれる前記他のキーの値に基づいて算出し、算出された前記キー特徴値が類似するデータ同士を同一のグループとするセグメントを生成し、生成されたセグメント内のデータの格納先を設定する、生成プログラム、生成方法、および生成システムが提案される。
【発明の効果】
【０００９】
本発明の一側面によれば、データ内のキーの組み合わせからデータ同士の関連性を検出することにより、関連性のあるデータ同士をグループ化することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、局所分割の一例を示す説明図である。
【図２−１】図２−１は、データの一例を示す説明図である。
【図２−２】図２−２は、キー特徴値の一例を示す説明図である。
【図２−３】図２−３は、サブグラフ特徴値の一例を示す説明図である。
【図３】図３は、キー特徴値とサブグラフ特徴値とを用いたキーの局所分割例を示す説明図である。
【図４】図４は、木構造データを構成するセグメントのデータ構造を示す説明図である。
【図５】図５は、局所分割による木構造データの構築例を示す説明図（その１）である。
【図６】図６は、局所分割による木構造データの構築例を示す説明図（その２）である。
【図７】図７は、分散システムのシステム構成例を示す説明図である。
【図８】図８は、図７に示したキー特徴値テーブルＴＣの記憶内容の一例を示す説明図である。
【図９】図９は、図７に示したコンピュータのハードウェア構成例を示すブロック図である。
【図１０】図１０は、データ参照例を示す説明図である。
【図１１】図１１は、データ新規登録例を示す説明図である。
【図１２】図１２は、第１の管理装置７０１および第２の管理装置７０２の機能的構成例を示す機能ブロック図である。
【図１３】図１３は、分散装置Ｍの機能的構成例を示すブロック図である。
【図１４】図１４は、第１の管理装置７０１による参照要求処理の詳細な処理手順を示すフローチャートである。
【図１５】図１５は、第１の管理装置７０１による新規登録要求処理の詳細な処理手順を示すフローチャートである。
【図１６】図１６は、分散装置Ｍによる局所分割処理の詳細な処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、この発明にかかる生成プログラム、生成方法、および生成システムの実施の形態を詳細に説明する。
【００１２】
＜局所分割の一例＞
データ処理において、「関連するデータを続けてアクセスする傾向」が存在する場合がある。たとえば、ＳＮＳ（Ｓｏｃｉａｌ  Ｎｅｔｗｏｒｋ  Ｓｅｒｖｉｃｅ）において、あるユーザの情報を参照する場合、その友人の情報も続けて参照する確率が高い。このような傾向を「局所性」という。データが複数のサーバに分散されて管理されている場合、局所性のあるデータ同士は同一のサーバに記憶することにより、ディスクアクセスの回数を減らすことが可能になる。
【００１３】
本実施の形態は、たとえば、分散キーバリューストアにおいて、キー同士の値に関連性がないデータ群を、局所性のあるデータ同士でグループ化する。キー同士の属性に関連性がないデータ群についても同様である。このため、本実施の形態は、データ群における全キー空間を「セグメント」という概念を導入して管理する。データ群は、セグメント単位で分割されて分散装置に割り当られる。分散装置は、データ群から割当てられたデータを保持するコンピュータである。
【００１４】
また、セグメントの大きさは以下の観点により選ぶことができる。セグメントの数は、分散装置の数以上であり、多ければ多いほど、負荷分散の観点では平準化しやすいことになる。また、セグメントに含まれるサブグラフの大きさが大きければ大きいほど、分散装置の記憶装置へのアクセスのコストは小さくなる。セグメントは全空間を再帰的に２分割される。したがって、データ群は、バイナリーツリー構造で管理される。
【００１５】
図１は、局所分割の一例を示す説明図である。局所分割は、上述したように、あるセグメントを局所性のあるデータ同士でグループ化した２つのセグメントに分割することである。データの最小単位は、キーとバリューとする。キーは外部から与えられる固定的なＩＤとする。キーの値はランダムである。図１では、セグメントＳ０に所属するデータａ〜ｊを、子セグメントＳ１，Ｓ２に局所分割する。
【００１６】
局所分割では、セグメントＳ０内のデータａ〜ｊをノードとし、ノード間の関連をエッジ（ノード間を結ぶ線）とするグラフＧ０が生成され、グラフＧ０はサブグラフＧ１，Ｇ２にグラフ分割される。グラフＧ０において、データａ〜ｊのキーｋａ〜ｋｊは、ノードで表現される。キーとバリュー内の他のキーとの関係は、エッジで表現される。キーの値からはグラフＧ０内のエッジの情報は推測できないものとする。このグラフ分割では、たとえば、ノード数が均等になるように、また、境界をまたぐエッジ本数ができる限り少なくなるように行われる。この場合、エッジで直接つながれたことで隣接しあうノードは同じサブグラフに割り当てられる確率が高くなる。グラフ分割としては、たとえば、Ｋｅｒｎｉｇｈａｎ−Ｌｉｎ  ａｌｇｏｒｉｔｈｍが採用される。
【００１７】
ここで、サブグラフＧ１，Ｇ２のそれぞれについて、サブグラフ特徴値Ｃ（Ｇ１），Ｃ（Ｇ２）が算出される。サブグラフ特徴値とは、サブグラフ内のノード群を示す各キーの存在を示す指標値である。サブグラフ特徴値については図２−３で後述する。
【００１８】
そして、局所分割では、セグメントＳ０内の各データａ〜ｊについてキー特徴値が求められる。キー特徴値とは、データ内のキーと、データ内のバリューに含まれている他のキーと、の存在を示す指標値である。キー特徴値については図２−２で後述する。各データａ〜ｊは、サブグラフ特徴値Ｃ（Ｇ１），Ｃ（Ｇ２）のうち自身のキー特徴値に近いほうのデータ同士でグループ化される。図１の例では、セグメントＳ０から局所分割されるセグメントＳ１は、キー特徴値がサブグラフ特徴値Ｃ（Ｇ１）に近いほうのデータ群であり、たとえば、データａ〜ｄ，ｆである。また、セグメントＳ０から局所分割されるセグメントＳ２は、キー特徴値がサブグラフ特徴値Ｃ（Ｇ２）に近いほうのデータ群であり、たとえば、データｅ，ｇ〜ｊである。
【００１９】
図２−１は、データの一例を示す説明図である。データａ〜ｅはそれぞれ、キーとバリューの組み合わせ｛ｋａ，ｖａ｝〜｛ｋｅ，ｖｅ｝を有する。バリューｖａ〜ｖｅには、他のキーが含まれている。たとえば、データａのバリューｖａには、キーｋｂ（＝０５８８４），キーｋｃ（＝２３７８０），ｋｅ（＝０４８６９）が含まれている。したがって、図１のグラフＧ０では、キーｋａは、エッジによりキーｋｂ，ｋｃ，ｋｅと関連付けられることになる。
【００２０】
また、各データａ〜ｅからキー特徴値Ｃａ〜Ｃｅが算出される。キー特徴値Ｃａ〜Ｃｅは、たとえば、同一ビット幅のブルームフィルタＢＦを用いることで算出される。具体的には、たとえば、ブルームフィルタＢＦでは、データ内のキーの値とバリュー内の他のキーの値の各ハッシュ値をブルームフィルタＢＦのビット幅で割り算した余りの値の位置に、それぞれビットが立てられる。
【００２１】
図２−２は、キー特徴値の一例を示す説明図である。図２−２では、データａを用いて説明する。データａの場合、キーｋａ（＝３３９６８），バリューｖａ内のキーｋｂ（＝０５８８４），キーｋｃ（＝２３７８０），ｋｅ（＝０４８６９）がそれぞれハッシュ関数に与えられる。そして、ハッシュ関数から得られたハッシュ値をそれぞれブルームフィルタＢＦのビット幅で割り算した余りの位置に、ビットが立てられる。
【００２２】
このようにしてビットを立てるため、各キー特徴値Ｃａ〜Ｃｅでは、同一のキーについては同一位置にビットが立てられる。ただし、ブルームフィルタＢＦの擬陽性により、同一のキーではなくても同一位置にビットが立てられる場合もある。
【００２３】
図２−１では、キー特徴値Ｃａ〜Ｃｅについて説明したが、図１に示したサブグラフ特徴値Ｃ（Ｇ１），Ｃ（Ｇ２）もブルームフィルタＢＦを用いて算出することができる。キー特徴値の場合は、データごとに、データ内のキーの値とバリュー内の他のキーの値とを用いてブルームフィルタＢＦのビットを立てた。これに対して、サブグラフ特徴値の場合は、サブグラフ内の各キーの値を用いてブルームフィルタＢＦのビットを立てる。サブグラフ特徴値で用いるブルームフィルタＢＦのビット幅は、キー特徴値で用いたブルームフィルタＢＦのビット幅と同一ビット幅であり、また、同一のハッシュ関数を用いるものとする。
【００２４】
図２−３は、サブグラフ特徴値の一例を示す説明図である。図２−３では、図１のサブグラフＧ１のサブグラフ特徴値Ｃ（Ｇ１）について説明する。サブグラフＧ１の場合、キーｋａ〜ｋｅの値がそれぞれハッシュ関数に与えられる。そして、ハッシュ関数から得られたハッシュ値をそれぞれブルームフィルタＢＦのビット幅で割り算した余りの位置に、ビットが立てられる。サブグラフＧ２も同様に、キーｋｆ〜ｋｊの値を用いることでサブグラフ特徴値Ｃ（Ｇ２）が得られる。
【００２５】
図３は、キー特徴値とサブグラフ特徴値とを用いたキーの局所分割例を示す説明図である。図３の（Ａ）は、データａのキー特徴値Ｃａとサブグラフ特徴値Ｃ（Ｇ１），Ｃ（Ｇ２）を用いた例である。データとサブグラフとの局所性の高さを表す例として、距離を用いる。ここでの距離は、短いほど局所性が高いことを示し、キー特徴値とサブグラフ特徴値とで立っている共通ビット数で決まる。
【００２６】
たとえば、キー特徴値Ｃａとサブグラフ特徴値Ｃ（Ｇ１）とで立っている共通ビット数は、「４」である。したがって、キーｋａとサブグラフＧ１との距離ｄ１は、ｄ１＝１／（４＋１）＝１／５となる。一方、キー特徴値Ｃａとサブグラフ特徴値Ｃ（Ｇ２）とで立っている共通ビット数は、「０」である。したがって、キー特徴値Ｃａとサブグラフ特徴値Ｃ（Ｇ２）との距離ｄ２は、ｄ２＝１／（０＋１）＝１となる。すなわち、ｄ１＜ｄ２であるため、キーｋａを有するデータａはサブグラフＧ２よりもサブグラフＧ１と局所性があることがわかる。したがって、キーｋａを有するデータａはセグメントＳ１に属することになる。
【００２７】
また、図３の（Ｂ）は、データｅのキー特徴値Ｃｅとサブグラフ特徴値Ｃ（Ｇ１），Ｃ（Ｇ２）を用いた例である。キー特徴値Ｃｅとサブグラフ特徴値Ｃ（Ｇ１）とで立っている共通ビット数は、「２」である。したがって、キー特徴値Ｃｅとサブグラフ特徴値Ｃ（Ｇ１）との距離ｄ１は、ｄ１＝１／（２＋１）＝１／３となる。一方、キー特徴値Ｃｅとサブグラフ特徴値Ｃ（Ｇ２）とで立っている共通ビット数は、「３」である。したがって、キー特徴値Ｃｅとサブグラフ特徴値Ｃ（Ｇ２）との距離ｄ２は、ｄ２＝１／（３＋１）＝１／４となる。すなわち、ｄ１＞ｄ２であるため、キーｋｅを有するデータｅはサブグラフＧ１よりもサブグラフＧ２と局所性があることがわかる。したがって、キーｋｅを有するデータｅはセグメントＳ２に属することになる。
【００２８】
このように、エッジでつながっていることで隣接しあうデータａとデータｂについては、同一サブグラフに属しているか否かにかかわらず、データａのキー特徴値ＣａにはデータａのキーｋａとデータｂのキーｋｂがブルームフィルタＢＦで織り込まれる。データｂのキー特徴値ＣｂにもデータａのキーｋａとデータｂのキーｋｂがブルームフィルタＢＦで織り込まれる。
【００２９】
また、グラフ分割での「エッジでつながっていることで隣接しあうノードは同じサブグラフに割り当てられる確率が高くなる。」という性質がある。この性質により、データａ〜ｅを含むサブグラフＧ１のサブグラフ特徴値Ｃ（Ｇ１）には、データａ〜ｅのキーｋａ〜ｋｅが、ブルームフィルタＢＦで織り込まれる。
【００３０】
したがって、キー特徴値とサブグラフ特徴値とを比較することにより、共通に「１」であるビットの数が確率的に多くなり、その逆数である距離は確率的に短くなる。このように、局所分割では、距離が短いほうのセグメントにデータを振り分けることにより、データ群ａ〜ｊを、セグメントＳ１，Ｓ２に局所分割することができる。特に、キー特徴値やサブグラフ特徴値にブルームフィルタＢＦを適用することにより、キー群をそのまま保持するよりもサイズを縮小することができ、省メモリ化を図ることができる。また、セグメント単位で記憶装置を分担することにより、同一セグメント内のデータについては同一の記憶装置へのアクセスで済むため、アクセス頻度の低減化を図ることができる。
【００３１】
また、局所分割の状態は、バイナリーツリー構造である木構造データとして保持される。以下、図を用いて木構造データについて説明する。
【００３２】
図４は、木構造データを構成するセグメントのデータ構造を示す説明図である。セグメントは、セグメント名と保存先情報とデータ数とサブグラフ特徴値と子セグメントへのポインタとを保持する。セグメント名はセグメントを識別する情報である。保存先情報とは、セグメント内のキーで特定されるデータの保存先の識別情報である。たとえば、保存先サーバのアドレスなどが挙げられる。
【００３３】
データ数は、セグメント内のキーの個数である。また、ここでのサブグラフ特徴値は、セグメントが親セグメントから局所分割されるときに親セグメントのグラフ分割で得られたサブグラフ特徴値である。たとえば、図１に示したセグメントＳ１の場合はサブグラフ特徴値Ｃ（Ｇ１）である。子セグメントへのポインタとは、当該セグメントから局所分割があった場合の分岐先となるセグメントを指定する情報である。たとえば、子セグメント名が挙げられる。
【００３４】
図５および図６は、局所分割による木構造データの構築例を示す説明図である。図５において、（Ａ）は、セグメントＳを有する木構造データＳＴを示している。セグメントＳの所属データ群は、分散装置Ｍ１の記憶装置に格納されている。ここでは、セグメントＳのデータ数が「６」であるため、記憶装置には６個のデータが登録されている。（Ａ）では、まだ一度も局所分割されていない初期状態であるため、サブグラフ特徴値は存在しない。
【００３５】
（Ｂ）は、（Ａ）の状態からデータ数が増加した状態の木構造データＳＴを示している。（Ｂ）ではデータ数が「１０」になっている。ここで、セグメントでのデータ数の上限を「１０」とする。セグメントＳのデータ数は「１０」であり、上限に到達したため、局所分割が実行される。
【００３６】
（Ｃ）は、（Ｂ）の状態から局所分割をおこなった状態の木構造データＳＴを示している。セグメントＳはセグメントＳｒ，Ｓｌに局所分割されている。セグメントＳは局所分割により所属データが存在しないことになる。すなわち、データ数は「０」になり、保存先情報であった「Ｍ１」も消去される。そのかわり、セグメントＳは、局所分割により、セグメントＳｒ，Ｓｌへのポインタを記憶する。
【００３７】
図３に示したようなセグメントＳの局所分割により、ここでは、セグメントＳｒには１０個のデータのうち５個のデータが割り当てられ、セグメントＳｌには１０個のデータのうち５個のデータが割り当てられたものとする。また、セグメントＳの局所分割の際に、セグメントＳの所属データ群で分割されたサブグラフのサブグラフ特徴値Ｃ（Ｓｒ），Ｃ（Ｓｌ）が、セグメントＳｒ，Ｓｌに割り当てられている。
【００３８】
また、セグメントＳｒの５個の所属データは、セグメントＳと同じ分散装置Ｍ１の記憶装置に記憶される。一方、セグメントＳｌの５個の所属データは、分散装置Ｍ１とは異なる分散装置Ｍ２の記憶装置に記憶される。したがって、セグメントＳｒの保存先情報は「Ｍ１」であり、セグメントＳｌの保存先情報は「Ｍ２」となる。すなわち、一方のセグメントＳｒの所属データ群については、データ移行しなくて済むことになる。
【００３９】
また、図６において、（Ｄ）は、図５の（Ｃ）の状態からノード数が増加した状態の木構造データＳＴを示している。（Ｄ）では、セグメントＳｒのデータ数が「８」、セグメントＳｌのデータ数が「１０」になっている。ここで、セグメントＳｌのデータ数が上限の「１０」に到達したため、局所分割が実行される。
【００４０】
（Ｅ）は、（Ｄ）の状態から局所分割をおこなった状態の木構造データＳＴを示している。セグメントＳｌはセグメントＳｌｒ，Ｓｌｌに局所分割されている。セグメントＳｌは局所分割により所属キーが存在しないことになる。すなわち、データ数は「０」になり、保存先情報であった「Ｍ２」も消去される。そのかわり、セグメントＳｌは、局所分割により、セグメントＳｌｒ，Ｓｌｌへのポインタを記憶する。ただし、セグメントＳｌは、セグメントＳのように木構造データＳＴのルートではないため、サブグラフ特徴値Ｃ（Ｓｌ）はそのまま保持される。
【００４１】
図３に示したようなセグメントＳｌの局所分割により、ここでは、セグメントＳｌｒには１０個のデータのうち７個のデータが割り当てられ、セグメントＳｌｌには１０個のデータのうち３個のデータが割り当てられたものとする。また、セグメントＳｌの局所分割の際に、セグメントＳｌの所属データ群で分割されたサブグラフのサブグラフ特徴値Ｃ（Ｓｌｒ），Ｃ（Ｓｌｌ）が、セグメントＳｌｒ，Ｓｌｌに割り当てられている。
【００４２】
また、セグメントＳｌｒの７個の所属データは、セグメントＳｌと同じ分散装置Ｍ２の記憶装置に記憶される。一方、セグメントＳｌｌの３個の所属データは、分散装置Ｍ２とは異なる分散装置Ｍ３の記憶装置に記憶される。したがって、セグメントＳｌｒの保存先情報は「Ｍ２」であり、セグメントＳｌｌの保存先情報は「Ｍ３」となる。
【００４３】
すなわち、一方のセグメントＳｒの所属データ群については、データ移行しなくて済むことになる。この場合、データ数の少ないほうのデータ群を移行させるため、データ数が多いほうのデータ群を移行させる場合にくらべて、データ転送量を抑制でき、移行処理の効率化を図ることができる。
【００４４】
このようにして、各セグメントにおいて、データ数が上限に到達する都度、再帰的に局所分割がおこなわれ、木構造データＳＴが階層化される。すなわち、木構造データＳＴのリーフとなるセグメントでは、保存先情報により、保存先となる分散装置が特定できる。たとえば、図６の（Ｅ）では、セグメントＳｒ，Ｓｌｒ，Ｓｌｌがリーフである。このため、木構造データＳＴを探索してリーフに到達した場合、保存先の分散装置Ｍ１，Ｍ２，Ｍ３の各記憶装置に記憶されているデータ群にアクセスすることができる。
【００４５】
ここで、図６の（Ｅ）の木構造データＳＴで探索をおこなう場合について説明する。たとえば、あるデータのキー特徴値をＣｋとした場合、まず、ルートとなるセグメントＳからの分岐先となるセグメントＳｒ，Ｓｌのいずれのセグメントに遷移するかが判断される。この判断は、図３に示したようにキー特徴値ＣｋとセグメントＳｒ，Ｓｌのセグメント特徴値Ｃ（Ｓｒ），Ｃ（Ｓｌ）との比較でおこなわれる。すなわち、キー特徴値Ｃｋとセグメント特徴値Ｃ（Ｓｒ）との距離が、キー特徴値Ｃｋとセグメント特徴値Ｃ（Ｓｌ）との距離よりも短ければ、リーフとなるセグメントＳｒに到達することになる。
【００４６】
一方、キー特徴値Ｃｋとセグメント特徴値Ｃ（Ｓｌ）との距離が、キー特徴値Ｃｋとセグメント特徴値Ｃ（Ｓｒ）との距離よりも短ければ、セグメントＳｌに遷移して、分岐先となるセグメントＳｌｒ，Ｓｌｌのいずれのセグメントに遷移するかが判断される。このように、探索することにより、最終的にリーフとなるセグメントＳｌｒ，Ｓｌｌのいずれかに到達することになる。
【００４７】
＜システム構成例＞
図７は、分散システムのシステム構成例を示す説明図である。分散システム７００は、複数のコンピュータを備え、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークにより、相互に通信可能に接続されている。図７では、ＬＡＮの場合を例に挙げて説明するため、各コンピュータはバス７１０で接続されている。
【００４８】
第１の管理装置７０１は、分散システム７００の全体を管理するコンピュータである。第１の管理装置７０１は、キー特徴値の算出をおこなう。また、第１の管理装置７０１は、木構造データＳＴを保持している。第１の管理装置７０１は、クライアントからのリクエストを受け付けて、リクエストに応じたレスポンスを返す。
【００４９】
第２の管理装置７０２は、キーとキー特徴値とを関連付けたキー特徴値テーブルＴＣを保持するコンピュータである。第２の管理装置７０２は、第１の管理装置７０１で算出されたキー特徴値と算出元となるキーとを、第１の管理装置７０１から受信して、キー特徴値テーブルＴＣの新規レコードとして登録する。また、第２の管理装置７０２は、第１の管理装置７０１から、キーを受け付けると、キー特徴値テーブルＴＣを参照して、受け付けたキーに関連付けられているキー特徴値を読み出して、第１の管理装置７０１に返す。
【００５０】
分散システム７００のうち、第１の管理装置７０１と、第２の管理装置７０２と、分散装置Ｍ１，Ｍ２，Ｍ３，…と、記憶装置Ｄ１，Ｄ２，Ｄ３，…と、が、木構造データＳＴの生成をおこなう生成システムとなる。なお、木構造データＳＴの生成は、第１の管理装置７０１、第２の管理装置７０２、および分散装置Ｍの各機能を有する１台のコンピュータで実現してもよい。
【００５１】
図８は、図７に示したキー特徴値テーブルＴＣの記憶内容の一例を示す説明図である。図８において、キー特徴値テーブルＴＣは、キーとキー特徴値とを関連付けて記憶する。なお、ここでは、第１の管理装置７０１と第２の管理装置７０２とは別のコンピュータとして説明したが、１台のコンピュータで実現することもできる。
【００５２】
図７に戻り、分散装置Ｍ１，Ｍ２，Ｍ３，…（以下、ある分散装置を「分散装置Ｍ」とする）は、それぞれ記憶装置Ｄ１，Ｄ２，Ｄ３，…（以下、分散装置Ｍの記憶装置を「記憶装置Ｄ」とする）を有する。分散装置Ｍは、キーおよびバリューを有するデータや木構造データＳＴを記憶装置Ｄに格納したり、読み出したりする。記憶装置Ｄとしては、たとえば、フラッシュメモリや磁気ディスク、磁気テープが挙げられる。
【００５３】
分散装置Ｍは、キーを受け付けると、当該キーに対応するバリューを記憶装置Ｄから読み出して、要求元のクライアント７０３に返す。分散装置Ｍは、木構造データＳＴのうち自身が担当するセグメントのデータ数の増減処理をおこなう。自身が担当するセグメントとは、保存先情報に分散装置Ｍのアドレスが登録されているセグメントである。
【００５４】
図６の（Ｅ）の例では、分散装置Ｍ１の担当セグメントはセグメントＳｒであり、分散装置Ｍ２の担当セグメントはセグメントＳｌｒであり、分散装置Ｍ３の担当セグメントはセグメントＳｌｌである。そして、分散装置Ｍは、データ数が上限に到達すると、図３や図５，図６に示したように、局所分割をおこなう。
【００５５】
また、分散装置Ｍは、局所分割にともない、データ移行もおこなう。また、分散装置Ｍは、データ数の増減処理や局所分割をおこなった場合は、木構造データＳＴが更新されているため、他の分散装置Ｍや第１の管理装置７０１に、更新後の木構造データＳＴを配信する。これにより、分散システム７００において最新の木構造データＳＴを保持することができる。
【００５６】
クライアント７０３は、第１の管理装置７０１に対しリクエストを送信したり、第１の管理装置７０１からレスポンスを受信するコンピュータである。クライアント７０３は、バリューの参照要求として、参照したいバリューに対応するキーを、参照要求として第１の管理装置７０１に送信する。これにより、第１の管理装置７０１からバリューを受信することになる。また、データを登録したい場合は、クライアント７０３は、登録対象データを第１の管理装置７０１に送信する。これにより、分散装置への格納が成功した場合には、登録完了の通知を第１の管理装置７０１から受信することになる。
【００５７】
＜コンピュータのハードウェア構成例＞
図９は、図７に示したコンピュータのハードウェア構成例を示すブロック図である。図９において、コンピュータ（第１の管理装置７０１、第２の管理装置７０２、クライアント７０３、分散装置Ｍ）は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９０３と、磁気ディスクドライブ９０４と、磁気ディスク９０５と、光ディスクドライブ９０６と、光ディスク９０７と、ディスプレイ９０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）９０９と、キーボード９１０と、マウス９１１と、スキャナ９１２と、プリンタ９１３と、を備えている。また、各構成部はバス９００によってそれぞれ接続されている。
【００５８】
ここで、ＣＰＵ９０１は、コンピュータの全体の制御を司る。ＲＯＭ９０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ９０３は、ＣＰＵ９０１のワークエリアとして使用される。磁気ディスクドライブ９０４は、ＣＰＵ９０１の制御にしたがって磁気ディスク９０５に対するデータのリード／ライトを制御する。磁気ディスク９０５は、磁気ディスクドライブ９０４の制御で書き込まれたデータを記憶する。
【００５９】
光ディスクドライブ９０６は、ＣＰＵ９０１の制御にしたがって光ディスク９０７に対するデータのリード／ライトを制御する。光ディスク９０７は、光ディスクドライブ９０６の制御で書き込まれたデータを記憶したり、光ディスク９０７に記憶されたデータをコンピュータに読み取らせたりする。
【００６０】
ディスプレイ９０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ９０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００６１】
インターフェース（以下、「Ｉ／Ｆ」と略する。）９０９は、通信回線を通じてＬＡＮ、ＷＡＮ、インターネットなどのネットワーク９１４に接続され、このネットワーク９１４を介して他の装置に接続される。そして、Ｉ／Ｆ９０９は、ネットワーク９１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ９０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００６２】
キーボード９１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス９１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００６３】
スキャナ９１２は、画像を光学的に読み取り、コンピュータ内に画像データを取り込む。なお、スキャナ９１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ９１３は、画像データや文書データを印刷する。プリンタ９１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００６４】
＜データ参照例＞
図１０は、データ参照例を示す説明図である。まず、（１）クライアント７０３がキーｋを含む参照要求を、第１の管理装置７０１に送信する。（２）第１の管理装置７０１は、キーｋを含む参照要求を受け付けると、第２の管理装置７０２に対し、キーｋを送信する。（３）第２の管理装置７０２は、キーｋに対応するキー特徴値ｃを第１の管理装置７０１に返す。（４）第１の管理装置７０１は、キー特徴値ｃで木構造データＳＴを探索することにより、キーｋに対応するバリューｖの保存先となる分散装置Ｍを特定する。ここでは、分散装置Ｍ３とする。
【００６５】
（５）第１の管理装置７０１は、分散装置Ｍ３に、キーｋを送信する。（６）分散装置Ｍ３は、記憶装置Ｄ３からキーｋに対応するバリューｖを抽出する。（７）分散装置Ｍ３は、抽出したバリューｖを第１の管理装置７０１に返す。（８）第１の管理装置７０１は、バリューｖを、参照要求元のクライアント７０３に返す。これにより、クライアント７０３は、参照したいバリューｖを取得することができる。
【００６６】
なお、バリューｖを更新登録する場合もあるため、第１の管理装置７０１は、バリューｖの保存先を一時的に保持しておき、クライアント７０３から更新後のバリューｖを受け取ると、保存先の分散装置Ｍ３に、キーｋとともに送信する。これにより、分散装置Ｍ３では、キーｋと更新後のバリューｖが記憶装置Ｄ３に格納されることになる。
【００６７】
また、削除要求の場合は、（５）において、第１の管理装置７０１がキーｋとともに削除要求を分散装置Ｍ３に送ることにより、分散装置Ｍ３は、記憶装置Ｄ３内のキーｋおよびバリューｖを削除することになる。
【００６８】
＜データ新規登録例＞
図１１は、データ新規登録例を示す説明図である。まず、（１）クライアント７０３がキーｋおよびバリューｖを含むデータ登録要求を、第１の管理装置７０１に送信する。（２）第１の管理装置７０１は、データ参照要求を受け付けると、キーｋとバリューｖ内の他のキーとを用いて、キーｋのキー特徴値ｃを算出する。（３）第１の管理装置７０１は、キーｋと算出したキー特徴値ｃの組を、第２の管理装置７０２に送信する。（４）第２の管理装置７０２は、受信したキーｋとキー特徴値ｃとの組をキー特徴値テーブルＴＣに追加して、登録完了を第１の管理装置７０１に返す。
【００６９】
（５）第１の管理装置７０１は、登録完了を受けると、キー特徴値ｃで木構造データＳＴを探索することにより、キーｋおよびバリューｖの保存先となる分散装置Ｍを特定する。ここでは、分散装置Ｍ３とする。このように、新規登録の際に局所性のある分散装置Ｍが特定されるため、局所性のあるデータ群でグループ化ことができる。
【００７０】
（６）第１の管理装置７０１は、分散装置Ｍ３に、キーｋおよびバリューｖを送信する。（７）分散装置Ｍ３は、記憶装置Ｄ３からキーｋおよびバリューｖを記憶装置Ｄ３に登録する。（８）分散装置Ｍ３は、登録が成功すると、登録完了の通知を第１の管理装置７０１に返す。（９）第１の管理装置７０１は、分散装置Ｍ３からの登録完了の通知を受けると、登録要求元のクライアント７０３に、登録完了を通知する。
【００７１】
＜管理装置の機能的構成例＞
図１２は、第１の管理装置７０１および第２の管理装置７０２の機能的構成例を示す機能ブロック図である。第１の管理装置７０１は、受付部１２０１と、キー特徴値算出部１２０２と、格納部１２０３と、探索部１２０４と、送信部１２０５と、転送部１２０６と、を備える。第２の管理装置７０２は、抽出部１２０７を備える。受付部１２０１〜抽出部１２０７は、具体的には、たとえば、図９に示したＲＯＭ９０２、ＲＡＭ９０３、磁気ディスク９０５、光ディスク９０７などの記憶装置に記憶されたプログラムをＣＰＵ９０１に実行させることにより、または、Ｉ／Ｆ９０９により、その機能を実現する。
【００７２】
まず、第１の管理装置７０１について説明する。受付部１２０１は、リクエストを受け付ける。リクエストが、参照要求や更新要求、削除要求である場合は、受付部１２０１は、参照要求内のキーを読み出す。リクエストが新規登録要求である場合は、受付部１２０１は、登録要求内のデータからキーおよびバリュー内の他のキーを読み出す。また、受付部１２０１は、分散装置Ｍから最新の木構造データＳＴを受け付けると、記憶領域に格納する。
【００７３】
キー特徴値算出部１２０２は、受付部１２０１によって受け付けられたデータのキー特徴値を算出する。キー特徴値は、データ内でのキーおよびバリューに含まれる他のキーの存在を示す指標値である。キー特徴値算出部１２０２は、データのキー特徴値を、キーの値およびバリューに含まれる他のキーの値に基づいて算出する。具体的には、たとえば、キー特徴値算出部１２０２は、図２−１において説明したように、ブルームフィルタＢＦによりデータごとにキー特徴値を算出する。ブルームフィルタＢＦを用いることにより、データ内のキー群をブルームフィルタＢＦのビット幅（たとえば、１２８ビット）で表現できるため、データが持つキーの値の特徴を表現しつつサイズの縮小を図ることができる。
【００７４】
格納部１２０３は、第１の管理装置７０１のキー特徴値算出部１２０２で算出されたキー特徴値とその算出元のキー（バリュー内のキーではない）を受け付けると、第２の管理装置７０２のキー特徴値テーブルＴＣに格納する。
【００７５】
探索部１２０４は、格納済みバリューに対応するキーおよび格納済みバリューを有するデータのキー特徴値と、木構造データＳＴ内で分岐する２つのセグメントに対応する２つのサブグラフ特徴値と、に基づいて、木構造データＳＴを探索する。具体的には、探索部１２０４は、格納済みデータのキー特徴値に近い方のサブグラフ特徴値を有するサブグラフに対応するセグメントに遷移するセグメント探索を、遷移先のセグメントから分岐する２つのセグメントが存在しなくなるまで実行する。たとえば、探索部１２０４は、図６の（Ｅ）で説明したように、探索をおこなう。探索でリーフとなるセグメントが特定された場合、そのセグメントの保存先情報を参照することにより、探索に用いたキー特徴値の算出元のデータとなる保存先の分散装置Ｍを特定することができる。
【００７６】
送信部１２０５は、探索部１２０４による探索結果により特定された分散装置Ｍに対して、送信をおこなう。具体的には、たとえば、クライアント７０３からの参照要求の場合は、送信部１２０５は、図１０に示したように、キーｋを送信する。また、クライアント７０３からの新規登録要求の場合は、送信部１２０５は、図１１に示したように、キーｋおよびバリューｖを送信する。
【００７７】
転送部１２０６は、分散装置Ｍから送信されてきた情報を、リクエストの要求元のクライアント７０３に転送する。具体的には、たとえば、クライアント７０３からの参照要求の場合は、転送部１２０６は、図１０に示したように、分散装置Ｍ３からのバリューｖを取得して、参照要求元のクライアント７０３に転送する。また、クライアント７０３からの新規登録要求の場合は、転送部１２０６は、図１１に示したように、分散装置Ｍ３からの登録完了の通知を、登録要求元のクライアント７０３に転送する。
【００７８】
つぎに、第２の管理装置７０２について説明する。抽出部１２０７は、第１の管理装置７０１からキーを受け付けると、キー特徴値テーブルＴＣを参照して、受け付けたキーに対応するキー特徴値を抽出する。そして、抽出部１２０７は、第１の管理装置７０１に、抽出したキー特徴値を渡す。渡されたキー特徴値は、第１の管理装置７０１の送信部１２０５により、探索結果で得られた分散装置Ｍに送信される。
【００７９】
＜分散装置Ｍの機能的構成例＞
図１３は、分散装置Ｍの機能的構成例を示すブロック図である。分散装置Ｍは、作成部１３０１と、分割部１３０２と、サブグラフ特徴値算出部１３０３と、取得部１３０４と、決定部１３０５と、生成部１３０６と、設定部１３０７と、受付部１３０８と、格納部１３０９と、更新部１３１０と、検出部１３１１と、を備える。作成部１３０１〜検出部１３１１は、具体的には、たとえば、図９に示したＲＯＭ９０２、ＲＡＭ９０３、磁気ディスク９０５、光ディスク９０７などの記憶装置に記憶されたプログラムをＣＰＵ９０１に実行させることにより、または、Ｉ／Ｆ９０９により、その機能を実現する。
【００８０】
作成部１３０１は、分散装置Ｍの記憶装置Ｄに記憶されているキーおよびバリューを有するデータ集合１３００に基づいて、キーをノードとしキーとバリュー内の他のキーとの組み合わせをノード間のエッジとするグラフを作成する。具体的には、たとえば、図１で説明したように、作成部１３０１は、セグメントＳ０からグラフＧ０を作成する。
【００８１】
分割部１３０２は、作成部１３０１によって生成されたグラフを分割する。分割部１３０２は、たとえば、ノード数が均等になるように、また、境界をまたぐエッジ本数ができる限り少なくなるように分割する。分割部１３０２では、ノード数を同数に分割するが、予め設定した許容範囲であれば同数でなくてもよい。これにより、エッジで直接つながれた隣接するノードは同じサブグラフに割り当てられる確率が高くなる。グラフ分割としては、たとえば、Ｋｅｒｎｉｇｈａｎ−Ｌｉｎ  ａｌｇｏｒｉｔｈｍやＦｉｄｕｃｃｉａ−Ｍａｔｔｈｅｙｓｅｓ  ａｌｇｏｒｉｔｈｍが採用される。図１の例では、分割部１３０２は、グラフＧ０をグラフＧ１，Ｇ２に分割する。
【００８２】
サブグラフ特徴値算出部１３０３は、分割部１３０２によって得られた第１のサブグラフ内の第１のキー群の存在を示す第１のサブグラフ特徴値を第１のキー群の各キーの値に基づいて算出する。また、サブグラフ特徴値算出部１３０３は、分割部１３０２によって得られた第２のサブグラフ内の第２のキー群の存在を示す第２のサブグラフ特徴値を第２のキー群の各キーの値に基づいて算出する。図１の例で説明すると、サブグラフ特徴値算出部１３０３は、サブグラフＧ１のキーｋａ〜ｋｅの値を用いてサブグラフＧ１のサブグラフ特徴値Ｃ（Ｇ１）を算出する。たとえば、上述したようにブルームフィルタＢＦを用いる場合は、サブグラフ特徴値算出部１３０３は、サブグラフＧ１のキーｋａ〜ｋｅの値の各々を、同一のハッシュ関数に与えて、キーごとのハッシュ値を得る。
【００８３】
そして、サブグラフ特徴値算出部１３０３は、各ハッシュ値をブルームフィルタＢＦのビット幅で除算したときの余りの値に対応するビット位置のビットを立てる。これにより、同一キーであれば同一ビット位置のビットが立てられるため、キー特徴値と比較した場合、共通ビットを参照することにより、同一キーが存在するであろうことがわかる。ただし、ブルームフィルタＢＦの擬陽性により同一キーが存在するとは限らないが、ブルームフィルタＢＦを用いることにより、サブグラフ内のキー群をブルームフィルタＢＦのビット幅（たとえば、１２８ビット）で表現できる。したがって、サブグラフ内のキーの値の特徴を表現しつつサイズの縮小を図ることができる。なお、第２のサブグラフについても、第１のサブグラフと同様にしてサブグラフ特徴値が求められる。
【００８４】
取得部１３０４は、データ内でのキーおよびバリューに含まれる他のキーの存在を示すデータのキー特徴値を、データ集合１３００内のデータごとに取得する。具体的には、たとえば、取得部１３０４は、データ集合１３００内の各データのキーごとに、キー特徴値の取得要求を第１の管理装置７０１に送る。キー特徴値の取得要求には、データ集合１３００内の各データのキーが含まれている。したがって、第１の管理装置７０１は、取得要求内のキーを第２の管理装置７０２に送ることにより、第２の管理装置７０２から、取得要求内のキーごとにキー特徴値を受ける。このあと、取得部１３０４は、第１の管理装置７０１から取得要求内のキーごとのキー特徴値を取得することになる。
【００８５】
なお、取得部１３０４には、第１の管理装置７０１のキー特徴値算出部１２０２の機能を持たせてもよい。この場合、第１の管理装置７０１に取得要求を送ることなく、各分散装置Ｍ内でキー特徴値を得ることができ、分散システム７００内の通信負荷の低減化を図ることができる。
【００８６】
決定部１３０５は、各データについて、キー特徴値と、第１および第２のサブグラフ特徴値と、に基づいて、第１のサブグラフに対応する第１のセグメントと第２のサブグラフに対応する第２のセグメントのうちデータを配置させるセグメントを決定する。すなわち、決定部１３０５は、データが第１および第２のサブグラフのうちいずれのサブグラフとの間に局所性があるか否かをデータごとに判断する。具体的には、たとえば、決定部１３０５は、図３に示したように、距離ｄ１，ｄ２を求めて、データがいずれのサブグラフとの間に局所性があるかを判断することになる。たとえば、図３の（Ａ）の場合は、データａを配置させるセグメントは、セグメントＳ１に決定される。同様に、図３の（Ｂ）の場合は、データｅを配置させるセグメントは、セグメントＳ２に決定される。なお、図３の例では、距離ｄ＝１／（ｎ＋１）（ｎは共通ビット数）としたが、単に、共通ビット数ｎで判断してもよい。この場合、共通ビット数ｎの多いほうのサブグラフとの間に局所性があると判断される。
【００８７】
生成部１３０６は、キー特徴値算出部１２０２によって算出されたキー特徴値が類似するデータ同士を同一のグループとするセグメントを生成する。具体的には、たとえば、図５の（Ｃ）に示したように、生成部１３０６は、分岐先の２つのセグメントの分割元となるセグメントに所属する各データを、分割元となるセグメントから決定部１３０５によって決定されたセグメントに配置させる。これにより、分割元となるセグメントと分岐先の２つのセグメントとが関連付けられた木構造データＳＴを生成する。図５の（Ｃ）に示した例では、生成部１３０６は、セグメントＳを、セグメントＳｒとセグメントＳｌとに分割する。また、図６の（Ｅ）に示した例では、生成部１３０６は、セグメントＳｌを、セグメントＳｌｒとセグメントＳｌｌとに分割する。これにより、生成部１３０６は、局所性のあるデータ同士が所属するセグメントによりグループ化することができる。なお、サブグラフ特徴値と距離が近いキー特徴値のデータ同士が同一セグメントに所属することになるため、同一セグメント内の所属データ同士のキー特徴値は、所属先のセグメントのサブグラフ特徴値を介して間接的に類似していることになる。
【００８８】
設定部１３０７は、生成されたセグメント内のデータの格納先を設定する。具体的には、たとえば、設定部１３０７は、分岐先の２つのセグメントのうちいずれか一方のセグメントの所属データ群の格納先を、どのセグメントの所属データも格納されていない他の格納先に設定する。そして、設定部１３０７は、分岐先の２つのセグメントのうちいずれか一方のセグメントの所属データ群の格納先を、どのセグメントの所属データも格納されていない他の格納先に移行させる。具体的には、たとえば、設定部１３０７は、生成部１３０６によって生成された２つのセグメントのうちいずれか一方のセグメント内のデータ群の格納先を、分散装置Ｍの記憶装置Ｄとは異なる他の分散装置Ｍの記憶装置Ｄに設定する。そして、設定部１３０７は、２つのセグメントのうちいずれか一方のセグメント内のデータ群を、設定された他の分散装置Ｍの記憶装置Ｄに移行させる。すなわちセグメントの分割で得られた２つのセグメントのうち一方のセグメントのデータ群は、そのまま分散装置Ｍの記憶装置Ｄに残しておく。そして、設定部１３０７は、他方のセグメントのデータ群を他の分散装置Ｍの記憶装置Ｄに移行させる。
【００８９】
たとえば、図６の（Ｅ）では、セグメントＳｌｒ，Ｓｌｌのうちデータ数が少ないほうのセグメントＳｌｌで特定されるデータ群を他の分散装置Ｍの記憶装置Ｄに移行させる。すなわち、一方のセグメントＳｌｒで特定されるデータ群については、データ移行しなくて済むことになる。この場合、データ数の少ないほうのデータ群を移行させるため、データ数が多いほうのデータ群を移行させる場合にくらべて、データ転送量を抑制でき、移行処理の効率化を図ることができる。
【００９０】
ここで、他の分散装置Ｍがどの分散装置Ｍであるかは、第１の管理装置７０１に問い合わせることとしてもよい。この場合、第１の管理装置７０１は、各分散装置Ｍの記憶容量を集計しておき、最も空き容量の多い分散装置Ｍを移行先としてもよい。また、移行処理については、他の分散装置Ｍの記憶装置Ｄではなく、自装置の記憶装置Ｄでもよい。この場合、分割されたセグメント同士で記憶領域をわけることになる。同一記憶装置Ｄで複数のセグメントに対応付ける場合であっても、各セグメントの保存先情報として、分散装置Ｍのアドレスだけではなく記憶領域のアドレスまで登録しておけばよい。
【００９１】
受付部１３０８は、登録対象キーおよび登録対象バリューを有する登録対象データを受け付ける。具体的には、たとえば、受付部１３０８は、図１１の（６）に示したように、登録対象キーｋおよび登録対象バリューｖの組を受け付ける。また、受付部１３０８は、データの削除要求も受け付ける。
【００９２】
格納部１３０９は、受付部１３０８により、登録対象データが受け付けられた場合は、データ集合１３００に登録対象データを格納する。一方、格納部１３０９は、削除要求が受け付けられた場合は、データ集合１３００から削除対象データを削除する。
【００９３】
更新部１３１０は、木構造データＳＴ内のリーフのうち、分散装置Ｍの記憶装置Ｄが記憶するデータ集合１３００を特定する担当リーフのデータ数を更新する。ここで、担当リーフとは、保存先情報で分散装置Ｍを指定するセグメントである。受付部１３０８により、登録対象データが受け付けられた場合は、更新部１３１０は、担当リーフのデータ数を１増加させる。一方、削除要求が受け付けられた場合は、そのデータ（キーとバリューの組）はデータ集合１３００から削除されるため、更新部１３１０は、担当リーフのデータ数を１減少させる。
【００９４】
検出部１３１１は、更新部１３１０によって更新された結果、担当リーフのデータ数がしきい値に到達したことを検出する。しきい値とは、セグメントのデータ数の上限である。図５および図６の例では、データ数の上限を「１０」としている。データ数がしきい値に到達したことが検出されると、作成部１３０１では、グラフを生成することになる。これにより、グラフ分割、サブグラフ特徴値の算出、キー特徴値の取得、局所性の判断、セグメント分割が実行され、再帰的にセグメント分割が実行されることになる。
【００９５】
＜第１の管理装置７０１による参照要求処理＞
図１４は、第１の管理装置７０１による参照要求処理の詳細な処理手順を示すフローチャートである。まず、第１の管理装置７０１は、クライアント７０３から参照要求としてのキーの受付を待ち（ステップＳ１４０１：Ｎｏ）、キーが受け付けられると（ステップＳ１４０１：Ｙｅｓ）、受け付けられたキーを第２の管理装置７０２に送信し、第２の管理装置７０２からキーに対応するキー特徴値を取得する（ステップＳ１４０２）。
【００９６】
つぎに、第１の管理装置７０１は、取得したキー特徴値で木構造データＳＴをルートから探索し、受け付けたキーに対応するバリューの保存先を特定する（ステップＳ１４０３）。そして、第１の管理装置７０１は、特定した保存先となる分散装置Ｍに、受け付けたキーを送信する（ステップＳ１４０４）。これにより、保存先の分散装置Ｍでは、受信したキーに対応するバリューを記憶装置Ｄから抽出し、第１の管理装置７０１に返すことになる。
【００９７】
このあと、第１の管理装置７０１は、保存先となる分散装置Ｍからバリューが受信されたか否かを判断する（ステップＳ１４０５）。ここでは、例として所定時間以内に受信されれば受信成功とする。受信成功である場合（ステップＳ１４０５：Ｙｅｓ）、第１の管理装置７０１は、参照要求したクライアント７０３に、受信したバリューを送信する（ステップＳ１４０６）。一方、受信成功しなかった場合（ステップＳ１４０５：Ｎｏ）、第１の管理装置７０１は、参照要求したクライアント７０３に、不成功通知を送信する（ステップＳ１４０７）。これにより、一連の参照要求処理を終了する。図１４のフローチャートによれば、クライアント７０３は、キーを与えるだけで、対応するバリューを取得することができる。
【００９８】
＜第１の管理装置７０１による新規登録要求処理＞
図１５は、第１の管理装置７０１による新規登録要求処理の詳細な処理手順を示すフローチャートである。まず、第１の管理装置７０１は、クライアント７０３から新規登録要求としてのデータの受付を待ち（ステップＳ１５０１：Ｎｏ）、データが受け付けられると（ステップＳ１５０１：Ｙｅｓ）、受け付けられたデータからキー群を抽出する（ステップＳ１５０２）。ここでは、バリューに含まれる他のキーも抽出される。つぎに、第１の管理装置７０１は、抽出したキー群を用いてキー特徴値を算出する（ステップＳ１５０３）。そして、第１の管理装置７０１は、第２の管理装置７０２にデータのキー（バリューに含まれる他のキーではない）とキー特徴値とを関連付けて送信し、第２の管理装置７０２のキー特徴値テーブルＴＣにおいて保存する（ステップＳ１５０４）。これにより、その後、参照要求があった場合でも、キー特徴値を入手することができる。
【００９９】
つぎに、第１の管理装置７０１は、算出したキー特徴値で木構造データＳＴを探索して、受け付けたデータの保存先となる分散装置Ｍを特定する（ステップＳ１５０５）。そして、第１の管理装置７０１は、保存先となる分散装置Ｍに、受け付けたデータを送信する（ステップＳ１５０６）。これにより、保存先となる分散装置Ｍでは、送信されてきたデータを受け付けて、記憶装置Ｄに格納する。また、分散装置Ｍは、木構造データＳＴにおける担当リーフ内のデータ数を１増加させることになる。保存先となる分散装置Ｍは、データを記憶装置Ｄに格納し、ノード数の増加が完了すると、第１の管理装置７０１に対し登録完了通知を返すことになる。
【０１００】
このあと、第１の管理装置７０１は、保存先となる分散装置Ｍから登録完了通知が受信されたか否かを判断する（ステップＳ１５０７）。ここでは、例として所定時間以内に受信されれば登録成功とする。登録成功である場合（ステップＳ１５０７：Ｙｅｓ）、第１の管理装置７０１は、新規登録要求したクライアント７０３に、受信した登録完了通知を送信する（ステップＳ１５０８）。一方、登録成功しなかった場合（ステップＳ１５０７：Ｎｏ）、第１の管理装置７０１は、新規登録要求したクライアント７０３に、不成功通知を送信する（ステップＳ１５０９）。これにより、一連の新規登録要求処理を終了する。図１５のフローチャートによれば、クライアント７０３は、データを与えるだけで、局所性の高い記憶装置Ｄに登録することができる。
【０１０１】
＜分散装置Ｍによる局所分割処理＞
図１６は、分散装置Ｍによる局所分割処理の詳細な処理手順を示すフローチャートである。まず、分散装置Ｍは、担当リーフのデータ数がしきい値に到達するまで待ち受ける（ステップＳ１６０１：Ｎｏ）。データ数がしきい値に到達した場合（ステップＳ１６０１：Ｙｅｓ）、分散装置Ｍは、グラフを生成し（ステップＳ１６０２）、生成したグラフを分割する（ステップＳ１６０３）。このあと、分散装置Ｍは、サブグラフごとに、サブグラフ特徴値を算出する（ステップＳ１６０４）。ここでは、サブグラフ特徴値Ｃｒ，Ｃｌとする。
【０１０２】
そして、分散装置Ｍは、記憶装置Ｄに未選択データがあるか否かを判断し（ステップＳ１６０５）、ある場合は（ステップＳ１６０５：Ｙｅｓ）、未選択データを１つ選択する（ステップＳ１６０６）。つぎに、分散装置Ｍは、未選択データについてのキー特徴値を取得する（ステップＳ１６０７）。ここでは、キー特徴値Ｃｎとする。
【０１０３】
このあと、分散装置Ｍは、サブグラフ特徴値Ｃｒ，Ｃｌのうちキー特徴値Ｃｎとの間でより局所性のある子セグメントに、選択したデータを振り分けて（ステップＳ１６０８）、ステップＳ１６０５に戻る。ステップＳ１６０５：Ｙｅｓ〜ステップＳ１６０８のループを未選択データがなくなるまで繰り返すことにより、各データが、担当リーフから分割された２つの子セグメントに振り分けられる。
【０１０４】
そして、分散装置Ｍは、未選択データがない場合（ステップＳ１６０５：Ｎｏ）、いずれか一方のセグメントに属するデータ群の保存先を自装置に設定する（ステップＳ１６０９）。すなわち、分散装置Ｍは、いずれか一方のセグメントの保存先情報を、自装置のアドレスとし、担当リーフの保存先情報を消去し、データ数を「０」にする。これにより、いずれか一方のセグメントがあらたな担当リーフとなる。そして、いずれか一方のセグメントのデータ群を、記憶装置Ｄに格納する。
【０１０５】
また、分散装置Ｍは、他方の子セグメントのデータ群の保存先情報を、他の分散装置Ｍに設定する（ステップＳ１６１０）。そして、分散装置Ｍは、保存先情報に設定した他の分散装置に、他方の子セグメントのデータ群を送信する（ステップＳ１６１１）。これにより、局所分割でのデータ移行が完了することになる。
【０１０６】
以上説明したように、本実施の形態によれば、データ内のキーの組み合わせからデータ同士の関連性を検出することにより、関連性のあるデータ同士をグループ化することができる。具体的には、キーの値またはキーの属性に関連性がないデータ間の局所性を用いて同一グループに割り当てることにより、関連性のあるデータ同士をグループ化することができる。たとえば、キーの値の大小関係には関連性がない場合や、キーに性別、職業などの属性が関連付けられていない場合であっても、局所性のあるデータ同士でグループ化することができる。
【０１０７】
また、グラフ分割において、ノード数が均等、かつ、エッジを横切る本数が最小となるように分割することにより、エッジで直接つながれた隣接するノードを、高い確率で同じサブグラフに割り当てることができる。
【０１０８】
また、サブグラフ特徴値の算出において、サブグラフ特徴値のサイズを、サブグラフ特徴値の算出元となるキー群のサイズよりも小さくすることにより、省メモリ化を図ることができる。特に、ブルームフィルタを用いることにより、どのキーと関連性があるかわからなくても、すなわち、他のキーの値がわからなくても、局所性のあるデータ同士であることがわかる。
【０１０９】
また、ブルームフィルタを用いることにより、複数のキーを凝縮した特徴値（キー特徴値、サブグラフ特徴値）を得ることができ、複数のキーを保存するよりも省メモリ化を図ることができる。また、特徴値ではキーの値自体はわからないため、キーの値を用いて記憶装置Ｄへアクセスすることはない。すなわち、木構造データで最終的に探索された記憶装置Ｄにのみアクセスするだけで、データを取得することができる。これにより、データを見つけるまでの記憶装置Ｄへのアクセスを低減することができる。
【０１１０】
また、局所分割されたいずれか一方のセグメントのデータ群を他の分散装置に移行することにより、分散装置群を、セグメント単位で分割することができる。たとえば、従来の分散キーバリューストアを用いると、キーのハッシュ値に基づいて対応するサーバが決定されるため、グラフ上隣接しているデータが、まったく異なるサーバに配置されてしまう。このため、グラフで隣接しあうデータが連続してアクセスされても、別のサーバにあるため、キャッシュが効かず、それぞれディスクへのシークが発生してしまう。
【０１１１】
これに対し、本実施の形態では、図１に示したようにグラフ上隣接しあうデータは、同一の分散装置に割り当てられる確率が高い。これによりデータアクセス全体のコストを下げることができる。たとえば、データアクセスのための通信が一回で済んだり、ディスクアクセスが一回で済んだりすることになる。
【０１１２】
また、局所分割によるデータ移行に際し、割り当てられた所属データ群が少ないほうのセグメントを移行させることにより、データ移行にともなう通信量の低減化や、移行先の分散装置Ｍでの記憶装置Ｄへの書き込み量の低減化を図ることができる。
【０１１３】
また、クライアントからデータの登録要求があった場合、局所分割により、局所性の高いセグメントに自動的に割り当てられる。したがって、クライアント側は、「その分散装置に割り当てるのが最適であるか」といったことを考慮する必要がない。したがって、適切なデータ登録を簡単におこなうことができる。
【０１１４】
また、データごとにキー特徴値を求めることにより、データ内のキーおよびバリューに含まれている他のキーの存在を、データごとに特徴付けることができる。また、キー特徴値の算出において、キー特徴値のサイズを、キー特徴値の算出元となるキー群のサイズよりも小さくすることにより、省メモリ化を図ることができる。特に、ブルームフィルタを用いることにより、どのキーと関連性があるかわからなくても、すなわち、他のキーの値がわからなくても、同一データ内のキーであることがわかる。
【０１１５】
また、局所分割により再帰的に構築された木構造データをキー特徴値で探索することにより、保存先の分散装置を特定することができる。これにより、特定された分散装置に登録したいデータを送るだけで、局所性の高いデータ同士でグループ化することができる。
【０１１６】
また、データを参照したい場合についても、同様に探索することにより、参照先の分散装置を特定することができる。互いのキーがバリューに存在するデータ同士は、局所性により同一の分散装置の記憶装置に保存されているため、データアクセスのコストの低減化を図ることができる。
【０１１７】
また、各セグメントに対し、割り当てられるデータ数の上限を決めておくことで上限を超えるまでは、該当するセグメントについてデータ登録をおこなうことにより、局所性のあるデータ同士を同一セグメントでグループ化することができる。また、上限に到達した場合には、局所分割をおこなうことにより、データの増加にともなう局所性のばらつきを抑制することができる。
【０１１８】
また、上限に到達する都度局所分割することにより、再帰的に木構造データＳＴを構築することができる。また、局所分割は、各分散装置で実行されるため、単一の装置で実行するよりも負荷分散を図ることができる。また、データの増減や局所分割で木構造データＳＴが更新された場合には、他の分散装置や第１の管理装置７０１に対し最新の木構造データＳＴを配信することにより、装置間の木構造データＳＴの差をなくすことができる。
【０１１９】
また、配信のタイミングについては、更新後すぐにおこなってもよく、また、第１の管理装置７０１においてデータ登録要求や参照要求を分散装置に送信した結果、不成功になった場合に、各分散装置から木構造データＳＴを要求することとしてもよい。この場合、各分散装置は、自身が担当するセグメントについて、更新前後の差分データを第１の管理装置７０１に送ることにより、第１の管理装置７０１で最新の木構造データＳＴを構築することができる。また、第１の管理装置７０１で最新の木構造データＳＴを構築したあとは、分散装置群に配信すればよい。
【０１２０】
また、上述した実施の形態では、１つのセグメントの所属データ群を１台の分散装置の記憶装置に保存することとしたが、１台の分散装置の記憶装置で複数のセグメントの各データ群を保存することとしてもよい。
【０１２１】
なお、本実施の形態で説明した分散方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１２２】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１２３】
（付記１）キーおよび当該キーに対応するバリューを有するデータの集合内の各データについて、前記データ内での前記キーと前記バリューに含まれる他のキーとの存在を示す指標値である前記データのキー特徴値を、前記キーの値および前記バリューに含まれる前記他のキーの値に基づいて算出し、
算出された前記キー特徴値が類似するデータ同士を同一のグループとするセグメントを生成し、
生成されたセグメント内のデータの格納先を設定する、
処理をコンピュータに実行させることを特徴とする生成プログラム。
【０１２４】
（付記２）前記集合内の前記各データが有する前記キーをノードとし、前記キーと当該キーに対応するバリューに含まれる前記他のキーとの関連をノード間のエッジとするグラフを作成し、
作成された前記グラフを第１のグラフと第２のグラフとに分割し、
分割された前記第１のグラフ内の第１のキー群の存在を示す第１のグラフ特徴値を前記第１のキー群の各キーの値に基づいて算出するとともに、分割された前記第２のグラフ内の第２のキー群の存在を示す第２のグラフ特徴値を前記第２のキー群の各キーの値に基づいて算出し、
前記各データについて、前記キー特徴値と、前記第１および第２のグラフ特徴値と、に基づいて、前記第１のグラフに対応する第１のセグメントと前記第２のグラフに対応する第２のセグメントとのうち前記データを配置させるセグメントを決定する、処理を前記コンピュータに実行させ、
前記生成する処理は、
前記各データを前記グラフに対応するセグメントから前記決定する処理によって決定されたセグメントに配置させることにより、前記グラフに対応するセグメントと前記第１および第２のセグメントとが関連付けられた木構造データを生成することを特徴とする付記１に記載の生成プログラム。
【０１２５】
（付記３）前記分割する処理は、
前記第１のグラフのノード数と前記第２のグラフのノード数とが均等、かつ、エッジを横切る本数が最小となるように分割することを特徴とする付記２に記載の生成プログラム。
【０１２６】
（付記４）前記グラフ特徴値を算出する処理は、
前記第１のキー群のサイズよりも小さいサイズとなる前記第１のグラフ特徴値を算出するとともに、前記第２のキー群のサイズよりも小さいサイズとなる前記第２のグラフ特徴値を算出することを特徴とする付記２または３に記載の生成プログラム。
【０１２７】
（付記５）前記グラフ特徴値を算出する処理は、
ブルームフィルタに基づいて前記第１および第２のグラフ特徴値を算出することを特徴とする付記４に記載の生成プログラム。
【０１２８】
（付記６）前記設定する処理は、
前記第１および第２のセグメントのうちいずれか一方のセグメントの所属データ群の格納先を、どのセグメントの所属データも格納されていない他の格納先に設定することを特徴とする付記２〜５のいずれか一つに記載の生成プログラム。
【０１２９】
（付記７）前記設定する処理は、
前記第１および第２のセグメントのうちいずれか一方のセグメントの所属データ群を、どのセグメントの所属データも格納されていない他の格納先に移行させることを特徴とする付記６に記載の生成プログラム。
【０１３０】
（付記８）前記決定する処理は、
登録対象キーおよび当該登録対象キーに対応する登録対象バリューを有する登録対象データのキー特徴値と、前記第１および第２のグラフ特徴値と、に基づいて、前記第１のグラフに対応する第１のセグメントと前記第２のグラフに対応する第２のセグメントのうち前記データを配置させるセグメントを決定することを特徴とする付記２〜７のいずれか一つに記載の生成プログラム。
【０１３１】
（付記９）前記第１および第２のセグメントの一方のセグメントの所属データ群のデータ数がしきい値に到達したことを検出する処理を前記コンピュータに実行させ、
前記分割する処理は、
検出された前記一方のセグメントに対応するグラフを第３のグラフと第４のグラフとに分割し、
前記グラフ特徴値を算出する処理は、
分割された前記第３のグラフ内の第３のキー群の存在を示す第３のグラフ特徴値を前記第３のキー群の各キーの値に基づいて算出するとともに、分割された前記第４のグラフ内の第４のキー群の存在を示す第４のグラフ特徴値を前記第４のキー群の各キーの値に基づいて算出し、
前記決定する処理は、
前記一方のセグメントの所属データ群の各所属データについて、当該所属データのキー特徴値と、前記第３および第４のグラフ特徴値と、に基づいて、前記第３のグラフに対応する第３のセグメントと前記第４のグラフに対応する第４のセグメントのうち前記所属データを配置させるセグメントを決定し、
前記木構造データを生成する処理は、
前記各所属データを前記一方のセグメントから前記決定する処理によって決定されたセグメントに配置させることにより、前記グラフに対応するセグメントと前記第１および第２のセグメントとが関連付けられ、かつ、前記一方のセグメントと前記第３および第４のセグメントが関連付けられた木構造データを作成することを特徴とする付記８に記載の生成プログラム。
【０１３２】
（付記１０）前記設定する処理は、
前記第３および第４のセグメントのうちいずれか一方のセグメントの所属データ群の格納先を、どのセグメントの所属データも格納されていない他の格納先に設定することを特徴とする付記９に記載の生成プログラム。
【０１３３】
（付記１１）前記設定する処理は、
前記第３および第４のセグメントのうちいずれか一方のセグメントの所属データ群を、どのセグメントの所属データも格納されていない他の格納先に移行させることを特徴とする付記１０に記載の生成プログラム。
【０１３４】
（付記１２）要求元から格納済みバリューに対応するキーを含む取得要求を受け付け、
前記格納済みバリューに対応するキーおよび前記格納済みバリューを有するデータのキー特徴値と、前記木構造データ内で分岐する２つのセグメントに対応する２つのグラフ特徴値と、に基づいて、前記格納済みデータのキー特徴値に近い方のグラフ特徴値を有するグラフに対応するセグメントに遷移するセグメント探索を、遷移先のセグメントから分岐する２つのセグメントが存在しなくなるまで実行し、
探索されたセグメントに所属する所属データ群の格納先から前記格納済みバリューに対応するキーを用いて前記格納済みバリューを取得して、前記要求元に転送する、
処理を前記コンピュータに実行させることを特徴とする付記２〜１１のいずれか一つに記載の生成プログラム。
【０１３５】
（付記１３）キーおよび当該キーに対応するバリューを有するデータの集合内の各データについて、前記データ内での前記キーと前記バリューに含まれる他のキーとの存在を示す指標値である前記データのキー特徴値を、前記キーの値および前記バリューに含まれる前記他のキーの値に基づいて算出し、
算出された前記キー特徴値が類似するデータ同士を同一のグループとするセグメントを生成し、
生成されたセグメント内のデータの格納先を設定する、
処理をコンピュータが実行することを特徴とする生成方法。
【０１３６】
（付記１４）キーおよび当該キーに対応するバリューを有するデータの集合内の各データについて、前記データ内での前記キーと前記バリューに含まれる他のキーとの存在を示す指標値である前記データのキー特徴値を、前記キーの値および前記バリューに含まれる前記他のキーの値に基づいて算出するキー特徴値算出部と、
前記キー特徴値算出部によって算出された前記キー特徴値が類似するデータ同士を同一のグループとするセグメントを生成する生成部と、
前記生成部によって生成されたセグメント内のデータの格納先を設定する設定部と、
を有することを特徴とする生成システム。
【符号の説明】
【０１３７】
７００  分散システム
７０１  第１の管理装置
７０２  第２の管理装置
７０３  クライアント
１２０１  受付部
１２０２  キー特徴値算出部
１２０３  格納部
１２０４  探索部
１２０５  送信部
１２０６  転送部
１２０７  抽出部
１３００  データ集合
１３０１  作成部
１３０２  分割部
１３０３  サブグラフ特徴値算出部
１３０４  取得部
１３０５  決定部
１３０６  生成部
１３０７  設定部
１３０８  受付部
１３０９  格納部
１３１０  更新部
１３１１  検出部
分散装置  Ｍ
記憶装置  Ｄ
木構造データ  ＳＴ
キー特徴値テーブルＴＣ
【図１】
0005825122.tif 000002
【図２−１】
0005825122.tif 000003
【図２−２】
0005825122.tif 000004
【図２−３】
0005825122.tif 000005
【図３】
0005825122.tif 000006
【図４】
0005825122.tif 000007
【図５】
0005825122.tif 000008
【図６】
0005825122.tif 000009
【図７】
0005825122.tif 000010
【図８】
0005825122.tif 000011
【図９】
0005825122.tif 000012
【図１０】
0005825122.tif 000013
【図１１】
0005825122.tif 000014
【図１２】
0005825122.tif 000015
【図１３】
0005825122.tif 000016
【図１４】
0005825122.tif 000017
【図１５】
0005825122.tif 000018
【図１６】
0005825122.tif 000019