(57)【特許請求の範囲】
【請求項１】
記憶対象となるデータを記憶する記憶装置を備えると共に、当該記憶装置に既に記憶されているデータを構成するブロックデータと同一内容の他のブロックデータを記憶装置に格納する場合に当該記憶装置に既に記憶されているブロックデータを他のブロックデータとして参照させるデータ格納制御部を備えたストレージサーバと、
前記ストレージサーバに対する記憶対象となるデータを構成するブロックデータの書き込みを制御するアクセラレータサーバと、を備え、
前記ストレージサーバは、前記アクセラレータサーバからの重複確認要求に応じて、当該アクセラレータサーバから送信された、記憶対象となるデータを構成するブロックデータの内容に固有の内容識別データを受け、当該内容識別データに対応するブロックデータが記憶装置に格納されているか否かを確認し、その結果である重複確認結果を前記アクセラレータサーバに返送する重複確認部を備え、
前記アクセラレータサーバは、
前記ストレージサーバに対して、記憶対象となるデータを構成する所定範囲のブロックデータのうち一部のブロックデータの前記内容識別データを送信して、当該ブロックデータが前記ストレージサーバに記憶されているか否かの重複確認要求を当該ストレージサーバに行う一部重複確認依頼部と、
前記ストレージサーバが有する前記重複確認部からの重複確認結果に応じて、記憶対象となるデータを構成する所定範囲の全てのブロックデータを前記ストレージサーバに送信する全ブロック送信処理、あるいは、記憶対象となるデータを構成する所定範囲の全てのブロックデータのそれぞれに対応する各前記内容識別データを前記ストレージサーバに送信して各ブロックデータが前記ストレージサーバに既に記憶されているか否かの重複確認要求を行い、これに対する前記ストレージサーバが有する前記重複確認部からの重複確認結果に応じて前記ストレージサーバに記憶されていないブロックデータを当該ストレージサーバに送信する一部ブロック送信処理、のいずれかを実行するブロックデータ送信部と、を備えた、
ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記ストレージサーバが有する前記重複確認部からの重複確認結果に基づいて、記憶対象となるデータを構成するブロックデータが前記ストレージサーバに記憶されていると判断された度合いを表す重複度を計測する重複度計測部を備えると共に、
前記ブロックデータ送信部は、前記重複度の値に応じて、前記全ブロック送信処理、あるいは、前記一部ブロック送信処理、のいずれかを実行する、
ストレージシステム。
【請求項３】
請求項２に記載のストレージシステムであって、
前記ブロックデータ送信部は、前記重複度が予め設定された基準値より低い場合には前記全ブロック送信処理を実行し、前記重複度が予め設定された基準値以上である場合には前記一部ブロック送信処理を実行する、
ストレージシステム。
【請求項４】
請求項３に記載のストレージシステムであって、
前記重複度計測部は、前記ストレージサーバが有する前記重複確認部からの重複確認結果により、前記ブロックデータが前記ストレージサーバに既に記憶されていると判断された場合には、前記重複度に所定値を加算し、前記ブロックデータが前記ストレージサーバに記憶されていないと判断された場合には、前記重複度から所定値を減算する、
ストレージシステム。
【請求項５】
請求項４に記載のストレージシステムであって、
前記重複度計測部は、前記ストレージサーバが有する前記重複確認部からの重複確認結果により前記ストレージサーバに既に記憶されていると判断された前記ブロックデータの数を前記重複度に加算し、前記ストレージサーバに記憶されていない判断された前記ブロックデータの数を前記重複度から減算する、
ストレージシステム。
【請求項６】
請求項３乃至５のいずれかに記載のストレージシステムであって、
前記一部重複確認依頼部は、前記重複度が予め設定された基準値以上の値に変化したときには作動を停止し、前記重複度が予め設定された基準値以上の値から当該基準値より低い値に変化したときには作動を再開する、
ストレージシステム。
【請求項７】
請求項１乃至６のいずれかに記載のストレージシステムであって、
前記全ブロック送信処理及び前記一部ブロック送信処理は、前記ストレージサーバに送信する前記ブロックデータを圧縮して当該ストレージノードに送信する、
ストレージシステム。
【請求項８】
記憶対象となるデータを記憶する記憶装置を備えると共に、
前記記憶装置に既に記憶されているデータを構成するブロックデータと同一内容の他のブロックデータを記憶装置に格納する場合に当該記憶装置に既に記憶されているブロックデータを他のブロックデータとして参照させるデータ格納制御部と、
前記アクセラレータサーバからの重複確認要求に応じて、当該アクセラレータサーバから送信された、記憶対象となるデータを構成するブロックデータの内容に固有の内容識別データを受け、当該内容識別データに対応するブロックデータが記憶装置に格納されているか否かを確認し、その結果である重複確認結果を前記アクセラレータサーバに返送する重複確認部と、を備えたストレージサーバに接続された情報処理装置であって、
前記ストレージサーバに対する記憶対象となるデータを構成するブロックデータの書き込みを制御する書き込み制御部と、
前記ストレージサーバに対して、記憶対象となるデータを構成する所定範囲のブロックデータのうち一部のブロックデータの前記内容識別データを送信して、当該ブロックデータが前記ストレージサーバに記憶されているか否かの重複確認要求を当該ストレージサーバに行う一部重複確認依頼部と、
前記ストレージサーバが有する前記重複確認部からの重複確認結果に応じて、記憶対象となるデータを構成する所定範囲の全てのブロックデータを前記ストレージサーバに送信する全ブロック送信処理、あるいは、記憶対象となるデータを構成する所定範囲の全てのブロックデータのそれぞれに対応する各前記内容識別データを前記ストレージサーバに送信して各ブロックデータが前記ストレージサーバに既に記憶されているか否かの重複確認要求を行い、これに対する前記ストレージサーバが有する前記重複確認部からの重複確認結果に応じて前記ストレージサーバに記憶されていないブロックデータを当該ストレージサーバに送信する一部ブロック送信処理、のいずれかを実行するブロックデータ送信部と、
を備えた情報処理装置。
【請求項９】
記憶対象となるデータを記憶する記憶装置を備えると共に、
前記記憶装置に既に記憶されているデータを構成するブロックデータと同一内容の他のブロックデータを記憶装置に格納する場合に当該記憶装置に既に記憶されているブロックデータを他のブロックデータとして参照させるデータ格納制御部と、
前記アクセラレータサーバからの重複確認要求に応じて、当該アクセラレータサーバから送信された、記憶対象となるデータを構成するブロックデータの内容に固有の内容識別データを受け、当該内容識別データに対応するブロックデータが記憶装置に格納されているか否かを確認し、その結果である重複確認結果を前記アクセラレータサーバに返送する重複確認部と、を備えたストレージサーバに接続された情報処理装置に、
前記ストレージサーバに対する記憶対象となるデータを構成するブロックデータの書き込みを制御する書き込み制御部と、
前記ストレージサーバに対して、記憶対象となるデータを構成する所定範囲のブロックデータのうち一部のブロックデータの前記内容識別データを送信して、当該ブロックデータが前記ストレージサーバに記憶されているか否かの重複確認要求を当該ストレージサーバに行う一部重複確認依頼部と、
前記ストレージサーバが有する前記重複確認部からの重複確認結果に応じて、記憶対象となるデータを構成する所定範囲の全てのブロックデータを前記ストレージサーバに送信する全ブロック送信処理、あるいは、記憶対象となるデータを構成する所定範囲の全てのブロックデータのそれぞれに対応する各前記内容識別データを前記ストレージサーバに送信して各ブロックデータが前記ストレージサーバに既に記憶されているか否かの重複確認要求を行い、これに対する前記ストレージサーバが有する前記重複確認部からの重複確認結果に応じて前記ストレージサーバに記憶されていないブロックデータを当該ストレージサーバに送信する一部ブロック送信処理、のいずれかを実行するブロックデータ送信部と、
を実現させるためのプログラム。
【請求項１０】
記憶対象となるデータを記憶する記憶装置を備えると共に、当該記憶装置に既に記憶されているデータを構成するブロックデータと同一内容の他のブロックデータを記憶装置に格納する場合に当該記憶装置に既に記憶されているブロックデータを他のブロックデータとして参照させるデータ格納制御部を備えたストレージサーバと、
前記ストレージサーバに対する記憶対象となるデータを構成するブロックデータの書き込みを制御するアクセラレータサーバと、を備えたストレージシステムにて、
前記アクセラレータサーバが、前記ストレージサーバに対して、記憶対象となるデータを構成する所定範囲のブロックデータのうち一部のブロックデータの内容に固有の内容識別データを送信して、当該ブロックデータが前記ストレージサーバに記憶されているか否かの重複確認要求を当該ストレージサーバに行い、
前記ストレージサーバが、前記アクセラレータサーバからの重複確認要求に応じて、当該アクセラレータサーバから送信された前記内容識別データを受け、当該内容識別データに対応するブロックデータが記憶装置に格納されているか否かを確認し、その結果である重複確認結果を前記アクセラレータサーバに返送し、
前記アクセラレータサーバは、前記ストレージサーバからの重複確認結果に応じて、記憶対象となるデータを構成する所定範囲の全てのブロックデータを前記ストレージサーバに送信する全ブロック送信処理、あるいは、記憶対象となるデータを構成する所定範囲の全てのブロックデータのそれぞれに対応する各前記内容識別データを前記ストレージサーバに送信して各ブロックデータが前記ストレージサーバに既に記憶されているか否かの重複確認要求を行い、これに対する前記ストレージサーバからの重複確認結果に応じて前記ストレージサーバに記憶されていないブロックデータを当該ストレージサーバに送信する一部ブロック送信処理、のいずれかを実行する、
データ格納方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムにかかり、特に、記憶するデータの重複排除機能を有するストレージシステムに関する。
【背景技術】
【０００２】
近年、コンピュータの発達及び普及に伴い、種々の情報がデジタルデータ化されている。このようなデジタルデータを保存しておく装置として、磁気テープや磁気ディスクなどの記憶装置がある。そして、保存すべきデータは日々増大し、膨大な量となるため、大容量なストレージシステムが必要となっている。また、記憶装置に費やすコストを削減しつつ、信頼性も必要とされる。これに加えて、後にデータを容易に取り出すことが可能であることも必要である。その結果、自動的に記憶容量や性能の増大を実現できると共に、重複記憶を排除して記憶コストを削減し、さらには、冗長性の高いストレージシステムが望まれている。
【０００３】
このような状況に応じて、近年では、特許文献１に示すように、コンテンツアドレスストレージシステムが開発されている。このコンテンツアドレスストレージシステムは、データを分散して複数の記憶装置に記憶すると共に、このデータの内容に応じて特定される固有のコンテンツアドレスによって、当該データを格納した格納位置が特定される。
【０００４】
具体的に、コンテンツアドレスストレージシステムでは、所定のデータを複数のフラグメントに分割すると共に、冗長データとなるフラグメントをさらに付加して、これら複数のフラグメントをそれぞれ複数の記憶装置にそれぞれ格納している。そして、後に、コンテンツアドレスを指定することにより、当該コンテンツアドレスにて特定される格納位置に格納されているデータつまりフラグメントを読み出し、複数のフラグメントから分割前の所定のデータを復元することができる。このようにすることで、データへのアクセス性能を高めつつ、フラグメントのいくつかを消失した場合であってもデータを復元でき、耐障害性を高めている。
【０００５】
また、格納されたデータを参照する上記コンテンツアドレスは、データの内容に応じて固有となるよう生成される。このため、重複データであれば同じ格納位置のデータを参照することで、同一内容のデータを取得することができる。従って、重複データを別々に格納する必要がなく、重複記録を排除し、データ容量の削減を図ることができる。
【０００６】
上述したコンテンツアドレスストレージシステムの一例について、さらに詳述する。コンテンツアドレスストレージシステムは、例えば、図１に示すように、記憶対象データを記憶する１台以上のストレージノード３２０と、当該ストレージノード３２０にデータの対する書き込み及び読み出しを制御する１台以上のアクセラレータノード３１０と、を備える。
【０００７】
まず、上記アクセラレータノード３１０は、クライアント３０１から送信されたファイルを構成するブロック列Ｂ１００を受け取る（図１の（１））。図１の例では、送信されたデータＢ１００は、「ＡＢＣＤＥ」という５つのブロックから構成されるものとしている。
【０００８】
アクセラレータノード３１０は、上記ブロック列Ｂ１００を受け取ると、ファイルシステム３１１が有するブロック処理部３１２が、受け取った各ブロックのハッシュ値を取得して、当該各ブロックを圧縮する（図１の（２））。続いて、ファイルシステム３１１が有するブロック送信部３１３が、各ブロックのハッシュ値列Ｂ１０２と圧縮されたブロック列Ｂ１０１を、ストレージノード３２０へ送信する（図１の（３））。
【０００９】
ストレージノード３２０は、アクセラレータノード３１０から圧縮されたブロック列Ｂ１０１とハッシュ値列Ｂ１０２を受け取ると、ブロック保存部３２１が有する重複確認部３２２が、ハッシュ値列Ｂ１０２のうち同じハッシュ値を持つブロックが既にディスク３２５に格納されているかを確認する（図１の（４））。図１の例では、ハッシュ値列Ｂ１０３を確認したところ、ブロックＢ，Ｄに対応するハッシュ値ｂ，ｄが、既にディスク３２５に存在していたことが確認されたこととする。すると、ストレージノード３２０は、重複しているブロックのハッシュ値列Ｂ１０４を取得する。
【００１０】
続いて、ストレージノード３２０のブロック保存部３２１が有するブロック書込部３２３が、重複しているブロックのハッシュ値を元に、重複していないブロックと、そのブロックのハッシュ値を、ディスク２５に格納する（図１の（５））。図１の例では、重複していない符号Ａ，Ｃ，ＥのブロックＢ１０５と、そのハッシュ値Ｂ１０６を、ディスク３２５に格納している。
【００１１】
以上により、クライアント３０１とは別のクライアントから、上述したようにストレージノード３２０に格納されたブロック列Ｂ１００と全く同じブロック列Ｂ１１０が送信された場合であっても、ストレージノード３２０に新たなブロックが書き込まれることが抑制され、格納するデータの重複を排除することができる。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００５−２３５１７１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかしながら、上述したストレージシステムにおけるデータ格納方法では、ストレージノードの記憶装置に書き込まれないブロックであっても、アクセラレータノードで圧縮処理を行うと共に、ストレージノードへの送信を行う必要がある（図１の符号Ｂ１１１，Ｂ１１２を参照）。このため、ブロックの送信に使用する通信資源と、ブロックの圧縮に使用するアクセラレータノードのＣＰＵ資源が必要となる。すると、多数のクライアントから重複度が高いブロック列が送信された場合には、通信資源とＣＰＵ資源の浪費により、ストレージシステムの性能が低下する、という問題が生じる。
【００１４】
このため、本発明の目的は、上述した課題である、ストレージシステムの性能の低下、ということを解決することにある。
【課題を解決するための手段】
【００１５】
かかる目的を達成するため本発明の一形態であるストレージシステムは、
記憶対象となるデータを記憶する記憶装置を備えると共に、当該記憶装置に既に記憶されているデータを構成するブロックデータと同一内容の他のブロックデータを記憶装置に格納する場合に当該記憶装置に既に記憶されているブロックデータを他のブロックデータとして参照させるデータ格納制御部を備えたストレージサーバと、
上記ストレージサーバに対する記憶対象となるデータを構成するブロックデータの書き込みを制御するアクセラレータサーバと、を備える。
【００１６】
そして、上記ストレージサーバは、上記アクセラレータサーバからの重複確認要求に応じて、当該アクセラレータサーバから送信された、記憶対象となるデータを構成するブロックデータの内容に固有の内容識別データを受け、当該内容識別データに対応するブロックデータが記憶装置に格納されているか否かを確認し、その結果である重複確認結果を上記アクセラレータサーバに返送する重複確認部を備える。
【００１７】
さらに、上記アクセラレータサーバは、
上記ストレージサーバに対して、記憶対象となるデータを構成する所定範囲のブロックデータのうち一部のブロックデータの上記内容識別データを送信して、当該ブロックデータが上記ストレージサーバに記憶されているか否かの重複確認要求を当該ストレージサーバに行う一部重複確認依頼部と、
上記ストレージサーバが有する上記重複確認部からの重複確認結果に応じて、記憶対象となるデータを構成する所定範囲の全てのブロックデータを上記ストレージサーバに送信する全ブロック送信処理、あるいは、記憶対象となるデータを構成する所定範囲の全てのブロックデータのそれぞれに対応する各上記内容識別データを上記ストレージサーバに送信して各ブロックデータが上記ストレージサーバに既に記憶されているか否かの重複確認要求を行い、これに対する上記ストレージサーバが有する上記重複確認部からの重複確認結果に応じて上記ストレージサーバに記憶されていないブロックデータを当該ストレージサーバに送信する一部ブロック送信処理、のいずれかを実行するブロックデータ送信部と、を備えた、
という構成をとる。
【００１８】
また、本発明の他の形態である情報処理装置は、
記憶対象となるデータを記憶する記憶装置を備えると共に、
上記記憶装置に既に記憶されているデータを構成するブロックデータと同一内容の他のブロックデータを記憶装置に格納する場合に当該記憶装置に既に記憶されているブロックデータを他のブロックデータとして参照させるデータ格納制御部と、
上記アクセラレータサーバからの重複確認要求に応じて、当該アクセラレータサーバから送信された、記憶対象となるデータを構成するブロックデータの内容に固有の内容識別データを受け、当該内容識別データに対応するブロックデータが記憶装置に格納されているか否かを確認し、その結果である重複確認結果を上記アクセラレータサーバに返送する重複確認部と、を備えたストレージサーバに接続された情報処理装置である。
【００１９】
そして、上記情報処理装置は、
上記ストレージサーバに対する記憶対象となるデータを構成するブロックデータの書き込みを制御する書き込み制御部と、
上記ストレージサーバに対して、記憶対象となるデータを構成する所定範囲のブロックデータのうち一部のブロックデータの上記内容識別データを送信して、当該ブロックデータが上記ストレージサーバに記憶されているか否かの重複確認要求を当該ストレージサーバに行う一部重複確認依頼部と、
上記ストレージサーバが有する上記重複確認部からの重複確認結果に応じて、記憶対象となるデータを構成する所定範囲の全てのブロックデータを上記ストレージサーバに送信する全ブロック送信処理、あるいは、記憶対象となるデータを構成する所定範囲の全てのブロックデータのそれぞれに対応する各上記内容識別データを上記ストレージサーバに送信して各ブロックデータが上記ストレージサーバに既に記憶されているか否かの重複確認要求を行い、これに対する上記ストレージサーバが有する上記重複確認部からの重複確認結果に応じて上記ストレージサーバに記憶されていないブロックデータを当該ストレージサーバに送信する一部ブロック送信処理、のいずれかを実行するブロックデータ送信部と、
を備えた、
という構成をとる。
【００２０】
また、本発明の他の形態であるプログラムは、
記憶対象となるデータを記憶する記憶装置を備えると共に、
上記記憶装置に既に記憶されているデータを構成するブロックデータと同一内容の他のブロックデータを記憶装置に格納する場合に当該記憶装置に既に記憶されているブロックデータを他のブロックデータとして参照させるデータ格納制御部と、
上記アクセラレータサーバからの重複確認要求に応じて、当該アクセラレータサーバから送信された、記憶対象となるデータを構成するブロックデータの内容に固有の内容識別データを受け、当該内容識別データに対応するブロックデータが記憶装置に格納されているか否かを確認し、その結果である重複確認結果を上記アクセラレータサーバに返送する重複確認部と、を備えたストレージサーバに接続された情報処理装置に、組み込まれるプログラムである。
【００２１】
そして、上記プログラムは、情報処理装置に、
上記ストレージサーバに対する記憶対象となるデータを構成するブロックデータの書き込みを制御する書き込み制御部と、
上記ストレージサーバに対して、記憶対象となるデータを構成する所定範囲のブロックデータのうち一部のブロックデータの上記内容識別データを送信して、当該ブロックデータが上記ストレージサーバに記憶されているか否かの重複確認要求を当該ストレージサーバに行う一部重複確認依頼部と、
上記ストレージサーバが有する上記重複確認部からの重複確認結果に応じて、記憶対象となるデータを構成する所定範囲の全てのブロックデータを上記ストレージサーバに送信する全ブロック送信処理、あるいは、記憶対象となるデータを構成する所定範囲の全てのブロックデータのそれぞれに対応する各上記内容識別データを上記ストレージサーバに送信して各ブロックデータが上記ストレージサーバに既に記憶されているか否かの重複確認要求を行い、これに対する上記ストレージサーバが有する上記重複確認部からの重複確認結果に応じて上記ストレージサーバに記憶されていないブロックデータを当該ストレージサーバに送信する一部ブロック送信処理、のいずれかを実行するブロックデータ送信部と、
を実現させるためのプログラムである。
【００２２】
また、本発明の他の形態であるデータ格納方法は、
記憶対象となるデータを記憶する記憶装置を備えると共に、当該記憶装置に既に記憶されているデータを構成するブロックデータと同一内容の他のブロックデータを記憶装置に格納する場合に当該記憶装置に既に記憶されているブロックデータを他のブロックデータとして参照させるデータ格納制御部を備えたストレージサーバと、
上記ストレージサーバに対する記憶対象となるデータを構成するブロックデータの書き込みを制御するアクセラレータサーバと、を備えたストレージシステムにて、実行される方法である。
【００２３】
そして、上記データ格納方法は、
上記アクセラレータサーバが、上記ストレージサーバに対して、記憶対象となるデータを構成する所定範囲のブロックデータのうち一部のブロックデータの内容に固有の内容識別データを送信して、当該ブロックデータが上記ストレージサーバに記憶されているか否かの重複確認要求を当該ストレージサーバに行い、
上記ストレージサーバが、上記アクセラレータサーバからの重複確認要求に応じて、当該アクセラレータサーバから送信された上記内容識別データを受け、当該内容識別データに対応するブロックデータが記憶装置に格納されているか否かを確認し、その結果である重複確認結果を上記アクセラレータサーバに返送し、
上記アクセラレータサーバは、上記ストレージサーバからの重複確認結果に応じて、記憶対象となるデータを構成する所定範囲の全てのブロックデータを上記ストレージサーバに送信する全ブロック送信処理、あるいは、記憶対象となるデータを構成する所定範囲の全てのブロックデータのそれぞれに対応する各上記内容識別データを上記ストレージサーバに送信して各ブロックデータが上記ストレージサーバに既に記憶されているか否かの重複確認要求を行い、これに対する上記ストレージサーバからの重複確認結果に応じて上記ストレージサーバに記憶されていないブロックデータを当該ストレージサーバに送信する一部ブロック送信処理、のいずれかを実行する、
という手順にて実行される。
【発明の効果】
【００２４】
本発明は、以上のように構成されることにより、格納するデータの重複排除を実現しつつ、ストレージシステムの性能の向上を図ることができる。
【図面の簡単な説明】
【００２５】
【図１】本発明に関連するストレージシステムの構成及び動作を示すブロック図である。
【図２】本発明の実施形態１におけるストレージシステムの構成の概略を示すブロック図である。
【図３】図２に開示したストレージシステムにおけるデータ記憶処理の様子を説明するための説明図である。
【図４】図２に開示したストレージシステムにおけるデータ記憶処理の様子を説明するための説明図である。
【図５】本発明の実施形態１におけるストレージシステムの構成及び動作を示すブロック図である。
【図６】図５に開示した重複度スコアの一例を示す図である。
【図７】図５に開示したストレージシステムの動作を示す説明図である。
【図８】図５に開示したストレージシステムの動作を示す説明図である。
【図９】図５に開示したアクセラレータノードの動作を示すフローチャートである。
【図１０】図５に開示したアクセラレータノードの動作を示すフローチャートである。
【図１１】図５に開示したアクセラレータノードの動作を示すフローチャートである。
【図１２】図５に開示したストレージシステムの動作の他の例を示す説明図である。
【図１３】本発明の付記におけるストレージシステムの構成を示すブロック図である。
【発明を実施するための形態】
【００２６】
＜実施形態１＞
本発明の第１の実施形態を、図２乃至図１２を参照して説明する。図２は、本実施形態におけるストレージシステムの全体構成を示すブロック図である。図３乃至図４は、データ書き込み処理の様子を示す説明図である。図５は、ストレージシステムの構成を示すブロック図であり、図６は、重複度スコアの一例を示す図である。図７乃至図８は、ストレージシステムの動作を説明する図であり、図９乃至図１１は、アクセラレータノードの動作を示すフローチャートである。図１２は、ストレージシステムの他の動作を説明する図である。
【００２７】
ここで、本実施形態は、後述する付記に記載のストレージシステム等の具体的な一例を示すものである。そして、以下では、ストレージシステムが、複数台のサーバコンピュータが接続されて構成されている場合を説明する。但し、本発明におけるストレージシステムは、複数台のコンピュータにて構成されることに限定されず、１台のコンピュータで構成されていてもよい。
【００２８】
［構成］
本実施形態におけるストレージシステム１００は、図２に示すように、バックアップを必要とするデータなど、所定のデータの書き込み要求を行う情報処理装置であるクライアント１０１にネットワークを介して接続されている。
【００２９】
そして、図２に示すように、本実施形態におけるストレージシステム１００は、複数のサーバコンピュータが接続された構成を採っている。具体的に、ストレージシステム１００は、ストレージシステム１００自体における記憶再生動作を制御する情報処理装置であるアクセラレータノード１０と、データを格納する記憶装置を備えた情報処理装置であるストレージノード２０と、を備えている。なお、アクセラレータノード１０の数とストレージノード２０の数は、図２に示したものに限定されず、さらに多くの各ノード１０，２０が接続されて構成されていてもよい。
【００３０】
さらに、本実施形態におけるストレージシステム１００は、データを分割及び冗長化し、分散して複数の記憶装置に記憶すると共に、記憶するデータの内容に応じて設定される固有のコンテンツアドレスによって、当該データを格納した格納位置を特定するコンテンツアドレスストレージシステムである。
【００３１】
ここで、ストレージシステム１００が、記憶対象となるデータを、コンテンツアドレスを利用して記憶装置に書き込むときの処理を、図３乃至図４を参照して説明する。なお、ここでは、ストレージシステム１００が１つのシステムであるとして、当該ストレージシステム１００が備えている構成及び機能を説明する。
【００３２】
まず、図４に示すように、クライアントから書き込み要求されたファイルＡの入力を受けると（矢印Ｙ１）、図３及び図４の矢印Ｙ２に示すように、当該ファイルＡを、所定容量（例えば、６４ＫＢ）のブロックデータＤに分割する。そして、このブロックデータＤのデータ内容に基づいて、当該データ内容を代表する固有のハッシュ値Ｈを算出する（矢印Ｙ３）。例えば、ハッシュ値Ｈは、予め設定されたハッシュ関数を用いて、ブロックデータＤのデータ内容から算出する。
【００３３】
続いて、ファイルＡのブロックデータＤのハッシュ値Ｈを用いて、当該ブロックデータＤが既に格納されているか否かを調べる。具体的には、まず、既に格納されているブロックデータＤは、そのハッシュ値Ｈと格納位置を表すコンテンツアドレスＣＡとが、関連付けられてＭＦＩ（Ｍａｉｎ  Ｆｒａｇｍｅｎｔ  Ｉｎｄｅｘ）ファイルに登録されている。従って、格納前に算出したブロックデータＤのハッシュ値ＨがＭＦＩファイル内に存在している場合には、既に同一内容のブロックデータＤが格納されていると判断できる（図４の矢印Ｙ４）。この場合には、格納前のブロックデータＤのハッシュ値Ｈと一致したＭＦＩ内のハッシュ値Ｈに関連付けられているコンテンツアドレスＣＡを、当該ＭＦＩファイルから取得する。そして、このコンテンツアドレスＣＡを、書き込み要求されたブロックデータＤのコンテンツアドレスＣＡとして返却する。これにより、このコンテンツアドレスＣＡにて参照される既に格納されているデータが、書き込み要求されたブロックデータＤとして使用されることとなり、当該書き込み要求にかかるブロックデータＤを記憶する必要がなくなる。
【００３４】
また、書き込み要求にかかるブロックデータＤがまだ記憶されていないと判断された場合には、かかるブロックデータＤを圧縮して、図４の矢印Ｙ５に示すように、複数の所定の容量のフラグメントデータに分割する。例えば、図３の符号Ｄ１〜Ｄ９に示すように、９つのフラグメントデータ（分割データ３１）に分割する。そしてさらに、分割したフラグメントデータのうちいくつかが欠けた場合であっても、元となるブロックデータを復元可能なよう冗長データを生成し、上記分割したフラグメントデータ３１に追加する。例えば、図３の符号Ｄ１０〜Ｄ１２に示すように、３つのフラグメントデータ（冗長データ３２）を追加する。これにより、９つの分割データ３１と、３つの冗長データ３２とにより構成される１２個のフラグメントデータからなるデータセット３０を生成する。
【００３５】
続いて、上述したように生成されたデータセットを構成する各フラグメントデータを、記憶装置に形成された各記憶領域に、それぞれ分散して格納する。例えば、図３に示すように、１２個のフラグメントデータＤ１〜Ｄ１２を生成した場合には、複数の記憶装置内にそれぞれ形成したデータ格納ファイルに、各フラグメントデータＤ１〜Ｄ１２を１つずつそれぞれ格納する（図４の矢印Ｙ６参照）。
【００３６】
続いて、ストレージシステム１００は、上述したように格納したフラグメントデータＤ１〜Ｄ１２の格納位置、つまり、当該フラグメントデータＤ１〜Ｄ１２にて復元されるブロックデータＤの格納位置を表すコンテンツアドレスＣＡを生成して管理する。具体的には、格納したブロックデータＤの内容に基づいて算出したハッシュ値Ｈの一部（ショートハッシュ）（例えば、ハッシュ値Ｈの先頭８Ｂ（バイト））と、論理格納位置を表す情報と、を組み合わせて、コンテンツアドレスＣＡを生成する。そして、このコンテンツアドレスＣＡを、ストレージシステム１００内のファイルシステムに返却する（図４の矢印Ｙ７）。すると、ストレージシステム１００は、記憶対象であるデータのファイル名などの識別情報と、コンテンツアドレスＣＡとを関連付けてファイルシステムで管理する。
【００３７】
また、ブロックデータＤのコンテンツアドレスＣＡと、当該ブロックデータＤのハッシュ値Ｈと、を関連付けて、各ストレージノード２０がＭＦＩファイルにて管理する。このように、上記コンテンツアドレスＣＡは、ファイルを特定する情報やハッシュ値Ｈなどと関連付けられて、アクセラレータノード１０やストレージノード２０の記憶装置に格納される。
【００３８】
さらに、ストレージシステム１００は、上述したように格納したファイルを読み出す制御を行う。例えば、クライアント１０１からストレージシステム１００に対して、特定のファイルを指定して読み出し要求があると、まず、ファイルシステムに基づいて、読み出し要求にかかるファイルに対応するハッシュ値の一部であるショートハッシュと論理位置の情報からなるコンテンツアドレスＣＡを指定する。そして、コンテンツアドレスＣＡがＭＦＩファイルに登録されているか否かを調べる。登録されていなければ、要求されたデータは格納されていないため、エラーを返却する。
【００３９】
一方、読み出し要求にかかるコンテンツアドレスＣＡが登録されている場合には、上記コンテンツアドレスＣＡにて指定される格納位置を特定し、この特定された格納位置に格納されている各フラグメントデータを、読み出し要求されたデータとして読み出す。このとき、各フラグメントが格納されているデータ格納ファイルと、当該データ格納ファイルのうち１つのフラグメントデータの格納位置が分かれば、同一の格納位置から他のフラグメントデータの格納位置を特定することができる。
【００４０】
そして、読み出し要求に応じて読み出した各フラグメントデータからブロックデータＤを復元する。さらに、復元したブロックデータＤを複数連結し、ファイルＡなどの一群のデータに復元して返却する。
【００４１】
以上のようにして、本実施形態におけるストレージシステム１００は、同一内容のデータの重複記憶を排除している。
【００４２】
次に、本実施形態におけるストレージシステム１００を構成するアクセラレータノード１０及びストレージノード２０の具体的な構成を、図５を参照して説明する。なお、以下の説明は、特に、ストレージシステム１００が、上記図３，４を参照して説明した処理の一部である、ブロックデータＤが既に格納されているか否かを確認して、記憶されていないブロックデータＤのみを記憶する、という処理を実行するための具体的な構成や動作を説明するものである。従って、ブロックデータＤをさらにフラグメントデータに分割して分散記憶する処理までは言及していないが、ストレージノード２０の記憶装置２５にブロックデータを記憶する際には、上述したように、当該ブロックデータをフラグメントに分割して、さらに冗長データを付加して、分散記憶する処理が実行されることとなる。
【００４３】
まず、アクセラレータノード１０は、演算装置及び記憶装置を備えた一般的な情報処理装置である。そして、アクセラレータノード１０は、演算装置にプログラムが組み込まれることによって構築された、ファイルシステム１１と、重複確認部１２と、ブロック処理部１３と、ブロック送信部１４と、重複度スコア１５と、を備えている。また、ストレージノード２０は、演算装置及び記憶装置２５を備えた一般的な情報処理装置である。そして、ストレージノード２０は、演算装置にプログラムが組み込まれることによって構築された、ブロック保存部２１と、重複確認部２２と、ブロック書込部２３と、を備えている。
【００４４】
そして、アクセラレータノード１０のファイルシステム１１は、上述したように、ストレージノード２０に対する記憶対象となるデータを構成するブロックデータの書き込みを制御する書き込み制御部として機能する。また、ストレージノード２０のブロック保存部２１は、上述したように、記憶装置（ディスク）２５にブロックデータを格納する際に、新たに記憶するブロックデータが既に記憶されている場合には、コンテンツアドレスを用いて既に記憶されているブロックデータの格納位置を新たに記憶するブロックデータとして参照することで、同一内容のデータの重複記憶を排除するデータ格納制御部として機能する。
【００４５】
そして、さらに、本実施形態におけるアクセラレータノード１０とストレージノード２０とは、以下の機能を有する。まず、アクセラレータノード１０の重複確認部１２（一部重複確認依頼部）は、クライアント１０１から記憶対象となるデータを受け取ると（図５の（１）参照）、当該受け取ったデータのブロック列のうち、一部のブロックデータの内容に固有となるハッシュ値（内容識別データ）を算出する（図５の（２）参照）。このとき、重複確認部１２は、ブロック列から１つまたは複数のブロックデータを選択（サンプリング）して、当該選択された各ブロックデータの各ハッシュ値をそれぞれ算出する。
【００４６】
ここで、ブロック列からブロックデータのサンプリングは、例えば、複数のブロック列からなる所定のデータ長の範囲から、予め設定された位置またはランダムに選択された位置に配置された１つのブロックデータを抽出する、という方法で実行される。具体的に、図５に示す例では、クライアント１０１から「ＡＢＣＤＥ」というブロックデータで構成されたブロック列Ｂ１０が送信されたときに、当該ブロック列Ｂ１０からブロックデータ「Ｂ」をサンプリングしたこととする。
【００４７】
そして、重複確認部１２は、サンプリングしたブロックデータのハッシュ値をストレージノード２０に送信して、送信したハッシュ値に対応するブロックデータがストレージノード２０に既に記憶されているかどうか、つまり、既に記憶されているブロックデータと重複するかどうか、ということの確認を要求（重複確認要求）する（図５（３）参照）。例えば、図５の例では、ブロックデータ「Ｂ」のハッシュ値「ｂ」（Ｂ１１）をストレージノード２０に送信する。
【００４８】
そして、上記アクセラレータノード１０の重複確認部１２からの重複確認要求に応じて、ストレージノード２０の重複確認部２２は、受信したハッシュ値に対応するブロックデータが記憶装置２５に記憶されているか否かを調べる（図５の（４）参照）。具体的には、受信したハッシュ値が記憶装置２５記憶されているか否かを調べる。そして、ハッシュ値が記憶装置２５に記憶されている場合には、当該ハッシュ値に対応するブロックデータが記憶されていると判断でき、その判断結果である重複確認結果をアクセラレータノード１０に返却する。図５の例では、ハッシュ値「ｂ」（Ｂ１２）が記憶装置２５内に記憶されているため（符号Ｂ１６参照）、このハッシュ値「ｂ」に対応するブロックデータ「Ｂ」（符号Ｂ１５参照）も記憶されていると判断できる。すると、ストレージノード２０の重複確認部２２は、既に記憶されているハッシュ値「ｂ」（符号Ｂ１４）をアクセラレータノード１０に返信する（図５の（５）参照）。
【００４９】
なお、ストレージノード２０の重複確認部２２は、後述するように、アクセラレータノード１０からさらに多くのハッシュ値が同時に送信され、当該各ハッシュ値に対応するブロックデータが既に記憶装置２５に記憶されているか否かの確認の要求をしてきた場合も同様に作動し、既に記憶されているハッシュ値をアクセラレータノード１０に返送する機能も有する。また、アクセラレータノード１０のブロック送信部１４から記憶するブロックデータと共にハッシュ値が送信された場合も、上述同様に既に記憶されているハッシュ値を調べる処理を行い、ブロック書込部２３に通知する。これらの処理については後述する。
【００５０】
また、アクセラレータノード１０の重複確認部１２は、上述したストレージノード２０の重複確認部２２から返信された重複確認結果、つまり、既にストレージノード２０に記憶されているブロックデータの重複確認結果に応じて、重複度スコア１５（重複度）を更新する。なお、重複度スコア１５は、例えば、１つの整数値であり、重複度スコア１５の更新例を図６に示す。
【００５１】
まず、重複度スコア１５は、例えば、初期値「０」として設定される。そして、図６の左端の場面では、重複度スコア１５の値が「６」であるとする。このとき、上述したように、アクセラレータノード１０の重複確認部１２にてブロックデータＯの重複確認要求がされ、ストレージノード２０から既に記憶されているといった重複確認結果が返却されたとすると、重複確認部１２は、重複度スコア１５を「１」加算して、その値を「７」に更新する。一方で、図６のブロック列のうちブロックデータＸの重複確認要求がされ、ストレージノード２０から既に記憶されているといった重複確認結果が返却された場合を考えると、重複確認部１２は、重複度スコア１５を「１」減算して、その値を「７」から「６」に更新する。
【００５２】
なお、図６の例では、符号（１）と符号（３）の区間では、所定範囲のブロック列のうち、サンプリングされた一部のブロックデータのハッシュ値のみを重複確認している場合を示しているが、符号（２）の区間では、後述するように、所定範囲のブロック列の全てのブロックデータの各ハッシュ値について重複確認した場合を示している。この場合には、一度に複数のブロックデータＲ，Ｓ，Ｔ，Ｕ，Ｖの重複確認結果が返却されるが、それぞれの結果に応じて、重複度スコア１５の値を更新する。つまり、重複しているブロックデータの数だけ重複度スコア１５は加算され、重複していないブロックデータの数だけ重複度スコア１５は減算されることとなる。なお、上記では、重複している場合には「１」を加算し、重複していない場合には「１」を減算する場合を例示したが、重複度スコア１５を変化させる数値は「１」であることに限定されない。
【００５３】
以上のように、重複度スコア１５の更新処理はアクセラレータノード１０の重複確認部１２で実行されるため（図５の（６）参照）、当該重複確認部１２は、ブロックデータがストレージノード２０に既に記憶されていることの度合いを表す上記重複度スコア１５を計測する重複度計測部として機能している。
【００５４】
そして、さらに、アクセラレータノード１０の重複確認部１２は、上述したように更新した重複度スコア１５に従って、ブロック列をストレージノード２０に記憶する際の重複排除処理の一部を、アクセラレータノード１０側で実行するか、ストレージノード２０側で実行するか、を決定する。そして、アクセラレータノード１０は、決定したいずれかの処理を実行する機能（ブロック送信部）を有する。
【００５５】
例えば、本実施形態では、重複度スコア１５の閾値（基準値）が「８」と設定されており、重複度スコア１５の値が「８」より小さい場合には、重複排除処理の一部をストレージノード２０側で実行する「全ブロック送信処理」を実行する。一方で、重複度スコア１５の値が「８」以上である場合には、重複排除処理の一部をアクセラレータノード１０側で実行する「一部ブロック送信処理」を実行する。
【００５６】
ここで、上述した重複排除処理の一部をストレージノード２０側で実行する「全ブロック送信処理」について、図８を参照して説明する。まず、図８の（１）〜（６）に示すように、上述同様に、クライアント１０１から受け取ったブロック列Ｂ５０のうちサンプリングしたブロックデータのハッシュ値Ｂ５１を用いて、ストレージノード２０に重複確認を行い、かかるブロックデータが既に記憶されていたとする。このとき、更新した重複度スコア１５の値が、閾値より小さい値である場合には、アクセラレータノード１０は、ブロック処理部１３にてクライアントから受け取ったブロック列Ｂ５０を構成する全てのブロックデータに対して、ハッシュ値の計算とブロックの圧縮処理を行う（図８の（７））。そして、アクセラレータノード１０のブロック送信部１４は、上述したように圧縮した全てのブロックデータＢ５５とそのハッシュ値Ｂ５６を、ストレージノード２０に送信する（図８の（８））。
【００５７】
なお、ストレージノード２０の重複確認部２２は、上述したようにアクセラレータノード１０から送信された全てのブロックデータＢ５５に対応するハッシュ値Ｂ５６を用いて、当該ハッシュ値Ｂ５６に対応するブロックデータＢ５５が記憶装置２５に記憶されているかどうかを調べる（図８の（９）、符号Ｂ５７，Ｂ５８参照）。そして、ブロック書込部２３にて、まだ記憶されていないブロックデータＢ５９とそのハッシュ値Ｂ６０のみを記憶装置２５に記憶する（図８の（１０））。これにより、ストレージノード２０側で重複排除処理を行っている。
【００５８】
次に、上述した重複排除処理の一部をアクセラレータノード１０側で実行する「一部ブロック送信処理」について、図７を参照して説明する。まず、図７の（１）〜（６）に示すように、上述同様に、クライアント１０１から受け取ったブロック列Ｂ５０のうちサンプリングしたブロックデータのハッシュ値Ｂ５１を用いて、ストレージノード２０に重複確認を行い、かかるブロックデータが既に記憶されていたとする。そして、更新した重複度スコア１５の値が、閾値以上の値である場合に、以下の「一部ブロック送信処理」が実行される。
【００５９】
具体的に、「一部ブロック送信処理」では、まず、アクセラレータノード１０の重複確認部１２が、クライアントから受け取ったブロック列Ｂ３０を構成する全てのブロックデータのハッシュ値を算出して、当該ハッシュ値Ｂ３５をストレージノード２０に送信し、当該ハッシュ値Ｂ３５に対応する全てのブロックデータが既に記憶されているかどうかの重複確認要求を行う（図７の（７））。すると、ストレージノード２０の重複確認部２２は、アクセラレータノード１０から受信したハッシュ値Ｂ３６に対応するブロックデータが既に記憶されているか否かの重複確認を行い（図７の（８））、その結果である重複しているブロックデータのハッシュ値Ｂ３８を、アクセラレータノード１０に返却する（図７の（９））。これを受けて、アクセラレータノード１０は、ブロック処理部１３にて、まだストレージノード２０に記憶されていないブロックデータのみに対して、圧縮処理を行う（図７の（１０））。そして、アクセラレータノード１０のブロック送信部１４は、上述したように圧縮した一部のブロックデータＢ３９とそのハッシュ値Ｂ４０を、ストレージノード２０に送信する（図７の（１１））。
【００６０】
なお、ストレージノード２０は、上述したようにアクセラレータノード１０から送信された一部のブロックデータＢ４１はまだ記憶されていないことがわかっているため、ブロック書込部２３にて、送信されたブロックデータＢ４１とそのハッシュ値Ｂ４２とを、記憶装置２５に記憶する（図７の（１２））。以上のように、「一部ブロック送信処理」では、アクセラレータノード１０側で重複排除処理を行っている。
【００６１】
また、「一部ブロック送信処理」では、上述したようにアクセラレータノード１０から全てのブロックデータのハッシュ値をストレージノード２０に送信して重複確認を行っているが、アクセラレータノード１０の重複確認部１２は、全てのブロックデータの重複確認結果を重複度スコア１５に反映する（図７の（１３））。例えば、図６のブロックデータＲ，Ｓ，Ｔ，Ｕ，Ｖの重複確認結果を行った場合には、全ての結果を重複度スコア１５に反映する。そして、このとき、最終的に、重複度スコア１５が閾値以上である場合には、上述した「一部ブロック送信処理」を繰り返す。一方で、最終的に、重複度スコア１５が閾値よりも小さい値になった場合には、「一部ブロック送信処理」を停止する。そして、上述したアクセラレータノード１０の重複確認部１２にて、クライアント１０１から受信した後続するブロック列に対しては、当該ブロック列からサンプリングした一部のブロックデータに対応するハッシュ値のみをストレージノード２０に送信して、重複確認要求する処理に戻る。
【００６２】
［動作］
次に、上述したストレージシステムの動作を、図５乃至１１、特に、図９乃至図１１のフローチャートを参照して説明する。
【００６３】
まず、図５に示すように、クライアント１０１からアクセラレータノード１０に対して、記憶対象となるデータであるブロック列Ｂ１０が送信される（図５の（１）、図９のステップＳ１）。すると、アクセラレータノード１０は、受け取ったブロック列Ｂ１０からブロックデータ（ここではブロックデータＢ）をサンプリングする（図９のステップＳ２）。なお、サンプリングの方法の一例としては、指定された間隔で１つのブロックを抽出する方法があるが、かかる手法に限定されない。
【００６４】
続いて、アクセラレータノード１０の重複確認部１２は、サンプリングしたブロックのハッシュ値を取得する（図１の（２）、図９のステップＳ２）。そして、そのハッシュ値Ｂ１１をストレージノード２０に送信して、当該ハッシュ値に対応するブロックデータが、ストレージノード２０の記憶装置２５に既に格納さているかの確認を要求する（図１の（３）、図９のステップＳ３）。
【００６５】
続いて、重複確認要求を受けたストレージノード２０は、重複確認部２２にて、受信したハッシュ値Ｂ１２と同一のハッシュ値が記憶装置２５に記憶されているかどうかを確認し（図５の（４））、その確認結果をアクセラレータノード１０に返却する（図５の（５））。ここでは、重複確認要求にかかるブロックデータが、既に記憶装置２５に記憶されていることを示すべく、そのハッシュ値Ｂ１４がアクセラレータノード１０に返却されたとする。
【００６６】
続いて、アクセラレータノード１０は、ストレージノードから返却された重複確認結果を受け付け（図９のステップＳ４）、当該重複確認結果に応じて、重複度スコア１５を更新する（図５の（６）、図９のステップＳ５）。ここでは、重複確認要求にかかるブロックデータが既に記憶装置２５に記憶されていたため、重複度スコア１５を「１」増加させる。但し、重複確認要求にかかるブロックデータが記憶装置２５に記憶されていなかった場合には、重複度スコア１５を「１」減少させる。
【００６７】
そして、アクセラレータノード１０は、上述したように更新した重複度スコア１５の値を調べて、重複排除処理をいずれのノード１０，２０で行うか決定する（図５の（７））。具体的には、重複度スコア１５の値が閾値以上である場合には（図９のステップＳ６：Ｙｅｓ）、アクセラレータノード１０で重複排除処理を行うと決定し（図９のステップＳ７）、重複度スコア１５の値が閾値より小さい場合には（図９のステップＳ６：Ｎｏ）、ストレージノード２０で重複排除処理を行うと決定する（図９のステップＳ８）。
【００６８】
ここでは、例えば、図６に示すように、ブロック例のうちブロックデータＯがサンプリングされた場合には、重複度スコア１５の値は「７」であるため、ストレージノード２０で重複排除処理を行う「全ブロック送信処理」を実行することとなる。この処理について、図８と図１１のフローチャートを参照して説明する。なお、図７の（１）から（６）までの処理は、上述した図５で説明した動作を同一動作であるため、その説明は省略する。
【００６９】
上述したように、重複度スコア１５が閾値より低い場合には、アクセラレータノード１０は、クライアント１０１から受け取ったブロック列のうち全てのブロックデータに対して、ハッシュ値の計算とブロックの圧縮処理を行う（図８の（７）、図１１のステップＳ２１，Ｓ２２）。そして、全ての圧縮したブロックデータＢ５５とハッシュ値Ｂ５６を、ストレージノード２０に送信する（図８の（８）、図１１のステップＳ２３）。
【００７０】
すると、その後は、ストレージノード２０が、アクセラレータノード１０から受け取ったハッシュ値を持つブロックが記憶装置２５に存在するか確認し（図８の（９））、まだ記憶されていないブロックデータＢ５９とハッシュ値Ｂ６０のみを、記憶装置２５に記憶する（図８の（１０））。
【００７１】
なお、クライアント１０１からの書き込み要求にかかる後続のブロックデータが存在する場合には（図１１のステップＳ２４：Ｙｅｓ）、アクセラレータノード１０にて、上述同様の処理が実行される。つまり、後続のブロック列からサンプリングされたブロックデータのハッシュ値を用いて、重複確認を行うと共に重複度スコアの更新を行い、当該重複度スコアの値に応じて、どちらのノード１０，２０で重複排除処理を行うか決定する。
【００７２】
次に、重複度スコアの値が閾値以上となり、アクセラレータノード１０で重複排除処理を行う「一部ブロック送信処理」を実行する場合を、図７と図１０のフローチャートを参照して説明する。例えば、図６に示すように、ブロック例のうちブロックデータＱがサンプリングされ、重複度スコア１５の値が「８」となった場合に、以下に説明する処理が実行される。なお、図７の（１）から（６）までの処理は、上述した図５で説明した動作を同一動作であるため、その説明は省略する。
【００７３】
上述したように、重複度スコア１５が閾値以上の場合には、アクセラレータノード１０は、クライアント１０１から受け取ったブロック列の全てのブロックデータに対応するハッシュ値を計算する（図１０のステップＳ１１）。そして、全てのブロックデータのハッシュ値Ｂ３５を、ストレージノード２０に送信して（図７の（７）、図１０のステップＳ１２）、重複確認を要求する。
【００７４】
すると、ストレージノード２０は、アクセラレータノード１０から受信したハッシュ値Ｂ３６に対応するブロックデータが既に記憶されているか否かの重複確認を行い（図７の（８））、その結果である重複しているブロックデータのハッシュ値Ｂ３８を、アクセラレータノード１０に返却する（図７の（９））。図７の例では、ブロックデータＢ，Ｄが既に記憶されており、そのハッシュ値Ｂ３８がアクセラレータノード１０に返却される。
【００７５】
そして、ストレージノード２０から重複確認結果を受けたアクセラレータノード１０は（図１０のステップＳ１３）、まだストレージノード２０に記憶されていない一部のブロックデータのみに対して、圧縮処理を行う（図７の（１０）、図１０のステップＳ１４）。さらに、アクセラレータノード１０は、圧縮した一部のブロックデータＢ３９とそのハッシュ値Ｂ４０を、ストレージノード２０に送信する（図７の（１１）、図１０のステップＳ１５）。
【００７６】
すると、ストレージノード２０は、アクセラレータノード１０から送信された一部のブロックデータＢ４１を、ハッシュ値Ｂ４２と共に、記憶装置２５に記憶する（図７の（１２））。
【００７７】
その後、アクセラレータノード１０は、上述したように全てのブロック列のハッシュ値をストレージノード２０に送信して行った重複確認要求に対する重複確認結果（図７の（９）参照）を、重複度スコア１５に反映する（図７の（１３）、図１０のステップＳ１６）。そして、後続の書き込み要求にかかるブロック列が存在する場合には（図１０のステップＳ１７：Ｙｅｓ）、更新された重複度スコア１５に応じて、かかるブロック列に対してどちらのノード１０，２０で重複排除処理を行うか決定する。
【００７８】
例えば、重複度スコア１５が閾値以上の状態が続く場合には、上述したように、アクセラレータノード１０側での重複排除処理を継続する。つまり、後続のブロック列に対しては、図９のステップＳ２，Ｓ３に示した処理を行わず、つまり、ブロックデータをサンプリングしてそのハッシュ値をストレージノード２０に送信する処理は行わずに、図１０に示すように、全てのブロックのハッシュ値を送信して、重複確認結果に応じてまだ記憶されていないブロックデータのみを送信する。
【００７９】
一方で、例えば、図６の符号（２）に示すブロック列に対して重複確認結果を行い、最終的に、重複度スコア１５の値「７」が閾値「８」より小さくなったとすると、後続するブロック例に対しては、ストレージノード２０側での重複排除処理に切り替える。このとき、後続のブロック列に対しては、図９のステップＳ２，Ｓ３に示したように、ブロックデータをサンプリングしてそのハッシュ値をストレージノード２０に送信し、重複確認を行う処理を再開する。そして、その重複確認結果を反映した重複度スコアに応じて、上述同様に、いずれかのノード２０で重複排除処理を実行する。
【００８０】
以上のように、本発明によると、重複度スコア１５の値に応じて、重複排除処理を主に実行するノード１０，２０を切り替えているため、アクセラレータノード１０の処理負荷を抑制しつつ、アクセラレータノード１０とストレージノード２０との間における通信量を削減することができる。つまり、いずれか一方で主に重複排除処理を行う場合には、通信量が増加するか、あるいは、アクセラレータノード１０の圧縮処理による負荷が高くなるが、これらを抑制することができる。これにより、ストレージシステムの性能の向上を図ることができる。
【００８１】
次に、本発明の変形例を、図１２を参照して説明する。この例では、上述した重複度スコア１５を算出するための一例であり、例えば、まだストレージノード２０の記憶装置２５に記憶されているデータが少ない場合の初期動作として実行される。但し、以下の動作は、いかなるときに実行されてもよい。
【００８２】
具体的には、まず、アクセラレータノード１０がクライアント１０１から書き込み要求を受けると（図１２の（１））、書き込み要求にかかるブロック列Ｂ７０の全てのブロックデータのハッシュ値の取得と圧縮処理を行う（図１２の（２））。そして、ストレージノード２０に、圧縮したブロックデータＢ７１とハッシュ値Ｂ７２を送信する（図１２の（３））。
【００８３】
続いて、ストレージノード２０は、アクセラレータノード１０から受け取ったハッシュ値を持つブロックが記憶装置２５に存在するか確認し（図１２の（４））、まだ記憶されていないブロックデータＢ７５とハッシュ値Ｂ７６のみを、記憶装置２５に記憶する（図１２の（５））。さらに、ストレージノード２０は、上述した重複確認結果に応じて、重複しているブロックデータのハッシュ値Ｂ７７を、アクセラレータノード１０に返却する（図１２の（６））。
【００８４】
そして、ストレージノード２０から重複確認結果を受けたアクセラレータノード１０は、当該重複確認結果を重複度スコア１５に反映する（図１２の（７））。その後は、更新された重複度スコア１５の値に応じて、後続の書き込み要求にかかるブロック列に対して、上述したようにいずれかのノード１０，２０で重複排除処理を実行する。
【００８５】
＜付記＞
上記実施形態の一部又は全部は、以下の付記のようにも記載されうる。以下、本発明におけるストレージシステムの構成の概略について図１３を参照して説明する。また、本発明における、情報処理装置、プログラム、データ格納方法の構成について説明する。但し、本発明は、以下の構成に限定されない。
【００８６】
（付記１）
記憶対象となるデータを記憶する記憶装置２２３を備えると共に、当該記憶装置２２３に既に記憶されているデータを構成するブロックデータと同一内容の他のブロックデータを記憶装置２２３に格納する場合に当該記憶装置２２３に既に記憶されているブロックデータを他のブロックデータとして参照させるデータ格納制御部２２２を備えたストレージサーバ２２０と、
前記ストレージサーバ２２０に対する記憶対象となるデータを構成するブロックデータの書き込みを制御するアクセラレータサーバ２１０と、を備え、
前記ストレージサーバ２２０は、前記アクセラレータサーバ２１０からの重複確認要求に応じて、当該アクセラレータサーバ２１０から送信された、記憶対象となるデータを構成するブロックデータの内容に固有の内容識別データを受け、当該内容識別データに対応するブロックデータが記憶装置２２３に格納されているか否かを確認し、その結果である重複確認結果を前記アクセラレータサーバ２１０に返送する重複確認部２２１を備え、
前記アクセラレータサーバ２１０は、
前記ストレージサーバ２２０に対して、記憶対象となるデータを構成する所定範囲のブロックデータのうち一部のブロックデータの前記内容識別データを送信して、当該ブロックデータが前記ストレージサーバ２２０に記憶されているか否かの重複確認要求を当該ストレージサーバ２２０に行う一部重複確認依頼部２１１と、
前記ストレージサーバ２２０が有する前記重複確認部２２１からの重複確認結果に応じて、記憶対象となるデータを構成する所定範囲の全てのブロックデータを前記ストレージサーバ２２０に送信する全ブロック送信処理２１３、あるいは、記憶対象となるデータを構成する所定範囲の全てのブロックデータのそれぞれに対応する各前記内容識別データを前記ストレージサーバ２２０に送信して各ブロックデータが前記ストレージサーバ２２０に既に記憶されているか否かの重複確認要求を行い、これに対する前記ストレージサーバ２２０が有する前記重複確認部２２１からの重複確認結果に応じて前記ストレージサーバ２２０に記憶されていないブロックデータを当該ストレージサーバ２２０に送信する一部ブロック送信処理２１４、のいずれかを実行するブロックデータ送信部２１２と、を備えた、
ストレージシステム。
【００８７】
（付記２）
付記１に記載のストレージシステムであって、
前記ストレージサーバが有する前記重複確認部からの重複確認結果に基づいて、記憶対象となるデータを構成するブロックデータが前記ストレージサーバに記憶されていると判断された度合いを表す重複度を計測する重複度計測部を備えると共に、
前記ブロックデータ送信部は、前記重複度の値に応じて、前記全ブロック送信処理、あるいは、前記一部ブロック送信処理、のいずれかを実行する、
ストレージシステム。
【００８８】
（付記３）
付記２に記載のストレージシステムであって、
前記ブロックデータ送信部は、前記重複度が予め設定された基準値より低い場合には前記全ブロック送信処理を実行し、前記重複度が予め設定された基準値以上である場合には前記一部ブロック送信処理を実行する、
ストレージシステム。
【００８９】
（付記４）
付記３に記載のストレージシステムであって、
前記重複度計測部は、前記ストレージサーバが有する前記重複確認部からの重複確認結果により、前記ブロックデータが前記ストレージサーバに既に記憶されていると判断された場合には、前記重複度に所定値を加算し、前記ブロックデータが前記ストレージサーバに記憶されていないと判断された場合には、前記重複度から所定値を減算する、
ストレージシステム。
【００９０】
（付記５）
付記４に記載のストレージシステムであって、
前記重複度計測部は、前記ストレージサーバが有する前記重複確認部からの重複確認結果により前記ストレージサーバに既に記憶されていると判断された前記ブロックデータの数を前記重複度に加算し、前記ストレージサーバに記憶されていない判断された前記ブロックデータの数を前記重複度から減算する、
ストレージシステム。
【００９１】
（付記６）
付記３乃至５のいずれかに記載のストレージシステムであって、
前記一部重複確認依頼部は、前記重複度が予め設定された基準値以上の値に変化したときには作動を停止し、前記重複度が予め設定された基準値以上の値から当該基準値より低い値に変化したときには作動を再開する、
ストレージシステム。
【００９２】
（付記７）
付記１乃至６のいずれかに記載のストレージシステムであって、
前記全ブロック送信処理及び前記一部ブロック送信処理は、前記ストレージサーバに送信する前記ブロックデータを圧縮して当該ストレージノードに送信する、
ストレージシステム。
【００９３】
（付記８）
記憶対象となるデータを記憶する記憶装置を備えると共に、
前記記憶装置に既に記憶されているデータを構成するブロックデータと同一内容の他のブロックデータを記憶装置に格納する場合に当該記憶装置に既に記憶されているブロックデータを他のブロックデータとして参照させるデータ格納制御部と、
前記アクセラレータサーバからの重複確認要求に応じて、当該アクセラレータサーバから送信された、記憶対象となるデータを構成するブロックデータの内容に固有の内容識別データを受け、当該内容識別データに対応するブロックデータが記憶装置に格納されているか否かを確認し、その結果である重複確認結果を前記アクセラレータサーバに返送する重複確認部と、を備えたストレージサーバに接続された情報処理装置であって、
前記ストレージサーバに対する記憶対象となるデータを構成するブロックデータの書き込みを制御する書き込み制御部と、
前記ストレージサーバに対して、記憶対象となるデータを構成する所定範囲のブロックデータのうち一部のブロックデータの前記内容識別データを送信して、当該ブロックデータが前記ストレージサーバに記憶されているか否かの重複確認要求を当該ストレージサーバに行う一部重複確認依頼部と、
前記ストレージサーバが有する前記重複確認部からの重複確認結果に応じて、記憶対象となるデータを構成する所定範囲の全てのブロックデータを前記ストレージサーバに送信する全ブロック送信処理、あるいは、記憶対象となるデータを構成する所定範囲の全てのブロックデータのそれぞれに対応する各前記内容識別データを前記ストレージサーバに送信して各ブロックデータが前記ストレージサーバに既に記憶されているか否かの重複確認要求を行い、これに対する前記ストレージサーバが有する前記重複確認部からの重複確認結果に応じて前記ストレージサーバに記憶されていないブロックデータを当該ストレージサーバに送信する一部ブロック送信処理、のいずれかを実行するブロックデータ送信部と、
を備えた情報処理装置。
【００９４】
（付記９）
付記８に記載の情報処理装置であって、
前記ストレージサーバが有する前記重複確認部からの重複確認結果に基づいて、記憶対象となるデータを構成するブロックデータが前記ストレージサーバに記憶されていると判断された度合いを表す重複度を計測する重複度計測部を備えると共に、
前記ブロックデータ送信部は、前記重複度の値に応じて、前記全ブロック送信処理、あるいは、前記一部ブロック送信処理、のいずれかを実行する、
情報処理装置。
【００９５】
（付記１０）
記憶対象となるデータを記憶する記憶装置を備えると共に、
前記記憶装置に既に記憶されているデータを構成するブロックデータと同一内容の他のブロックデータを記憶装置に格納する場合に当該記憶装置に既に記憶されているブロックデータを他のブロックデータとして参照させるデータ格納制御部と、
前記アクセラレータサーバからの重複確認要求に応じて、当該アクセラレータサーバから送信された、記憶対象となるデータを構成するブロックデータの内容に固有の内容識別データを受け、当該内容識別データに対応するブロックデータが記憶装置に格納されているか否かを確認し、その結果である重複確認結果を前記アクセラレータサーバに返送する重複確認部と、を備えたストレージサーバに接続された情報処理装置に、
前記ストレージサーバに対する記憶対象となるデータを構成するブロックデータの書き込みを制御する書き込み制御部と、
前記ストレージサーバに対して、記憶対象となるデータを構成する所定範囲のブロックデータのうち一部のブロックデータの前記内容識別データを送信して、当該ブロックデータが前記ストレージサーバに記憶されているか否かの重複確認要求を当該ストレージサーバに行う一部重複確認依頼部と、
前記ストレージサーバが有する前記重複確認部からの重複確認結果に応じて、記憶対象となるデータを構成する所定範囲の全てのブロックデータを前記ストレージサーバに送信する全ブロック送信処理、あるいは、記憶対象となるデータを構成する所定範囲の全てのブロックデータのそれぞれに対応する各前記内容識別データを前記ストレージサーバに送信して各ブロックデータが前記ストレージサーバに既に記憶されているか否かの重複確認要求を行い、これに対する前記ストレージサーバが有する前記重複確認部からの重複確認結果に応じて前記ストレージサーバに記憶されていないブロックデータを当該ストレージサーバに送信する一部ブロック送信処理、のいずれかを実行するブロックデータ送信部と、
を実現させるためのプログラム。
【００９６】
（付記１１）
付記１０に記載のプログラムであって、
前記情報処理装置に、さらに、前記ストレージサーバが有する前記重複確認部からの重複確認結果に基づいて、記憶対象となるデータを構成するブロックデータが前記ストレージサーバに記憶されていると判断された度合いを表す重複度を計測する重複度計測部を実現させると共に、
前記ブロックデータ送信部は、前記重複度の値に応じて、前記全ブロック送信処理、あるいは、前記一部ブロック送信処理、のいずれかを実行する機能を有する、
プログラム。
【００９７】
（付記１２）
記憶対象となるデータを記憶する記憶装置を備えると共に、当該記憶装置に既に記憶されているデータを構成するブロックデータと同一内容の他のブロックデータを記憶装置に格納する場合に当該記憶装置に既に記憶されているブロックデータを他のブロックデータとして参照させるデータ格納制御部を備えたストレージサーバと、
前記ストレージサーバに対する記憶対象となるデータを構成するブロックデータの書き込みを制御するアクセラレータサーバと、を備えたストレージシステムにて、
前記アクセラレータサーバが、前記ストレージサーバに対して、記憶対象となるデータを構成する所定範囲のブロックデータのうち一部のブロックデータの内容に固有の内容識別データを送信して、当該ブロックデータが前記ストレージサーバに記憶されているか否かの重複確認要求を当該ストレージサーバに行い、
前記ストレージサーバが、前記アクセラレータサーバからの重複確認要求に応じて、当該アクセラレータサーバから送信された前記内容識別データを受け、当該内容識別データに対応するブロックデータが記憶装置に格納されているか否かを確認し、その結果である重複確認結果を前記アクセラレータサーバに返送し、
前記アクセラレータサーバは、前記ストレージサーバからの重複確認結果に応じて、記憶対象となるデータを構成する所定範囲の全てのブロックデータを前記ストレージサーバに送信する全ブロック送信処理、あるいは、記憶対象となるデータを構成する所定範囲の全てのブロックデータのそれぞれに対応する各前記内容識別データを前記ストレージサーバに送信して各ブロックデータが前記ストレージサーバに既に記憶されているか否かの重複確認要求を行い、これに対する前記ストレージサーバからの重複確認結果に応じて前記ストレージサーバに記憶されていないブロックデータを当該ストレージサーバに送信する一部ブロック送信処理、のいずれかを実行する、
データ格納方法。
【００９８】
（付記１３）
付記１２に記載のデータ格納方法であって、
前記ストレージサーバからの重複確認結果に基づいて、記憶対象となるデータを構成するブロックデータが前記ストレージサーバに記憶されていると判断された度合いを表す重複度を計測し、前記重複度の値に応じて、前記全ブロック送信処理、あるいは、前記一部ブロック送信処理、のいずれかを実行する、
データ格納方法。
【符号の説明】
【００９９】
１０    アクセラレータノード
１１    ファイルシステム
１２    重複確認部
１３    ブロック処理部
１４    ブロック送信部
１５    重複度スコア
２０    ストレージノード
２１    ブロック保存部
２２    重複確認部
２３    ブロック書込部
２５    ディスク
２５    記憶装置
３０    データセット
３１    分割データ
３２    冗長データ
１００  ストレージシステム
１０１  クライアント
２１０  アクセラレータサーバ
２１１  一部重複確認依頼部
２１２  ブロックデータ送信部
２１３  全ブロック送信処理
２１４  一部ブロック送信処理
２２０  ストレージサーバ
２２１  重複確認部
２２２  データ格納制御部
２２３  記憶装置
３０１  クライアント
３１０  アクセラレータノード
３１１  ファイルシステム
３１２  ブロック処理部
３１３  ブロック送信部
３２０  ストレージノード
【図１】
0005446985.tif 000002
【図２】
0005446985.tif 000003
【図３】
0005446985.tif 000004
【図４】
0005446985.tif 000005
【図５】
0005446985.tif 000006
【図６】
0005446985.tif 000007
【図７】
0005446985.tif 000008
【図８】
0005446985.tif 000009
【図９】
0005446985.tif 000010
【図１０】
0005446985.tif 000011
【図１１】
0005446985.tif 000012
【図１２】
0005446985.tif 000013
【図１３】
0005446985.tif 000014