プロセッサデバイスによってデータを処理するための方法であって、前記データの重複排除ストレージのために複数の書き込み動作を受信すること、重複排除ストレージのための連続書き込みおよび不連続書き込みのうちの1つである前記受信したデータに応答すること、前記データを、データ構造ごとに複数のバッファ内に蓄積および更新することであって、前記データ構造が前記複数のバッファと複数のユーザファイル位置との間の断片マップの役割を果たす、蓄積および更新すること、前記データを、必要なシーケンスサイズの完全なシーケンスを形成するために、前記複数のバッファ内で再構築すること、および前記データを、少なくとも1つのストリームとして、処理および格納のためにストリームベースの重複排除アルゴリズムに提供すること、を含む、方法。前記複数のユーザファイルのうちの少なくとも1つを、前記複数のバッファのうちの少なくとも1つに関連付けること、前記複数のユーザファイルのために、前記少なくとも1つのストリームのうちの少なくとも1つを開始すること、前記少なくとも1つのストリームのそれぞれについてオフセットを維持することであって、前記オフセットが前記少なくとも1つのストリームに書き込まれた前記複数のユーザファイル内の最後のオフセットを表す、維持すること、および前記複数のバッファのうちの前記少なくとも1つを、前記複数の書き込み動作のそれぞれに割り振ることであって、前記断片マップが、前記複数の書き込み動作のそれぞれについての前記複数のバッファの割り振りを反映するように更新される、割り振ること、のうちの1つを実行することによって、前記複数のユーザファイルと前記複数のバッファとの間の関係を構成することをさらに含む、請求項1に記載の方法。前記データが前記オフセットに隣接されると、前記データを前記少なくとも1つのストリームに書き込み、前記少なくとも1つのストリームのそれぞれについて前記オフセットを前進させ、前記データの前記複数のバッファを解放する、請求項2に記載の方法。前記データが前記少なくとも1つのストリームのうちの複数に常駐できるようにするために、複数のディスクマップによって前記データをマッピングすることをさらに含む、請求項1に記載の方法。前記複数の書き込み動作のうちの少なくとも1つによって前記複数のバッファ内に上書きを検出すると、前記少なくとも1つのストリームの追加の1つを作成し、前記少なくとも1つのストリームの前記追加の1つを、前記複数のバッファに格納された前記少なくとも1つのストリームのうちの既存の1つに重ね、前記少なくとも1つのストリームの前記追加の1つはメタファイル構造に記録される、請求項1に記載の方法。隣接のうちのいずれか1つをマージすることによって前記複数のユーザファイルのうちの少なくとも1つを閉じること、および前記少なくとも1つのストリームのうちの少なくとも1つにストリームを重ね合わせることをさらに含む、請求項1に記載の方法。複数のユーザファイルを閉じた後、任意の期間後、および前記複数のユーザファイルが休止していると判定された後、のうちの1つで、断片化プロセスを実行することをさらに含み、前記断片化動作は、前記複数のユーザファイルのそれぞれの前記少なくとも1つのストリームを単一のストリームに再配置構成する、請求項1に記載の方法。複数のバッファにバッファリングされた前記データのオーバフローを、メモリ階層に一時的に格納することをさらに含む、請求項1に記載の方法。コンピューティング環境においてデータを処理するためのシステムであって、少なくとも1つのプロセッサデバイスを備え、前記少なくとも1つのプロセッサデバイスが、前記データの重複排除ストレージのために複数の書き込み動作を受信すること、重複排除ストレージのための連続書き込みおよび不連続書き込みのうちの1つである前記受信したデータに応答すること、前記データを、データ構造ごとに複数のバッファ内に蓄積および更新することであって、前記データ構造が前記複数のバッファと複数のユーザファイル位置との間の断片マップの役割を果たす、蓄積および更新すること、前記データを、必要なシーケンスサイズの完全なシーケンスを形成するために、前記複数のバッファ内で再構築すること、および前記データを、少なくとも1つのストリームとして、処理および格納のためにストリームベースの重複排除アルゴリズムに提供すること、のために適合される、システム。プロセッサデバイスによってデータを処理するためのコンピュータプログラムであって、前記データの重複排除ストレージのために複数の書き込み動作を受信するための、第1の実行可能部分と、重複排除ストレージのための連続書き込みおよび不連続書き込みのうちの1つである前記受信したデータに応答するための、第2の実行可能部分と、前記データを、データ構造ごとに複数のバッファ内に蓄積および更新するための、第3の実行可能部分であって、前記データ構造が前記複数のバッファと複数のユーザファイル位置との間の断片マップの役割を果たす、第3の実行可能部分と、前記データを、必要なシーケンスサイズの完全なシーケンスを形成するために、前記複数のバッファ内で再構築するための、第4の実行可能部分と、前記データを、少なくとも1つのストリームとして、処理および格納のためにストリームベースの重複排除アルゴリズムに提供するための、第5の実行可能部分と、を備える、コンピュータプログラム。前記複数のユーザファイルのうちの少なくとも1つを、前記複数のバッファのうちの少なくとも1つに関連付けること、前記複数のユーザファイルのために、前記少なくとも1つのストリームのうちの少なくとも1つを開始すること、前記少なくとも1つのストリームのそれぞれについてオフセットを維持することであって、前記オフセットが前記少なくとも1つのストリームに書き込まれた前記複数のユーザファイル内の最後のオフセットを表す、維持すること、および前記複数のバッファのうちの前記少なくとも1つを、前記複数の書き込み動作のそれぞれに割り振ることであって、前記断片マップが、前記複数の書き込み動作のそれぞれについての前記複数のバッファの割り振りを反映するように更新される、割り振ること、のうちの1つを実行することによって、前記複数のユーザファイルと前記複数のバッファとの間の関係を構成するための、第6の実行可能部分をさらに含む、請求項10に記載のコンピュータプログラム。前記データが前記オフセットに隣接されると、前記データを前記少なくとも1つのストリームに書き込み、前記少なくとも1つのストリームのそれぞれについて前記オフセットを前進させ、前記データの前記複数のバッファを解放するための、第7の実行可能部分をさらに備える、請求項10に記載のコンピュータプログラム。前記データが前記少なくとも1つのストリームのうちの複数に常駐できるようにするために、複数のディスクマップによって前記データをマッピングするための、第6の実行可能部分をさらに備える、請求項11に記載のコンピュータプログラム。前記複数の書き込み動作のうちの少なくとも1つによって前記複数のバッファ内に上書きを検出すると、前記少なくとも1つのストリームの追加の1つを作成し、前記少なくとも1つのストリームの前記追加の1つを、前記複数のバッファに格納された前記少なくとも1つのストリームのうちの既存の1つに重ね、前記少なくとも1つのストリームの前記追加の1つはメタファイル構造に記録されるための、第6の実行可能部分をさらに備える、請求項10に記載のコンピュータプログラム。隣接のうちのいずれか1つをマージすることによって前記複数のユーザファイルのうちの少なくとも1つを閉じるため、および前記少なくとも1つのストリームのうちの少なくとも1つにストリームを重ね合わせるための、第6の実行可能部分をさらに備える、請求項10に記載のコンピュータプログラム。複数のユーザファイルを閉じた後、任意の期間後、および前記複数のユーザファイルが休止していると判定された後、のうちの1つで、断片化プロセスを実行するための、第6の実行可能部分をさらに備え、前記断片化動作は、前記複数のユーザファイルのそれぞれの前記少なくとも1つのストリームを単一のストリームに再配置構成する、請求項10に記載のコンピュータプログラム。複数のバッファにバッファリングされた前記データのオーバフローを、メモリ階層に一時的に格納するための、第6の実行可能部分をさらに備える、請求項10に記載のコンピュータプログラム。重複排除機能を提供するための問題点には、典型的には大規模なストレージリポジトリ内で重複データパターンを効率的に発見すること、および、このデータパターンを重複排除されたストレージ効率の良い形で格納することなどの、諸態様が含まれる。コンピューティング環境においてデータを処理するための方法、コンピュータシステム、およびコンピュータプログラム製品の諸実施形態が提供される。例示的な一実施形態では、単なる例として、データ重複排除ストレージ向けのコンピュータ環境は、データの重複排除ストレージのために複数の書き込み動作を受信する。重複排除ストレージのために受信されるデータが連続または不連続の場合、オーバフローがメモリ階層へと一時的に格納されると共に、このデータは複数のバッファにバッファリングされる。データは、データ構造ごとに複数のバッファ内に蓄積および更新され、このデータ構造は複数のバッファと複数のユーザファイル位置との間の断片マップfragmentmapの役割を果たす。データは、必要なシーケンスサイズの完全なシーケンスを形成するために、複数のバッファ内で再構築される。データは、少なくとも1つのストリームとして、処理および格納のためにストリームベースの重複排除アルゴリズムに提供される。本発明の利点が容易に理解されるように、上記で簡潔に説明された本発明について添付の図面に示された特定の諸実施形態を参照しながらより具体的に述べる。これらの図は本発明の諸実施形態を示すものであり、したがってその範囲を限定するものとみなされるべきではないことを理解した上で、添付の図面を使用して、本発明についてさらに具体的かつ詳細に記述および説明する。以下の説明および記載された主題全体を通じて、例示された諸実施形態に関連する以下の用語が記載されている。バッファのプールは、それぞれが単一の断片を保持できる複数のバッファを言い表すものと意図される。バッファのプールは、メモリバッファのプールとも言い表すことが可能であり、メモリ階層構造に関連し、これを企図して使用することが可能である。断片とは、所定サイズの固定サイズ片へのユーザファイルの論理的分割を言い表すものと意図される。単なる例として、一実装では、断片は任意の便利な所定のサイズを有することができるが、あらかじめ固定しておかなければならない。単なる例として、1片は64KBの断片サイズを使用することができる。しかしながらこの断片サイズは固定しないことも可能である。ユーザファイルとは、バックアップアプリケーションによって作成されているファイルを言い表すものと意図される。断片マップとは、メモリバッファとユーザファイル位置との間、およびその逆をマッピングする働きをするデータ構造を言い表すものと意図される。ディスクマップとは、各ユーザファイルのデータが複数の圧縮モジュールストリーム内に常駐できるようにするために、ユーザファイルの断片を圧縮モジュールストリームへとマッピングする断片マップと同様の、オンディスク構造ondiskstructureを言い表すものと意図される。コントロールモジュールまたはコントローラモジュールとは、ランダムなパターンの書き込みオフセットを有するネットワーク接続ストレージシステムNASまたはストレージシステムを介して、クライアントから受信される各書き込み動作を使用して、何を実行するかを決定および管理するように構成された、モジュールを言い表すものと意図される。圧縮モジュールとは、データのストリームの受信、データのストリームの開始、ストリームの圧縮、およびデータストリームのストレージへの格納の諸動作を、管理、支援、または実行することが意図される。圧縮モジュールは、データストリームの受信、開始、圧縮、およびストレージへの格納を実行するために、重複排除ストレージサブシステム内で独立に動作するか、または他のコンポーネントを支援するように構成することが可能である。本発明は、複数のメモリバッファおよびストリームベースアルゴリズムを使用する方法を有するランダムなパターンの書き込みオフセットを有する、ネットワーク接続システムNAS、あるいは任意のランダムアクセス書き込みまたはストレージシステムを介した、データ重複排除に関する、ソリューションおよび機能強化を提供するものである。大規模データセットは、従来、格納されるバイト当たりのコストが最も低く、信頼性が高く、アーカイブの存続期間の長い、磁気テープ上に格納されてきた。しかしながら磁気テープには、広範囲に及ぶ手作業による保守テープカートリッジの装填および取り外し、小規模な機械的問題の解決、移送、および格納などの必要性による多くの欠点もある。こうした欠点により、テープ仮想化製品の開発が促進されてきた。テープ仮想化製品は、大規模ディスクアレイを使用してデータを格納する一方で、テープ様のインターフェースを残りのバックアップシステムに向けることができる。テープ仮想化システムは、正規のテープライブラリと同様に通常のバックアップシステムに収まるため、問題なく既存のシステムに適合する一方で、実際のデータはディスクアレイ上に維持し、前述のテープシステムのほとんどの欠点を排除することができる。しかしこれらのテープエミュレーションシステムは、ディスクアレイのバイト当たりのコストがテープカートリッジよりも非常に高額であるという、別の問題をもたらす。こうした問題は、ほとんどの場合、バックアップデータセット内に大量のデータ冗長性があることを観察することによって解決可能である。今日実行されるバックアップのバックアップデータは、ほとんどの場合、昨日実行されたバックアップによって生成されたバックアップデータとほぼ同じである。この同様のデータ領域またはデータシーケンスを識別することにより、その両方に同じストレージスペースを使用して、大量のストレージスペースを節約することが可能である。このメカニズムが重複排除と呼ばれ、結果的に多くの場合、10倍、時にはそれ以上、必要ストレージスペースを削減することが可能になる。このスペース削減によって、ディスクベースのテープ仮想化が、重複排除テープ仮想化製品が市場に出回るという商業的な成功を反映する、従来の磁気テープを置換するための経済的に実行可能な命題となる。バックアップデータセットは大規模であり、ペタバイトで測定可能である。加えてバックアップストリームは、典型的な毎秒ギガバイトの速度を有する。こうした速度でデータを処理することが可能であり、このような大規模データセット内で同様のシーケンスを発見することが可能なシステムを設計することが、技術的な問題である。ハッシュベースのアルゴリズムは設計および実装が比較的簡単であるが、同一のブロックをルックアップするために使用されるインデックスまたはハッシュテーブルが非常に大規模であるという、1つの重要な問題がある。ブロックサイズが8キロバイトであると仮定すると、1ペタバイトのデータセットのインデックスにおけるエントリ数は、128GBとなってしまう。エントリサイズが数バイトであると仮定すると、インデックスはおよそテラバイトのストレージを占有する可能性がある。こうした大規模インデックスをメモリ内に維持しておくことはできないため、ディスク上に常駐させる必要があり、ハードディスクのシーク待ち時間により各ルックアップが非常に遅くなる。着信データ速度が毎秒1ギガバイトであると仮定すると、128キロのルックアップが必要であり、こうしたシーク速度に対処できるのは非合理的なディスクベースシステムである。ストリームベースのソリューションは、かなり少ないキロバイト当たりのハッシュエントリを格納することによって、この問題を解決する。これにより、ハッシュテーブル全体をメモリ内に常駐させることが可能であり、ルックアップは格段に速くなり、性能を大幅に向上させ、データセットの規模を大幅に大きくすることができる。これらすべては、ハッシュベースのアルゴリズムに比べて、アルゴリズムの複雑さが増すことを犠牲にして生じるものである。上記では、テープデータストリームの形で重複排除システムに入るバックアップデータについて言及している。バックアップデータは他の形でシステムに入ることも可能であり、その中で最も顕著なものがネットワーク接続システムNASであるが、適用可能な任意のランダムアクセス書き込み方法を含むことも可能である。NAS構成では、ユーザのバックアップシステムはNASクライアントとして動作し、NFSまたはCIFSのいずれかのプロトコルを介して、ファイルの形でデータを書き込むように構成される。NASのシナリオは管理者が簡単に構成しやすいが、テープ仮想化のシナリオにはない別の問題が存在する。本質的に連続しているテープストリームとは異なり、NASデータストリームはランダムアクセスパターンを示す傾向がある。これはアプリケーション自体から生じる可能性があるが、たとえアプリケーションが完全に連続してデータを書き込む場合であっても、ほとんどのオペレーティングシステムの一部であるNASプロトコルクライアントは、このデータをバッファリングし、アクセスパターンにある程度のランダム性を導入した後、これをサーバに送信する傾向がある。このランダム性は意図的ではないが、連続性が考慮されない、主にブロックデバイス用に設計されたオペレーティングシステム内のファイルシステムコードの内部設計の副産物である。ハッシュベースの重複排除アルゴリズムのソリューションは、ハッシュベースの重複排除アルゴリズムがデータをブロックのセットとして見るため、比較的簡単な方法でランダムアクセスパターンに対処することが可能であるが、ストリームベースのアルゴリズムの場合、こうしたアプリケーションには問題が示される。本発明は、ストリームベースのアルゴリズムがこうしたワークロードに対処できるようにするため、すなわちNASシナリオにおいてストリームベースのアルゴリズムの性能特典を得るための扉を開くための方法を提案する。本発明は、以下のようなストリームベースシステムの特徴に基づく。第1に、各ストリームはデータバイトの連続したシーケンスを表すが、いくつかのストリームをメタファイルまたはディスクマップに集約することが可能であり、ここで連続バイトの各レンジはストリームとして表され、メタファイルは、各ストリームファイルがどのようにオリジナルファイルのイメージ内に収められるかの記録を維持する。第2に、ストリームベースのアルゴリズムは特定粒度のブロックを使用してそれらのインデックスを格納するため、本発明は、いかなるハッシュも再計算する必要なく、マージ境界とブロック境界との位置合わせが維持されている限り、異なるストリームを1つのストリームにマージする。本発明は、前述の特徴、バッファのプールまたはメモリバッファのプール、およびメモリ階層を使用する。メモリ階層は、RAM、フラッシュベースのデバイス、磁気ディスク、光ストレージ、様々なタイプのメモリ仮想を含む、通常のディスク、ストレージディスクを含むことができるが、これらに限定されず、さらに、典型的に当業者によって採用される、ソリッドステートドライブSSDまたは他のタイプのデバイスなどのストレージメディア、方法、またはプロセスなどを含むこともできる。一実施形態では、単なる例として、コンピュータ環境はデータの重複排除ストレージのために複数の書き込み動作を受信する。重複排除ストレージのために受信されるデータが連続または不連続の場合、オーバフローがメモリ階層へと一時的に格納されると共に、このデータは複数のバッファにバッファリングされる。データは、データ構造ごとに複数のバッファ内に蓄積および更新され、このデータ構造は複数のバッファと複数のユーザファイル位置との間の断片マップの役割を果たす。データは、必要なシーケンスサイズの完全なシーケンスを形成するために、複数のバッファ内で再構築される。データは、少なくとも1つのストリームとして、処理および格納のためにストリームベースの重複排除アルゴリズムに提供される。図1は、本発明の諸態様が実装可能な、例示的コンピューティング環境100を示す図である。アーキテクチャは、それぞれがバックアップサーバワークステーション101を含む管理サーバ103に、ストレージサービスを提供する。管理サーバ103は、バックアップの動作および秩序policeを管理する。バックアップサーバワークステーション101には、図内ではバックアップアプリケーションクライアント1102A、2102B、3102Cとして示された、バックアップされたいくつかのバックアップアプリケーションクライアント102が含まれる。いくつかのメディアサーバ104図内ではメディアサーバ104A、104B、および104Cとして示されるは、いずれもネットワーク108に接続される。重複排除データサブシステム106が、様々なメディアサーバ104とネットワーク108との間に提供される。重複排除データサブシステム106は、アーキテクチャのコンポーネント間にネットワーク間接続を提供するネットワーキングコンポーネントを介して、相互接続される。一実施形態では、ネットワーク108は、ワイドエリアネットワークWANを含むことができる。他の諸実施形態では、ネットワーク108は、ローカルエリアネットワークLAN、ストレージエリアネットワークSAN、および当業者に知られた他のネットワークトポロジを含むことができる。メディアサーバ104は、バックアップアプリケーションクライアントと重複排除ストレージサブシステム106との間でデータをチャネリングする。重複排除ストレージサブシステム106は、ネットワーク108を介してデータ書き込み動作を受信する。次に図2に進むと、前に図1でも見られたような、重複排除ストレージサブシステム106の例示的部分500が示されている。重複排除ストレージサブシステム106の部分500は、前述の諸実施形態のメカニズムが実装可能なコンピュータ環境内で、その一部として動作可能である。しかしながら、図2は単なる例であり、様々な諸実施形態の例示的諸態様が実装可能な特定のアーキテクチャに関して、いかなる制限をも提示または示唆することを意図するものではないことを理解されたい。以下の説明および記載された主題の範囲および趣旨から逸脱することなく、図2に示されたアーキテクチャに対する多くの修正が実行可能である。重複排除ストレージサブシステム106は、プロセッサ520、およびランダムアクセスメモリRAMなどのメモリ540を含む。重複排除ストレージサブシステム106は、グラフィカルユーザインターフェース上でウィンドウなどのイメージをユーザに提示するディスプレイ、キーボード、マウス、プリンタ、などを含む、便宜上図示されていないいくつかのコンポーネントに、動作可能に結合することができる。もちろん、当業者であれば、上記コンポーネントの任意の組み合わせ、または任意数の異なるコンポーネント、周辺装置、および他のデバイスが、重複排除ストレージサブシステム106と共に使用可能であることを理解されよう。例示された実施形態では、重複排除ストレージサブシステム106は、メモリ540に格納されたオペレーティングシステムOS560たとえばz/OSR、OS/2R、LINUXR、UNIXR、WINDOWSR、MACOSRの制御の下で動作し、入力およびコマンドを受け入れて結果を提示するためにユーザとインターフェースする。重複排除ストレージサブシステム106は、プロセッサ520によって読み取り可能なコードに変換される、COBOL、PL/1、C、C、JAVAR、ADA、BASIC、VISUALBASICR、または任意の他のプログラミング言語などのプログラミング言語で作成された、アプリケーションプログラム580を実装する。完了後、アプリケーションプログラム580がアクセスし、重複排除ストレージサブシステム106のメモリ540内に格納されたデータを操作することができる。さらに、本発明に従ってメカニズムおよびプロセスを実装および実行するために、OS560は、メモリ540、プロセッサ520、アプリケーションプログラム580、ならびに他のコンピュータ処理、ネットワーキング、およびストレージコンポーネントに関連して、データを格納するためにクライアントから新しい書き込み動作を受信するためのメモリバッファ640と、重複排除されたデータに関してストレージ内で支援するための断片マップ620と、断片マップ620と同様のディスクマップ675と、データのストリームを開始、圧縮、および格納するための動作を管理、支援、および実行するための圧縮モジュールと、クライアントから受信したそれぞれの書き込み動作を管理するためのコントロールモジュール650とを、実装することができる。重複排除ストレージサブシステム106によって処理された重複排除された文書は、図2および図4に示されたような本発明に従った形式で、メモリ540内に格納することができる。当業者であれば理解されるように、現在図示されているようなバッファ640のプール、ディスクマップ675、および断片マップ620のメカニズムは、様々な形およびアーキテクチャで実装可能である。したがってここでも、本図におけるバッファ640のプール、ディスクマップ675、および断片マップ620の例示は、重複排除ストレージサブシステム106内の可能なコンピューティングコンポーネント間の論理的関係を実証するものであること、および、特定の物理的構造または関係を示唆するものでないことが、意図されている。一実施形態では、オペレーティングシステム560、アプリケーションプログラム580、重複排除モジュール660、圧縮モジュール630、およびコントロールモジュール650、ならびに、バッファ640のプール、ディスクマップ675、および断片マップ620を実施する命令は、zipドライブ、ディスク、ハードドライブ、DVD/CD-ROM、デジタルテープ、SSDなどの、1つまたは複数の固定または取り外し可能のデータストレージデバイスを含むことが可能な、コンピュータ読み取り可能メディア内で有形に具体化される。さらに、オペレーティングシステム560およびアプリケーションプログラム580は、重複排除ストレージサブシステム106によって読み取りおよび実行された場合、重複排除ストレージサブシステム106が本発明の実装あるいは使用またはその両方に必要な諸ステップを実行できるようにする命令をたとえば実行可能部分内に備える。アプリケーションプログラム580あるいはオペレーティングシステム560またはその両方の命令は、メモリ540内に有形に具体化すること、あるいは、様々なコンポーネントたとえば図6のルータ320を介してネットワーク200を通じて送信またはこれによってアクセスすること、またはその両方も可能である。したがって、本明細書で使用される可能性のある製品、プログラムストレージデバイス、およびコンピュータプログラム製品という用語は、任意のコンピュータ読み取りデバイスまたはメディアからアクセス可能あるいは動作可能またはその両方の、コンピュータプログラムを包含するものと意図される。重複排除モジュール660は、ネットワーク接続ストレージNASシステムからのデータの重複排除ストレージのための複数の書き込み動作を受信する際の管理を支援する。このデータは、NASシステムを介して重複排除ストレージのために受信されるデータが順不同または不連続の場合、オーバフローがメモリ階層へと一時的に格納されると共に、複数のバッファ内にバッファリングされる。データは、データ構造ごとに複数のバッファ内に蓄積および更新され、このデータ構造は複数のバッファと複数のユーザファイル位置との間の断片マップの役割を果たす。データは、必要なシーケンスサイズの完全なシーケンスを形成するために、複数のバッファ内で再構築される。データは、少なくとも1つのストリームとして、処理および格納のためにストリームベースの重複排除アルゴリズムに提供される。さらに、重複排除モジュールは、複数の圧縮ストリームの管理および圧縮ストリームへのユーザファイル断片のマッピングを支援するために実装される。これにより、各ユーザファイルのデータが複数の圧縮ストリーム404図4内に常駐可能となる。さらに、圧縮ストリームは、断片に対する区画が圧縮ストリームのサイズに従うものではなく、非圧縮ストリームのサイズに従うものであることを意味する、非圧縮形式にあるものとすることができる。本発明の諸実施形態は、たとえば、ストレージエリアネットワークSANなどのコンピューティングデバイスのネットワークを備える分散型コンピュータシステムを管理するための機能を含む、1つまたは複数の関連付けられたソフトウェアアプリケーションプログラム580を含むことができる。したがってプロセッサ520は、1つまたは複数のストレージ管理プロセッサSMPを備えることができる。アプリケーションプログラム580は、単一のコンピュータあるいは重複排除ストレージサブシステム106またはその両方の内部で、またはコンピューティングデバイスのネットワークを備える分散型コンピュータシステムの一部として、動作可能である。ネットワークは、ローカルエリアネットワークあるいはインターネット接続公衆、または、仮想プライベートネットワークVPN接続を介したセキュアとすることができるまたはその両方を介して接続された、あるいは、ファイバチャネルSANまたは当業者であれば理解されるような他の知られたネットワークタイプを介して、1つまたは複数のコンピュータを包含することができる。ファイバチャネルSANは、通常は互いに通信するためではなくストレージシステムと通信するためにのみ、コンピュータに使用されることに留意されたい。ストレージ130図内で130A、130B、および130nとして示されたすべてのストレージコンポーネントを含むは、物理的に、ストレージアレイなどの1つまたは複数のストレージデバイスからなるものとすることができる。ストレージアレイは、ハードディスクなどの個々のストレージデバイスの論理グループ化である。ある実施形態では、ストレージ130はJBOD単純ディスク束/JustaBunchofDisksアレイまたはRAID独立ディスクの冗長アレイ/RedundantArrayofIndependentDisksアレイからなる。さらに物理ストレージアレイの集合は、物理ストレージを論理構成から分離する、ランクを形成するために組み合わせることができる。ランク内のストレージスペースは、書き込み/読み取り要求内に指定されるストレージ位置を画定する、論理ボリュームに割り振ることができる。図2に示されるように、論理ボリューム、または単にボリュームは、様々な種類の割り振りを有することができる。ストレージ130Aは、2つの全体ボリューム134および136と、部分ボリューム132Aとで構成されるように示されている。ストレージ130Bは、他の部分ボリューム132Bおよび全体ボリューム140と共に示されている。ストレージ130nは、ボリューム138に対して完全に割り振られたように示されている。前述の例から、ストレージ130は、1つまたは複数の部分あるいは全体またはその両方のボリュームを含むように構成可能であることを理解されよう。さらにボリュームは、ストレージの固定ブロックを表す、いわゆるトラックに分割可能である。したがってトラックは所与のボリュームに関連付けられる。図3は、メモリバッファ640を使用するNASインターフェースを介した重複排除ストレージサブシステム106、図1内の、メモリバッファに関連付けられた断片マップの例示的な図350を示す。例示的な図350は、断片マップ620によって表されるような、ユーザファイル302図3では302A、302B、および302Cとして示される間を関係付けたバッファ640のプールを含む。ユーザファイル302の断片に一部を、指定されたメモリバッファ640に関連付けることが可能である図3はバッファのプールを示す。これは、断片に関するデータがクライアントからまだ送信されていない場合に生じる可能性がある。コントロールモジュール650、図2は、それぞれの新しいアクティブなユーザファイルについて、ストリームベースの圧縮モジュール内で圧縮ストリーム404、図4が開始される、という規則に従って実装される。こうした各ストリームについて、現行の書き込みオフセットオフセットがメモリ540、図2内で保持および維持される。オフセットは、ストリーム404、図4に書き込まれたユーザファイル302内の最後のオフセットを表す。新しい書き込み動作がユーザから受信されると必ず、新しい書き込み動作に対してメモリバッファ640が割り振られ、メモリバッファ640内にデータが格納される。断片マップ620は、新しい関連を反映するように更新される。現行書き込みオフセットに隣接する断片の準備が整うと必ず、その断片は圧縮ストリーム404、図4に書き込まれ、それに応じて現行書き込みオフセットが前進する。これで書き込まれた断片のメモリバッファ640は、空き状態となることができる。図4に進むと、重複排除ストレージサブシステムの圧縮ストリームに関連付けられたディスクマップの例示的な図が示されている。この例示的な図400は、ディスクマップ402内にユーザファイル302が格納された状態のディスクマップ402に関連付けられた、圧縮ストリーム404を含む。一実施形態では、実装は、断片マップ620、図2と同様であり、ユーザファイル302図4では302A、302B、302Cと示されているの断片を圧縮ストリーム404図4では個々に、404A、404B、404C、404D、および404Eとして示されているにマッピングする、ディスクマップ675と呼ばれる、オンディスク構造を含むように機能強化することができる。これにより、各ユーザファイル302のデータが複数の圧縮ストリーム404に常駐可能となる。さらに、圧縮ストリームは、断片に対する区画が圧縮ストリームのサイズに従うものではなく、非圧縮ストリームのサイズに従うものであることを意味する、非圧縮形式にあるものとすることができる。圧縮ストリームは、開始、圧縮、および格納可能である。コントロールモジュール650、図2の実装は、本発明のコントロールモジュールの論理を機能強化する。前述の機能と同様に、それぞれの新しいアクティブなユーザファイルについて、少なくとも1つの圧縮ストリーム404、図4がストリームベースの圧縮モジュール内で開始される。こうしたそれぞれのストリームについて、現行の書き込みオフセットオフセットがメモリ540、図2内で保持および維持される。オフセットは、ストリーム404、図4内に書き込まれた、ユーザファイル302内の最後のオフセットを表す。新しい書き込み動作がユーザから受信されると必ず、新しい書き込み動作に対してメモリバッファ640が割り振られ、メモリバッファ640内にデータが格納される。断片マップ620、図3は、新しい関連を反映するように更新される。現行の書き込みオフセットに隣接する断片の準備が整うと必ず、断片は圧縮ストリーム404内に書き込まれ、それに応じて現行の書き込みオフセットが前進する。これで書き込まれた断片のメモリバッファ640は、空き状態となることができる。一実施形態では、単なる例として、メモリバッファ640が不足した場合、およびメモリ内で断片の十分大きなシーケンスが使用可能な場合、本発明は新しいストリーム404を開始し、断片のシーケンスをストリーム440に書き込む。ストリーム44に断片のシーケンスを書き込むことによって、メモリバッファ640は解放される。前述の十分大きなシーケンスとは、所定のしきい値よりも長い、書き込まれた断片のシーケンスとして定義される。効率を上げるために、このしきい値は、依然として使用可能なメモリバッファ640の数に依存するように決定することができる。いくつかの使用可能なメモリバッファ640が存在する場合、断片は非常に大きいものとすることが可能であり、メモリバッファ640が少なくなった場合、断片は小さくすることが可能である。上書きが発生した場合すなわちユーザが、オンディスクまたはメモリ内のいずれかで、すでに古いデータが存在するユーザファイル302内の領域に書き込んだ場合、新しいストリーム404は上書きのために開始され、ディスクマップは単に新しいデータを指示するように更新される。しかしながら、多くのストリーム全体にわたってユーザファイル302を断片化することが可能であり、古い、すなわち、他の圧縮ストリーム404内の他の場所に保持されている新しいデータによって上書きされたデータが、圧縮されたストリーム404内に存在する可能性がある。一実施形態では、これらの問題点は、各ユーザファイル302が閉じられた後に、ユーザプリファレンスによって決定された任意の期間、または複数のユーザファイルが休止状態であると判別された場合に実行する、断片化解除プロセスを含むことによって解決される。断片化解除動作は、可能な限り多くの各ユーザファイルの圧縮ストリーム404を、単一の圧縮ストリームに再配置構成し、上書きされた不要な部分を廃棄する。図5に進むと、本発明の実装のための例示的方法500を示す流れ図が示されている。方法500が開始されステップ501、クライアント/バックアップアプリケーションが書き込みコマンドを発行するステップ502。方法500は、不連続データを受信することステップ503を含み、メモリバッファ内にデータを格納する実装を開始するステップ504。方法500は、ストリームベースのアルゴリズム内で十分に連続して使用されるようにデータを順次再構築しステップ505、ストリームベースの圧縮モジュールを使用するストリームベースのアルゴリズムによって、連続データを渡すステップ506。次に方法500は、重複排除されたデータを格納してステップ508、終了するステップ510。図5は、図に示された流れ図の形で提示されているが、これらの機能ブロックのうちの任意数の実装がたとえばより複雑なフローの一部として、または他の順序などで企図されることに留意されたい。たとえば、ストリームベースのアルゴリズム内で十分に連続して使用されるようにデータを順次再構築するブロック505を実装し、別々に、より複雑なフローまたはプロセスで実行することができる。また、ストリームベースの圧縮モジュールを使用するストリームベースのアルゴリズムによって連続データを渡すことを記載したブロック506を、より複雑なプロセスで、図5に示した順序とは異なる順序で実行することができる。図6に進むと、重複排除ストレージサブシステムの実装のための例示的方法700を示す流れ図が提示されている。方法700が開始されステップ702、NASから書き込み動作を受信するステップ704。方法700は、NASプロトコルNFSまたはCIFSを介して書き込み動作要求を受信すると、書き込み動作要求に従って動作および実行し、複数のバッファ内にデータを格納して、断片マップを更新するステップ705。方法700は、書き込み動作要求が、既存のオープンストリームの最後に隣接するシーケンスを完了したかどうかを判別しステップ706、完了した場合は、既存のストリームにデータを書き込んで708、終了するステップ736。完了していない場合、方法700は、使用可能な空きバッファの数が、あるしきい値より少ないかどうかを判別するステップ716。しきい値は、ユーザ、使用可能な空きバッファの数、バッファの合計数、およびメモリ階層によって決定することができるが、これらに限定されるものではない。しきい値より少なくない場合、方法700は、メモリ内にある最大の完全なシーケンスを見つけることになり、新しいストリームを開始して、メモリにデータを書き込み、ディスクマップを更新し718、方法は終了するステップ736。しきい値より少ない場合、方法700は、検出された上書きすなわち、任意の以前の書き込み動作のファイルオフセットで上書きする書き込み動作が存在するかどうかをチェックするステップ728。上書きが存在する場合、追加のストリームが作成され、そのストリームを既存のストリームの上に重ねて、ディスクマップに記録しステップ730、方法700は終了するステップ736。上書きが存在しない場合、方法700は終了するステップ736。例示的一実施形態では、書き込み動作が、既存のストリームの論理的な最後に隣接するNASを介して受信された場合、第1に、書き込み動作データ要求が既存のストリームの最後に添付される場合があり、第2に、書き込み動作が完了した可能性のある任意の後続のシーケンスが添付される場合があるという、2つのイベントが発生する可能性があることに留意されたい。一時ストレージ領域は不要な可能性がある。一時ストレージ領域が実装、適合、または使用されない場合、ストリームベースのアルゴリズムに送信されるシーケンスは、より小さく、サイズが縮小されている可能性がある。特許請求の範囲、説明、および図面に示された、デバイス、システム、プログラム、および方法内の動作、手続き、ステップ、およびステージなどの、プロセスの実行順序は、前および先立ってなどの表現を使用して、特に明確には指定されていないことに留意されたい。したがって、それらのプロセスは、先行するプロセスからの出力が後続のプロセスで使用されない限り、任意の順序で実行可能である。たとえ、特許請求の範囲、説明、または図面内のいずれかの動作フローが、便宜上第1におよび続いてなどの表現を使用して記述されている場合であっても、これは必ずしも、動作フローがこれらの表現によって示された順序で実行されなければならないことを意味するものではない。当業者であれば理解されるように、本発明の諸態様は、システム、方法、またはコンピュータプログラム製品として具体化することができる。したがって本発明の諸態様は、完全なハードウェア実施形態、完全なソフトウェア実施形態ファームウェア、常駐ソフトウェア、マイクロコードなどを含む、または、本明細書ではすべて全体として回路、モジュール、またはシステムと呼ばれる場合のあるソフトウェアとハードウェアの諸態様を組み合わせた実施形態の形を取ることができる。さらに本発明の諸態様は、その上にコンピュータ読み取り可能プログラムコードが具体化された1つまたは複数のコンピュータ読み取り可能メディア内に具体化された、コンピュータプログラム製品の形を取ることができる。1つまたは複数のコンピュータ読み取り可能メディアの任意の組み合わせが使用可能である。コンピュータ読み取り可能メディアは、コンピュータ読み取り可能信号メディアまたはコンピュータ読み取り可能ストレージメディアとすることができる。コンピュータ読み取り可能ストレージメディアは、たとえば、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、またはデバイス、あるいはそれらの任意の好適な組み合わせとすることができるが、これらに限定されるものではない。コンピュータ読み取り可能ストレージメディアのより特定の例非網羅的リストは、1本または複数本のワイヤを有する電気的接続、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリRAM、読み取り専用メモリROM、消去可能プログラマブル読み取り専用メモリEPROMまたはFlashRメモリ、光ファイバ、ポータブルコンパクトディスク読み取り専用メモリCD-ROM、光ストレージデバイス、磁気ストレージデバイス、またはそれらの任意の好適な組み合わせを含む。本明細書との関連において、コンピュータ読み取り可能ストレージメディアは、命令実行のシステム、装置、またはデバイスによって、またはそれらに関連して使用するためのプログラムを、含むかまたは格納することが可能な、任意の有形メディアとすることができる。コンピュータ読み取り可能メディア上に具体化されたプログラムコードは、無線、有線、光ファイバケーブル、RFなど、またはそれらの任意の好適な組み合わせを含むがこれらに限定されない、任意の適切なメディアを使用して伝送可能である。本発明の諸態様に関する諸動作を実行するためのコンピュータプログラムコードは、JavaR、SmalltalkR、Cなどのオブジェクト指向プログラミング言語、および、Cプログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組み合わせで作成可能である。プログラムコードは、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロン型ソフトウェアパッケージとして、部分的にユーザのコンピュータ上および部分的にリモートコンピュータ上で、あるいは、完全にリモートコンピュータまたはサーバ上で、実行可能である。後者のシナリオでは、リモートコンピュータを、ローカルエリアネットワークLANまたはワイドエリアネットワークWANを含む、任意のタイプのネットワークを介して、ユーザのコンピュータに接続可能であるか、あるいは、たとえば、インターネットサービスプロバイダを使用してインターネットを介して外部コンピュータへの接続が実行可能である。以上、本発明の諸態様について、本発明の諸実施形態に従った方法、装置システム、およびコンピュータプログラム製品の流れ図あるいはブロック図またはその両方を参照しながら説明した。流れ図あるいはブロック図またはその両方の各ブロック、および流れ図あるいはブロック図またはその両方内のブロックの組み合わせは、コンピュータプログラム命令によって実装可能であることを理解されよう。これらのコンピュータプログラム命令は、マシンを製造するために、汎用コンピュータ、特定用途向けコンピュータ、または他のプログラム可能データ処理装置へと提供可能であるため、結果として、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行する命令が、流れ図あるいはブロック図またはその両方の1つまたは複数のブロック内に指定された機能/動作を実施するための手段を作成することになる。コンピュータ読み取り可能メディア内に格納された命令が、流れ図あるいはブロック図またはその両方の1つまたは複数のブロック内に指定された機能/動作を実施する命令を含む製品を製造するように、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対して、特定の様式で機能するように命令可能な、これらのコンピュータプログラム命令を、コンピュータ読み取り可能メディア内に格納することも可能である。コンピュータプログラム命令は、コンピュータまたは他のプログラム可能装置上で実行する命令が、流れ図あるいはブロック図またはその両方の1つまたは複数のブロック内に指定された機能/動作を実施するためのプロセスを提供するように、コンピュータ、他のプログラム可能装置、または他のデバイス上でコンピュータ実装プロセスを生成するように一連の動作ステップを実行させるために、コンピュータ、他のプログラム可能データ処理装置、または他のデバイス上にロードすることも可能である。上記図面内の流れ図およびブロック図は、本発明の様々な諸態様に従ったシステム、方法、およびコンピュータプログラム製品の、可能な実装のアーキテクチャ、機能、および動作を示す。この点に関して、流れ図またはブロック図内の各ブロックは、指定された論理機能を実施するための1つまたは複数の実行可能命令を備える、モジュール、セグメント、またはコードの一部を表すことができる。一部の代替実装では、ブロック内に示された機能が、図面内に示された順序以外で発生する可能性があることにも留意されたい。たとえば、連続して示された2つのブロックは、実際にはほぼ同時に実行可能であるか、または、ブロックは関連する機能に依存して逆の順序で実行可能である。ブロック図あるいは流れ図またはその両方の各ブロック、および、ブロック図あるいは流れ図またはその両方内のブロックの組み合わせは、指定された機能または動作を実行する特定用途向けハードウェアベースシステム、あるいは特定用途向けハードウェアとコンピュータ命令との組み合わせによって、実装可能であることにも留意されよう。以上、本発明の1つまたは複数の実施形態について詳細に説明してきたが、当業者であれば、これらの諸実施形態に対する修正および適合が、以下の特許請求の範囲に示された本発明の範囲を逸脱することなく実行可能であることを理解されよう。