"キーと対応付けてデータを格納する複数のノードを有しておりキーに応じてアクセス先のノードが判定されるシステムが実行するストレージ制御方法であって、第1のキーと第1のデータとを取得したとき、前記第1のキーに応じた第1のノードに前記第1のキーと対応付けて第2のキーを示す第2のデータを格納し、第2のノードに前記第2のキーと対応付けて前記第1のデータを格納し、前記第1のキーを指定したアクセス要求を取得したとき、前記第1のノードに前記第1のキーと対応付けて格納されているデータが前記第2のデータであることを検出し、前記第2のデータが示す前記第2のキーに基づいて、前記第2のノードに格納された前記第1のデータにアクセスする、ストレージ制御方法。前記第1のキーと前記第1のデータとを取得したとき、前記第1のノードのデータ格納状況およびアクセス処理状況の少なくとも一方に基づいて、前記第1のデータを前記第1のノードに代えて前記第2のノードに格納することを決定する、請求項1記載のストレージ制御方法。前記第1のキーと前記第1のデータとを取得したとき、前記複数のノードのデータ格納状況およびアクセス処理状況の少なくとも一方に基づいて、前記複数のノードの中から前記第2のノードを選択する、請求項1または2記載のストレージ制御方法。前記第1のデータを前記第2のノードに格納することは、前記第1のノードによって行われるか、または、前記第1のデータの格納を要求するクライアント装置によって行われる、請求項1乃至3の何れか一項に記載のストレージ制御方法。前記第1のキーと対応付けられたデータが前記第2のデータであることの検出および前記第2のノードへのアクセスは、前記第1のノードによって行われるか、または、前記アクセス要求を送信するクライアント装置によって行われる、請求項1乃至4の何れか一項に記載のストレージ制御方法。キーと対応付けてデータを格納する複数のノードを有しておりキーに応じてアクセス先のノードが判定されるシステムに用いられる情報処理装置であって、キーとノードとの対応関係を示す情報であって、少なくとも第1のキーに第1のノードが対応し第2のキーに第2のノードが対応することを示す情報を記憶する記憶部と、前記第1のキーと第1のデータとを取得したとき、前記第1のノードに前記第1のキーと対応付けて前記第2のキーを示す第2のデータが格納され、前記第2のノードに前記第2のキーと対応付けて前記第1のデータが格納されるよう制御し、また、前記第1のキーを指定したアクセス要求を取得したとき、前記第1のキーと対応付けて格納されているデータが前記第2のデータであることを検出し、前記第2のデータが示す前記第2のキーに基づいて、前記第2のノードに格納された前記第1のデータにアクセスする制御部と、を有する情報処理装置。キーと対応付けてデータを格納する複数のノードを有しておりキーに応じてアクセス先のノードが判定されるシステムの制御に用いるプログラムであって、コンピュータに、第1のキーと第1のデータとを取得したとき、前記第1のキーに応じた第1のノードに前記第1のキーと対応付けて第2のキーを示す第2のデータが格納され、第2のノードに前記第2のキーと対応付けて前記第1のデータが格納されるよう制御し、前記第1のキーを指定したアクセス要求を取得したとき、前記第1のキーと対応付けて格納されているデータが前記第2のデータであることを検出し、前記第2のデータが示す前記第2のキーに基づいて、前記第2のノードに格納された前記第1のデータにアクセスする、処理を実行させるプログラム。キーに基づいてアクセス先のストレージノードが判定される分散ストレージシステムでは、キーとストレージノードとの対応関係を設定した後、ストレージノード間でデータ量や受付アクセス数に偏りが生じることがある。しかし、設定した対応関係に従ってデータの配置先ノードを選択している限り、偏りを解消することは困難となる。一側面では、本発明は、データの配置を柔軟化することができるストレージ制御方法、情報処理装置およびプログラムを提供することを目的とする。一実施態様では、キーと対応付けてデータを格納する複数のノードを有しておりキーに応じてアクセス先のノードが判定されるシステムが実行するストレージ制御方法が提供される。このストレージ制御方法では、第1のキーと第1のデータとを取得したとき、第1のキーに応じた第1のノードに第1のキーと対応付けて第2のキーを示す第2のデータを格納し、第2のノードに第2のキーと対応付けて第1のデータを格納する。第1のキーを指定したアクセス要求を取得したとき、第1のノードに第1のキーと対応付けて格納されているデータが第2のデータであることを検出し、第2のデータが示す第2のキーに基づいて、第2のノードに格納された第1のデータにアクセスする。また、一実施態様では、キーと対応付けてデータを格納する複数のノードを有しておりキーに応じてアクセス先のノードが判定されるシステムに用いられる情報処理装置が提供される。この情報処理装置は、記憶部と制御部とを有する。記憶部は、キーとノードとの対応関係を示す情報であって、少なくとも第1のキーに第1のノードが対応し第2のキーに第2のノードが対応することを示す情報を記憶する。制御部は、第1のキーと第1のデータとを取得したとき、第1のノードに第1のキーと対応付けて第2のキーを示す第2のデータが格納され、第2のノードに第2のキーと対応付けて第1のデータが格納されるよう制御する。また、制御部は、第1のキーを指定したアクセス要求を取得したとき、第1のキーと対応付けて格納されているデータが第2のデータであることを検出し、第2のデータが示す第2のキーに基づいて、第2のノードに格納された第1のデータにアクセスする。また、一実施態様では、コンピュータに実行させるプログラムであって、キーと対応付けてデータを格納する複数のノードを有しておりキーに応じてアクセス先のノードが判定されるシステムの制御に用いるプログラムが提供される。一実施態様によれば、複数のノードへのデータの配置を柔軟化することができる。以下、本実施の形態を図面を参照して説明する。[第1の実施の形態]図1は、第1の実施の形態の情報処理システムを示す図である。第1の実施の形態の情報処理システムは、キーkeyと対応付けてデータvalueを格納する複数のノードを有しておりキーに応じてアクセス先のノードが判定されるシステムである。この情報処理システムは、情報処理装置1、第1のノード2および第2のノード2aを含む。ノードとは、内蔵または外付けの記憶装置を備え、当該記憶装置にデータを保持できる情報処理装置である。情報処理装置1、第1のノード2および第2のノード2aは、ネットワークで接続されている。情報処理装置1は、CPUCentralProcessingUnitなどのプロセッサとRAMRandomAccessMemoryなどのメモリとを備えてもよく、メモリに記憶されたプログラムをプロセッサが実行するコンピュータであってもよい。情報処理装置1は、記憶部1a、および制御部1bを有する。記憶部1aは、キーとノードとの対応関係を示す情報を記憶する。この情報には、第1のキーkey1に第1のノード2が対応し第2のキーkey2に第2のノード2aが対応することを示す情報が含まれる。記憶部1aは、RAMやHDDHardDiskDriveによって実装されてもよい。制御部1bは、第1のキーkey1と第1のデータvalue1とを取得する。すると、制御部1bは、第1のキーkey1と対応付けて第2のキーkey2を示す第2のデータvalue2が第1のノード2に格納され、第2のキーkey2と対応付けて第1のデータvalue1が第2のノード2aに格納されるよう制御する。なお、第2のデータvalue2は、第2のキーkey2自体でもよいし、第2のキーkey2自体でなくてもよい。例えば、第2のデータvalue2は、第2のキーkey2中の所定のプレフィックスを省略したデータでもよい。また、制御部1bは、第1のキーkey1を指定したアクセス要求を取得する。すると、制御部1bは、第1のキーkey1と対応付けて格納されているデータが第2のデータvalue2であることを検出する。そして、制御部1bは、第2のデータvalue2が示す第2のキーkey2に基づいて、第2のノード2aに格納された第1のデータvalue1にアクセスする。例えば、制御部1bは、次のような方法により第2のデータを検出することが考えられる。第1の方法は、制御部1bが、第2のデータを格納するとき、第2のデータであることを示す所定の制御情報例えば、フラグも、第1のキーに対応付けて第1のノード2に設定しておく方法である。この場合、第1のキーに対応する当該制御情報に基づいて、第1のキーに対応するデータが第2のデータであることを検出できる。第2の方法は、第2のデータを検出するための所定のルール所定の文字列を含むなどを予め定義しておく方法である。この場合、第1のキーに対応するデータが当該ルールに合致するか否かにより、第2のデータを検出できる。情報処理装置1によれば、制御部1bにより、第1のキーと第1のデータとが取得されたとき、第1のノード2に第1のキーと対応付けて第2のキーを示す第2のデータが格納され、第2のノード2aに第2のキーと対応付けて第1のデータが格納されるよう制御される。また、制御部1bにより、第1のキーを指定したアクセス要求が取得されたとき、第1のキーと対応付けて格納されているデータが第2のデータであることが検出され、第2のデータが示す第2のキーに基づいて、第2のノードに格納された第1のデータにアクセスされる。これにより、複数のノードへのデータの配置を柔軟化することができる。具体的には、キーに基づいて配置先が決定されるKVSにおいて、第1のキーによりデータの配置先が決定されても、当該データの代わりに第2のキーを当該配置先に配置することで、データの実体を別の装置に配置できる。例えば、第1のキーにより決定された配置先の空き容量が少ないときに、データの実体を他のノードに配置すれば、データ量の偏りを分散できる。第2のキーは、単にデータへのリンクを示す情報であるため、データの実体よりもデータサイズが小さい可能性が高いためである。また、例えば、第1のキーにより決定された配置先の負荷が大きい時に、データの実体を他のノードに配置すれば、負荷を分散することもできる。なお、制御部1bの機能は、第1のノード2および第2のノード2aが備えてもよい。その場合、例えば、第1のノード2が、自身への第1のデータvalue1の書込み時に、key,valueのペアkey1,value2を自身に格納する。そして、第1のノード2が、key,valueのペアkey2,value1を第2のノード2aに格納させる。更に、第1のキーkey1を指定したアクセス時には、第1のノード2が、第1のキーkey1に対し、第2のデータvalue2を検出する。すると、第1のノード2が、第2のデータvalue2で示される第2のキーkey2を指定して、第2のノード2aに格納された第1のデータvalue1にアクセスする。このようにしても、同様にデータの配置を柔軟化できる。[第2の実施の形態]図2は、第2の実施の形態の分散ストレージシステムを示す図である。第2の実施の形態の分散ストレージシステムは、KVSの手法によりデータを複数のストレージノードに分散配置する。第2の実施の形態の分散ストレージシステムは、ストレージノード100,100a,100b、ディスク装置200,200a,200bおよびクライアント300,300aを含む。ネットワーク10には、ストレージノード100,100a,100bおよびクライアント300が接続されている。ネットワーク10はLANLocalAreaNetworkでもよい。ネットワーク10はインターネットなどの広域ネットワークでもよい。ストレージノード100には、ディスク装置200が接続されている。ストレージノード100aには、ディスク装置200aが接続されている。ストレージノード100bには、ディスク装置200bが接続されている。ストレージノード100,100a,100bとディスク装置200,200a,200bとの間のインタフェースには、例えばSCSISmallComputerSystemInterfaceやファイバチャネルFibreChannelなどを用いてもよい。ストレージノード100,100a,100bは、それぞれディスク装置200,200a,200bに対するデータの書込みWrite、データの読出しReadおよびデータの削除Deleteなどを実行するサーバコンピュータである。ディスク装置200,200a,200bは、データを記憶する記憶装置である。ディスク装置200,200a,200bは、HDDやSSDSolidStateDriveなどの記憶デバイスを備える。ディスク装置200,200a,200bは、ストレージノード100,100a,100bに内蔵されてもよい。クライアント300,300aは、分散ストレージシステムに格納されたデータにアクセスするクライアントコンピュータである。例えば、クライアント300,300aは、ユーザが操作する端末装置である。クライアント300,300aは、ストレージノード100,100a,100bに対し、データのアクセス要求を行う。アクセス要求には、データの書込み要求Write要求、データの読出し要求Read要求およびデータの削除要求Delete要求が含まれる。ここで、ディスク装置200,200a,200bは、キーkeyとデータvalueのペアkey,valueを記憶する。ストレージノード100,100a,100bは、キーを指定したデータのWrite要求があると、当該キーに対応するデータを書込む。ストレージノード100,100a,100bは、キーを指定したデータのRead要求があると、当該キーに対応するデータを読み出す。ストレージノード100,100a,100bは、キーを指定したデータのDelete要求があると、当該キーに対応するデータをキーとともに削除する。ストレージノード100,100a,100bは、何れのストレージノードがデータを保持するかを、キーから算出されるハッシュ値に基づいて判断する。キーに対するハッシュ値は、例えば、MD5MessageDigestalgorithm5を用いて算出できる。SHASecureHashAlgorithmなど他のハッシュ関数を用いてもよい。このように、キーに対するハッシュ値に基づいて担当のストレージノード以下、担当ノードということがあるを判定する方法は、コンシステントハッシングConsistentHashingと呼ばれることがある。図3は、第2の実施の形態のストレージノードのハードウェア例を示す図である。ストレージノード100は、CPU101、RAM102、HDD103、ディスクI/FInterFace部104、画像信号処理部105、入力信号処理部106、ディスクドライブ107および通信部108を有する。各ユニットがストレージノード100のバスに接続されている。ストレージノード100a,100bおよびクライアント300,300aもストレージノード100と同様のハードウェアを用いて実装できる。CPU101は、ストレージノード100の情報処理を制御するプロセッサである。CPU101は、HDD103に記憶されているプログラムやデータの少なくとも一部を読出し、RAM102に展開してプログラムを実行する。なお、ストレージノード100は、複数のプロセッサを設けて、プログラムを分散して実行してもよい。RAM102は、CPU101が実行するプログラムや処理に用いるデータを一時的に記憶する揮発性メモリである。なお、ストレージノード100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えていてもよい。HDD103は、OSOperatingSystemプログラムやアプリケーションプログラムなどのプログラムおよびデータを記憶する不揮発性の記憶装置である。HDD103は、CPU101の命令に従って、内蔵の磁気ディスクに対してデータの読み書きを行う。なお、ストレージノード100は、HDD以外の種類の不揮発性の記憶装置例えば、SSDなどを備えてもよく、複数の記憶装置を備えていてもよい。ディスクI/F部104は、ディスク装置200と接続するためのインタフェースである。ディスクI/F部104は、例えば、SCSIやファイバチャネルなどのインタフェースである。画像信号処理部105は、CPU101の命令に従って、ストレージノード100に接続されたディスプレイ11に画像を出力する。ディスプレイ11としては、例えば、CRTCathodeRayTubeディスプレイや液晶ディスプレイを用いることができる。入力信号処理部106は、ストレージノード100に接続された入力デバイス12から入力信号を取得し、CPU101に出力する。入力デバイス12としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。ディスクドライブ107は、記録媒体13に記録されたプログラムやデータを読み取る駆動装置である。記録媒体13として、例えば、フレキシブルディスクFD:FlexibleDiskやHDDなどの磁気ディスク、CDCompactDiscやDVDDigitalVersatileDiscなどの光ディスク、光磁気ディスクMO:MagnetoOpticaldiskを使用できる。ディスクドライブ107は、例えば、CPU101の命令に従って、記録媒体13から読み取ったプログラムやデータをRAM102またはHDD103に格納する。通信部108は、ネットワーク10を介してストレージノード100,100a,100bおよびクライアント300,300aと通信を行う通信インタフェースである。通信部108は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。図4は、第2の実施の形態のソフトウェア例を示すブロック図である。図4に示すユニットの一部または全部は、ストレージノード100,100a,100bおよびクライアント300,300aが実行するプログラムのモジュールであってもよい。図4に示すユニットの一部または全部は、FPGAFieldProgrammableGateArrayやASICApplicationSpecificIntegratedCircuitなどの電子回路であってもよい。ストレージノード100a,100bもストレージノード100と同様のユニットを用いて実装できる。クライアント300aもクライアント300と同様のユニットを用いて実装できる。ストレージノード100は、記憶部110、ネットワークI/OInputOutput部120、ディスクI/O部130、アクセス受付部140、ノード決定部150および他ノードアクセス部160を有する。記憶部110は、担当管理テーブルおよびポインタ管理テーブルを記憶する。担当管理テーブルは、ハッシュ値に対する担当ノードを管理するための情報である。ポインタ管理テーブルは、ポインタキーpointerkeyと、当該ポインタキーと対応付けたデータを投入したストレージノード以下、投入先ノードということがあるを管理するための情報である。ポインタキーは、投入先ノードへのリンクを定義するための情報である。ネットワークI/O部120は、クライアント300,300aからアクセス要求を受信し、アクセス受付部140に出力する。ネットワークI/O部120は、他ノードアクセス部160から取得したストレージノード100a,100bへのアクセス要求をストレージノード100a,100bへ送信する。他ノードアクセス部160は、ストレージノード100a,100bから受信したデータを他ノードアクセス部160に出力する。ネットワークI/O部120は、アクセス受付部140および他ノードアクセス部160から取得したデータをクライアント300,300aに送信する。ディスクI/O部130は、ノード決定部150から取得したキーおよびデータのペアをディスク装置200に書込む。ディスクI/O部130は、ノード決定部150から指定されたキーに応じたデータをディスク装置200から読出し、ノード決定部150に出力する。アクセス受付部140は、ネットワークI/O部120から取得したアクセス要求をノード決定部150に出力する。アクセス受付部140は、ノード決定部150から取得したデータを、ネットワークI/O部120を介して、アクセス要求元のクライアント300,300aへ応答する。ノード決定部150は、記憶部110に記憶された担当管理テーブルに基づいて、アクセス先の担当ノードを判断する。ノード決定部150は、自ノードストレージノード100が担当ノードであれば、キーに対するデータアクセス書込み、読出し、削除などをディスクI/O部130に指示する。ノード決定部150は、ディスクI/O部130によるアクセス結果書込み完了や読出しデータなどをアクセス受付部140に出力する。ノード決定部150は、他ノードストレージノード100a,100bが担当ノードであれば、他ノードへのアクセス要求を行うよう他ノードアクセス部160に指示する。ここで、ノード決定部150は、Write要求に対する担当ノードが自ノードの場合、自ノードの利用状況に応じて、データの実体を格納する投入先ノードを決定する。ノード決定部150は、自ノード以外を投入先ノードとして決定した場合、当該投入先ノードへリンクするためのポインタキーを生成し、ディスク装置200にはキーと対応付けたポインタキーを格納する。そして、ノード決定部150は、ポインタキーと対応付けたデータの実体を記憶するよう、投入先ノードに依頼する。自ノードが投入先ノードであれば、指定されたキーに対応付けたデータをディスク装置200に格納する。また、ノード決定部150は、Read要求に対する担当ノードが自ノードで、読み出されたデータがポインタキーである場合、記憶部110に記憶されたポインタ管理テーブルに基づいて、投入先ノードを判断する。ノード決定部150は、他ノードアクセス部160により、ポインタキーに対するデータを投入先ノードから取得させ、要求元のクライアント300,300aに応答させる。読出したデータがポインタキーでなければ、当該データを要求元のクライアント300,300aに応答する。更に、ノード決定部150は、Delete要求に対する担当ノードが自ノードで、指定されたキーに対するデータがポインタキーである場合、記憶部110に記憶されたポインタ管理テーブルに基づいて、投入先ノードを判断する。ノード決定部150は、他ノードアクセス部160により、ポインタキーに対するデータを投入先ノードに削除させる。読出したデータがポインタキーでなければ、指定されたキーに対応付けたデータをディスク装置200から削除する。他ノードアクセス部160は、ノード決定部150の指示により、他ノードへのアクセス要求を生成し、ネットワークI/O部120を介して、他ノードへ送信する。また、他ノードアクセス部160は、ネットワークI/O部120を介して、他ノードから受信したデータを、アクセス要求元のクライアント300,300aへ応答する。クライアント300は、記憶部310、ネットワークI/O部320およびアクセス部330を有する。記憶部310は、クライアント300が扱うデータを記憶する。ネットワークI/O部320は、アクセス部330から取得したアクセス要求をストレージノード100,100a,100bの何れか例えば、ストレージノード100に送信する。ネットワークI/O部320は、当該アクセス要求に対するストレージノード100,100a,100bからの応答を受信し、アクセス部330に出力する。アクセス部330は、所定のアプリケーションによるデータアクセスに応じて、アクセス要求を生成し、ネットワークI/O部320に出力する。アクセス要求には、上述したようにWrite要求、Read要求およびDelete要求が含まれる。アクセス部330は、各アクセス要求にアクセス対象のデータに対するキーkeyを含める。キーは、例えば、アプリケーションにより指定される。アクセス部330にデータアクセスを行わせるアプリケーションは、図4では図示を省略している。当該アプリケーションは、クライアント300上で、例えばクライアント300が実行するプログラムにより実装されるものでもよいし、他の情報処理装置上に実装されるものでもよい。なお、第2の実施の形態のストレージノード100は、第1の実施の形態の情報処理装置1の一例である。ノード決定部150および他ノードアクセス部160は、制御部1bの一例である。図5は、第2の実施の形態のハッシュ値の担当範囲の割当例を示す図である。第2の実施の形態の分散ストレージシステムでは、利用可能なハッシュ値の全範囲は0~99である。ただし、99の次の値は0である。当該全範囲を3つに分割した範囲それぞれがストレージノード100,100a,100bに割り当てられている。ここで、ラベルAは、ストレージノード100の識別情報である。ラベルBは、ストレージノード100aの識別情報である。ラベルCは、ストレージノード100bの識別情報である。各ラベルの位置は、各担当範囲の開始位置である。図5では、各ラベル位置に対応する値を含むハッシュ値範囲R1,R2,R3が示されている。ハッシュ値範囲R1は10~39であり、ストレージノード100の担当範囲である。ハッシュ値範囲R2は40~89であり、ストレージノード100aの担当範囲である。ハッシュ値範囲R3は90~99、0~9であり、ストレージノード100bの担当範囲である。ハッシュ値範囲R3は、99および0を跨いだ領域である。第2の実施の形態の分散ストレージシステムでは、担当範囲の一端の値を、ストレージノード100,100a,100bに対して指定することで、ストレージノード100,100a,100bの担当範囲を割り当てる。例えば、担当範囲の両端の値のうち小さい方開始位置を指定する場合、ストレージノード100にハッシュ値10を、ストレージノード100aにハッシュ値40を指定する。これにより、ストレージノード100の担当範囲が10~39となる。ハッシュ値範囲R3のように、当該範囲が0を跨ぐ場合には、例外として、両端の値のうち大きい方が開始位置となる。この場合、例えば、ハッシュ値90を指定することで、0を跨いだ範囲を指定できる。なお、担当範囲の両端の値のうち大きい方終了位置を指定して、担当範囲を割り当ててもよい。例えば、ストレージノード100にハッシュ値39を、ストレージノード100aにハッシュ値89を、ストレージノード100bにハッシュ値9を指定する。すると、図5で示したハッシュ値範囲R1,R2,R3と同等の担当範囲を、ストレージノード100,100a,100bに割り当てることができる。この場合も、0を跨ぐ範囲については、例外として、両端の値のうち小さい方が終了位置となる。よって、両端の値のうち小さい方を指定することで、0を跨いだ範囲を指定できる。以下の説明では、ストレージノード100,100a,100bに、担当範囲の開始位置を指定することで、当該担当範囲を割り当てるものとする。図6は、第2の実施の形態の担当管理テーブルの例を示す図である。担当管理テーブル111は、記憶部110に格納される。担当管理テーブル111には、nodeおよび開始位置の項目が設けられている。nodeの項目には、ストレージノードのラベルが登録される。開始位置の項目には、担当範囲の開始位置に対応する値が登録される。担当管理テーブル111は、図5の担当割当を定義したものである。図7は、第2の実施の形態のポインタ管理テーブルの例を示す図である。ポインタ管理テーブル112は、記憶部110に格納される。ポインタ管理テーブル112には、pinterkeyおよびnodeの項目が設けられている。pointerkeyの項目には、ポインタキーが登録される。nodeの項目には、ストレージノードのラベルが登録される。例えば、pinterkeyがpointer01でnodeがBであれば、当該pointer01はストレージノード100bへのリンクである。図8は、第2の実施の形態のデータストアの第1の例を示す図である。データストア210は、ディスク装置200に格納される。データストア210では、データvalueが、キーkeyに対応付けて格納される。更に、データvalueがポインタキーであるか否かを示すフラグflagが、キーkeyに対応付けて格納される。フラグがtrueであれば、データはポインタキーである。フラグがfalseであれば、データはポインタキーでない。例えば、キーkey01ではフラグがtrueである。よって、キーkey01に対するデータpointer01はポインタキーである。また、例えば、キーkey02ではフラグがfalseである。よって、キーkey02に対するデータvalue02はポインタキーではない。ノード決定部150は、データの書込みを行う際に、キーに対するフラグの設定も行う。図9は、第2の実施の形態のデータストアの第2の例を示す図である。データストア210aは、ディスク装置200aに格納される。データストア210aのデータ構造は、データストア210と同一である。例えば、データストア210aでは、キーpointer01ではフラグがfalseである。よって、キーpointer01に対するデータvalue01はポインタキーではない。図10は、第2の実施の形態のWrite処理を示すフローチャートである。以下、図10に示す処理をフローチャートに沿って説明する。ステップS11ネットワークI/O部120は、クライアント300からWrite要求を受信する。ネットワークI/O部120は、アクセス受付部140を介して、当該Write要求をノード決定部150に出力する。例えば、Write要求には、キーkey01およびデータvalue01が含まれる。ステップS12ノード決定部150は、Write要求に含まれるキーに基づいてハッシュ値を計算する。ステップS13ノード決定部150は、記憶部110に記憶された担当管理テーブル111に基づいて、算出したハッシュ値の担当ノードが自ノードであるか否かを判定する。担当が自ノードでない場合、処理をステップS14に進める。担当が自ノードである場合、処理をステップS15に進める。ステップS14ノード決定部150は、ネットワークI/O部120を介して、担当ノードにWrite要求を転送する。当該Write要求を受信した担当ノードは、自身に接続されたディスク装置にデータを書込み、クライアント300に結果を応答する。そして、処理を終了する。ステップS15ノード決定部150は、データの実体を投入する投入先ノードを決定するか否かを判定する。決定する場合、処理をステップS16に進める。決定しない場合、処理をステップS18に進める。ノード決定部150は、投入先ノードを決定するか否かを、例えば、次の12の何れか、または、両方の基準により判断できる。1ディスク装置200の空き容量が所定値よりも小さい。2投入するデータのサイズが閾値よりも大きい。両方の基準を用いる場合、例えば、両方の条件が満たされたときに投入先ノードを決定する、あるいは、何れか一方の条件が満たされたときに投入先ノードを決定する、などと判断することが考えられる。なお、他の基準を用いてもよい。ステップS16ノード決定部150は、投入先ノードを決定する。手順の詳細は後述する。ステップS17ノード決定部150は、決定した投入先ノードが自ノードであるか否かを判定する。投入先が自ノードである場合、処理をステップS18に進める。投入先が自ノードではない場合、処理をステップS19に進める。ステップS18ノード決定部150は、ディスク装置200へのデータvalueの書込みをディスクI/O部130に指示する。同時に、データに対応するキーkeyおよびフラグflagの書込みを指示する。キーkeyは、Write要求で指定されたキーである。フラグflagは、falseである。ディスクI/O部130は、key,value,flagの組をディスク装置200に書込み、結果をノード決定部150に応答する。すると、ノード決定部150は、ネットワークI/O部120を介して、クライアント300に書込み結果を応答する。この場合、例えば、データストア210に、key01,value01,falseの組が書込まれる。そして、処理を終了する。ステップS19ノード決定部150は、ポインタキーpointerkeyを求める。手順の詳細は後述する。例えば、ポインタキーpointer01が求められる。ステップS20ノード決定部150は、ポインタキーとWrite対象のデータvalueとのペアの書込みを投入先ノードに依頼するように、他ノードアクセス部160に指示する。他ノードアクセス部160は、ネットワークI/O部120を介して、投入先ノードに当該依頼を送信する。投入先ノードは、指定されたkey,value,flagの組を自身に接続されたディスク装置に格納する。ここで、flagの値はfalseである。例えば、投入先ノードがストレージノード100aである場合、データストア210aに、pointer01,value01,falseの組が書込まれる。他ノードアクセス部160は、投入先ノードから書込み結果の応答を受信する。ノード決定部150は、書込み依頼したポインタキーと投入先ノードのラベルとを対応付けて、記憶部110に記憶されたポインタ管理テーブル112に記録する。ステップS21ノード決定部150は、ディスク装置200へのポインタキーの書込みをディスクI/O部130に指示する。キーkeyは、Write要求で指定されたキーである。データvalueは、ステップS19で決定したポインタキーである。フラグflagは、trueである。ディスクI/O部130は、key,pointerkey,flagの組をディスク装置200に書込み、結果をノード決定部150に応答する。この場合、例えば、データストア210に、key01、pointer01,trueの組が書込まれる。ノード決定部150は、ネットワークI/O部120を介して、クライアント300に書込み結果を応答する。このように、ストレージノード100は、データの実体を他のノードに配置できる。その場合、ストレージノード100には、データの実体の代わりに、他のノードへのリンクを示すポインタキーをディスク装置200に格納する。そして、他のノードには、当該ポインタキーと対応付けたデータの実体を格納させる。データのアップデートの際は、ポインタキーによるリンクを辿ってデータの実体を更新する。なお、ステップS15では、データの投入先ノードを再決定するか否かの基準12を例示したが、他の基準により判断してもよい。例えば、自ノードの負荷を示す指標例えば、CPU利用率やアクセス数などが所定期間、連続して所定値よりも大きい場合に、投入先ノードを決定するようにしてもよい。次に、ステップS16の手順を説明する。図11は、第2の実施の形態の投入先ノード決定処理を示すフローチャートである。以下、図11に示す処理をステップ番号に沿って説明する。ステップS31ノード決定部150は、ストレージノード100,100a,100bそれぞれに接続されたディスク装置200,200a,200bの使用状況を取得する。使用状況には、各ノードに接続されたディスク装置の使用済容量と空き容量とが含まれる。例えば、ノード決定部150は、ストレージノード100,100a,100bから定期的に使用状況を取得して記憶部110に格納しておくことで、記憶部110から当該使用状況を取得できる。また、例えば、ノード決定部150は、当該ステップS31において、ストレージノード100,100a,100bから現在の使用状況を取得してもよい。ステップS32ノード決定部150は、空き容量が所定値以上で使用済容量が最小のノードを、投入先ノードとして選択する。このように、ストレージノード100は、ストレージノード100,100a,100bのうちから容量に余裕のあるノードを投入先ノードとする。ただし、他の基準により投入先ノードを決定してもよい。当該基準は、運用方針に応じて選択できる。例えば以下のABの各目的に応じて、A1~A3、B1~B3の何れか、または、複数の基準により投入先ノードを選択することが考えられる。Aディスク装置200,200a,200bのデータ量を分散したい場合A1空き容量が一定以上あり、使用済容量が最小のノードを選択する。A2空き容量が最大のノードを選択する。A3ディスク装置の全容量に対する使用割合が最小のノードを選択する。B負荷を分散したい場合B1ディスク装置のbusy率が最小のノードを選択する。B2I/O数が最小のノードを選択する。B3ネットワーク使用率が最小のノードを選択する。何れの選択方法を採用するかは、例えば、分散ストレージシステムの管理者によって各ストレージノードに予め設定される。複数の基準を用いる場合には、複数の基準が選択される。例えば、A1とA2を組み合わせる場合、A1の使用済容量が最小という条件に幅をもたせて複数のノードを選択可能とする例えば、使用済容量が小さいノードを3つ選択するなど。そして、選択した複数のノードの中からA2の空き容量が最大のノードを選択することが考えられる。また、例えば、A3とB1を組み合わせる場合、A3のディスク装置の使用割合が最小という条件に幅をもたせて複数のノードを選択可能とする例えば、使用割合が小さいノードを5つ選択するなど。そして、選択した複数のノードの中からB1のbusy率最小のノードを選択することが考えられる。ノード決定部150は、各基準に応じた判断が行えるように、ストレージノード100,100a,100bから、基準に応じた情報ディスク装置の空き容量やbusy率などを含む使用状況を取得する。次に、図10のステップS19の手順を説明する。図12は、第2の実施の形態のポインタキー決定処理を示すフローチャートである。以下、図12に示す処理をステップ番号に沿って説明する。ステップS41ノード決定部150は、乱数を発生させる。ノード決定部150は、所定の疑似乱数生成アルゴリズムにより、乱数を生成できる。ここで発生させた乱数は、ポインタキー候補である。ステップS42ノード決定部150は、投入先ノードで既にポインタキー候補がポインタキーとして使用済であるか否かを判定する。使用済の場合、処理をステップS41に進める。未使用の場合、処理をステップS43に進める。例えば、ノード決定部150は、ポインタキー候補と同一のポインタキーと対応付けたデータを、データストアに格納済であるかを投入先ノードに問い合わせることで、当該判定を行える。格納済であれば、当該ポインタキー候補は使用済である。未格納であれば、当該ポインタキー候補は未使用である。ステップS43ノード決定部150は、ステップS41で生成した乱数をポインタキーに決定する。このようにして、ストレージノード100は、1つの投入先ノードに対して重複しないようにポインタキーを決定する。ここで、ポインタキーとして、通常のキーから算出されるハッシュ値と衝突しないものを選ぶことが望ましい。例えば、当該ハッシュ値の数値列とは異なる桁数で乱数を発生させてポインタキーを決定することが好ましい。図13は、第2の実施の形態のRead処理を示すフローチャートである。以下、図13に示す処理をステップ番号に沿って説明する。ステップS51ネットワークI/O部120は、クライアント300からRead要求を受信する。ネットワークI/O部120は、アクセス受付部140を介して、当該Read要求をノード決定部150に出力する。例えば、Read要求には、キーkey01が含まれる。ステップS52ノード決定部150は、Read要求に含まれるキーに基づいてハッシュ値を計算する。ステップS53ノード決定部150は、記憶部110に記憶された担当管理テーブル111に基づいて、算出したハッシュ値の担当ノードが自ノードであるか否かを判定する。担当が自ノードでない場合、処理をステップS54に進める。担当が自ノードである場合、処理をステップS55に進める。ステップS54ノード決定部150は、ネットワークI/O部120を介して、担当ノードにRead要求を転送する。当該Read要求を受信した担当ノードは、自身に接続されたディスク装置からデータを読出し、クライアント300に読出したデータを応答する。そして、処理を終了する。ステップS55ノード決定部150は、Read要求に含まれるキーkeyに対応するデータvalueをディスク装置200のデータストア210から取得する。例えば、キーkey01に対してデータpointer01を取得する。ステップS56ノード決定部150は、データvalueがポインタキーであるか否かを判定する。データがポインタキーでない場合、処理をステップS57に進める。データがポインタキーである場合、処理をステップS58に進める。データがポインタキーであるか否かは、キーkeyに対応するフラグflagに基づいて判定できる。フラグがtrueであれば、ポインタキーである。フラグがfalseであれば、ポインタキーでない。ステップS57ノード決定部150は、ステップS55で取得したデータをクライアント300に応答する。そして、処理を終了する。ステップS58ノード決定部150は、記憶部110に記憶されたポインタ管理テーブル112を参照し、ステップS55でデータvalueとして取得したポインタキーに基づいて、投入先ノードを特定する。例えば、ポインタキーpointer01であれば、投入先ノードはストレージノード100aラベルBである。ステップS59ノード決定部150は、ポインタキーをキーとして指定して、投入先ノードからデータvalueを取得するよう他ノードアクセス部160に依頼する。他ノードアクセス部160は、当該依頼に応じたRead要求を生成し、ネットワークI/O部120を介して投入先ノードに送信し、投入先ノードからポインタキーと対応付けられたデータを取得する。例えば、他ノードアクセス部160は、ポインタキーpointer01に対してデータvalue01をストレージノード100aから取得する。ステップS60他ノードアクセス部160は、ネットワークI/O部120を介して、投入先ノードから取得したデータをクライアント300に応答する。このように、ストレージノード100は、Read要求に含まれるキーに対し、データストア210からポインタキーを取得した場合、ポインタキーに基づいて投入先ノードを特定する。そして、当該ポインタキーに対応付けたデータを投入先ノードから取得し、クライアント300に応答する。図14は、第2の実施の形態のDelete処理を示すフローチャートである。以下、図14に示す処理をステップ番号に沿って説明する。ステップS61ネットワークI/O部120は、クライアント300からDelete要求を受信する。ネットワークI/O部120は、アクセス受付部140を介して、当該Delete要求をノード決定部150に出力する。例えば、Delete要求には、キーkey01が含まれる。ステップS62ノード決定部150は、Delete要求に含まれるキーに基づいてハッシュ値を算出する。ステップS63ノード決定部150は、記憶部110に記憶された担当管理テーブル111に基づいて、算出したハッシュ値の担当ノードが自ノードであるか否かを判定する。担当が自ノードでない場合、処理をステップS64に進める。担当が自ノードである場合、処理をステップS65に進める。ステップS64ノード決定部150は、ネットワークI/O部120を介して、担当ノードにDelete要求を転送する。当該Delete要求を受信した担当ノードは、自身に接続されたディスク装置からキーとデータとのペアを削除し、削除結果をクライアント300に応答する。そして、処理を終了する。ステップS65ノード決定部150は、Delete要求に含まれるキーkeyに対応するデータvalueをディスク装置200のデータストア210から取得する。例えば、キーkey01に対してデータpointer01を取得する。ステップS66ノード決定部150は、データvalueがポインタキーであるか否かを判定する。データがポインタキーでない場合、処理をステップS67に進める。データがポインタキーである場合、処理をステップS68に進める。データがポインタキーであるか否かは、図13のステップS56と同様にして判断できる。ステップS67ノード決定部150は、ステップS65で取得したデータの削除を、ディスクI/O部130に指示する。ディスクI/O部130は、データストア210から、当該key,value,flagの組を削除する。ノード決定部150は、ディスクI/O部130による削除結果をクライアント300に応答する。そして、処理を終了する。ステップS68ノード決定部150は、記憶部110に記憶されたポインタ管理テーブル112を参照し、ステップS65でデータvalueとして取得したポインタキーに基づいて、投入先ノードを特定する。例えば、ポインタキーpointer01であれば、投入先ノードはストレージノード100aラベルBである。ステップS69ノード決定部150は、ポインタキーをキーとして指定して、投入先ノードにデータvalueの削除要求をするように他ノードアクセス部160に依頼する。他ノードアクセス部160は、当該依頼に応じたDelete要求を生成し、ネットワークI/O部120を介して投入先ノードに送信して、投入先ノードにポインタキーと対応付けられたデータを削除させる。例えば、他ノードアクセス部160は、キーpointer01を指定したDelete要求をストレージノード100aに送信する。すると、ストレージノード100aのデータストア210aからkey,value,flagの組pointer01,value01,falseが削除される。他ノードアクセス部160は、投入先ノードから削除結果を受信する。ステップS70ノード決定部150は、ステップS65で取得したポインタキーのレコードをポインタ管理テーブル112から削除する。ノード決定部150は、当該ポインタキーの削除を、ディスクI/O部130に指示する。ディスクI/O部130は、データストア210から、当該key,value,flagの組を削除する。例えば、データストア210からkey01,pointer01,trueの組が削除される。このようにして、ストレージノード100は、Delete要求に含まれるキーに対し、データストア210からポインタキーを取得した場合、ポインタキーに基づいて投入先ノードを特定する。そして、当該ポインタキーに対応付けたデータを投入先ノードに削除させ、ストレージノード100自身が保持するポインタキーも削除する。以上のように第2の実施の形態のストレージノード100,100a,100bは、キーから算出されるハッシュ値により担当ノードが決定される場合でも、データの代わりに、キーと対応付けたポインタキーを担当ノードに格納する。そして、ポインタキーと対応付けたデータの実体を他のノードに配置する。これにより、データ配置の制限を緩和できる。例えば、ポインタキーは単にリンクを示す情報であるため、データの実体よりもデータサイズが小さい可能性が高い。このため、担当ノードの空き容量が少ないときにデータの実体を他のノードに配置すれば、データ量の偏りを分散できる。また、例えば、担当ノードの負荷が大きい時に、データの実体を他のノードに配置すれば、負荷を分散することもできる。更に、データの実体を投入する他のノード投入先ノードの選択方法として、運用に応じた基準を選択できる。例えば、データ量を分散したい場合や、負荷を分散したい場合など、目的ごとに種々の基準が考えられる。これにより、ストレージノード100,100a,100bにおけるデータ量の分散や負荷の分散を一層容易に行える。なお、データvalueの設定内容がポインタキーであるかを判断する方法としてフラグを用いたが別の方法を用いてもよい。例えば、ポインタキーが予め所定の文字列を含むことを定義しておけば、当該文字列を含むか否かに応じて、データvalueがポインタキーであるか否かを判断できる。[第3の実施の形態]以下、第3の実施の形態を説明する。前述の第2の実施の形態との相違点を主に説明し、同様の事項は説明を省略する。第2の実施の形態では、担当ノードや投入先ノードの判断をストレージノード100,100a,100bが実行するものとした。一方、クライアント300,300aが当該判断を行ってもよい。そこで、第3の実施の形態では、クライアント300,300aが当該判断を行う場合を例示する。ここで、第3の実施の形態の分散ストレージシステムの構成は、図2で説明した第2の実施の形態の分散ストレージシステムの構成と同様である。また、第3の実施の形態のストレージノードおよびクライアントのハードウェア例は、図3で説明した第2の実施の形態のストレージノード100のハードウェア例と同様である。第3の実施の形態では、特に断らない限り、第2の実施の形態で用いた符号名称と同一の符号名称により、同一の構成を指し示すものとする。ただし、第3の実施の形態では、各装置のソフトウェア例が第2の実施の形態とは異なる。図15は、第3の実施の形態のソフトウェア例を示すブロック図である。図15に示すユニットの一部または全部は、ストレージノード100,100a,100bおよびクライアント300,300aが実行するプログラムのモジュールであってもよい。図15に示すユニットの一部または全部は、FPGAやASICなどの電子回路であってもよい。ストレージノード100a,100bもストレージノード100と同様のユニットを用いて実装できる。クライアント300aもクライアント300と同様のユニットを用いて実装できる。ストレージノード100は、記憶部110a、ネットワークI/O部120a、ディスクI/O部130aおよびアクセス受付部140aを有する。記憶部110aは、担当管理テーブル111を記憶する。ネットワークI/O部120aは、クライアント300,300aから受信したデータをアクセス受付部140aに出力する。ネットワークI/O部120aは、アクセス受付部140aから取得したデータをクライアント300,300aに送信する。クライアント300,300aとの通信を中継する。ディスクI/O部130aは、アクセス受付部140aから取得したデータをディスク装置200へ書込む。ディスクI/O部130aは、アクセス受付部140aからの指示に応じて、ディスク装置200からデータを読出し、アクセス受付部140aに出力する。アクセス受付部140aは、クライアント300,300aによるデータアクセスを受け付け、アクセス内容に応じて、ディスク装置200に対するデータの書込み、読出し、削除などを実行する。また、アクセス受付部140aは、クライアント300,300aからの担当ノードの問い合わせに応じて、記憶部110aに記憶された担当管理テーブル111を参照し、担当ノードを応答する。クライアント300は、記憶部310a、ネットワークI/O部320aおよびアクセス部330aを有する。記憶部310aは、ポインタ管理テーブルを記憶する。ポインタ管理テーブルの例は、図7で説明した第2の実施の形態のポインタ管理テーブル112と同様である。ネットワークI/O部320aは、アクセス部330aから取得したアクセス要求をストレージノード100,100a,100bの何れか例えば、ストレージノード100に送信する。ネットワークI/O部320aは、当該アクセス要求に対するストレージノード100,100a,100bからの応答を受信し、アクセス部330aに出力する。アクセス部330aは、所定のアプリケーションによるデータアクセスに応じて、アクセス要求を生成し、ネットワークI/O部320aに出力する。当該アクセス要求には、Write要求、Read要求およびDelete要求が含まれる。アクセス部330aは、各アクセス要求にアクセス対象のデータに対するキーkeyを含める。キーは、例えば、アプリケーションにより指定される。アクセス部330aにデータアクセスを行わせるアプリケーションは、図15では図示を省略している。当該アプリケーションは、クライアント300上で、例えばクライアント300が実行するプログラムにより実装されるものでもよいし、他の情報処理装置上に実装されるものでもよい。ここで、アクセス部330aは、ストレージノード100,100a,100bの何れかに担当ノードを問い合わせて、キーから算出されるハッシュ値を担当する担当ノードを判断できる。アクセス部330aは、データのWrite時には、担当ノードの利用状況に応じて、データの実体を格納する投入先ノードを決定する。アクセス部330aは、担当ノード以外のノードを投入先ノードとして決定した場合、当該投入先ノードへリンクするためのポインタキーを生成し、担当ノードには、キーと対応付けたポインタキーを格納する。そして、アクセス部330aは、ポインタキーと対応付けたデータの実体を投入先ノードに格納する。担当ノードを投入先ノードとする場合は、当該担当ノードに指定されたキーと対応付けたデータを格納する。また、アクセス部330aは、データのRead時には、指定されたキーに対して担当ノードから読出したデータがポインタキーである場合、記憶部310aに記憶されたポインタ管理テーブルに基づいて、投入先ノードを判断する。アクセス部330aは、ポインタキーに対するデータを投入先ノードから取得して、要求元のアプリケーションに出力する。担当ノードから読出したデータがポインタキーである場合、要求元のアプリケーションに当該データを出力する。更に、アクセス部330aは、データのDelete時には、指定されたキーに対して担当ノードに格納されたデータがポインタキーである場合、記憶部310aに記憶されたポインタ管理テーブルに基づいて、投入先ノードを判断する。アクセス部330aは、ポインタキーに対するデータを投入先ノードに削除させる。指定されたキーに対して担当ノードに格納されたデータがポインタキーでない場合、担当ノードに当該データを削除させる。なお、第3の実施の形態のクライアント300は、第1の実施の形態の情報処理装置1の一例である。アクセス部330aは、制御部1bの一例である。図16は、第3の実施の形態のWrite処理を示すフローチャートである。以下、図16に示す処理をステップ番号に沿って説明する。ステップS71アクセス部330aは、所定のアプリケーションによるデータのWrite依頼を受け付ける。Write依頼には、キーとデータとが含まれる。例えば、Write依頼には、キーkey01およびデータvalue01が含まれる。ステップS72アクセス部330aは、Write依頼に含まれるキーに基づいてハッシュ値を計算する。アクセス部330aは、当該ハッシュ値を担当する担当ノードをストレージノード100に問い合わせる。ステップS73アクセス部330aは、データの実体を投入する投入先ノードを決定するか否かを判定する。決定する場合、処理をステップS74に進める。決定しない場合、処理をステップS76に進める。アクセス部330aは、投入先ノードを決定するか否かを、例えば、次の12の何れかの基準により判断できる。1ディスク装置200の空き容量が所定値よりも小さい。2投入するデータのサイズが閾値よりも大きい。ただし、他の基準を用いてもよい。このような基準を判断するために、アクセス部330aは、例えば定期的にストレージノード100,100a,100bから利用状況空き容量などを取得しておく。あるいは、ステップS73を実行する際に、担当ノードから利用状況を取得してもよい。ステップS74アクセス部330aは、所定の基準に基づいて、投入先ノードを決定する。その手順は、図11で説明した第2の実施の形態の投入先ノード決定処理の手順と同様である。ただし、ノード決定部150が実行する処理をアクセス部330aが実行する。ステップS75アクセス部330aは、ステップS72で取得した担当ノードと、ステップS74で決定した投入先ノードとが同一であるか否かを判定する。同一である場合、処理をステップS76に進める。同一でない場合、処理をステップS77に進める。ステップS76アクセス部330aは、指定されたキーと対応付けたデータの書込みを要求するWrite要求を生成して、担当ノードに送信する。担当ノードは、Write要求に応じて、自身に接続されたディスク装置にkey,value,flagの組を書込む。キーkeyは、アプリケーションにより指定されたキーである。フラグflagはfalseである。例えば、担当ノードがストレージノード100であれば、データストア210にkey01,value01,falseが書込まれる。アクセス部330aは、担当ノードから書込み完了の応答を受け付けると、依頼元のアプリケーションに対して書込み完了を通知する。そして、処理を終了する。ステップS77アクセス部330aは、ポインタキーpointerkeyを求める。その手順は、図12で説明した第2の実施の形態のポインタキー決定処理の手順と同様である。ただし、ノード決定部150が実行する処理をアクセス部330aが実行する。例えば、ポインタキーpointer01が求められる。ステップS78アクセス部330aは、ポインタキーとWrite対象のデータvalueとのペアの書込みを投入先ノードに格納させる。例えば、キーkeyとしてポインタキーを指定してデータvalueの書込みを要求するWrite要求を生成して、投入先ノードに送信する。投入先ノードは、指定されたkey,value,flagの組を自身に接続されたディスク装置に格納する。ここで、フラグflagは、falseである。例えば、投入先ノードがストレージノード100aである場合、データストア210aに、pointer01,value01,falseの組が書込まれる。アクセス部330aは、投入先ノードから書込み結果の応答を受信する。アクセス部330aは、書込み依頼したポインタキーと投入先ノードのラベルとを対応付けて、記憶部310aに記憶されたポインタ管理テーブルに記録する。ステップS79アクセス部330aは、キーとポインタキーとのペアの書込みを担当ノードに依頼する。例えば、キーkeyとして、アプリケーションから指定されたキーを指定し、データvalueとしてポインタキーを指定してWrite要求を生成して、担当ノードに送信する。担当ノードは、指定されたkey,value,flagの組を自身に接続されたディスク装置に格納する。ここで、フラグflagは、trueである。例えば、担当ノードがストレージノード100である場合、データストア210に、key01,pointer01、value01の組が書込まれる。アクセス部330aは、担当ノードから書込み結果の応答を受信する。すると、アクセス部330aは、依頼元のアプリケーションに書込み完了を通知する。このように、クライアント300は、データの実体を担当ノード以外の投入先ノードに配置できる。その場合、クライアント300は、データの実体の代わりに、他のノードへのリンクを示すポインタキーを担当ノードに格納させる。そして、投入先ノードには、当該ポインタキーと対応付けたデータの実体を格納させる。なお、ステップS73では、データの投入先ノードを再決定するか否かの基準12を例示したが、他の基準により判断してもよい。例えば、担当ノードの負荷を示す指標例えば、CPU利用率やアクセス数などが所定期間、連続して所定値よりも大きい場合に、投入先ノードを決定するようにしてもよい。図17は、第3の実施の形態のRead処理を示すフローチャートである。以下、図17に示す処理をステップ番号に沿って説明する。ステップS81アクセス部330aは、所定のアプリケーションによるデータのRead依頼を受け付ける。Read依頼には、キーが含まれる。例えば、Read依頼には、キーkey01が含まれる。ステップS82アクセス部330aは、Read依頼に含まれるキーに基づいてハッシュ値を計算する。アクセス部330aは、当該ハッシュ値を担当する担当ノードをストレージノード100に問い合わせる。ステップS83アクセス部330aは、Read依頼に含まれるキーkeyに対するデータvalueおよびフラグflagを担当ノードから取得する。例えば、担当ノードがストレージノード100である場合に、キーkey01に対するデータpointer01およびフラグtrueを取得する。ステップS84アクセス部330aは、データvalueがポインタキーであるか否かを判定する。データがポインタキーでない場合、処理をステップS85に進める。データがポインタキーである場合、処理をステップS86に進める。データがポインタキーであるか否かは、ステップS83で取得したフラグflagに基づいて判定できる。フラグがtrueであれば、ポインタキーである。フラグがfalseであれば、ポインタキーでない。例えば、ステップS83で取得したフラグはtrueなので、データpointer01はポインタキーである。ステップS85アクセス部330aは、ステップS83で取得したデータを依頼元のアプリケーションに応答する。そして、処理を終了する。ステップS86アクセス部330aは、記憶部310aに記憶されたポインタ管理テーブルを参照し、ステップS83でデータvalueとして取得したポインタキーに基づいて、投入先ノードを特定する。例えば、ポインタキーpointer01に対する投入先ノードとして、ストレージノード100aラベルBを特定する。ステップS87アクセス部330aは、ポインタキーをキーとして指定して、投入先ノードからデータvalueを取得する。例えば、投入先ノードがストレージノード100aである場合に、キーpointer01に対するデータvalue01を取得する。ステップS88アクセス部330aは、投入先ノードから取得したデータを依頼元のアプリケーションに応答する。このように、クライアント300は、Read依頼に含まれるキーに対し、担当ノードからポインタキーを取得した場合、ポインタキーに基づいて投入先ノードを特定する。そして、当該ポインタキーに対応付けたデータを投入先ノードから取得し、依頼元のアプリケーションに応答する。図18は、第3の実施の形態のDelete処理を示すフローチャートである。以下、図18に示す処理をステップ番号に沿って説明する。ステップS91アクセス部330aは、所定のアプリケーションによるデータのDelete依頼を受け付ける。Delete依頼には、キーが含まれる。例えば、Delete依頼には、キーkey01が含まれる。ステップS92アクセス部330aは、Delete依頼に含まれるキーに基づいてハッシュ値を計算する。アクセス部330aは、当該ハッシュ値を担当する担当ノードをストレージノード100に問い合わせる。ステップS93アクセス部330aは、Delete依頼に含まれるキーkeyに対するデータvalueおよびフラグflagを担当ノードから取得する。例えば、担当ノードがストレージノード100である場合に、キーkey01に対するデータpointer01およびフラグtrueを取得する。ステップS94アクセス部330aは、データvalueがポインタキーであるか否かを判定する。データがポインタキーでない場合、処理をステップS95に進める。データがポインタキーである場合、処理をステップS96に進める。データがポインタキーであるか否かは、ステップS93で取得したフラグflagに基づいて判定できる。フラグがtrueであれば、ポインタキーである。フラグがfalseであれば、ポインタキーでない。例えば、ステップS93で取得したフラグはtrueなので、データpointer01はポインタキーである。ステップS95アクセス部330aは、指定されたキーと対応付けたデータの削除を要求するDelete要求を生成して、担当ノードに送信する。担当ノードは、Delete要求に応じて、自身に接続されたディスク装置からkey,value,flagの組を削除する。キーkeyは、アプリケーションにより指定されたキーである。アクセス部330aは、担当ノードから削除完了の応答を受け付けると、依頼元のアプリケーションに対して削除完了を通知する。そして、処理を終了する。ステップS96アクセス部330aは、記憶部310aに記憶されたポインタ管理テーブルを参照し、ステップS93でデータvalueとして取得したポインタキーに基づいて、投入先ノードを特定する。例えば、ポインタキーpointer01に対する投入先ノードとして、ストレージノード100aラベルBを特定する。ステップS97アクセス部330aは、ポインタキーに対応付けたデータの削除を投入先ノードに依頼する。例えば、キーkeyとしてポインタキーを指定して、データvalueの削除を依頼するDelete要求を生成して、投入先ノードに送信する。投入先ノードは、指定されたkey,value,flagの組を自身に接続されたディスク装置から削除する。例えば、投入先ノードがストレージノード100aである場合、データストア210aからpointer01,value01,falseの組が削除される。アクセス部330aは、投入先ノードから削除結果の応答を受信する。ステップS98アクセス部330aは、ステップS93で取得したポインタキーのレコードを記憶部310aに記憶されたポインタ管理テーブル112から削除する。アクセス部330aは、ポインタキーの削除を担当ノードに依頼する。例えば、アプリケーションから指定されたキーを指定して、データvalueとして格納されたポインタキーの削除を依頼するDelete要求を生成して、担当ノードに送信する。担当ノードは、指定されたkey,value,flagの組を自身に接続されたディスク装置から削除する。例えば、担当ノードがストレージノード100である場合、データストア210からkey01,pointer01,trueの組が削除される。アクセス部330aは、担当ノードから削除完了の応答を受け付けると、依頼元のアプリケーションに対して削除完了を通知する。以上のように第3の実施の形態のクライアント300,300aは、キーから算出されるハッシュ値により担当ノードが決定される場合でも、データの代わりに、キーと対応付けたポインタキーを担当ノードに格納する。そして、ポインタキーと対応付けたデータの実体を他のノードに配置する。これにより、データ配置の制限を緩和できる。例えば、ポインタキーは単にリンクを示す情報であるため、データの実体よりもデータサイズが小さい可能性が高い。このため、担当ノードの空き容量が少ないときにデータの実体を他のノードに配置すれば、データ量の偏りを分散できる。また、例えば、担当ノードの負荷が大きい時に、データの実体を他のノードに配置すれば、負荷を分散することもできる。更に、データの実体を投入する他のノード投入先ノードの選択方法として、運用に応じた基準を選択できる。例えば、第2の実施の形態で説明したように、データ量を分散したい場合や、負荷を分散したい場合など、目的ごとに種々の基準が考えられる。これにより、ストレージノード100,100a,100bにおけるデータ量の分散や負荷の分散を一層容易に行える。なお、データvalueの設定内容がポインタキーであるかを判断する方法としてフラグを用いたが別の方法を用いてもよい。例えば、ポインタキーが予め所定の文字列を含むことを定義しておけば、当該文字列を含むか否かに応じて、データvalueがポインタキーであるか否かを判断できる。更に、第2,第3の実施の形態では、1つのストレージノードにデータを格納する例を示したが、複数のストレージノードに同一のデータを格納する場合にも同じ方法を利用できる。"