以下に添付図面を参照して情報処理装置、ストレージサーバ、ストレージシステム、バックアップ方法、およびバックアッププログラムについて説明する。
(第1の実施形態)
以下、図1を用いて、複数のクライアントが預けたデータを保管するストレージシステムの一例を説明する。図1は、第1の実施形態に係わるストレージシステムを説明する図である。図1に示す例では、ストレージシステム1は、サーバ2、ネットワーク3、複数のクライアント4〜6を有する。
なお、ネットワーク3は、WWW(World Wide Web)、LAN(Local Area Network)、WAN(Wide Area Network)等任意の通信ネットワークである。また、図1には、3台のクライアント4〜6を記載したが、ネットワーク3は、同様のクライアントを任意の数だけ有することができる。また、以下の説明では、クライアント5、6は、クライアント4と同様の機能を発揮するものとして、詳細な説明を省略する。
サーバ2は、ネットワーク3を介して、各クライアント4〜6が預けたデータを記憶するストレージサーバである。また、サーバ2は、すでに記憶しているデータの重複保管を回避する機能を有する。以下、サーバ2の動作の一例について説明する。なお、以下の説明では、クライアント4〜6は、データAをそれぞれ記憶しているものとする。
例えば、サーバ2は、ネットワーク3を介して、クライアント4からデータAの格納を要求する格納要求を受信すると、データAを記憶しているか否かを判別する。そして、サーバ2は、データAを記憶していないと判別した場合には、ネットワーク3を介して、クライアント4からデータAを受信し、受信したデータAを記憶するとともに、クライアント4がデータAを保持している旨を示すメタデータを記憶する。
続いて、サーバ2は、クライアント5からデータAの格納を要求する格納要求を受信すると、データAを記憶しているか否かを判別する。ここで、サーバ2は、クライアント4から受信したデータAを記憶している。このため、サーバ2は、クライアント5からデータAを受信せず、クライアント5がデータAを保持している旨を示すメタデータのみを記憶する。
また、サーバ2は、データを記憶する際の単位時間あたりの料金である時価を算出する。具体的には、サーバ2は、記憶しているデータごとに、データのサイズとデータを保持しているクライアントの数とに応じて変動する時価を算出する。詳細な例を挙げると、サーバ2は、データサイズを「S」、データを保持するクライアントの数を「N」、データサイズあたりの単価を「C」、基本料金を「B」とすると、「V=(S/N)*C+B」で表される値「V」を時価とする。このため、サーバ2は、データサイズが少ないほど時価の値を下げ、データを保持するクライアントの数が多いほど、時価の値を下げることとなる。
一方、クライアント4は、複数のデータを記憶する。また、クライアント4は、記憶している各データについての時価をサーバ2から取得する。そして、クライアント4は、取得した時価に応じて、サーバ2に預けるデータを選択し、ネットワーク3を介して、選択したデータの格納要求をサーバ2へ送信する。このように、クライアント4は、記憶する各データについて、サーバ2から時価を取得し、取得した時価に応じてサーバ2に預けるデータを選択するので、利用者にとって最小のコストでデータをサーバ2に保管させることができる。
また、サーバ2がデータを保管する際の時価は、同一のデータをサーバ2に預けたクライアントの数によって変動する。このため、クライアント4は、サーバ2から取得した時価の値に応じてサーバ2に送信するデータを選択した場合には、より多くのクライアントがサーバ2に預けたデータと同一のデータを預けようとする。ここで、サーバ2は、すでに記憶しているデータと同一のデータに係わる格納要求を受信した場合には、データを受信せずに、データを保持する旨を示すメタデータのみを記憶する。この結果、ストレージシステム1は、データの転送量を削減することができるので、ネットワークの負荷を削減することができる。
[サーバの機能構成]
次に、図2を用いて、サーバ2の機能構成について説明する。図2は、第1の実施形態に係わるサーバの機能構成を説明する図である。図2に示すように、サーバ2は、実データ記憶部10、メタ情報記憶部11、保存情報ユーザデータベース12、時価演算部13、応答部14、データ送受信部15、仮想受信部16、認証部17を有する。実データ記憶部10は、クライアント4〜6から預けられたデータを保存する。
具体的には、実データ記憶部10は、データを一意に示す情報であるメタ情報IDをkeyとし、メタ情報IDが示すデータ本体をvalueとするKVS(Key Value Store)である。ここで、メタ情報IDは、値が異なると示すデータが必ず異なるようなIDが望ましい。例えば、実データ記憶部10は、SHA(Secure Hash Algorithm)256のように、衝突困難性を有するハッシュ関数にデータ本体を入力した際の出力をメタ情報IDとし、メタ情報IDとデータ本体と対応付けて記憶する。
メタ情報記憶部11とは、実データ記憶部10が保存するデータのメタ情報IDと時価とを対応付けて記憶する。以下、図3を用いて、メタ情報記憶部11が記憶する情報について説明する。図3は、メタ情報記憶部が記憶する情報の一例を説明する図である。図3に示す例では、メタ情報記憶部11は、メタ情報ID、保存先、データサイズ、保存数、時価、保存リストを対応付けて記憶する。ここで、保存先とは、対応付けられたメタ情報IDが示すデータが格納されている場所を示す情報であり、詳細には、実データ記憶部10の記憶領域を示すアドレスである。
また、データサイズとは、対応付けられたメタ情報IDが示すデータのデータ容量を示す情報である。また、保存数とは、メタ情報IDが示すデータをサーバ2に預けたクライアントの数を示す情報である。また、時価とは、メタ情報IDが示すデータを保管する際に発生する単位時間あたりの料金であり、メタ情報IDが示すデータのデータサイズが増大するに従って増加し、保存数が増加するに従って減少する関数により計算される値である。また、保存リストとは、メタ情報IDが示すデータを預けたユーザを一意に示すユーザIDのリストである。
例えば、図3に示す例では、メタ情報記憶部11は、メタ情報ID「0x0123456」が示すデータが実データ記憶部10の「アドレス#1」に格納されており、データサイズが「10kb(キロバイト)」である旨を示す。また、メタ情報記憶部11は、メタ情報ID「0x0123456」が示すデータを「2」つのクライアントが預けており、時価が「5」である旨を示す。また、メタ情報記憶部11は、メタ情報ID「0x0123456」が示すデータが、クライアントのユーザIDが「1」、および「2」のクライアントにより預けられた旨を示す。
また、図3に示す例では、メタ情報記憶部11は、メタ情報IDが「0x0123457」が示すデータが実データ記憶部10の「アドレス#2」に格納されており、データサイズが「24kb」である旨を示す。また、メタ情報記憶部11は、メタ情報ID「0x0123457」が示すデータを「1」つのクライアントが預けており、時価が「24」であり、データを預けたクライアントのユーザIDが「4」である旨を示す。
また、図3に示す例では、メタ情報記憶部11は、メタ情報ID「0x0123458」が示すデータが実データ記憶部10の「アドレス#3」に格納されており、データサイズが「1024MB(メガバイト)」である旨を示す。また、メタ情報記憶部11は、メタ情報ID「0x0123458」が示すデータを「3241817」つのクライアントが預けており、時価が「0.05」であり、データを預けたクライアントのユーザIDが「1、2、3、…」である旨を示す。
図2に戻り、保存情報ユーザデータベース12は、各クライアント4〜6のユーザIDと、各クライアント4〜6が預けたデータを示すメタ情報IDとを対応付けて記憶する。以下、図4を用いて、保存情報ユーザデータベース12が記憶する情報の一例について説明する。
図4は、保存情報ユーザデータベースが記憶する情報の一例を説明するための図である。図4に示すように、保存情報ユーザデータベース12は、ユーザID、認証情報、メタ情報IDリスト、および課金情報を対応付けて記憶する。ここで、認証情報とは、対応付けられたユーザIDが示すクライアントを認証するための情報である。
またメタ情報IDリストとは、クライアントがサーバ2に預けたデータを示すメタ情報IDのリストである。また、課金情報とは、メタ情報IDリストに含まれるメタ情報IDが示すデータの時価の総和であり、対応付けられたユーザIDが示すクライアントに対して課金される単位時間あたりの料金である。
例えば、図4に示す例では、保存情報ユーザデータベース12は、ユーザIDが「1」のクライアントを認証するために証明書を記憶している旨を示す。また、保存情報ユーザデータベース12は、ユーザIDが「1」のクライアントがメタ情報ID「0x01」、および「0x02」で示されるデータをサーバ2に預けており、単位時間あたりの料金が「2」である旨を示す。
また、保存情報ユーザデータベース12は、ユーザIDが「2」のクライアントを認証するためにパスワードを記憶している旨を示す。また、保存情報ユーザデータベース12は、ユーザIDが「2」のクライアントが、メタ情報「0x01」、「0x03」で示されるデータをサーバ2に預けており、単位時間あたりの料金が「2.1」である旨を示す。
また、保存情報ユーザデータベース12は、ユーザIDが「3」のクライアントを認証するためのソースIP(Internet Protocol)を記憶している旨を示す。また、保存情報ユーザデータベース12は、ユーザIDが「3」のクライアントが、メタ情報「0x04」、「0x07」、「0x01」のデータをサーバ2に預けており、単位時間あたりの料金が「1.05」である旨を示す。
図2に戻って、時価演算部13は、実データ記憶部10が記憶するデータごとに、データを預けたクライアントの数に応じた時価を算出する。具体的には、時価演算部13は、定期的にメタ情報記憶部11にアクセスし、各メタ情報IDについての時価の値を算出する。
例えば、時価演算部13は、メタ情報記憶部11からメタ情報IDごとにデータサイズと保存数とを取得する。そして、時価演算部13は、データサイズを「S」、保存数を「N」とし、データサイズあたりの単価を「C」、基本料金を「B」として「V=(S/N)*C+B」で表される時価の値「V」を算出する。そして、時価演算部13は、算出した時価の値「V」で、メタ情報記憶部11に格納されていた時価の値を更新する。
なお、上述した説明において、時価演算部13が時価の値を算出するために用いた式はあくまで一例であり、ストレージシステム1の課金体系やクライアントの数に応じて異なる式を用いてもよい。例えば、時価演算部13は、データサイズや保存数の値に応じた重み付けを考慮してもよい。
応答部14は、各クライアント4〜6からの要求に応じて、各クライアント4〜6が記憶するデータをサーバ2が保管する際の時価を通知する。具体的には、応答部14は、ネットワーク3を介して、クライアント4〜6からメタ情報IDを受信すると、メタ情報IDの送信元となるクライアントの認証を認証部17に依頼する。
そして、応答部14は、認証部17からクライアントの認証が正常に行われた旨の通知を受信した場合には、メタ情報記憶部11にアクセスし、受信したメタ情報IDと対応付けられた時価を取得する。そして、応答部14は、取得した時価をメタ情報IDの送信元であるクライアントへ送信する。なお、応答部14は、受信したメタ情報IDと対応付けられた時価をメタ情報記憶部11が記憶していない場合は、時価を記憶していない旨を示す「null」をメタ情報IDの送信元となるクライアントへ送信する。なお、応答部14は、認証部17からクライアントの認証を正常に行うことができなかった旨の通知を受信した場合には、メタ情報IDの送信元となるクライアントにエラー応答を送信する。
データ送受信部15は、クライアント4〜6から、データの取得要求を受信した場合には、以下のデータ取得処理を実行する。まず、データ送受信部15は、取得要求元のクライアントのユーザIDと、取得対象となるデータのメタ情報IDとを取得する。次に、データ送受信部15は、保存情報ユーザデータベース12にアクセスし、取得要求元のユーザIDと取得対象となるデータのメタ情報IDとが対応付けて記憶されているか否かを判別する。
そして、ユーザ送受信部15は、取得要求元のユーザIDと取得対象となるデータのメタ情報IDとが保存情報ユーザデータベース12に対応付けて記憶されている場合には、取得対象となるデータのメタ情報IDをkeyとするデータを実データ記憶部10から取得する。すなわち、ユーザ送受信部15は、取得対象となるデータを実データ記憶部10から取得する。その後、ユーザ送受信部15は、取得したデータを取得要求元のクライアントへ送信する。一方、ユーザ送受信部15は、取得要求元のユーザIDと取得対象となるデータのメタ情報IDとが保存情報ユーザデータベース12に対応付けて記憶されていない場合には、エラー通知を要求元のクライアントに送信する。
また、データ送受信部15は、クライアント4〜6からデータの格納要求を受信した場合には、以下のデータ格納処理を実行する。まず、データ送受信部15は、格納要求元のクライアントのユーザIDと、格納対象となるデータのメタ情報IDとを取得する。次に、データ送受信部15は、格納対象となるデータのメタ情報IDをメタ情報記憶部11が記憶しているか否かを判別する。すなわち、データ送受信部15は、格納対象となるデータを実データ記憶部10がすでに記憶しているか否かを判別する。
そして、データ送受信部15は、格納対象となるデータのメタ情報IDをメタ情報記憶部11が記憶している場合には、仮想受信部16に対して、格納要求元のクライアントがデータを記憶しているか判別するよう要求する。その後、データ送受信部15は、格納要求元のクライアントがデータを記憶している旨の通知を仮想受信部16から受信した場合は、格納要求元のユーザIDと格納対象となるデータのメタ情報IDとを、対応付けて保存情報ユーザデータベース12に格納する。詳細には、データ送受信部15は、格納要求元のクライアントのユーザIDと対応付けられたメタ情報IDリストに、格納対象となるデータのメタ情報IDを追加する。
また、データ送受信部15は、メタ情報記憶部11にアクセスし、格納対象となるデータのメタ情報IDと対応付けられた保存リストに格納要求元のクライアントのユーザIDを追加する。そして、データ送受信部15は、格納要求元のクライアントにデータのアクセス権を設定した旨を通知する。一方、データ送受信部15は、格納要求元のクライアントがデータを記憶していない旨の通知を仮想受信部16から受信した場合には、エラー通知を格納要求元のクライアントに送信する。
また、データ送受信部15は、格納対象となるデータのメタ情報IDをメタ情報記憶部11が記憶していない場合には、格納要求元のクライアントにデータ送信要求を送信し、格納対象となるデータを受信する。そして、データ送受信部15は、格納対象となるデータのメタ情報IDと格納対象となるデータとを対応付けて実データ記憶部10に格納する。
また、データ送受信部15は、格納対象となるデータのメタ情報IDについてのエントリをメタ情報記憶部11に追加し、追加したエントリの保存リストに格納要求元のクライアントのユーザIDを追加する。また、データ送受信部15は、保存情報ユーザデータベース12にアクセスし、格納要求元のクライアントのユーザIDと対応付けられたメタ情報IDリストに、格納対象となるデータのメタ情報IDを追加する。
また、データ送受信部15は、クライアント4〜6からデータの削除要求を受信した場合には、以下のデータ削除処理を実行する。まず、データ送受信部15は、削除要求元のクライアントのユーザIDと削除対象となるデータを示すメタ情報IDとを取得する。そして、データ送受信部15は、保存情報ユーザデータベース12にアクセスし、削除要求元のクライアントのユーザIDに対応付けられたメタ情報IDリストから、取得したメタ情報IDを削除する。また、データ送受信部15は、メタ情報記憶部11にアクセスし、削除対象となるデータのメタ情報IDと対応付けられた保存リストから、削除要求元のクライアントのユーザIDを削除する。
なお、データ送受信部15は、上述したデータ取得処理、データ格納処理、およびデータ削除処理を行う前に、各種要求元のクライアントの認証を行うよう認証部17に依頼する。そして、データ送受信部15は、認証部17からクライアントの認証を正常に行うことができた旨の通知を受けた場合には、各種処理を開始する。一方、データ送受信部15は、認証部17からクライアントの認証を正常に行うことができなかった旨の通知を受けた場合には、エラー通知を各種要求元のクライアントへ送信する。
仮想受信部16は、データ送受信部15から格納要求元のクライアントがデータを記憶しているか判別するよう要求された場合には、以下の処理を実行する。まず、仮想受信部16は、乱数を生成し、生成した乱数を格納要求元のクライアントへ送信し、送信した乱数と格納対象となるデータとを入力とするハッシュ値を要求する。詳細には、仮想受信部16は、生成した乱数を「R」、格納対象となるデータを「A」とした際に、「C=Hash(R||A)」で表されるハッシュ値「C」を要求する。
また、仮想受信部16は、格納対象となるデータのメタ情報IDをkeyとするデータ、すなわち格納対象となるデータを実データ記憶部10から取得する。そして、仮想受信部16は、取得したデータを「A’」、生成した乱数を「R」とし、「C’=Hash(R||A’)」で表されるハッシュ値「C’」を算出する。その後、仮想受信部16は、格納要求元から取得したハッシュ値「C」と算出したハッシュ値「C’」とが一致した場合には、格納要求元のクライアントがデータを記憶している旨をデータ送受信部15に通知する。一方、仮想受信部16は、格納要求元から取得したハッシュ値「C」と算出したハッシュ値「C’」とが一致しなかった場合には、格納要求元のクライアントがデータを記憶していない旨をデータ送受信部15に通知する。
このように、サーバ2は、実データ記憶部10がすでに記憶したデータの格納要求を受信した場合は、乱数を生成し、格納要求元となるクライアントに生成した乱数を送信し、格納対象となるデータと送信した乱数とを入力としたハッシュ値を算出させる。また、サーバ2は、格納対象となるデータと生成した乱数とを入力としたハッシュ値を算出する。そして、サーバ2は、自身が算出したハッシュ値と格納要求元となるクライアントが生成したハッシュ値とを比較することで、格納要求元となるクライアントが格納対象となるデータを実際に記憶しているか否かを判別する。
この結果、サーバ2は、メタ情報IDのみを有するクライアントについてユーザIDの登録を防ぐことができるので、このようなクライアントによるデータの読み出しを防止し、セキュリティ性能を向上させることができる。
認証部17は、各クライアント4〜6との間であらかじめ取り決めた認証プロトコルを用いて、応答部14、またはデータ送受信部15が通信するクライアントの認証を行う。例えば、認証部17は、応答部14、又はデータ送受信部15からクライアントの認証を依頼されると、認証対象となるクライアントの認証情報を保存情報ユーザデータベース12から読み出す。そして、認証部17は、読み出した認証情報を用いて、クライアントの認証を実行し、認証結果を応答部14、又はデータ送受信部15に通知する。
なお、認証部17は、各クライアント4〜6を認証する方法に任意のプロトコルを適用することができる。例えば、認証部17は、認証対象となるクライアントのユーザIDに認証情報「証明書」が対応付けられている場合は、公開鍵証明書を用いた認証を行う。また、認証部17は、認証対象となるクライアントのユーザIDに認証情報「パスワード」が対応付けられている場合は、パスワードの送信を認証対象のクライアントに要求する。そして、認証部17は、応答として受信したパスワードが保存情報ユーザデータベース12が記憶するパスワードと一致した場合には、認証対象のクライアントを認証する。
また、認証部17は、認証対象となるクライアントのユーザIDに認証情報「ソースIP」が対応付けられている場合には、認証対象となるクライアントのIPアドレスを確認する。そして、認証部17は、確認したIPアドレスが保存情報ユーザデータベース12が記憶するIPアドレスと一致した場合には、認証対象のクライアントを認証する。
[クライアントの機能構成]
次に、図5を用いて、クライアント4の機能構成について説明する。図5は、第1の実施形態に係わるクライアントの機能構成を説明するための図である。図5に示す例では、クライアント4は、ファイルシステム20、アプリケーション21、メタ情報管理部22、フィルタファイルシステム23、監視エージェント24、設定部25、データ送受信部26、仮想送信部27、認証部28を有する。
ファイルシステム20は、各種データを記憶する記憶部であり、一般的に利用されている既存のファイルシステムを適用することができる。また、アプリケーション21は、クライアント4が動作させるアプリケーションであり、フィルタファイルシステム23を介して、ファイルシステム20が記憶するデータの作成、変更、および削除する機能を有する。なお、アプリケーション21がデータの作成、変更、および削除する機能については、一般的なファイル操作API(Application Programming Interface)によって発揮されるものとし、詳細な説明を省略する。
メタ情報記憶部22は、ファイルシステム20が記憶するデータのメタ情報IDと、データに対するアクセス頻度と、データの時価と、データをサーバ2に預けた際の効率性とを対応付けて記憶する。以下、図6を用いて、メタ情報記憶部22が記憶する情報の一例について説明する。
図6は、メタ情報管理部が記憶する情報の一例を説明する図である。図6に示す例では、メタ情報管理部22は、ファイルID、メタ情報ID、プロパティ情報、アクセス情報、効率性、時価、預け情報が対応付けて記憶されている。ここで、ファイルIDとは、ファイルシステム20が記憶する各ファイルのデータを一意に特定する識別子である。なお、ファイルシステム20内において、複製されたデータが複数存在する場合には、各データにそれぞれ異なるファイルIDが付与されるが、複製された各データのメタ情報IDは、同一となる場合がある。
また、プロパティ情報とは、対応付けられたファイルIDが示すデータの特性を示す情報であり、例えば、ファイルシステム20内においてデータが格納された位置を示すファイルパス(filepath)やデータサイズ等である。また、アクセス情報とは、対応付けられたファイルIDが示すデータに対するアクセス頻度を示す情報であり、例えば、単位時間あたりのアクセス回数や、最後にアクセスがあった際のユニックス時間である。
また、効率性とは、アクセス情報と時価とから算出される値であり、対応付けられたファイルIDが示すデータをサーバ2に預けた際の効率性を示す情報である。具体的には、効率性とは、監視エージェント24によって算出される値であり、アクセス情報、時価、およびデータサイズから算出される値であり、値が大きいほどサーバ2に預けるべきである旨を示す。例えば、効率性とは、アクセス情報の値、時価の値、又はデータサイズの値が小さければ小さいほど増加する値であり、時価を「v」、データサイズを「s」、アクセス情報を「a」とすると、「1/(ak+v/s)」、又は「1/(ak+v/s)」で算出される値である。
ここで、「k」とは、ストレージシステム1の状況に応じて設定される任意の係数である。例えば、係数「k」は、ストレージシステム1が許容するネットワークトラフィックの量、ネットワークに許容されるコスト、実データ記憶部10等のストレージに許容されるコスト等から設定されるパラメータである。ストレージシステム1は、係数「k」を適切な値に設定することで、ユーザに対するコストと、ストレージシステム1のネットワークトラフィックとの極小点をユーザに提案することができる。
また、時価とは、対応付けられたファイルIDが示すデータをサーバ2に預けた際に発生する時価であり、ファイルシステム20が記憶する各データについて、監視エージェント24がサーバ2から取得する時価である。すなわち、メタ情報管理部22は、サーバ2が算出した時価を記憶する。また、預け情報とは、対応付けられたファイルIDが示すデータをサーバ2に預けたか否かを示す情報であり、データを預けた旨を示す「○」、又はデータを預けていない旨の示す「×」が格納される。
フィルタファイルシステム23とは、ファイルシステム20が記憶する各データに対するアプリケーション21のアクセスを制御する。具体的には、フィルタファイルシステム23は、アプリケーション21がファイルシステム20に格納する新たなデータを生成した場合には、以下の書き込み処理を実行する。
まず、フィルタファイルシステム23は、ファイルシステム20に代わり、アプリケーション21が生成したデータを取得する。また、フィルタファイルシステム23は、取得したデータをファイルシステム20に格納するとともに、メタ情報管理部22に新たなエントリを追加する。そして、フィルタファイルシステム23は、ファイルシステム20に格納したデータのハッシュ値であるメタ情報IDと、ファイルIDと、プロパティ情報とを新たなエントリに格納する。また、フィルタファイルシステム23は、アクセス情報に、データを格納したユニックス時間を格納する。
また、フィルタファイルシステム23は、アプリケーション21がファイルシステム20が記憶するデータの読み出しを実行した場合は、以下の読み出し処理を実行する。まず、フィルタファイルシステム23は、メタ情報管理部22の各エントリのうち、読み出し対象のデータを示すファイルIDが格納されたエントリを抽出する。そして、フィルタファイルシステム23は、抽出したエントリの預け情報が「〇」であるか否かを判別する。
ここで、フィルタファイルシステム23は、預け情報が「〇」である場合には、抽出したエントリのメタ情報IDをデータ送受信部26に出力し、データ送受信部26にデータ取得処理の実行を依頼する。その後、フィルタファイルシステム23は、データ送受信部26から読み出し対象のデータを受信した場合には、受信したデータをアプリケーション21に出力し、抽出したエントリのアクセス情報を更新する。
一方、フィルタファイルシステム23は、預け情報が「×」である場合は、ファイルシステム20から読み出し対象のデータを取得し、取得したデータをアプリケーション21に出力するとともに、抽出したエントリのアクセス情報を更新する。
また、フィルタファイルシステム23は、アプリケーション21がファイルシステム20が記憶するデータの更新を実行した場合は、以下の更新処理を実行する。まず、フィルタファイルシステム23は、メタ情報管理部22から、読み出し対象のデータを示すファイルIDが格納されたエントリを抽出する。そして、フィルタファイルシステム23は、抽出したエントリの預け情報が「〇」であるか否かを判別する。
ここで、フィルタファイルシステム23は、預け情報が「〇」である場合には、サーバ2に預けたデータとファイルシステム20が記憶するデータとに違いが発生するので、サーバ2に預けたデータを削除しなければならない。そこで、フィルタファイルシステム23は、抽出したエントリのメタ情報IDをデータ送受信部26に出力し、データ送受信部26にデータ削除処理の実行を依頼する。
そして、フィルタファイルシステム23は、ファイルシステム20が記憶するデータを更新し、抽出したエントリのアクセス情報を更新する。一方、フィルタファイルシステム23は、預け情報が「×」である場合は、ファイルシステム20が記憶するデータを更新し、抽出したエントリのアクセス情報を更新する。
また、フィルタファイルシステム23は、アプリケーション21がデータの削除を実行した場合には、更新処理と同様の処理を行うことで、サーバ2に預けたデータ、又はファイルシステム20が記憶するデータの削除を行う。この際、フィルタファイルシステム23は、メタ情報管理部22から削除対象となるデータを示すファイルIDが格納されたエントリを削除する。
監視エージェント24は、定期的に、ファイルシステム20をクローリングし、メタ情報管理部22が記憶する情報を更新する。具体的には、監視エージェント24は、定期的にメタ情報管理部22が記憶する各メタ情報IDと対応付けられた時価の値をサーバ2から取得する。そして、監視エージェント24は、取得した時価の値で、メタ情報管理部22が記憶する各メタ情報IDと対応付けられた時価の値を更新する。
例えば、監視エージェント24は、応答部14に対して、メタ情報管理部22が記憶するメタ情報IDを応答部14に送信し、応答部14から各メタ情報IDが示すデータについての時価を取得する。そして、監視エージェント24は、取得した時価をメタ情報管理部22に格納する。
また、監視エージェント24は、メタ情報管理部22の各エントリについて、アクセス情報、時価、およびプロパティ情報から、効率性を算出する。例えば、監視エージェント24は、時価を「v」、データサイズを「s」、アクセス情報を「a」とすると、「1/(ak+v/s)」、又は「1/(ak+v/s)」で算出される効率性の値で、各エントリの効率性の値を更新する。
また、監視エージェント24は、メタ情報管理部22の各エントリを、効率性が高い順に、時価の合計が予め定められた値になるまで選択する。つまり、監視エージェント24は、効率性が高い順に、予め定められた予算内に収まるだけのデータを選択する。そして、監視エージェント24は、選択したエントリのメタ情報IDが示すデータの預け処理を実行する。
例えば、監視エージェント24は、選択したエントリの預け情報を確認し、預け情報が「〇」の場合には、そのまま処理を終了する。一方、監視エージェント24は、選択したエントリの預け情報が「×」である場合には、選択したエントリのメタ情報IDをデータ送受信部26に出力し、データ格納処理の実行を依頼する。そして、監視エージェント24は、データ送受信部26からデータ格納処理の完了を通知された場合には、選択したエントリの預け情報を「〇」に更新し、データの預け処理を終了する。
また、監視エージェント24は、データの預け処理を終了した場合には、データの預け処理の対象とはならなかったエントリの預け情報を確認する。そして、監視エージェント24は、データの預け処理の対象とはならなかったエントリの預け情報が「〇」である場合は、エントリのメタ情報IDをデータ送受信部26に出力し、データ取得処理の実行、およびデータ削除処理の実行を依頼する。
設定部25は、監視エージェント24が実行する各種処理の設定を行う。例えば、設定部25は、監視エージェント24がファイルシステム20をクローリングする時間間隔の設定や、サーバ2にデータを預けた際に発生する時価の最大値を設定する。
データ送受信部26は、サーバ2が有するデータ送受信部15と連携してデータの送受信を行う。具体的には、データ送受信部26は、フィルタファイルシステム23、又は監視エージェント24からメタ情報IDを受信し、データ格納処理、データ取得処理、又はデータ削除処理の実行を依頼された場合には、依頼された処理を実行する。
例えば、データ送受信部26は、データ格納処理を実行する場合には、サーバ2のデータ送受信部15にメタ情報IDを送信し、データ格納要求を送信する。このような場合には、サーバ2のデータ送受信部15は、クライアント4を格納要求元のクライアントであると識別する。
ここで、データ送受信部15は、データ送受信部26が送信したメタ情報IDが示すデータを記憶していない場合には、データ送受信部26にデータ送信要求を送信する。このような場合には、データ送受信部26は、ファイルシステム20からメタ情報IDが示すデータを取得し、取得したデータをサーバ2のデータ送受信部15に送信する。そして、データ送受信部26は、ファイルシステム20から、取得したデータを削除し、データ格納処理の完了を監視エージェント24に通知する。
一方、送信したメタ情報IDが示すデータをサーバ2が記憶している場合は、後述するように、仮想送信部27が仮想受信部16と協調して、送信したメタ情報IDが示すデータをファイルシステム20が記憶しているか否かを判別する。そして、データ送受信部26は、送信したメタIDが示すデータをファイルシステム20が記憶していると仮想受信部16が判別した場合には、データ送受信部15からアクセス権を設定した旨の通知を受信する。このような場合には、データ送受信部26は、データ格納処理の完了を監視エージェント24に通知する。
また、データ送受信部26は、データ取得処理を実行する場合には、サーバ2のデータ送受信部15にメタ情報IDを送信し、データ取得要求を送信する。このような場合には、データ送受信部15は、クライアント4を取得要求元のクライアントであると識別し、データ送受信部26が送信したメタ情報IDが示すデータをデータ送受信部26へ送信する。すると、データ送受信部26は、受信したデータとデータ取得処理の完了をフィルタファイルシステム23に通知する。
また、データ送受信部26は、データ削除処理を実行する場合には、サーバ2のデータ送受信部15にメタ情報IDを送信し、送信したメタ情報IDが示すデータの削除を要求するデータ削除要求を送信する。なお、データ送受信部26は、データ格納処理、データ取得処理、データ削除処理を実行する場合には、認証部28に依頼し、サーバ2に対するクライアント4の認証を実行する。そして、データ送受信部26は、認証部28が認証に成功した後に、上述したデータ格納処理、データ取得処理、データ削除処理を実行する。
仮想送信部27は、仮想受信部16と連携して、サーバ2に預けるデータをクライアント4が記憶しているか否かを判別する。具体的には、仮想送信部27は、仮想受信部16から乱数と、乱数と格納対象となるデータとを入力とするハッシュ値の要求とを受信する。
このような場合には、仮想送信部27は、格納対象となるデータをファイルシステム20から取得し、取得したデータと乱数とを入力とするハッシュ値を算出する。例えば、仮想送信部27は、格納対象のデータを「A」、受信した乱数を「R」とし、「C=Hash(R||A)」で表されるハッシュ値「C」を算出する。そして、仮想送信部27は、算出したハッシュ値「C」を仮想受信部16へ送信する。
すなわち、メタデータのみをユーザごとに管理する従来の技術では、クライアントが実際には所有していないデータのハッシュ値をストレージサーバに送信することで、所有していないデータをストレージサーバから読み出すことができるという問題がある。しかしながら、ストレージシステム1は、メタデータのみを新たに管理する際に、サーバ2が生成する乱数Rとデータとを入力とするハッシュ値をサーバ2、およびクライアント4が算出し、算出したハッシュ値の突合せを行うことで、クライアント4が実際にデータを記憶しているか否かを判別する。このため、ストレージシステム1は、実際にデータを記憶していないクライアントによる不正な読み出しを防ぐことができる。
認証部28は、データ送受信部26がデータ格納処理、データ取得処理、データ削除処理を実行する際に、サーバ2に対するクライアント4の認証を行う。具体的には、認証部28は、認証部17が要求する認証方法に基づいて、証明書、パスワード等を認証部17に送信し、クライアント4の認証を行う。
[ストレージシステムが実行する処理の流れ]
以下、図7〜図16を用いて、ストレージシステム1が実行する処理の流れについて説明する。まず、図7を用いて、クライアント4が初回起動時に監視エージェント24が実行する処理の流れについて説明する。図7は、クライアントの初回起動時に監視エージェントが実行する処理の流れを説明するためのフローチャートである。
まず、監視エージェント24は、ファイルシステム20が記憶するデータをリストアップする(ステップS101)。次に、監視エージェント24は、各データのメタ情報IDを算出し、算出したメタ情報IDをメタ情報管理部22に登録する(ステップS102)。そして、監視エージェント24は、各データのメタ情報IDと対応付けて、各データのプロパティ情報をメタ情報管理部22に登録する(ステップS103)。その後、監視エージェント24は、各データと対応付けられたアクセス情報を最大値に初期化する(ステップS104)。例えば、監視エージェント24は、各データと対応付けられたアクセス情報として、処理実行時におけるユニックス時間を格納する。
次に、監視エージェント24は、メタ情報管理部22に格納された最初のエントリについて時価が判明しているか否かを判別する(ステップS105)。そして、監視エージェント24は、エントリが判明していない場合は(ステップS105否定)、サーバ2に時価を問い合わせる(ステップS106)。次に、監視エージェント24は、サーバ2からの時価の応答が「null」であるか否かを判別し(ステップS107)、サーバ2からの「null」である場合には(ステップS107肯定)、時価を算出する(ステップS108)。
すなわち、監視エージェント24は、サーバ2にデータが格納されておらず、時価が算出されていない場合には、クライアント4単体で時価を算出できるので、時価を算出する。例えば、監視エージェント24は、データサイズを「S」、基本料を「B」、データサイズあたりの単価を「C」とし、「V=S*C+B」であらわされる時価「V」を算出する。
次に、監視エージェント24は、時価をメタ情報管理部22に登録し(ステップS109)、その後、効率性をメタ情報管理部22に登録する(ステップS110)。そして、監視エージェントは、全てのデータについて効率性を登録したか否かを判別し(ステップS111)、全てのデータについて効率性を登録したと判別した場合には(ステップS111肯定)、処理を終了する。一方、監視エージェント24は、全てのデータについて効率性を登録していないと判別した場合には(ステップS111否定)、処理対象を次のエントリに移し(ステップS112)、ステップS105の処理を実行する。
なお、監視エージェント24は、時価が判明している場合は(ステップS105肯定)、判明している時価を登録する(ステップS109)。また、監視エージェント24は、サーバ2から通知された時価の応答が「null」ではない場合には(ステップS107否定)、サーバ2から通知された時価を登録する(ステップS109)。
次に、図8を用いて、サーバ2が定期的に実行する処理の流れについて説明する。図8は、サーバが定期的に実行する処理の流れを説明するためのフローチャートである。図8に示す例では、サーバ2は、メタ情報記憶部11に記憶されたメタ情報IDが示すデータのデータサイズあたりの時価を算出する(ステップS201)。そして、サーバ2は、算出した時価をメタ情報記憶部11に登録し(ステップS202)、処理を終了する。
次に、図9を用いて、クライアント4が定期的に実行する処理の流れについて説明する、図9は、クライアントが定期的に実行する処理の流れを説明するためのフローチャートである。まず、クライアント4は、記憶する各メタ情報IDに対する時価をサーバ2に問い合わせる(ステップS301)。
次に、クライアント4は、各データについて、時価の応答が「null」であるか否かを判別し(ステップS302)、時価の応答が「null」である場合は(ステップS302肯定)、時価の応答が「null」であったデータを時価を算出する(ステップS303)。そして、クライアント4は、サーバ2から通知された時価、又は、算出した時価をメタ情報管理部22に登録する(ステップS304)。
次に、クライアント4は、メタ情報管理部22に登録された各エントリを効率性が高い順位ソートし(ステップS305)、選択していないエントリのうち、効率性がもっとも高いエントリを選択する(ステップS306)。また、クライアント4は、選択したエントリの時価の合計額が所定の値を超えたか否かを判別する(ステップS307)。そして、クライアント4は、合計額が所定の値を超えていない場合は(ステップS307否定)、ステップS306にて選択したエントリの預け情報が「○」か否かを判別する(ステップS308)。
ここで、クライアント4は、預け情報が「○」ではないと判別した場合は(ステップS308否定)、データ格納処理を実行し(ステップS309)、次に効率性が高いエントリを選択する(ステップS306)。一方、クライアント4は、預け情報が「○」である場合(ステップS308肯定)には、次に効率性が高いエントリを選択する(ステップS306)。
また、クライアント4は、選択したエントリの時価の合計額が所定の値を超えた場合は(ステップS307肯定)、選択したエントリの預け情報が「×」であるか否かを判別する(ステップS310)。そして、クライアント4は、選択したエントリの預け情報が「×」ではない場合は(ステップS310否定)、選択したエントリのメタ情報IDが示すデータのデータ取得処理を実行する(ステップS311)。
次に、クライアント4は、選択したエントリのメタ情報IDが示すデータのデータ削除処理を実行し(ステップS312)、全てのエントリについて定期処理を実行したか否かを判別する(ステップS313)。そして、クライアント4は、全てのエントリについて定期処理を実行した場合は(ステップS313肯定)、処理を終了する。
一方、クライアント4は、全てのエントリについて定期処理を実行していない場合は(ステップS313否定)、ステップS306にて選択していない次のエントリを選択し(ステップS314)、ステップS310の処理を実行する。また、クライアント4は、選択したエントリの預け情報が「×」である場合は(ステップS310肯定)、ステップS313の処理を実行する。
次に、図10を用いて、サーバ2が実行するデータ格納処理の流れを説明する。図10は、サーバが実行するデータ格納処理の流れを説明するためのフローチャートである。なお、以下の説明では、サーバ2がクライアント4からデータの格納を要求された場合について説明する。まず、サーバ2は、クライアント4からメタ情報IDを受信する(ステップS401)。次に、サーバ2は、クライアント4の認証を行う(ステップS402)。
また、サーバ2は、クライアントの認証が成功したか否かを判別し(ステップS403)、認証が成功した場合は(ステップS403肯定)、メタ情報記憶部11にクライアント4から通知されたメタ情報IDが登録されているか否かを確認する(ステップS404)。そして、サーバ2は、クライアント4から通知されたメタ情報IDがメタ情報記憶部11に登録されているか否かを判別し(ステップS405)、登録されている場合には(ステップS405肯定)、乱数Rを生成してクライアント4に送信する(ステップS406)。
次に、サーバ2は、乱数Rとデータとを入力とするハッシュ値を算出し(ステップS407)、クライアント4が算出したハッシュ値を受信する(ステップS408)。そして、サーバ2は、ステップS407にて算出したハッシュ値と、ステップS408で受信したハッシュ値とが一致するか否かを判別し(ステップS409)、一致しないと判別した場合には(ステップS409否定)、エラーをクライアント4に返し(ステップS410)、処理を終了する。
一方、サーバ2は、ハッシュ値が一致した場合は(ステップS409肯定)、クライアント4から通知されたメタ情報IDについて、メタ情報記憶部11が記憶する保存数に1を加算する(ステップS411)。次に、サーバ2は、保存情報ユーザデータベース12を更新する(ステップS412)。具体的には、サーバ2は、クライアント4を示すユーザIDと対応付けられたメタ情報IDリストに通知されたメタ情報IDを追加し、課金情報を更新する。その後、クライアント4が、ファイルシステムに記憶されたデータを削除し(ステップS413)、データ格納処理が終了する。
一方、サーバ2は、通知されたメタ情報IDがメタ情報記憶部11に登録されていない場合は(ステップS405否定)、クライアント4にデータの送信を要求する(ステップS414)。そして、サーバ2は、クライアント4から受信したデータからメタ情報IDを計算し(ステップS415)、算出したメタ情報IDとステップS401にて受信したメタ情報IDと一致するか否かを判別する(ステップS416)。
次に、サーバ2は、算出したメタ情報IDとステップS401にて受信したメタ情報IDとが一致した場合は(ステップS416肯定)、実データ記憶部10にデータを格納する(ステップS417)。そして、サーバ2は、メタ情報記憶部11に各種メタ情報を格納し(ステップS418)、ステップS411の処理を続けて実行する。一方、サーバ2は、クライアント4を認証することができなかった場合(ステップS403否定)、又はステップS415にて算出したメタ情報IDとステップS401にて受信したメタ情報IDとが一致しなかった場合は(ステップS416否定)、クライアント4にエラーを返し(ステップS419)、処理を終了する。
次に、図11を用いて、サーバ2が実行するデータ取得処理の流れを説明する。図11は、サーバが実行するデータ取得処理の流れを説明するためのフローチャートである。例えば、サーバ2は、取得要求元のクライアントからメタ情報IDを受信する(ステップS501)。すると、サーバ2は、保存情報ユーザデータベース12から、取得要求元のクライアントを示すユーザIDと対応付けられたメタ情報IDリストを確認する(ステップS502)。
そして、サーバ2は、メタ情報IDリストに、ステップS501にて受信したメタ情報IDが含まれているか否かを判別し(ステップS503)、含まれている場合は(ステップS503肯定)、実データ記憶部10からメタ情報IDをkeyとするデータを取得する(ステップS504)。そして、サーバ2は、データを取得要求元のクライアントに送信し(ステップS505)、処理を終了する。一方、サーバ2は、メタ情報IDリストに受信したメタ情報IDが含まれていない場合は(ステップS503否定)、取得要求元のクライアントにエラーを通知し(ステップS506)、処理を終了する。
次に、図12を用いて、サーバ2が実行するデータ削除処理の流れを説明する。図12は、サーバが実行するデータ削除処理の流れを説明するためのフローチャートである。まず、サーバ2は、削除要求元のクライアントからメタ情報IDを受信する(ステップS601)。このような場合には、サーバ2は、削除要求元のクライアントの認証を行い(ステップS602)、認証が成功したか否かを判別する(ステップS603)。
そして、サーバ2は、削除要求元のクライアントの認証に成功した場合は(ステップS603肯定)、メタ情報記憶部11が記憶する各情報のうち、受信したメタ情報IDと対応付けられた保存数を1減算し、受信したメタ情報IDと対応付けられた保存リストから、削除要求元のクライアントを示すユーザIDを削除する(ステップS604)。次に、サーバ2は、受信したメタ情報IDと対応付けられた保存数が「0」であるか否かを判別し(ステップS605)、保存数が「0」である場合には、受信したメタ情報IDをkeyとするデータを実データ記憶部10から削除する(ステップS606)。
また、サーバ2は、受信したメタ情報IDが格納されたエントリをメタ情報記憶部11から削除する(ステップS607)。そして、サーバ2は、保存情報ユーザデータベース12にアクセスし、削除要求元のクライアントを示すユーザIDと対応付けられたメタ情報IDリストから、ステップS601にて受信したメタ情報IDを削除する(ステップS608)。その後、サーバ2は、削除要求元のクライアントと対応付けられた課金情報を更新し(ステップS609)、処理を終了する。
一方、サーバ2は、削除要求元のクライアントを認証できなかった場合は(ステップS603否定)、エラーを削除要求元のクライアントに返し(ステップS610)、処理を終了する。また、サーバ2は、受信したメタ情報IDと対応付けられた保存数が「0」ではない場合は(ステップS605)、処理を終了する。
次に、図13を用いて、アプリケーション21が新たなデータの書き込みを行う際に、クライアント4が実行する処理の流れについて説明する。図13は、データ書き込み時にクライアントが実行する処理の流れを説明するためのフローチャートである。例えば、クライアント4は、アプリケーション21が新たなデータを作成すると(ステップS701)、ファイルシステム20にデータの書き込みを行う(ステップS702)。そして、クライアント4は、メタ情報管理部22に新たなファイルIDを有するエントリを作成し、メタ情報ID、プロパティ情報、およびアクセス情報を格納し(ステップS703)、処理を終了する。
次に、図14を用いて、アプリケーション21がデータの読み出しを行う際にクライアント4が実行する処理の流れについて説明する。図14は、データ読み出し時にクライアントが実行する処理の流れを説明するためのフローチャートである。まず、アプリケーション21がデータの読み出しを実行すると(ステップS801)、クライアント4は、メタ情報管理部22にアクセスし、読み出し対象のデータを示すデータIDと対応付けられた預け情報が「○」であるか否かを判別する(ステップS802)。
そして、クライアント4は、預け情報が「○」ではない場合は(ステップS802否定)、ファイルシステム20から読み出し対象のデータを読み出す(ステップS803)。一方、クライアント4は、預け情報が「○」である場合は(ステップS802肯定)、データ取得処理を実行する(ステップS804)。具体的には、クライアント4は、サーバ2にデータ取得要求を送信することで、サーバ2に図11の処理を実行させる。
その後、クライアント4は、ファイルシステム20から読み出したデータ、又はサーバ2から受信したデータをアプリケーションに渡し(ステップS805)、メタ情報管理部22に読み出し対象のデータを示すメタ情報IDと対応付けて記憶されたアクセス情報を更新し(ステップS806)、処理を終了する。
次に、図15を用いて、アプリケーション21がデータの更新を行う際にクライアント4が実行する処理の流れについて説明する。図15は、データ更新時にクライアントが実行する処理の流れを説明するためのフローチャートである。まず、アプリケーション21がファイルの更新を実行すると(ステップS901)、クライアント4は、メタ情報管理部22にアクセスし、更新対象のデータを示すデータIDと対応付けられた預け情報が「○」であるか否かを判別する(ステップS902)。
そして、クライアント4は、預け情報が「○」である場合は(ステップS902肯定)、データ取得処理を実行し(ステップS903)、取得したデータを更新する(ステップS904)。その後、クライアント4は、更新前のデータを示すメタ情報IDを用いて、データ削除処理を実行する(ステップS905)。このような場合には、サーバ2が図12に示す処理を実行することとなる。
一方、クライアント4は、預け情報が「○」ではない場合は(ステップS902否定)、ファイルシステム20から読み出したデータを更新する(ステップS906)。そして、クライアント4は、ステップS904、またはステップS906にて更新したデータをファイルシステム20に書き込む(ステップS907)。その後、クライアント4は、更新したデータについての新たなエントリをメタ情報管理部22に追加し、メタ情報管理部22を更新し(ステップS908)、処理を終了する。
次に、図16を用いて、アプリケーション21がデータの削除を行う際にクライアント4が実行する処理の流れについて説明する。図16は、データ削除時にクライアントが実行する処理の流れを説明するためのフローチャートである。まず、アプリケーション21がデータの削除を実行すると(ステップS1001)、クライアント4は、メタ情報管理部22にアクセスし、削除対象のデータを示すデータIDと対応付けられた預け情報が「○」であるか否かを判別する(ステップS1002)。
そして、クライアント4は、預け情報が「○」である場合は(ステップS1002肯定)、データ削除処理を実行する(ステップS1003)。具体的には、クライアント4は、サーバ2にデータ削除要求を送信することで、サーバ2に図12の処理を実行させる。一方、クライアント4は、預け情報が「○」ではない場合は(ステップS1002否定)、ファイルシステム20から削除対象のデータを削除する(ステップS1004)。
その後、クライアント4は、削除対象のデータを示すメタ情報IDを有するエントリをメタ情報管理部22から削除し(ステップS1005)、処理を終了する。
[実施例1の効果]
上述したように、クライアント4は、クライアント4〜6から預かったデータを保管するサーバ2から、ファイルシステム20が記憶するデータをサーバ2が預かる際に発生する時値を取得する。そして、クライアント4は、取得した時価に応じて、ファイルシステム20が記憶するデータからサーバ2に預けるデータを選択する。このため、クライアント4は、利用者にとって最小のコストでデータの保管を行うことができる。
また、クライアント4は、ファイルシステム20が記憶する各データに対するアクセス頻度を監視し、監視したアクセス頻度と時価とに応じ、データをサーバ2に預けた際の効率性を評価する。その後、クライアント4は、各データに対する効率性の評価結果に応じて、サーバ2に預けるデータを選択する。このため、クライアント4は、ネットワークシステム1におけるネットワークトラフィックの増加を抑えることができる。
すなわち、クライアント4は、アクセス頻度が低いデータをサーバ2に預けた場合は、ネットワークシステム1におけるネットワークトラフィックの増加を抑えることができる。この結果、ネットワークシステム1は、同じ設備でより多くの利用者に対応することができ、サービス運営者、および利用者に対して要求するコストを削減することができる。
また、クライアント4は、効率性の評価結果が高いデータから順に、複数のデータを、データを預けた際の時価の合計が所定の値以下となるように選択する。このため、クライアント4は、利用者があらかじめ設定したルール(ポリシ)に従って、クライアント4が記憶するデータをサーバ2に自動で預けることができる。なお、ルールには、月額100円以下で、1週間以上アクセスしていないデータを可能な限りサーバ2に預けるといった料金的、時期的なルールを適用することができ、また、預けるデータのデータ容量や預けるデータの種類を限定するルールを適用することもできる。
また、クライアント4は、各データについて、同一のデータを預けたクライアントの数と、データの容量とに応じて変動する時価をサーバ2から取得する。このためクライアント4は、より多くのクライアントが預けているデータを優先的にサーバ2へ預けるので、利用者に対するコストをより削減することができる。
また、サーバ2は、1または複数のクライアント4〜6から預かったデータを記憶する。また、サーバ2は、記憶した各データと同一のデータを預けたクライアントの数を計数する。そして、サーバ2は、計数したクライアントの数に応じて、データを記憶する際の時価を算出し、クライアント4〜6に対して算出した時価を通知する。このため、サーバ2は、各クライアント4〜6に対して、同一のデータを優先的に預けるようインセンティブを設けることができる結果、重複保管を効率的に行うことができる。
(他の実施形態)
これまで第1の実施形態について説明したが、開示する発明は上述した実施形態以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では他の実施形態について説明する。
(1)サーバ2、およびクライアント4について
上述したサーバ2は、実データ記憶部10、メタ情報記憶部11、保存情報ユーザデータベース12を有していた。しかし、実施例はこれに限定されるものではなく、例えば、実データ記憶部10、メタ情報記憶部11、保存情報ユーザデータベース12は、同一の記憶装置内に記憶されたデータベースであってもよい。また、図示したサーバ2、クライアント4の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。
すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、フィルタファイルシステム23と監視エージェント24とを統合してもよい。さらに、各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、第1の実施形態において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
(2)分散について
上述した第1の実施形態では、単一の筐体内にサーバ2の全ての機能を備えることとした。しかしながら、第1の実施形態は、これに限定されるものではなく、例えば、サーバ2が有する各機能は、分散させることが可能である。例えば、サーバ2の各機能は、複数のサーバ装置が協調して実現させるものであってもよく、サーバ2をいわゆるクラウドシステム上における仮想的なサーバとして動作させてもよい。
また、サーバ2の各機能を分散させた場合は、例えば、保存情報ユーザデータベース12が記憶するデータは、ユーザごと、すなわちエントリごとに異なる記憶装置が記憶してもよい。また、実データ記憶部10が記憶するデータは、対応付けられたkeyおよびvalueごとに異なる記憶装置が記憶してもよく、メタ情報記憶部11が記憶する情報は、メタ情報IDごと、すなわちエントリごとに異なる記憶装置が記憶してもよい。
(3)利用者のプライバシーについて
ネットワーク上のストレージサーバにデータを保管する場合は、クライアントのプライバシーを担保するため、データを暗号化するのが一般的である。しかし、それぞれ異なる暗号鍵で暗号化されたデータは、元のデータが同一のデータであっても、同一のデータと識別することができない。このため、異なる暗号鍵で暗号化された同一データの重複保管を回避することができない。なお、同一のデータを同一の暗号鍵で暗号化した場合は、利用者のプライバシーを担保することができない。
しかしながら、上述した第1の実施形態において説明したストレージシステム1は、任意のセキュリティシステムと組み合わせて実施することができる。例えば、ストレージシステム1は、Convergent Encryptionにより演算を行ったデータを用いることで、データ内容をサービス運用者に対して隠すことができる。なお、Convergent Encryptionにおける最初のハッシュ関数の計算と、メタ情報IDの計算は同一の計算内容となるため、サーバ2、およびクライアント4における計算量を削減することができる。
(4)プログラム
また、上記実施形態において説明したクライアント4が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、実施例1に係るクライアント4が実行する処理をコンピュータが実行可能な言語で記述したストレージプログラムを作成することもできる。この場合、コンピュータがストレージプログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかるストレージプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたストレージプログラムをコンピュータに読み込ませて実行することにより上記第一の実施形態と同様の処理を実現してもよい。以下に、図5に示したクライアント4と同様の機能を実現するストレージプログラムを実行するコンピュータの一例を説明する。
図17は、ストレージプログラムを実行するコンピュータを示す図である。図17に例示するように、コンピュータ1000は、例えば、メモリ1010と、CPU1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、ネットワークインタフェース1070とを有し、これらの各部はバス1080によって接続される。
メモリ1010は、図17に例示するように、ROM(Read Only Memory)1011及びRAM1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、図17に例示するように、ハードディスクドライブ1031に接続される。ディスクドライブインタフェース1040は、図17に例示するように、ディスクドライブ1041に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブに挿入される。
ここで、図17に例示するように、ハードディスクドライブ1031は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093、プログラムデータ1094を記憶する。すなわち、上記のストレージプログラムは、コンピュータ1000によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ1031に記憶される。
また、上記実施形態で説明した各種データは、プログラムデータとして、例えばメモリ1010やハードディスクドライブ1031に記憶される。そして、CPU1020が、メモリ1010やハードディスクドライブ1031に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出し、各手順を実行する。
なお、ストレージプログラムに係るプログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1031に記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ等を介してCPU1020によって読み出されてもよい。あるいは、ストレージプログラムに係るプログラムモジュール1093やプログラムデータ1094は、ネットワーク(LAN(Local Area Network)、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
これまでいくつかの実施形態を説明したが、本願が開示する技術はこれらの実施形態に限定されるものではない。すなわち、これらの実施形態は、その他の様々な形態で実施されることが可能であり、種々の省略、置き換え、変更を行うことができる。
例えば、各装置の分散・統合の具体的形態(例えば、図5の形態)は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合することができる。一例を挙げると、データ送受信部26と仮想送信部部27とを一つの部として統合してもよい。
また、実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的に行うこともできる。例えば、図5における設定部25が発揮する機能は手動で発揮するものとしてもよい。
また、認証部17、28をサーバ2、クライアント4の外部装置としてネットワーク経由で接続し、例えばOAuth等のネットワーク上における認証をおこなうこととしてもよい。
これらの実施例やその変形は、本願が開示する技術に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。