(57)【要約】【課題】  読み出し性能の向上を図ることが可能なストレージシステム、データソート方法及びプログラムを提供する。【解決手段】  ひとつの親データを複数に分割して生成したデータを子データと呼ぶ。互いに異なる親データを分割元とする子データを順番に記憶装置内のファイルに格納する。ファイルの読み出し処理の実行に応じて、当該読み出し処理がファイルから最後に読み出した位置を記憶装置に記憶する。ファイル内で子データをソートするソート処理を、位置以後に格納されている子ファイルに対して行う。【選択図】  図１
2018173802.tif 000002
【特許請求の範囲】
【請求項１】
ひとつの親データを複数に分割して生成したデータを子データと呼ぶとき、互いに異なる親データを分割元とする子データを順番に記憶装置内のファイルに格納する手段、
前記ファイルの読み出し処理の実行に応じて、当該読み出し処理が前記ファイルから最後に読み出した位置を記憶装置に記憶する手段、
前記ファイル内で前記子データをソートするソート処理を、前記位置以後に格納されている前記子ファイルに対して行う手段
を備えるストレージシステム。
【請求項２】
前記ソート処理は、同じ前記親データを分割元とする前記子データが、前記ファイル内において連続するように前記子データをソートする、請求項１に記載のストレージシステム。
【請求項３】
前記子データは、同じ親データを分割して生成した他の子データとの間に互いに順序関係を有し、
前記ソート処理は、同じ前記親データを分割元とする前記子データが前記ファイル内において前記順序関係に従って連続するように行う、
請求項１または請求項２に記載のストレージシステム。
【請求項４】
請求項１乃至請求項３のいずれかに記載のコンテンツアドレスストレージシステム。
【請求項５】
前記ストレージシステムは、マスタサイトからレプリカサイトへレプリケーションを行う前記マスタサイトが備えるストレージシステムである、請求項１乃至請求項４のいずれかに記載のストレージシステム。
【請求項６】
ひとつの親データを複数に分割して生成したデータを子データと呼ぶとき、互いに異なる親データを分割元とする子データを順番に記憶装置内のファイルに格納する段階、
前記ファイルの読み出し処理の実行に応じて、当該読み出し処理が前記ファイルから最後に読み出した位置を記憶装置に記憶する段階、
前記ファイル内で前記子データをソートするソート処理を、前記位置以後に格納されている前記子ファイルに対して行う段階
を含む、データソート方法。
【請求項７】
前記ソート処理は、同じ前記親データを分割元とする前記子データが、前記ファイル内において連続するように前記子データをソートする、請求項６に記載の方法。
【請求項８】
前記子データは、同じ親データを分割して生成した他の子データとの間に互いに順序関係を有し、
前記ソート処理は、同じ前記親データを分割元とする前記子データが前記ファイル内において前記順序関係に従って連続するように行う、
請求項６または請求項７に記載の方法。
【請求項９】
ひとつの親データを複数に分割して生成したデータを子データと呼ぶとき、互いに異なる親データを分割元とする子データを順番に記憶装置内のファイルに格納する手段、
前記ファイルの読み出し処理の実行に応じて、当該読み出し処理が前記ファイルから最後に読み出した位置を記憶装置に記憶する手段、
前記ファイル内で前記子データをソートするソート処理を、前記位置以後に格納されている前記子ファイルに対して行う手段
をコンピュータに実現させるためのプログラム。
【請求項１０】
前記ソート処理は、同じ前記親データを分割元とする前記子データが、前記ファイル内において連続するように前記子データをソートする、請求項９に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関し、特に、ストレージシステムで行う再格納処理に関する。
【背景技術】
【０００２】
例えばバックアップストレージのようなストレージシステムには、読み出し性能の向上を図るため、格納したストリームデータを連続の並びになるようにソートして再配置乃至再格納する処理を実行するものがある。
【０００３】
ストレージシステムの負荷が高い状態にあるとき、ソート処理の完了には時間がかかる。このため、ストレージシステムに高負荷の状態が続くと、ソート処理が大量に滞留することがある。このようなとき、ストレージシステムで読み出し処理を実行すると、ソート処理を未処理のデータがストレージシステムの記憶領域上に大量に存在するので、読み出し処理に通常よりも長い時間がかかる。
【０００４】
本発明に関連するものとして特許文献１を挙げる。特許文献1は、複数ストリームで書き込んだデータの読み出し性能の向上を図るため、ストリームデータをバッファメモリからデータ記憶装置に書き出す時に、同じストリームIDを持つデータを連続配置することを開示している。
【０００５】
バッファメモリを超えるデータについては断片化され、例えば図９のようなデータ配置状態となる。F1〜F12はデータ格納領域を表し、利用者が書き込んだデータを上から順に格納する。ST1〜ST3は、複数のバックアップ対象データを区別するために割り当てた識別するストリームIDであり、図９においては、それぞれ利用者によって書き込まれた異なるデータを表す。この状態から、更なるデータ読み出し性能の向上を図るため、同じストリームIDを持つデータをソートする処理を再格納処理という。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第５４１３９４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
一般に、再格納処理はシステムリソースに空きがある時に行われる。外部からの負荷がある場合、再格納処理の実行を待つ。システムの負荷が高い場合、再格納処理の実行前に、読み出し処理が実行される場合がある。
【０００８】
図９のようにデータを格納したストレージシステムにおいて、再格納処理が途中まで進行したところで、図１０に示すように読み出し処理が発生したとする。図１０の例では、データ格納フォルダＦ１〜Ｆ１２それぞれの先頭から再格納処理を実行し、ＰＯＳＰまで完了している。一方、読み出し処理はＰＯＳＲまで進んでいる。データはＰＯＳＥまで格納され、再格納処理を待っている状況にある。
【０００９】
この状況ではＰＯＳＲがＰＯＳＰに先行している。この状況から、ＰＯＳＰがＰＯＳＲを追い抜いて、進行具合が逆転することは通常は起きない。このため、以後の読み出し処理は、常に、再格納処理が未処理の状態にあるデータに対して行われる。その結果、ストレージシステムの読み出し性能に悪影響を与えている。
【００１０】
本発明はこのような状況を鑑みてなされたものであり、本発明が解決しようとする課題は、読み出し性能の向上を図ることが可能なストレージシステム、データソート方法及びプログラムを提供することである。
【課題を解決するための手段】
【００１１】
上述の課題を解決するため、本発明は、その一態様として、ひとつの親データを複数に分割して生成したデータを子データと呼ぶとき、互いに異なる親データを分割元とする子データを順番に記憶装置内のファイルに格納する手段、前記ファイルの読み出し処理の実行に応じて、当該読み出し処理が前記ファイルから最後に読み出した位置を記憶装置に記憶する手段、前記ファイル内で前記子データをソートするソート処理を、前記位置以後に格納されている前記子ファイルに対して行う手段を備えるストレージシステムを提供する。
【００１２】
また、本発明は、他の一態様として、ひとつの親データを複数に分割して生成したデータを子データと呼ぶとき、互いに異なる親データを分割元とする子データを順番に記憶装置内のファイルに格納する段階、前記ファイルの読み出し処理の実行に応じて、当該読み出し処理が前記ファイルから最後に読み出した位置を記憶装置に記憶する段階、前記ファイル内で前記子データをソートするソート処理を、前記位置以後に格納されている前記子ファイルに対して行う段階を含む、ストレージシステムに記憶したファイル内のデータをソートする方法を提供する。
【００１３】
また、本発明は、他の一態様として、ひとつの親データを複数に分割して生成したデータを子データと呼ぶとき、互いに異なる親データを分割元とする子データを順番に記憶装置内のファイルに格納する手段、前記ファイルの読み出し処理の実行に応じて、当該読み出し処理が前記ファイルから最後に読み出した位置を記憶装置に記憶する手段、前記ファイル内で前記子データをソートするソート処理を、前記位置以後に格納されている前記子ファイルに対して行う手段をコンピュータに実現させるためのプログラムを提供する。
【発明の効果】
【００１４】
本発明によれば、ストレージシステムの読み出し性能の向上を図ることができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１実施形態に係るストレージシステム１のブロック図である。
【図２】親データD1、D2、D3とそれぞれの子データとの関係を説明するための図である。
【図３】ストレージシステム１の記憶装置31に格納したファイルF内における子データの初期配置の例を説明するための図である。
【図４】ストレージシステム１において、ファイルFを読み出し位置POSRまで読み出した後に実行する再格納処理（ソート処理）について説明するための図である。
【図５】ストレージシステム１において、再格納処理を実行した後のファイルF内のデータ配置の例を説明するための図である。
【図６】本発明の第２実施形態に係るストレージシステム１０のブロック図である。
【図７】ストレージシステム１０の動作を説明するためのフローチャートである。
【図８】再格納処理の終了／再開位置ＰＯＳＰの値を、読み出し済みポインタの位置ＰＯＳＲの値で更新した後の、読み出し処理と再格納処理の進行について説明するための図である。
【図９】特許文献１のストレージシステムに、３つのストリームデータＳＴ１、ＳＴ２、ＳＴ３を格納したときの、記憶装置内でのデータ配置の例を示す図である。
【図１０】特許文献１のストレージシステムが図９の配置でデータを格納した状態にある場合における、読み出し処理と再格納処理の進行について説明するための図である。
【発明を実施するための形態】
【００１６】
［第１実施形態］
本発明の第１実施形態に係るストレージシステム１について説明する。図１を参照すると、ストレージシステム１は、記憶装置３１、分割記憶制御部２５、読み出し済み情報記憶部３３、格納位置管理部２６を備える。
【００１７】
分散記憶制御部２５は、ストレージシステム１に入力されたデータを記憶装置３１に書き込む。その際、分散記憶制御部２５はひとつのデータを複数のデータに分割して書き込みを行う。
【００１８】
分割前後のデータの関係について説明する。ここでは分割前のデータを親データと呼び、分割後のデータを子データと呼ぶものとする。図２を参照すると、親データD1は子データd1-1、d1-2、…、d1-Lからなる（Lは自然数）。各子データは、入力された順に親データD1を所定のサイズで区切ったものである。同様に、親データD2は子データd2-1、d2-2、…、d2-M（Mは自然数）からなり、親データD3は子データd3-1、d3-2、…、d3-N（Nは自然数）からなる。
【００１９】
ストレージシステム１に複数のデータが並行して入力される場合を考える。分散記憶制御部２５は、入力された順序に従って記憶装置３１に書き込む。その際、親データ単位での入力順序ではなく、子データ単位での入力順序に従って記憶装置３１に書き込む。書き込みの直後、子データは例えば図３のように配置される。図３に示すように、分散記憶制御部２５は、ファイルFの先頭から末尾に向かって、その子データが入力された順序に従ってファイルFに書き込む。
【００２０】
今、図３のファイルFに対して読み出し処理が発生し、図４に示すように、ファイルFを先頭から順に位置POSRまで読み出したとする。このとき、格納位置管理部２６は、ファイルの読み出し処理の実行に応じて、その読み出し処理がそのファイルから最後に読み出した位置POSRを読み出し済み情報記憶部３３に記憶する。
【００２１】
このとき、分散記憶制御部２５は、ファイル内で子データをソートするソート処理、即ち、再格納処理を、読み出し済み情報記憶部３３に記憶した位置以後に格納されている子ファイルに対して行う。再格納処理は、ファイルF内における子ファイルの配置を整理することにより、ファイルFの読み出し速度の改善を図るためのものである。
【００２２】
再格納処理後のファイルF内のデータ配置の例を図５に示す。本例では、位置POSR以後、まず、分割元の親データによって各子データがまとめて配置されている。親データD1を分割元とする子データd1-9、d1-10が連続して格納され、次に、親データD2を分割元とする子データd2-6, d2-7が連続して格納され、最後に、親データD3を分割元とする子データd3-5, d3-6, …,d3-9が連続して格納されている。また、同じ親データを分割元とする子データは、入力順序に応じた順序に配置されている。
【００２３】
このように、読み出し処理が発生したとき、その最後の読み出し位置POSRを記憶し、その位置以後に格納されているデータに対して再格納処理を実行することにより、読み出し位置POSR以後に格納されているデータの読み出し処理を高速化することができる。
【００２４】
［第２実施形態］
本発明の第２実施形態に係るストレージシステム１０について説明する。図６を参照すると、ストレージシステム１０はデータ処理装置２０及びデータ記憶装置３０を備える。ストレージシステム１０は単独或いは複数のコンピュータによって構成されるシステムである。データ処理装置２０及びデータ記憶装置３０を単独のコンピュータによって構成してもよいし、データ処理装置２０及びデータ記憶装置３０をそれぞれ別のコンピュータとして構成することとしてもよい。更に、データ処理装置２０及びデータ記憶装置３０をそれぞれ複数のコンピュータにより構成することとしてもよい。
【００２５】
ストレージシステム１０はコンテンツアドレスストレージシステムである。コンテンツアドレスストレージシステムでは、データを分割及び冗長化し、分散して複数の記憶装置に記憶する。また、コンテンツアドレスストレージシステムでは、記憶するデータの内容に応じて設定される固有のコンテンツアドレスによって、当該データを格納した格納位置を特定する。
【００２６】
データ処理装置２０は、データ記憶装置３０に対するデータの記憶及び読み出し動作を制御する。データ記憶装置３０はデータを記憶する記憶媒体を備える装置である。データ処理装置２０、データ記憶装置３０をそれぞれ単独のコンピュータとして構成する場合、データ処理装置２０、データ記憶装置３０をそれぞれ例えばサーバコンピュータ装置にて構成することが考えられる。
【００２７】
データ処理装置２０は、ストリームID(Identifier)付与部２１、ブロック生成部２２、重複チェック部２３、フラグメント生成部２４、分散記憶制御部２５、格納位置管理部２６を備える。データ記憶装置３０は、複数の記憶装置３１、格納位置情報記憶部３２、読み出し済み情報記憶部３３を備える。
【００２８】
ストリームID付与部２１は、一群のデータである対象データＡの入力を受けると、当該対象データＡを区別する識別情報であるストリームIDを付与する。例えば、対象データＡに対してストリームID=ST1を付与し、対象データＢ（図示せず）に対してストリームID=ST2を付与する。
【００２９】
ブロック生成部２２は、対象データＡの入力を受けると、当該対象データＡを所定容量（例えば、６４ＫＢ）のブロックデータＤに分割する。
【００３０】
また、ブロック生成部２２は、ブロックデータＤのデータ内容に基づいて、当該ブロックデータＤの内容を代表する固有のハッシュ値Ｈ（内容識別情報）を算出する。例えば、ハッシュ値Ｈは、予め設定されたハッシュ関数を用いて、ブロックデータＤのデータ内容から算出する。
【００３１】
更に、ブロック生成部２２は、対象データＡに付与したストリームIDを、その対象データＡを分割して生成した各ブロックデータＤにも引き継いで付与する。
【００３２】
重複チェック部２３は、対象データＡのブロックデータＤのハッシュ値Ｈを用いて、当該ブロックデータＤが既に記憶装置３１に格納されているか否かを調べる。
【００３３】
具体的には、まず、既に格納されているブロックデータＤは、そのハッシュ値Ｈと格納位置を表すコンテンツアドレスＣＡが、関連付けてＭＦＩ（Ｍａｉｎ  Ｆｒａｇｍｅｎｔ  Ｉｎｄｅｘ）ファイルに登録されている。従って、重複チェック部２３は、格納前に算出したブロックデータＤのハッシュ値ＨがＭＦＩファイル内に存在している場合には、既に同一内容のブロックデータＤが格納されていると判断できる。
【００３４】
この場合には、格納前のブロックデータＤのハッシュ値Ｈと一致したＭＦＩ内のハッシュ値Ｈに関連付けられているコンテンツアドレスＣＡを、当該ＭＦＩファイルから取得する。そして、このコンテンツアドレスＣＡを、記憶要求にかかるブロックデータＤのコンテンツアドレスＣＡとして返却する。
【００３５】
これにより、このコンテンツアドレスＣＡにて参照される既に格納されているデータが、記憶要求されたブロックデータＤとして使用されることとなり、当該記憶要求にかかるブロックデータＤは記憶する必要がなくなる。
【００３６】
フラグメント生成部２４は、重複チェック部２３にてまだ記憶されていないと判断されたブロックデータＤを、圧縮して、複数の所定の容量のフラグメントデータに分割する。例えば、符号Ｄ１〜Ｄ９にそれぞれ対応する９つのフラグメントデータに分割する。
【００３７】
また、フラグメント生成部２４は、分割したフラグメントデータのうちいくつかが欠けた場合であっても、元となるブロックデータを復元可能なよう冗長データを生成する。フラグメント生成部２４は生成した冗長データをフラグメントデータに追加して、ひとつのデータセットを生成する。
【００３８】
例えば、フラグメント生成部２４は、９つのフラグメントデータＤ１〜Ｄ９に対して、符号Ｄ１０〜Ｄ１２にそれぞれ対応する３つの冗長データを追加して、ひとつのデータセットを生成する。つまり、フラグメント生成部２４は、重複チェック部２３が未記憶と判断したブロックデータＤに相当するデータセットを生成する。以下、フラグメントデータＤ１〜Ｄ９のように、ブロックデータＤを圧縮、分割して生成したデータと、冗長データＤ１０〜Ｄ１２のように、冗長化を実現するために生成したデータの両方を、総称してフラグメントデータと呼ぶことがある。フラグメントデータＤ１〜Ｄ１２は同じ容量になるように作成されることが好ましい。
【００３９】
更に、フラグメント生成部２４は、生成した全てのフラグメントデータＤ１〜Ｄ１２に、当該フラグメントデータの元となるブロックデータＤ、つまり、フラグメントデータＤ１〜Ｄ１２から復元されるブロックデータＤに付与されたストリームIDを、それぞれ付与する。
【００４０】
分散記憶制御部２５は、フラグメント生成部２４にて生成されたデータセットを構成する各フラグメントデータを、記憶装置３１に形成された各記憶領域に、それぞれ分散して格納する。
【００４１】
例えば、ストレージシステム１０が複数の記憶装置３１として１２基の記憶装置を設けて、１基毎にデータ格納ファイルＦを用意する。このとき、ストレージシステム１０は１２個のデータ格納ファイルＦ１〜Ｆ１２をデータ格納領域として有する。分散記憶制御部２５は、これら１２個のデータ格納ファイルＦ１〜Ｆ１２のそれぞれに、フラグメントデータＤ１〜Ｄ１２のひとつを格納する。即ち、分散記憶制御部２５は、ある１基の記憶装置３１のデータ格納ファイルＦ１にフラグメントデータＤ１を格納し、別の１基の記憶装置３１のデータ格納ファイルＦ２にフラグメントデータＤ２を格納する。同一のデータセットをなす複数のフラグメントデータを、別々の記憶装置のデータ格納ファイルに格納する。
【００４２】
また、分散記憶制御部２５は、同一データセットのフラグメントデータを別々の記憶装置３１に格納する際、各データ格納ファイル内の同じ位置に格納する。
【００４３】
例えば、上述の例のように、ストレージシステム１０が１２基の記憶装置３１を備え、各記憶装置３１にデータ格納ファイルＦ１〜Ｆ１２があり、あるブロックデータＤに対応するデータセットが、１２個のフラグメントデータＤ１〜Ｄ１２からなるとする。分散記憶制御部２５は、データ格納ファイルＦ１にフラグメントデータＤ１を格納する際、データ格納ファイルＦ１の先頭からＵビット（Ｕは自然数）目に格納したとする。このとき、分散記憶制御部２５は、データ格納ファイルＦ２にフラグメントデータＤ２を格納する際も、データ格納ファイルＦ２の先頭からＵビット目に格納する。他のフラグメントデータＤ３〜Ｄ１２の格納についても同様である。
【００４４】
ストレージシステム１０に複数の対象データを同時に格納する場合、分散記憶制御部２５は、異なる対象データに由来するデータセットを交互にデータ格納ファイルに格納することがある。例えば、ストレージシステム１０が同時期に３つの対象データの入力を受け付けたとする。ストリームＩＤ付与部２１はこれら３つの対象データに対して、ストリームＩＤとしてＳＴ１、ＳＴ２、ＳＴ３を順に付与したとする。このとき、データ格納フォルダＦ１〜Ｆ１２は例えば図７のようにフラグメントデータを格納する。
【００４５】
図７において、同一の対象データに由来するフラグメントデータには、同一の網掛けが施してある。即ち、ストリームＩＤ＝ＳＴ１のフラグメントデータには、右上から左下に向かう斜線の網掛けが施してある。ストリームＩＤ＝ＳＴ２のフラグメントデータには、格子状の網掛けが施してある。ストリームＩＤ＝ＳＴ３のフラグメントデータには、斜方格子状の網掛けが施してある。
【００４６】
また、分散記憶制御部２５は、各データ格納ファイルＦ１〜Ｆ１２に格納する前に、各フラグメントデータＤ１〜Ｄ１２をストリームＩＤ毎に区別して異なるバッファメモリに一旦格納する。そして、その後、バッファメモリ内のフラグメントデータＤ１〜Ｄ１２を各データ格納ファイルＦ１〜Ｆ１２に格納する。
【００４７】
また、分散記憶制御部２５は、上述したように、フラグメントデータをデータ格納ファイルに格納する時のみならず、すでに格納されたフラグメントデータに対しても、同一のストリームIDのフラグメントデータが連続して配置されるよう、事後的に格納位置を変更する機能も有する。例えば、ストレージシステム１０自体のリソースが所定値以上空いているときに、各データ格納ファイルＦ１〜Ｆ１２に格納されているフラグメントデータを、ストリームIDが同一のものが連続するよう格納位置を移動する。具体的には、各データ格納ファイルＦ１〜Ｆ１２の同一の格納位置（横一列）に格納されている全てのフラグメントデータの格納位置を、当該各フラグメントデータにて構成されるデータセット４０ごと、変更することができる。これにより、ストリームIDが異なるデータセットが交互に格納された状態から、同一のストリームIDのものが連続する格納状態にすることができる。
【００４８】
また、分散記憶制御部２５は、データセット４０を構成する各フラグメントデータＤ１〜Ｄ１２に、同一のデータセット４０を構成していることを識別するために、同一の識別情報（WriteRecordSeqNum）を付与して、各データ格納ファイルＦ１〜Ｆ１２にそれぞれ格納する。そして、分散記憶制御部２５は、ストレージシステム１０のリソースが空いているときなど任意のタイミングで識別情報を調べる。これにより、同一のデータセット４０を構成している各フラグメントデータが、各データ格納ファイルＦ１〜Ｆ１２内の同一の格納位置に格納されているか、ということを調べることができる。従って、分散記憶制御部２５は、各データ格納ファイルＦ１〜Ｆ１２内の同一の格納位置に格納されている各フラグメントデータが、全て同一の識別情報（WriteRecordSeqNum）を含んでいなければ、当該各フラグメントデータが同一の格納位置に格納されるよう当該格納位置を修正して、データを再格納する。
【００４９】
更に、分散記憶制御部２５は、現に記憶装置３１に格納しているデータの読み出し処理を行う。
【００５０】
格納位置管理部２６は、上述したように記憶装置３１に格納したフラグメントデータＤ１〜Ｄ１２の格納位置、つまり、当該フラグメントデータＤ１〜Ｄ１２にて復元されるブロックデータＤの格納位置を表す、コンテンツアドレスＣＡを生成して管理する。具体的には、格納したブロックデータＤの内容に基づいて算出したハッシュ値Ｈの一部（ショートハッシュ）（例えば、ハッシュ値Ｈの先頭８Ｂ（バイト））と、論理格納位置を表す情報と、を組み合わせて、コンテンツアドレスＣＡを生成する。そして、このコンテンツアドレスＣＡを、ストレージシステム１０内のファイルシステムに返却する。すると、ファイルシステムは、対象データのファイル名などの識別情報と、コンテンツアドレスＣＡとを関連付けて管理する。
【００５１】
また、格納位置管理部２６は、ブロックデータＤのコンテンツアドレスＣＡと、当該ブロックデータＤのハッシュ値Ｈと、を関連付けて、各ストレージノード１０ＢがＭＦＩファイルにて管理する。このように、コンテンツアドレスＣＡは、ファイルを特定する情報やハッシュ値Ｈなどと関連付けられて、格納位置情報記憶部３２に格納される。
【００５２】
さらに、格納位置管理部２６は、上述したように格納した対象データを読み出す制御を行う。例えば、ストレージシステム１０に対して、特定のファイルを指定して読み出し要求があると、まず、ファイルシステムに基づいて、読み出し要求にかかるファイルに対応するハッシュ値の一部であるショートハッシュと論理位置の情報からなるコンテンツアドレスＣＡを指定する。そして、格納位置管理部２６は、コンテンツアドレスＣＡがＭＦＩファイルに登録されているか否かを調べる。登録されていなければ、要求されたデータは格納されていないため、エラーを返却する。
【００５３】
一方、読み出し要求にかかるコンテンツアドレスＣＡが登録されている場合には、コンテンツアドレスＣＡにて指定される格納位置を特定し、この特定された格納位置に格納されている各フラグメントデータを、読み出し要求されたデータとして読み出す。このとき、各フラグメントが格納されているデータ格納ファイルＦ１〜Ｆ１２と、当該データ格納ファイルのうち１つのフラグメントデータの格納位置が分かれば、同一の格納位置から他のフラグメントデータの格納位置を特定することができる。
【００５４】
そして、格納位置管理部２６は、読み出し要求に応じて読み出した各フラグメントデータからブロックデータＤを復元する。さらに、格納位置管理部２５は、復元したブロックデータＤを複数連結し、ファイルＡなどの一群のデータに復元して、読み出し元に返却する。
【００５５】
データ記憶装置３０は、複数の記憶装置３１、格納位置情報記憶部３２、読み出し済み情報記憶部３３を備える。
【００５６】
記憶装置３１は、それぞれ、ストレージシステム１０に格納する対象となるデータを格納する記憶装置である。記憶装置３１として用いる記憶装置は例えばハードディスクドライブ、SSD (Solid State Drive)である。
【００５７】
格納位置情報記憶部３２は、格納したデータの格納位置を記憶する記憶装置である。格納位置情報記憶部３２として用いる記憶装置は例えばハードディスクドライブ、SSDである。
【００５８】
読み出し済み情報記憶部３３は、読み出し処理によるデータの読み出しを中断した位置を示す位置情報である、読み出し済みポインタＰＯＳＲを記憶する。また、読み出し済み情報記憶部３３は、再格納処理を終了した位置、即ち、次回の再格納処理を開始する位置ＰＯＳＰを記憶する。
【００５９】
次に、ストレージシステム１０の動作について説明する。ストレージシステム１０は、記憶装置３１に格納したデータのうち、読み出し処理が既に終了した位置を示す位置情報を保持する。この位置情報に基づいて、再格納処理を行っていないデータのうち、読み出しを既に行ったデータについては、再格納処理の優先度を下げる。読み出しがまだのデータを優先して再格納処理を行う。再格納処理を行っていない、未ソートのデータについては、例えば、当該データの位置情報を昇順のリストで管理する。
【００６０】
図７を参照して説明する。分散記憶制御部２５は記憶装置３１の全データを対象とした読み出し処理を開始する（ステップＳ１）。このような処理の例としては、レプリケーションの際に行うマスタサイトからの読み出し処理がある。この種の読み出し処理では、記憶装置３１のある位置までの読み出し処理を終了した後、その終了した位置から読み出し処理を続けて行う。
【００６１】
レプリケーションでは、マスタサイト側のファイルに対してデータの書き込みが発生すると、書き込みに伴う差分データをマスタサイトからレプリカサイトに転送する。転送の対象は差分であるため、一度レプリケーションによって読み出しの対象となったデータは、以後は参照されない。このため、マスタサイト側のファイルにおいて読み出し処理の対象となったデータは、以後は読み出し処理の対象にならない。
【００６２】
次に、分散記憶制御部２５は読み出し処理を終了する（ステップＳ２）。このときの位置を示すポインタを読み出し済みポインタと呼び、読み出し済みポインタの位置情報をＰＯＳＲとする。
【００６３】
次に、格納位置管理部２６は、読み出し済ポインタ(位置情報)ＰＯＳＲを格納位置情報記憶部３２に保持する（ステップＳ３）。
【００６４】
次に、格納位置管理部２６は、読み出し済みポインタの位置情報ＰＯＳＲ、及び、再格納処理の終了／再開位置ＰＯＳＰを、格納位置情報記憶部３２から読み出す（ステップＳ４）。
【００６５】
次に、格納位置管理部２６は、格納位置情報記憶部３２から読み出した、位置ＰＯＳＲと位置ＰＯＳＰとを比較する（ステップＳ５）。
【００６６】
読み出し処理の進行方向において、位置ＰＯＳＲが位置ＰＯＳＰよりも前方にある場合、即ち、次の読み出し処理を開始する位置ＰＯＳＲが、再格納処理を再開する位置ＰＯＳＰよりも、データ格納フォルダＦ１〜Ｆ１２の末尾側にある場合、格納位置管理部２６は、格納位置情報記憶部３２に格納している再格納処理の終了／再開位置ＰＯＳＰの値を、読み出し済みポインタの位置ＰＯＳＲの値で更新する（ステップＳ６）。つまり、再格納処理を再開する位置ＰＯＳＰを、次の読み出し処理を開始する位置ＰＯＳＲまで飛ばす。
【００６７】
このとき、図８に示すように、再格納処理の再開位置ＰＯＳＰを、先行していた読み出し処理の次回開始位置ＰＯＳＲに追いつかせた状態になる。データ格納ファイルＦ１〜Ｆ１２において、読み出し処理の次回の開始位置以後に格納されているデータに対する再格納処理を優先して行うことになる。
【００６８】
尚、読み出し処理の進行方向において、位置ＰＯＳＰが位置ＰＯＳＲよりも前方にある場合、即ち、次の読み出し処理を開始する位置ＰＯＳＲが、再格納処理を再開する位置ＰＯＳＰよりも、データ格納フォルダＦ１〜Ｆ１２の先頭側にある場合は何もしない。
【００６９】
次に、分割記憶制御部２５は、格納位置情報記憶部３２に格納されている位置ＰＯＳＰから再格納処理を開始する（ステップＳ７）。
【００７０】
例えば、ステップＳ６、Ｓ７では、ストレージシステム１０がレプリケーションのマスタサイトの記憶装置である場合、レプリケーションジョブの終了時に、レプリケーションジョブは最後に読み出した位置を読み出し済情報記憶部３３に通知する。また、レプリケーションジョブは、読み出し済情報を更新したことを格納位置管理部２６に通知する。この通知を受けて、格納位置管理部２６は、読み出し済情報記憶部３３を参照し、再格納処理開始位置が読み出し済情報記憶部３３から読み出した位置に設定する。分割記憶制御部２５は、再設定を行った位置から再格納処理を開始する。
【００７１】
本実施形態によれば、コンテンツアドレスストレージシステムの読み出し性能の向上を図ることができる。
【００７２】
上記の実施形態の一部又は全部は以下の付記のようにも記載されうるが、以下には限られない。
【００７３】
（付記１）
ひとつの親データを複数に分割して生成したデータを子データと呼ぶとき、互いに異なる親データを分割元とする子データを順番に記憶装置内のファイルに格納する手段、
前記ファイルの読み出し処理の実行に応じて、当該読み出し処理が前記ファイルから最後に読み出した位置を記憶装置に記憶する手段、
前記ファイル内で前記子データをソートするソート処理を、前記位置以後に格納されている前記子ファイルに対して行う手段
を備えるストレージシステム。
【００７４】
（付記２）
前記ソート処理は、同じ前記親データを分割元とする前記子データが、前記ファイル内において連続するように前記子データをソートする、付記１に記載のストレージシステム。
【００７５】
（付記３）
前記子データは、同じ親データを分割して生成した他の子データとの間に互いに順序関係を有し、
前記ソート処理は、同じ前記親データを分割元とする前記子データが前記ファイル内において前記順序関係に従って連続するように行う、
付記１または付記２に記載のストレージシステム。
【００７６】
（付記４）
付記１乃至付記３のいずれかに記載のコンテンツアドレスストレージシステム。
【００７７】
（付記５）
前記ストレージシステムは、マスタサイトからレプリカサイトへレプリケーションを行う前記マスタサイトが備えるストレージシステムである、付記１乃至付記４のいずれかに記載のストレージシステム。
【００７８】
（付記６）
ひとつの親データを複数に分割して生成したデータを子データと呼ぶとき、互いに異なる親データを分割元とする子データを順番に記憶装置内のファイルに格納する段階、
前記ファイルの読み出し処理の実行に応じて、当該読み出し処理が前記ファイルから最後に読み出した位置を記憶装置に記憶する段階、
前記ファイル内で前記子データをソートするソート処理を、前記位置以後に格納されている前記子ファイルに対して行う段階
を含む、データソート方法。
【００７９】
（付記７）
前記ソート処理は、同じ前記親データを分割元とする前記子データが、前記ファイル内において連続するように前記子データをソートする、付記６に記載の方法。
【００８０】
（付記８）
前記子データは、同じ親データを分割して生成した他の子データとの間に互いに順序関係を有し、
前記ソート処理は、同じ前記親データを分割元とする前記子データが前記ファイル内において前記順序関係に従って連続するように行う、
付記６または付記７に記載の方法。
【００８１】
（付記９）
前記ストレージシステムはコンテンツアドレスストレージシステムである、付記６乃至付記８のいずれかに記載の方法。
【００８２】
（付記１０）
前記ストレージシステムは、マスタサイトからレプリカサイトへレプリケーションを行う前記マスタサイトが備えるストレージシステムである、付記６乃至付記９のいずれかに記載の方法。
【００８３】
（付記１１）
ひとつの親データを複数に分割して生成したデータを子データと呼ぶとき、互いに異なる親データを分割元とする子データを順番に記憶装置内のファイルに格納する手段、
前記ファイルの読み出し処理の実行に応じて、当該読み出し処理が前記ファイルから最後に読み出した位置を記憶装置に記憶する手段、
前記ファイル内で前記子データをソートするソート処理を、前記位置以後に格納されている前記子ファイルに対して行う手段
をコンピュータに実現させるためのプログラム。
【００８４】
（付記１２）
前記ソート処理は、同じ前記親データを分割元とする前記子データが、前記ファイル内において連続するように前記子データをソートする、付記１１に記載のプログラム。
【００８５】
（付記１３）
前記子データは、同じ親データを分割して生成した他の子データとの間に互いに順序関係を有し、
前記ソート処理は、同じ前記親データを分割元とする前記子データが前記ファイル内において前記順序関係に従って連続するように行う、
付記１１または付記１２に記載のプログラム。
【符号の説明】
【００８６】
１、１０  ストレージシステム
２１  ストリームＩＤ付与部
２２  ブロック生成部
２３  重複チェック部
２４  フラグメント生成部
２５  分散記憶制御部
２６  格納位置管理部
３０  データ記憶装置
３１  記憶装置
３２  格納位置情報記憶部
３３  読み出し済み情報記憶部
【図１】
2018173802.tif 000003
【図２】
2018173802.tif 000004
【図３】
2018173802.tif 000005
【図４】
2018173802.tif 000006
【図５】
2018173802.tif 000007
【図６】
2018173802.tif 000008
【図７】
2018173802.tif 000009
【図８】
2018173802.tif 000010
【図９】
2018173802.tif 000011
【図１０】
2018173802.tif 000012