(57)【特許請求の範囲】
【請求項１】
コンピューティング環境で、プロセッサ・デバイスを用いるデータ重複排除システムにおける効率的な重複排除処理のため、類似性探索に基づいてダイジェストを検索する方法であって、
データ重複排除システムが、
入力データをデータ・チャンクに区分化するステップと、
前記データ・チャンクの各々に対し、類似性要素およびダイジェスト値を計算するステップと、
類似性要素を包含する探索構造体中で、整合する類似性要素を探索するステップと、
データのリポジトリ中の類似するデータの位置を見出すステップと、
前記類似するデータの前記位置を用いて、前記リポジトリ中の前記類似するデータの格納されたダイジェスト値を探し出し、メモリ中にロードするステップと、
データの整合を調べるために、前記入力データの前記ダイジェスト値と、前記メモリ中にロードされた前記格納されたダイジェスト値とを照合するステップと、
を実行することを含む方法。
【請求項２】
前記入力データを固定サイズのデータ・チャンクに区分化するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記データ・チャンクの各々に対し、ローリング・ハッシュ値を計算するステップをさらに含み、ローリング・ハッシュ値はバイト・オフセット中のバイト群の各連続ウィンドウに対して生成される、請求項１に記載の方法。
【請求項４】
前記類似性要素として、特定のローリング・ハッシュ値と前記特定のローリング・ハッシュ値の関連位置とを選択するステップをさらに含む、請求項３に記載の方法。
【請求項５】
前記ローリング・ハッシュ値に基づいてダイジェスト・ブロック境界を計算するステップ、および前記ダイジェスト・ブロックに対応するダイジェスト値を計算するステップをさらに含む、請求項３に記載の方法。
【請求項６】
データの前記リポジトリ中に格納されたデータ・チャンクの前記類似性要素を包含するための前記探索構造体を決めるステップをさらに含む、請求項１に記載の方法。
【請求項７】
前記ダイジェストを、前記データ中のそれらの出現に対応する形で前記リポジトリ中に格納するステップをさらに含む、請求項１に記載の方法。
【請求項８】
データの特定区間の前記リポジトリ中の位置およびサイズに基づいて、前記リポジトリ中で、データの前記特定区間に対応するダイジェストを探し出すステップをさらに含む、請求項７に記載の方法。
【請求項９】
入力ダイジェスト値と、前記メモリ中にロードされた格納されたダイジェスト値とが一致する場合に、データの同一性を記録するステップをさらに含み、前記データの同一性は、前記整合する入力ダイジェストと格納されたダイジェストとによってそれぞれカバーされた、前記入力データおよびリポジトリ・データの中の前記データを含む、請求項１に記載の方法。
【請求項１０】
コンピューティング環境のデータ重複排除システムにおける効率的な重複排除処理のため、類似性探索に基づいてダイジェストを検索するためのシステムであって、前記システムは、
前記データ重複排除システムと、
前記データ重複排除システム中で作動するリポジトリと、
前記データ重複排除システム中のメモリと、
前記データ重複排除システム中の前記メモリに関連付けられた探索構造体と、
前記データ重複排除システムを制御するための、前記コンピューティング・ストレージ環境中で動作可能な少なくとも一つのプロセッサ・デバイスと、
を含み、前記少なくとも一つのプロセッサ・デバイスは、
入力データをデータ・チャンクに区分化し、
前記データ・チャンクの各々に対し、類似性要素およびダイジェスト値を計算し、
類似性要素を包含する前記探索構造体中で、整合する類似性要素を探索し、
データのリポジトリ中の類似するデータの位置を見出し、
前記類似するデータの前記位置を用いて、前記リポジトリ中の前記類似するデータの格納されたダイジェスト値を探し出し、前記メモリ中にロードし、
データの整合を調べるために、前記入力データの前記ダイジェスト値と、前記メモリ中にロードされた前記格納されたダイジェスト値とを照合する、
システム。
【請求項１１】
前記少なくとも一つのプロセッサ・デバイスが、前記入力データを固定サイズのデータ・チャンクに区分化する、請求項１０に記載のシステム。
【請求項１２】
前記少なくとも一つのプロセッサ・デバイスが、前記データ・チャンクの各々に対し、ローリング・ハッシュ値を計算し、ローリング・ハッシュ値はバイト・オフセット中のバイト群の各連続ウィンドウに対して生成される、請求項１０に記載のシステム。
【請求項１３】
前記少なくとも一つのプロセッサ・デバイスが、前記類似性要素として、特定のローリング・ハッシュ値と前記特定のローリング・ハッシュ値の関連位置とを選択する、請求項１２に記載のシステム。
【請求項１４】
前記少なくとも一つのプロセッサ・デバイスが、前記ローリング・ハッシュ値に基づいてダイジェスト・ブロック境界を計算し、前記ダイジェスト・ブロックに対応するダイジェスト値を計算する、請求項１２に記載のシステム。
【請求項１５】
前記探索構造体が、データの前記リポジトリ中に格納されたデータ・チャンクの前記類似性要素を包含する、請求項１０に記載のシステム。
【請求項１６】
前記少なくとも一つのプロセッサ・デバイスが、前記ダイジェストを、前記データ中のそれらの出現に対応する形で前記リポジトリ中に格納する、請求項１０に記載のシステム。
【請求項１７】
前記少なくとも一つのプロセッサ・デバイスが、データの特定区間の前記リポジトリ中の位置およびサイズに基づいて、前記リポジトリ中で、データの前記特定区間に対応するダイジェストを探し出す、請求項１６に記載のシステム。
【請求項１８】
入力ダイジェスト値と、前記メモリ中にロードされた格納されたダイジェスト値とが一致する場合に、前記少なくとも一つのプロセッサ・デバイスがデータの同一性を記録し、前記データの同一性は、前記整合する入力ダイジェストと格納されたダイジェストとによってそれぞれカバーされた、前記入力データおよびリポジトリ・データの中の前記データを含む、請求項１０に記載のシステム。
【請求項１９】
コンピューティング環境で、プロセッサ・デバイスを用いるデータ重複排除システムにおける効率的な重複排除処理のため、類似性探索に基づいてダイジェストを検索するためのコンピュータ・プログラムであって、
入力データをデータ・チャンクに区分化する第一実行可能部分と、
前記データ・チャンクの各々に対し、類似性要素およびダイジェスト値を計算する第二実行可能部分と、
類似性要素を包含する探索構造体中で、整合する類似性要素を探索する第三実行可能部分と、
データのリポジトリ中の類似するデータの位置を見出す第四実行可能部分と、
前記類似するデータの前記位置を用いて、前記リポジトリ中の前記類似するデータの格納されたダイジェスト値を探し出し、前記メモリ中にロードする第五実行可能部分と、
データの整合を調べるために、前記入力データの前記ダイジェスト値と、前記メモリ中にロードされた前記格[されたダイジェスト値とを照合する第六実行可能部分と、
を含む、コンピュータ・プログラム。
【請求項２０】
前記入力データを固定サイズのデータ・チャンクに区分化する第七実行可能部分をさらに含む、請求項１９に記載のコンピュータ・プログラム。
【請求項２１】
前記データ・チャンクの各々に対し、ローリング・ハッシュ値を計算する第七実行可能部分をさらに含み、ローリング・ハッシュ値はバイト・オフセット中のバイト群の各連続ウィンドウに対して生成される、請求項１９に記載のコンピュータ・プログラム。
【請求項２２】
前記類似性要素として、特定のローリング・ハッシュ値と前記特定のローリング・ハッシュ値の関連位置とを選択する第八実行可能部分をさらに含む、請求項２１に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にコンピュータに関し、さらに具体的には、コンピューティング環境で、データ重複排除システムによって重複排除処理を行う際のダイジェストの効率的な検索のための類似性探索の活用に関する。
【背景技術】
【０００２】
現今の社会では、コンピュータ・システムは当たり前のものとなっている。コンピュータ・システムは、職場、家庭、または学校で見ることができる。コンピュータ・システムには、データを処理し格納するためのデータ・ストレージ・システムまたはディスク・ストレージ・システムを含めることができる。日ごとに大量のデータを処理する必要があり、現今の傾向を見ると、このようなデータの量は、予見可能な近い将来において益々増え続けると思われる。この問題を軽減する効率的な方法の一つは、重複排除を用いることである。重複排除システムに基礎となる考え方は、使われているデータの大部分は何度も繰り返してコピーされているという事実を利用し、繰り返されているデータを探し出し、その最初の出現だけを格納することである。後続するコピーは、格納済みの出現へのポインタで置き換えられ、データが実際に反復的なものであれば、これによりストレージの必要量は大幅に削減される。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
コンピューティング環境で、プロセッサ・デバイスを用いるデータ重複排除システムによって重複排除処理を行う際の類似性探索に基づくダイジェスト検索のための様々なソリューションを提供する。
【課題を解決するための手段】
【０００４】
一実施形態において、コンピューティング環境で、プロセッサ・デバイスを用いるデータ重複排除システムによって重複排除処理を行う際の類似性探索に基づくダイジェスト検索のための方法が提供される。一実施形態において、単なる例示であるが、入力データは固定サイズのデータ・チャンクに区分化される。この固定サイズのデータ・チャンクの各々に対し、類似性要素、ダイジェスト・ブロック境界、およびダイジェスト値が計算される。リポジトリ中の固定サイズのデータ・チャンクの各々に対し、類似性要素を包含する探索構造体（すなわちインデックス）の中で整合する類似性要素が探索される。見出された整合する類似性要素に基づいて、リポジトリ中の類似するデータの位置が探し出される。この類似するデータの位置を用いて、リポジトリ中の類似するデータの格納されたダイジェスト値および対応する格納されたダイジェスト・ブロック境界が探し出され、メモリ中にロードされる。データの整合を調べるために、入力データのダイジェスト値および対応するダイジェスト・ブロック境界と、格納されたダイジェスト値および対応する格納されたダイジェスト・ブロック境界とが照合される。
【０００５】
別の実施形態において、コンピューティング環境で、プロセッサ・デバイスを用いるデータ重複排除システムによって重複排除処理を行う際の類似性探索に基づくダイジェスト検索のためのコンピュータ・システムが提供される。本コンピュータ・システムは、コンピュータ可読媒体、およびコンピュータ可読媒体と動作可能に通信しているプロセッサを含む。一実施形態において、単なる例示であるが、プロセッサが入力データを固定サイズのデータ・チャンクに区分化する。この固定サイズのデータ・チャンクの各々に対し、類似性要素、ダイジェスト・ブロック境界、およびダイジェスト値が計算される。リポジトリ中の固定サイズのデータ・チャンクの各々に対し、類似性要素を包含する探索構造体（すなわちインデックス）の中で整合する類似性要素が探索される。リポジトリ中の類似するデータの位置が探し出される。この類似するデータの位置を用いて、リポジトリ中の類似するデータの格納されたダイジェスト値および対応する格納されたダイジェスト・ブロックの境界が探し出され、メモリ中にロードされる。データの整合を調べるために、入力データのダイジェスト値および対応するダイジェスト・ブロック境界と、格納されたダイジェスト値および対応する格納されたダイジェスト・ブロック境界とが照合される。
【０００６】
さらなる実施形態において、コンピューティング環境内で、プロセッサ・デバイスを用いるデータ重複排除システムによって重複排除処理を行う際の類似性探索に基づくダイジェスト検索のためのコンピュータ・プログラム製品が提供される。コンピュータ可読ストレージ媒体は、該媒体上に格納されたコンピュータ可読プログラム・コード部分を有する。コンピュータ可読プログラム・コード部分は、入力データを固定サイズのデータ・チャンクに区分化する第一実行可能部分を含む。この固定サイズのデータ・チャンクの各々に対し、類似性要素、ダイジェスト・ブロック境界、およびダイジェスト値が計算される。リポジトリ中の固定サイズのデータ・チャンクの各々に対し、類似性要素を包含する探索構造体（すなわちインデックス）の中で整合する類似性要素が探索される。リポジトリ中の類似するデータの位置が探し出される。この類似するデータの位置を用いて、リポジトリ中の類似するデータの格納されたダイジェスト値および対応する格納されたダイジェスト・ブロックの境界が探し出され、メモリ中にロードされる。データの整合を調べるために、入力データのダイジェスト値および対応するダイジェスト・ブロック境界と、格納されたダイジェスト値および対応する格納されたダイジェスト・ブロック境界とが照合される。
【０００７】
前述の例示的な方法実施形態に加え、他の例示的なシステムおよびコンピュータ製品の実施形態が提供され、関連する利点を提供する。前述の概要は、単純化された形で選択された概念を紹介するために提示されたものであって、後記の発明を実施するための形態でこれらをさらに詳しく説明する。この発明の概要は、請求対象の主題となる主要特徴または本質的特徴を明確化することを意図するものではなく、請求対象の主題の範囲を定めるための助力として用いることを意図するものでもない。請求対象の主題は、背景技術で述べた不利点の一部または全てを解決するための実装には限定されない。
【０００８】
本発明の利点が容易に理解できるようにするため、添付の図面に示される特定の実施形態を参照しながら、上記で簡単に説明した本発明のさらに具体的な説明を提供する。これらの図面は、本発明の諸実施形態を表すものであり、したがって本発明の範囲を限定するものと見なすべきでないことを理解した上で、添付の図面を用い、さらなる具体性および詳細をもって本発明を表し説明することとする。
【図面の簡単な説明】
【０００９】
【図１】本発明の態様が実現可能な、例示的なストレージ・デバイスを有するコンピューティング・システム環境を示すブロック図である。
【図２】本発明の態様が実現可能な、コンピュータ・システム中のデータ・ストレージ・システムのハードウェア構造体を示すブロック図である。
【図３】本発明の態様が実現可能な、データ重複排除システムによって重複排除処理を行う際の類似性探索に基づくダイジェスト検索のための例示的な方法を示すフローチャートである。
【図４】本発明の態様が実現可能な、データ重複排除システムによって重複排除処理を行う際の類似性探索に基づくダイジェスト検索のための例示的な別の方法を示すフローチャートである。
【図５】本発明の態様が実現可能な、データ重複排除システムにおける、ローリング・ハッシュ値の単一線形計算を用いる、類似性探索値とダイジェスト・ブロックの境界との両方の効率的な計算のための例示的な方法を示すフローチャートである。
【発明を実施するための形態】
【００１０】
データ重複排除は、コンピューティング・ストレージ・システムにおいて非常に重要で躍動する分野である。データ重複排除とは、冗長なデータの低減もしくは排除またはその両方を言う。データ重複排除において、データ・オブジェクトは、ファイル、データ・ストリーム、または他の形のデータであってよく、このオブジェクトは、チャンクまたはブロックと呼ばれる一つ以上の部分に分割される。データ重複排除処理において、データの重複コピーは低減、または排除され、それぞれ、データの最小数の冗長コピー、または単一のコピーを残す。データ重複排除システムの目的は、重複したデータに対し単一のコピーを格納することであり、この目的を達成する上での課題は、通常大きなリポジトリの中の重複したデータ・パターンを効率的に見出し、それらのデータ・パターンをストレージに効率的な重複排除された形で格納することである。重複排除ストレージ・システムにおいて重要な課題は、データの巨大容量のリポジトリに対応するためのスケーリングである。かかる大容量リポジトリは、ペタバイト（１ペタバイト＝２５０バイト）以上のサイズに達することがある。かかるリポジトリのサイズに対応する重複排除ストレージ・システムは、リポジトリ内の重複データ・パターンを見出すための効率的な処理を備えなければならず、その効率は、重複排除を達成するためのリソース消費量で測定される（リソースは、ＣＰＵサイクル、ＲＡＭストレージ量、固定ストレージ量、ネットワーク利用などとすればよい）。一実施形態において、重複排除ストレージ・システムは、フィンガープリントまたはダイジェストとして知られる、探索に最適化された値のインデックスを維持することに基づくことができ、このシステムでは、（小さな）フィンガープリントがリポジトリ中の（より大きな）データのブロックを代表する。このフィンガープリント値は、当該ブロックのデータに基づいて計算された暗号ハッシュ値とすることが可能できる。一実施形態において、例えば、ＳＨＡ−１またはＳＨＡ−２５６など、暗号ハッシュ関数のファミリであるセキュア・ハッシュ・アルゴリズム（ＳＨＡ：ｓｅｃｕｒｅ  ｈａｓｈ  ａｌｇｏｒｉｔｈｍ）を用いることが可能である。インデックス・ルックアップを用い、フィンガープリントの整合を識別することで、リポジトリ中に既存のデータへの参照を格納することが可能になる。
【００１１】
このアプローチにおいて合理的な重複排除を提供するために、フィンガープリントが生成される基となるデータ・ブロックの平均サイズは、より小さなサイズに制限しなければならず大き過ぎてはいけない。その理由は、データ・ブロック中の一つのビットの変化が、当該データ・ブロックの対応するフィンガープリントを確率的に変化させることになるからであり、しかして、大きなデータ・ブロックを持つことは、小さなブロックを持つことに比べて、データの更新に対するスキームの感受性をより大きくすることによる。典型的なデータ・ブロック・サイズは、アプリケーションの種類と作業負荷の如何により、４ＫＢ〜６４ＫＢの範囲とすることができよう。しかして、単なる例示であるが、小型データ・ブロックは、最大６４ＫＢまでの範囲のサイズとし、６４ＫＢより大きなサイズを有するデータ・ブロックは大型データ・ブロックとすることができよう。
【００１２】
ペタバイトのスケールに及ぶ巨大なリポジトリ（例えば、少なくとも１ペタバイトのスケールに及ぶリポジトリ）に対応するためには、フィンガープリントのサイズ（１６バイトから６４バイトの間に亘る）と相まって格納されるフィンガープリントの数は法外なものとなる。例えば、４ＫＢの平均ブロック・サイズ、および（例えば、ＳＨＡ−２５６の）３２バイトのフィンガープリント・サイズを有する１ペタバイトの重複排除データに対して、これらのフィンガープリントを格納するのに必要なストレージ量は８テラバイトとなる。かかる量のフィンガープリントに対する探索に最適化されたデータ構造体を維持するのは困難であり、最適化の技法が必要となる。しかしながら、既存の最適化技法では、パフォーマンスを維持しながら、このようなサイズにはスケール設定されない。この理由により、合理的なパフォーマンスを提供するためには、サポートされているリポジトリを比較的に（数十ＴＢのオーダーに）小さくしなければならない。かかるより小さなサイズにあってさえも、フィンガープリント・インデックスのスケールの大きさに起因して、相当な問題およびランタイム・コストが発生し、重複排除処理にボトル・ネックを生じさせる。
【００１３】
この問題を解決するために、一実施形態において、重複排除システムは、重複排除の過程におけるデータ・パターン探索に対する２ステップのアプローチに基づくものとすることができる。第一ステップでは、入来データの大きなチャンク（例えば、数メガバイト）が、リポジトリ内で、既存データの（一致よりはむしろ）類似のデータ・チャンクについて探索され、入来データ・チャンクは、適宜に区間に区分化され、対応する（類似の）リポジトリの区間とペアにされる。第二ステップでは、バイト単位の照合アルゴリズムが類似の区間のペアに適用され、データのリポジトリ中に既に格納されていた方の一致するサブ区間が識別される。第二ステップの照合アルゴリズムは、バイト単位で入力データと比較するために、リポジトリ中の全ての関連する類似するデータを読み取ることに頼る。
【００１４】
さらに、第二ステップの照合アルゴリズムの基礎となる、バイト単位のデータの比較から生じる問題は、入来データとおおむね同じサイズおよびレートのデータを、比較のためにリポジトリから読み取る必要があることである。例えば、秒あたり１ＧＢの入来データを処理するシステムは、バイト単位での比較のため、リポジトリから秒あたり約１ＧＢのデータを読み取る必要がある。これは、リポジトリ・データを格納するストレージ・デバイスの相当に高い秒あたりのＩ／Ｏ容量を必要とし、このためこれらデバイスのコストが増大する。
【００１５】
上記の問題に重なる情報技術のさらなる傾向は次の通りである。すなわち、（１）ＣＰＵ速度およびＣＰＵコアの数の増大によるコンピューティング能力の向上。（２）ディスク密度が増大する一方、ディスクのスループットは比較的一定なままか、またはわずかに向上。これは、データ容量に対してより少ないスピンドル、しかして全体的なスループットの実際上の低減を意味する。上記で指摘した問題によって、前述した２ステップの重複排除システム実施形態中に組み込むための、リポジトリからの高速／高容量の読み取りを必要としない別のソリューションを設計することが必要となる。
【００１６】
上記のため、単なる例示であるが、さらなる実施形態によりこれらの問題に対処し、同時に前述の傾向による利点を受けて、リソース消費をディスクからＣＰＵにシフトする。本明細書で説明する諸実施形態は、前述の２ステップでスケーラブルな、重複排除過程でダイジェストのルックアップを絞るために類似性探索を用いる、重複排除の実施形態に集約される。一実施形態において、入力データに整合する可能性が最も高いリポジトリ・データのダイジェストに対して、類似性探索を絞るためのベースとして、全域的な類似性探索が用いられる。
【００１７】
本明細書で説明する諸実施形態は、コンピューティング能力およびディスク密度の増大の益を得て、根柢のディスクに要求される秒あたりのＩ／Ｏの容量を大きく低減し、処理のコスト、並びに保全コストおよび環境オーバーヘッド（例えば、電力消費）を大幅に低減する。
【００１８】
一実施形態において、入力データは、小さなセグメント（例えば４ＫＢ）に区分けされ、かかる各セグメントに対しダイジェスト（例えばＳＨＡ１などの暗号ハッシュ値）が計算される。最初に、前述のように、類似性探索アルゴリズムが、データの入力チャンク（例えば１６ＭＢ）に適用され、リポジトリ中の最も類似した参照データの位置が探し出され見出される。次いで、これらの位置を使って、該類似参照データのダイジェストがルックアップされる。リポジトリに包含される全てのデータのダイジェストは、データ中でのそれらの出現に対応する形で格納され読み出される。リポジトリ中に包含されたデータの或るセクションの位置が所与であれば、データのそのセクションに関連付けられたダイジェストはリポジトリ中で効率的に探し出され読み出される。次に、これらの参照ダイジェストは、メモリにロードされ、整合を見出すためデータを比較する代わりに、入力ダイジェストとロードされた参照ダイジェストとが照合される。
【００１９】
前述の実施形態は、データ重複排除システムを設計するための新しい基本的アプローチを提供し、このシステムは、（バイト単位のデータ比較の代わりに）効率的且つコスト効果的なダイジェスト／フィンガープリント・ベースの照合アルゴリズムを用いる、類似性探索とそれに続く同一に整合するセグメントの探索とのスケーラブルな２ステップのアプローチを組み込む。ダイジェスト／フィンガープリント・ベースの照合アルゴリズムは、バイト単位データ比較が必要とするデータの量のわずかな一部（１％）だけの読み取りを可能にする。本明細書で提案される本発明の重複排除システムは、高い効率およびパフォーマンスと処理およびハードウェアの低減されたコストに加え、巨大なデータ・リポジトリに対する高いスケーラビリティを提供することができる。
【００２０】
一実施形態において、単なる例示であるが、用語「類似するデータ」は、次のように表現できる：任意の所与の入力データに対し、入力データに類似するデータとは、入力データとほとんど同じ（すなわち、全くではないが少なくとも５０％が同様）データとして定義されるものである。バイナリの観点（見方）からデータを見れば、これは、類似するデータとは、そのバイトのほとんど（すなわち、全くではないが少なくとも５０％が同様）が入力データと同じである、データであることを意味する。
【００２１】
一実施形態において、単なる例示であるが、用語「類似性探索」は、データのリポジトリ中の、入力データに類似したデータに対する探索のプロセスということができる。一実施形態において、このプロセスは類似性要素の探索構造体を用いて実施することができ、該構造体は維持されその中を探索される。
【００２２】
一実施形態において、単なる例示であるが、用語「類似性要素」は、データに基づいて計算することが可能で、データのリポジトリ中の、入力データに類似するデータに対する全域的な探索を容易にする。一般に、一つ以上の類似性要素が計算され、データの大きな（例えば、少なくとも１６ＭＢ）のチャンクを代表する。
【００２３】
しかして、本明細書で説明する様々な実施形態は、コンピューティング環境で、プロセッサ・デバイスを用いるデータ重複排除システムによって重複排除処理を行う際の類似性探索に基づくダイジェスト検索のための様々なソリューションを提供する。一実施形態において、単なる例示であるが、入力データは、固定サイズのデータ・チャンクに区分化される。この固定サイズのデータ・チャンクの各々に対し、類似性要素、ダイジェスト・ブロック境界、およびダイジェスト値が計算される。データのリポジトリ中の固定サイズのデータ・チャンクの各々に対し、類似性要素を包含する探索構造体（すなわちインデックス）の中で整合する類似性要素が探索される。リポジトリ中の類似するデータの位置が探し出される。この類似するデータの位置を用いて、リポジトリ中の類似するデータの格納されたダイジェスト値および対応する格納されたダイジェスト・ブロック境界が探し出され、メモリ中にロードされる。なお、一実施形態において、これらの位置は、物理的または論理的（すなわち、仮想的）位置のいずれであってもよい。これらの位置は、データのリポジトリの内部のデータの位置である。「位置」の重要な特性は、リポジトリのデータ中の位置（物理的または論理的）が所与であれば、その位置におけるデータは効率的に探し出すことができ、アクセスできるということである。データの整合を調べるために、入力データのダイジェスト値および対応するダイジェスト・ブロック境界と、格納されたダイジェスト値および対応する格納されたダイジェスト・ブロック境界とが照合される。
【００２４】
一実施形態において、本発明は、効率的な重複排除処理のため、関連するダイジェストをリポジトリからメモリ中にロードする類似性探索を利用するソリューションを提供する。或るデータ重複排除システムにおいて、重複排除は、データを大きな固定サイズのチャンクに区分化し、各チャンクに対し、類似性探索およびダイジェスト値に対する（２つの事項−類似性要素およびダイジェスト・ブロック／ダイジェスト値の）ハッシュ値（ダイジェスト・ブロック／ダイジェスト値）を計算することによって実施される。このデータ重複排除システムは、類似性値の探索構造体中でチャンクに整合する類似性値を探索し、リポジトリ中の類似するデータの位置を見出す。データ重複排除システムは、類似するデータのこれらの位置を用いて、類似のリポジトリ・データの格納されたダイジェストを探し出し、メモリにロードして、データの整合を調べるために、入力ダイジェスト値とリポジトリのダイジェスト値とを照合する。
【００２５】
一実施形態において、本発明は、ローリング・ハッシュ値の単一線形計算を用いる、類似性探索値およびダイジェスト・ブロックの区分け（すなわち境界）両方の効率的な計算を提供する。或るデータ重複排除システムにおいて、入力データは、チャンクに区分化され、各チャンクに対し、一組のローリング・ハッシュ値が計算される。ローリング・ハッシュ値の単一線形スキャンは、チャンクの類似性探索値およびダイジェスト・ブロックの境界の両方を生成する。各ローリング・ハッシュ値は、バイト・オフセット中のバイト群の連続ウィンドウに対応する。類似性探索値を用いて、リポジトリ中の類似するデータが探索される。ダイジェストの照合のため、ダイジェスト・ブロック区分けを使って、チャンクのダイジェスト・ブロック境界、および対応するダイジェスト値が計算される。各ローリング・ハッシュ値は、類似性値の計算およびダイジェスト・ブロック区分けの計算に寄与する。各ローリング・ハッシュ値は、これらの計算に寄与した後廃棄すればよい。前述の実施形態は、大きな処理効率の向上およびＣＰＵ消費の低減と、大幅なパフォーマンス改善とを提供する。
【００２６】
しかして、前述のように、本発明の重複排除アプローチは、重複排除の過程でデータ・パターンを探索するため２ステップのプロセスを用いる。第一ステップでは、入来データの大きなチャンク（例えば、２メガバイト（ＭＢ））が、リポジトリ内で、既存データの（一致よりはむしろ）類似するチャンクについて探索され、入来チャンクは、区間に適宜に区分化され、対応する（類似の）リポジトリの区間とペアにされる。第一ステップで用いられる類似性インデックスは、類似性探索に使われる要素がそれらの代表するデータに対して非常にコンパクトなので（例えば、１６バイトで４メガバイトを代表する）、コンパクトで維持および内部探索するのが簡単である。類似性要素の計算に加えて、第一ステップにさらに含まれるのは、データの入力チャンクに対するダイジェスト・セグメントとそれぞれのダイジェスト値との計算である。これら全ての計算は、ローリング・ハッシュ値の単一計算に基づく。第二ステップにおいて、類似のリポジトリ区間の参照ダイジェストが読み取られ、次いで、データの整合を識別するため、入力ダイジェストとその参照ダイジェストとが照合される。
【００２７】
一実施形態において、本明細書で説明する類似性ベースの重複排除アプローチでは、入力データのストリームは、（例えば、少なくとも１６ＭＢの）チャンクに区分化され、各チャンクは２つの主要ステップで処理される。第一ステップでは、類似性探索プロセスが適用され、リポジトリ中で最も類似する参照データの位置が見出される。このステップの中で、入力チャンクに対し、ローリング・ハッシュ値の単一線形計算に基づいて、類似性探索要素およびダイジェスト・セグメント境界の両方が計算される。生成された区分けに基づいて入力チャンクに対しダイジェスト値が計算され、それらの入力データでの出現の順番にメモリ中に格納される。次いで、類似するデータの位置を使って、これら類似参照データのダイジェストがルックアップされ、これらのダイジェストが、これも順次の形でメモリ中にロードされる。次に、入力ダイジェストと参照ダイジェストとが照合され、データの整合が形成される。
【００２８】
データの入力チャンクの重複排除が完了すると、そのデータの入力チャンクの関連ダイジェストは、後の入力データのための参照ダイジェストとしての役割を果たすため、リポジトリ中に格納される。これらのダイジェストは線形形式で格納され、この形式は、これらのダイジェストが表現するデータが格納される重複排除された形式とは無関係であり、これらがデータ中に出現する順番になっている。このストレージの方法は、重複排除されたストレージ形式を特徴づけるフラグメンテーションの如何を問わず、ダイジェストのセクションの効率的な検索を可能にし、しかして、低廉なＩＯおよび計算リソースの消費を可能にする。
【００２９】
ここで図１を見ると、コンピューティング・システム環境の例示的なアーキテクチャ１０が示されている。コンピュータ・システム１０は、中央処理ユニット（ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）１２を含み、該ユニットは通信ポート１８およびメモリ・デバイス１６に接続されている。通信ポート１８は、通信ネットワーク２０と通信している。通信ネットワーク２０およびストレージ・ネットワークは、サーバ（ホスト）２４およびストレージ・システムと通信するように構成することができ、該ストレージ・システムにはストレージ・デバイス１４を含めることができる。ストレージ・システムは、ハード・ディスク・ドライブ（ＨＤＤ：ｈａｒｄ  ｄｉｓｋ  ｄｒｉｖｅ）デバイス、ソリッドステート・デバイス（ＳＳＤ：ｓｏｌｉｄ−ｓｔａｔｅ  ｄｅｖｉｃｅ）などを含むことができ、これらデバイスは、独立ディスクの冗長アレイ（ＲＡＩＤ：ｒｅｄｕｎｄａｎｔ  ａｒｒａｙ  ｏｆ  ｉｎｄｅｐｅｎｄｅｎｔ  ｄｉｓｋｓ）に構成することが可能である。後記で説明するオペレーションは、システム１０または別の場所に配置され、独立してもしくは他のＣＰＵデバイス１２と連動してまたはその双方で作動する、複数のメモリ・デバイス１６を有することが可能な、ストレージ・デバイス（群）１４上で実行することができる。メモリ・デバイス１６は、電気的消去可能プログラム可能読み取り専用メモリ（ＥＥＰＲＯＭ：ｅｌｅｃｔｒｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）などのメモリ、または関連するデバイスのホストを含んでもよい。メモリ・デバイス１６およびストレージ・デバイス１４は、信号担持媒体を介してＣＰＵ１２に接続される。さらに、ＣＰＵ１２は、通信ポート１８を介して、付属された複数のさらなるコンピュータ・ホスト・システム２４を有する、通信ネットワーク２０に接続される。加えて、メモリ・デバイス１６とＣＰＵ１２とを、コンピューティング・システム１０の各コンポーネントに内蔵させて含めてもよい。また、各ストレージ・システムには、連携して作動する、または独立したメモリ・デバイス１６もしくはＣＰＵ１２またはその両方として作動する、別々のもしくは分離されたまたはその両方のメモリ・デバイス１６およびＣＰＵ１２を含めることができる。
【００３０】
図２は、本発明による、コンピュータ・システム中のデータ・ストレージ・システムのハードウェア構造を示す、例示的なブロック図２００である。各々が、データ・ストレージ・システム２００の一部として、データ処理を遂行するための中央処理ユニットとしての役割を果たす、ホスト・コンピュータ２１０、２２０、２２５が示されている。クラスタ・ホスト／ノード（物理または仮想デバイス）２１０、２２０、および２２５は、データ・ストレージ・システム２００において、本発明の目的を達成するための一つ以上の新規物理デバイスまたは論理デバイスとすることができる。一実施形態において、単なる例示であるが、データ・ストレージ・システム２００は、ＩＢＭ（ＩＢＭ社の登録商標）ＰｒｏｔｅｃＴＩＥＲ（ＩＢＭ社の登録商標）重複排除システムＴＳ７６５０Ｇ（ＩＢＭ社の商標）として実装することが可能である。ネットワーク接続２６０は、ファイバ・チャネル・ファブリック、ファイバ・チャネル・ポイント・ツー・ポイント・リンク、ファイバ・チャネル・オーバー・イーサネット（Ｒ）ファブリックもしくはポイント・ツー・ポイント・リンク、ＦＩＣＯＮ（ＩＢＭ社の登録商標）もしくはＥＳＣＯＮ（ＩＢＭ社の登録商標）Ｉ／Ｏインターフェース、任意の他のＩ／Ｏインターフェース型、無線ネットワーク、有線ネットワーク、ＬＡＮ、ＷＡＮ、異機種、同種、公衆（すなわちインターネット）、プライベート、またはこれらの任意の組み合わせであってよい。ホスト２１０、２２０、および２２５は、ローカルにしても一つ以上の場所に分散してもよく、これらホストに対して、ファイバ・チャネル、ＦＩＣＯＮ（ＩＢＭ社の登録商標）、ＥＳＣＯＮ（ＩＢＭ社の登録商標）、イーサネット（Ｒ）、光ファイバ、無線、または同軸アダプタなど、ストレージ・コントローラ２４０への任意の種類のファブリック（またはファブリック・チャネル）（図２には示さず）またはネットワーク・アダプタ２６０を備えることが可能である。データ・ストレージ・システム２００には、通信のため、適切なファブリック（図２には示さず）またはネットワーク・アダプタ２６０が適宜に備えられる。図２中では、データ・ストレージ・システム２００は、ストレージ・コントローラ２４０およびクラスタ・ホスト２１０、２２０、および２２５を含んで示されている。クラスタ・ホスト２１０、２２０、および２２５は、クラスタ・ノードを含むことができる。
【００３１】
本明細書で説明する方法の明瞭な理解を容易にするために、図２では、ストレージ・コントローラ２４０は、マイクロプロセッサ２４２、システム・メモリ２４３、および不揮発性ストレージ（「ＮＶＳ」：ｎｏｎｖｏｌａｔｉｌｅ  ｓｔｏｒａｇｅ）２１６を含む、単一の処理ユニットとして示されている。なお、いくつかの実施形態では、ストレージ・コントローラ２４０は、各々が専用のプロセッサ・コンプレックスおよびシステム・メモリを有し、データ・ストレージ・システム２００内の専用ネットワークによって相互接続された、複数の処理ユニットから成っている。ストレージ２３０（図２では２３０ａ、２３０ｂ、および２３０ｎと標識されている）は、ストレージ・アレイなど一つ以上のストレージ・デバイスで構成することができ、これらは、各ストレージ・コントローラ２４０に接続された一つ以上のクラスタ・ホスト２１０、２２０、および２２５と共に、（ストレージ・ネットワークによって）ストレージ・コントローラ２４０に接続されている。
【００３２】
いくつかの実施形態において、ストレージ２３０に含まれたデバイスは、ループ構成にして接続することができる。ストレージ・コントローラ２４０は、ストレージ２３０を管理し、ストレージ２３０に対し意図された書き込みおよび読み取り要求の処理を促進する。ストレージ・コントローラ２４０のシステム・メモリ２４３は、プログラム命令およびデータを格納し、プロセッサ２４２は、本明細書で説明するような、ストレージ２３０を実行し管理する本発明の機能および方法ステップを実行するため、該命令およびデータにアクセスすることができる。一実施形態において、システム・メモリ２４３は、本明細書に記載の方法およびオペレーションを実施するためのオペレーション・ソフトウェア２５０を含み、これと協働しまたは通信している。また、図２に示されるように、システム・メモリ２４３は、「書き込みデータ」および「読み取りデータ」をバッファ格納する、本明細書で「キャッシュ・メモリ」とも称する、ストレージ２３０に対するキャッシュ２４５を含むかまたは該キャッシュと通信することができ、上記「書き込みデータ」および「読み取りデータ」とは、それぞれ、書き込み／読み取り要求およびこれらの関連するデータを言う。一実施形態において、キャッシュ２４５は、システム・メモリ２４３の外部のデバイスに配置され、さりながら、マイクロプロセッサ２４２によるアクセスが可能な状態であり、本明細書に記載のオペレーションの実行に加え、データ喪失に対する追加のセキュリティを提供する機能を果たすことができる。
【００３３】
いくつかの実施形態において、キャッシュ２４５は、データ・ストレージ・システム２００のパフォーマンスの向上のため、揮発性メモリおよび不揮発性メモリを用いて実装され、ローカル・バス（図２には示さず）を介してマイクロプロセッサ２４２に連結される。データ・ストレージ・コントローラ中に含まれるＮＶＳ２１６は、マイクロプロセッサ２４２によるアクセスが可能であり、他の図でも説明するような、本発明のオペレーションおよび実行のための付加的支援を提供する役割をする。ＮＶＳ２１６は、「持続性」キャッシュまたは「キャッシュ・メモリ」とも言われ、格納されたデータを保持するため外部の電力を用いる、または用いないことが可能な不揮発性メモリを使って実装される。このＮＶＳは、本発明の目的を達成するのに適した任意の用途のため、キャッシュ２４５の中またはこれと併せて格納することができる。いくつかの実施形態において、データ・ストレージ・システム２００が停電した場合、バッテリなどのバックアップ電源（図２には示さず）が、ＮＶＳ２１６に格納されたデータを保持するために十分な電力を供給する。特定の実施形態において、ＮＶＳ２１６の容量は、キャッシュ２４５の合計容量以下である。
【００３４】
ストレージ２３０は、ストレージ・アレイなど一つ以上のストレージ・デバイスで物理的に構成することができる。ストレージ・アレイは、ハード・ディスクなど個別ストレージ・デバイスの論理的なグルーピングである。特定の実施形態において、ストレージ２３０は、ＪＢＯＤ（Ｊｕｓｔ  ａ  Ｂｕｎｃｈ  ｏｆ  Ｄｉｓｋｓ（単純ディスク束））アレイまたはＲＡＩＤ（独立ディスクの冗長アレイ）アレイから成る。物理ストレージ・アレイの集合はさらに組み合わせてランクを形成することが可能であり、これにより、物理ストレージは論理的構成から外される。ランク中のストレージ空間は、論理ボリューム群中に割り当てることが可能で、この論理ボリュームは、書き込み／読み取り要求の中で指定するストレージ場所を定義する。
【００３５】
一実施形態において、単なる例示であるが、図２に示されたストレージ・システムは、論理ボリューム、または単に「ボリューム」を含むことができ、これらには異なった種類の割り当てを持たせることが可能である。ストレージ２３０ａ、２３０ｂ、および２３０ｎは、データ・ストレージ・システム２００中のランクとして示されており、本明細書では、ランク２３０ａ、２３０ｂ、および２３０ｎと呼ぶ。ランクは、データ・ストレージ・システム２００にローカルなものとすることもでき、物理的に遠隔の場所に亘って配置することも可能である。言い換えれば、ローカルのストレージ・コントローラは遠隔のストレージ・コントローラに接続し、その遠隔の場所のストレージを管理することができる。ランク２３０ａは、２つの全体ボリューム２３４および２３６と、一つの部分ボリューム２３２ａとで構成されて示されている。ランク２３０ｂは、別の部分ボリューム２３２ｂを備えて示されている。しかして、ボリューム２３２は、ランク２３０ａとランク２３０ｂとにまたがって割り当てられている。ランク２３０ｎは、その全体がボリューム２３８に割り当てられているものとして示されており、すなわち、ランク２３０ｎは、ボリューム２３８に対する全体的物理ストレージを受け持っている。上記の例から、当然のことながら、或るランクが一つ以上の部分ボリュームもしくは全体ボリュームまたはその両方を含むよう構成することができる。ボリュームおよびランクは、いわゆる「トラック」にさらに分割することが可能で、このトラックはストレージの固定ブロックを表す。したがって、トラックは、所与のボリュームと関連付けられ、これに所与のランクを与えることが可能である。
【００３６】
ストレージ・コントローラ２４０は、データ重複排除モジュール２５５、類似性インデックス・モジュール２５７（例えば、類似性探索構造体）、および類似性探索モジュール２５９を含むことができる。データ重複排除モジュール２５５、類似性インデックス・モジュール２５７、および類似性探索モジュール２５９は、ストレージ・コントローラ２４０、ホスト２１０、２２０、２２５、およびストレージ・デバイス２３０のあらゆるコンポーネントと連携して作動することが可能である。データ重複排除モジュール２５５、類似性インデックス・モジュール２５７、および類似性探索モジュール２５９は、構造的に一つの合体したモジュールとしてもよく、あるいは他の別個のモジュールに関連付け、もしくは含め、またはその両方を行ってもよい。また、データ重複排除モジュール２５５、類似性インデックス・モジュール２５７、および類似性探索モジュール２５９を、キャッシュ２４５または他のコンポーネントの中に配置してもよい。
【００３７】
ストレージ・コントローラ２４０は、ホスト・コンピュータ２１０、２２０、２２５へのファイバ・チャネル・プロトコルを制御するための制御スイッチ２４１と、ストレージ・コントローラ２４０全体を制御するためのマイクロプロセッサ２４２と、ストレージ・コントローラ２４０のオペレーションを制御するマイクロプログラム（オペレーション・ソフトウェア）２５０、制御のためのデータ、データを一時的に格納する（バッファする）キャッシュ２４５、およびキャッシュ２４５がデータを読み取り書き込むのを助力するバッファ２４４を格納するための不揮発性制御メモリ２４３と、ストレージ・デバイス２３０へのデータの搬出入を管理するプロトコルを制御するための制御スイッチ２４１と、データ重複排除モジュール２５５と、類似性インデックス・モジュール２５７と、中に情報をセットすることが可能な類似性探索モジュール２５９と、を含む。本発明では、本明細書に記載のオペレーションを助力するため、複数のバッファ２４４を実装することが可能である。一実施形態において、クラスタ・ホスト／ノード、２１０、２２０、２２５およびストレージ・コントローラ２４０は、インターフェースとしてネットワーク・アダプタ（これはファイバ・チャネルでもよい）２６０を介して、すなわち、少なくとも一つの「ファブリック」と呼ばれるスイッチを介して接続される。
【００３８】
一実施形態において、ホスト・コンピュータまたは一つ以上の物理または仮想デバイス、２１０、２２０、２２５、およびストレージ・コントローラ２４０は、インターフェースとしてネットワーク（これはファイバ・チャネルでもよい）２６０を介して、すなわち、少なくとも一つの「ファブリック」と呼ばれるスイッチを介して接続される。一つの実施形態で、図２に示されたシステムのオペレーションを説明することとする。マイクロプロセッサ２４２は、メモリ２４３を制御して、ホスト・デバイス（物理または仮想）２１０からのコマンド情報、およびホスト・デバイス（物理または仮想）２１０を識別するための情報を格納させることができる。制御スイッチ２４１と、バッファ２４４と、キャッシュ２４５と、オペレーティング・ソフトウェア２５０と、マイクロプロセッサ２４２と、メモリ２４３と、ＮＶＳ２１６と、データ重複排除モジュール２５５と、類似性インデックス・モジュール２５７と、類似性探索モジュール２５９と、は相互に通信していて、これらは別々のまたは一つの個別コンポーネント（群）とすることが可能である。また、コンポーネントの全てではないにせよ、オペレーション・ソフトウェア２５０などそれらのいくつかはメモリ２４３に含めてもよい。図示されたデバイス内のコンポーネントの各々は、一緒にリンクすることができ、本発明に適した目的のため相互に通信させることができる。前述のように、データ重複排除モジュール２５５、類似性インデックス・モジュール２５７、および類似性探索モジュール２５９も、同様にキャッシュ２４５または他のコンポーネントの中に配置することが可能である。しかして、データ重複排除モジュール２５５、類似性インデックス・モジュール２５７、および類似性探索モジュール２５９は、ストレージ・アーキテクチャおよびユーザの好みに基づき、必要に応じて用いればよい。
【００３９】
一実施形態において、前述のように、入力データは、大きな固定サイズのチャンク（例えば１６ＭＢ）に区分化され、各入力チャンクに対して、類似性探索手順が適用される。類似性探索手順は、データの入力チャンクに基づいて、識別特徴（ＤＣ：ｄｉｓｔｉｎｇｕｉｓｈｉｎｇ  ｃｈａｒａｃｔｅｒｉｓｔｉｃｓ）と呼ばれることもある、コンパクト類似性要素を計算し、リポジトリ中のコンパクト探索構造体（すなわちインデックス）中に格納された、整合する類似性要素を探索する。データの各チャンクあたりに格納される類似性要素のサイズは、通常、３２バイト（チャンクのサイズは数メガバイト）であり、しかして、類似性要素を格納する探索構造体を、非常にコンパクトで、維持および内部探索しやすいものとする。
【００４０】
類似性要素は、チャンクのデータに対するローリング・ハッシュ値を計算することによって、すなわち、バイト・オフセット中のバイト群の各連続ウィンドウに対するローリング・ハッシュ値を生成し、次いで、当該チャンクの類似性要素の対象となる特定のハッシュ値群と関連する位置群（必ずしもこれらのハッシュ値のありのままの位置ではない）とを選択することによって、計算される。
【００４１】
本発明によって提供される一つの重要な特徴および新規性は、ローリング・ハッシュ値の単一線形計算（これは計算的に費用の掛かるオペレーションである）が、（類似性探索のための）チャンクの類似性要素、および（正確な整合を見出すための）チャンクのデータのダイジェスト・ブロックへの区分けの両方を計算するためのベースの役割を果たすことである。各ローリング・ハッシュ値は、類似性要素の計算、およびダイジェスト・ブロック区分けの計算に加算される。この２つの計算に加えられた後、ローリング・ハッシュ値を格納しておく必要性は極めて低いかまたはなくなるので、ローリング・ハッシュ値は廃棄すればよい。このアルゴリズム上の要素は、大幅なパフォーマンスの向上はもとより、高い効率性およびＣＰＵ消費の大きな低減を提供する。
【００４２】
一実施形態において、本発明の類似性探索手順は２つの種類のアウトプットを生成する。第一の種類のアウトプットは、リポジトリ中の最も類似する参照データの位置のセットである。第二の種類のアウトプットは、ダイジェスト・ブロックの区分けおよびそれらダイジェスト・ブロックに対応するダイジェスト値から成る、入力チャンクのダイジェストであり、これらダイジェスト値は、ダイジェスト・ブロックのデータに基づいて計算される。
【００４３】
一実施形態において、これらダイジェストは、データ中のダイジェストの出現に対応する形でリポジトリに格納される。データのセクションのリポジトリ中の位置とサイズが所与とすれば、データの当該区間に対応するダイジェストのリポジトリ中の場所が効率よく特定される。類似性探索手順によって生成された位置は、次いで、類似する参照データの格納されたダイジェストをルックアップして、これらの参照ダイジェストをメモリ中にロードするために用いられる。次いで、データを比較するよりむしろ、入力ダイジェストとロードされた参照ダイジェストとが照合される。この照合プロセスは、参照ダイジェストをメモリ中のダイジェストのコンパクト探索構造体の中にロードし、次いで、各入力ダイジェストに対し、そのダイジェスト値の存在について、該ダイジェストの探索構造体にクエリを行うことによって実施される。ダイジェストの探索構造体の中での探索は、ダイジェスト値に基づいて行われる。整合が見出されると、当該ダイジェストに関連付けられた入力データが、リポジトリ中で見出されたと判定され、リポジトリ中の参照ダイジェストの位置に基づいて、リポジトリ中の入力データの位置が定められる。この場合、入力ダイジェストによってカバーされた入力データと、整合した参照ダイジェストによってカバーされたリポジトリ・データとの間の同一性が記録される。整合が見出されない場合、当該ダイジェストに関連付けられた入力データは、リポジトリ中に見出されなかったと判定され、新規のデータとして記録される。一実施形態において、類似性探索構造体は、類似性要素の全域的な探索構造体であり、ダイジェストのメモリ探索構造体は、メモリ中のローカルなダイジェストの探索構造体である。ダイジェストのメモリ探索構造体中の探索は、ダイジェスト値によって行われる。
【００４４】
図３は、本発明の態様が実現可能な、データ重複排除システムによって重複排除処理を行う際の類似性探索に基づくダイジェスト検索のための例示的な方法３００を示すフローチャートである。方法３００が開始される（ステップ３０２）。方法３００は、入力データをデータ・チャンクに区分化する（ステップ３０４）。入力データは、固定サイズのデータ・チャンクに区分化することができる。方法３００は、データ・チャンクの各々に対し、類似性要素、ダイジェスト・ブロック境界、および対応するダイジェスト値を計算する（ステップ３０６）。方法３００は、データ・チャンク（これらは固定サイズのデータ・チャンクとすることができる）の各々に対し、探索構造体（すなわちインデックス）の中で整合する類似性要素を探索する（ステップ３０８）。リポジトリ（例えばデータのリポジトリ）中の類似するデータの位置が探し出される（ステップ３１０）。方法３００は、これら類似するデータの位置を用いて、リポジトリ中の類似するデータの格納されたダイジェスト値および対応する格納されたダイジェスト・ブロック境界を探し出し、メモリ中にロードする（ステップ３１２）。方法３００は、データの整合を調べるために、入力データのダイジェスト値および対応するダイジェスト・ブロック境界と、格納されたダイジェスト値および対応する格納されたダイジェスト・ブロック境界とを照合する（ステップ３１４）。方法３００が終了する（ステップ３１６）。
【００４５】
図４は、本発明の態様が実現可能な、データ重複排除システムによって重複排除処理を行う際の類似性探索に基づくダイジェスト検索のための例示的な別の方法４００を示すフローチャートである。方法４００が開始される（ステップ４０２）。方法４００は、入力データをチャンクに区分化し（例えば、入力データを大きな固定サイズのチャンクに区分化し）（ステップ４０４）、入力データ・チャンクに対し、該入力データ・チャンクのデータに基づいて、ローリング・ハッシュ値、類似性要素、ダイジェスト・ブロック境界、およびダイジェスト値を計算する（ステップ４０６）。方法４００は、類似性探索構造体（すなわちインデックス）中で入力データ・チャンクの類似性要素を探索する（ステップ４０８および４１０）。方法４００は、十分なまたは不足のない量の整合する類似性要素があるかどうかを判定する（ステップ４１２）。十分な量の整合する類似性要素が見つからない場合、方法４００は、入力データ・チャンクに対してリポジトリ中に類似するデータは見出せないと判定し、その入力チャンクのデータはリポジトリ中に格納され（ステップ４１４）、その後方法４００は終了する（ステップ４３８）。十分な量の類似性要素が見つかった場合、方法４００は、リポジトリ中で見出された各類似するデータ区間に対し、該リポジトリ中の各類似するデータ区間の位置およびサイズを判定する（ステップ４１６）。方法４００は、リポジトリ中の該類似するデータ区間を代表するダイジェストを探し出す（ステップ４１８）。方法４００は、これらのダイジェストを、メモリ中のダイジェストの探索データ構造体の中にロードする（ステップ４２０）。方法４００は、まだ、さらなる類似するデータ区間があるかどうかを判定する（ステップ４２２）。「はい」の場合、方法４００はステップ４１６に戻る。「いいえ」ならば、方法４００は、入力データ・チャンクの各ダイジェストを検討する（ステップ４２４）。方法４００は、ダイジェストの該メモリ探索構造体中に当該ダイジェスト値が存在するかどうかを判定する（ステップ４２６）。「はい」の場合、方法４００は、該ダイジェストによってカバーされた入力データと、整合するダイジェスト値を有するリポジトリ・データとの間の同一性を記録する（ステップ４２８）。「いいえ」ならば、方法４００は、該ダイジェストによってカバーされた入力データはリポジトリ中に見出せないことを記録する（ステップ４３０）。ステップ４２８および４３０の両方に続いて、方法４００は、入力データ・チャンクのまださらなるダイジェストがあるかどうかを判定する（ステップ４３２）。「はい」の場合、方法４００はステップ４２４に戻る。「いいえ」ならば、方法４００は、リポジトリ中の整合したデータの類似性要素を、類似性探索構造体から除去する（ステップ４３４およびステップ４１０）。方法４００は、入力データ・チャンクの類似性要素を類似性探索構造体に追加する（ステップ４３６）。方法４００が終了する（ステップ４３８）。
【００４６】
図５は、本発明の態様が実現可能な、データ重複排除システムにおける、ローリング・ハッシュ値の単一線形計算を用いる、類似性探索値とダイジェスト・ブロックの境界との両方の効率的な計算のための例示的な方法５００を示すフローチャートである。方法５００が開始される（ステップ５０２）。方法５００は、入力データをデータ・チャンクに区分化する（ステップ５０４）。データ・チャンクは固定サイズのデータ・チャンクとすればよい。方法５００は、入力データ中のバイト・オフセットの中のバイト群の各連続ウィンドウを検討する（ステップ５０６）。方法５００は、処理対象となるさらなるバイト群の連続ウィンドウがあるかどうかを判定する（ステップ５０８）。「はい」の場合、方法５００は、バイト群の連続ウィンドウのデータに基づいて、ローリング・ハッシュ値を計算する（ステップ５１０）。方法５００は、類似性値の計算およびダイジェスト・ブロック区分け（すなわち、ダイジェスト・ブロック境界）の計算にローリング・ハッシュ値を提供する（ステップ５１２）。方法５００は、ローリング・ハッシュ値を廃棄し（ステップ５１４）、ステップ５０６に戻る。「いいえ」ならば、方法５００は、類似性要素およびダイジェスト・ブロック区分けの計算を完了し、入力データの最終的類似性要素およびダイジェスト・ブロック区分けを生成する（ステップ５１６）。方法５００は、ダイジェスト・ブロック区分けに基づいてダイジェスト値を計算し、各ダイジェスト・ブロックには対応するダイジェスト値が割り当てられる（ステップ５１８）。これらの類似性要素を用いて、リポジトリ中の類似するデータが探索される（ステップ５２０）。該ダイジェスト・ブロックおよび対応するダイジェスト値は、入力データと一致するリポジトリ中のデータを見つけ出すため、リポジトリ中に格納されたダイジェスト・ブロックおよび対応するダイジェスト値と照合するのに用いられる（ステップ５２２）。方法５００が終了する（ステップ５２４）。
【００４７】
当業者には当然のことながら、本発明の態様は、システム、方法、またはコンピュータ・プログラム製品として具現化することができる。したがって、本発明の態様は、全体がハードウェアの実施形態、全体がソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、あるいは、ソフトウェア態様およびハードウェア態様を組み合わせた実施形態の形を取ることができ、これらは一般に本明細書では全て「回路」、「モジュール」、または「システム」と称することがある。さらに、本発明の態様は、コンピュータ可読プログラム・コードが具現化されている一つ以上のコンピュータ可読媒体（群）中に具現化されたコンピュータ・プログラム製品の形を取ることも可能である。
【００４８】
一つ以上のコンピュータ可読媒体（群）の任意の組み合わせを用いることが可能である。コンピュータ可読媒体は、コンピュータ可読信号媒体であっても、コンピュータ可読ストレージ媒体であってもよい。コンピュータ可読ストレージ媒体は、例えば、以下に限らないが、電子的、磁気的、光学的、電磁気的、赤外的、または半導体の、システム、装置、またはデバイス、あるいは前述の任意の適切な組み合わせであってよい。コンピュータ可読ストレージ媒体のさらに具体的な例（非包括的リスト）には、一つ以上の配線を有する電気接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、消去およびプログラム可能読み取り専用メモリ（ＥＰＲＯＭ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）またはフラッシュ・メモリ）、光ファイバ、携帯型コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、光ストレージ・デバイス、磁気ストレージ・デバイス、または前述の任意の適切な組み合わせが含まれよう。本明細書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置、もしくはデバイスによって、またはこれらに関連させて使用するためのプログラムを、包含または格納できる任意の有形媒体であってよい。
【００４９】
コンピュータ可読媒体上に具現化されたプログラム・コードは、以下に限らないが、無線、有線、光ファイバ・ケーブル、ＲＦなど、または前述の任意の適した組み合わせを含め、任意の適切な媒体を用いて送信することができる。本発明の態様のオペレーションを実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および、“Ｃ”プログラミング言語または類似のプログラミング言語などの従来式手続き型プログラミング言語を含め、一つ以上のプログラミング言語の任意の組み合わせで記述することができる。このプログラム・コードは、スタンドアロン・ソフトウェア・パッケージとしてユーザのコンピュータで専ら実行することも、ユーザのコンピュータで部分的に実行することもでき、一部をユーザのコンピュータで一部を遠隔コンピュータで実行することもでき、あるいは遠隔のコンピュータまたはサーバで専ら実行することもできる。後者の場合は、ローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）または広域ネットワーク（ＷＡＮ：ｗｉｄｅａｒｅａ ｎｅｔｗｏｒｋ）を含む任意の種類のネットワークを介して、遠隔コンピュータをユーザのコンピュータに接続することもでき、あるいは（例えばインターネット・サービス・プロバイダを使いインターネットを介し）外部のコンピュータへの接続を行うことも可能である。
【００５０】
本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラム製品のフローチャート図もしくはブロック図またはその両方を参照しながら、本発明の態様を上記で説明してきた。当然のことながら、フローチャート図もしくはブロック図またはその両方の各ブロック、および、フローチャート図もしくはブロック図またはその両方中のブロックの組み合わせは、コンピュータ・プログラム命令によって実装が可能である。これらのコンピュータ・プログラム命令を、汎用コンピュータ、特殊用途コンピュータ、またはマシンを形成する他のプログラム可能データ処理装置のプロセッサに提供し、そのコンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックもしくはブロック群中に特定されている機能群／動作群を実装するための手段を生成するようにすることができる。
【００５１】
また、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対し特定の仕方で機能するよう命令することが可能なこれらのコンピュータ・プログラム命令を、コンピュータ可読媒体に格納し、そのコンピュータ可読媒体に格納された命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に特定されている機能／動作を実装する命令群を包含する製造品を作り出せるようにすることができる。さらに、コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードし、そのコンピュータ上、他のプログラム可能装置上、または他のデバイス上で一連のオペレーション・ステップを実行させて、コンピュータ実装のプロセスを作り出し、当該コンピュータ上もしくは他のプログラム可能装置上で実行される命令が、フローチャートもしくはブロック図またはその両方のブロックもしくはブロック群中に特定されている機能群／動作群を実装するためのプロセスを提供するようにすることも可能である。
【００５２】
上記の図面中のフローチャートおよびブロック図は、本発明の様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品から可能となる実装のアーキテクチャ、機能性、およびオペレーションを示している。この点に関し、フローチャートまたはブロック図中の各ブロックは、特定の論理機能（群）を実装するための一つ以上の実行可能命令を含む、モジュール、セグメント、またはコードの部分を表し得る。また、一部の別の実装においては、ブロック中に記載された機能が、図面に記載された順序から外れて行われ得ることに留意すべきである。例えば、連続して示された２つのブロックが、関与する機能性に応じ、実際にはほぼ同時に実行されることがあり、時にはこれらのブロックが逆の順序で実行されることもあり得る。さらに、ブロック図もしくはフローチャート図またはその両方の各ブロック、およびブロック図もしくはフローチャート図またはその両方中のブロック群の組み合わせは、特定の機能または動作を実施する特殊用途ハードウェア・ベースのシステム、または特殊用途ハードウェアとコンピュータ命令との組み合わせによって実装可能なことにも留意すべきである。
【図１】
0006320432.tif 000002
【図２】
0006320432.tif 000003
【図３】
0006320432.tif 000004
【図４】
0006320432.tif 000005
【図５】
0006320432.tif 000006