"複数のノードの中からデータを格納するノードを決定するコンピュータに、前記複数のノードに含まれるノードごとに異なる関数であって、当該関数の定義域が前記データを一意に特定するためのキーを含む前記関数を前記ノードごとに関連付け、格納するデータ量を示す前記ノードごとの指標値を前記ノードごとに関連付け、前記ノードごとの関数に前記キーをそれぞれ代入することにより、前記ノードごとの関数の値を算出し、定義域が前記ノードごとの関数の値と前記ノードごとの指標値との組み合わせを含む重み付け関数であって、前記重み付け関数の値域で当該重み付け関数の値の大小関係が定義される前記重み付け関数に、前記ノードごとの関数の値と前記ノードごとの指標値とを代入することにより、前記重み付け関数の値を前記ノードごとに算出し、前記ノードごとの前記重み付け関数の値の大小関係に基づいて、前記データを格納するノードを決定し、決定結果を出力する、処理を実行させることを特徴とするノード決定プログラム。前記ノードごとの前記重み付け関数の値の大小関係に基づいて、前記ノードごとの前記重み付け関数の値を並び換え、並び換えられた前記ノードごとの前記重み付け関数の値の順序にしたがって、前記複数のノードの中から所定数のノードを選択する処理を、前記コンピュータにさらに実行させ、前記決定する処理は、選択された前記所定数のノードを、前記データを格納するノードに決定することを特徴とする請求項1に記載のノード決定プログラム。前記複数のノードに新たなノードを追加する場合、前記複数のノードに格納されているデータごとに、前記各処理を前記コンピュータに実行させることを特徴とする請求項1または2に記載のノード決定プログラム。前記複数のノードからノードを削除する場合、当該ノードに格納されているデータごとに、前記各処理を前記コンピュータに実行させることを特徴とする請求項1~3のいずれか一つに記載のノード決定プログラム。複数のノードの中からデータを格納するノードを決定するノード決定装置において、前記複数のノードに含まれるノードごとに異なる関数であって、当該関数の定義域が前記データを一意に特定するためのキーを含む前記関数を前記ノードごとに関連付ける第1の関連付け手段と、格納するデータ量を示す前記ノードごとの指標値を前記ノードごとに関連付ける第2の関連付け手段と、前記第1の関連付け手段によって関連付けられた前記ノードごとの関数に前記キーをそれぞれ代入することにより、前記ノードごとの関数の値を算出する第1の算出手段と、定義域が前記ノードごとの関数の値と前記ノードごとの指標値との組み合わせを含む重み付け関数であって、前記重み付け関数の値域で当該重み付け関数の値の大小関係が定義される前記重み付け関数に、前記ノードごとの関数の値と前記ノードごとの指標値とを代入することにより、前記重み付け関数の値を前記ノードごとに算出する第2の算出手段と、前記第2の算出手段によって算出された前記ノードごとの前記重み付け関数の値の大小関係に基づいて、前記データを格納するノードを決定する決定手段と、前記決定手段によって決定された決定結果を出力する出力手段と、を備えることを特徴とするノード決定装置。複数のノードの中からデータを格納するノードを決定するコンピュータが、前記複数のノードに含まれるノードごとに異なる関数であって、当該関数の定義域が前記データを一意に特定するためのキーを含む前記関数を前記ノードごとに関連付け、格納するデータ量を示す前記ノードごとの指標値を前記ノードごとに関連付け、前記ノードごとの関数に前記キーをそれぞれ代入することにより、前記ノードごとの関数の値を算出し、定義域が前記ノードごとの関数の値と前記ノードごとの指標値との組み合わせを含む重み付け関数であって、前記重み付け関数の値域で当該重み付け関数の値の大小関係が定義される前記重み付け関数に、前記ノードごとの関数の値と前記ノードごとの指標値とを代入することにより、前記重み付け関数の値を前記ノードごとに算出し、前記ノードごとの前記重み付け関数の値の大小関係に基づいて、前記データを格納するノードを決定し、決定結果を出力する、処理を実行することを特徴とするノード決定方法。しかしながら、上述した従来技術では、分散データストア内のノード数の増減時に、多くのデータの格納先が変わってしまう場合があり、ノード間のデータ移動が増大するという問題があった。例えば、上述した従来の一手法では、分散データストア内のノード数が10個から11個に増えた場合、全データの11分の10のデータの格納先が変わってしまう。また、キー空間の割り当てをノードごとに設定するような場合は、考慮されていない。本発明の一側面では、指定した割合に応じてデータを分散させた上で、ノード数の増減時におけるノード間のデータ移動を減らすことを目的とする。本発明の一側面によれば、複数のノードに含まれるノードごとに異なる関数であって、当該関数の定義域がデータを一意に特定するためのキーを含む関数をノードごとに関連付け、格納するデータ量を示すノードごとの指標値をノードごとに関連付け、関連付けられたノードごとの関数にキーをそれぞれ代入することにより、ノードごとの関数の値を算出し、定義域がノードごとの関数の値とノードごとの指標値との組み合わせを含む重み付け関数であって、重み付け関数の値域で当該重み付け関数の値の大小関係が定義される重み付け関数に、ノードごとの関数の値とノードごとの指標値とを代入することにより、重み付け関数の値をノードごとに算出し、算出されたノードごとの重み付け関数の値の大小関係に基づいて、データを格納するノードを決定し、決定された決定結果を出力するノード決定プログラム、ノード決定装置およびノード決定方法が提案される。本発明の一側面によれば、指定した割合に応じてデータを分散させた上で、ノード数の増減時におけるノード間のデータ移動を減らすことができるという効果を奏する。以下に添付図面を参照して、本発明にかかるノード決定プログラム、ノード決定装置およびノード決定方法の好適な実施の形態を詳細に説明する。ノード決定プログラム、ノード決定装置およびノード決定方法によれば、指定された指標値に基づいて分散データストア内のノード間でデータを偏らせて分散させた上で、ノード増減時のデータ移動量を減らすことができる。そのために、ノード決定プログラム、ノード決定装置およびノード決定方法によれば、データのキーから得られたノードごとの関数値例えばハッシュ値を、ノードごとに設定された指標値で補正した値が算出される。そして、ノード決定プログラム、ノード決定装置およびノード決定方法によれば、ノードごとの補正された値の大小関係に基づいて、データを格納するノードが決定される。これにより、ノード決定プログラム、ノード決定装置およびノード決定方法によれば、ノードごとに設定された指標値に応じて、データストア内のノード間でデータを偏らせて分散させることができる。結果として、記憶容量演算能力回線速度などの点で高性能なノードに多くのデータを格納させることができ、分散データストアの効率化を図ることができる。そして、ノードの増減時には、増減するノード以外のノード間ではノードごとの補正された値の大小関係は変化しないため、増減するノード以外のノード間ではデータの移動が生じず、ノード増減時のデータ移動量を抑制することができる。ノード決定処理の一実施例図1は、実施の形態にかかるノード決定装置のノード決定処理の一実施例を示す説明図である。ここでは、分散データストア内のノードN1~N3の中からデータDを格納するノードを決定する場合を例に挙げて説明する。ここで、分散データストアは、複数のノードここでは、ノードN1~N3にデータ群を分散して格納するシステムである。分散データストアでは、データDとキーkがペアになっており、キーkを指定することでデータDを参照することができる。データDのキーkは、データDを一意に特定するための情報である。図1において、まず、ノード決定装置101は、ノードN1と関数f_1を関連付ける。また、ノード決定装置101は、ノードN2と関数f_2を関連付ける。また、ノード決定装置101は、ノードN3と関数f_3を関連付ける。ここで、関数f_1,f_2,f_3は、それぞれ異なる関数であって、該関数の定義域がデータDのキーkを含む関数である。つぎに、ノード決定装置101は、ノードN1と比率c_1を関連付ける。また、ノード決定装置101は、ノードN2と比率c_2を関連付ける。また、ノード決定装置101は、ノードN3と比率c_3を関連付ける。ここで、比率c_1,c_2,c_3は、ノードN1~N3に分散して格納されるデータ群の中で、ノードN1~N3のそれぞれに格納するデータをどの程度の量にするかを示す指標値である。そして、ノード決定装置101は、ノードN1~N3ごとの関数f_1,f_2,f_3にデータDのキーkをそれぞれ代入することにより、ノードN1~N3ごとの関数値f_1k,f_2k,f_3kを算出する。つぎに、ノード決定装置101は、ノードN1~N3ごとの関数値f_1k,f_2k,f_3kと、ノードN1~N3ごとの比率c_1,c_2,c_3と、を重み付け関数gに代入する。これにより、ノード決定装置101は、ノードN1~N3ごとの重み付け関数値gf_1k,c_1,gf_2k,c_2,gf_3k,c_3を算出する。ここで、重み付け関数gは、該関数の定義域がノードN1~N3ごとの関数値f_1k,f_2k,f_3kとノードN1~N3ごとの比率c_1,c_2,c_3との組み合わせを含み、重み付け関数の値域で該重み付け関数の値重み付け関数値の大小関係が定義される関数である。そして、ノード決定装置101は、ノードN1~N3ごとの重み付け関数値gf_1k,c_1,gf_2k,c_2,gf_3k,c_3の大小関係に基づいて、データDを格納するノードを決定する。ここでは一例として、ノード決定装置101が、重み付け関数値gf_1k,c_1,gf_2k,c_2,gf_3k,c_3のうち最小の重み付け関数値gf_3k,c_3に対応するノードN3を、データDを格納するノードに決定する。以上説明した一実施例によれば、分散データストア内のノード数の増減時におけるノード間のデータ移動を減らすことができる。具体的には、分散データストア内のノード数が変化した場合であっても、ノードN1~N3の重み付け関数値の大小関係は変化しないため、ノード間のデータ移動の発生を抑えることができる。より具体的には、例えば、分散データストア内のノード数が増える場合、新たに追加されるノードの重み付け関数値が最小とならない限り、データDの移動は発生しない。一方、分散データストア内のノード数が減る場合、ノードN3が削除されない限り、データDの移動は発生しない。以下、図2および図3を用いて、ノード数の増減時におけるノード間のデータ移動について説明する。ノード追加時のデータ移動の一例図2は、ノード追加時のデータ移動の一例を示す説明図である。ここでは、ノードN3にデータDが格納されたあと、分散データストアに新たなノードN4が追加される場合について説明する。ここで、ノードN4が追加された場合であっても、ノードN1~N3の重み付け関数値gf_1k,c_1,gf_2k,c_2,gf_3k,c_3の大小関係は変化しない。したがって、新たなノードN4の重み付け関数値gf_4k,c_4が算出された結果、重み付け関数値gf_1k,c_1~gf_4k,c_4のうち最小となる重み付け関数値は、つぎのパターン1またはパターン2のいずれかである。パターン1は、依然としてノードN3の重み付け関数値gf_3k,c_3が最小となる場合である。パターン2は、ノードN4の重み付け関数値gf_4k,c_4が最小となる場合である。ここで、パターン1の場合、データDの移動は発生しない。一方、パターン2の場合、データDを格納するためのノードとしてノードN4が決定され、ノードN3に格納されているデータDがノードN4に移動することになる。すなわち、ノード追加時は、ノードN4の重み付け関数値gf_4k,c_4が最小とならない限り、データDの移動は発生しないため、ノード間のデータ移動の発生を抑えることができる。ノード削除時のデータ移動の一例図3は、ノード削除時のデータ移動の一例を示す説明図である。ここでは、ノードN3にデータDが格納されたあと、分散データストア内のノードN3を削除する場合パターン3と、ノードN2を削除する場合パターン4について説明する。パターン3の場合、ノードN3を削除するため、ノードN3に格納されているデータDの移動が発生する。ただし、ノードN3が削除された場合であっても、残余のノードN1,N2の重み付け関数値gf_1k,c_1,gf_2k,c_2の大小関係は変化しない。したがって、ノードN3に格納されているデータDが、ノードN3のつぎに重み付け関数値が小さいノードN1に移動することになる。一方、パターン4の場合、データDの移動は発生しない。すなわち、ノード削除時は、データDを格納しているノードN3が削除されない限り、データDの移動は発生しないため、ノード間のデータ移動の発生を抑えることができる。分散システム400の一例図4は、実施の形態にかかる分散システムの一例を示す説明図である。図4において、分散システム400は、ノード決定装置101と、ノードN1~Nnと、クライアント装置Cと、を含む構成である。分散システム400において、ノード決定装置101、ノードN1~Nnおよびクライアント装置Cは、例えば、インターネット、LANLocalAreaNetwork、WANWideAreaNetworkなどのネットワーク410を介して相互に通信可能に接続されている。ここで、ノードN1~Nnは、例えば、ファイルサーバ、データベースサーバなどのサーバである。クライアント装置Cは、例えば、データストアのサービスの提供を受けるコンピュータである。クライアント装置Cは、分散データストアDS内のいずれかのノードに格納されているデータDを、データDのキーkを用いて参照することができる。以下の説明では、複数のノードN1~Nnのうち任意のノードをノードNiと表記するi=1,2,...,n。また、ノードN1~Nnのそれぞれに関する比率をc_1~c_nと表記し、比率c_1~c_nのうちノードNiに関する比率をc_iと表記する。また、格納対象となるデータ群をデータD1~Dmと表記し、データD1~Dmのうち任意のデータDをデータDjと表記するj=1,2,...,m。また、データDjを一意に特定するためのキーをキーkjと表記する。コンピュータのハードウェア構成つぎに、実施の形態に用いられるコンピュータノード決定装置101、ノードN1~Nn、クライアント装置Cのハードウェア構成について説明する。図5は、実施の形態に用いられるコンピュータのハードウェア構成の一例を示すブロック図である。図5において、コンピュータは、CPUCentralProcessingUnit501と、ROMRead‐OnlyMemory502と、RAMRandomAccessMemory503と、磁気ディスクドライブ504と、磁気ディスク505と、光ディスクドライブ506と、光ディスク507と、ディスプレイ508と、I/FInterface509と、キーボード510と、マウス511と、を備えている。また、各構成部はバス500によってそれぞれ接続されている。ここで、CPU501は、コンピュータの全体の制御を司る。ROM502は、ブートプログラムなどのプログラムを記憶している。RAM503は、CPU501のワークエリアとして使用される。磁気ディスクドライブ504は、CPU501の制御にしたがって磁気ディスク505に対するデータのリード/ライトを制御する。磁気ディスク505は、磁気ディスクドライブ504の制御で書き込まれたデータを記憶する。光ディスクドライブ506は、CPU501の制御にしたがって光ディスク507に対するデータのリード/ライトを制御する。光ディスク507は、光ディスクドライブ506の制御で書き込まれたデータを記憶したり、光ディスク507に記憶されたデータをコンピュータに読み取らせたりする。ディスプレイ508は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ508には、例えば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。I/F509は、通信回線を通じてLAN、WAN、インターネットなどのネットワーク410に接続され、このネットワーク410を介して他の装置に接続される。そして、I/F509は、ネットワーク410と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F509には、例えば、モデムやLANアダプタなどを採用することができる。キーボード510は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス511は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。ノード決定装置101の機能的構成つぎに、実施の形態にかかるノード決定装置101の機能的構成について説明する。図6は、実施の形態にかかるノード決定装置の機能的構成を示すブロック図である。図6において、ノード決定装置101は、受付部601と、第1の関連付け部602と、第2の関連付け部603と、第1の算出部604と、第2の算出部605と、決定部606と、並換部607と、選択部608と、出力部609と、を含む構成である。各機能部受付部601~出力部609は、例えば、図5に示したROM502、RAM503、磁気ディスク505、光ディスク507などの記憶装置に記憶されたプログラムをCPU501に実行させることにより、または、I/F509により、その機能を実現する。また、各機能部受付部601~出力部609の処理結果は、特に指定する場合を除いて、RAM503、磁気ディスク505、光ディスク507などの記憶装置に記憶される。受付部601は、格納対象となるデータDjに関するキー情報を受け付ける機能を有する。ここで、キー情報は、例えば、格納対象となるデータDjのデータ名と、キーkjと、冗長度Rjと、を含む。データDjは、例えば、フォルダ、ファイル、レコード単位の情報である。キーkjは、例えば、ファイルのパス名やデータベース内のレコードの主キーなどの文字列である。冗長度Rjは、耐障害の観点から、同一キーkjのデータDjを複数のノードNiに冗長して格納する場合のノード数である。具体的には、例えば、受付部601が、図5に示したキーボード510やマウス511を用いたユーザの操作入力によりキー情報を受け付ける。また、受付部601が、ネットワーク410を介して、クライアント装置Cからキー情報を受け付けてもよい。受け付けたキー情報は、例えば、図7に示すキーリスト700に記憶される。図7は、キーリストの記憶内容の一例を示す説明図である。図7において、キーリスト700は、データ名、キーおよび冗長度のフィールドを有し、各フィールドに情報を設定することで、キー情報700-1~700-mをレコードとして記憶している。ここで、データ名とは、データDjの名称である。キーとは、データDjを一意に特定するための情報である。冗長度は、データDjを複数のノードNiに冗長して格納する場合のノード数である。キーリスト700の記憶内容は、例えば、キー情報を受け付けた場合、また、分散データストアDSからデータDjが削除された場合に、その都度更新される。キーリスト700は、例えば、ROM502、RAM503、磁気ディスク505、光ディスク507などの記憶装置により、その機能を実現する。図6の説明に戻り、また、受付部601は、ノードNiに関する指標値を受け付ける機能を有する。ここで、指標値とは、ノードN1~Nnに分散して格納されるデータD1~Dmの中で、ノードNiに格納するデータDをどの程度の量にするかを示す値である。具体的には、例えば、指標値とは、上述した比率c_iであり、ノードNiの記憶容量演算能力回線速度に基づいて決定された値である。具体的には、例えば、受付部601が、キーボード510やマウス511を用いたユーザの操作入力によりノードNiに関する比率c_iを受け付ける。また、受付部601が、ネットワーク410を介して、ノードNiやクライアント装置CからノードNiに関する比率c_iを受け付けてもよい。受け付けたノードNiに関する指標値は、例えば、後述する第2の関連付け部603により、図9に示す指標値リスト900に記憶される。また、受付部601は、分散データストアDS内のノード数の増減にともなうノード決定指示を受け付ける機能を有する。ここで、ノード決定指示とは、ノード数の増減にともなって、データDjの格納先となるノードNiを再決定するように指示するものである。具体的には、ノード追加にともなうノード決定指示には、例えば、分散データストアDSに追加されるノードNiのノード名が含まれている。また、ノード追加にともなうノード決定指示には、例えば、追加されるノードNiに関する比率c_iが含まれている。受け付けたノード決定指示に含まれるノードNiに関する指標値は、例えば、後述する第2の関連付け部603により、図9に示す指標値リスト900に記憶される。なお、新たなノードNiの追加は、例えば、分散システム400のパフォーマンスの向上などを目的として行われる。また、ノード削除にともなうノード決定指示には、例えば、分散データストアDSから削除されるノードNiのノード名が含まれている。なお、ノードNiの削除は、例えば、ノードNiの故障時などに行われる。具体的には、例えば、受付部601が、キーボード510やマウス511を用いたユーザの操作入力によりノード決定指示を受け付ける。また、受付部601が、ネットワーク410を介して、ノードNiやクライアント装置Cからノード決定指示を受け付けてもよい。第1の関連付け部602は、ノードNiごとに関数を関連付ける機能を有する。以下、ノードNiの関数を関数f_iと表記する。ここで、関数f_iは、ノードNiごとに異なる関数であって、その定義域がデータDjのキーkjを含む関数である。すなわち、関数f_iは、その定義域がキーkjがとりえる値の範囲を含んでいる関数である。具体的には、例えば、第1の関連付け部602が、予め用意されている関数群Fの中から、任意の関数を関数f_iとして選択して、ノードNiと関数f_iとを関連付ける。関連付け結果は、例えば、図8に示す関数リスト800に記憶される。なお、関数群Fは、少なくともノード数n分の関数の集合であり、ROM502、RAM503、磁気ディスク505、光ディスク507などの記憶装置に記憶されている。また、第1の関連付け部602が、二つの引数をとる関数fを一つ用意して、関数f_iを、例えば下記式1のように定義することにしてもよい。ただし、iはノードNiのノード名、kjはデータDjのキーである。なお、二つの引数をとる関数fは、例えば、ROM502、RAM503、磁気ディスク505、光ディスク507などの記憶装置に記憶されている。f_i=fi,kj1また、関数f_iとしては、上述の定義域の条件を満たすものであれば、任意の関数を用いることができる。具体的には、例えば、関数f_iとして、キーkjを引数として与えることで固定長の乱数が得られる関数を用いることにしてもよい。より具体的には、例えば、関数f_iとして、SHA1SecureHashAlgorithm1などのハッシュ関数を用いることにしてもよい。SHA1は、入力が少し異なれば出力が大きく異なるという性質を有する関数である。また、例えば、キーkjおよびノード名iがともに整数の場合は、関数f_iとして、キーkjにノード名iを加算するf_i=kjiという関数を用いることにしてもよい。さらに、ノードN1~Nnの関数f_1~f_nとして、関数値の頻度分布が十分に等しく、互いに独立な関数を用いることにしてもよい。具体的には、例えば、第1の関連付け部602が、SHA1などのハッシュ関数を用いて、関数f_iを下記式2のように定義することにしてもよい。ただし、concatnatei,kjは、ノードNiのノード名iとデータDjのキーkjを文字列として連結する関数である。f_i=SHA1concatnatei,kj2図8は、関数リストの記憶内容の一例を示す説明図である。図8において、関数リスト800は、ノードID、ノード名および関数のフィールドを有し、各フィールドに情報を設定することで、関数情報800-1~800-nをレコードとして記憶している。ノードIDは、本明細書において説明上使用するノードNiの識別子である。ノード名は、ノードNiの名称である。関数は、ノードNiと関連付けられている関数f_iである。関数リスト800は、例えば、ROM502、RAM503、磁気ディスク505、光ディスク507などの記憶装置により、その機能を実現する。図6の説明に戻り、第2の関連付け部603は、格納するデータ量を示すノードNiごとの指標値をノードNiごとに関連付ける機能を有する。具体的には、例えば、第2の関連付け部603は、受付部601によって受け付けられたノードNiに関する比率c_iを、ノードNiに関連付ける。関連付け結果は、例えば、図9に示す指標値リスト900に記憶される。図9は、指標値リストの記憶内容の一例を示す説明図である。図9において、指標値リスト900は、ノードID、ノード名および指標値のフィールドを有し、各フィールドに情報を設定することで、指標値情報900-1~900-nをレコードとして記憶している。指標値は、ノードNiと関連付けられている比率c_iである。指標値リスト900は、例えば、ROM502、RAM503、磁気ディスク505、光ディスク507などの記憶装置により、その機能を実現する。図6の説明に戻り、第1の算出部604は、関連付けられたノードNiごとの関数f_iにキーkをそれぞれ代入することにより、ノードNiごとの関数f_iの値以下、関数値f_ikを算出する機能を有する。具体的には、例えば、第1の算出部604が、キーkを引数として関数f_iに与えることで、ノードNiごとの関数値f_ikを算出する。また、関数f_iとして上記式1を用いる場合、第1の算出部604が、ノードNiのノード名iおよびキーkを引数として上記式1に与えることで、ノードNiごとの関数値f_ikを算出する。算出された算出結果は、例えば、図10に示す関数値リスト1000に記憶される。図10は、関数値リストの記憶内容の一例を示す説明図である。図10において、関数値リスト1000は、ノードID、ノード名および関数値のフィールドを有し、各フィールドに情報を設定することで、関数値情報1000-1~1000-nをレコードとして記憶している。関数値リスト1000は、例えば、ROM502、RAM503、磁気ディスク505、光ディスク507などの記憶装置により、その機能を実現する。図6の説明に戻り、第2の算出部605は、重み付け関数gに、ノードNiごとの関数値f_ikとノードNiごとの指標値とを代入することにより、重み付け関数gの値以下、重み付け関数値gf_ik,c_iをノードNiごとに算出する機能を有する。ここで、重み付け関数gは、その定義域がノードNiごとの関数値f_ikとノードNiごとの指標値との組み合わせを含み、その値域で重み付け関数値gf_ik,c_iの大小関係が定義される関数である。すなわち、重み付け関数gは、その定義域がノードNiごとの関数値f_ikがとりうる値とノードNiごとの指標値とがとりうる値とを組み合わせた範囲を含んでおり、その値域で重み付け関数値gf_ik,c_iの大小関係を比較することができる関数である。また、重み付け関数gは、引数となる関数値f_ikの増加にともなって、重み付け関数値gf_ik,c_iが増加する関数、または、重み付け関数値gf_ik,c_iが減少する関数である。また、重み付け関数gは、引数となる指標値の増加にともなって、重み付け関数値gf_ik,c_iが増加する関数、または、重み付け関数値gf_ik,c_iが減少する関数である。なお、重み付け関数gは、例えば、ROM502、RAM503、磁気ディスク505、光ディスク507などの記憶装置に記憶されている。重み付け関数gとしては、上述の条件を満たすものであれば、任意の関数を用いることができる。具体的には、例えば、重み付け関数gとして、gf_ik,c_i=f_ik/c_iという関数を用いることにしてもよい。これにより、各ノードNiの指標値c_iを反映して、重み付け関数値gf_ik,c_iを算出することができる。また、重み付け関数gとしては、重み付け関数の値域で定義される当該重み付け関数の値の大小関係が、ノードNiごとの指標値c_iの和に対するいずれかのノードNiの指標値c_iの割合で、いずれかのノードNiの重み付け関数値gf_ik,c_iが最大または最小になる関係である関数を用いることができる。具体的には、例えば、重み付け関数gとして、gf_ik,c_i=f_ik^c_iという関数を用いることにしてもよい。なお、f_ik^c_iはf_ikをc_iで冪乗する数式を示す。これにより、各ノードNiの指標値c_iを反映して、重み付け関数値gf_ik,c_iを算出することができる。具体的には、第2の算出部605は、重み付け関数gに、ノードNiごとの関数値f_ikとノードNiごとの比率c_iとを代入することにより、重み付け関数値gf_ik,c_iをノードNiごとに算出する。算出された算出結果は、例えば、図11に示す重み付け関数値リスト1100に記憶される。図11は、重み付け関数値リストの記憶内容の一例を示す説明図である。図11において、重み付け関数値リスト1100は、ノードID、ノード名および重み付け関数値のフィールドを有し、各フィールドに情報を設定することで、重み付け関数値情報1100-1~1100-nをレコードとして記憶している。重み付け関数値リスト1100は、例えば、ROM502、RAM503、磁気ディスク505、光ディスク507などの記憶装置により、その機能を実現する。図6の説明に戻り、決定部606は、算出されたノードNiごとの重み付け関数値gf_ik,c_iの大小関係に基づいて、データDjを格納するノードNiを決定する機能を有する。具体的には、例えば、決定部606が、重み付け関数値gf_1k,c_1~gf_nk,c_nのうち最小または、最大の重み付け関数値gf_ik,c_iに対応するノードNiを、データDjを格納するノードNiに決定する。並換部607は、算出されたノードNiごとの重み付け関数値gf_ik,c_iの大小関係に基づいて、ノードNiごとの重み付け関数値gf_ik,c_iを並び換える機能を有する。具体的には、例えば、並換部607が、ノードN1~Nnの重み付け関数値gf_1k,c_1~gf_nk,c_nが昇順または、降順となるように並び換える。選択部608は、並び換えられたノードNiごとの重み付け関数値gf_ik,c_iの順序にしたがって、ノードN1~Nnの中から所定数のノードNiを選択する機能を有する。ここで、所定数は、例えば、データDjの冗長度Rjである。以下の説明では、並び換え後のノードN1~Nnの重み付け関数値gf_1k,c_1~gf_nk,c_nを関数値g[1]~g[n]と表記する。具体的には、例えば、まず、選択部608が、並び換え後の関数値g[1]~g[n]の先頭または、後尾からRj個の関数値g[1]~g[Rj]を選択する。そして、選択部608が、重み付け関数値リスト1100を参照することにより、選択された関数値g[1]~g[Rj]に対応するRj個のノードNiを特定して選択する。以下の説明では、選択されたRj個のノードNiをノードN[1]~N[Rj]と表記する。なお、冗長度RjがRj=1の場合は、選択部608は、並び換え後の関数値g[1]~g[n]の先頭または、後尾から特定の順番のノードNiを選択することにしてもよい。また、決定部606は、選択された所定数のノードNiを、データDjを格納するノードNiに決定することにしてもよい。具体的には、例えば、決定部606が、選択されたRj個のノードN[1]~N[Rj]を、データDjを格納するノードNiに決定する。決定された決定結果は、図12に示すノード/キー対応リスト1200に記憶される。図12は、ノード/キー対応リストの記憶内容の一例を示す説明図である。図12において、ノード/キー対応リスト1200は、ノードID、ノード名およびキーのフィールドを有する。各フィールドに情報を設定することで、ノードN1~Nnごとの対応情報1200-1~1200-nがレコードとして記憶される。一例として、ノードN1がデータD1,D3,D9を格納するノードNiに決定された場合、対応情報1200-1のキーフィールドに、データD1,D3,D9のキーk1,k3,k9が設定される。また、ノードN2がデータD4,D5を格納するノードNiに決定された場合、対応情報1200-2のキーフィールドに、データD4,D5のキーk4,k5が設定される。なお、各データDjのキーkjは、例えば、キーリスト700を参照することで特定することができる。図6の説明に戻り、出力部609は、決定された決定結果を出力する機能を有する。具体的には、例えば、出力部609が、図12に示したノード/キー対応リスト1200を出力する。出力形式としては、例えば、ディスプレイ508への表示、プリンタ不図示への印刷出力、I/F509による外部装置への送信がある。また、RAM503、磁気ディスク505、光ディスク507などの記憶領域に記憶することとしてもよい。より具体的には、例えば、出力部609が、ノード間のデータ移動を制御する外部のコンピュータにノード/キー対応リスト1200を送信してもよい。この場合、例えば、外部のコンピュータが、ノード/キー対応リスト1200にしたがって、ノード間のデータ移動を制御することになる。また、出力部609が、ノード/キー対応リスト1200にしたがって、データDiの移動指示をノードNiに送信してもよい。なお、上述した説明では、ノード決定装置101とノードNiとを別体に設ける場合について説明したが、これに限らない。具体的には、例えば、ノードNiがノード決定装置101を備える構成にしてもよい。ノード決定装置101のノード決定処理手順つぎに、実施の形態にかかるノード決定装置101のノード決定処理手順について説明する。ここでは、ノードN1~Nnの中から、データD1~Dmの格納先となるノードNiを決定する場合を例に挙げて説明する。また、ここでは、受付部601により、キーリスト700が作成されており、第2の関連付け部603により指標値リスト900が作成されているとする。図13は、実施の形態にかかるノード決定装置のノード決定処理手順の一例を示すフローチャートである。図13のフローチャートにおいて、まず、第1の関連付け部602により、ノードNiのiをi=1で初期化してステップS1301、関数群Fの中から関数f_iを選択するステップS1302。そして、第1の関連付け部602により、ノードNiのノード名と、選択された関数f_iとを関連付けて関数リスト800に登録するステップS1303。つぎに、第1の関連付け部602により、ノードNiのiをインクリメントしてステップS1304、iがnより大きいか否かを判断するステップS1305。ここで、iがn以下の場合ステップS1305:No、ステップS1302に戻る。一方、iがnより大きい場合ステップS1305:Yes、第1の算出部604により、データDjのjをj=1で初期化するステップS1306。そして、第1の算出部604により、キーリスト700の中からデータDjのキーkjおよび冗長度Rjを抽出するステップS1307。このあと、決定部606により、データDjを格納するノードNiを決定するノード決定処理を実行するステップS1308。そして、第1の算出部604により、データDjのjをインクリメントしてステップS1309、jがmより大きいか否かを判断するステップS1310。ここで、jがm以下の場合ステップS1310:No、ステップS1307に戻る。一方、jがmより大きい場合ステップS1310:Yes、出力部609により、ノード/キー対応リスト1200を出力してステップS1311、本フローチャートによる一連の処理を終了する。つぎに、図13に示したステップS1308のノード決定処理の具体的処理手順について説明する。図14および図15は、ステップS1308のノード決定処理の具体的処理手順の一例を示すフローチャートである。図14のフローチャートにおいて、まず、第1の算出部604により、ノードNiのiをi=1で初期化してステップS1401、関数リスト800の中からノードNiの関数f_iを抽出するステップS1402。つぎに、第1の算出部604により、抽出された関数f_iに図13に示したステップS1307において抽出されたキーkjを代入して、ノードNiの関数値f_ikjを算出するステップS1403。そして、第1の算出部604により、算出されたノードNiの関数値f_ikjを関数値リスト1000に登録するステップS1404。つぎに、第2の算出部605により、関数値リスト1000の中からノードNiの関数値f_ikjを抽出するステップS1405。そして、第2の算出部605により、指標値リスト900の中からノードNiに関する比率c_iを抽出するステップS1406。つぎに、第2の算出部605により、重み付け関数gに抽出されたノードNiの関数値f_ikjと比率c_iとを代入して、ノードNiの重み付け関数値gf_ikj,c_iを算出するステップS1407。そして、第2の算出部605により、算出されたノードNiの重み付け関数値gf_ikj,c_iを重み付け関数値リスト1100に登録するステップS1408。このあと、第2の算出部604により、ノードNiのiをインクリメントしてステップS1409、iがnより大きいか否かを判断するステップS1410。ここで、iがn以下の場合ステップS1410:No、ステップS1402に戻る。一方、iがnより大きい場合ステップS1410:Yes、図15に示すステップS1501に移行する。図15のフローチャートにおいて、並換部607により、重み付け関数値リスト1100を参照して、重み付け関数値gf_1kj,c_1~gf_nkj,c_nを昇順に並び換えるステップS1501。このあと、選択部608により、並び換え後の重み付け関数値g[1]~g[n]の先頭からRj個の重み付け関数値g[1]~g[Rj]を選択するステップS1502。ただし、Rjは、図13に示したステップS1307において抽出された冗長度Rjである。つぎに、選択部608により、重み付け関数値リスト1100を参照して、選択されたRj個の重み付け関数値g[1]~g[Rj]に対応するノードN[1]~N[Rj]を選択するステップS1503。このあと、決定部606により、選択されたノードN[1]~N[Rj]を、データDjを格納するノードNiに決定するステップS1504。そして、決定部606により、決定された決定結果をノード/キー対応リスト1200に登録してステップS1505、図13に示したステップS1309に移行する。これにより、重み付け関数gにノードNiごとの関数値f_ikjとノードNiごとの比率c_iを引数として与えて得られる重み付け関数値gf_ikj,c_iの大小関係から、データDjを格納するノードNiを決定することができる。この結果、ノードNiごとに設定された指標値c_iに応じて、分散データストアDS内の各ノードNiにデータDjを分散させて格納することができる。また、分散データストアDS内のノード数の増減時におけるノード間のデータ移動を減らすことができる。ノード追加時のノード決定処理手順つぎに、ノード追加時のノード決定装置101のノード決定処理手順について説明する。ここでは、分散データストアDSに新たに追加されるノードNiをノードNxと表記する。図16は、ノード追加時のノード決定装置のノード決定処理手順の一例を示すフローチャートである。図16のフローチャートにおいて、まず、受付部601により、ノード追加にともなうノード決定指示を受け付けたか否かを判断するステップS1601。ここで、ノード決定指示を受け付けるのを待ってステップS1601:No、受け付けた場合ステップS1601:Yes、第1の関連付け部602により、関数群Fの中からノードNxの関数f_xを選択するステップS1602。そして、第1の関連付け部602により、ノードNxのノード名と、選択された関数f_xとを関連付けて関数リスト800に登録するステップS1603。ただし、ノードNxのノード名および関数f_xは、関数リスト800の後尾の関数情報800-nとして登録される。つぎに、第2の関連付け部603により、ノード決定指示に含まれるノードNxの比率c_xが取得される。そして、第2の関連付け部603により、ノードNxのノード名と、比率c_xとを関連付けて指標値リスト900に登録するステップS1604。ただし、ノードNxのノード名および比率c_xは、指標値リスト900の後尾の指標値情報900-nとして登録される。つぎに、決定部606により、ノード/キー対応リスト1200を初期化するステップS1605。そして、第1の算出部604により、データDjのjをj=1で初期化してステップS1606、キーリスト700の中からデータDjのキーkjおよび冗長度Rjを抽出するステップS1607。このあと、決定部606により、データDjを格納するノードNiを決定するノード決定処理を実行するステップS1608。そして、第1の算出部604により、データDjのjをインクリメントしてステップS1609、jがmより大きいか否かを判断するステップS1610。ここで、jがm以下の場合ステップS1610:No、ステップS1607に戻る。一方、jがmより大きい場合ステップS1610:Yes、出力部609により、ノード/キー対応リスト1200を出力してステップS1611、本フローチャートによる一連の処理を終了する。これにより、分散データストアDSへのノード追加時に、データD1~Dmを格納するノードNiを再決定することができる。また、ノードNxの追加にともなってデータ移動が発生する場合は、新たに追加されたノードNxにデータDjが移動することになるため、ノード追加時におけるパフォーマンスを効率的に向上させることができる。なお、ステップS1608のノード決定処理の具体的処理手順は、図14および図15に示したステップS1308のノード決定処理の具体的処理手順と同様のため、ここでは説明を省略する。ノード削除時のノード決定処理手順つぎに、ノード削除時のノード決定装置101のノード決定処理手順について説明する。ここでは、分散データストアDSから削除されるノードNiをノードNyと表記する。図17は、ノード削除時のノード決定装置のノード決定処理手順の一例を示すフローチャートである。図17のフローチャートにおいて、まず、受付部601により、ノード削除にともなうノード決定指示を受け付けたか否かを判断するステップS1701。ここで、ノード決定指示を受け付けるのを待ってステップS1701:No、受け付けた場合ステップS1701:Yes、第1の関連付け部602により、関数リスト800の中からノードNyに対応するレコードを削除するステップS1702。なお、関数リスト800内のノードIDは、ノードNyに対応するレコードが削除されたあと振り直される。つぎに、第2の関連付け部603により、指標値リスト900の中からノードNyに対応するレコードを削除するステップS1703。なお、指標値リスト900内のノードIDは、ノードNyに対応するレコードが削除されたあと振り直される。このあと、決定部606により、ノード/キー対応リスト1200を参照して、ノードNyに対応するキーここでは、キーk[1]~k[P]と表記するを特定するステップS1704。そして、第1の算出部604により、データDpのpをp=1で初期化してステップS1705、キーリスト700の中からデータDpのキーk[p]および冗長度R[p]を抽出するステップS1706。このあと、決定部606により、データDpを格納するノードNiを決定するノード決定処理を実行するステップS1707。そして、第1の算出部604により、データDpのpをインクリメントしてステップS1708、pがPより大きいか否かを判断するステップS1709。ここで、pがP以下の場合ステップS1709:No、ステップS1706に戻る。一方、pがPより大きい場合ステップS1709:Yes、出力部609により、ノード/キー対応リスト1200を出力してステップS1710、本フローチャートによる一連の処理を終了する。これにより、分散データストアDSからのノード削除時に、削除するノードNyに格納されているデータD[1]~D[P]を格納するノードNiを再決定することができる。なお、ステップS1707のノード決定処理の具体的処理手順は、図14および図15に示したステップS1308のノード決定処理の具体的処理手順と同様のため、ここでは説明を省略する。ノード決定処理の具体例1つぎに、ノード決定装置101のノード決定処理の具体例1について説明する。ここでは、ノードNiの関数f_iとして、下記式3を用いる。ただし、iはノードNiのノード名、kjはデータDjのキー、ikjはノード名とキーの文字列としての結合を表す。f_i=fi,kj=<SHA1ikjの最初の32bit>3また、ここでは、重み付け関数gとして、下記式4を用いる。ただし、c_iはノードNiに関する比率である。g=gfi,kj,c_i=fi,kj/c_i4in=5の場合まず、分散データストアDS内のノード数nを5n=5とし、ノードN1~N5の中からデータD1~D20を格納するノードNiを決定する場合について説明する。ただし、ノードN1~N5のノード名を、それぞれn00,n01,n02,n03,n04とする。また、各データD1~D20の冗長度R1~R20を、すべて2とする。また、ノードN1~N5の比率を、それぞれ1.2、1.3、1.3、1.3、2.0とする。そして、ノード決定装置101は、キーkjから特定されるデータDjの格納先として、ノードN1~N5の重み付け関数値を昇順に並び換えた場合の先頭から1番目と2番目の重み付け関数値に対応するノードNiを決定する。ここで、データD1のキーk1をk00とすると、ノード決定装置101により、上記式3および式4を用いてノードN1~N5の重み付け関数値を算出して昇順に並べ換えると、以下のようになる。gf_n04k00,2.0=0.033895gf_n01k00,1.3=0.042616gf_n02k00,1.3=0.151522gf_n03k00,1.3=0.254016gf_n00k00,1.2=0.435007この場合、ノードN1~N5のうち最小の重み付け関数値をとるノードNiはノードN5ノード名:n04であり、つぎに小さい重み付け関数値をとるノードNiはノードN2ノード名:n01である。したがって、キーk1k00から特定されるデータD1の格納先はノードN5,N2となる。つぎに、データD2のキーk2をk01とすると、ノード決定装置101により、上記式3および式4を用いてノードN1~N5の重み付け関数値を算出して昇順に並び換えると、以下のようになる。gf_n04k01,2.0=0.441253gf_n01k01,1.3=0.517887gf_n03k01,1.3=0.547294gf_n02k01,1.3=0.675380gf_n00k01,1.2=0.686856この場合、ノードN1~N5のうち最小の重み付け関数値をとるノードNiはノードN5ノード名:n04であり、つぎに小さい重み付け関数値をとるノードNiはノードN2ノード名:n01である。したがって、キーk2k01から特定されるデータD2の格納先はノードN5,N2となる。同様に、データD3~D20のキーk3~k20をk02~k19として、各データD3~D20の格納先を決定すると、ノード名およびキーの対応関係は、図18に示すノード/キー対応リスト1800のようになる。図18は、ノード/キー対応リストの記憶内容の具体例1を示す説明図その1である。図18において、ノードN1~N5ごとにノード名およびキーの対応関係が示されている。ここで、ノードN1~N5の比率通りにキーkjを分散させた場合は、ノードN1~N5には、それぞれ約6.7個、約7.3個、約7.3個、約7.3個、約11.2個のキーkjが対応付けられることになる。図18に示す例では、ノードN1~N5には、それぞれ6個、7個、10個、6個、11個のキーkjが対応付けられている。したがって、ノードN1~N5にそれぞれ対応付けられたキーkjの個数は、十分にノードN1~N5の比率を反映している。iin=6の場合つぎに、分散データストアDS内のノード数nが5n=5から6n=6に増える場合について説明する。ここで、新たに追加されたノードN6のノード名をn05とする。上記同様に、データD1のキーk1をk00として、ノード決定装置101により、上記式3および式4を用いてノードN1~N6の重み付け関数値を算出して昇順に並び換えると、以下のようになる。gf_n04k00,2.0=0.033895gf_n01k00,1.3=0.042616gf_n05k00,2.5=0.134690gf_n02k00,1.3=0.151522gf_n03k00,1.3=0.254016gf_n00k00,1.2=0.435007この場合、ノード数nが5n=5の場合と同様に、ノードN1~N6のうち最小の重み付け関数値をとるノードNiはノードN5ノード名:n04であり、つぎに小さい重み付け関数値をとるノードNiはノードN2ノード名:n01である。したがって、キーk1k00から特定されるデータD1の格納先は変化しない。つぎに、データD2のキーk2をk01として、ノード決定装置101により、上記式3および式4を用いてノードN1~N6の重み付け関数値を算出して昇順に並び換えると、以下のようになる。gf_n05k01,2.5=0.137733gf_n04k01,2.0=0.441253gf_n01k01,1.3=0.517887gf_n03k01,1.3=0.547294gf_n02k01,1.3=0.675380gf_n00k01,1.2=0.686856この場合、ノードN1~N6のうち最小の重み付け関数値をとるノードNiはノードN6ノード名:n05であり、つぎに小さい重み付け関数値をとるノードNiはノードN5ノード名:n04である。したがって、キーk2k01から特定されるデータD2の格納先はノードN5,N2からノードN6,N5に変化する。同様に、データD3~D20のキーk3~k20をk02~k19として、各データD3~D20の格納先を決定すると、ノード名およびキーの対応関係は、図19に示すノード/キー対応リスト1900のようになる。図19は、ノード/キー対応リストの記憶内容の具体例1を示す説明図その2である。図19において、ノードN1~N6ごとにノード名およびキーの対応関係が示されている。ここで、ノード数が変化するときに移動するデータDjの総数すなわち、キーkjの総数がK×R×1/n1に十分近い場合は、ノード数が変化するときのデータ移動量が最小に十分近いといえる。ここでは、K=20,R=2,n=5のため、移動するキーkjの総数が7に近い場合はデータ移動量が最小に十分近いといえる。図19に示す例では、ノードN6を追加した結果、キーk01,k02,k05,k06,k07,k09,k13,k15,k16,k17,k19から特定されるデータD2,D6,D7,D8,D10,D14,D20の格納先が変化している。したがって、ノード数が変化するときのデータ移動量が最小に十分近くなっている。また、ノードN1~N6の比率通りにキーkjを分散させた場合は、ノードN1~N6には、それぞれ約5個、約5.4個、約5.4個、約5.4個、約8.3個、約10.4個のキーkjが対応付けられることになる。図19に示す例では、ノードN1~N6には、それぞれ4個、5個、6個、5個、9個、11個のキーkjが対応付けられている。したがって、ノードN1~N6にそれぞれ対応付けられたキーkjの個数は、十分にノードN1~N6の比率を反映している。ノード決定処理の具体例2つぎに、ノード決定装置101のノード決定処理の具体例2について説明する。ここでは、ノードNiの関数f_iとして、上記式3を用いる。ただし、iはノードNiのノード名、kjはデータDjのキー、ikjはノード名とキーの文字列としての結合を表す。また、ここでは、重み付け関数gとして、下記式5を用いる。ただし、c_iはノードNiに関する比率である。なお、fi,kj^c_iはfi,kjをc_iで冪乗する数式である。g=gfi,kj,c_i=fi,kj^c_i5in=5の場合まず、分散データストアDS内のノード数nを5n=5とし、ノードN1~N5の中からデータD1~D20を格納するノードNiを決定する場合について説明する。ただし、ノードN1~N5のノード名を、それぞれn00,n01,n02,n03,n04とする。また、各データD1~D20の冗長度R1~R20を、すべて2とする。また、ノードN1~N5の比率を、それぞれ1.2、1.3、1.3、1.3、2.0とする。そして、ノード決定装置101は、キーkjから特定されるデータDjの格納先として、ノードN1~N5の重み付け関数値を昇順に並び換えた場合の先頭から1番目と2番目の重み付け関数値に対応するノードNiを決定する。ここで、データD1のキーk1をk00とすると、ノード決定装置101により、上記式3および式5を用いてノードN1~N5の重み付け関数値を算出して昇順に並べ換えると、以下のようになる。gf_n04k00,2.0=0.004595gf_n01k00,1.3=0.023258gf_n02k00,1.3=0.120988gf_n03k00,1.3=0.236834gf_n00k00,1.2=0.458367この場合、ノードN1~N5のうち最小の重み付け関数値をとるノードNiはノードN5ノード名:n04であり、つぎに小さい重み付け関数値をとるノードNiはノードN2ノード名:n01である。したがって、キーk1k00から特定されるデータD1の格納先はノードN5,N2となる。つぎに、データD2のキーk2をk01とすると、ノード決定装置101により、上記式3および式5を用いてノードN1~N5の重み付け関数値を算出して昇順に並び換えると、以下のようになる。gf_n01k01,1.3=0.597905gf_n03k01,1.3=0.642411gf_n04k01,2.0=0.778818gf_n00k01,1.2=0.792969gf_n02k01,1.3=0.844382この場合、ノードN1~N5のうち最小の重み付け関数値をとるノードNiはノードN2ノード名:n01であり、つぎに小さい重み付け関数値をとるノードNiはノードN4ノード名:n03である。したがって、キーk2k01から特定されるデータD2の格納先はノードN2,N4となる。同様に、データD3~D20のキーk3~k20をk02~k19として、各データD3~D20の格納先を決定すると、ノード名およびキーの対応関係は、図20に示すノード/キー対応リスト2000のようになる。図20は、ノード/キー対応リストの記憶内容の具体例2を示す説明図その1である。図20において、ノードN1~N5ごとにノード名およびキーの対応関係が示されている。ここで、ノードN1~N5の比率通りにキーkjを分散させた場合は、ノードN1~N5には、それぞれ約6.7個、約7.3個、約7.3個、約7.3個、約11.2個のキーkが対応付けられることになる。図20に示す例では、ノードN1~N5には、それぞれ6個、7個、9個、8個、10個のキーkjが対応付けられている。したがって、ノードN1~N5にそれぞれ対応付けられたキーkjの個数は、十分にノードN1~N5の比率を反映している。iin=6の場合つぎに、分散データストアDS内のノード数nが5n=5から6n=6に増える場合について説明する。ここで、新たに追加されたノードN6のノード名をn05とする。上記同様に、データD1のキーk1をk00として、ノード決定装置101により、上記式3および式5を用いてノードN1~N6の重み付け関数値を算出して昇順に並び換えると、以下のようになる。gf_n04k00,2.0=0.004595gf_n01k00,1.3=0.023258gf_n05k00,2.5=0.065794gf_n02k00,1.3=0.120988gf_n03k00,1.3=0.236834gf_n00k00,1.2=0.458367この場合、ノード数nが5n=5の場合と同様に、ノードN1~N6のうち最小の重み付け関数値をとるノードNiはノードN5ノード名:n04であり、つぎに小さい重み付け関数値をとるノードNiはノードN2ノード名:n01である。したがって、キーk1k00から特定されるデータD1の格納先は変化しない。つぎに、データD2のキーk2をk01として、ノード決定装置101により、上記式3および式5を用いてノードN1~N6の重み付け関数値を算出して昇順に並び換えると、以下のようになる。gf_n05k01,2.5=0.069574gf_n01k01,1.3=0.597905gf_n03k01,1.3=0.642411gf_n04k01,2.0=0.778818gf_n00k01,1.2=0.792969gf_n02k01,1.3=0.844382この場合、ノードN1~N6のうち最小の重み付け関数値をとるノードNiはノードN6ノード名:n05であり、つぎに小さい重み付け関数値をとるノードNiはノードN2ノード名:n01である。したがって、キーk2k01から特定されるデータD2の格納先はノードN2,N4からノードN6,N2に変化する。同様に、データD3~D20のキーk3~k20をk02~k19として、各データD3~D20の格納先を決定すると、ノード名およびキーの対応関係は、図21に示すノード/キー対応リスト2100のようになる。図21は、ノード/キー対応リストの記憶内容の具体例2を示す説明図その2である。図21において、ノードN1~N6ごとにノード名およびキーの対応関係が示されている。ここで、ノード数が変化するときに移動するデータDjの総数すなわち、キーkjの総数がK×R×1/n1に十分近い場合は、ノード数が変化するときのデータ移動量が最小に十分近いといえる。ここでは、K=20,R=2,n=5のため、移動するキーkjの総数が7に近い場合はデータ移動量が最小に十分近いといえる。図21に示す例では、ノードN6を追加した結果、キーk01,k02,k05,k06,k07,k09,k13,k15,k16,k19から特定されるデータD2,D3,D6,D7,D8,D10,D14,D16,D17,D20の格納先が変化している。したがって、ノード数が変化するときのデータ移動量が最小に十分近くなっている。また、ノードN1~N6の比率通りにキーkjを分散させた場合は、ノードN1~N6には、それぞれ約5個、約5.4個、約5.4個、約5.4個、約8.3個、約10.4個のキーkjが対応付けられることになる。図21に示す例では、ノードN1~N6には、それぞれ4個、6個、5個、6個、9個、10個のキーkjが対応付けられている。したがって、ノードN1~N6にそれぞれ対応付けられたキーkjの個数は、十分にノードN1~N6の比率を反映している。また、重み付け関数gとして上記式5を採用することにより、分散するデータ数が十分に多ければ、ノードN1~N6にそれぞれ対応付けられるキーkjの個数を、ノードN1~N6の比率通りの個数にすることができる。以上説明したように、実施の形態にかかるノード決定装置101によれば、ノードNiごとに異なる関数f_iを用意し、データDjのキーkjを引数として関数値f_ikを算出する。そして、ノード決定装置によれば、関数値f_ikとノードNiの比率c_iとを引数として得られた重み付け関数値gf_ik,c_iの大小関係から、データDjを格納するノードNiを決定することができる。これにより、ノードNiに格納されるデータDjの個数は比率c_iの値に応じた個数になる。そのため、比率c_iの設定によって記憶容量の大きいノードNiや処理速度の速いノードNiにより多くのデータDjが格納されるようにすることができる。結果として、記憶容量の小さいノードNiや処理の遅いノードNiに過負荷がかかることを回避し、分散データストアDSの効率化を図ることができる。また、ノード決定装置101によれば、関数値f_ikとノードNiの比率c_iとを引数として得られた重み付け関数値gf_ik,c_iの大小関係から、データDjを格納するノードNiを決定することができる。これにより、以降において、ノード数が増減しても元のノード間での重み付け関数値gf_ik,c_iの大小関係は不変のため、追加または削除するノードNi以外のノード間でデータDjは移動しない。また、ノード決定装置101によれば、ノードNiごとの重み付け関数値gf_ik,c_iを大小関係に基づいて並び換えたあとの順序にしたがって、データDjを格納する所定数のノードNiを決定することができる。これにより、データDjをRj個のノードNiに冗長して格納することができ、分散データストアDSの耐障害性能を向上させることができる。そして、データDjをRj個のノードNiに冗長して格納する場合も、以降において、ノード数が増減しても元のノード間での重み付け関数値gf_ik,c_iの大小関係は不変のため、追加または削除するノードNi以外のノード間でデータDjは移動しない。また、ノード決定装置101によれば、ノードNiごとのノード名と関数f_iのペアを用いて、重み付け関数gによりデータDjを格納するノードNiを決定することができる。このため、データDjを格納するノードNiをキーkjごとに管理して、データDjを格納するノードNiを決定する手法に比べて、データDjの格納先を決定するための情報量を削減することができる。さらに、上記式1のような二つの引数をとる関数fを用いる場合、関数fとノードNiごとのノード名を用いてデータDjを格納するノードNiを決定することができるため、より情報量を削減することができる。また、ノード決定装置101によれば、関数f_iとして、関数値の頻度分布が十分に等しい関数を用いることで、重み付け関数gの引数となる関数値f_ikjを均等に分散させることができる。したがって、キーkjの値に依存してデータDjの格納先に偏りが生じることはない。また、ノード決定装置101によれば、関数f_1~f_nとして、関数値の頻度分布が十分に等しい関数を用いることで、データDjを冗長して格納する場合の重み付け関数gの引数となる関数値f_ikjを均等に分散させることができる。したがって、キーkjの値に依存してデータDjを冗長した格納先に偏りが生じることはない。これにより、例えば、データDjをノードN1~N3に冗長して格納している場合、ノードN1に障害が発生すると、いつもノードN2,N3に負荷がかかってしまうような状況を回避することができる。また、ノード決定装置101によれば、重み付け関数gとして、引数となる関数値f_ikの増加にともなって、重み付け関数値gf_ik,c_iが増加する関数、または、重み付け関数値gf_ik,c_iが減少する関数が採用される。また、ノード決定装置101によれば、重み付け関数gとして、引数となる指標値の増加にともなって、重み付け関数値gf_ik,c_iが増加する関数、または、重み付け関数値gf_ik,c_iが減少する関数が採用される。これにより、各ノードNiの指標値c_iを反映して、重み付け関数値gf_ik,c_iを算出することができ、各ノードNiの指標値c_iに応じて分散データストアDS内の各ノードNiにデータDjを分散させて格納することができる。また、ノード決定装置101によれば、重み付け関数gとして、重み付け関数の値域で定義される当該重み付け関数の値の大小関係が、ノードNiごとの指標値c_iの和に対するいずれかのノードNiの指標値c_iの割合で、いずれかのノードNiの重み付け関数値gf_ik,c_iが最大または最小になる関係である関数を採用できる。これにより、各ノードNiの指標値c_iを反映して、重み付け関数値gf_ik,c_iを算出することができ、各ノードNiの指標値c_iに応じて分散データストアDS内の各ノードNiにデータDjを分散させて格納することができる。なお、本実施の形態で説明したノード決定方法は、予め用意されたプログラムをパーソナルコンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ノード決定プログラムは、ハードディスク、フレキシブルディスク、CD-ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ノード決定プログラムは、インターネット等のネットワークを介して配布してもよい。上述した実施の形態に関し、さらに以下の付記を開示する。付記1複数のノードの中からデータを格納するノードを決定するコンピュータに、前記複数のノードに含まれるノードごとに異なる関数であって、当該関数の定義域が前記データを一意に特定するためのキーを含む前記関数を前記ノードごとに関連付け、格納するデータ量を示す前記ノードごとの指標値を前記ノードごとに関連付け、前記ノードごとの関数に前記キーをそれぞれ代入することにより、前記ノードごとの関数の値を算出し、定義域が前記ノードごとの関数の値と前記ノードごとの指標値との組み合わせを含む重み付け関数であって、前記重み付け関数の値域で当該重み付け関数の値の大小関係が定義される前記重み付け関数に、前記ノードごとの関数の値と前記ノードごとの指標値とを代入することにより、前記重み付け関数の値を前記ノードごとに算出し、前記ノードごとの前記重み付け関数の値の大小関係に基づいて、前記データを格納するノードを決定し、決定結果を出力する、処理を実行させることを特徴とするノード決定プログラム。付記2前記ノードごとの前記重み付け関数の値の大小関係に基づいて、前記ノードごとの前記重み付け関数の値を並び換え、並び換えられた前記ノードごとの前記重み付け関数の値の順序にしたがって、前記複数のノードの中から所定数のノードを選択する処理を、前記コンピュータにさらに実行させ、前記決定する処理は、選択された前記所定数のノードを、前記データを格納するノードに決定することを特徴とする付記1に記載のノード決定プログラム。付記3前記複数のノードに新たなノードを追加する場合、前記複数のノードに格納されているデータごとに、前記各処理を前記コンピュータに実行させることを特徴とする付記1または2に記載のノード決定プログラム。付記4前記複数のノードからノードを削除する場合、当該ノードに格納されているデータごとに、前記各処理を前記コンピュータに実行させることを特徴とする付記1~3のいずれか一つに記載のノード決定プログラム。付記5前記関数は、前記キーを引数として与えることで固定長の乱数が得られる関数であることを特徴とする付記1~4のいずれか一つに記載のノード決定プログラム。付記6前記重み付け関数は、前記指標値の増加にともなって前記重み付け関数の値が増加する関数または前記指標値の増加に対して前記重み付け関数の値が減少する関数であることを特徴とする付記1~5のいずれか一つに記載のノード決定プログラム。付記7前記重み付け関数の値域で定義される当該重み付け関数の値の大小関係は、前記ノードごとの指標値の和に対するいずれかのノードの指標値の割合で、前記いずれかのノードの前記重み付け関数の値が最大または最小になる関係であることを特徴とする付記1~6のいずれか一つに記載のノード決定プログラム。付記8複数のノードの中からデータを格納するノードを決定するノード決定装置において、前記複数のノードに含まれるノードごとに異なる関数であって、当該関数の定義域が前記データを一意に特定するためのキーを含む前記関数を前記ノードごとに関連付ける第1の関連付け手段と、格納するデータ量を示す前記ノードごとの指標値を前記ノードごとに関連付ける第2の関連付け手段と、前記第1の関連付け手段によって関連付けられた前記ノードごとの関数に前記キーをそれぞれ代入することにより、前記ノードごとの関数の値を算出する第1の算出手段と、定義域が前記ノードごとの関数の値と前記ノードごとの指標値との組み合わせを含む重み付け関数であって、前記重み付け関数の値域で当該重み付け関数の値の大小関係が定義される前記重み付け関数に、前記ノードごとの関数の値と前記ノードごとの指標値とを代入することにより、前記重み付け関数の値を前記ノードごとに算出する第2の算出手段と、前記第2の算出手段によって算出された前記ノードごとの前記重み付け関数の値の大小関係に基づいて、前記データを格納するノードを決定する決定手段と、前記決定手段によって決定された決定結果を出力する出力手段と、を備えることを特徴とするノード決定装置。付記9複数のノードの中からデータを格納するノードを決定するコンピュータが、前記複数のノードに含まれるノードごとに異なる関数であって、当該関数の定義域が前記データを一意に特定するためのキーを含む前記関数を前記ノードごとに関連付け、格納するデータ量を示す前記ノードごとの指標値を前記ノードごとに関連付け、前記ノードごとの関数に前記キーをそれぞれ代入することにより、前記ノードごとの関数の値を算出し、定義域が前記ノードごとの関数の値と前記ノードごとの指標値との組み合わせを含む重み付け関数であって、前記重み付け関数の値域で当該重み付け関数の値の大小関係が定義される前記重み付け関数に、前記ノードごとの関数の値と前記ノードごとの指標値とを代入することにより、前記重み付け関数の値を前記ノードごとに算出し、前記ノードごとの前記重み付け関数の値の大小関係に基づいて、前記データを格納するノードを決定し、決定結果を出力する、処理を実行することを特徴とするノード決定方法。"