(57)【特許請求の範囲】
【請求項１】
データストアから参照データブロックを検索するステップ、
第１条件に基づいて、前記参照データブロックを参照データブロックの第１のセットに集約するステップ、
前記参照データブロックの第１のセットの部分に基づいて、第１参照データセットを生成するステップであって、前記第１参照データセットは新たなデータブロックをエンコードするために用いることができる、ステップ、
前記第１参照データセット内の参照データブロックが参照された総回数に基づき、前記第１参照データセットの使用カウント変数を決定するステップ、
ＩＤ番号と前記使用カウント変数を含む前記第１参照データセットのＩＤを生成するステップ、
前記第１参照データセットを前記ＩＤとともに前記データストアに記憶するステップ、
前記第１参照データセットが所定時間以内に参照されたか否かに基づき、前記第１参照データセットに対応する前記使用カウント変数を自動的に変更するステップ、
前記使用カウント変数に基づき、前記第１参照データセットが第２条件に合致するか否かを判定するステップ、
前記第１参照データセットが前記第２条件に合致する場合、前記第１参照データセットをリタイアさせるとともに、前記第１参照データセットの前記ＩＤ番号を更新して前記ＩＤ番号を再使用可能にするステップ、
を有する方法。
【請求項２】
前記方法はさらに、
新しいデータブロックセットを含むデータストリームを受信するステップ、
前記新しいデータブロックセットに対して分析を実行するステップ、
前記新しいデータブロックセットを前記第１参照データセットに関連付けることにより、前記分析に基づいて前記新しいデータブロックセットを符号化するステップ、
前記新しいデータブロックセットの各符号化データブロックを前記第１参照データセットの対応する参照データブロックに関連付けるレコードテーブルを更新するステップ、
を有する請求項１に記載の方法。
【請求項３】
前記方法はさらに、
新しいデータブロックセットを含むデータストリームを受信するステップ、
前記新しいデータブロックセットに対して、前記新しいデータブロックセットと前記第１参照データセットとの間に、厳密な一致ではなく類似性があるか否かを分析するステップ、
前記新しいデータブロックセットを前記第１参照データセットと関連付けることにより、前記分析に基づき前記新しいデータブロックセットをエンコードするステップ、
を有する請求項１記載の方法。
【請求項４】
前記方法はさらに、
前記第１参照データセットと異なる前記新しいデータブロックセットのうちのデータブロックを特定するステップ、
前記第１参照データセットと異なる前記新しいデータブロックセットのうちのデータブロックを第２のセットに集約するステップ、
前記第１参照データセットと異なる前記新しいデータブロックセットのうちのデータブロックを含む前記第２のセットに基づいて、第２参照データセットを生成するステップ、
を有する請求項２に記載の方法。
【請求項５】
前記方法はさらに、
第２使用カウント変数を前記第２参照データセットに割り当てるステップ、
前記第２参照データセットを前記データストアに記憶するステップ、
を有する請求項４に記載の方法。
【請求項６】
前記第１参照データセットに含まれる参照データブロック数は、前記第１条件にしたがって判定される、請求項１に記載の方法。
【請求項７】
前記データストアに記憶される参照データセット数は、前記第１条件にしたがって判定される、請求項１に記載の方法。
【請求項８】
プロセッサと、
命令を記憶するメモリとを備えるシステムであって、
前記命令は、実行されると、前記システムに、
データストアから参照データブロックを検索するステップ、
第１条件に基づいて、前記参照データブロックを参照データブロックの第１のセットに集約するステップ、
前記参照データブロックの第１のセットの部分に基づいて、第１参照データセットを生成するステップであって、前記第１参照データセットは新たなデータブロックをエンコードするために用いることができる、ステップ、
前記第１参照データセット内の参照データブロックが参照された総回数に基づき、前記第１参照データセットの使用カウント変数を決定するステップ、
ＩＤ番号と前記使用カウント変数を含む前記第１参照データセットのＩＤを生成するステップ、
前記第１参照データセットを前記ＩＤとともに前記データストアに記憶するステップ、
前記第１参照データセットが所定時間以内に参照されたか否かに基づき、前記第１参照データセットに対応する前記使用カウント変数を自動的に変更するステップ、
前記使用カウント変数に基づき、前記第１参照データセットがリタイア条件に合致するか否かを判定するステップ、
前記第１参照データセットが前記リタイア条件に合致する場合、前記第１参照データセットをリタイアさせるとともに、前記第１参照データセットの前記ＩＤ番号を更新して前記ＩＤ番号を再使用可能にするステップ、
を実行させる、システム。
【請求項９】
前記命令は前記システムにさらに、
新しいデータブロックセットを含むデータストリームを受信するステップ、
前記新しいデータブロックセットに対して分析を実行するステップ、
前記新しいデータブロックセットを前記第１参照データセットに関連付けることにより、前記分析に基づいて前記新しいデータブロックセットを符号化するステップ、
前記新しいデータブロックセットの各符号化データブロックを前記第１参照データセットの対応する参照データブロックに関連付けるレコードテーブルを更新するステップ、
を実行させる請求項８に記載のシステム。
【請求項１０】
前記命令は前記システムにさらに、
新しいデータブロックセットを含むデータストリームを受信するステップ、
前記新しいデータブロックセットに対して、前記新しいデータブロックセットと前記第１参照データセットとの間に、厳密な一致ではなく類似性があるか否かを分析するステップ、
前記新しいデータブロックセットを前記第１参照データセットと関連付けることにより、前記分析に基づき前記新しいデータブロックセットをエンコードするステップ、
を実行させる請求項８記載のシステム。
【請求項１１】
前記命令は前記システムにさらに、
前記第１参照データセットと異なる前記新しいデータブロックセットのうちのデータブロックを特定するステップ、
前記第１参照データセットと異なる前記新しいデータブロックセットのうちのデータブロックを第２のセットに集約するステップ、
前記第１参照データセットと異なる前記新しいデータブロックセットのうちのデータブロックを含む前記第２のセットに基づいて、第２参照データセットを生成するステップ、
を実行させる請求項９に記載のシステム。
【請求項１２】
前記命令は前記システムにさらに、
第２使用カウント変数を前記第２参照データセットに割り当てるステップ、
前記第２参照データセットを前記データストアに記憶するステップ、
を実行させる請求項１１に記載のシステム。
【請求項１３】
前記第１参照データセットに含まれる参照データブロック数は、前記第１条件にしたがって判定される、請求項８に記載のシステム。
【請求項１４】
前記データストアに記憶される参照データセット数は、前記第１条件にしたがって判定される、請求項８に記載のシステム。
【請求項１５】
コンピュータ可読プログラムを含む非一時的コンピュータ使用可能媒体を含むコンピュータプログラムであって、前記コンピュータ可読プログラムは、コンピュータで実行されると、前記コンピュータに、
データストアから参照データブロックを検索するステップ、
第１条件に基づいて、前記参照データブロックを参照データブロックの第１のセットに集約するステップ、
前記参照データブロックの第１のセットの部分に基づいて、第１参照データセットを生成するステップであって、前記第１参照データセットは新たなデータブロックをエンコードするために用いることができる、ステップ、
前記第１参照データセット内の参照データブロックが参照された総回数に基づき、前記第１参照データセットの使用カウント変数を決定するステップ、
ＩＤ番号と前記使用カウント変数を含む前記第１参照データセットのＩＤを生成するステップ、
前記第１参照データセットを前記ＩＤとともに前記データストアに記憶するステップ、
前記第１参照データセットが所定時間以内に参照されたか否かに基づき、前記第１参照データセットに対応する前記使用カウント変数を自動的に変更するステップ、
前記使用カウント変数に基づき、前記第１参照データセットがリタイア条件に合致するか否かを判定するステップ、
前記第１参照データセットが前記リタイア条件に合致する場合、前記第１参照データセットをリタイアさせるとともに、前記第１参照データセットの前記ＩＤ番号を更新して前記ＩＤ番号を再使用可能にするステップ、
を実行させる、コンピュータプログラム。
【請求項１６】
前記コンピュータプログラムは前記コンピュータにさらに、
新しいデータブロックセットを含むデータストリームを受信するステップ、
前記新しいデータブロックセットに対して分析を実行するステップ、
前記新しいデータブロックセットを前記第１参照データセットに関連付けることにより、前記分析に基づいて前記新しいデータブロックセットを符号化するステップ、
前記新しいデータブロックセットの各符号化データブロックを前記第１参照データセットの対応する参照データブロックに関連付けるレコードテーブルを更新するステップ、
を実行させる、請求項１５に記載のコンピュータプログラム。
【請求項１７】
前記コンピュータプログラムは前記コンピュータにさらに、
新しいデータブロックセットを含むデータストリームを受信するステップ、
前記新しいデータブロックセットに対して、前記新しいデータブロックセットと前記第１参照データセットとの間に、厳密な一致ではなく類似性があるか否かを分析するステップ、
前記新しいデータブロックセットを前記第１参照データセットと関連付けることにより、前記分析に基づき前記新しいデータブロックセットをエンコードするステップ、
を実行させる請求項１５記載のコンピュータプログラム。
【請求項１８】
前記コンピュータプログラムは前記コンピュータにさらに、
前記第１参照データセットと異なる前記新しいデータブロックセットのうちのデータブロックを特定するステップ、
前記第１参照データセットと異なる前記新しいデータブロックセットのうちのデータブロックを第２のセットに集約するステップ、
前記第１参照データセットと異なる前記新しいデータブロックセットのうちのデータブロックを含む前記第２のセットに基づいて、第２参照データセットを生成するステップ、
を実行させる請求項１６記載のコンピュータプログラム。
【請求項１９】
前記コンピュータプログラムは前記コンピュータにさらに、
第２使用カウント変数を前記第２参照データセットに割り当てるステップ、
前記第２参照データセットを前記データストアに記憶するステップ、
を実行させる、請求項１８に記載のコンピュータプログラム。
【請求項２０】
前記第１参照データセットに含まれる参照データブロック数は、前記第１条件にしたがって判定される、請求項１５に記載のコンピュータプログラム。
【請求項２１】
前記データストアに記憶される参照データセット数は、前記第１条件にしたがって判定される、請求項１５に記載のコンピュータプログラム。
【請求項２２】
前記方法はさらに、
第２参照データセットを生成するステップであって、前記第２参照データセットは新たに受信したデータブロックをエンコードするために用いられるとともに、前記第１参照データセットは前記新たに受信したデータブロックをエンコードするために用いられなくなる、ステップ、
前記第１参照データセットの参照データブロックを用いて、前記データストアのセグメントに対してエンコードしたデータブロックを集約するステップであって、前記データストアはフラッシュストレージである、ステップ、
を有する請求項１記載の方法。
【請求項２３】
前記方法はさらに、
新たなデータブロックセットを含むデータストリームを受信するステップ、
前記新たなデータブロックセットに対して分析を実施するステップ、
前記新たなデータブロックセットを前記第１参照データセットに対して対応付けることにより、前記分析に基づき前記新たなデータブロックセットをエンコードするステップ、
前記新たなデータブロックセットのエンコードされた各データブロックを前記第１参照データセットの対応する参照データブロックに対して対応付けるレコードテーブルを更新するステップ、
前記第１参照データセットとは異なる前記新たなデータブロックセットのデータブロックを判定するステップ、
前記第１参照データセットが前記データストリームをエンコードするために用いられている間に、前記第１参照データセットのうち使用頻度が高い参照データブロックのサブセットを含むとともに前記第１参照データセットに含まれていない新たな参照データブロックを含む第２参照データセットを生成するステップ、
を有する請求項１記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本願は、      に出願された「Ｐｉｐｅｌｉｎｅｄ  Ｒｅｆｅｒｅｎｃｅ  Ｓｅｔ  Ｃｏｎｓｔｒｕｃｔｉｏｎ  ａｎｄ  Ｕｓｅ  ｉｎ  Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ」という名称の米国特許出願第      号明細書、      に出願された「Ｉｎｔｅｇｒａｔｉｏｎ  ｏｆ  Ｒｅｆｅｒｅｎｃｅ  Ｓｅｔｓ  ｗｉｔｈ  Ｓｅｇｍｅｎｔ  Ｆｌａｓｈ  Ｍａｎａｇｅｍｅｎｔ」という名称の米国特許出願第      号明細書、及び      に出願された「Ｇａｒｂａｇｅ  Ｃｏｌｌｅｃｔｉｏｎ  ｆｏｒ  Ｒｅｆｅｒｅｎｃｅ  Ｓｅｔｓ  ｉｎ  Ｆｌａｓｈ  Ｓｔｏｒａｇｅ  Ｓｙｓｔｅｍｓ」という名称の米国特許出願第      号明細書に関連し、これらの各出願は全体的に参照により本明細書に援用される。
【０００２】
本開示は、記憶装置内のデータブロックセットの管理に関する。特に、本開示は、記憶装置用途での類似性に基づく内容照合及びデータ重複排除を記載する。更に詳細には、本開示は、フラッシュメモリ管理において重複排除のために参照データブロックを参照データセットに集約することに関する。
【背景技術】
【０００３】
厳密な一致とは対照的に、文書セット間の類似性を識別するために、類似性に基づく内容照合を文書に適用することができる。内容一致の概念は、従来、検索エンジンの実装及びハッシュルックアップベースの重複排除等のダイナミックランダムアクセスメモリ（ＤＲＡＭ）ベースのキャッシュの構築において使用されてきており、大まかな一致を識別する類似性ベースの重複排除とは対照的に、厳密な一致のみを識別する。しかし、類似性ベースの重複排除を記憶装置で使用するには、参照データセット管理及び構築に関連する問題を解消する必要がある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
既存の方法は、入力データセットの対応する各データブロックを記憶装置に記憶されているデータブロックと比較することにより、データブロック集約を実行する。更に、既存の方法は、入力データセットの各データブロックに対して厳密内容照合を実行する。厳密内容照合は、入力データセットの各データブロックに関連付けられた内容を記憶装置に記憶されているデータブロックの内容と比較することを含む。厳密な一致を有するデータブロックは符号化され、一方、厳密な一致を有さないデータブロックは符号化されず、記憶装置に別個に記憶される。これらの既存の方法は、性能問題、長い処理時間を必要とすること、大量の不必要な記憶装置の使用を必要とすること、同じ内容であるが僅かな違いを含み得る１つ又は複数のデータブロック間の冗長データ等の多くの欠点を含む。したがって、本開示は、参照ブロックを参照データセットに効率的に集約することにより、記憶装置でのデータ集約に関連する問題を解消する。
【課題を解決するための手段】
【０００５】
本開示は、ハードウェアでの効率的なデータ管理のシステム及び方法に関する。本開示での主題の革新的な一態様によれば、システムは、１つ又は複数のプロセッサと、命令を記憶するメモリとを有し、命令は、実行されると、システムに、データストアから参照データブロックを検索することと、基準に基づいて、参照データブロックを第１のセットに集約することと、参照データブロックを含む第１のセットの部分に基づいて、参照データセットを生成することと、参照データセットをデータストアに記憶することとを実行させる。
【０００６】
一般に、本開示に記載される主題の革新的な別の態様は、データストアから参照データブロックを検索することと、基準に基づいて、参照データブロックを第１のセットに集約することと、参照データブロックを含む第１のセットの部分に基づいて、参照データセットを生成することと、参照データセットをデータストアに記憶することとを含む、方法において実施され得る。
【０００７】
これらの態様のうちの１つ又は複数の他の実装形態は、コンピュータ可読記憶装置に符号化された方法の動作を実行するように構成される対応するシステム、装置、及びコンピュータプログラムを含む。
【０００８】
これら及び他の実装形態はそれぞれ、任意選択的に、以下の特徴のうちの１つ又は複数を含む。
【０００９】
例えば、動作は、新しいデータブロックセットを含むデータストリームを受信することと、新しいデータブロックセットに対して分析を実行することと、新しいデータブロックセットを参照データセットに関連付けることにより、分析に基づいて新しいデータブロックセットを符号化することと、新しいデータブロックセットの各符号化データブロックを参照データセットの対応する参照データブロックに関連付けるレコードテーブルを更新することと、参照データセットと異なる新しいセットのうちのデータブロックを特定することと、参照データセットと異なる新しいセットのうちのデータブロックを第２のセットに集約することと、参照データセットと異なる新しいデータブロックセットのうちのデータブロックを含む第２のセットに基づいて、第２の参照データセットを生成することと、使用カウント変数を第２の参照データセットに割り当てることと、第２の参照データセットをデータストアに記憶することとを更に含む。
【００１０】
例えば、特徴が、新しいデータブロックセットと参照データセットとの間に類似性が存在するか否かを識別すること、基準が、参照データセットに含まれる参照データブロック数に関連付けられた予め定義される閾値を含むこと、及び基準が、データストアに記憶される参照データセット数に関連付けられた閾値を含むことを含み得る。
【００１１】
これらの実装形態は、幾つかの点で特に有利である。例えば、本明細書に記載される技術は、メモリ管理において重複排除するために参照データブロックを参照データセットに集約するために使用することができる。
【００１２】
本開示で使用される用語は、主に、本明細書に開示される趣旨の範囲を限定するためではなく、読みやすさ及び教示を目的として選択されていることを理解されたい。
【００１３】
本開示は、同様の参照番号が同様の要素の参照に使用される添付図面の図に、限定ではなく例として示される。
【図面の簡単な説明】
【００１４】
【図１】本明細書に記載される技法による、記憶装置において参照データセット内の参照データブロックを管理するシステム例を示す高レベルブロック図である。
【図２】本明細書に記載される技法によるストレージコントローラユニット例を示すブロック図である。
【図３Ａ】本明細書に記載される技法による、記憶装置での参照データブロックを管理するシステム例を示すブロック図である。
【図３Ｂ】本明細書に記載される技法によるデータ縮小ユニット例を示すブロック図である。
【図４】本明細書に記載される技法による、参照データセットを生成する方法例のフローチャートである。
【図５】本明細書に記載される技法による、データブロックを参照データセットに集約する方法例のフローチャートである。
【図６Ａ】本明細書に記載される技法による、変化するデータストリームに基づいて参照ブロックを参照データセットに適応的に集約する方法例のフローチャートである。
【図６Ｂ】本明細書に記載される技法による、変化するデータストリームに基づいて参照ブロックを参照データセットに適応的に集約する方法例のフローチャートである。
【図６Ｃ】本明細書に記載される技法による、変化するデータストリームに基づいて参照ブロックを参照データセットに適応的に集約する方法例のフローチャートである。
【図７】本明細書に記載される技法による、パイプラインアーキテクチャにおいてデータブロックを符号化する方法例のフローチャートである。
【図８Ａ】本明細書に記載される技法による、パイプラインアーキテクチャにおいて参照データセットを生成する方法例のフローチャートである。
【図８Ｂ】本明細書に記載される技法による、パイプラインアーキテクチャにおいて参照データセットを生成する方法例のフローチャートである。
【図９】本明細書に記載される技法による、フラッシュ記憶装置管理において参照データセットを追跡する方法例のフローチャートである。
【図１０】本明細書に記載される技法による、参照データセットに関連付けられたカウント変数を更新する方法例のフローチャートである。
【図１１】本明細書に記載される技法による、非一時的データストア内の新しいロケーションに符号化データセグメントを割り当てる方法例のフローチャートである。
【図１２】本明細書に記載される技法による、フラッシュ管理とガベージコレクションとの統合に関連付けられた符号化データセグメントの方法例のフローチャートである。
【図１３】本明細書に記載される技法による、フラッシュ管理に関連付けられた参照データセットをリタイアさせる方法例のフローチャートである。
【図１４Ａ】参照データブロックを圧縮する従来技術による例を示すブロック図である。
【図１４Ｂ】参照データブロックを重複排除する従来技術による例を示すブロック図である。
【図１５】本明細書に記載される技法によるデルタ符号化を示すグラフ表現例である。
【図１６】本明細書に記載される技法による類似性符号化を示すグラフ表現例である。
【図１７】本明細書に記載される技法による、参照データブロックのデルタ及び自己圧縮を示すグラフ表現例である。
【図１８Ａ】本明細書に記載される技法による、フラッシュ管理においてガベージコレクションを使用した参照ブロックセットの追跡及びリタイアを示すグラフ表現例である。
【図１８Ｂ】本明細書に記載される技法による、フラッシュ管理においてガベージコレクションを使用した参照ブロックセットの追跡及びリタイアを示すグラフ表現例である。
【発明を実施するための形態】
【００１５】
効率的なデータ管理アーキテクチャを提供するシステム及び方法について以下に説明する。特に、本開示では、記憶装置、特にフラッシュ記憶装置において参照データブロックセットを管理するシステム及び方法について以下に説明する。本開示のシステム、方法は、フラッシュ記憶装置を使用する特定のシステムアーキテクチャに関連して説明されるが、本システム及び本方法が他のハードウェアアーキテクチャ及び他のハードウェア編成にも適用可能であることを理解されたい。
【００１６】
概説
本開示は、記憶装置用途及びデータ重複排除のための類似性ベースの内容照合を説明する。特に、本開示は、参照データセット管理及び構築の問題を解消することにより、効率的なデータ管理の改善された方法を提供することで、データ管理における現在の方法よりも優れている。より詳細には、本開示は、エンティティがコスト、記憶空間、及び電力を最小に抑えながら、バックアップ記憶装置内にデータを保持できるようにする、本開示において提供される解決策に対して追加の改善を提供する。
【００１７】
本開示は、以下の問題を解消することにより、従来の実装形態から区別される：記憶装置用途において類似性ベースの一致を計算すること、独自の方法で圧縮及び重複排除を入力データブロックに適用すること、世代的参照データセット記憶装置を使用することにより、変化するデータストリームに依存する変化する参照データセットの問題を解消すること、及び参照データセット管理を、フラッシュ記憶装置等であるが、これに限定されない記憶装置での空間のためのガベージコレクション及び実行時効率と統合すること。
【００１８】
更に、類似性ベースの重複排除アルゴリズムは、参照データブロックに関連付けられた内容の抽象表現を推定することにより動作する。したがって、参照データブロックは、他の（すなわち、将来の）入力データブロックの重複を排除するテンプレートとして使用することができ、これにより、記憶されるデータの総量が低減される。重複排除されたデータブロックが記憶装置から呼び出される場合、縮小（例えば、重複排除された）表現を記憶装置から検索し、参照データブロックにより供給される情報と結合されて、元のデータブロックを再生成することができる。
【００１９】
参照データブロックは、抽象としてデータストリームを表し、したがって、データストリームの性質は経時変化するため、参照データブロックセットも変化する。時間の経過に伴い、参照データブロックの部分は参照データセットと関連しなくなり、一方、新しいデータブロックが参照データセットに追加され、新しい参照データセットの生成に繋がる。重複排除システムにより達成されるデータ縮小は、参照データセットが入力データストリームの良好な表現であるか否かを評価する尺度として使用することができる。例えば、これは、重複排除されたデータブロックに、それが符号化（縮小）されるときに突き合わせられた参照データブロックを記録させることにより行うことができる。レコードは次に、記憶されたデータブロックが続けて呼び出されるとき、元の形態に迅速に正確に組み立てることができるように使用することができる。これは、少なくとも１つのデータブロックが潜在的に、再構築に参照データブロックを必要とする限り、参照データブロックが利用可能なままであるという要件を呈する。この要件は幾つかの結果を有することができる。第１に、現在の参照データブロックセットは、記憶装置に提示されるデータストリームに応答して、経時変化することができるが、過去の参照データブロックが、参照データセットのうちの記憶データブロックの小さいサブセットのみによってまだ使用中であることがある。第２に、記憶装置により利用される全ての参照データブロックの集合は、装置の寿命にわたり常に成長する。これは、記憶装置の多年にわたる寿命スパンにわたり集合が無制限に成長することに繋がる。無制限の成長は、フラッシュ記憶装置の性質に起因して、全てのデータを記憶装置に常に記憶することに関連して実現不可能である。フラッシュ記憶装置は、従来の記憶装置及びハードドライブと比較して、速度及びランダム読み出しアクセスにおいて優れるが、記憶容量制限を有し、寿命にわたり耐久性が低下する。フラッシュ記憶装置での耐久性の低下は、フラッシュ記憶装置による書き込み−消去サイクルへの耐性に関連付けられ、一方、フラッシュ記憶装置の性能は、フラッシュ記憶装置内の書き込み可能な空きデータブロックの可溶性により影響を受ける。
【００２０】
もはや有用ではない古い参照データブロックをリタイアさせる方法を適用する必要がある。この方法は、データブロックはもはや参照データブロックに依存せず、参照データブロックをセットからリタイアさせることができると判断できるように、データブロックが参照データブロック及び／又は参照データブロックのセットに依存する回数を追跡することにより、参照データブロックに関連付けられた参照カウントを含み得る。また、新しいデータブロックが記憶装置に追加されると、参照カウントをインクリメントして、その参照データブロック及び／又は参照データセットの使用カウントを反映する必要がある。同様に、データブロックが削除される（又は上書きされる）場合、対応する参照データブロック及び／又は参照データセットの使用カウントをデクリメントする必要がある。使用カウントが正確に同期され、確実に存続して、装置の遮断又は電力障害から保護することが重要である。
【００２１】
Ａ．メモリ管理での重複排除のための参照ブロックの参照セットへの集約
参照データセットへの参照データブロックの集約を実施する一方法は、ある程度の類似性を共有する参照データブロックを参照データセットに集約することにより実行することができる。重複排除アルゴリズムが適宜実行するには、参照データセットは予め定義される数のデータブロックを必要とし得る。例えば、重複排除アルゴリズムは、データ符号化／縮小を実行するために、ある数の参照データブロック（例えば、１０，０００）を有する必要がある。したがって、各参照データブロックと独立して機能する代わりに、本開示は、１つ又は複数のデータブロック（例えば、参照データブロック）を含む参照データセットを用いて機能する。
【００２２】
参照データセットは以下の特徴を有し得る：１）参照データセットを使用して、ある時間期間にわたり能動的に重複排除アルゴリズムを実行することができ、２）データストリームが変化する場合、新しい参照データセットを作成／生成することができる。しかし、もはや能動的に使用されていない前の参照データセットを保持することができ、その理由は、前に記憶されたデータブロックが、データ呼び出しのためにこの参照データセットに依存するためである。次に、３）使用カウントは、各参照データブロックに対してではなく、参照データセットに対して維持することができる。これは、その見返りとして、使用カウントの管理オーバーヘッドを著しく低減することができる。最後に、４）参照データセットが存在するようになると、使用カウントがゼロに低下した（すなわち、もはやそれに依存するデータブロックがない）後、リタイアすることができる。
【００２３】
幾つかの実施形態では、システムのリソース制約に応じて、参照データセットのデータブロックは、参照データセット内に予め定義される数のデータブロックを含むと共に、参照データセットの最大数を有するようにカスタマイズすることができる。更なる実施形態では、システムは、複数の異なる参照データセットがクラスタにわたり共有されて、より広いカバレッジを得るクラスタ化システム含むことができる。
【００２４】
Ｂ．メモリ管理でのパイプライン参照セット構築及び使用
パイプライン参照データセット構造及び使用は、参照データセットの重複構築及び使用を実行することにより実施することができる。例えば、現在の参照データセットが、入力データストリーム（例えば、一連のデータブロック）の重複排除に使用されている間、新しい参照データセットを並列して構築することができる。本開示では、新しい参照データセットを新しく開始する必要はなく、代わりに、新しい参照データセットは、データストリームの変化に応答して構築される新しい参照データブロックを追加しながら、現在の参照データセット内の参照データブロックの使用頻度の高いサブセットを使用して構築することができる。このように、現在の参照データセットがもはや有効ではないと重複排除アルゴリズムが見なす場合、新しい参照データの使用を開始することができる。上述した２つの革新的な参照データセット管理技法は、フラッシュ管理記憶装置において使用され、重複排除と統合することができる。
【００２５】
Ｃ．参照セットとセグメントフラッシュ管理との統合
フラッシュ管理と共に本開示を実施する一実施形態は、参照データセットに依存するデータブロックをセグメントに集約することにより実行することができる。セグメントとは、順次充填し、単位として消去することができる。フラッシュ記憶装置のチャンクを指す。各データブロックに参照データセット（及び参照データセット内の特定の参照データブロック）を関連付けることができ、データを呼び出す場合、各データブロックに依存することができる。したがって、各入力データブロックによる参照データブロックの使用を個々に追跡するのではなく、システムは、参照データセット（すなわち、参照データブロックのグループ）の使用を追跡することができる。フラッシュベースの記憶システムでは、入力データブロックは、フラッシュに順次書き込まれ、したがって、時間的に近く書き込まれるデータブロック間には特別な局所性がある。幾つかの実施形態では、セグメントは、フラッシュ記憶装置のメモリ内の複数（例えば、２つ）の参照データセットを指すことができる。
【００２６】
更に、セグメントは識別子（例えば、参照データセット識別子）でタグ付けすることができ、それから、システムは、何れのセグメントが何れの参照データセットを使用しているかを追跡することができる。これは、大きい効率に繋がることができる  −  情報ボリュームを３桁低減することができ（各セグメントが数千のデータブロックをホストする）、セグメントレベル管理は既にフラッシュ管理に固有であるため、追加の情報（参照セット使用）を追跡する余分な負担が最小である。したがって、参照データセットは、単純な整数識別子を介してコンパクトに表され、参照データセットは、様々なデータセグメント（個々のデータブロックではなく）により使用され、コンパクトに追跡することができる。一実施形態では、システムは１６のセットを使用し、各セットは１６，３８４個の参照データブロックを含み得る。参照データブロックは、４ＫＢ（キロバイト）サイズであることができる。識別子（例えば、参照データセット識別子）は４ビットサイズであることができる。識別子は、２５６ＭＢサイズであるフラッシュの各セグメントに関連付けることができる。これにより、参照データセットの空間効率的且つ低オーバーヘッドの管理が可能になる。
【００２７】
Ｄ．フラッシュ記憶システムでの参照セットのガベージコレクション
幾つかの実施形態では、フラッシュ管理及びガベージコレクションと共に本開示を実施することが、以下説明するように実行することができる。ガベージコレクション時、有効データブロックは、フラッシュ記憶装置内の新しいロケーションに移される。フラッシュセグメント内のそのデータブロックが順次充填され、同じ参照データセットを使用することに留意することが重要である。ガベージコレクションアルゴリズムは、フラッシュメモリの各セグメントで機能するため、ガベージコレクションアルゴリズムは、セグメントに含まれるデータブロックに関して以下の２つの判断のうちの一方を下す。これらの判断は、セグメントに関連付けられた参照データセット（例えば、参照データセットＲ）の状態に基づくことができる。ガベージコレクションアルゴリズムが下す判断は、１）参照データセット（例えば、参照データセットＲ）が引き続き利用可能である場合、縮小データブロックをフラッシュメモリ内の新しいロケーションに移し、及び／又は２）参照データセット（例えば、参照データセットＲ）がまもなくリタイアすることが予期される場合、参照データセット（例えば、Ｒ）を使用して元のデータブロックを再構築し、より新しい参照データセットを使用してそれを新たに重複排除する。その結果、参照データセット（例えば、Ｒ）がリタイアする方向に進むと、参照データセット（例えば、Ｒ）の使用カウントは徐々に低減することになり、ゼロに達すると（すなわち、アクティブユーザが残っていない）、Ｒはリタイアすることができ、対応する識別子は、再使用に利用できるようになる。
【００２８】
幾つかの実施形態では、参照データセットがリタイア可能な状態になる場合、ガベージコレクションアルゴリズムは、ガベージコレクションアルゴリズムを使用して、強制的に参照データセットをより迅速にリタイアさせることができる。更なる実施形態では、本開示は、統計学的分析をデータブロックの母集団に対して実行して、使用頻度の高い参照データセットを特定し、それらを使用して、参照データセット選択アルゴリズムを調整することができる。
【００２９】
したがって、本開示は、参照データセットの追跡とフラッシュ管理との統合  −  セグメント参照データセット毎に  −  を提供して、参照データセット情報の記憶及び処理オーバーヘッドを改善する。また、参照データセットの処理とガベージコレクションとの統合により、システムは、より古い参照データセットをリタイアさせ、実行時に、縮小データブロックをそのままでコピーするか、それとも異なる参照データセットを使用して再縮小するかを判断することにより、記憶装置全体にわたる参照データセット使用を追跡してデータ移動を最適化することができる。
【００３０】
システム
図１は、記憶装置における参照データセット内の参照データブロックを管理するシステム例を示す高レベルブロック図である。示される実施形態では、システム１００は、クライアントデバイス１０２ａ、１０２ｂ〜１０２ｎ、記憶装置コントローラユニット１０６、及びデータ記憶装置リポジトリ１１０を含み得る。示される実施形態では、システム１００のこれらのエンティティは、ネットワーク１０４を介して通信可能に結合される。しかし、本開示は、この構成に限定されず、様々な異なるシステム環境及び構成が利用可能であり、本開示の範囲内にある。他の実装形態は、追加又はより少数の計算デバイス、サービス、及び／又はネットワークを含み得る。図１及び実施形態を示すために使用されている他の図において、参照番号又は数字の後の文字の指示、例えば、「１０２ａ」が、その特定の参照番号で指定される要素又は構成要素を特に参照することを認識されたい。後に文字が続かない参照番号、例えば、「１０２」が文章中に現れる場合、その一般参照番号を有する要素又は構成要素の異なる実施形態を一般に参照することを認識されたい。
【００３１】
幾つかの実施形態では、システム１００のエンティティは、クラウドベースのアーキテクチャを使用し得、クラウドベースのアーキテクチャでは、１つ又は複数のコンピュータ機能又はルーチンは、ローカルコンピュータデバイスの要求時にリモート計算システム及びデバイスにより実行される。例えば、クライアントデバイス１０２は、ハードウェア及び／又はソフトウェアリソースを有する計算デバイスであることができ、例えば、他のクライアントデバイス１０２、記憶装置コントローラユニット１０６、及び／又はデータ記憶装置リポジトリ１１０、又はシステム１００の任意の他のエンティティを含め、他の計算デバイス及びリソースにより提供されるハードウェア及び／又はソフトウェアリソースにネットワーク１０４を介してアクセスし得る。
【００３２】
ネットワーク１０４は、従来のタイプの有線又は無線のものであることができ、スター構成、トークンリング構成、又は他の構成を含め、多くの様々な構成を有し得る。更に、ネットワーク１０４は、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）（例えば、インターネット）、及び／又は複数のデバイス（例えば、記憶装置コントローラユニット１０６、クライアントデバイス１０２等）が通信できるようにする他の相互接続されたデータパスを含み得る。幾つかの実施形態では、ネットワーク１０４は、ピアツーピアネットワークであり得る。ネットワーク１０４は、電気通信ネットワークの部分に結合されるか、又は部分を含むこともでき、それにより、様々な異なる通信プロトコルを使用してデータを送信する。更なる実施形態では、ネットワーク１０４は、Ｂｌｕｅｔｏｏｔｈ（商標）（又は低エネルギーＢｌｕｅｔｏｏｔｈ）通信ネットワーク又はセルラ通信ネットワークを含み、ショートメッセージングサービス（ＳＭＳ）、マルチメディアメッセージングサービス（ＭＭＳ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、直接データ接続、ＷＡＰ、電子メール等を介してを含め、データを送受信する。図の例は１つのネットワーク１０４を示すが、実際には、１つ又は複数のネットワーク１０４がシステム１００のエンティティを接続することができる。
【００３３】
幾つかの実施形態では、クライアントデバイス１０２（１０２ａ、１０２ｂ〜１０２ｎのうちの任意のデバイス又は全て）は、データ処理機能及びデータ通信機能を有する計算デバイスである。示される実施形態では、クライアントデバイス１０２ａ、１０２ｂ〜１０２ｎは、信号線１１８ａ、１１８ｂ〜１１８ｎを介してネットワーク１０４にそれぞれ通信可能に結合される。クライアントデバイス１０２ａ、１０２ｂ〜１０２ｎは、１つ又は複数のメモリと、１つ又は複数のプロセッサとを含む任意の計算デバイス、例えば、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、携帯電話、個人情報端末（ＰＤＡ）、モバイル電子メールデバイス、ポータブルゲームプレーヤ、ポータブル音楽プレーヤ、１つ若しくは複数のプロセッサが内部に組み込まれるか、若しくは結合されたテレビ、又は記憶を要求することが可能な任意の他の電子デバイスであることができる。クライアントデバイス１０２は、データ記憶装置リポジトリ１１０に対して記憶要求（例えば、読み出し、書き込み等）を行うアプリケーションを実行し得る。クライアントデバイスは、記憶装置（例えば、記憶装置１１２ａ〜１１２ｎ）を含むデータ記憶装置リポジトリ１１０と直接結合し得る（図示せず）。
【００３４】
クライアントデバイス１０２は、グラフィックスプロセッサ、高解像度タッチスクリーン、物理的なキーボード、前方又は後方に面するカメラ、Ｂｌｕｅｔｏｏｔｈ（登録商標）モジュール、適切なファームウェアを記憶するメモリ、及び様々な物理的接続インタフェース（例えば、ＵＳＢ、ＨＤＭＩ、ヘッドセットジャック等）等のうちの１つ又は複数を含むこともできる。更に、クライアントデバイス１０２のハードウェア及びリソースを管理するオペレーティングシステム、ハードウェア及びリソースへのアプリケーションアクセスを提供するアプリケーションプログラミングインタフェース（ＡＰＩ）、ユーザ対話及び入力のためのインタフェースを生成し表示するユーザインタフェースモジュール（図示せず）、並びに例えば、文書を操作するアプリケーション、画像を操作するアプリケーション、電子メールを操作するアプリケーション、及びウェブ閲覧用アプリケーション等を含むアプリケーションが、クライアントデバイス１０２に記憶され、クライアントデバイス１０２で動作可能であり得る。図１の例は３つのクライアントデバイス１０２ａ、１０２ｂ、及び１０２ｎを示しているが、任意の数のクライアントデバイス１０２がシステムに存在し得ることを理解されたい。
【００３５】
記憶装置コントローラユニット１０６は、例えば、図２を参照して以下に詳述するように、（マイクロ）プロセッサ、メモリ、及びネットワーク通信機能を含むハードウェアであることができる。記憶装置コントローラユニット１０６は、信号線１２０を介してネットワーク１０４に結合されて、システム１００の他の構成要素と通信し、協働する。幾つかの実施形態では、記憶装置コントローラユニット１０６は、ネットワーク１０４を介してクライアントデバイス１０２ａ、１０２ｂ〜１０２ｎのうちの１つ又は複数及び／又はデータ記憶装置リポジトリ１１０とデータを送受信する。一実施形態では、記憶装置コントローラユニット１０６は、信号線１２４を介してデータ記憶装置リポジトリ１１０及び／又は記憶装置１１２ａ〜１１２ｎとデータを直接送受信する。１つの記憶装置コントローラユニットが示されているが、複数の記憶装置コントローラユニットが、分散アーキテクチャ又は他の方法で利用可能ことを理解されたい。本願では、システム構成及びシステムにより実行される動作は、１つの記憶装置コントローラユニット１０６に関連して説明される。
【００３６】
幾つかの実施形態では、記憶装置コントローラユニット１０６は、効率的なデータ管理を提供する記憶装置制御エンジン１０８を含み得る。記憶装置制御エンジン１０８は、データの送信、システム１００の他のエンティティからの受信、読み取り、書き込み、及び変換を行う計算機能、サービス、及び／又はリソースを提供することができる。記憶装置制御エンジン１０８が上記機能提供に限定されないことを理解されたい。様々な実施形態では、記憶装置１１２は、記憶装置コントローラユニット１０６と直接接続されてもよく、又は信号線１２２により別個のコントローラ（図示せず）を通して及び／又はネットワーク１０４を介して接続されてもよい。記憶装置コントローラユニット１０６は、クライアントデバイス１０２が記憶空間の幾らか又は全てを利用できるようにするように構成された計算デバイスであることができる。例としてのシステム１００に示されるように、クライアントデバイス１０２は、ネットワーク１０４を介して又は直接（図示せず）記憶装置コントローラユニット１０６に結合することができる。
【００３７】
更に、システム１００のクライアントデバイス１０２及び記憶装置コントローラユニット１０６は、追加の構成要素を含むことができ、追加の構成要素は、図面を簡潔にするために図１に示されていない。また、幾つかの実施形態では、示される構成要素の全てが存在するわけではない。更に、様々なコントローラ、ブロック、及びインタフェースは、任意の適する方法で実施することができる。例えば、記憶装置コントローラユニットは、例えば、マイクロプロセッサ及び（マイクロ）プロセッサにより実行可能なコンピュータ可読プログラムコード（例えば、ソフトウェア又はファームウェア）を記憶するコンピュータ可読媒体、論理ゲート、スイッチ、特定用途向け集積回路（ＡＳＩＣ）、プログラマブル論理コントローラ、及び組み込みマイクロコントローラのうちの１つ又は複数の形態をとることができる。
【００３８】
データ記憶装置リポジトリ１１０及び任意選択的なデータ記憶装置リポジトリ２２０は非一時的コンピュータ使用可能（例えば、可読、書き込み可能等）媒体を含み得、この媒体は、プロセッサにより処理されるか、又はプロセッサと併せて処理されるために、命令、データ、コンピュータプログラム、ソフトウェア、コード、ルーチン等を包含、記憶、通信、伝搬、又は輸送することができる任意の非一時的装置又はデバイスであることができる。本開示はデータ記憶装置リポジトリ１１０／２２０をフラッシュメモリとして参照するが、幾つかの実施形態では、データ記憶装置リポジトリ１１０／２２０が、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、又は何らかの他のメモリデバイス等の非一時的メモリを含み得ることを理解されたい。幾つかの実施形態では、データ記憶装置リポジトリ１１０／２２０は、不揮発性メモリ又は同様の永久記憶装置及び媒体、例えば、ハードディスクドライブ、フロッピーディスクドライブ、コンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）デバイス、デジタル多用途ディスク読み取り専用メモリ（ＤＶＤ−ＲＯＭ）デバイス、デジタル多用途ディスクランダムアクセスメモリ（ＤＶＤ−ＲＡＭ）デバイス、デジタル多用途ディスク書き換え可能（ＤＶＤ−ＲＷ）デバイス、フラッシュメモリデバイス、又は何らかの他の不揮発性記憶装置を含むこともできる。
【００３９】
図２は、本明細書に記載される技法を実施するように構成される記憶装置コントローラユニット１０６の例を示すブロック図である。示されるように、記憶装置コントローラユニット１０６は、通信ユニット２０２、プロセッサ２０４、メモリ２０６、データ記憶装置リポジトリ２２０、及び記憶装置制御エンジン１０８を含み得、これらは通信バス２２４により通信可能に結合し得る。上記構成が例として提供され、多くの更なる構成が意図され、可能であることを理解されたい。
【００４０】
通信ユニット２０２は、ネットワーク１０４及び例えば、クライアントデバイス１０２及びデータ記憶装置リポジトリ１１０等を含むシステム１００の他のエンティティ及び／又は構成要素と有無線接続するための１つ又は複数のインタフェースデバイスを含み得る。例えば、通信ユニット２０２は、ＣＡＴタイプインタフェース、Ｗｉ−Ｆｉ（商標）を使用して信号を送受信するための無線送受信機、Ｂｌｕｅｔｏｏｔｈ（登録商標）セルラ通信等、ＵＳＢインタフェース、それらの様々な組合せ等を含み得るが、これらに限定されない。幾つかの実施形態では、通信ユニット２０２は、プロセッサ２０４をネットワーク１０４にリンクすることができ、ネットワーク１０４は他の処理システムに結合し得る。通信ユニット２０２は、例えば、本明細書の他の箇所で考察されるものを含め、様々な標準通信プロトコルを使用して、ネットワーク１０４及びシステム１００の他のエンティティへの他の接続を提供することができる。
【００４１】
プロセッサ２０４は、算術論理演算ユニット、マイクロプロセッサ、汎用コントローラ、又は電子表示信号の表示デバイスへの通信及び提供を実行する何らかの他のプロセッサアレイを含み得る。幾つかの実施形態では、プロセッサ２０４は、１つ又は複数の処理コアを有するハードウェアプロセッサである。プロセッサ２０４はバス２２４に結合して、他の構成要素と通信する。プロセッサ２０４は、データ信号を処理し、複雑命令セットコンピュータ（ＣＩＳＣ）アーキテクチャ、縮小命令セットコンピュータ（ＲＩＳＣ）アーキテクチャ、又は命令セットの組合せを実施するアーキテクチャを含む様々な計算アーキテクチャを含み得る。図２の例では１つのプロセッサのみが示されているが、複数のプロセッサ及び／又は処理コアを包含し得る。他のプロセッサ構成も可能であることを理解されたい。
【００４２】
メモリ２０６は、プロセッサ２０４により実行し得る命令及び／又はデータを記憶する。幾つかの実施形態では、メモリ２０６は、プロセッサ２０４により実行し得る命令及び／又はデータを記憶し得る。メモリ２０６は、例えば、オペレーティングシステム、ハードウェアドライバ、他のソフトウェアアプリケーション、データベース等を含め、他の命令及びデータを記憶することも可能である。メモリ２０６は、バス２２４に結合されて、プロセッサ２０４及びシステム１００の他の構成要素と通信し得る。
【００４３】
メモリ２０６は非一時的コンピュータ使用可能（例えば、可読、書き込み可能等）媒体を含み得、この媒体は、プロセッサ２０４により処理されるか、又はプロセッサ２０４と併せて処理されるために、命令、データ、コンピュータプログラム、ソフトウェア、コード、ルーチン等を包含、記憶、通信、伝搬、又は輸送することができる任意の非一時的装置又はデバイスであることができる。幾つかの実施形態では、メモリ２０６は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリ、又は何らかの他のメモリデバイス等の非一時的メモリを含み得る。幾つかの実施形態では、メモリ２０６は、不揮発性メモリ又は同様の永久記憶装置及び媒体、例えば、ハードディスクドライブ、フロッピーディスクドライブ、コンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）デバイス、デジタル多用途ディスク読み取り専用メモリ（ＤＶＤ−ＲＯＭ）デバイス、デジタル多用途ディスクランダムアクセスメモリ（ＤＶＤ−ＲＡＭ）デバイス、デジタル多用途ディスク書き換え可能（ＤＶＤ−ＲＷ）デバイス、フラッシュメモリデバイス、又は何らかの他の不揮発性記憶装置を含むこともできる。
【００４４】
バス２２４は、計算デバイスの構成要素間又は計算デバイス、ネットワーク１０４又はその部分を含むネットワークバスシステム、プロセッサメッシュ、それらの組合せ等間でデータを転送する通信バスを含み得る。幾つかの実施形態では、クライアントデバイス１０２及び記憶装置コントローラユニット１０６は、バス２２４に関連して実施されるソフトウェア通信メカニズムを介して協働し通信し得る。ソフトウェア通信メカニズムは、例えば、プロセス間通信、ローカル関数又はプロシージャ呼び出し、リモートプロシージャ呼び出し、ネットワークベースの通信、セキュア通信等を含み、及び／又は促進し得る。
【００４５】
記憶装置制御エンジン１０８は、効率的なデータ管理を提供するソフトウェア、コード、論理、又はルーチンである。図２に示されるように、記憶装置制御エンジン１０８は、データ受信モジュール２０８、データ縮小ユニット２１０、データ追跡モジュール２１２、データクラスタ化モジュール２１４、データリタイアモジュール２１６、更新モジュール２１８、及び同期モジュール２２２を含み得る。
【００４６】
幾つかの実施形態では、構成要素２０８、２１０、２１２、２１４、２１６、２１８、及び／又は２２２は、電子的に通信可能に結合されて、互いと、通信ユニット２０２、プロセッサ２０４、メモリ２０６、及び／又はデータ記憶装置リポジトリ２２０と協働し通信する。これらの構成要素２０８、２１０、２１２、２１４、２１６、２１８、及び２２２は、ネットワーク１０４を介してシステム１００の他のエンティティ（例えば、クライアントデバイス１０２、記憶装置１１２）と通信するためにも結合される。幾つかの実施形態では、データ受信モジュール２０８、データ縮小ユニット２１０、データ追跡モジュール２１２、データクラスタ化モジュール２１４、データリタイアモジュール２１６、更新モジュール２１８、及び同期モジュール２２２は、プロセッサ２０４によって実行可能な命令セットであるか、又は１つ若しくは複数のカスタマイズされたプロセッサに含まれる論理であり、各機能を提供する。他の実施形態では、データ受信モジュール２０８、データ縮小ユニット２１０、データ追跡モジュール２１２、データクラスタ化モジュール２１４、データリタイアモジュール２１６、更新モジュール２１８、及び同期モジュール２２２は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能であり、各機能を提供する。これらの任意の実施形態において、データ受信モジュール２０８、データ縮小ユニット２１０、データ追跡モジュール２１２、データクラスタ化モジュール２１４、データリタイアモジュール２１６、更新モジュール２１８、及び同期モジュール２２２は、プロセッサ２０４及び計算デバイス２００の他の構成要素と協働し通信するように構成される。
【００４７】
一実施形態では、データ受信モジュール２０８は、入力データを受信し、及び／又はデータを検索し、データ縮小ユニット２１０は、データストリームを縮小／符号化し、データ追跡モジュール２１２は、システム１００にわたりデータを追跡し、データクラスタ化モジュール２１４は、データブロックを含む参照データセットをクラスタ化し、データリタイアモジュール２１６は、ガベージコレクションを使用して、データブロック及び／又はデータブロックを含む参照データセットをリタイアさせ、更新モジュール２１８は、データストリームに関連付けられた情報を更新し、同期モジュール２２２は、記憶装置コントローラユニット１０６の１つ又は複数の他の構成要素に信頼性を提供する。モジュール、ルーチン、特徴、属性、方法論、及び他の態様の特定の名称及び分担は、必須又は有意なものではなく、本発明又はその特徴を実施するメカニズムは、異なる名称、分担、及び／又はフォーマットを有し得る。
【００４８】
データ受信モジュール２０８は、入力データを受信し、及び／又はデータを検索するソフトウェア、コード、論理、又はルーチンである。一実施形態では、データ受信モジュール２０８は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、データ受信モジュール２０８は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、データ受信モジュール２０８は、プロセッサ２０４及びデータ縮小ユニット２１０の他の構成要素を含む計算デバイス２００の他の構成要素と協働し通信するように構成される。
【００４９】
データ受信モジュール２０８は、システム１００のデータ記憶装置リポジトリ１１０／２２０等であるが、これらに限定されない１つ又は複数のデータストアから入力データを受信し、及び／又はデータを検索する。入力データは入力ストリームを含み得るが、これに限定されない。幾つかの実施形態では、データ受信モジュール２０８は、クライアントデバイス１０２からデータストリームを受信する。データストリームは、データブロック（例えば、新しいデータストリームの現在のデータブロック、記憶装置からの参照データブロック等）のセットを含み得る。データブロック（例えば、データストリームの）セットには、クライアントデバイス１０２により実行されレンダリングされ、及び／又はメモリに記憶される文書、ファイル、電子メール、メッセージ、ブログ、及び／又は任意のアプリケーションを関連付けることができるが、これらに限定されない。更に、データブロックセットは、スプレッドシートアプリケーション、フォーム、雑誌、記事、書籍、連絡先詳細、データベース、データベースの部分、テーブル等のクライアントデバイス上のアプリケーションを介して実行されレンダリングされるもの等のユーザ可読ファイルを含み得る。他の実施形態では、データストリームには、データ記憶装置リポジトリ２２０及び／又はフラッシュ記憶装置（図示せず）等のデータストアから検索されるデータブロック（例えば、参照データブロック）のセットを関連付けることができる。
【００５０】
データ縮小ユニット２１０は、本明細書の他の箇所で更に考察されるように、データストリームを縮小／符号化するソフトウェア、コード、論理、又はルーチンである。一実施形態では、データ縮小ユニット２１０は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、データ縮小ユニット２１０は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、データ縮小ユニット２１０は、プロセッサ２０４及び計算デバイス２００の他の構成要素と協働し通信するように構成される。更なる実施形態では、協働し通信するように構成される。更なる実施形態では、データ縮小ユニット２１０は、図３Ｂに示されるように、参照ブロックバッファ３０２、データ入力バッファ３０４、署名指紋計算エンジン３０６、照合エンジン３０８、符号化エンジン３１０、圧縮ハッシュテーブルモジュール３１２、参照ハッシュテーブルモジュール３１４、圧縮バッファ３１６、及びデータ出力バッファ３１８を含み得る。
【００５１】
データ追跡モジュール２１２は、データを追跡するソフトウェア、コード、論理、又はルーチンである。一実施形態では、データ追跡モジュール２１２は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、データ追跡モジュール２１２は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、データ追跡モジュール２１２は、プロセッサ２０４及びデータ縮小ユニット２１０の他の構成要素を含む計算デバイス２００の他の構成要素と協働し通信するように構成される。
【００５２】
データ追跡モジュール２１２は、システム１００の１つ又は複数のデータストアからのデータブロックを追跡し得、データストアは、専らデータ記憶装置リポジトリ１１０の記憶装置１１２、クライアントデバイス１０２のメモリ（図示せず）、及び／又はデータ記憶装置リポジトリ２２０を含み得るが、これらに限定されない。幾つかの実施形態では、データ追跡モジュール２１２は、システム１００にわたりデータブロックに関連付けられたカウントを追跡することができる。カウントは、１つ又は複数のデータブロックが参照データブロック及び／又は参照データセットに依存する回数を追跡することにより、データ追跡モジュール２１２により追跡することができる。更に、データ追跡モジュール２１２は、追跡されたカウントを計算デバイス２００の１つ又は複数の他の構成要素に送信して、参照データセットの参照データブロックがもはやデータブロックにより依存されておらず、そこからリタイアさせることができるときを判断することができる。一実施形態では、データ追跡モジュール２１２は、１つ又は複数のクライアントデバイス１０２によりデータを呼び出すために、非一時的データストア（例えば、フラッシュメモリ、データ記憶装置リポジトリ１１０／２２０）に関連付けられたメモリのセグメントを追跡する。例えば、クライアントデバイス１０２は、１つ又は複数のアプリケーションをレンダリングしており、非一時的データストア（すなわち、フラッシュメモリ）に記憶されているデータブロック（例えば、データブロックセット）を含むセグメントに関連付けられた内容へのアクセスを要求し得、次に、データ追跡モジュール２１２は、本明細書の他の箇所でより詳細に考察するように、要求に関連付けられた１つ又は複数の内容をレンダリングするために、セグメント及び／又は参照データセットが呼び出される（すなわち、データ呼び出し）回数を追跡し得る。
【００５３】
データクラスタ化モジュール２１４は、参照データセットをクラスタ化するソフトウェア、コード、論理、又はルーチンである。一実施形態では、データクラスタ化モジュール２１４は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、データクラスタ化モジュール２１４は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、データクラスタ化モジュール２１４は、プロセッサ２０４及びデータ縮小ユニット２１０の他の構成要素を含む計算デバイス２００の他の構成要素と協働し通信するように構成される。
【００５４】
幾つかの実施形態では、データクラスタ化モジュール２１４は、計算デバイス２００の１つ又は複数の他の構成要素と協働して、非一時的フラッシュデータストア（例えば、１つ又は複数の記憶装置１１２であることができるフラッシュメモリ）等の対応するメモリのセグメントに記憶されている１つ又は複数の参照データセットへの１つ又は複数のデータブロックの依存性を特定する。１つ又は複数の参照データセットへの１つ又は複数のデータブロックの依存性は、呼び出しのための１つ又は複数の参照データセットへの１つ又は複数のデータブロックの共通再構築／符号化依存性を反映し得る。例えば、データブロック（すなわち、符号化データブロック）は、クライアントデバイス（例えば、クライアントデバイス１０２）に提示するために、元のデータブロック（非符号化データブロック）に関連付けられた元の情報を提供することができるように、元のデータブロックを再構築するために参照データセットに依存し得る。
【００５５】
更なる実施形態では、データクラスタ化モジュール２１４は、クライアントデバイス１０２にわたる複数のデータブロックが依存する１つ又は複数の差別化参照データセットを識別する。データクラスタ化モジュール２１４は、差別化参照データセットがクラスタにわたって共有されて、より広いカバレッジを得るように、１つ又は複数の参照データセットに基づいてクラスタを生成することができる。一実施形態では、差別化参照データセットは、システム１００のデータブロックにより頻繁にデータが呼び出される（例えば、データが、最小閾値を超える、最大閾値を超える、及び／又は閾値範囲内で呼び出される）参照データセットであることができる。
【００５６】
データリタイアモジュール２１６は、参照データセットをリタイアさせるソフトウェア、コード、論理、又はルーチンである。一実施形態では、データリタイアモジュール２１６は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、データリタイアモジュール２１６は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、データリタイアモジュール２１６は、プロセッサ２０４及びデータ縮小ユニット２１０の他の構成要素を含む計算デバイス２００の他の構成要素と協働し通信するように構成される。
【００５７】
データリタイアモジュール２１６は、データ記憶装置リポジトリ１１０／２２０等であるが、これに限定されない１つ又は複数のデータストアに記憶されている１つ又は複数の参照データセットが、リタイア要件を満たすか否かを判断し得る。一実施形態では、参照データセットは、使用カウント変数（例えば、参照カウント）に基づいてリタイア要件を満たす。例えば、参照データセットは、対応する使用カウント変数が特定の閾値までデクリメントされる場合、リタイア要件を満たすことができる。
【００５８】
幾つかの実施形態では、参照データセットは、参照データセットの使用カウント変数のカウントがゼロにデクリメントされる場合、リタイア要件を満たす。ゼロの使用カウント変数は、データブロック又はデータブロックセットが、再生成のために、記憶されている対応する参照データセットに依存しない（例えば、参照しない）ことを示し得る。例えば、入力データストリームは、再構築（すなわち、非符号化）のために、参照データセットに依存する符号化データブロック（例えば、圧縮／重複排除データブロック）を含まない。更なる実施形態では、データリタイアモジュール２１６は、使用カウント変数に基づいて、参照データセットを強制的にリタイアさせ得る。例えば、参照データセットは、結果として特定のカウントになり得、特定のカウントに達した後、データリタイアモジュール２１６は、ガベージコレクションアルゴリズム（及び／又はデータ記憶装置クリーンアップのための当技術分野で周知の任意の他のアルゴリズム）を参照データセットに適用することにより、その参照データセットを強制的にリタイアさせることができる。データリタイアモジュール２１６の追加の動作が本明細書の他の箇所で考察される。
【００５９】
更新モジュール２１８は、データストリームに関連付けられた情報を更新するソフトウェア、コード、論理、又はルーチンである。一実施形態では、更新モジュール２１８は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、更新モジュール２１８は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、更新モジュール２１８は、プロセッサ２０４及びデータ縮小ユニット２１０の他の構成要素を含む計算デバイス２００の他の構成要素と協働し通信するように構成される。
【００６０】
更新モジュール２１８は、データブロックを受信し、データストア（例えば、データ記憶装置リポジトリ１１０／２２０）に記憶されているレコードテーブル内のデータブロックに関連付けられた１つ又は複数の識別子を更新することができる。レコードテーブルは、データベースに記憶された行及び列を有するテーブル、インデックス付きテーブル等を含み得るが、これらに限定されない。一実施形態では、受信されるデータブロックは、符号化／縮小データブロックであることができる。更なる実施形態では、更新モジュール２１８は、参照データセットに関連付けられた識別子を更新し得る。識別子は、ポインタを含み得るが、これに限定されない。ポインタは、データブロック及び／又は参照データセットに関連付けることができ、データブロック及び／又は参照データセットについてのグローバル情報等であるが、これに限定されない追加情報を含み得る。幾つかの実施形態では、ポインタは、記憶装置内の特定の参照データセットをポイントするデータブロックの総数等の情報を含み得る。
【００６１】
一実施形態では、更新モジュール２１８は、データ追跡モジュール２１２から、クライアントデバイスからのデータ呼び出しに関連付けられた情報を受信する。データ呼び出しには、データ記憶装置のセグメントのメモリ内の１つ又は複数の参照データセットを関連付け得る。更新モジュール２１８は次に、データ呼び出しに関連付けられたセグメントの参照データセットに関連付けられたセグメントヘッド（例えば、識別子）を更新し得る。更なる実施形態では、更新モジュール２１８は、セグメントがデータ呼び出しされた回数等の情報を含み得るセグメントヘッダの部分を更新する。更新モジュール２１８の追加の動作が本明細書の他の箇所で考察される。
【００６２】
同期モジュール２２２は、データ受信モジュール２０８、データ縮小ユニット２１０、データ追跡モジュール２１２、データクラスタ化モジュール２１４、データリタイアモジュール２１６、及び更新モジュール２１８等であるが、これらに限定されない記憶装置コントローラユニット１０６の１つ又は複数の他の構成要素に信頼性を提供するソフトウェア、コード、論理、又はルーチンであることができる。一実施形態では、同期モジュール２２２は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、同期モジュール２２２は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、同期モジュール２２２は、プロセッサ２０４及びデータ縮小ユニット２１０の他の構成要素を含む記憶装置コントローラユニット１０６の他の構成要素と協働し通信するように構成される。
【００６３】
一実施形態では、同期モジュール２２２は、記憶装置コントローラユニット１０６の１つ又は複数の構成要素によるデータの受信、検索、符号化、更新、変更、及び／又は記憶中での、デバイス遮断（例えば、クライアントデバイス遮断）及び／又は電力障害中等のデータ遮断から保護することができる。例えば、同期モジュール２２２は、データ／参照ブロック及び／又は参照データセットに関連付けられた使用カウント変数（例えば、参照カウント）を更新／変更しながら、更新モジュール２１８に信頼性を提供し得る。更なる実施形態では、同期モジュール２２２は、データ縮小ユニット２１０の１つ又は複数のバッファと並列に機能し得る。例えば、同期モジュール２２２は、データストリームをデータ入力バッファ３０４に送信して、データストリームのデータブロックを一時的に記憶し得、処理中、システム１００で電力障害が発生する場合、データストリームのデータブロックは損なわれない。
【００６４】
図３Ａは、本明細書において紹介される技法を実施するように構成されるハードウェア効率的データ管理システム例を示すブロック図３００Ａである。図３Ａに示されるように、データ縮小ユニット２１０は、参照ブロックを受信し、参照ブロックを処理し、参照ブロックを符号化／縮小したものを出力し、符号化参照データブロックをデータ記憶装置リポジトリ２２０に記憶する。更に、図３Ａに示される図は、記憶用途及びデータ重複排除のために類似性ベースの内容照合を含むが、これに限定されない本開示の主要ポイントを組み込む。類似性ベースの内容照合は、文書の組内での厳密な一致を識別するのとは対照的に、複数の文書にわたり適用して、１つ又は複数の文書間の類似性を検出し識別することができる。本開示は、以下の問題を解消することにより、従来の実装形態（図１４Ａ及び図１４Ｂに示されるような）から区別される：１）記憶用途で類似性ベースの照合を使用すること、２）独自の方法で圧縮及び重複排除を入力データブロックに適用すること、３）世代的参照データセット記憶装置を使用することにより、変化するデータストリーム（トラフィック）に依存する変化する参照データセットの問題を解消すること、及び４）参照データセット管理を、フラッシュ記憶装置等であるが、これに限定されない記憶装置での空間のためのガベージコレクション及び実行時効率と統合すること。
【００６５】
図３Ｂは、本明細書に記載の方法を実施するように構成される例としてのデータ縮小ユニット２１０を示すブロック図である。図３Ｂに示されるように、データ縮小ユニット２１０は、参照ブロックバッファ３０２、データ入力バッファ３０４、署名指紋計算エンジン３０６、照合エンジン３０８、符号化エンジン３１０、圧縮ハッシュテーブルモジュール３１２、参照ハッシュテーブルモジュール３１４、圧縮バッファ３１６、及びデータ出力バッファ３１８を含み得る。
【００６６】
幾つかの実施形態では、構成要素３０２、３０４、３０６、３０８、３１０、３１２、３１４、３１６、及び３１８は、電子的に通信可能に結合されて、互いと、通信ユニット２０２、プロセッサ２０４、メモリ２０６、及び／又はデータ記憶装置リポジトリ２２０と協働し通信する。これらの構成要素３０２、３０４、３０６、３０８、３１０、３１２、３１４、３１６、及び３１８は、ネットワーク１０４を介してシステム１００の他のエンティティ（例えば、クライアントデバイス１０２）と通信するためにも結合される。更なる実施形態では、参照ブロックバッファ３０２、データ入力バッファ３０４、署名指紋計算エンジン３０６、照合エンジン３０８、符号化エンジン３１０、圧縮ハッシュテーブルモジュール３１２、参照ハッシュテーブルモジュール３１４、圧縮バッファ３１６、及びデータ出力バッファ３１８は、プロセッサ２０４によって実行可能な命令セットであるか、又は１つ若しくは複数のカスタマイズされたプロセッサに含まれる論理であり、各機能を提供する。他の実施形態では、参照ブロックバッファ３０２、データ入力バッファ３０４、署名指紋計算エンジン３０６、照合エンジン３０８、符号化エンジン３１０、圧縮ハッシュテーブルモジュール３１２、参照ハッシュテーブルモジュール３１４、圧縮バッファ３１６、及びデータ出力バッファ３１８は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能であり、各機能を提供する。これらの任意の実施形態において、参照ブロックバッファ３０２、データ入力バッファ３０４、署名指紋計算エンジン３０６、照合エンジン３０８、符号化エンジン３１０、圧縮ハッシュテーブルモジュール３１２、参照ハッシュテーブルモジュール３１４、圧縮バッファ３１６、及びデータ出力バッファ３１８は、プロセッサ２０４及び計算デバイス２００の他の構成要素と協働し通信するように構成される。
【００６７】
参照ブロックバッファ３０２は、データストリームを一時的に記憶する論理又はルーチンである。一実施形態では、参照ブロックバッファ３０２は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、参照ブロックバッファ３０２は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、参照ブロックバッファ３０２は、プロセッサ２０４及びデータ縮小ユニット２１０の他の構成要素を含む計算デバイス２００の他の構成要素と協働し通信するように構成される。
【００６８】
一実施形態では、記憶装置制御エンジン１０８は、参照データブロックを操作し処理するために、参照データブロックをデータ記憶装置リポジトリ２２０から検索する。次に、記憶装置制御エンジン１０８は、参照データブロックを参照ブロックバッファ３０２に送信して、一時的に記憶し得る。参照データブロックを参照ブロックバッファ３０２に一時的に記憶することにより、参照データブロックの検索と参照データブロックの処理との間のシステム速度安定性が提供される。一実施形態では、記憶装置制御エンジン１０８は、参照データセットをデータ記憶装置リポジトリ２２０から検索して、計算デバイス２００の１つ又は複数の構成要素と協働して参照データセットを処理する。参照データセットを処理する前、記憶装置制御エンジン１０８及び／又は計算デバイス２００の１つ又は複数の他の構成要素は、参照データセットを参照ブロックバッファ３０２に送信して、一時的に記憶し得る。参照ブロックバッファ３０２は、計算デバイス２００の１つ又は複数の構成要素により処理するために、１つ又は複数の参照データブロック及び／又は１つ又は複数の参照データセットを内部に含み得るキューであることができる。
【００６９】
データ入力バッファ３０４は、入力データストリームの１つ又は複数のデータブロックを一時的に記憶する論理又はルーチンである。一実施形態では、データ入力バッファ３０４は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、データ入力バッファ３０４は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、データ入力バッファ３０４は、プロセッサ２０４及びデータ縮小ユニット２１０の他の構成要素を含む計算デバイス２００の他の構成要素と協働し通信するように構成される。
【００７０】
一実施形態では、記憶装置制御エンジン１０８は、入力データストリームのデータブロックを処理するために、クライアントデバイス（例えば、クライアントデバイス１０２）から１つ又は複数のデータブロックを受信する。記憶装置制御エンジン１０８は次に、受信したデータブロックをデータ入力バッファ３０４に送信して、一時的に記憶し得る。データブロックをデータ入力バッファ３０４に一時的に記憶することにより、データブロックの受信とデータブロックの処理との間のシステム処理効率が提供される。特に、記憶装置制御エンジン１０８の処理速度が、複数のクライアントデバイスから幾つかの入力データストリームを受信することに応答して増大する（例えば、１桁）場合、データ入力バッファは、キュースケジュールとして機能し得る。例えば、データ入力バッファ３０４は、記憶装置制御エンジン１０８が、キュースケジュール内のデータブロックに対応する位置に基づいてデータブロックを処理するように、複数のクライアントデバイスに関連付けられた１つ又は複数のデータブロックをキューに入れるキュースケジュールを含み得る。
【００７１】
署名指紋計算エンジン３０６は、データストリームに関連付けられたデータブロックの識別子を生成し分析するソフトウェア、コード、論理、又はルーチンである。一実施形態では、署名指紋計算エンジン３０６は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、署名指紋計算エンジン３０６は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、署名指紋計算エンジン３０６は、プロセッサ２０４及びデータ縮小ユニット２１０の他の構成要素を含む計算デバイス２００の他の構成要素と協働し通信するように構成される。
【００７２】
一実施形態では、署名指紋計算エンジン３０６は、分析のために１つ又は複数のデータブロックを含むデータストリームを受信する。署名指紋計算エンジン３０６は、データストリームの１つ又は複数のデータブロックのそれぞれの識別子を生成し得る。幾つかの実施形態では、署名指紋計算エンジン３０６は、１つ又は複数の参照データブロックを含む参照データセットの参照識別子を生成し得る。識別子は、データストリームの各データブロックに関連付けられた指紋及び／又はデジタル署名等であるが、これらに限定されない情報を含み得る。
【００７３】
署名指紋計算エンジン３０６は、本明細書の他の箇所で考察するように、入力データストリームのデータブロックに一致する１つ又は複数の参照データブロック及び／又は参照データセット（すなわち、１つ又は複数の参照データブロックを含む参照データセット）について、データストア（例えば、データ記憶装置リポジトリ１１０、２２０）を分析することにより、入力データストリームに関連付けられたデータブロックの識別子情報（例えば、デジタル署名、指紋等）に関連付けられた情報を分析し得る。例えば、署名指紋計算エンジン３０６は、入力データストリームのデータブロックの指紋を生成する。署名指紋計算エンジン３０６は次に、入力データストリームのデータブロックの指紋を分析して、記憶装置に記憶されている複数の参照データブロック及び／又は参照データセットに関連付けられた１つ又は複数の指紋と比較することにより、指紋を分析し、一致があるか否かを判断する。更なる実施形態では、署名指紋計算エンジン３０６は、更に処理するために、分析の結果を照合エンジン３０８に送信し得る。
【００７４】
照合エンジン３０８は、データ間の類似性を識別するソフトウェア、コード、論理、又はルーチンである。一実施形態では、照合エンジン３０８は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、照合エンジン３０８は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、照合エンジン３０８は、プロセッサ２０４及びデータ縮小ユニット２１０の他の構成要素を含む計算デバイス２００の他の構成要素と協働し通信するように構成される。データは、クライアントデバイスを介してアプリケーションによりレンダリングされるファイル、文書、電子メールメッセージに関連付けることができる１つ又は複数のデータブロック、参照データブロック、及び／又は参照データセットを含み得るが、これらに限定されない。
【００７５】
一実施形態では、照合エンジン３０８は、署名指紋計算エンジン３０６と協働して、類似性ベースアルゴリズムを適用し、入力データと記憶装置に前に記憶されたデータとの類似性を検出する。幾つかの実施形態では、照合エンジン３０８は、入力データに関連付けられた類似性ハッシュ（例えば、ハッシュスケッチ）と、記憶装置に前に記憶されたデータに関連付けられた類似性ハッシュ（例えば、ハッシュスケッチ）とを比較することにより、入力データと前に記憶されたデータとの類似性を識別する。類似性ハッシュは、指紋計算エンジン３０６により生成された識別子に関連付けられた情報の部分であることができる。
【００７６】
類似性ベースアルゴリズムを使用して、入力データストリームのデータブロックの類似性ハッシュと、参照データセットに関連付けられた類似性ハッシュとの類似性を検出することができる。更なる実施形態では、類似性ハッシュは、データブロック及び／又は参照データセットに関連付けられた内容のスケッチを反映し得る。例えば、スケッチは、参照データセットの参照データブロック及び／又は入力データストリームのデータブロックセットがわずかに変更される場合、維持される傾向がある参照データセット／データブロック内の最大値から生成することができる。したがって、入力データストリームのデータブロックが、既存の参照データセットに対応する類似性ハッシュ（例えば、ハッシュスケッチ）に基づいて類似する場合、符号化エンジン３１０に送信して、本明細書の他の箇所で考察するように、既存の参照データセットに相対して入力データストリームのデータブロックを符号化する。
【００７７】
他の実施形態では、照合エンジン３０８は、類似性ベースアルゴリズムをデータストアに記憶されている１つ又は複数の参照データブロックに適用して、参照データブロックから参照データセットを生成する。例えば、記憶装置内の参照データブロックが、対応する類似性ハッシュ（例えば、ハッシュスケッチ）等の基準に基づいて互いと類似する場合、参照データブロックは、本明細書の他の箇所で考察するように、参照データセットに集約することができる。
【００７８】
符号化エンジン３１０は、データを符号化するソフトウェア、コード、論理、又はルーチンである。一実施形態では、符号化エンジン３１０は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、符号化エンジン３１０は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、符号化エンジン３１０は、プロセッサ２０４及びデータ縮小ユニット２１０の他の構成要素を含む計算デバイス２００の他の構成要素と協働し通信するように構成される。
【００７９】
一実施形態では、符号化エンジン３１０は、データストリームに関連付けられたデータブロックを符号化する。データストリームにはファイルを関連付けることができ、ここで、データストリームのデータブロックは、ファイルの内容定義チャンクである。幾つかの実施形態では、符号化エンジン３１０は、データブロックを含むデータストリームを受信し、データ記憶装置リポジトリ１１０等であるが、これに限定されない非一時的データストアに記憶されている参照データセットを使用することにより、データストリームの各データブロックを符号化する。
【００８０】
符号化エンジン３１０は、計算デバイス２００の１つ又は複数の他の構成要素と協働して、参照データセットの識別子に関連付けられた情報と、データブロックの識別子に関連付けられた情報との類似性に基づいて、データブロックを符号化するための参照データセットを決定することができる。識別子情報は、データブロック／参照データセットの内容、内容バージョン（例えば、改訂）、内容への変更に関連付けられたカレンダー日付け、データサイズ等の情報を含み得る。更なる実施形態では、データストリームのデータブロックの符号化は、データストリームのデータブロックに符号化アルゴリズムを適用することを含み得る。符号化アルゴリズムの非限定的な例としては、重複排除／圧縮アルゴリズムを挙げ得るが、これに限定されない。一実施形態では、符号化エンジン３１０は、データストリームの符号化データブロックを圧縮バッファ３１６及び／又はデータ出力バッファ３１８に送信し得る。
【００８１】
他の実施形態では、符号化エンジン３１０は、参照データセットに基づいてデータブロックセットを符号化し、それと同時に、参照データブロックのサブセットを含む新しい参照データセット及びデータストリームに関連付けられたデータブロックセットを生成し得る。新しい参照データセットの参照データブロックのサブセットには、本明細書の他の箇所で考察されるように、データストアに現在記憶されている対応する参照データセットを関連付けることができる。
【００８２】
圧縮ハッシュテーブルモジュール３１２は、符号化データブロックに関連付けられた情報を更新するソフトウェア、コード、論理、又はルーチンである。一実施形態では、圧縮ハッシュテーブルモジュール３１２は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、圧縮ハッシュテーブルモジュール３１２は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、圧縮ハッシュテーブルモジュール３１２は、プロセッサ２０４及びデータ縮小ユニット２１０の他の構成要素を含む計算デバイス２００の他の構成要素と協働し通信するように構成される。
【００８３】
幾つかの実施形態では、圧縮ハッシュテーブルモジュール３１２はバケットアレイを含み得る。バケットアレイは、バケットアレイ内部にデータブロック、参照データブロック、及び参照データセットを含むフラッシュ記憶装置等の記憶装置に関連付けられた記憶装置アレイであることができる。バケットアレイは有限サイズを有するアレイであることができる。更なる実施形態では、圧縮ハッシュテーブルモジュール３１２は、ハッシュ関数を使用してデータを記憶する。データは、入力データストリームのデータブロック、参照データセットの参照データブロック等を含み得るが、これらに限定されない。圧縮ハッシュテーブルモジュール３１２は、一実施形態では、ハッシュテーブルにデータを記憶するために、データに対してハッシュ関数アルゴリズムを使用する。他の実施形態では、ハッシュテーブルは、データ記憶装置リポジトリ１１０等であるが、これに限定されない記憶装置に記憶、検索、及び保持することができる。
【００８４】
一実施形態では、圧縮ハッシュテーブルモジュール３１２は、本明細書の他の箇所で考察するように、符号化データブロックの参照データポインタ（例えば、識別子）を生成し得る。符号化データブロックに関連付けられた参照データポインタは、データブロックの符号化に使用された、データストアに記憶されている対応する参照データセットを参照し得る。更なる実施形態では、参照データポインタは、システム１００の１つ又は複数の他の構成要素により保持することができる。１つ又は複数の符号化データブロックに関連付けられた参照データポインタは、後に記憶装置（例えば、データ記憶装置リポジトリ１１０）から対応する参照データブロック及び／又は参照データセットを参照及び／又は検索するために使用し得、参照データセット及び／又は参照データブロックを使用して、受信データストリームに関連付けられた各データブロック及び／又はデータブロックセットを再構築するために使用し得る。
【００８５】
参照ハッシュテーブルモジュール３１４は、参照データブロックに関連付けられた情報を更新するソフトウェア、コード、論理、又はルーチンである。一実施形態では、参照ハッシュテーブルモジュール３１４は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、参照ハッシュテーブルモジュール３１４は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、参照ハッシュテーブルモジュール３１４は、プロセッサ２０４及びデータ縮小ユニット２１０の他の構成要素を含む計算デバイス２００の他の構成要素と協働し通信するように構成される。
【００８６】
幾つかの実施形態では、参照ハッシュテーブルモジュール３１４は、データ記憶装置リポジトリ１１０に記憶されているレコードテーブルを更新し、ここで、レコードテーブルは、符号化データブロックを対応する参照データセットに関連付ける。他の実施形態では、参照ハッシュテーブルモジュール３１４は、参照データセットに関連付けられたポインタを更新する。参照データセットに関連付けられたポインタは、参照データセットについてのグローバル情報及び参照データセットをポイントするデータブロックの総数等であるが、これらに限定されない情報を含み得る。参照ハッシュテーブルモジュール３１４の追加の機能は、本開示全体を通して考察される。
【００８７】
圧縮バッファ３１６は、圧縮データストリームを一時的に記憶する論理又はルーチンである。一実施形態では、圧縮バッファ３１６は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、圧縮バッファ３１６は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、圧縮バッファ３１６は、プロセッサ２０４及びデータ縮小ユニット２１０の他の構成要素を含む計算デバイス２００の他の構成要素と協働し通信するように構成される。
【００８８】
一実施形態では、圧縮ハッシュテーブルモジュール３１２は、符号化参照データブロックを更に処理するために、符号化（例えば、圧縮／縮小）参照データブロックを符号化エンジン３１０から検索する。幾つかの実施形態では、符号化エンジン３１０は、符号化参照データブロックを圧縮バッファ３１６に送信して、一時的に記憶し得る。符号化参照データブロックを圧縮バッファ３１６に一時的に記憶することにより、符号化参照データブロックの受信と符号化参照データブロックの更なる処理との間にシステム安定性が提供される。幾つかの実施形態では、符号化エンジン３１０は、参照データセットを符号化し、符号化参照データセットを圧縮バッファ３１６に送信する。他の実施形態では、符号化エンジン３１０は、データストリームに関連付けられた１つ又は複数のデータブロックを符号化し、符号化データブロックを圧縮バッファ３１６に送信し、一時的に記憶する。圧縮バッファ３１６は、計算デバイス２００の１つ又は複数構成要素による処理のために、１つ又は複数の参照データブロック、参照データセット、及び／又はデータブロックを内部に含み得るキューであることができる。
【００８９】
データ出力バッファ３１８は、処理されたデータストリームを一時的に記憶する論理又はルーチンである。一実施形態では、データ出力バッファ３１８は、プロセッサ２０４により実行可能な命令セットである。別の実施形態では、データ出力バッファ３１８は、メモリ２０６に記憶され、プロセッサ２０４によりアクセス可能及び実行可能である。何れの実施形態でも、データ出力バッファ３１８は、プロセッサ２０４及びデータ縮小ユニット２１０の他の構成要素を含む計算デバイス２００の他の構成要素と協働し通信するように構成される。
【００９０】
一実施形態では、圧縮ハッシュテーブルモジュール３１２及び／又は参照ハッシュテーブルモジュール３１４は、符号化（例えば、圧縮／縮小）データストリームを符号化エンジン３１０から受信する。幾つかの実施形態では、符号化エンジン３１０は、符号化データストリームをデータ出力バッファ３１８に送信して、一時的に記憶し得る。符号化データストリームは、１つ又は複数の参照データブロック、参照データセット、及び／又は現在のデータブロックを含み得るが、これらに限定されない。更に、符号化データストリームをデータ出力バッファ３１８に記憶することにより、符号化データストリームの受信と符号化データストリームの更なる処理との間のシステム交換安定性が届けられる。幾つかの実施形態では、データ出力バッファ３１８は、計算デバイス２００の１つ又は複数の構成要素による、１つ又は複数の参照データブロック、参照データセット、及び／又はデータブロックの更なる処理が計画されるキューであることができる。
【００９１】
図４は、参照データセットを生成する例としての方法４００のフローチャートである。方法４００は、非一時的データストアから参照データブロックを検索すること（４０２）により開始し得る。幾つかの実施形態では、データ受信モジュール２０８は、参照データブロックを非一時的データストア（例えば、フラッシュメモリ、データ記憶装置リポジトリ１１０／２２０）から受信する。
【００９２】
次に、方法４００は、基準に基づいて参照データブロックをセットに集約する（４０４）ことにより続き得る。幾つかの実施形態では、データ縮小ユニット２１０は、参照データブロックをデータ受信モジュール２０８から受信し、そこから機能を実行し得る。基準は、参照データブロック間のある程度の類似を含み得るが、これに限定されない。例えば、参照データブロックにファイルを関連付けることができ、ここで、ファイルは、内容定義チャンクに分割され、参照データブロックの各参照ブロックに内容定義チャンクが関連付けられる。一実施形態では、参照データブロックは、対応する参照データブロック間のファイルの内容定義チャンクに基づいて、ある程度の類似性を共有する。
【００９３】
一実施形態では、ある程度の類似性には、生成され、各参照データブロックに割り当てられた類似性ハッシュ（例えば、デジタル署名及び／又は指紋）であるが、これに限定されない識別子を関連付けることができる。類似性ハッシュは、より長いデータストリングから生成される小さい数字であることができるハッシュ値を含み得る。ハッシュ値のデータサイズは、参照データブロックよりも大幅に小さくすることができる。幾つかの実施形態では、類似性ハッシュは、２つの参照データブロックが厳密に一致するハッシュ値を有する可能性が低いように、アルゴリズムにより生成される。また、参照データブロックに関連付けられる識別子は、例えば、データ記憶装置リポジトリ１１０内のデータベースのテーブルに記憶することができる。
【００９４】
更なる実施形態では、署名指紋計算エンジン３０６は、照合エンジン３０８と協働して、データストアに問い合わせ、各参照データブロックに関連付けられた類似性ハッシュを比較し、対応する類似性ハッシュのコピーがデータストアに既に存在するか否かを判断することにより、基準に基づいて１つ又は複数の参照データブロックを集約し得る。幾つかの実施形態では、照合エンジン３０８は、類似性が一致する類似性ハッシュを共有する１つ又は複数の参照データブロックを集約し得る。例えば、２つの参照データブロック（例えば、参照データブロックＡ及び参照データブロックＢ）に文書を関連付けることができるが、参照データブロックＡは文書の初期のバージョンを反映し、一方、参照データブロックＢは、変更を有する文章の後のバージョンを反映する。したがって、参照データブロックＡ及び参照データブロックＢは、文書に関連付けられた内容のある程度の類似性を共有しているため、セットに集約することができる。幾つかの実施形態では、ステップ４０４での動作は、本明細書の他の箇所で考察するように、システム１００の１つ又は複数の他のエンティティと協働して、署名指紋計算エンジン３０６及び照合エンジン３０８により実行することができる。
【００９５】
次に、方法４００は、セットに基づいて参照データセットを生成すること（４０６）により進み得る。セットは、１つ又は複数の参照データブロックの類似性ハッシュ間にある程度の類似性を共有する参照データブロックを含み得るが、これに限定されない。一実施形態では、符号化エンジン３１０は、集約参照データブロックを受信し、集約参照データブロックに基づいて参照データセットを生成し得る。参照データセットのうちの参照データブロックは、将来の入力データブロックのモデルとして、参照データセットを含むモデルを使用して、将来の入力データブロックを符号化することにより、機能する。このモデルベースの手法は、例えば、データ記憶装置リポジトリ１１０の記憶装置１１２ａ〜１１２ｎに記憶される総量を低減させ得る。幾つかの実施形態では、ステップ４０６での動作は、本明細書の他の箇所で考察するように、システム１００の１つ又は複数の他のエンティティと協働して、署名指紋計算エンジン３０６及び照合エンジン３０８によって実行することができる。
【００９６】
方法４００は次に、参照データセットを非一時的データストア（例えば、フラッシュメモリ、データ記憶装置リポジトリ１１０／２２０）に記憶すること（４０８）により続き得る。幾つかの実施形態では、上述したことは、更に後述するように、入力データストリームのデータブロックに関連して適用することができる。幾つかの実施形態では、ステップ４０８での動作は、本明細書の他の箇所で考察するように、データ出力バッファ３１８及び／又はシステム１００の１つ又は複数の他のエンティティと協働して、符号化エンジン３１０により実行することができる。
【００９７】
図５は、データブロックを参照データセットに集約する例としての方法５００のフローチャートである。方法５００は、データブロックセットを含むデータストリームを受信すること（５０２）により開始し得る。幾つかの実施形態では、データ受信モジュール２０８は、データストリームをクライアントデバイス１０２から受信し、データストリームをデータ入力バッファ３０４に送信して、そこから動作を実行する。データブロックセットを含むデータストリームは、文書、電子メール、クライアントデバイス１０２により実行されレンダリングされるアプリケーション（例えば、メディアアプリケーション、ゲーミングアプリケーション、文書編集アプリケーション等）等に関連し得るが、これらに限定されない。例えば、データストリームはファイルに関連し得、ここで、データストリームのデータブロックは、ファイルの内容定義チャンクである。幾つかの実施形態では、ステップ５０２において実行される動作は、システム１００の１つ又は複数の他のエンティティと協働してデータ受信モジュール２０８により実行し得る。
【００９８】
次に、方法５００は、データブロックセットの各データブロックを符号化すること（５０４）により続く。幾つかの実施形態では、符号化エンジン３１０は、署名指紋計算エンジン３０６及び／又は照合エンジン３０８と協働して、データ記憶装置リポジトリ１１０等であるが、これに限定されない非一時的データストアに記憶されている参照データセットを使用して、データブロックセットのうちの各データブロックを符号化する。更に、データブロックセットのうちの各データブロックを符号化することは、符号化アルゴリズムを含み得る。符号化アルゴリズムの非限定的な例としては重複排除／圧縮を実施するプロプライエタリ符号化アルゴリズムを含み得る。
【００９９】
例えば、符号化エンジン３１０は、符号化アルゴリズムを利用して、データストリームに関連付けられたデータブロックセットのうちの各データブロックと、データストア（例えば、データ記憶装置リポジトリ１１０）に記憶されている参照データセットとの類似性を識別し得る。類似性は、データ内容（例えば、各データブロックの内容定義チャンク）、及び／又はデータブロックセットの各データブロック及びデータ内容に関連付けられた識別子情報、及び／又は参照データセットに関連付けられた識別子情報間のある程度の類似性を含み得るが、これらに限定されない。
【０１００】
幾つかの実施形態では、署名指紋計算エンジン３０６及び／又は照合エンジン３０８は、類似性ベースアルゴリズムを使用して、類似するデータブロック及び参照データセットが類似する類似性ハッシュ（例えば、スケッチ）を有する属性を有する類似性ハッシュ（例えば、スケッチ）を検出することができる。したがって、データブロックセットが、対応する類似性ハッシュ（例えば、スケッチ）に基づいて、記憶装置に記憶されている既存の参照データセットに類似する場合、既存の参照データセットに相対して符号化することができる。符号化エンジン３１０は次に、データブロックセットの符号化データブロックを圧縮バッファ３１６及び／又はデータ出力バッファ３１８に送信し得る。幾つかの実施形態では、ステップ５０４において実行される動作は、データ縮小ユニット２１０及び／又はシステム１００の１つ又は複数の他のエンティティと協働して、符号化エンジン３１０により実行し得る。
【０１０１】
方法は次に、データブロックセットの各符号化データブロックを対応する参照データセットに関連付けるレコードテーブルを更新すること（５０６）により続き得る。一実施形態では、符号化エンジン３１０は、データブロックセットの符号化データブロックを圧縮ハッシュテーブルモジュール３１２及び／又は参照ハッシュテーブルモジュール３１４に送信して、そこから動作を実行し得る。圧縮ハッシュテーブルモジュール３１２及び／又は参照ハッシュテーブルモジュール３１４は、データ記憶装置リポジトリ１１０に記憶されているレコードテーブルを更新し得、ここで、レコードテーブルは、各符号化データブロックを記憶装置（すなわち、データ記憶装置リポジトリ１１０）に記憶されている対応する参照データに関連付ける。
【０１０２】
一実施形態では、圧縮ハッシュテーブルモジュール３１２は、符号化データブロックの参照データポインタを生成し得る。符号化データブロックに関連付けられた参照データポインタは、データブロックの符号化に使用された、データストアに記憶されている対応する参照データセットを参照し得る。幾つかの実施形態では、参照データポインタは、データストア内のレコードテーブルに記憶されている参照データセットの対応する識別子にリンクし得る。更なる実施形態では、１つ又は複数の符号化データブロックは、データブロックセットの１つ又は複数の符号化データブロックの符号化に使用された対応する参照データセットを参照する同じ参照データポインタを共有し得る。ステップ５０６において実行される動作は、データ縮小ユニット２１０及び／又はシステム１００の１つ又は複数の他のエンティティと協働して、符号化エンジン３１０、及び／又は圧縮ハッシュテーブルモジュール３１２、及び／又は参照ハッシュテーブルモジュール３１４により実行し得る。
【０１０３】
方法５００は次に、符号化データブロックセットを非一時的データストア（例えば、フラッシュメモリ、データ記憶装置リポジトリ１１０／２２０）に記憶すること（５０８）により続き得る。記憶される符号化データブロックセットは、幾つかの実施形態では、セットのうちのデータブロックの符号化に使用された参照データセットの縮小版（例えば、データサイズがより小さいもの）であることができる。例えば、データブロックの縮小版は、データブロックに関連付けられたヘッダ（例えば、参照ポインタ）及び圧縮／重複排除データ内容を含み得る。幾つかの実施形態では、ステップ５０８における動作は、本明細書の他の箇所で考察するように、データ出力バッファ３１８及び／又はシステム１００の１つ又は複数の他のエンティティと協働して、符号化エンジン３１０により実行し得る。
【０１０４】
図６Ａ〜図６Ｃは、データストリームが変化した場合、参照ブロックを参照データセットに集約する方法例のフローチャートである。これより図６Ａを参照すると、方法６００は、新しいデータブロックセットを含むデータストリームを受信すること（６０２）により開始し得る。新しいデータブロックセットは、文書、電子メール添付物等の内容データ及びクライアントデバイス（クライアントデバイス１０２）により実行されレンダリングされるアプリケーションに関連付けられた情報を含み得るが、これらに限定されない。一実施形態では、新しいデータブロックセットは、データ記憶装置リポジトリ１１０及び／又は２２０に記憶されている現在の参照データセットにまだ記憶されておらず、及び／又は関連付けられていないデータを示す。幾つかの実施形態では、ステップ６０２において実行される動作は、データ入力バッファ３０４及び／又はデータ縮小ユニット２１０の１つ又は複数の他のエンティティと協働して、データ受信モジュール２０８により実行し得る。
【０１０５】
次に、方法６００は、データストリームに関連付けられた新しいデータブロックセットに対して分析を実行すること（６０４）により進み得る。幾つかの実施形態では、分析は、署名指紋計算エンジン３０６により実行することができる。例えば、データ受信モジュール２０８は、新しいデータブロックセットを署名指紋計算エンジン３０６に送信し得る。署名指紋計算エンジン３０６は、データストリームの受信を受けて、新しいデータブロックセットの内容に対して分析を実行し得る。更に、分析は、新しいデータブロックセットの内容を抽象的に反映する内容を特定し、及び／又は新しいデータブロックセットの各データブロックの識別子（例えば、指紋、ハッシュ値）を生成する１つ又は複数のアルゴリズムを含み得る。新しいデータブロックセットの内容を特定するアルゴリズムの非限定的な例としては、対応する指紋の中で少なくとも重複を有するブロックの集合を使用するアルゴリズムを挙げ得るが、これに限定されない。別の実施形態では、新しいデータブロックセットの内容を特定するアルゴリズムは、入力データブロックの指紋を統計学的にクラスタ化し、各クラスタから１つの代表データブロックを識別することを含み得る。
【０１０６】
更なる実施形態では、指紋計算エンジン３０６は、一般識別子（例えば、一般指紋又は一般デジタル署名）を新しいデータブロックセットに割り当て得る。一般識別子には、ハッシュアルゴリズムを使用して生成することができるハッシュ値を関連付けることができる。指紋計算エンジン３０６は、新しいデータブロックセットの重複データ部分を検出し、重複データを集約し、集約重複データにハッシュ値に関連付けて一般識別子を割り当てる。幾つかの実施形態では、ハッシュ値は、新しいデータブロックセットの各データブロックを排他的に及び／又はセット（すなわち、新しいデータブロックセット）を排他的に識別するデジタル指紋又はデジタル署名であることができる。更なる実施形態では、新しいデータブロックセットを含むデータストリームに関連付けられた識別子は、例えば、データ記憶装置リポジトリ１１０内のデータベースのテーブルに記憶することができる。
【０１０７】
更に、類似性ハッシュは、冗長性について新しいデータブロックセットを分析するために、照合エンジン３０８と協働して指紋計算エンジン３０６により使用することができる。一実施形態では、２つ以上のデータブロックに関連付けられた類似性ハッシュが、所定の範囲（例えば、０〜１）を満たす場合、それら２つ以上のデータブロックは類似すると判断される。例えば、類似性ハッシュは、類似性ハッシュが１に近い場合、２つ以上のデータブロック間の内容が概ね同じであるように、０〜１の数字であることができる。更なる実施形態では、類似性ハッシュは、新しいデータブロックセットに関連付けられたデータブロックの小さいスケッチであることができる。更に、新しいデータブロックセットの分析は、データ記憶装置リポジトリ１１０の分析を含む指紋計算エンジン３０６及び／又は照合エンジン３０８により実行される類似性ベースの照合アルゴリズムを含み得る。データ記憶リポジトリ１１０の分析は、新しいデータブロックセットの類似性ハッシュをデータ記憶装置リポジトリ１１０に記憶されている１つ又は複数の参照データセットに関連付けられた類似性ハッシュと比較することを含み得る。幾つかの実施形態では、ステップ６０４における動作は、データ縮小ユニット２１０の１つ又は複数の他のエンティティと協働して署名指紋計算エンジン３０６により実行し得る。
【０１０８】
方法６００は次に、新しいデータブロックセットと少なくとも１つ又は複数の参照データセットとの間に類似性が存在するか否かを識別すること（６０６）により続き得る。幾つかの実施形態では、照合エンジン３０８は、署名指紋計算エンジン３０６と協働して、分析に基づいて、新しいデータブロックセットと非一時的データストアに記憶されている１つ又は複数の参照データセットとの間に類似性が存在するか否かを識別し得る。例えば、照合エンジン３０８は、データ記憶装置リポジトリ１１０等のデータストアに記憶されている１つ又は複数の参照データセット及び／又は参照データセットのセグメントの類似性ハッシュを新しいデータブロックセットに関連付けられた類似性ハッシュと比較し得る。幾つかの実施形態では、ステップ６０６における動作は、データ縮小ユニット２１０の１つ又は複数の他のエンティティと協働して照合エンジン３０８により実行し得る。方法６００は６０８に進み、６０６において実行された動作に基づいて、類似性が存在するか否かを判断し得る。
【０１０９】
類似性が存在する場合、方法６００は６１０に進み得る。例えば、照合エンジン３０８は、新しいデータブロックセットの類似性ハッシュが、データストア（例えば、データ記憶装置リポジトリ１１０）に記憶されている１つ又は複数の参照データセットとある程度の類似性を共有していると判断し得る。次に、方法６００は、類似性ハッシュに基づいてデータストア（例えば、フラッシュメモリ、データ記憶装置リポジトリ１１０／２２０）に記憶されている対応する参照データセットを使用して、新しいデータブロックセットの各データブロックを符号化し得る（６１０）。
【０１１０】
例えば、符号化エンジン３１０は、記憶装置コントローラユニット１０６の１つ又は複数の他の構成要素と協働して、新しいセットのうちのデータブロックが、類似性ハッシュに基づいて、記憶装置内に記憶されている参照データセットのデータブロックとの類似性を有すると判断し得る。類似性ハッシュは、データブロックのスケッチ及び参照データブロックのスケッチを表し得、スケッチ間の類似性の程度に基づいて、新しいデータセットのデータブロックと記憶装置内の参照データブロックとの内容が類似しているか否かを判断することができる。一実施形態では、照合エンジン３０８は、新しいデータブロックセットの類似性ハッシュと、１つ又は複数の参照データセットの類似性ハッシュとの間の類似性の一致を示す情報を符号化エンジン３１０に送信する。
【０１１１】
符号化エンジン３１０は、照合エンジン３０８から受信した情報に基づいて、新しいデータブロックセットの各データブロックを符号化し得る（６１０）。幾つかの実施形態では、新しいデータブロックセットは、データブロックのチャンクにセグメント化することができ、データブロックのチャンクは排他的に符号化し得る。一実施形態では、符号化エンジン３１０は、符号化アルゴリズム（例えば、重複排除／圧縮アルゴリズム）を使用して、新しいデータブロックセットの各データブロックを符号化し得る。符号化アルゴリズムは、デルタ符号化、類似性符号化、デルタ自己圧縮を含み得るが、これらに限定されない。
【０１１２】
更に、参照データセットとある程度の類似性を共有するデータブロックを符号化することは、符号化エンジン３１０が、新しいデータブロックセットの対応する各データブロックのポインタを生成して割り当てることを含み得る。記憶装置制御エンジン１０８は将来、データブロックを再生成するために、記憶装置（例えば、データ記憶装置リポジトリ１１０／２２０）から対応するデータブロック及び／又はデータブロックセットを参照及び／又は検索するに当たりポインタを使用することができる。一実施形態では、１つ又は複数のデータブロックは同じポインタを共有し得る。例えば、新しいデータブロックセットの１つ又は複数のデータブロックは、１つ又は複数のデータブロックをデータ記憶装置リポジトリ１１０／２２０に独立して記憶する代わりに、データ記憶装置リポジトリ１１０／２２０に記憶された同じ参照データセットを参照し得、符号化エンジン３１０は、同じ参照データセットを参照するポインタ（例えば、参照データポインタ）を含む１つ又は複数のデータブロックの圧縮版を記憶する。別の実施形態では、新しいデータブロックセットが既存の参照データセットと類似する場合、符号化エンジン３１０は、参照データブロックと符号化された新しいデータブロックセットとの差を示すデルタを記憶し得る。ステップ６１０における動作は、圧縮バッファ３１６及びデータ縮小ユニット２１０の１つ又は複数の他のエンティティと協働して符号化エンジン３１０により実行し得る。
【０１１３】
方法６００は次に、新しいデータブロックセットの各符号化データブロックを、参照データセットに関連付けられた対応する参照データブロックに関連付けるレコードテーブルを更新すること（６１２）により進み得る。一実施形態では、圧縮ハッシュテーブルモジュール３１２は、符号化データブロックを受信し、データストア（例えば、データ記憶装置リポジトリ１１０／２２０）に記憶されているレコードテーブル内の各符号化データブロックの１つ又は複数のポインタを更新する。他の実施形態では、圧縮ハッシュテーブルモジュール３１２は、符号化データブロックセットを受信し、データストア（例えば、データ記憶装置リポジトリ１１０／２２０）に記憶されているレコードテーブル内の符号化データブロックに関連付けられたポインタを更新する。１つ又は複数の符号化データブロックに関連付けられたポインタは、後に使用されて、記憶装置（例えば、データ記憶装置リポジトリ１１０／２２０）から対応する参照データブロック及び／又は参照データセットを参照及び／又は検索し得、受信データストリームに関連付けられた各データブロック及び／又はデータブロックセットを再構築するのに使用し得る。
【０１１４】
次に、方法６００は、参照データセットを使用しての新しいデータブロックセットの各データブロックの符号化に基づいて、参照データセットの使用カウント変数をインクリメントすること（６２２）により、図６Ａのブロック６１２から図６Ｃのブロック６２２に続く。一実施形態では、参照ハッシュテーブルモジュール３１４は、符号化エンジン３１０から、１つ又は複数の参照データセットが、新しいデータブロックセットを含むデータストリームに関連付けられた１つ又は複数のデータブロック及び／又はデータブロックセットの符号化に使用されたことのインジケータを受信する。次に、参照ハッシュテーブルモジュール３１４は、各データブロック及び／又はデータブロックセットを対応する参照データセットに記録し、対応する参照データセットの使用カウント変数をインクリメントし得る。使用カウント変数は、記憶装置内の特定の参照データセットを参照する（例えば、ポインタを使用して記憶装置内の参照データセットをポイントする）データブロック及び／又はデータブロックセットの数を示し得る。幾つかの実施形態では、ステップ６２２における動作は、参照ハッシュテーブルモジュール３１４、更新モジュール２１８、及び／又はデータ縮小ユニット２１０の１つ又は複数の他のエンティティと協働して、符号化エンジン３１０により実行し得る。
【０１１５】
方法６００は、参照データセットに関連付けられた使用カウント変数に基づいて、参照データセットがリタイア要件を満たすか否かを分析すること（６２４）により進み得る。一実施形態では、参照ハッシュテーブルモジュール３１４は、参照データセットが、所定の持続時間にわたり、１つ又は複数のデータブロック及び／又はデータブロックセットにより参照されていないと判断し得る。したがって、参照データセットの参照データブロックが、所定の持続時間にわたり、データブロックの再生成にもはや呼び出されていない場合、その参照データセットに関連付けられた使用カウント変数は変更（すなわち、デクリメント）される。所定の持続時間は、デフォルトにより割り当てられ、及び／又は管理者により定義される閾値を含み得る。一実施形態では、参照ハッシュテーブルモジュール３１４は、使用カウントリタイアアルゴリズム（例えば、ガベージコレクションアルゴリズム）を記憶装置に記憶されている各参照データセットに提供する。使用カウントリタイアアルゴリズムは自動的に、所定の持続時間が満たされ、参照データセットが、所定の持続時間中、データストリームに関連付けられた１つ又は複数のデータブロック又はデータブロックセットにより参照されなかった後、参照データセットに関連付けられた使用カウント変数のカウントをデクリメント及び／又はインクリメントし得る。他の実施形態では、使用カウントリタイアアルゴリズムは、データ呼び出しに関連付けられている参照データセットに応答して、その参照データセットの使用カウント変数に関連付けられたカウントをインクリメントし得る。データ呼び出しは、１つ又は複数のデータブロックの再構築に必要であり得る文書をレンダリングする、クライアントデバイス１０２による要求を示し得る。ステップ６２４における動作は任意選択的であり得、符号化エンジン３１０及びデータ縮小ユニット２１０の１つ又は複数の他のエンティティと協働して、参照ハッシュテーブルモジュール３１４により実行し得る。
【０１１６】
方法６００は次に、６２６に進み、対応する参照データセットのリタイアが満たされるか否かを判断し得る。参照データセットがリタイア要件を満たす場合、方法６００は、使用カウント変数に基づいて、リタイア要件を満たす参照データセットをリタイアさせること（６２８）により進み得る。一実施形態では、参照ハッシュテーブルモジュール３１４は、特定の閾値までデクリメントされた使用カウント変数に基づいて、参照データセットがリタイア要件を満たすと判断する。幾つかの実施形態では、参照データセットの使用カウント変数のカウントがゼロにデクリメントされた場合、その参照データセットはリタイア要件を満たし得る。ゼロの使用カウント変数は、その対応する参照データセットに依存するデータブロック又はデータブロックセットがないことを示し得る。例えば、データブロックの元のバージョンを再構築するために、参照データセットに依存するデータブロック（例えば、圧縮／重複排除データブロック）はない。ステップ６２８における動作は、任意選択的であり得、データリタイアモジュール２１６及びデータ縮小ユニット２１０の１つ又は複数の他のエンティティと協働して、参照ハッシュテーブルモジュール３１４により実行し得る。次に、方法６００は終了し得る。
【０１１７】
しかし、ブロック６２６において、リタイア要件を満たす参照データセットがない場合、方法６００は、追加の入力データストリームが存在するか否かを判断すること（６３０）に進み得る。追加の入力データストリームがある場合、方法６００は図６Ａのステップ６０２に戻り得、その他の場合、方法６００は終了し得る。
【０１１８】
図６Ａのステップ６０８を再び参照すると、類似性が存在しない場合、方法６００は図６Ｂのブロック６１４に進み、基準に基づいて新しいデータブロックセットのデータブロックをセットに集約し得、ここで、データブロックは、記憶装置（例えば、データ記憶装置リポジトリ１１０）に現在記憶されている参照データセットと異なる。記憶装置に現在記憶されている参照データセットと異なるデータブロックは、記憶装置に記憶されている参照データセットに関連付けられた内容とは異なる内容が関連付けられたデータブロックを含み得る。基準は、各データブロックに関連付けられた内容、管理者により定義される規則、データブロック及び／又はデータブロックセットのデータサイズ考慮事項、各データブロックに関連付けられたハッシュの無作為選択等を含み得るが、これらに限定されない。例えば、データブロックセットは、予め定義された範囲内の対応する各データブロックのデータサイズに基づいて一緒に集約し得る。幾つかの実施形態では、１つ又は複数のデータブロックは、無作為選択に基づいて集約し得る。更なる実施形態では、複数の基準を集約に使用し得る。ステップ６１４における動作は、データクラスタ化モジュール２１４及び計算デバイス２００の１つ又は複数の他のエンティティと協働して、照合エンジン３０８により実行し得る。
【０１１９】
次に、方法６００は、非一時的データストア（例えば、データ記憶装置リポジトリ１１０／２２０）に現在記憶されている参照データセットと異なる新しいデータブロックセットのデータブロックを含むセットに基づいて、新しい参照データセットを生成すること（６１６）により続き得る。一実施形態では、照合エンジン３０８は、セットを符号化エンジン３１０に送信し、次に、符号化エンジン３１０は、基準を満たす１つ又は複数のデータブロックを含み得る新しい参照データセットを生成する。例えば、新しい参照データセットは、割り当てられた予め定義される範囲内であるデータサイズを満たす１つ又は複数のデータブロックに基づいて生成することができる。一実施形態では、符号化エンジン３１０は、１つ又は複数のデータブロックそれぞれ間である程度の類似性内にある内容を共有する１つ又は複数のデータブロックに基づいて、新しい参照データセットを生成する。幾つかの実施形態では、新しい参照データセットの生成に応答して、署名指紋計算エンジン３０６は、新しい参照データセットの識別子（例えば、指紋、ハッシュ値等）を生成し得る。ステップ６１６における動作は、データクラスタ化モジュール２１４及び計算デバイス２００の１つ又は複数の他のエンティティと協働して、照合エンジン３０８により実行することができる。
【０１２０】
次に、方法６００は、使用カウント変数を新しい参照データセットに割り当てること（６１８）により進み得る。一実施形態では、符号化エンジン３１０は、使用カウント変数を新しい参照データセットに割り当てる。新しい参照データセットの使用カウント変数は、データブロック又はデータブロックセットが新しい参照データセットを参照する回数に関連付けられたデータ呼び出し回数を示し得る。更なる実施形態では、使用カウント変数は、参照データセットに関連付けられたハッシュ及び／又はヘッダの部分であり得る。新しい参照データセットは、その使用カウント変数が特定の値（例えば、ゼロ）にデクリメントされる場合、リタイア要件を満たし得る。幾つかの実施形態では、管理者が初期カウントを使用カウント変数に割り当て得る。ステップ６１８における動作は、データリタイアモジュール２１６及びデータ縮小ユニット２１０の１つ又は複数の他のエンティティと協働して、参照ハッシュテーブルモジュール３１４により実行し得る。
【０１２１】
次に、方法６００は、新しい参照データセットを非一時的データストアに記憶し得る（６２０）。例えば、符号化エンジン３１０は、新しい参照データセットを生成し、データ記憶装置リポジトリ１１０及び／又は２２０に記憶し得る。次に、方法６００は、図６Ｃのブロック６３０に進み、追加の入力データストリームがあるか否かを判断し得る。追加の入力データストリームがある場合、方法６００は図６Ａのステップ６０２に戻り得、その他の場合、方法６００は終了し得る。
【０１２２】
図７は、パイプラインアーキテクチャにおいてデータブロックを符号化する例としての方法７００のフローチャートである。方法７００は、データブロックセットを含むデータストリームを受信すること（７０２）により開始し得る。例えば、データ受信モジュール２０８は、データブロックセットを含むデータストリームをクライアントデバイス（例えば、クライアントデバイス１０２）から受信する。幾つかの実施形態では、データストリームは、クライアントデバイスにより実行されレンダリングされる文書ファイル及び電子メール添付物等のコンテンツデータに関連し得るが、これに限定されない。更なる実施形態では、ステップ７０２における動作は、本明細書の他の箇所で考察するように、データ入力バッファ３０４及びシステム１００の１つ又は複数の他のエンティティと協働して、データ受信モジュール２０８により実行し得る。
【０１２３】
次に、方法７００は、参照データセットを非一時的データストアから検索すること（７０４）により続き得る。
【０１２４】
一実施形態では、照合エンジン３０８は、データストリームへの分析の実行に応答して、参照データセットを検索する。例えば、署名指紋計算エンジン３０６は、セットの各データブロックの内容及び／又はデータブロックセットに相互に関連付けられた内容を含むデータストリームの内容に対して分析を実行し得る。一実施形態では、分析は、指紋計算エンジン３０６により実行されるハッシュ値及び／又は指紋照合アルゴリズムを含み得、このアルゴリズムは、データブロックセットを含むデータストリームに関連付けられたハッシュ値及び／又は指紋を、データ記憶装置リポジトリ１１０に記憶されている１つ又は複数の参照データセットに関連付けられたハッシュ値及び／又は指紋と比較することを含む。幾つかの実施形態では、照合エンジン３０８は、データストリームに関連付けられた類似性ハッシュ（例えば、スケッチ）と、記憶装置に前に記憶された参照データセットに関連付けられた類似性ハッシュ（例えば、スケッチ）とを比較することにより、データストリームと記憶装置に前に記憶された参照データセットとの類似性を識別する。更なる実施形態では、ステップ７０４における動作は、照合エンジン３０８及びデータ縮小ユニット２１０の１つ又は複数の他のエンティティと協働して、署名指紋計算エンジン３０６により実行し得る。
【０１２５】
方法７００は、参照データセットに基づいてデータブロックセットを符号化すること（７０６）により進み得る。符号化は、重複排除、圧縮等のうちの１つ又は複数をデータに対して実行することによりデータを変更することを含み得るが、これに限定されない。幾つかの実施形態では、符号化エンジン３１０は、参照データセットに基づいてデータブロックセットを符号化し、それと同時に、データストリームに関連付けられた参照データブロックのサブセット及びデータブロックセットを含む新しい参照データセットを生成する。一実施形態では、参照データブロックのサブセットには、対応する参照データセットを関連付けることができる。例えば、データブロックセットを符号化する前、符号化エンジン３１０は、データ記憶装置リポジトリ１１０／２２０に記憶されている１つ又は複数の参照データセットを分析し得る。
【０１２６】
幾つかの実施形態では、参照データセットの分析は、１つ又は複数の予め定義される条件に基づき得る。例えば、予め定義される条件は、閾値回数を超えて（例えば、毎分、毎時、毎日、毎週、毎月、毎年）、元のデータブロック（すなわち、符号化前の元の状態に戻ったデータブロック又はデータブロックセット）を再構築するために、システム１００の少なくとも１つのエンティティによりデータ呼び出しされる（閾値を超えて）、参照データセット内部の使用頻度の高い参照データブロックを識別することを含み得る。幾つかの実施形態では、使用頻度の高い参照データブロックには、相対重要度を示すフラグを付けるか、又は識別子を割り当てることができる。識別子は、ポインタ、データブロックに関連付けられた情報を含むデータブロックに関連付けられたヘッダを含み得るが、これらに限定されない。更に、相対重要度は、参照データセットに関連付けられた、対応する参照データブロックが、データブロックを再構築するために、同じ参照データセットの部分である近傍参照データブロックと比較して、閾値を超えて利用されていることを示すことができる。
【０１２７】
次に、方法７００は、非一時的データストアに記憶されている参照データセットを使用して、データブロックセットを符号化すること（７０６）により続き得る。参照データセットを使用して符号化されるデータブロックセットは、データブロックセットに関連付けられた内容と参照データセットとの間である程度の類似性を共有する。一実施形態では、符号化エンジン３１０は、参照データセットに基づいて新しいデータブロックセットを符号化しながら、同時に、１つ又は複数の使用頻度の高い参照データブロック及びデータストリームの新しいデータブロックのサブセットを含む第２の参照データセットを生成する。更なる実施形態では、参照データブロックのサブセットは、所定量のデータブロックを含む。他の実施形態では、新しいデータブロックセットの符号化は、新しいデータブロックセットと参照データセットとの間でのある程度の類似性に基づく。
【０１２８】
更に、符号化エンジン３１０は、非一時的データストアに記憶されている１つ又は複数の参照データセットとある程度の類似性を共有するデータブロックセットを符号化しながら、同時に、１）記憶装置に現在記憶されている１つ又は複数の参照データセットとある程度の類似性を共有しない符号化データブロック及び２）記憶装置に記憶されている１つ又は複数の参照データセットに関連付けられた使用頻度の高い参照データブロックを含む新しい参照データセットを生成し得る。したがって、新しい参照データセットは、１）現在記憶されている１つ又は複数の参照データセットとある程度の類似性を共有しないデータブロック及び２）記憶装置に記憶されている１つ又は複数の参照データセットに関連付けられた使用頻度の高い参照データブロックの両方を含む。参照ブロックはデータストリームを抽象的に表すため、これは、変化するデータストリームに新しい参照データセットを能動的に構築するに当たり、システム１００をサポートするように機能する。参照データブロックは、データストリームを抽象的に表すため、データストリームの性質が変化するにつれて、参照ブロックセットも経時変化し、幾つかのブロックは参照セットのメンバでなくなり、新しいブロックが追加される間、新しい参照セットを生成することが予期される。したがって、参照セットが入力データストリームの良好な表現であるか否かを判断する重要な尺度、参照セットを能動的に管理することが重要である。そうしなければ、システムは、記憶装置に記憶された陳腐化データを含むことになり得、入力関連データを記憶する容量が少なくなり得る。幾つかの実施形態では、ステップ７０６における動作は、照合エンジン３０８、符号化エンジン３１０、及びデータ縮小ユニット２１０の１つ又は複数の他のエンティティと協働して、署名指紋計算エンジン３０６により実行し得る。
【０１２９】
次に、方法７００は、データブロックセット及び新しい参照データセットを非一時的データストアに記憶し得る（７０８）。
【０１３０】
一実施形態では、圧縮ハッシュテーブルモジュール３１２及び参照ハッシュテーブルモジュール３１４は、データブロックセット及び／又は新しい参照データセットを参照し検索するために、データブロックセット及び新しい参照データセットに関連付けられた対応する識別子を更新し、及び／又はテーブルに記憶し得る。幾つかの実施形態では、符号化エンジン３１０は、圧縮バッファ３１６及びデータ出力バッファ３１８と協働して、データブロックセット及び新しい参照データセットをデータ記憶装置リポジトリ１１０／２２０に記憶する。
【０１３１】
図８Ａ及び図８Ｂは、パイプラインアーキテクチャにおいて参照データセットを生成する方法例のフローチャートである。これより図８Ａを参照すると、方法８００は、データブロックセットを受信すること（８０２）により開始し得る。一実施形態では、データ受信モジュール２０８は、データ入力バッファ３０４と協働して、データブロックセットを１つ又は複数のクライアントデバイス（例えば、クライアントデバイス１０２）から受信する。データブロックセットには、クライアントデバイス（例えば、クライアントデバイス１０２）のアプリケーションによりレンダリングされる、ワード文書、ｐｄｆ、ｊｐｅｇ等であるが、これらに限定されないタイプの文書ファイルを関連付けることができるが、これに限定されない。次に、方法８００は、データブロックセットの類似性分析を実行すること（８０４）により続き得る。幾つかの実施形態では、分析は、署名指紋計算エンジン３０６により実行し得る。例えば、データ受信モジュール２０８は、データブロックセットを署名指紋計算エンジン３０６に送信して、各機能を実行し得る。署名指紋計算エンジン３０６は、データブロックセットの内容に対して分析を実行し得る。分析は、データブロックセットに関連付けられた内容を特定する１つ又は複数のアルゴリズムを含み得る。幾つかの実施形態では、指紋計算エンジン３０６は、各ブロックの内容に基づいて、データブロックセットの各データブロックの識別子を生成し得る。
【０１３２】
更なる実施形態では、指紋計算エンジン３０６は、一般識別子をデータブロックセットに割り当て得る。識別子には、ハッシュアルゴリズムを使用して生成することができるハッシュ値を関連付け得る。幾つかの実施形態では、データブロックセットに関連付けられた識別子は、例えば、データ記憶装置リポジトリ１１０内のデータベースに記憶することができる。他の実施形態では、識別子は、データブロックセットの各データブロックを排他的に分類し、及び／又はセット（すなわち、データブロックセット）を排他的に分類するデジタル指紋又はデジタル署名であることができる。指紋計算エンジン３０６及び／又は照合エンジン３０８は、識別子を使用して、冗長性についてデータブロックセットを分析することができる。例えば、分析は、データブロックセットの識別子をデータ記憶装置リポジトリ１１０に記憶されている１つ又は複数の参照データセットに関連付けられた識別子と比較することを含む、指紋計算エンジン３０６により一致ベースのアルゴリズムを適用することを含み得る。
【０１３３】
次に、方法８００は、データブロックセットと少なくとも１つ又は複数の参照データセットとの間に類似性が存在するか否かを識別すること（８０６）により続く。幾つかの実施形態では、照合エンジン３０８は、署名指紋計算エンジン３０６と協働して、分析に基づいて、データブロックセットと非一時的データストアに記憶されている１つ又は複数の参照データセットとの間に類似性が存在するか否かを識別し得る。例えば、照合エンジン３０８は、データブロックセットと記憶装置に記憶されている参照データセットとの間に厳密な一致が識別されなかったとのデータを指紋計算エンジン３０６から受信することに応答して、データブロックセットの類似性ハッシュを生成し得る。次に、照合エンジン３０８は、データ記憶装置リポジトリ１１０等のデータストアに記憶されている１つ又は複数の参照データセットの類似性ハッシュをデータブロックセットに関連付けられた類似性ハッシュと比較することができる。一実施形態では、照合エンジン３０８は、データ記憶装置リポジトリ１１０等のデータストアに記憶されている１つ又は複数の参照データセットの類似性ハッシュを、データブロックセットの各データブロックに関連付けられた個々の類似性ハッシュと比較し得る。幾つかの実施形態では、８０６における動作は、データ縮小ユニット２１０の１つ又は複数の他のエンティティと協働して、照合エンジン３０８により実行し得る。
【０１３４】
次に、方法８００は８０８に進み、類似性が存在するか否かを判断し得る。例えば、照合エンジン３０８は、データブロックセットが、識別子（例えば、類似性ハッシュ）に基づいて、データストアに記憶されている１つ又は複数の参照データセットとある程度の類似性を共有するか否かを判断し得る。ある程度の類似性は、入力データストリームのデータブロックセットと、記憶装置に記憶されている参照データセットとの同様の内容の閾値を含み得る。一実施形態では、ある程度の類似性は、データブロックの類似性ハッシュ（すなわち、スケッチ）を参照データセットの類似性ハッシュと比較することにより特定することができる。類似性が存在する場合、方法８００はブロック８１０に進み得る。次に、方法８００は、非一時的データストアに記憶されている対応する参照データセットを使用して、データブロックセットの各データブロックを符号化し得る（８１０）。対応する参照データセットは、入力データストリームの１つ又は複数のデータブロックとある程度の類似性を共有する参照データであることができる。例えば、入力データセットのデータブロックは、記憶装置に前に記憶され、参照データセットにより関連付けられた文書（すなわち、文書の現在のバージョン）の改訂された内容を含み得る。入力データセットは、閾値を満たす（すなわち、文書「入力データセット」の現在のバージョンのスケッチが、前のバージョンの「参照データセット」スケッチのスケッチの類似性内にある）ことに基づいて、参照データセットの内容（すなわち、文書の前に保存されたバージョン）とある程度の類似性を保持し得る。符号化エンジン３１０は、閾値が満たされる場合、参照データセットを使用して、重複コピーは記憶されず、圧縮版が記憶されるように、入力データセットを符号化（すなわち、圧縮／重複排除）し得る。幾つかの実施形態では、データブロックセットは、参照データセットを用いてデータブロックのセグメント／チャンクを排他的に符号化し得るデータブロックのセグメント／チャンクを含む。
【０１３５】
照合エンジン３０８は、データブロックセットの内容と１つ又は複数の参照データセットとの類似性一致を示す情報を符号化エンジン３１０に送信し得る。次に、符号化エンジン３１０は、照合エンジン３０８から受信した情報に基づいて、データブロックセットの各データブロックを符号化し得る。一実施形態では、符号化エンジン３１０は、デルタ符号化、類似性符号化、デルタ自己圧縮等であるが、これらに限定されない符号化アルゴリズムを使用して、データブロックセットの各データブロックを符号化し得る。幾つかの実施形態では、参照データセットとある程度の類似性を共有するデータブロックの符号化は、符号化エンジン３１０が、データブロックセットの対応する各データブロックのポインタを生成し、割り当てることを含み得る。記憶装置制御エンジン１０８は、ポインタを使用して、将来のデータ呼び出しのために、対応する参照データブロック及び／又は参照データブロックセットを記憶装置（例えば、データ記憶装置リポジトリ１１０／２２０）を参照及び／又は検索し得る。更なる実施形態では、データブロックセットの１つ又は複数のデータブロックは、１つ又は複数のデータブロックを独立してデータ記憶装置リポジトリ１１０／２２０に記憶する代わりに、データ記憶装置リポジトリ１１０／２２０に記憶されている同じ参照データセットを参照し得、符号化エンジン３１０は、参照データセットを参照するポインタ（例えば、参照データポインタ）を含む１つ又は複数のデータブロックの圧縮版を記憶する。ステップ８１０における動作は、圧縮バッファ３１６及びデータ縮小ユニット２１０の１つ又は複数の他のエンティティと協働して、符号化エンジン３１０により実行し得る。
【０１３６】
次に、方法８００は、データブロックセットの各符号化データブロックを対応する参照データセットに関連付けるレコードテーブルを更新すること（８１２）により進み得る。一実施形態では、圧縮ハッシュテーブルモジュール３１２は、符号化データブロックを受信し、データストア（例えば、データ記憶装置リポジトリ１１０／２２０）に記憶されているレコードテーブル内の各符号化データブロックの１つ又は複数のポイントを更新する。他の実施形態では、圧縮ハッシュテーブルモジュール３１２は、符号化データブロックセットを受信し、データストア（例えば、データ記憶装置リポジトリ１１０／２２０）に記憶されているレコードテーブル内の符号化データブロックセットに関連付けられたポインタを更新する。
【０１３７】
方法８００は、図８Ａのブロック８１２から図８Ｂのブロック８２２に移り、追加のデータブロックが入力中であるか否かを判断し得る（８２２）。追加の入力データブロックがある場合、方法８００は、ステップ８０２（図８Ａの）に戻り得、その他の場合、方法８００は終了し得る。
【０１３８】
再び図８Ａのステップ８０８を参照すると、類似性が存在しない場合、方法８００は図８Ｂのブロック８１４に進み、基準に基づいて、データブロックセットのデータブロックをセットに集約し得、ここで、データブロックは、記憶装置（例えば、データ記憶装置リポジトリ１１０／２２０）に前に記憶された参照データセットと異なる。基準は、各データブロックに関連付けられた内容、データブロック及び／又はデータブロックセットのデータサイズ考慮事項、各データブロックに関連付けられたハッシュの無作為選択等を含み得るが、これらに限定されない。例えば、データブロックセットは、予め定義された範囲内の対応する各データブロックのデータサイズに基づいて一緒に集約し得る。ステップ８１４における動作は、データクラスタ化モジュール２１４及び計算デバイス２００の１つ又は複数の他のエンティティと協働して、照合エンジン３０８により実行し得る。
【０１３９】
次に、方法８００は、１つ又は複数の所定のパラメータに基づいて、１つ又は複数の参照データセットに関連付けられた参照データブロックのサブセットを識別すること（８１６）により進み得る。一実施形態では、符号化エンジン３１０は、データ記憶装置リポジトリ１１０／２２０に記憶されている１つ又は複数の参照データセットに関連付けられた参照データブロックのサブセットを分析し識別し得る。分析は、元のデータブロック（すなわち、符号化前の元の状態に戻されたデータブロック又はデータブロックセット）を再構築するために、システム１００の１つ又は複数のエンティティにより頻繁にデータ呼び出しされる（すなわち、データ呼び出し閾値及び／又は閾値範囲を有するパラメータ）１つ又は複数参照データセットの参照データブロックを識別することを含み得る。幾つかの実施形態では、参照ブロックには、相対重要度を示すフラグを付けるか、又は識別子を割り当てることができる。相対重要度は、参照データセットに関連付けられた、対応する参照データブロックが、データブロックを再構築するために、同じ参照データセットの部分である他の近傍参照データブロックと比較して、閾値を超えて利用されていることを示すことができる。次に符号化エンジン３１０は、相対重要度を示すフラグが付けられているか、又は識別子が割り当てられた参照データブロックを参照データブロックのサブセットに集約し得る。幾つかの実施形態では、参照ブロックは、各参照データブロックの内容に関連付けられた類似性の程度に基づいて、サブセットにグループ化される。
【０１４０】
次に、方法８００は、新しい参照データセットを生成し、それと同時に、１つ又は複数の参照データセットとある程度の類似性を共有するデータブロックセットのデータブロックを符号化し得る（８１８）。一実施形態では、新しい参照データセットは、１つ又は複数の参照データセットとある程度の類似性を共有するデータブロックセットのデータブロックを用いて順次生成することができる。幾つかの実施形態では、符号化エンジン３１０は、新しい参照データセットを生成し、それと同時に、１つ又は複数の参照データセットとある程度の類似性を共有するデータブロックセットのデータブロックを符号化する。新しい参照データセットは、１つ又は複数の参照データセットからの参照データブロックのサブセット及び非一時的データストア（例えば、データ記憶装置リポジトリ１１０／２２０）に前に記憶された参照データセットとは異なるデータブロックセットのデータブロックを含み得る。
【０１４１】
例えば、符号化エンジン３１０は、参照データセットを使用してデータブロックセットを符号化し得、ここで、参照データセットを使用して符号化されるデータブロックセットは、参照データセットとある程度類似する内容を共有する。符号化エンジン３１０は、１つ又は複数の参照データセットとある程度の類似性を共有するデータブロックセットを符号化しながら、同時に、１つ又は複数の参照データセットとある程度の類似性を共有しない（すなわち、異なる内容）符号化データブロックと、１つ又は複数の参照データセットに関連付けられた参照データブロックのサブセットとを含む新しい参照データセットを生成し得る。
【０１４２】
したがって、新しい参照データセットは、データブロック（すなわち、前に記憶された１つ又は複数の参照データセットとは異なる内容を含む）及び非一時的データストアに記憶されている１つ又は複数の参照データセットに関連付けられた参照データブロックのサブセットの両方を含む。幾つかの実施形態では、ステップ８１８における動作は、照合エンジン３０８、符号化エンジン３１０、及び／又はデータ縮小ユニット２１０の１つ又は複数の他のエンティティにより実行し得る。
【０１４３】
次に、方法８００は、新しい参照データセットを非一時的データストに記憶すること（８２０）により進み得る。非一時的データストアは、データ記憶装置リポジトリ１１０／２２０及び／又は個々の記憶装置１１２を含み得るが、これらに限定されない。一実施形態では、圧縮ハッシュテーブルモジュール３１２は、新しい参照データセットを受信し、新しい参照データセットに関連付けられた識別子を生成する。識別子は、データストア（例えば、データ記憶装置リポジトリ１１０／２２０）に記憶されたレコードテーブルに記憶することができ、及び／又は参照データセットの一部であることができる。識別子は、記憶装置（例えば、データ記憶装置リポジトリ１１０／２２０）から新しい参照データセットを参照及び／又は検索するのに使用することができ、データストリームの入力データブロックの再構築に使用することができる。方法８００は、追加のデータブロックが入力中であるか否かを判断すること（８２２）により続き得る。追加の入力データブロックがある場合、方法８００は、ステップ８０２に戻り得、その他の場合、方法８００は終了し得る。
【０１４４】
図９は、フラッシュ記憶装置管理において参照データセットを追跡する例としての方法９００のフローチャートである。方法９００は、１つ又は複数のデータブロックを検索すること（９０２）により開始し得る。一実施形態では、データ受信モジュール２０８は、１つ又は複数のデータブロックを非一時的データストア（すなわち、データ記憶装置リポジトリ１１０／２２０）から検索し得る。１つ又は複数のデータブロックは、クライアントデバイス（例えば、クライアントデバイス１０２）により実行されレンダリングされる文書、ゲーム関連アプリケーション、電子メール添付物、及びアプリケーションに関連付けられた追加の情報を含み得るが、これらに限定されない。
【０１４５】
次に、方法９００は、１つ又は複数のデータブロックと、非一時的データストア（例えば、フラッシュ記憶装置）に記憶されている１つ又は複数の参照データセットとを関連性を識別すること（９０４）により続き得る。一実施形態では、署名指紋計算エンジン３０６は、照合エンジン３０８と協働して、１つ又は複数のデータブロックをデータ受信モジュール２０８から受信し、１つ又は複数のデータブロックと、データ記憶装置リポジトリ１１０／２２０（例えば、フラッシュ記憶装置）に記憶された１つ又は複数の参照データセットとの関連性を識別し得る。１つ又は複数のデータブロックの１つ又は複数の参照データセットへの関連性は、データ呼び出しでの１つ又は複数の参照データセットへの１つ又は複数のデータブロックの共通依存性を反映し得る。例えば、データ呼び出しは、再構築及び／又は符号化のために、１つ又は複数の参照データセットを参照する入力データストリームの１つ又は複数のデータブロックを含み得る。
【０１４６】
方法９００は、共通参照データセットに依存する１つ又は複数のデータブロックを含む１つ又は複数のセグメントをデータストア（例えば、データ記憶装置リポジトリ１１０／２２０）に生成すること（９０６）により続き得る。一実施形態では、照合エンジン３０８は、データブロックとデータストア（例えば、フラッシュ記憶装置、データ記憶装置リポジトリ１１０／２２０）に記憶されている参照データセットとの関連性を識別し、１つ又は複数のデータブロック及び関連性を共有する１つ又は複数の参照データセットを含むセグメントをデータストア（例えば、フラッシュ記憶装置、データ記憶装置リポジトリ１１０／２２０）に生成する。セグメントは、順次充填し、単位として消去することができるフラッシュ記憶装置の集合／部分を指す。各データブロックには、呼び出しのために依存することができる参照データセット（及び参照データセット内の特定の参照データブロック）を関連付けることができる。
【０１４７】
更なる実施形態では、非一時的データストア内のセグメントは、１つ又は複数の参照データセットと関連性を共有する１つ又は複数のデータブロックに予め定義される記憶サイズを含み得るが、これに限定されない。幾つかの実施形態では、各セグメントは、セグメントが消去、書き込み、及び／又は読み出された回数を含む識別子、タイムスタンプ、及びデータブロック情報アレイ等の情報を含むセグメントヘッダを有する。データブロック情報アレイは、セグメントに関連付けられた各データブロックについての情報及び／又はデータブロックセットに限定的な情報を含み得るが、これに限定されない。幾つかの実施形態では、セグメントにはセグメント概要ヘッダを関連付けることができる。セグメント概要ヘッダは、セグメントについてのグローバル情報及びセグメントに関連付けられた総データブロック等であるが、これらに限定されない情報を含み得る。
【０１４８】
次に、方法９００は、データ呼び出しのためにセグメントに関連付けられた参照データセットを追跡すること（９０８）により続き得る。一実施形態では、データ追跡モジュール２１２は、１つ又は複数のクライアントデバイス１０２によるデータ呼び出しについて、非一時的データストア内のセグメントを追跡し得る。例えば、クライアントデバイス１０２は、１つ又は複数のアプリケーションをレンダリング中であり、非一時的データストアに記憶されているデータブロックを含むセグメントに関連付けられた内容へのアクセスを要求し得、データ追跡モジュール２１２は次に、要求に関連付けられた１つ又は複数の内容をレンダリングするために、セグメント及び／又は参照データセットが呼び出される回数を追跡し得る。したがって、各データブロックによる参照データセットの使用を個々に追跡する代わりに、システム１００は、非一時的フラッシュデータ記憶装置内のメモリのセグメントにおけるデータブロックセットによる参照データブロックの使用を追跡することができる。幾つかの実施形態では、データ追跡モジュール２１２は、データ呼び出しに関連付けられた情報を更新モジュール２１８に送信し、クライアントデバイス１０２によるデータ呼び出しに関連付けられたセグメントの参照データセットに関連付けられたセグメントヘッダを更新する。一実施形態では、更新モジュール２１８は、セグメントがデータ呼び出しされた回数を含むセグメントヘッダの部分を更新する。ステップ９０８における動作は、データ追跡モジュール２１２及び更新モジュール２１８及び／又は計算デバイス２００の１つ又は複数の他のエンティティにより実行し得る。
【０１４９】
図１０は、参照データセットに関連付けられたカウント変数を更新する例としての方法１０００のフローチャートである。方法１０００は、１つ又は複数の参照データセットを含むセグメントを特定すること（１００２）により開始し得る。一実施形態では、データクラスタ化モジュール２１４は、１つ又は複数のデータブロックの内容と参照データセットとの間である程度の類似性を共有する１つ又は複数のデータブロックに基づいて、参照データセットに依存する１つ又は複数のデータブロックを特定する。幾つかの実施形態では、データクラスタ化モジュール２１４は、照合エンジン３０８と協働して、非一時的フラッシュデータストア（例えば、１つ又は複数の記憶装置１１２であることができるフラッシュメモリ）等の対応するメモリのセグメントに記憶された１つ又は複数の参照データセットへの１つ又は複数のデータブロックの依存性を特定する。１つ又は複数の参照データセットへの１つ又は複数のデータブロックの依存性は、将来のデータ呼び出しのために、メモリ内のセグメントの１つ又は複数の参照データセットへの１つ又は複数のデータブロックの共通再構築／符号化依存性を反映し得る。
【０１５０】
次に、方法１０００は、非一時的データストア内のメモリのセグメントに関連付けられた参照データセットの識別子タグを生成すること（１００４）により続き得る。一実施形態では、データ追跡モジュール２１２は、非一時的データストア（例えば、フラッシュメモリ、記憶装置１１２等）に記憶されている参照データセットに依存する１つ又は複数のデータブロックを含むセグメントの識別子タグを生成し、識別子タグを非一時的データストアに記憶する。例えば、識別子タグは、セグメントが消去、書き込み、及び／又は読み出された回数、タイムスタンプ、及びデータブロック情報アレイ等の情報を含むセグメントヘッダであることができるが、これに限定されない。データブロック情報アレイは、セグメントに関連付けられた各データブロックについての情報及び／又は非一時的データストア（すなわち、固体状態デバイス、フラッシュメモリ等）内のセグメントのデータブロックセットに限定的な情報を含み得るが、これに限定されない。幾つかの実施形態では、ステップ１００４における動作は、計算デバイス２００の１つ又は複数の他のエンティティと協働して、データ追跡モジュール２１２及びデータクラスタ化モジュール２１４により実行することができる。
【０１５１】
方法１０００は、参照データセットのデータ呼び出し要求を受信すること（１００６）により進み得る。一実施形態では、データ受信モジュール２０８は、非一時的データストアのセグメントに記憶し得る参照データセットに対する要求を受信する。データ呼び出し要求には、クライアントデバイス１０２で実行されるアプリケーションに関連付けられた１つ又は複数のコンテンツをレンダリングすることを関連付けることができる。次に、方法１０００は、識別子タグに基づいて、参照データセットに対するデータ呼び出し要求をセグメントと関連付けること（１００８）により続き得る。一実施形態では、データ追跡モジュール２１２は、識別子タグを使用して、クライアントデバイスからのデータ呼び出し要求を非一時的フラッシュデータストアに記憶されているセグメントの参照データセットと関連付けることができる。識別子タグには、識別情報と、セグメントが消去、書き込み、及び／又は呼び出された回数等の追加データとを含む参照データセットのセグメントヘッダを関連付けることができる。
【０１５２】
方法１０００は、セグメント及び参照データセットに関連付けられたデータ呼び出し動作を実行すること（１０１０）により進み得る。一実施形態では、データ縮小ユニット２１０は、非一時的データストアに記憶されている参照データセットを含むセグメントに関連付けられたデータ呼び出し動作を実行し得る。データ呼び出し動作は、１つ又は複数のデータブロックの再構築及び／又は入力データストリームの１つ又は複数のデータブロックの符号化等であるが、これらに限定されない動作を含み得る。データ呼び出し動作の実行に応答して、方法１０００は、参照データセットに関連付けられた使用カウント変数を更新すること（１０１２）により進み得る。例えば、データ追跡モジュール２１２は、非一時的データストアに記憶されている参照データセットを含むセグメントに関連付けられた使用カウント変数を更新することができる。
【０１５３】
幾つかの実施形態では、使用カウント変数は、データ呼び出し動作で呼び出された参照データセットを含む非一時的データストアのセグメントに関連付けられたセグメントヘッダの部分であることができる。本開示全体を通して考察されるように、使用カウント変数は、記憶装置（例えば、フラッシュメモリ）内のメモリのセグメントに関連付けられた特定の参照データセットを参照する（例えば、ポインタを使用して記憶装置内の参照データセットをポイントする）データブロック及び／又はデータブロックセットの数を示し得る。更なる実施形態では、参照データセットに関連付けられた使用カウント変数は、データ記憶装置リポジトリ１１０等のデータストア内のレコードテーブルに独立して記憶することができる。
【０１５４】
次に、方法１０００は、追加のデータ呼び出しがキュー内にあるか否かを判断すること（１０１４）により続き得る。追加のデータ呼び出しがキューに存在する場合、方法１０００はステップ１００６に戻ることができ、その他の場合、方法１０００は終了することができる。
【０１５５】
図１１は、符号化データセグメントを非一時的データストア（例えば、フラッシュメモリ）内の新しいロケーションに割り当てる例としての方法１１００のフローチャートである。方法１１００は、データブロックに関連付けられたセグメントを識別すること（１１０２）により開始し得る。一実施形態では、データ受信モジュール２０８は、１つ又は複数のデータブロックを含む非一時的データストアのメモリのセグメントを識別する。
【０１５６】
次に、方法１１００は、セグメントに関連付けられたデータブロックに基づいて、参照データセットを特定すること（１１０４）により進む。一実施形態では、データ追跡モジュール２１２は、参照データセットの識別子（例えば、セグメントヘッダ）に基づいて、非一時的データストアのセグメントに関連付けられた参照データセットを特定する。参照データセットの特定に応答して、方法１１００は、参照データセットの状態を特定すること（１１０６）により続くことができる。一実施形態では、データ追跡モジュール２１２は、所定のファクタ（例えば、陳腐化データ、削除期限のデータ等を含むメモリのセグメント）に基づいて、参照データセットの状態を特定し得る。例えば、データ追跡モジュール２１２は、参照データセットの状態に基づいて、部分的に充填されたセグメントから１つ又は複数のデータブロックを識別、比較、及び再分配し、参照データの部分である無効データブロック（すなわち、陳腐化データ、削除期限のデータ）を削除し得、それにより、参照データセットのセグメント及び／又はデータブロックを再割り当てすることができる。非所定のファクタの非限定的な例は、リタイアしつつある参照データセットを含み得る。
【０１５７】
次に、方法１１００は、参照データセットに基づいてセグメントを符号化すること（１１０８）により進み得る。一実施形態では、符号化エンジン３１０は、参照データセットに基づいて、データブロックに関連付けられたセグメントを符号化する。
【０１５８】
最後に、方法１１００は、参照データセットを含むセグメントを非一時的フラッシュデータストア内の新しいロケーションに割り当てること（１１１０）に続き得る。一実施形態では、符号化エンジン３１０は、出力バッファ３１８と協働して、状態に関連付けられた所定の値を満たす参照データセットを含むセグメントを非一時的データストア（例えば、フラッシュメモリ）内の新しいロケーションに割り当てる。例えば、参照データセットを反映することができる４つのデータブロック（Ａ，Ｂ，Ｃ，Ｄ）が、非一時的データストア内のメモリのセグメントに書き込まれる。次に、４つの新しいデータブロック（Ｅ，Ｆ，Ｇ，Ｈ）及び４つの置換データブロック（Ａ’，Ｂ’，Ｃ’，Ｄ’）が、メモリ（例えば、フラッシュメモリ）のそのセグメントに書き込まれる。元の４つのデータブロック（Ａ，Ｂ，Ｃ，Ｄ）は、この時点では、無効（例えば、元の参照データセットの状態に関連付けられた所定の値を満たさない）データであるが、元の４つのデータブロック（Ａ，Ｂ，Ｃ，Ｄ）は、メモリ（例えば、フラッシュメモリ）の完全なセグメントが消去されるまで、上書きすることができない。したがって、無効データ（Ａ，Ｂ，Ｃ，Ｄ）を有するセグメントに書き込むためには、全て良好なデータである４つの新しいデータブロック（Ｅ，Ｆ，Ｇ，Ｈ）及び４つの置換データブロック（Ａ’，Ｂ’，Ｃ’，Ｄ’）が読み出され、新しいセグメントに書き込まれ、次に、古いセグメントが消去される。幾つかの実施形態では、符号化エンジン３１０は、ガベージコレクションアルゴリズム等であるが、これに限定されないアルゴリズムを使用して、方法１１００の上記ステップを実行し得る。ガベージコレクションアルゴリズムは、参照カウントアルゴリズム、マーク−スイープコレクタアルゴリズム、マーク−コンパクトコレクタアルゴリズム、コピーコレクタアルゴリズム等を含み得る。ステップ１１１０における動作は、データ追跡モジュール２１２及び計算デバイス２００の１つ又は複数の他のエンティティと協働して、符号化エンジン３１０により実行し得る。
【０１５９】
図１２は、フラッシュ管理及びガベージコレクション統合に関連付けられたデータセグメントを符号化する例としての方法１２００のフローチャートである。方法１２００は、現在のデータストリームの現在のデータブロックを受信すること（１２０２）により開始し得る。幾つかの実施形態では、ステップ１２０２における動作は、照合エンジン３０８及び計算デバイス２００の１つ又は複数の他のエンティティと協働して、署名指紋計算エンジン３０６により実行し得る。
【０１６０】
次に、方法１２００は、現在のデータブロックに基づいて、フラッシュ記憶装置のセグメントに関連付けられた参照データセットを特定すること（１２０４）に進む。一実施形態では、データ追跡モジュール２１２は、参照データセットの識別子（例えば、セグメントヘッダ）に基づいて、非一時的フラッシュデータストアのセグメントに関連付けられた参照データセットを特定する。一実施形態では、データ追跡モジュール２１２は、参照データセットを含む非一時的フラッシュデータストアのメモリのセグメントを識別する。例えば、非一時的データストアのメモリ内の識別されたセグメントは、現在のデータブロックと、識別されたセグメントに関連付けられた参照データセットとの間のある程度の類似性を反映し得る。
【０１６１】
参照データセットの特定に応答して、方法１２００は、参照データセットの状態を特定すること（１２０６）に続くことができる。幾つかの実施形態では、データ追跡モジュール２１２は、参照データセットの状態を特定し得る。例えば、データ追跡モジュール２１２は、参照データセットの状態に基づいて、部分的に充填されたセグメントからの１つ又は複数のデータブロックを比較し、再分配し、参照データセットの部分である無効データブロック（すなわち、陳腐化データ、削除期限のデータ）を削除し得、それにより、セグメント及び／又は参照データセットのデータブロックを再割り当てすることができる。
【０１６２】
方法１２００は、参照データセットに関連付けられた元のデータブロックを再生成すること（１２０８）により続き得る。一実施形態では、符号化エンジン３１０は、参照データセットの状態が所定の値未満であることに応答して、参照データセットに関連付けられた元のデータブロックを再生成する。所定の値未満の参照セットの状態は、参照データセットのリタイアがスケジュールされていることを示すことができる。次に、方法１２００は、リタイアがスケジュールされている参照データセットに関連付けられた元のデータブロックを、非一時的データストアのメモリに記憶されている他の参照データセットを用いて符号化すること（１２１０）により進む。他の参照データセットは、リタイアがスケジュールされている参照データセットの元のデータブロック等の追加のデータブロックを記憶する空き記憶容量を含み得る。一実施形態では、データクラスタ化モジュール２１４は、符号化された元のデータブロックの記憶に利用可能である、非一時的データストアのメモリ内の１つ又は複数のセグメントを識別する。ステップ１２１０における動作は、データ追跡モジュール２１２及び計算デバイス２００の１つ又は複数の他のエンティティと協働して、符号化エンジン３１０により実行し得る。
【０１６３】
次に、方法１２００は、他の参照データセットを使用して、現在のデータストリームの現在のデータブロックに関連付けられたセグメントを符号化すること（１２１２）により続き得る。一実施形態では、符号化エンジン３１０は、非一時的データストア（例えば、フラッシュメモリ）のメモリに記憶された他の参照データセットを含む１つ又は複数の他のセグメントを識別する。幾つかの実施形態では、現在のデータブロックは、チャンク（すなわち、セグメント）にセグメント化することができ、符号化エンジン３１０は、非一時的データストアのメモリ内の１つ又は複数の他の参照データセットを用いて、チャンクを独立して符号化することができる。ステップ１２１２における動作は、計算デバイス２００の１つ又は複数の他のエンティティと協働して、符号化エンジン３１０により実行し得る。
【０１６４】
図１３は、フラッシュ管理に関連付けられた参照データセットをリタイアさせる例としての方法１３００のフローチャートである。方法１３００は、データ記憶装置リポジトリ１１０／２２０等のデータストアのメモリから、参照データセットを検索すること（１３０２）により開始し得る。一実施形態では、データリタイアモジュール２１６は、計算デバイス２００の１つ又は複数の他の構成要素と協働して、非一時的データストア（例えば、フラッシュメモリ）のメモリに記憶されている１つ又は複数の参照データセットを検索する。次に、方法１３００は、参照データセットの使用カウント変数を特定すること（１３０４）により続き得る。一実施形態では、データリタイアモジュール２１６は、データ追跡モジュール２１２と協働して、１つ又は複数の参照データセットに関連付けられた使用カウント変数を特定する。データリタイアモジュール２１６は、データストアに記憶されているレコードテーブルを分析し、参照データセットに関連付けられた識別子に基づいて、参照データセットの使用カウント変数を識別し得る。使用カウント変数は、非一時的データストア（例えば、フラッシュメモリ）のメモリ内の特定の参照データセットを参照する（例えば、ポインタを使用して記憶装置内の参照データセットをポイントする）データブロック及び／又はデータブロックセットの数を示し得る。
【０１６５】
次に、方法１３００は、非一時的データストアのメモリに記憶されている参照データセットに関連付けられた参照データブロックの母集団に対して、統計学的分析を実行すること（１３０６）により続き得る。例えば、データ追跡モジュール２１２は、非一時的データストア（例えば、フラッシュメモリ）のメモリに記憶されている参照データセットに関連付けられた参照データブロックの母集団に対して、統計学的分析を実行し得る。統計学的分析は、所定の閾値を超えてデータ呼び出しされる参照データセットの使用カウントの識別を含み得るが、これに限定されない。幾つかの実施形態では、データリタイアモジュール２１６は、参照データセットに関連付けられた使用カウント変数に基づいて、参照データセットがリタイア要件を満たすか否かを判断する。ステップ１３０６における動作は、計算デバイス２００の１つ又は複数の他のエンティティと協働してデータ追跡モジュール２１２により実行し得る。
【０１６６】
次に、方法１３００は、使用カウントに基づいて、参照データセットがリタイア基準を満たすか否かを判断すること（１３０８）により進み得る。リタイア基準は、データセットに関連付けられた使用の持続時間、関連付けられたデータセットに対して最後に実行された更新／変更、ある持続時間にわたり関連付けられたデータセットに使用されたメモリ量、正常実行中にメモリに記憶されているデータセットにアクセスするために必要な時間量及びリソース量、データセットに関連付けられた読み出し／書き込みの頻度等を含み得るが、これらに限定されない。一実施形態では、参照ハッシュテーブルモジュール３１４は、所定の持続時間（例えば、数分、数時間、数日、数週等）にわたり、参照データセットが、１つ又は複数のデータブロック及び／又はデータブロックセットにより参照されなかったと判断し得る。幾つかの実施形態では、参照ハッシュテーブルモジュール３１４は、参照データセットが、データセットに関連付けられた読み出し／書き込みの閾値頻度を超えると判断し得、したがって、リタイアが、記憶装置（すなわち、フラッシュ記憶装置）の寿命を保持するために、リタイア要件を満たし得ると判断し得る。更なる実施形態では、参照ハッシュテーブルモジュール３１４は、関連付けられたデータセットの持続時間にわたり、記憶装置（すなわち、フラッシュ記憶装置）で使用されたメモリ量に基づいて、参照データセットが要件を満たすか否かを判断し得る。例えば、データセットは、そのデータセットに対して実行される改訂（例えば、追加情報を含むために、時間の経過に伴って行われる文書の更新）に基づいて、ある持続時間にわたりメモリ内で成長し得る。幾つかの実施形態では、記憶装置で使用されるメモリ量が閾値を満たし、ある持続時間にわたり呼び出されなかった場合、データセットを強制的にリタイアさせることができ、したがって、陳腐化データをクリアし、関連データにメモリ空間を提供する。方法１３００は、参照データセットのリタイアを実行すること（１３１０）により続き得る。一実施形態では、データリタイアモジュール２１６は、使用カウントに基づいて、基準を満たす１つ又は複数の参照データセットのリタイアを実行する。
【０１６７】
幾つかの実施形態では、参照ハッシュテーブルモジュール３１４は、使用カウントリタイアアルゴリズムを記憶装置に記憶されている各参照データセットに適用する。使用カウントリタイアアルゴリズムは自動的に、所定の持続時間が満たされ、参照データセットが、所定の持続時間中、データストリームに関連付けられた１つ又は複数のデータブロック又はデータブロックセットにより参照されなかった後、参照データセットに関連付けられた使用カウント変数のカウントをデクリメントし得る。幾つかの実施形態では、参照データセットは、参照データセットの使用カウント変数のカウントがゼロにデクリメントされた場合、リタイア要件を満たし得る。ゼロの使用カウント変数は、その対応する参照データセットに依存する及び／又は参照するデータブロック又はデータブロックセットがないことを示し得る。例えば、符号化データブロックの元のバージョンを再構築するために、参照データセットに依存する符号化データブロック（例えば、圧縮／重複排除データブロック）がない。更なる実施形態では、参照データセットの部分は、統計学的分析に基づいてリタイア判断される。データリタイアモジュール２１６は次に、リタイア要件を満たす参照データセットの参照データブロックの部分をリタイアさせ、それと同時に、１つ又は複数の所定のファクタ（例えば、記憶空間、参照データブロックのサイズ、参照データブロックのリタイアタイムスタンプ等）に基づいて、参照データセット内の残りの参照データブロックを記憶装置内のメモリの新しいセグメント（例えば、追加のデータブロックに利用できる空間を有する新しい参照データセット）に割り当て得る。
【０１６８】
方法１３００は、フォースファクタに基づいて参照データセットのリタイアを実行すること（１３１２）により続き得る。一実施形態では、データリタイアモジュール２１６は、フォースファクタに基づいて、非一時的データストア（例えば、１１０／２２０）のメモリに記憶されている１つ又は複数の参照データセットのリタイアを実行する。フォースファクタは、ガベージコレクションアルゴリズム等であるが、これに限定されないアルゴリズム内に組み込み得る。ステップ１３１２における動作は、任意選択的であり得、計算デバイス２００の１つ又は複数の他のエンティティと協働してデータリタイアモジュール２１６により実行し得る。
【０１６９】
図１４Ａは、参照データブロックを圧縮する従来技術の例を示すブロック図である。図１４Ａに示されるように、圧縮モジュールは、参照ブロックに関連付けられたデータのインライン圧縮のために、参照ブロックを受信する。インライン圧縮とは、参照ブロックのデータが、記憶装置アレイに記憶される際に圧縮（例えば、サイズ縮小）されることを意味する。圧縮モジュールに入る前の参照ブロックは、データサイズ４ＫＢ（キロバイト）を有し、参照ブロックが圧縮モジュールから出てくると、参照ブロックのサイズは大幅に低減する。次に、圧縮されたデータストリームは記憶装置に記憶される。更に、圧縮データストリームは、識別情報等を含むヘッダ（例えば、Ｈｄｒ）を含み得る。インライン圧縮を実行する欠点は、圧縮モジュールが、メモリに書き込まれる前に参照ブロックのデータを統合することである。更に、ハッシュ処理及びハッシュ比較はリアルタイムで計算され、これは性能オーバーヘッドを追加するおそれがある。例えば、ハッシュ衝突を回避するために、バイト毎の比較が必要とされる場合、追加の性能オーバーヘッドがもたらされる。時間（すなわち、数ミリ秒）が重要である場合、参照ブロックのプライマリデータを圧縮するとき、インライン圧縮は一般に推奨されない。したがって、データストリームのインライン圧縮は、システムにもたらされる総オーバーヘッド性能に起因して推奨されない。
【０１７０】
図１４Ｂは、参照データブロックを重複排除する従来技術による例を示すブロック図である。図１４Ｂに示されるように、重複排除（ｄｅ−ｄｕｐｅ）モジュールは、参照ブロックに関連付けられたデータをインライン重複排除するために、参照ブロックを受信する。インライン重複排除は、冗長データをなくすことにより、記憶ニーズを低減する技法である。例えば、図１４Ｂに示されるように、重複排除モジュールに入る前の参照ブロックは、データサイズ４ＫＢ（キロバイト）を有し、参照ブロックが重複排除モジュールから出ると、参照ブロックのサイズは大幅に低減する。識別情報を含むヘッダ（例えば、Ｈｄｒ）を含む重複排除されたデータストリームは次に、記憶装置に記憶される。
【０１７１】
更に、インライン重複排除は、参照データブロックがクライアントデバイスに入る際、リアルタイムで重複排除ハッシュ計算がクライアントデバイスで生成されることを含む。クライアントデバイスは、記憶システムに既に記憶されたブロックに標的を定める場合、新しいブロックを記憶せず、むしろ、単に既存の参照ブロックへの参照を生成する。インライン重複排除の利点は、データが重複しないため、必要な記憶容量が少ないことである。しかし、ハッシュ計算及びハッシュテーブルでのルックアップ動作は、データの摂取を大幅に遅らせることになる大きい時間遅延を受けるため、デバイスのバックアップスループットが低減することから、効率は低下する。
【０１７２】
図１５は、デルタ符号化の例を示すグラフ表現である。図１５に示されるように、データセット１５０２は、示されるようにデータブロック（０〜７）を含み得る。例えば、データセット１５０２には、データ記憶装置リポジトリ１１０／２２０等のデータストアに記憶されることが促される入力データストリームを関連付けることができる。データブロック（０〜７）を含むデータセット１５０２を記憶する前、符号化エンジン３１０は、サブブロックレベル重複排除を実行し得、この重複排除は、データブロック（０〜７）の類似性ハッシュを、データストアに記憶されている対応する参照データセット（図示せず）の記憶類似性ハッシュと比較することを含む。類似性ベースの類似性ハッシュが、データセット１５０２のデータブロックと、データストアに記憶されている１つ又は複数の既存の参照データセット（図示せず）との間に存在する場合、符号化エンジン３１０は、記憶装置内の既存の参照データセットを使用して、データブロック（０、２、３、及び７）により図１５に示されるように、類似性ベースの類似性ハッシュに関連付けられた対応するデータブロックを符号化し得る。
【０１７３】
符号化エンジン３１０は、デルタ符号化アルゴリズムにより実行することができる。デルタ符号化アルゴリズムは、データブロックと参照データセットとの間の同様の類似性ハッシュを識別し、変更されたデータのみを記憶する。例えば、符号化データブロック（０、２、３、及び７）は、元のデータセットの符号化（例えば、圧縮）データストリーム１５０４バージョンとして示される。更に、符号化データストリーム１５０４は、符号化データストリームを識別するヘッダを含み得る。ヘッダは、参照ブロックＩＤ、デルタ符号化ビットベクトル、及び符号化データストリームに関連付けられたグレイン数等であるが、これらに限定されない情報を含むこともできる。
【０１７４】
図１６は、類似性符号化の例を示すグラフ表現である。図１６に示されるように、データセット１６０２は、示されるようにデータブロック（０〜７）を含み得る。例えば、データセット１６０２には、データ記憶装置リポジトリ１１０等のデータストアに記憶されることが促される入力データストリームを関連付けることができる。図１６に示されるように、符号化エンジン３１０は、ブロックレベル重複排除を実行し得、この重複排除は、データブロック（０〜７）の類似性ハッシュ及び／又はデジタル署名／指紋を対応する参照データセット１６０４の記憶類似性ハッシュと比較することを含む。類似性ベースの類似性ハッシュが、データセット１６０２のデータブロックと参照データセット１６０４との間に存在する場合、符号化エンジン３１０は、図１６に示されるように、類似性ベースの類似性ハッシュに関連付けられた対応するデータブロックを符号化し得る。符号化エンジン３１０は、類似性ベースの類似性ハッシュに関連付けられた対応するデータブロックに対して、重複排除及び自己圧縮を実行し得る。符号化データブロック１６０６は、元のデータセット１６０２のデータストリームを符号化（例えば、圧縮）したものとして示される。更に、符号化データストリーム１６０６は、符号化データストリームを識別するヘッダを含むこともできる。ヘッダは、参照ブロックＩＤ、全てゼロビットのベクトル、及び符号化データストリームに関連付けられたグレイン数等であるが、これらに限定されない情報を含むこともできる。
【０１７５】
図１７は、参照データブロックのデルタ及び自己圧縮の例を示すグラフ表現である。図１７に示されるように、参照データブロック（０〜７）を含む参照データセット１７０２及びデータブロック（０〜７）を含むデータセット１７０４が示される。図１７の目的は、デルタ及び自己圧縮アルゴリズムを使用してのデータセットの符号化を示すことである。例えば、符号化エンジン３１０は、類似性ハッシュ１７１０、１７１２、１７１４、１７１６、及び１７１８を計算することにより、データセット１７０４のデータブロックを処理することができる。類似性ハッシュが、参照データセット１７０２の参照データブロックと、データセット１７０４のデータブロックとの間で類似性一致を有さない場合、デルタ圧縮を実行することができる。また、データセットのスケッチを計算することもできる。スケッチは、データセット１７０４の各データブロックにわたる類似性ハッシュに基づいて計算することができる。データセット１７０４のデータブロックに類似性一致がない場合、符号化せずにスケッチをデータストアに記憶することができる。類似性一致が、データセット１７０４のデータブロックの類似性ハッシュ（例えば、スケッチ）と、参照データセット１７０２の類似性ハッシュ（例えば、スケッチ）との間に存在する場合、類似性一致に関連付けられたデータセット１７０４の対応するデータブロックは、１７２０及び１７２２を介して示されるように符号化され、これにより、データ記憶効率という利点がもたらされる。
【０１７６】
図１７に関連して、データセット１７０４のデータブロックには、類似性一致が関連付けられるが、データセット１７０４のデータブロックは、太線の枠で示されるように、参照データセット１７０２の参照データブロックと比較して少数の違い（例えば、内容変更）を有する。次に、符号化エンジン３１０は、参照データブロックに対する差を計算し、変更されたデータブロック１７２４、１７２６、及び１７２８をハッシュ値と共に参照データセット及び／又は参照データブロックに排他的に記憶し得る。更に、符号化データセット１７０６は、符号化データストリームを識別するヘッダを含み得る。ヘッダは、図１７に示されるような参照ブロックＩＤ（例えば、ｒｅｆ  ｂｌｋ：３，５，２）、全てゼロビットのベクトル、及び符号化データストリームに関連付けられたグレイン数等であるが、これらに限定されない情報を含むこともできる。
【０１７７】
図１８Ａ及び図１８Ｂは、フラッシュ管理におけるガベージコレクションを使用しての参照ブロックセットの例示的な追跡及びリタイアを示すグラフ表現である。これより図１８Ａを参照して、参照ブロックセットテーブル及びフラッシュ記憶装置内のメモリの複数のセグメントを対応するフラッシュセグメントヘッダと共に示す。示されるように、フラッシュ記憶装置に関連付けられたメモリのセグメントの部分は占有されている。例えば、占有されたセグメントの部分は、（１，２）、（３，１）、及び（１，１）を含む部分に関連する。フラッシュ記憶装置に関連付けられたセグメントのこれらの部分は、参照ブロックセット及び関連付けられたカウントに関連付けて、セグメントがポイントする参照セットを識別する対応するフラッシュセグメントヘッダを含む。例えば、示される実施形態では、（３，１）により示されるフラッシュ記憶装置デバイス内の占有セグメントの部分は、参照ブロックセットテーブルに示されるように、セグメントが参照データセット３を使用し、参照データセット３をポイントする１つのセットを有することを反映する。参照ブロックセットテーブルは、記憶装置内のメモリの部分が、使用中、構築中、及び／又はまだ使用されていないことを示す情報も含む。
【０１７８】
これより図１８Ｂを参照すると、フラッシュ管理におけるガベージコレクションを使用しての参照ブロックセットの追跡及びリタイアを示している。例えば、図１８Ａにおいて上述したように、フラッシュ記憶装置に関連付けられたメモリのセグメントの部分は占有された。例えば、占有されたセグメントの部分は、（１，２）、（３，１）、及び（１，１）を含む部分に関連する。しかし、図１８Ｂでは、ブロック（３，１）のセグメントヘッダは、ここでは（５，１）と読まれ、ブロック（５，１）がフラッシュ記憶装置のメモリ内の新しい参照ブロックセットをポイントすることを示す。更に、参照ブロックセットテーブルは、変更されており、ここでは、ＩＤ−３に関連付けられたｒｅｆ＃１がｒｅｆ＃０に変更されたことを示し、フラッシュ記憶装置セグメントに記憶されたデータブロックがその対応する参照データセットをポイントしていないことを示す。更に、ＩＤ−５に関連付けられた参照データセットはここでは、ｒｅｆ＃１を有し、フラッシュメモリの１つのセグメントがその参照データセットをポイントしていることを示す。
【０１７９】
効率的なデータ管理アーキテクチャを実施するシステム及び方法について以下に説明する。上記説明では、説明のために、多くの特定の詳細が記載された。しかし、これらの特定の詳細の任意の所与のサブセットなしで、開示される技術が実施可能であることが理解される。他の場合、構造及びデバイスはブロック図形態で示されている。例えば、開示される技術は、上記の幾つかの実施形態では、ユーザインタフェース及び特定のハードウェアを参照して説明されている。更に、本技術は主にオンラインサービスに関連して上記開示されたが、開示される技術は、他のデータソース及び他のデータタイプ（例えば、他のリソース、例えば、画像、オーディオ、ウェブページの集合）にも適用される。
【０１８０】
本明細書での「一実装形態」又は「実装形態」への言及は、その実装形態に関連して記載された特定の特徴、構造、又は特性が、開示される技術の少なくとも１つの実装形態に含まれることを意味する。本明細書の様々な箇所での「一実装形態では」という語句の出現は、必ずしも全てが同じ実装形態を指しているわけではない。
【０１８１】
上で詳述された説明の幾つかの部分は、コンピュータメモリ内のデータビットに対するプロセス及び動作の象徴的表現に関して提示された。プロセスは一般に、結果をもたらすステップの自己矛盾のないシーケンスとして見なすことができる。ステップは、物理的数量の物理的操作を含み得る。これらの数量は、記憶、転送、結合、比較、及び他の方法での操作が可能な電気信号又は磁気信号の形態をとる。これらの信号は、ビット、値、要素、シンボル、文字、用語、数字等の形態であるものとして参照し得る。
【０１８２】
これら及び同様の用語に、適切な物理的数量を関連付けることができ、これら及び同様の用語は、これらの数量に適用されるラベルとして見なすことができる。先の考察から明らかなように、別段のことが特に述べられる場合を除き、本説明全体を通して、例えば、「処理」、「計算」、「算出」、「特定」、又は「表示」等の用語を利用した考察が、コンピュータシステムのレジスタ及びメモリ内の物理的（電子的）数量として表されるデータを操作し、コンピュータシステムのメモリ若しくはレジスタ、他のそのような情報記憶装置、伝送デバイス、又は表示デバイス内の物理的数量として同様に表される他のデータに変換するコンピュータシステム又は同様の電子計算デバイスの動作及びプロセスを指し得ることが理解される。
【０１８３】
開示される技術は、本明細書における動作を実行する装置にも関連し得る。この装置は、必要とされる目的に向けて特に構築してもよく、又はコンピュータに記憶されるコンピュータプログラムにより選択的にアクティブ化若しくは再構成される汎用コンピュータを含んでもよい。そのようなコンピュータプログラムは、例えば、それぞれがコンピュータシステムバスに結合されるフロッピーディスク、光ディスク、ＣＤ−ＲＯＭ、及び磁気ディスクを含む任意のタイプのディスク、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カード若しくは光学カード、不揮発性メモリと共にＵＳＢキーを含むフラッシュメモリ、又は電子命令の記憶に適する任意のタイプの媒体であるが、これらに限定されないコンピュータ可読記憶媒体に記憶し得る。
【０１８４】
開示される技術は、全体的にハードウェアの実装、全体的にソフトウェアの実装、又はハードウェア要素及びソフトウェア要素の両方を含む実装の形態をとることができる。幾つかの実装形態では、本技術は、ファームウェア、常駐ソフトウェア、マイクロコード等を含むが、これらに限定されないソフトウェアで実装される。
【０１８５】
更に、開示される技術は、コンピュータ若しくは任意の命令実行システムにより使用されるか、又はコンピュータ若しくは任意の命令実行システムに関連して使用されるプログラムコードを提供する非一時的コンピュータ使用可能又はコンピュータ可読媒体からアクセス可能なコンピュータプログラム製品の形態をとることができる。本説明では、コンピュータ使用可能又はコンピュータ可読媒体は、命令実行システム、装置、又はデバイスにより使用されるか、これに関連して使用されるプログラムを包含、記憶、通信、伝搬、又は輸送することができる任意の装置であることができる。
【０１８６】
プログラムコードの記憶及び／又は実行に適する計算システム又はデータ処理システムは、システムバスを通してメモリ要素に直接又は間接的に結合される少なくとも１つのプロセッサ（例えば、ハードウェアプロセッサ）を含む。メモリ要素は、プログラムコードの実際の実行中に利用されるローカルメモリ、大容量記憶装置、及び実行中、コードを大容量記憶装置から検索しなければならない回数を低減するために、少なくとも幾つかのプログラムコードの一時的記憶を提供するキャッシュメモリを含むことができる。
【０１８７】
入／出力又はＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティングデバイス等を含むが、これらに限定されない）は、直接又は介在Ｉ／Ｏコントローラを通してシステムに結合することができる。
【０１８８】
ネットワークアダプタをシステムに結合することもでき、それにより、介在私設ネットワーク又は公衆ネットワークを通してデータ処理システムを他のデータ処理システム、リモートプリンタ、又は記憶装置に結合できるようにする。モデム、ケーブルモデル、及びＥｔｈｅｒｎｅｔカードは、現在利用可能なタイプのネットワークアダプタのごく少数のものである。
【０１８９】
最後に、本明細書に提示されるプロセス及び表示は、いかなる特定のコンピュータ又は他の装置にも固有に関連しないことがある。様々な汎用システムを本明細書における教示によるプログラムと併用してもよく、又は必要とされる方法ステップを実行するより専用的な装置を構築することが好都合であると証明されることもある。様々なこれらのシステムに必要とされる構造は、上記説明から分かる。加えて、開示される技術は、いかなる特定のプログラミング言語も参照せずに説明された。本明細書に記載される技術の教示を実施するために、様々なプログラミング言語を使用し得ることが理解される。
【０１９０】
本技法及び本技術の実施の上記説明は、例示及び説明を目的として提示された。網羅的、すなわち、本技法及び本技術を開示された厳密な形態に限定することは意図されない。上記教示に照らして、多くの変更形態及び変形形態が可能である。本技法及び本技術の範囲が、この詳細な説明により限定されないことが意図される。本技法及び本技術は、本技法及び本技術の趣旨又は基本的特徴から逸脱せずに、他の特定の形態で実施し得る。同様に、モジュール、ルーチン、特徴、属性、方法論、及び他の態様の特定の名称及び分担は、必須又は有意ではなく、本技法及び本技術又はその特徴を実施するメカニズムは、異なる名称、分担、及び／又はフォーマットを有し得る。更に、本技術のモジュール、ルーチン、特徴、属性、方法論、及び他の態様は、ソフトウェア、ハードウェア、ファームウェア、又はこれら３つの任意の組合せとして実施することができる。また、例がモジュールである構成要素がソフトウェアとして実施される場合は常に、構成要素は、スタンドアロンプログラムとして、より大きいプログラムの一部、複数の別個のプログラムとして、静的若しくは動的にリンクされるライブラリとして、カーネルロード可能なモジュールとして、デバイスドライバとして、及び／又はコンピュータプログラミングにおいて現在既知又は将来的に知られることになるあらゆる他の方法で実施することができる。更に、本技法及び本技術は決して、いかなる特定のプログラミング言語又はいかなる特定のオペレーティングシステム若しくは環境での実施にも限定されない。したがって、本技法及び本技術の開示は、限定ではなく例示であることが意図される。
【符号の説明】
【０１９１】
１００  システム
１０２ａ〜１０２ｎ  クライアントデバイス
１０４  ネットワーク
１０６  記憶装置コントローラユニット
１０８  記憶装置制御エンジン
１１０、２２０  データ記憶装置リポジトリ
１１２ａ〜１１２ｎ  記憶装置
１１８ａ〜１１８ｎ、１２０、１２２、１２４  信号線
２００  計算デバイス
２０２  通信ユニット
２０４  プロセッサ
２０６  メモリ
２０８  データ受信モジュール
２１０  データ縮小ユニット
２１２  データ追跡モジュール
２１４  データクラスタ化モジュール
２１６  データリタイアモジュール
２１８  更新モジュール
２２２  同期モジュール
２２４  通信バス
３０２  参照ブロックバッファ
３０４  データ入力バッファ
３０６  署名指紋計算エンジン
３０８  照合エンジン
３１０  符号化エンジン
３１２  圧縮ハッシュテーブルモジュール
３１４  参照ハッシュテーブルモジュール
３１６  圧縮バッファ
３１８  データ出力バッファ
１５０２、１６０２、１７０４  データセット
１５０４  符号化データストリーム
１６０４、１７０２  参照データセット
１６０６、１７０６  符号化データセット
１７１０、１７１２、１７１４、１７１６、１７１８  類似性ハッシュ
１７２４、１７２６、１７２８  変更されたデータブロック
【図１】
0006373328.tif 000002
【図２】
0006373328.tif 000003
【図３Ａ】
0006373328.tif 000004
【図３Ｂ】
0006373328.tif 000005
【図４】
0006373328.tif 000006
【図５】
0006373328.tif 000007
【図６Ａ】
0006373328.tif 000008
【図６Ｂ】
0006373328.tif 000009
【図６Ｃ】
0006373328.tif 000010
【図７】
0006373328.tif 000011
【図８Ａ】
0006373328.tif 000012
【図８Ｂ】
0006373328.tif 000013
【図９】
0006373328.tif 000014
【図１０】
0006373328.tif 000015
【図１１】
0006373328.tif 000016
【図１２】
0006373328.tif 000017
【図１３】
0006373328.tif 000018
【図１４Ａ】
0006373328.tif 000019
【図１４Ｂ】
0006373328.tif 000020
【図１５】
0006373328.tif 000021
【図１６】
0006373328.tif 000022
【図１７】
0006373328.tif 000023
【図１８Ａ】
0006373328.tif 000024
【図１８Ｂ】
0006373328.tif 000025