"入力装置から受信したクエリを、サーバに振り分ける複数のディスパッチャと、前記ディスパッチャから受信したクエリに基づき、データの保存、検索を含む処理を実行する複数の前記サーバとを備える条件検索データベースクラスタシステムの条件検索データ保存方法であって、前記ディスパッチャは、前記入力装置から前記クエリを受信し、前記受信したクエリの内容を構文解析するステップと、前記構文解析した結果、前記クエリが新規データの保存要求であると解析した場合に、前記クエリに付された元ファイルからkey値およびvalue値を抽出して、前記key値および前記value値それぞれの分解ファイルを作成するステップと、前記key値に不連続および連続なハッシュ関数を用いてハッシュ値を計算し、コンシステントハッシュを適用して、前記key値の分解ファイルを保存する複数のサーバを決定するステップと、前記value値に、不連続または連続なハッシュ関数を用いてハッシュ値を計算し、前記コンシステントハッシュを適用して、前記value値の分解ファイルを保存するサーバを決定するステップと、前記決定したkey値の分解ファイルを保存するサーバそれぞれに、前記key値を含む前記元ファイルを送信するステップと、前記決定したvalue値の分解ファイルを保存するサーバに、前記key値を付した前記value値の分解ファイルを送信するステップと、を実行し、前記key値の分解ファイルを保存するサーバそれぞれは、受信した前記key値を含む前記元ファイルを自身の記憶部に記憶するステップを実行し、前記value値の分解ファイルを保存するサーバは、受信した前記key値を付した前記value値の分解ファイルを自身の記憶部に記憶するステップを実行することを特徴とする条件検索データ保存方法。前記ディスパッチャは、前記value値に、前記value値の分解ファイルを保存するサーバを決定するステップにおいて用いたハッシュ関数とは異なる不連続または連続なハッシュ関数を用いてハッシュ値を計算し、前記コンシステントハッシュを適用して、前記value値の分解ファイルを保存するサーバ以外のサーバを、前記value値の分解ファイルの複製データを保存するサーバに決定するステップと、前記決定したvalue値の分解ファイルの複製データを保存するサーバに、前記key値を付した前記value値の分解ファイルを送信するステップと、を実行し、前記value値の分解ファイルの複製データを保存するサーバは、受信した前記key値を付した前記value値の分解ファイルを自身の記憶部に記憶するステップを実行することを特徴とする請求項1に記載の条件検索データ保存方法。入力装置から受信したクエリを、サーバに振り分ける複数のディスパッチャと、前記ディスパッチャから受信したクエリに基づき、データの保存、検索を含む処理を実行する複数の前記サーバとを備える条件検索データベースクラスタシステムであって、前記ディスパッチャは、前記入力装置から前記クエリを受信し、前記受信したクエリの内容を構文解析する構文解析部と、前記構文解析した結果、前記クエリが新規データの保存要求であると解析した場合に、前記クエリに付された元ファイルからkey値およびvalue値を抽出して、前記key値および前記value値それぞれの分解ファイルを作成する分解ファイル作成部と、前記key値に不連続および連続なハッシュ関数を用いてハッシュ値を計算し、コンシステントハッシュを適用して、前記key値の分解ファイルを保存する複数のサーバを決定し、前記value値に、不連続または連続なハッシュ関数を用いてハッシュ値を計算し、前記コンシステントハッシュを適用して、前記value値の分解ファイルを保存するサーバを決定するハッシュ値計算部と、前記決定したkey値の分解ファイルを保存するサーバそれぞれに、前記key値を含む前記元ファイルを送信し、前記決定したvalue値の分解ファイルを保存するサーバに、前記key値を付した前記value値の分解ファイルを送信する保存情報管理部と、を備え、前記key値の分解ファイルを保存するサーバそれぞれは、記憶部を備えており、受信した前記key値を含む前記元ファイルを当該記憶部に記憶し、前記value値の分解ファイルを保存するサーバは、記憶部を備えており、受信した前記key値を付した前記value値の分解ファイルを当該記憶部に記憶することを特徴とする条件検索データベースクラスタシステム。前記ディスパッチャは、前記ハッシュ値計算部が、前記value値の分解ファイルを保存するサーバを決定する際に用いたハッシュ関数とは異なる不連続または連続なハッシュ関数を用いて、前記value値のハッシュ値を計算し、前記コンシステントハッシュを適用して、前記value値の分解ファイルを保存するサーバ以外のサーバを、前記value値の分解ファイルの複製データを保存するサーバに決定し、前記保存情報管理部が、前記決定したvalue値の分解ファイルの複製データを保存するサーバに、前記key値を付した前記value値の分解ファイルを送信し、前記value値の分解ファイルの複製データを保存するサーバは、記憶部を備えており、受信した前記key値を付した前記value値の分解ファイルを当該記憶部に記憶することを特徴とする請求項3に記載の条件検索データベースクラスタシステム。入力装置から受信したクエリを、サーバに振り分ける複数のディスパッチャと、前記ディスパッチャから受信したクエリに基づき、データの保存、検索を含む処理を実行する複数の前記サーバとを備える条件検索データベースクラスタシステムの前記ディスパッチャであって、前記入力装置から前記クエリを受信し、前記受信したクエリの内容を構文解析する構文解析部と、前記構文解析した結果、前記クエリが新規データの保存要求であると解析した場合に、前記クエリに付された元ファイルからkey値およびvalue値を抽出して、前記key値および前記value値それぞれの分解ファイルを作成する分解ファイル作成部と、前記key値に不連続および連続なハッシュ関数を用いてハッシュ値を計算し、コンシステントハッシュを適用して、前記key値の分解ファイルを保存する複数のサーバを決定し、前記value値に、不連続または連続なハッシュ関数を用いてハッシュ値を計算し、前記コンシステントハッシュを適用して、前記value値の分解ファイルを保存するサーバを決定するハッシュ値計算部と、前記決定したkey値の分解ファイルを保存するサーバそれぞれに、前記key値を含む前記元ファイルを送信し、前記決定したvalue値の分解ファイルを保存するサーバに、前記key値を付した前記value値の分解ファイルを送信する保存情報管理部と、を備えることを特徴とするディスパッチャ。前記ハッシュ値計算部が、前記value値の分解ファイルを保存するサーバを決定する際に用いたハッシュ関数とは異なる不連続または連続なハッシュ関数を用いて、前記value値のハッシュ値を計算し、前記コンシステントハッシュを適用して、前記value値の分解ファイルを保存するサーバ以外のサーバを、前記value値の分解ファイルの複製データを保存するサーバに決定し、前記保存情報管理部が、前記決定したvalue値の分解ファイルの複製データを保存するサーバに、前記key値を付した前記value値の分解ファイルを送信することを特徴とする請求項5に記載のディスパッチャ。請求項1または請求項2に記載の条件検索データ保存方法を、コンピュータである前記条件検索データベースクラスタシステムの各装置に実行させるためのプログラム。前記した非特許文献2に記載のMultiKeyによりvalueの特定の要素をkey化して検索する方法では、基本的に、元データが配置されたサーバとは別のサーバにデータを複製するか、若しくは、そのデータの位置情報を示すポインタを保持する構成となってしまう。これは、データの配置を決定するハッシュ関数が、入力されるkeyによって、不連続なものと連続なものとが混在することになるためである。つまり、範囲検索を必要としない要素例えば、ON/OFF等の値、定型的な文字列等については、不連続なSHA1SecureHashAlgorithm1等のハッシュ関数が振り分けとして最も性能を出し得る。一方、範囲検索を必要とする要素については、連続なハッシュ関数を用いることにより、検索範囲を限定できる効果がある。よって、それぞれに利点を追求すると、入力されるkeyによって、データの配置を決定するハッシュ関数が異なり、別のサーバにデータを保存することになる。また、データの複製を作成した場合、そのうちのどれかのデータに更新が発生すると、一貫性を担保するために、その更新を検知する必要がある。MultiKeyで多くのkeyを設定すると、それだけ一貫性保持にかかるオーバヘッドが大きくなるという問題もある。さらに、分散データベースでは、一般にデータは複製により冗長化される。コンシステントハッシュを適用している分散データベースでは、例えば、閉じたハッシュ空間において、ハッシュ値が属する領域を担当するサーバの隣の領域を担当しているサーバがその複製を保存する。よって、keyとして扱う箇所の違いのための複製key化した検索したいvalueの項目と、冗長化のための複製とが別々に存在すると、本来1種類のデータに対して、冗長化数×検索パターン数検索したいvalueの項目のデータ量を要してしまい、一貫性の保持にかかる時間がさらに長大になるという問題がある。一方、従来技術における前方部分一致や範囲検索は、基本的にはkeyに対して適用するものであった。しかし、多くのアプリケーションにおいて、範囲検索を行いたい対象は、userID等のkey情報ではなく、keyに紐付けられて格納されている、例えば、学業等の成績や、課金情報等のvalueの要素である。このvalueの要素に対し、範囲検索を可能とすることは、データ全体の位置を恣意的に操作することになり、keyの検索にも強く影響を与える。従って、実質的にvalueの要素の都合でデータの位置を決定することはできなかった。また、範囲検索の対象をkeyに絞ったとしても、次のような問題がある。例えば、コンシステントハッシュを用いる場合には、keyの値を入力として順序関係を崩さない連続なハッシュ関数を使用せざるを得ない。もし、ここでmodulo演算等を含むような不連続関数を適用したとすると、検索対象がハッシュ値の全域になることは免れないため、局所性が排除されることになる。つまり、ある範囲にあるデータを検索するというそもそも局所性を必然とする処理に対して、データ配置自体が局所性を排除してしまっているので、枝刈り等の効率的な手段が介入できる余地のないことを示している。しかし、局所性の概念は、偏りの排除の概念とは当然トレードオフの関係であり、局所性を活かすような配置連続関数を用いた配置とする場合、データのアクセス分布の局所性偏りもでてきてしまう。これは、値が異なったとしても、ある特定の範囲のkeyばかり何度も検索するようなアクセス分布を考えた場合では偏りが生じることから自明である。また、事前に充分keyのアクセス分布を調査しておくことで、この偏りをある程度回避することができる。例えば、keyxに対しアクセス頻度をfで表すと、コンシステントハッシュのハッシュ空間におけるハッシュ値の担当領域をf1で決定することで実現できる。つまり、アクセス頻度が高いところであれば、担当領域を少なくし、アクセス頻度が少ないところであれば、担当領域を広くすることで、サーバ負荷を均等にすることが可能となる。但し、アクセス分布に変更があった場合に、それに追従して担当領域を変更することは非常に難しく、強引に行えば、その負荷で通常の検索の性能が低下する可能性がある。このような背景を鑑みて本発明がなされたのであり、本発明は、データの保存総量を抑えた上で、valueの要素value値による検索を可能とする、条件検索データ保存方法、条件検索データベースクラスタシステム、ディスパッチャ、およびプログラムを提供することを課題とする。前記した課題を解決するため、請求項1に記載の発明は、入力装置から受信したクエリを、サーバに振り分ける複数のディスパッチャと、前記ディスパッチャから受信したクエリに基づき、データの保存、検索を含む処理を実行する複数の前記サーバとを備える条件検索データベースクラスタシステムの条件検索データ保存方法であって、前記ディスパッチャが、前記入力装置から前記クエリを受信し、前記受信したクエリの内容を構文解析するステップと、前記構文解析した結果、前記クエリが新規データの保存要求であると解析した場合に、前記クエリに付された元ファイルからkey値およびvalue値を抽出して、前記key値および前記value値それぞれの分解ファイルを作成するステップと、前記key値に不連続および連続なハッシュ関数を用いてハッシュ値を計算し、コンシステントハッシュを適用して、前記key値の分解ファイルを保存する複数のサーバを決定するステップと、前記value値に、不連続または連続なハッシュ関数を用いてハッシュ値を計算し、前記コンシステントハッシュを適用して、前記value値の分解ファイルを保存するサーバを決定するステップと、前記決定したkey値の分解ファイルを保存するサーバそれぞれに、前記key値を含む前記元ファイルを送信するステップと、前記決定したvalue値の分解ファイルを保存するサーバに、前記key値を付した前記value値の分解ファイルを送信するステップと、を実行し、前記key値の分解ファイルを保存するサーバそれぞれが、受信した前記key値を含む前記元ファイルを自身の記憶部に記憶するステップを実行し、前記value値の分解ファイルを保存するサーバが、受信した前記key値を付した前記value値の分解ファイルを自身の記憶部に記憶するステップを実行することを特徴とする条件検索データ保存方法とした。また、請求項3に記載の発明は、入力装置から受信したクエリを、サーバに振り分ける複数のディスパッチャと、前記ディスパッチャから受信したクエリに基づき、データの保存、検索を含む処理を実行する複数の前記サーバとを備える条件検索データベースクラスタシステムであって、前記ディスパッチャが、前記入力装置から前記クエリを受信し、前記受信したクエリの内容を構文解析する構文解析部と、前記構文解析した結果、前記クエリが新規データの保存要求であると解析した場合に、前記クエリに付された元ファイルからkey値およびvalue値を抽出して、前記key値および前記value値それぞれの分解ファイルを作成する分解ファイル作成部と、前記key値に不連続および連続なハッシュ関数を用いてハッシュ値を計算し、コンシステントハッシュを適用して、前記key値の分解ファイルを保存する複数のサーバを決定し、前記value値に、不連続または連続なハッシュ関数を用いてハッシュ値を計算し、前記コンシステントハッシュを適用して、前記value値の分解ファイルを保存するサーバを決定するハッシュ値計算部と、前記決定したkey値の分解ファイルを保存するサーバそれぞれに、前記key値を含む前記元ファイルを送信し、前記決定したvalue値の分解ファイルを保存するサーバに、前記key値を付した前記value値の分解ファイルを送信する保存情報管理部と、を備え、前記key値の分解ファイルを保存するサーバそれぞれが、記憶部を備えており、受信した前記key値を含む前記元ファイルを当該記憶部に記憶し、前記value値の分解ファイルを保存するサーバが、記憶部を備えており、受信した前記key値を付した前記value値の分解ファイルを当該記憶部に記憶することを特徴とする条件検索データベースクラスタシステムとした。また、請求項5に記載の発明は、入力装置から受信したクエリを、サーバに振り分ける複数のディスパッチャと、前記ディスパッチャから受信したクエリに基づき、データの保存、検索を含む処理を実行する複数の前記サーバとを備える条件検索データベースクラスタシステムの前記ディスパッチャであって、前記入力装置から前記クエリを受信し、前記受信したクエリの内容を構文解析する構文解析部と、前記構文解析した結果、前記クエリが新規データの保存要求であると解析した場合に、前記クエリに付された元ファイルからkey値およびvalue値を抽出して、前記key値および前記value値それぞれの分解ファイルを作成する分解ファイル作成部と、前記key値に不連続および連続なハッシュ関数を用いてハッシュ値を計算し、コンシステントハッシュを適用して、前記key値の分解ファイルを保存する複数のサーバを決定し、前記value値に、不連続または連続なハッシュ関数を用いてハッシュ値を計算し、前記コンシステントハッシュを適用して、前記value値の分解ファイルを保存するサーバを決定するハッシュ値計算部と、前記決定したkey値の分解ファイルを保存するサーバそれぞれに、前記key値を含む前記元ファイルを送信し、前記決定したvalue値の分解ファイルを保存するサーバに、前記key値を付した前記value値の分解ファイルを送信する保存情報管理部と、を備えることを特徴とするディスパッチャとした。このように、入力されるクエリに付された元ファイルからkey値とvalue値を抽出して分解ファイルを作成し、データを保存するサーバを不連続または連続なハッシュ関数を用いて決定する。そして、key値については元ファイルのデータをサーバに保存させ、value値については、key値を付した分解ファイルとしてサーバに保存させる。このようにすることで、key値およびvalue値それぞれの一致検索および範囲検索に対応させて、不連続なデータおよび連続なデータそれぞれで各サーバに保存せざるを得ない従来技術に比べ、データの保存総量を抑えた上で、value値による検索を可能とする。請求項2に記載の発明は、前記ディスパッチャが、前記value値に、前記value値の分解ファイルを保存するサーバを決定するステップにおいて用いたハッシュ関数とは異なる不連続または連続なハッシュ関数を用いてハッシュ値を計算し、前記コンシステントハッシュを適用して、前記value値の分解ファイルを保存するサーバ以外のサーバを、前記value値の分解ファイルの複製データを保存するサーバに決定するステップと、前記決定したvalue値の分解ファイルの複製データを保存するサーバに、前記key値を付した前記value値の分解ファイルを送信するステップと、を実行し、前記value値の分解ファイルの複製データを保存するサーバは、受信した前記key値を付した前記value値の分解ファイルを自身の記憶部に記憶するステップを実行することを特徴とする請求項1に記載の条件検索データ保存方法とした。また、請求項4に記載の発明は、前記ディスパッチャが、前記ハッシュ値計算部が、前記value値の分解ファイルを保存するサーバを決定する際に用いたハッシュ関数とは異なる不連続または連続なハッシュ関数を用いて、前記value値のハッシュ値を計算し、前記コンシステントハッシュを適用して、前記value値の分解ファイルを保存するサーバ以外のサーバを、前記value値の分解ファイルの複製データを保存するサーバに決定し、前記保存情報管理部が、前記決定したvalue値の分解ファイルの複製データを保存するサーバに、前記key値を付した前記value値の分解ファイルを送信し、前記value値の分解ファイルの複製データを保存するサーバは、記憶部を備えており、受信した前記key値を付した前記value値の分解ファイルを当該記憶部に記憶することを特徴とする請求項3に記載の条件検索データベースクラスタシステムとした。また、請求項6に記載の発明は、前記ハッシュ値計算部が、前記value値の分解ファイルを保存するサーバを決定する際に用いたハッシュ関数とは異なる不連続または連続なハッシュ関数を用いて、前記value値のハッシュ値を計算し、前記コンシステントハッシュを適用して、前記value値の分解ファイルを保存するサーバ以外のサーバを、前記value値の分解ファイルの複製データを保存するサーバに決定し、前記保存情報管理部が、前記決定したvalue値の分解ファイルの複製データを保存するサーバに、前記key値を付した前記value値の分解ファイルを送信することを特徴とする請求項5に記載のディスパッチャとした。このようにすることで、value値の分解ファイルの複製データを、元のvalue値の分解ファイルを記憶するサーバとは別のサーバに記憶させることができる。よって、元のvalue値の分解ファイルを記憶するサーバが故障した場合であっても、value値の分解ファイルの複製データに基づき、value値による検索が可能となる。請求項7に記載の発明は、請求項1または請求項2に記載の条件検索データ保存方法を、コンピュータである前記条件検索データベースクラスタシステムの各装置に実行させるためのプログラムとした。このようなプログラムによれば、請求項1または請求項2に記載の条件検索データ保存方法を、一般的なコンピュータである前記条件検索データベースクラスタシステムの各装置で実現することができる。本発明によれば、データの保存総量を抑えた上で、valueの要素value値による検索を可能とする、条件検索データ保存方法、条件検索データベースクラスタシステム、ディスパッチャ、およびプログラムを提供することができる。次に、本発明を実施するための形態以下、本実施形態というにおける条件検索データベースクラスタシステム1について説明する。概要まず、本実施形態に係る条件検索データベースクラスタシステム1に分散されて保存されるデータの概要について、図5を参照して説明する。本実施形態に係る条件検索データベースクラスタシステム1の各サーバサーバ0~3には、元ファイルに格納されているkey,valueのデータを、keyおよびvalueの要素毎に分解し、分解ファイルとして格納する。そして、keyの分解ファイルには、元ファイルのデータ全体を格納する。また、valueの分解ファイルには、そのvalueの値value値と共に、元ファイルのkeyの値key値を保持するようにする。このような分解ファイルを、各サーバに格納しておくことを前提として、それぞれの分解ファイルに対して、複数種類による検索が可能なように、各分解ファイルを格納するサーバを決定する。ここでは、図5に示すように、元ファイルのデータとして、keyが1つkey:a0123、valueの要素が2つvalue:Name,Locationのデータ形式を扱う場合を例に説明する。また、このデータ形式に対して、以下に示すように、1keyの完全一致、2keyの範囲検索、3valueの1番目の要素の範囲検索、4valueの2番目の要素の完全一致を実現可能とする、各サーバへの分解データの配置を決定する。1keyに対する完全一致検索用に、key:xに対して不連続なハッシュ関数hkeyxを用いたコンシステントハッシュを適用して、keyを含むデータ全体を格納するサーバを決定する。図5においては、サーバ0にデータを格納するものとする。なお、keyの完全一致検索では、データ全体を取得することが一般的であるため、このサーバには、元ファイルのデータ全体を格納するようにする。2keyに対する範囲検索用に、key:xに対して連続なハッシュ関数hrangexを用いたコンシステントハッシュを適用して、keyを含むデータ全体を格納するサーバを決定する。図5においては、サーバ1にデータを格納するものとする。3valueの1番目の要素Nameの範囲検索のための分解ファイルは、そのvalueの要素:yに対して、連続なハッシュ関数hnameyを用いたコンシステントハッシュを適用して格納するサーバを決定する。図5においては、サーバ2にその分解ファイルName:onoを格納するものとする。このとき、分解ファイルに、keyの値a0123を付して格納する。また、例えば、不連続なハッシュ関数hlocationyによるコンシステントハッシュを適用し、複製データの格納位置をサーバ3に決定する。4valueの2番目の要素Locationの完全一致のための分解ファイルは、そのvalueの要素:zに対して、不連続なハッシュ関数hlocationzを用いたコンシステントハッシュを適用して格納するサーバを決定する。図5においては、サーバ3にその分解ファイルLocation:tokyoを格納するものとする。このとき、分解ファイルに、keyの値a0123を付して格納する。また、例えば、連続なハッシュ関数hrangezによるコンシステントハッシュを適用し、複製データの格納位置をサーバ2に決定する。なお、複製データを格納するサーバを決定するハッシュ関数は、コンフィグconfigurationにより任意のものを選ぶように設定することができる。例えば、3のvalueの1番目の要素の範囲検索において、hlocationyではなく、hkeyyやhrangeyを選択してもよい。また、ハッシュ関数の入力は、keyやタグの識別子を含めて入力するものとする。つまり、key:a0123であれば、key:a0123という文字列を入力する。これにより、keyやタグ名それぞれがvalueの値と同一の文字列となったとしても区別が可能である。図5に示したように元ファイルを各サーバに格納した状態で、本実施形態の条件検索データベースクラスタシステム1のディスパッチャDは、クエリを受信すると、そのクエリを解析して検索の種類を判別し、適切なハッシュ関数を選択して以下の検索処理を実行する。akeyの完全一致検索を示すクエリの場合は、ハッシュ関数hkeyでハッシュ値を計算し、コンシステントハッシュを適用して、サーバ位置そのデータを格納しているサーバを確定し図5ではサーバ0データを取得する。bkeyの範囲検索の場合は、クエリで示された検索範囲を示す境界のkeyそれぞれの値についてハッシュ関数hrangeでハッシュ値を計算し、コンシステントハッシュを適用し、サーバ位置の候補を取得する。続いて、候補となったサーバ図5ではサーバ1の中で、該当するハッシュ値の範囲のデータ集合を取得する。なお、詳細は、後記する図9において説明する。cvalueの完全一致検索の場合は、ハッシュ関数hlocationでハッシュ値を計算し、コンシステントハッシュを適用して、サーバ位置を確定し図5ではサーバ3keyの値key値を取得する。そして、その取得したkeyの値を用いて、aの処理を行い元ファイルのデータを取得する。dvalueの範囲検索の場合は、クエリで示された検索範囲を示す境界のvalueの要素それぞれの値についてハッシュ関数hnameでハッシュ値を計算し、コンシステントハッシュを適用し、サーバ位置の候補を取得する。続いて、この候補となったサーバ図5ではサーバ2の中で、該当するハッシュ値の範囲のkeyの値の集合を取得する。そして、その取得したkeyの値の集合を用いて、aの処理を行い元ファイルのデータ集合を取得する。aの検索処理により、key検索による従来と同様の性能を維持することが可能となる。また、cの検索処理により、key以外のvalueによっても検索処理を行うことが可能となる。さらに、bおよびdの検索処理により、全体検索をすることなく、高速な条件検索が可能となる。また、key若しくはvalueの要素の複製データを格納することにより、サーバの1つが故障した場合であっても、別のハッシュ関数を用いて、複製データにアクセスできるため、耐障害性も担保することができる。本実施形態のシステム構成次に、本実施形態に係る条件検索データベースクラスタシステム1について具体的に説明する。本実施形態に係る条件検索データベースクラスタシステム1は、図1に示すように、ネットワークを介して、外部システム2であるオペレータシステムや、端末3等と接続される。そして、外部システム2や端末3からの入力データクエリを受け取り、条件検索データベースクラスタシステム1内でデータの保存、更新、検索等を行い、その結果を出力データとして、外部システム2や端末3に送信する。図2は、本実施形態に係る条件検索データベースクラスタシステム1の内部構成を示す図である。図2に示すように、本条件検索データベースクラスタシステム1は、ロードバランサBBalancer:各図においてBと表記と、複数のディスパッチャDDispatcher:各図においてDと表記と、複数のプロセッサPProcessor:各図においてPと表記と、複数のストレージS=0、元ファイルがサーバ0に保存される。そして、その元ファイルの複製データを保存するため、keyの連続なハッシュ関数hrangexを用いて、サーバ1が選択されChrange=1、元ファイルの複製データがサーバ1に保存される。また、valueの連続なハッシュ関数hnameyを用いて、valueの1番目の要素yの分解ファイルの保存先として、サーバ2が選択されChname=2、Name:onoと元ファイルのkeyの値a0123とがサーバ2に保存される。そして、この分解ファイルの複製データが、valueの不連続なハッシュ関数hlocationyを用いて、サーバ3が選択されChlocation=3、この分割ファイルの複製データがサーバ3に保存される。また、valueの不連続なハッシュ関数hlocationzを用いて、valueの2番目の要素zの分解ファイルの保存先として、サーバ3が選択されChlocation=3、Location:tokyoと元ファイルのkeyの値a0123とがサーバ3に保存される。そして、この分解ファイルの複製データが、keyの連続なハッシュ関数hrangezを用いて、サーバ2が選択されChrange=2、この分割ファイルの複製データがサーバ2に保存される。この複製データの保存先を決定するためのハッシュ関数は、関数選択部132が、コンフィグで設定された情報により決定し、複製データの元となるデータの保存先とは別のサーバに保存される。図6は、key0123とvalueのタグ要素が2つName,Locationから構成されるデータを、サーバ0~6の7つのサーバに保存し、冗長度M=3の例を示している。図6の例は、サーバ0~3には、図5におけるサーバ0~3と同様のデータが保存されており、さらに冗長度を高めるため、次に示す複製データの作成を行っている。ディスパッチャDが、元ファイルの複製データをさらに保存させるため、keyの値に対して連続なハッシュ関数hnamexを用いて、サーバ5を選択しChname=5、元ファイルの複製データをサーバ5に保存させる。ディスパッチャDが、valueの1番目の要素の分解ファイルの複製データの保存先として、連続なハッシュ関数hrangeyを用いて、サーバ6を選択しChrange=6、この分解ファイルの複製データName:onoを、keyの値a0123とともにサーバ6に保存させる。また、ディスパッチャDが、valueの2番目の要素の分解ファイルの複製データの保存先として、連続なハッシュ関数hnamezを用いて、サーバ4を選択しChname=4、この分解ファイルの複製データLocation:tokyoを、keyの値a0123とともにサーバ3に保存させる。このようにすることで、keyおよびvalueに対して、それぞれ完全一致検索と範囲検索に対応したデータを別サーバに保存する場合に比べ、保存データのデータ量を抑制することができる。そして、保存データに変更等があった場合に、一貫性を保持するのにかかる時間の増加を防ぐことができる。≪データ検索処理≫次に、本実施形態に係る条件検索データベースクラスタシステム1におけるデータ検索処理について、図7および図8を参照して説明する。まず、データ検索処理の概要について説明する。図7aは、本条件検索データベースクラスタシステム1で扱うXMLファイルの一例を示している。このXMLファイルa0123xmlの例は、keya0123とvalueのタグ要素が4つname,location,phone,chargeから構成される例を示している。そして、このXMLファイルのデータが保存される条件検索データベースクラスタシステム1に対して、図7bに示す条件検索の各クエリが入力データとして送信され、ディスパッチャDがこのクエリを受信したものとして、どのサーバにアクセスするかの概略を説明する。なお、この例では、図8に示すように、6つのサーバ0~5に、keyとvalueの分解ファイルが保存されているものとする。Akeyの一致検索:GETkeya0123このkeyの一致検索においては、keyの値による不連続なハッシュ関数による計算が実行され、図8の例ではサーバ0が検索先として選択される。Bkeyの範囲検索:GETkeya0120a0125このkeyの範囲検索においては、keyの値による連続なハッシュ関数による計算が実行され、図8の例ではサーバ1が検索先として選択される。Cvalueのタグの一致検索:GETnameonolocationtokyovalueのタグ要素の一致検索においては、保存先を決定する連続なハッシュ関数hnameと、保存先を決定する不連続なハッシュ関数hlocationによる計算がそれぞれ実行され、図8の例ではサーバ2とサーバ3とが検索先として選択される。Dvalueのタグの範囲検索:GETphone03333300000333339999valueのタグ要素の範囲検索においては、Bのように、予め範囲検索可能なように連続なハッシュ関数が定義されていれば、そのハッシュ関数を用いて計算が実行され、図8の例ではサーバ4が検索先として選択される。なお、このvalueの範囲検索においては、valueの境界の値ここでは、0333330000と0333339999をハッシュ関数に挿入し、サーバ位置を取得する。E新規にkeyとファイルを保存する場合:PUTkeya0123filea0123xmlkeyにより新規ファイルの格納サーバを決定する場合は、Aの検索と同様に、図8の例では、サーバ0が保存先として決定される。F既存ファイルの特定タグを更新:UPDATEkeya0123charge4000既存ファイルの特定タグを更新する場合には、既存ファイルのデータが保存された図8の例ではサーバ0およびサーバ1にアクセスし、さらに、そのタグを示す連続なハッシュ関数による計算が実行され、図8の例では、その分解ファイルを保存するサーバ5にアクセスして、データを変更する。≪入力データ処理≫次に、本実施形態に係る条件検索データベースクラスタシステム1が入力データとしてクエリ以下入力クエリという場合があるを受信した場合の処理を、図9~図11を参照して詳細に説明する適宜図3参照。図9は、複数の検索条件を組み合わせてデータを取得する例を示し、図10は、新たなXMLファイルを保存する例を示し、図11は、既存のデータを更新する例を示している。検索条件の組み合わせ処理まず、図9を参照して、複数の検索条件に合致したデータを取得する例について説明する。まず、入力装置4は、入力データとして、GETlocationtokyophone0333330000,0333339999を示す入力クエリを、ロードバランサBに送信するステップS101。次に、ロードバランサBは、複数のディスパッチャDのうちの1つをラウンドロビン等で選択し、選択したディスパッチャDにその入力クエリを送信するステップS102。ディスパッチャDの構文解析部12は、入力クエリの構文解析を行うステップS103。具体的には、構文解析部12は、その入力クエリが、データの一致検索を示すlocationtokyoと範囲検索を示すphone0333330000,0333339999であることを抽出する。そして、その情報を振り分け処理部13に引き渡す。次に、振り分け処理部13の関数選択部132は、各データについてハッシュ値計算部133を選択し、ハッシュ値を計算させるステップS104。具体的には、関数選択部132は、locationtokyoについては、不連続なハッシュ関数hlocatonでハッシュ値を計算するハッシュ値計算部133を選択し、ハッシュ値計算部133が、Chlocation=3、つまりサーバ3にアクセス先を決定する。また、関数選択部132は、連続なハッシュ関数hphoneでハッシュ値を計算するハッシュ値計算部133を選択し、入力クエリに示される各境界値を入力し、Chphone=1、および、Chphone=3、つまり、サーバ1~3をアクセス先として決定する。そして、保存情報管理部134は、選択されたサーバ3と、サーバ1~3との両方を含むサーバを対象サーバとし、サーバ123を決定するステップS105。次に、保存情報管理部134は、対象サーバと決定した各サーバに対して、入力クエリを送信するステップS106。入力クエリを受信したサーバは、入力クエリの内容を実行しデータ検索を行う。具体的には、入力クエリを受信したサーバ1およびサーバ2は、phone0333330000,0333339999の範囲で自身が保持するデータのうち、該当するデータのkeyの値の集合以下key集合というときがあるを取得するステップS107。そして、サーバ1は、取得したkey集合をディスパッチャDに送信する。また、サーバ3は、locationtokyoでストレージS3内に記憶したデータからkey集合を取得する。また、サーバ3は、phone0333330000,0333339999の範囲で自身が保存するデータのうち、該当するデータのkey集合を取得するステップS108。そして、サーバ3は、取得した2つのkey集合をディスパッチャDに送信する。ディスパッチャDの関数選択部132は、各サーバから受信したkey集合に基づき、そのkey集合の元ファイルのデータを保存したサーバを選択するため、keyの不連続なハッシュ関数でハッシュ値を計算するハッシュ値計算部133を選択し、そのkey集合の元ファイルのデータを保存したサーバを選択するステップS109。そして、保存情報管理部134が、元ファイルの取得要求を選択したサーバに送信する。元ファイルを保存しているサーバは、keyの値に基づき、元ファイルのデータを取得しステップS110、ディスパッチャDに送信する。ディスパッチャDの保存情報管理部134は、検索条件に合致する元ファイルのデータを集約するとステップS111、ロードバランサBを介して出力装置5に、検索結果を送信するステップS112。新規データ保存次に、図10を参照して、新たなXMLファイルを保存する例について説明する。ここでは、図7aに示したXMLファイルa0123xmlを保存するものとして説明する。また、複製データの各サーバへの保存については、説明を省略する。まず、入力装置4は、入力データとして、PUTkeya0123filea0123xmlを示す入力クエリを、ロードバランサBに送信するステップS201。次に、ロードバランサBは,複数のディスパッチャDのうちの1つをラウンドロビン等で選択し、選択したディスパッチャDにその入力クエリを送信するステップS202。ディスパッチャDの構文解析部12は、入力クエリの構文解析を行うステップS203。具体的には、構文解析部12は、その入力クエリが、新たなファイルの保存を示すものであり、keya0123と、新たなファイルを示すfilea0123xmlとを抽出する。そして、その情報を振り分け処理部13に引き渡す。次に、振り分け処理部13の関数選択部132は、ハッシュ値計算部133を選択し、ハッシュ値を計算させるステップS204。具体的には、関数選択部132は、不連続なハッシュ関数hkeyでハッシュ値を計算するハッシュ値計算部133を選択し、ハッシュ値計算部133は、Chkey=1、つまりサーバ1をアクセス先として選択する。そして、保存情報管理部134は、選択されたサーバ1を対象サーバとして決定するステップS205。続いて、振り分け処理部13の分解ファイル作成部131は、入力クエリに付されたファイルa0123xmlについて、タグ毎に分解ファイルを作成するステップS206。そして、分解ファイル作成部131は、作成した分解ファイルそれぞれを関数選択部132に引き渡す。次に、関数選択部132は、各分解ファイルについてハッシュ値計算部133を選択し、ハッシュ値を計算させるステップS207。具体的には、関数選択部132は、nameタグについては、連続なハッシュ関数hnameでハッシュ値を計算するハッシュ値計算部133を選択し、locationタグについては、不連続なハッシュ関数hlocationでハッシュ値を計算するハッシュ値計算部133を選択し、phoneタグについては、連続なハッシュ関数hphoneでハッシュ値を計算するハッシュ値計算部133を選択し、chargeタグについては、連続なハッシュ関数hchargeでハッシュ値を計算するハッシュ値計算部133を選択する。そして、アクセス先となるサーバを選択する。そして、保存情報管理部134は、入力クエリを選択された対象サーバに送信する。入力クエリを受信したサーバ1は、元ファイルを保存するステップS208。また、入力クエリを受信した対象サーバサーバ2,3等は、keyの値とともに、分解ファイルを保存するステップS209。そして、各サーバから保存完了を示す情報を受信すると、ディスパッチャDは、ロードバランサBを介して出力装置5に完了通知を送信するステップS210。データ更新図11を参照して、既存のデータを更新する例について説明する。ここでは、図7aに示すXMLファイルa0123xmlのデータが更新されるものとして説明する。なお、複製データの更新処理については、説明を省略する。まず、入力装置4は、入力データとして、UPDATEkeya123locationnagoyaを示す入力クエリを、ロードバランサBに送信するステップS301。次に、ロードバランサBは、複数のディスパッチャDのうちの1つのラウンドロビン等で選択し、選択したディスパッチャDにその入力クエリを送信するステップS302。ディスパッチャDの構文解析部12は、入力クエリの構文解析を行うステップS303。具体的には、構文解析部12は、その入力クエリが、データの更新を示すものであり、keya0123と、locationnagoyaとを抽出する。そして、その情報を振り分け処理部13に引き渡す。次に、振り分け処理部13の関数選択部132は、ハッシュ値計算部133を選択し、ハッシュ値を計算させるステップS304。具体的には、関数選択部132は、不連続なハッシュ関数hkeyでハッシュ値を計算するハッシュ値計算部133を選択し、ハッシュ値計算部133は、Chkey=1、つまりサーバ1をアクセス先として選択する。また、関数選択部132は、不連続なハッシュ関数hlocationでハッシュ値を計算するハッシュ値計算部133を選択し、ハッシュ値計算部133は、Chlocation=2、つまりサーバ2をアクセス先として選択する。そして、保存情報管理部134は、選択されたサーバ1およびサーバ2を対象サーバとして決定するステップS305。続いて、保存情報管理部134は、入力クエリをサーバ1に送信する。そして、サーバ1は、元ファイルのvalueのlocationの値を、tokyoからnagoyaに変更しステップS306、変更完了通知をディスパッチャDに送信する。なお、サーバ1は、この変更完了通知に、変更前のlocationtokyoの値を含めた変更後の元ファイルを付して送信する。次に、分解ファイル作成部131は、変更後の元ファイルのvalueの値location:nagoyaについて分解ファイルを作成するステップS307。そして、保存情報管理部134は、分解ファイルを選択された対象サーバであるサーバ2に送信する。分解ファイルを受信したサーバ2は、Locationnagoyaを保存するステップS308。ここで、分解ファイルを保存するサーバ2は、keyの値とともに、分解ファイルを保存する。次に、ディスパッチャDの保存情報管理部134は、変更前のlocationtokyoの分解ファイルの保存先を、関数選択部132を介して、ハッシュ値計算部133を選択することにより取得するステップS309。具体的には、関数選択部132は、不連続なハッシュ関数hlocationでハッシュ値を計算するハッシュ値計算部133を選択し、ハッシュ値計算部133は、Chlocation=3、つまりサーバ3を、旧データを保存するアクセス先として選択する。続いて、保存情報管理部134は、分解ファイルの削除要求をサーバ3に送信する。そして、サーバ3は、保存していたlocationtokyoの分解ファイルを削除しステップS310、分解ファイルの削除完了の通知をディスパッチャDに送信する。ディスパッチャDは、サーバ3から削除完了の通知を受信すると、ロードバランサBを介して出力装置5に完了通知を送信するステップS311。このようにすることで、本実施形態に係る条件検索データ保存方法、条件検索データベースクラスタシステム1、ディスパッチャD、およびプログラムによれば、key値およびvalue値それぞれの一致検索および範囲検索に対応させて、不連続なデータおよび連続なデータそれぞれで各サーバに保存せざるを得ない従来技術に比べ、データの保存総量を抑え上で、value値による一致検索および範囲検索を可能とする。また、value値の分解ファイルの複製データを、元のvalue値の分解ファイルを記憶するサーバとは別のサーバに記憶させることで、冗長化を実現し、元のvalue値の分解ファイルを記憶するサーバが故障した場合であっても、value値の分解ファイルの複製データに基づき、value値による検索が可能となる。"