効率的なデータ管理アーキテクチャを提供するシステム及び方法について以下に説明する。特に、本開示では、記憶装置、特にフラッシュ記憶装置において参照データブロックセットを管理するシステム及び方法について以下に説明する。本開示のシステム、方法は、フラッシュ記憶装置を使用する特定のシステムアーキテクチャに関連して説明されるが、本システム及び本方法が他のハードウェアアーキテクチャ及び他のハードウェア編成にも適用可能であることを理解されたい。
概説
本開示は、記憶装置用途及びデータ重複排除のための類似性ベースの内容照合を説明する。特に、本開示は、参照データセット管理及び構築の問題を解消することにより、効率的なデータ管理の改善された方法を提供することで、データ管理における現在の方法よりも優れている。より詳細には、本開示は、エンティティがコスト、記憶空間、及び電力を最小に抑えながら、バックアップ記憶装置内にデータを保持できるようにする、本開示において提供される解決策に対して追加の改善を提供する。
本開示は、以下の問題を解消することにより、従来の実装形態から区別される:記憶装置用途において類似性ベースの一致を計算すること、独自の方法で圧縮及び重複排除を入力データブロックに適用すること、世代的参照データセット記憶装置を使用することにより、変化するデータストリームに依存する変化する参照データセットの問題を解消すること、及び参照データセット管理を、フラッシュ記憶装置等であるが、これに限定されない記憶装置での空間のためのガベージコレクション及び実行時効率と統合すること。
更に、類似性ベースの重複排除アルゴリズムは、参照データブロックに関連付けられた内容の抽象表現を推定することにより動作する。したがって、参照データブロックは、他の(すなわち、将来の)入力データブロックの重複を排除するテンプレートとして使用することができ、これにより、記憶されるデータの総量が低減される。重複排除されたデータブロックが記憶装置から呼び出される場合、縮小(例えば、重複排除された)表現を記憶装置から検索し、参照データブロックにより供給される情報と結合されて、元のデータブロックを再生成することができる。
参照データブロックは、抽象としてデータストリームを表し、したがって、データストリームの性質は経時変化するため、参照データブロックセットも変化する。時間の経過に伴い、参照データブロックの部分は参照データセットと関連しなくなり、一方、新しいデータブロックが参照データセットに追加され、新しい参照データセットの生成に繋がる。重複排除システムにより達成されるデータ縮小は、参照データセットが入力データストリームの良好な表現であるか否かを評価する尺度として使用することができる。例えば、これは、重複排除されたデータブロックに、それが符号化(縮小)されるときに突き合わせられた参照データブロックを記録させることにより行うことができる。レコードは次に、記憶されたデータブロックが続けて呼び出されるとき、元の形態に迅速に正確に組み立てることができるように使用することができる。これは、少なくとも1つのデータブロックが潜在的に、再構築に参照データブロックを必要とする限り、参照データブロックが利用可能なままであるという要件を呈する。この要件は幾つかの結果を有することができる。第1に、現在の参照データブロックセットは、記憶装置に提示されるデータストリームに応答して、経時変化することができるが、過去の参照データブロックが、参照データセットのうちの記憶データブロックの小さいサブセットのみによってまだ使用中であることがある。第2に、記憶装置により利用される全ての参照データブロックの集合は、装置の寿命にわたり常に成長する。これは、記憶装置の多年にわたる寿命スパンにわたり集合が無制限に成長することに繋がる。無制限の成長は、フラッシュ記憶装置の性質に起因して、全てのデータを記憶装置に常に記憶することに関連して実現不可能である。フラッシュ記憶装置は、従来の記憶装置及びハードドライブと比較して、速度及びランダム読み出しアクセスにおいて優れるが、記憶容量制限を有し、寿命にわたり耐久性が低下する。フラッシュ記憶装置での耐久性の低下は、フラッシュ記憶装置による書き込み−消去サイクルへの耐性に関連付けられ、一方、フラッシュ記憶装置の性能は、フラッシュ記憶装置内の書き込み可能な空きデータブロックの可溶性により影響を受ける。
もはや有用ではない古い参照データブロックをリタイアさせる方法を適用する必要がある。この方法は、データブロックはもはや参照データブロックに依存せず、参照データブロックをセットからリタイアさせることができると判断できるように、データブロックが参照データブロック及び/又は参照データブロックのセットに依存する回数を追跡することにより、参照データブロックに関連付けられた参照カウントを含み得る。また、新しいデータブロックが記憶装置に追加されると、参照カウントをインクリメントして、その参照データブロック及び/又は参照データセットの使用カウントを反映する必要がある。同様に、データブロックが削除される(又は上書きされる)場合、対応する参照データブロック及び/又は参照データセットの使用カウントをデクリメントする必要がある。使用カウントが正確に同期され、確実に存続して、装置の遮断又は電力障害から保護することが重要である。
A.メモリ管理での重複排除のための参照ブロックの参照セットへの集約
参照データセットへの参照データブロックの集約を実施する一方法は、ある程度の類似性を共有する参照データブロックを参照データセットに集約することにより実行することができる。重複排除アルゴリズムが適宜実行するには、参照データセットは予め定義される数のデータブロックを必要とし得る。例えば、重複排除アルゴリズムは、データ符号化/縮小を実行するために、ある数の参照データブロック(例えば、10,000)を有する必要がある。したがって、各参照データブロックと独立して機能する代わりに、本開示は、1つ又は複数のデータブロック(例えば、参照データブロック)を含む参照データセットを用いて機能する。
参照データセットは以下の特徴を有し得る:1)参照データセットを使用して、ある時間期間にわたり能動的に重複排除アルゴリズムを実行することができ、2)データストリームが変化する場合、新しい参照データセットを作成/生成することができる。しかし、もはや能動的に使用されていない前の参照データセットを保持することができ、その理由は、前に記憶されたデータブロックが、データ呼び出しのためにこの参照データセットに依存するためである。次に、3)使用カウントは、各参照データブロックに対してではなく、参照データセットに対して維持することができる。これは、その見返りとして、使用カウントの管理オーバーヘッドを著しく低減することができる。最後に、4)参照データセットが存在するようになると、使用カウントがゼロに低下した(すなわち、もはやそれに依存するデータブロックがない)後、リタイアすることができる。
幾つかの実施形態では、システムのリソース制約に応じて、参照データセットのデータブロックは、参照データセット内に予め定義される数のデータブロックを含むと共に、参照データセットの最大数を有するようにカスタマイズすることができる。更なる実施形態では、システムは、複数の異なる参照データセットがクラスタにわたり共有されて、より広いカバレッジを得るクラスタ化システム含むことができる。
B.メモリ管理でのパイプライン参照セット構築及び使用
パイプライン参照データセット構造及び使用は、参照データセットの重複構築及び使用を実行することにより実施することができる。例えば、現在の参照データセットが、入力データストリーム(例えば、一連のデータブロック)の重複排除に使用されている間、新しい参照データセットを並列して構築することができる。本開示では、新しい参照データセットを新しく開始する必要はなく、代わりに、新しい参照データセットは、データストリームの変化に応答して構築される新しい参照データブロックを追加しながら、現在の参照データセット内の参照データブロックの使用頻度の高いサブセットを使用して構築することができる。このように、現在の参照データセットがもはや有効ではないと重複排除アルゴリズムが見なす場合、新しい参照データの使用を開始することができる。上述した2つの革新的な参照データセット管理技法は、フラッシュ管理記憶装置において使用され、重複排除と統合することができる。
C.参照セットとセグメントフラッシュ管理との統合
フラッシュ管理と共に本開示を実施する一実施形態は、参照データセットに依存するデータブロックをセグメントに集約することにより実行することができる。セグメントとは、順次充填し、単位として消去することができる。フラッシュ記憶装置のチャンクを指す。各データブロックに参照データセット(及び参照データセット内の特定の参照データブロック)を関連付けることができ、データを呼び出す場合、各データブロックに依存することができる。したがって、各入力データブロックによる参照データブロックの使用を個々に追跡するのではなく、システムは、参照データセット(すなわち、参照データブロックのグループ)の使用を追跡することができる。フラッシュベースの記憶システムでは、入力データブロックは、フラッシュに順次書き込まれ、したがって、時間的に近く書き込まれるデータブロック間には特別な局所性がある。幾つかの実施形態では、セグメントは、フラッシュ記憶装置のメモリ内の複数(例えば、2つ)の参照データセットを指すことができる。
更に、セグメントは識別子(例えば、参照データセット識別子)でタグ付けすることができ、それから、システムは、何れのセグメントが何れの参照データセットを使用しているかを追跡することができる。これは、大きい効率に繋がることができる − 情報ボリュームを3桁低減することができ(各セグメントが数千のデータブロックをホストする)、セグメントレベル管理は既にフラッシュ管理に固有であるため、追加の情報(参照セット使用)を追跡する余分な負担が最小である。したがって、参照データセットは、単純な整数識別子を介してコンパクトに表され、参照データセットは、様々なデータセグメント(個々のデータブロックではなく)により使用され、コンパクトに追跡することができる。一実施形態では、システムは16のセットを使用し、各セットは16,384個の参照データブロックを含み得る。参照データブロックは、4KB(キロバイト)サイズであることができる。識別子(例えば、参照データセット識別子)は4ビットサイズであることができる。識別子は、256MBサイズであるフラッシュの各セグメントに関連付けることができる。これにより、参照データセットの空間効率的且つ低オーバーヘッドの管理が可能になる。
D.フラッシュ記憶システムでの参照セットのガベージコレクション
幾つかの実施形態では、フラッシュ管理及びガベージコレクションと共に本開示を実施することが、以下説明するように実行することができる。ガベージコレクション時、有効データブロックは、フラッシュ記憶装置内の新しいロケーションに移される。フラッシュセグメント内のそのデータブロックが順次充填され、同じ参照データセットを使用することに留意することが重要である。ガベージコレクションアルゴリズムは、フラッシュメモリの各セグメントで機能するため、ガベージコレクションアルゴリズムは、セグメントに含まれるデータブロックに関して以下の2つの判断のうちの一方を下す。これらの判断は、セグメントに関連付けられた参照データセット(例えば、参照データセットR)の状態に基づくことができる。ガベージコレクションアルゴリズムが下す判断は、1)参照データセット(例えば、参照データセットR)が引き続き利用可能である場合、縮小データブロックをフラッシュメモリ内の新しいロケーションに移し、及び/又は2)参照データセット(例えば、参照データセットR)がまもなくリタイアすることが予期される場合、参照データセット(例えば、R)を使用して元のデータブロックを再構築し、より新しい参照データセットを使用してそれを新たに重複排除する。その結果、参照データセット(例えば、R)がリタイアする方向に進むと、参照データセット(例えば、R)の使用カウントは徐々に低減することになり、ゼロに達すると(すなわち、アクティブユーザが残っていない)、Rはリタイアすることができ、対応する識別子は、再使用に利用できるようになる。
幾つかの実施形態では、参照データセットがリタイア可能な状態になる場合、ガベージコレクションアルゴリズムは、ガベージコレクションアルゴリズムを使用して、強制的に参照データセットをより迅速にリタイアさせることができる。更なる実施形態では、本開示は、統計学的分析をデータブロックの母集団に対して実行して、使用頻度の高い参照データセットを特定し、それらを使用して、参照データセット選択アルゴリズムを調整することができる。
したがって、本開示は、参照データセットの追跡とフラッシュ管理との統合 − セグメント参照データセット毎に − を提供して、参照データセット情報の記憶及び処理オーバーヘッドを改善する。また、参照データセットの処理とガベージコレクションとの統合により、システムは、より古い参照データセットをリタイアさせ、実行時に、縮小データブロックをそのままでコピーするか、それとも異なる参照データセットを使用して再縮小するかを判断することにより、記憶装置全体にわたる参照データセット使用を追跡してデータ移動を最適化することができる。
システム
図1は、記憶装置における参照データセット内の参照データブロックを管理するシステム例を示す高レベルブロック図である。示される実施形態では、システム100は、クライアントデバイス102a、102b〜102n、記憶装置コントローラユニット106、及びデータ記憶装置リポジトリ110を含み得る。示される実施形態では、システム100のこれらのエンティティは、ネットワーク104を介して通信可能に結合される。しかし、本開示は、この構成に限定されず、様々な異なるシステム環境及び構成が利用可能であり、本開示の範囲内にある。他の実装形態は、追加又はより少数の計算デバイス、サービス、及び/又はネットワークを含み得る。図1及び実施形態を示すために使用されている他の図において、参照番号又は数字の後の文字の指示、例えば、「102a」が、その特定の参照番号で指定される要素又は構成要素を特に参照することを認識されたい。後に文字が続かない参照番号、例えば、「102」が文章中に現れる場合、その一般参照番号を有する要素又は構成要素の異なる実施形態を一般に参照することを認識されたい。
幾つかの実施形態では、システム100のエンティティは、クラウドベースのアーキテクチャを使用し得、クラウドベースのアーキテクチャでは、1つ又は複数のコンピュータ機能又はルーチンは、ローカルコンピュータデバイスの要求時にリモート計算システム及びデバイスにより実行される。例えば、クライアントデバイス102は、ハードウェア及び/又はソフトウェアリソースを有する計算デバイスであることができ、例えば、他のクライアントデバイス102、記憶装置コントローラユニット106、及び/又はデータ記憶装置リポジトリ110、又はシステム100の任意の他のエンティティを含め、他の計算デバイス及びリソースにより提供されるハードウェア及び/又はソフトウェアリソースにネットワーク104を介してアクセスし得る。
ネットワーク104は、従来のタイプの有線又は無線のものであることができ、スター構成、トークンリング構成、又は他の構成を含め、多くの様々な構成を有し得る。更に、ネットワーク104は、ローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)(例えば、インターネット)、及び/又は複数のデバイス(例えば、記憶装置コントローラユニット106、クライアントデバイス102等)が通信できるようにする他の相互接続されたデータパスを含み得る。幾つかの実施形態では、ネットワーク104は、ピアツーピアネットワークであり得る。ネットワーク104は、電気通信ネットワークの部分に結合されるか、又は部分を含むこともでき、それにより、様々な異なる通信プロトコルを使用してデータを送信する。更なる実施形態では、ネットワーク104は、Bluetooth(商標)(又は低エネルギーBluetooth)通信ネットワーク又はセルラ通信ネットワークを含み、ショートメッセージングサービス(SMS)、マルチメディアメッセージングサービス(MMS)、ハイパーテキスト転送プロトコル(HTTP)、直接データ接続、WAP、電子メール等を介してを含め、データを送受信する。図の例は1つのネットワーク104を示すが、実際には、1つ又は複数のネットワーク104がシステム100のエンティティを接続することができる。
幾つかの実施形態では、クライアントデバイス102(102a、102b〜102nのうちの任意のデバイス又は全て)は、データ処理機能及びデータ通信機能を有する計算デバイスである。示される実施形態では、クライアントデバイス102a、102b〜102nは、信号線118a、118b〜118nを介してネットワーク104にそれぞれ通信可能に結合される。クライアントデバイス102a、102b〜102nは、1つ又は複数のメモリと、1つ又は複数のプロセッサとを含む任意の計算デバイス、例えば、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、携帯電話、個人情報端末(PDA)、モバイル電子メールデバイス、ポータブルゲームプレーヤ、ポータブル音楽プレーヤ、1つ若しくは複数のプロセッサが内部に組み込まれるか、若しくは結合されたテレビ、又は記憶を要求することが可能な任意の他の電子デバイスであることができる。クライアントデバイス102は、データ記憶装置リポジトリ110に対して記憶要求(例えば、読み出し、書き込み等)を行うアプリケーションを実行し得る。クライアントデバイスは、記憶装置(例えば、記憶装置112a〜112n)を含むデータ記憶装置リポジトリ110と直接結合し得る(図示せず)。
クライアントデバイス102は、グラフィックスプロセッサ、高解像度タッチスクリーン、物理的なキーボード、前方又は後方に面するカメラ、Bluetooth(登録商標)モジュール、適切なファームウェアを記憶するメモリ、及び様々な物理的接続インタフェース(例えば、USB、HDMI、ヘッドセットジャック等)等のうちの1つ又は複数を含むこともできる。更に、クライアントデバイス102のハードウェア及びリソースを管理するオペレーティングシステム、ハードウェア及びリソースへのアプリケーションアクセスを提供するアプリケーションプログラミングインタフェース(API)、ユーザ対話及び入力のためのインタフェースを生成し表示するユーザインタフェースモジュール(図示せず)、並びに例えば、文書を操作するアプリケーション、画像を操作するアプリケーション、電子メールを操作するアプリケーション、及びウェブ閲覧用アプリケーション等を含むアプリケーションが、クライアントデバイス102に記憶され、クライアントデバイス102で動作可能であり得る。図1の例は3つのクライアントデバイス102a、102b、及び102nを示しているが、任意の数のクライアントデバイス102がシステムに存在し得ることを理解されたい。
記憶装置コントローラユニット106は、例えば、図2を参照して以下に詳述するように、(マイクロ)プロセッサ、メモリ、及びネットワーク通信機能を含むハードウェアであることができる。記憶装置コントローラユニット106は、信号線120を介してネットワーク104に結合されて、システム100の他の構成要素と通信し、協働する。幾つかの実施形態では、記憶装置コントローラユニット106は、ネットワーク104を介してクライアントデバイス102a、102b〜102nのうちの1つ又は複数及び/又はデータ記憶装置リポジトリ110とデータを送受信する。一実施形態では、記憶装置コントローラユニット106は、信号線124を介してデータ記憶装置リポジトリ110及び/又は記憶装置112a〜112nとデータを直接送受信する。1つの記憶装置コントローラユニットが示されているが、複数の記憶装置コントローラユニットが、分散アーキテクチャ又は他の方法で利用可能ことを理解されたい。本願では、システム構成及びシステムにより実行される動作は、1つの記憶装置コントローラユニット106に関連して説明される。
幾つかの実施形態では、記憶装置コントローラユニット106は、効率的なデータ管理を提供する記憶装置制御エンジン108を含み得る。記憶装置制御エンジン108は、データの送信、システム100の他のエンティティからの受信、読み取り、書き込み、及び変換を行う計算機能、サービス、及び/又はリソースを提供することができる。記憶装置制御エンジン108が上記機能提供に限定されないことを理解されたい。様々な実施形態では、記憶装置112は、記憶装置コントローラユニット106と直接接続されてもよく、又は信号線122により別個のコントローラ(図示せず)を通して及び/又はネットワーク104を介して接続されてもよい。記憶装置コントローラユニット106は、クライアントデバイス102が記憶空間の幾らか又は全てを利用できるようにするように構成された計算デバイスであることができる。例としてのシステム100に示されるように、クライアントデバイス102は、ネットワーク104を介して又は直接(図示せず)記憶装置コントローラユニット106に結合することができる。
更に、システム100のクライアントデバイス102及び記憶装置コントローラユニット106は、追加の構成要素を含むことができ、追加の構成要素は、図面を簡潔にするために図1に示されていない。また、幾つかの実施形態では、示される構成要素の全てが存在するわけではない。更に、様々なコントローラ、ブロック、及びインタフェースは、任意の適する方法で実施することができる。例えば、記憶装置コントローラユニットは、例えば、マイクロプロセッサ及び(マイクロ)プロセッサにより実行可能なコンピュータ可読プログラムコード(例えば、ソフトウェア又はファームウェア)を記憶するコンピュータ可読媒体、論理ゲート、スイッチ、特定用途向け集積回路(ASIC)、プログラマブル論理コントローラ、及び組み込みマイクロコントローラのうちの1つ又は複数の形態をとることができる。
データ記憶装置リポジトリ110及び任意選択的なデータ記憶装置リポジトリ220は非一時的コンピュータ使用可能(例えば、可読、書き込み可能等)媒体を含み得、この媒体は、プロセッサにより処理されるか、又はプロセッサと併せて処理されるために、命令、データ、コンピュータプログラム、ソフトウェア、コード、ルーチン等を包含、記憶、通信、伝搬、又は輸送することができる任意の非一時的装置又はデバイスであることができる。本開示はデータ記憶装置リポジトリ110/220をフラッシュメモリとして参照するが、幾つかの実施形態では、データ記憶装置リポジトリ110/220が、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、又は何らかの他のメモリデバイス等の非一時的メモリを含み得ることを理解されたい。幾つかの実施形態では、データ記憶装置リポジトリ110/220は、不揮発性メモリ又は同様の永久記憶装置及び媒体、例えば、ハードディスクドライブ、フロッピーディスクドライブ、コンパクトディスク読み取り専用メモリ(CD−ROM)デバイス、デジタル多用途ディスク読み取り専用メモリ(DVD−ROM)デバイス、デジタル多用途ディスクランダムアクセスメモリ(DVD−RAM)デバイス、デジタル多用途ディスク書き換え可能(DVD−RW)デバイス、フラッシュメモリデバイス、又は何らかの他の不揮発性記憶装置を含むこともできる。
図2は、本明細書に記載される技法を実施するように構成される記憶装置コントローラユニット106の例を示すブロック図である。示されるように、記憶装置コントローラユニット106は、通信ユニット202、プロセッサ204、メモリ206、データ記憶装置リポジトリ220、及び記憶装置制御エンジン108を含み得、これらは通信バス224により通信可能に結合し得る。上記構成が例として提供され、多くの更なる構成が意図され、可能であることを理解されたい。
通信ユニット202は、ネットワーク104及び例えば、クライアントデバイス102及びデータ記憶装置リポジトリ110等を含むシステム100の他のエンティティ及び/又は構成要素と有無線接続するための1つ又は複数のインタフェースデバイスを含み得る。例えば、通信ユニット202は、CATタイプインタフェース、Wi−Fi(商標)を使用して信号を送受信するための無線送受信機、Bluetooth(登録商標)セルラ通信等、USBインタフェース、それらの様々な組合せ等を含み得るが、これらに限定されない。幾つかの実施形態では、通信ユニット202は、プロセッサ204をネットワーク104にリンクすることができ、ネットワーク104は他の処理システムに結合し得る。通信ユニット202は、例えば、本明細書の他の箇所で考察されるものを含め、様々な標準通信プロトコルを使用して、ネットワーク104及びシステム100の他のエンティティへの他の接続を提供することができる。
プロセッサ204は、算術論理演算ユニット、マイクロプロセッサ、汎用コントローラ、又は電子表示信号の表示デバイスへの通信及び提供を実行する何らかの他のプロセッサアレイを含み得る。幾つかの実施形態では、プロセッサ204は、1つ又は複数の処理コアを有するハードウェアプロセッサである。プロセッサ204はバス224に結合して、他の構成要素と通信する。プロセッサ204は、データ信号を処理し、複雑命令セットコンピュータ(CISC)アーキテクチャ、縮小命令セットコンピュータ(RISC)アーキテクチャ、又は命令セットの組合せを実施するアーキテクチャを含む様々な計算アーキテクチャを含み得る。図2の例では1つのプロセッサのみが示されているが、複数のプロセッサ及び/又は処理コアを包含し得る。他のプロセッサ構成も可能であることを理解されたい。
メモリ206は、プロセッサ204により実行し得る命令及び/又はデータを記憶する。幾つかの実施形態では、メモリ206は、プロセッサ204により実行し得る命令及び/又はデータを記憶し得る。メモリ206は、例えば、オペレーティングシステム、ハードウェアドライバ、他のソフトウェアアプリケーション、データベース等を含め、他の命令及びデータを記憶することも可能である。メモリ206は、バス224に結合されて、プロセッサ204及びシステム100の他の構成要素と通信し得る。
メモリ206は非一時的コンピュータ使用可能(例えば、可読、書き込み可能等)媒体を含み得、この媒体は、プロセッサ204により処理されるか、又はプロセッサ204と併せて処理されるために、命令、データ、コンピュータプログラム、ソフトウェア、コード、ルーチン等を包含、記憶、通信、伝搬、又は輸送することができる任意の非一時的装置又はデバイスであることができる。幾つかの実施形態では、メモリ206は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリ、又は何らかの他のメモリデバイス等の非一時的メモリを含み得る。幾つかの実施形態では、メモリ206は、不揮発性メモリ又は同様の永久記憶装置及び媒体、例えば、ハードディスクドライブ、フロッピーディスクドライブ、コンパクトディスク読み取り専用メモリ(CD−ROM)デバイス、デジタル多用途ディスク読み取り専用メモリ(DVD−ROM)デバイス、デジタル多用途ディスクランダムアクセスメモリ(DVD−RAM)デバイス、デジタル多用途ディスク書き換え可能(DVD−RW)デバイス、フラッシュメモリデバイス、又は何らかの他の不揮発性記憶装置を含むこともできる。
バス224は、計算デバイスの構成要素間又は計算デバイス、ネットワーク104又はその部分を含むネットワークバスシステム、プロセッサメッシュ、それらの組合せ等間でデータを転送する通信バスを含み得る。幾つかの実施形態では、クライアントデバイス102及び記憶装置コントローラユニット106は、バス224に関連して実施されるソフトウェア通信メカニズムを介して協働し通信し得る。ソフトウェア通信メカニズムは、例えば、プロセス間通信、ローカル関数又はプロシージャ呼び出し、リモートプロシージャ呼び出し、ネットワークベースの通信、セキュア通信等を含み、及び/又は促進し得る。
記憶装置制御エンジン108は、効率的なデータ管理を提供するソフトウェア、コード、論理、又はルーチンである。図2に示されるように、記憶装置制御エンジン108は、データ受信モジュール208、データ縮小ユニット210、データ追跡モジュール212、データクラスタ化モジュール214、データリタイアモジュール216、更新モジュール218、及び同期モジュール222を含み得る。
幾つかの実施形態では、構成要素208、210、212、214、216、218、及び/又は222は、電子的に通信可能に結合されて、互いと、通信ユニット202、プロセッサ204、メモリ206、及び/又はデータ記憶装置リポジトリ220と協働し通信する。これらの構成要素208、210、212、214、216、218、及び222は、ネットワーク104を介してシステム100の他のエンティティ(例えば、クライアントデバイス102、記憶装置112)と通信するためにも結合される。幾つかの実施形態では、データ受信モジュール208、データ縮小ユニット210、データ追跡モジュール212、データクラスタ化モジュール214、データリタイアモジュール216、更新モジュール218、及び同期モジュール222は、プロセッサ204によって実行可能な命令セットであるか、又は1つ若しくは複数のカスタマイズされたプロセッサに含まれる論理であり、各機能を提供する。他の実施形態では、データ受信モジュール208、データ縮小ユニット210、データ追跡モジュール212、データクラスタ化モジュール214、データリタイアモジュール216、更新モジュール218、及び同期モジュール222は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能であり、各機能を提供する。これらの任意の実施形態において、データ受信モジュール208、データ縮小ユニット210、データ追跡モジュール212、データクラスタ化モジュール214、データリタイアモジュール216、更新モジュール218、及び同期モジュール222は、プロセッサ204及び計算デバイス200の他の構成要素と協働し通信するように構成される。
一実施形態では、データ受信モジュール208は、入力データを受信し、及び/又はデータを検索し、データ縮小ユニット210は、データストリームを縮小/符号化し、データ追跡モジュール212は、システム100にわたりデータを追跡し、データクラスタ化モジュール214は、データブロックを含む参照データセットをクラスタ化し、データリタイアモジュール216は、ガベージコレクションを使用して、データブロック及び/又はデータブロックを含む参照データセットをリタイアさせ、更新モジュール218は、データストリームに関連付けられた情報を更新し、同期モジュール222は、記憶装置コントローラユニット106の1つ又は複数の他の構成要素に信頼性を提供する。モジュール、ルーチン、特徴、属性、方法論、及び他の態様の特定の名称及び分担は、必須又は有意なものではなく、本発明又はその特徴を実施するメカニズムは、異なる名称、分担、及び/又はフォーマットを有し得る。
データ受信モジュール208は、入力データを受信し、及び/又はデータを検索するソフトウェア、コード、論理、又はルーチンである。一実施形態では、データ受信モジュール208は、プロセッサ204により実行可能な命令セットである。別の実施形態では、データ受信モジュール208は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、データ受信モジュール208は、プロセッサ204及びデータ縮小ユニット210の他の構成要素を含む計算デバイス200の他の構成要素と協働し通信するように構成される。
データ受信モジュール208は、システム100のデータ記憶装置リポジトリ110/220等であるが、これらに限定されない1つ又は複数のデータストアから入力データを受信し、及び/又はデータを検索する。入力データは入力ストリームを含み得るが、これに限定されない。幾つかの実施形態では、データ受信モジュール208は、クライアントデバイス102からデータストリームを受信する。データストリームは、データブロック(例えば、新しいデータストリームの現在のデータブロック、記憶装置からの参照データブロック等)のセットを含み得る。データブロック(例えば、データストリームの)セットには、クライアントデバイス102により実行されレンダリングされ、及び/又はメモリに記憶される文書、ファイル、電子メール、メッセージ、ブログ、及び/又は任意のアプリケーションを関連付けることができるが、これらに限定されない。更に、データブロックセットは、スプレッドシートアプリケーション、フォーム、雑誌、記事、書籍、連絡先詳細、データベース、データベースの部分、テーブル等のクライアントデバイス上のアプリケーションを介して実行されレンダリングされるもの等のユーザ可読ファイルを含み得る。他の実施形態では、データストリームには、データ記憶装置リポジトリ220及び/又はフラッシュ記憶装置(図示せず)等のデータストアから検索されるデータブロック(例えば、参照データブロック)のセットを関連付けることができる。
データ縮小ユニット210は、本明細書の他の箇所で更に考察されるように、データストリームを縮小/符号化するソフトウェア、コード、論理、又はルーチンである。一実施形態では、データ縮小ユニット210は、プロセッサ204により実行可能な命令セットである。別の実施形態では、データ縮小ユニット210は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、データ縮小ユニット210は、プロセッサ204及び計算デバイス200の他の構成要素と協働し通信するように構成される。更なる実施形態では、協働し通信するように構成される。更なる実施形態では、データ縮小ユニット210は、図3Bに示されるように、参照ブロックバッファ302、データ入力バッファ304、署名指紋計算エンジン306、照合エンジン308、符号化エンジン310、圧縮ハッシュテーブルモジュール312、参照ハッシュテーブルモジュール314、圧縮バッファ316、及びデータ出力バッファ318を含み得る。
データ追跡モジュール212は、データを追跡するソフトウェア、コード、論理、又はルーチンである。一実施形態では、データ追跡モジュール212は、プロセッサ204により実行可能な命令セットである。別の実施形態では、データ追跡モジュール212は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、データ追跡モジュール212は、プロセッサ204及びデータ縮小ユニット210の他の構成要素を含む計算デバイス200の他の構成要素と協働し通信するように構成される。
データ追跡モジュール212は、システム100の1つ又は複数のデータストアからのデータブロックを追跡し得、データストアは、専らデータ記憶装置リポジトリ110の記憶装置112、クライアントデバイス102のメモリ(図示せず)、及び/又はデータ記憶装置リポジトリ220を含み得るが、これらに限定されない。幾つかの実施形態では、データ追跡モジュール212は、システム100にわたりデータブロックに関連付けられたカウントを追跡することができる。カウントは、1つ又は複数のデータブロックが参照データブロック及び/又は参照データセットに依存する回数を追跡することにより、データ追跡モジュール212により追跡することができる。更に、データ追跡モジュール212は、追跡されたカウントを計算デバイス200の1つ又は複数の他の構成要素に送信して、参照データセットの参照データブロックがもはやデータブロックにより依存されておらず、そこからリタイアさせることができるときを判断することができる。一実施形態では、データ追跡モジュール212は、1つ又は複数のクライアントデバイス102によりデータを呼び出すために、非一時的データストア(例えば、フラッシュメモリ、データ記憶装置リポジトリ110/220)に関連付けられたメモリのセグメントを追跡する。例えば、クライアントデバイス102は、1つ又は複数のアプリケーションをレンダリングしており、非一時的データストア(すなわち、フラッシュメモリ)に記憶されているデータブロック(例えば、データブロックセット)を含むセグメントに関連付けられた内容へのアクセスを要求し得、次に、データ追跡モジュール212は、本明細書の他の箇所でより詳細に考察するように、要求に関連付けられた1つ又は複数の内容をレンダリングするために、セグメント及び/又は参照データセットが呼び出される(すなわち、データ呼び出し)回数を追跡し得る。
データクラスタ化モジュール214は、参照データセットをクラスタ化するソフトウェア、コード、論理、又はルーチンである。一実施形態では、データクラスタ化モジュール214は、プロセッサ204により実行可能な命令セットである。別の実施形態では、データクラスタ化モジュール214は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、データクラスタ化モジュール214は、プロセッサ204及びデータ縮小ユニット210の他の構成要素を含む計算デバイス200の他の構成要素と協働し通信するように構成される。
幾つかの実施形態では、データクラスタ化モジュール214は、計算デバイス200の1つ又は複数の他の構成要素と協働して、非一時的フラッシュデータストア(例えば、1つ又は複数の記憶装置112であることができるフラッシュメモリ)等の対応するメモリのセグメントに記憶されている1つ又は複数の参照データセットへの1つ又は複数のデータブロックの依存性を特定する。1つ又は複数の参照データセットへの1つ又は複数のデータブロックの依存性は、呼び出しのための1つ又は複数の参照データセットへの1つ又は複数のデータブロックの共通再構築/符号化依存性を反映し得る。例えば、データブロック(すなわち、符号化データブロック)は、クライアントデバイス(例えば、クライアントデバイス102)に提示するために、元のデータブロック(非符号化データブロック)に関連付けられた元の情報を提供することができるように、元のデータブロックを再構築するために参照データセットに依存し得る。
更なる実施形態では、データクラスタ化モジュール214は、クライアントデバイス102にわたる複数のデータブロックが依存する1つ又は複数の差別化参照データセットを識別する。データクラスタ化モジュール214は、差別化参照データセットがクラスタにわたって共有されて、より広いカバレッジを得るように、1つ又は複数の参照データセットに基づいてクラスタを生成することができる。一実施形態では、差別化参照データセットは、システム100のデータブロックにより頻繁にデータが呼び出される(例えば、データが、最小閾値を超える、最大閾値を超える、及び/又は閾値範囲内で呼び出される)参照データセットであることができる。
データリタイアモジュール216は、参照データセットをリタイアさせるソフトウェア、コード、論理、又はルーチンである。一実施形態では、データリタイアモジュール216は、プロセッサ204により実行可能な命令セットである。別の実施形態では、データリタイアモジュール216は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、データリタイアモジュール216は、プロセッサ204及びデータ縮小ユニット210の他の構成要素を含む計算デバイス200の他の構成要素と協働し通信するように構成される。
データリタイアモジュール216は、データ記憶装置リポジトリ110/220等であるが、これに限定されない1つ又は複数のデータストアに記憶されている1つ又は複数の参照データセットが、リタイア要件を満たすか否かを判断し得る。一実施形態では、参照データセットは、使用カウント変数(例えば、参照カウント)に基づいてリタイア要件を満たす。例えば、参照データセットは、対応する使用カウント変数が特定の閾値までデクリメントされる場合、リタイア要件を満たすことができる。
幾つかの実施形態では、参照データセットは、参照データセットの使用カウント変数のカウントがゼロにデクリメントされる場合、リタイア要件を満たす。ゼロの使用カウント変数は、データブロック又はデータブロックセットが、再生成のために、記憶されている対応する参照データセットに依存しない(例えば、参照しない)ことを示し得る。例えば、入力データストリームは、再構築(すなわち、非符号化)のために、参照データセットに依存する符号化データブロック(例えば、圧縮/重複排除データブロック)を含まない。更なる実施形態では、データリタイアモジュール216は、使用カウント変数に基づいて、参照データセットを強制的にリタイアさせ得る。例えば、参照データセットは、結果として特定のカウントになり得、特定のカウントに達した後、データリタイアモジュール216は、ガベージコレクションアルゴリズム(及び/又はデータ記憶装置クリーンアップのための当技術分野で周知の任意の他のアルゴリズム)を参照データセットに適用することにより、その参照データセットを強制的にリタイアさせることができる。データリタイアモジュール216の追加の動作が本明細書の他の箇所で考察される。
更新モジュール218は、データストリームに関連付けられた情報を更新するソフトウェア、コード、論理、又はルーチンである。一実施形態では、更新モジュール218は、プロセッサ204により実行可能な命令セットである。別の実施形態では、更新モジュール218は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、更新モジュール218は、プロセッサ204及びデータ縮小ユニット210の他の構成要素を含む計算デバイス200の他の構成要素と協働し通信するように構成される。
更新モジュール218は、データブロックを受信し、データストア(例えば、データ記憶装置リポジトリ110/220)に記憶されているレコードテーブル内のデータブロックに関連付けられた1つ又は複数の識別子を更新することができる。レコードテーブルは、データベースに記憶された行及び列を有するテーブル、インデックス付きテーブル等を含み得るが、これらに限定されない。一実施形態では、受信されるデータブロックは、符号化/縮小データブロックであることができる。更なる実施形態では、更新モジュール218は、参照データセットに関連付けられた識別子を更新し得る。識別子は、ポインタを含み得るが、これに限定されない。ポインタは、データブロック及び/又は参照データセットに関連付けることができ、データブロック及び/又は参照データセットについてのグローバル情報等であるが、これに限定されない追加情報を含み得る。幾つかの実施形態では、ポインタは、記憶装置内の特定の参照データセットをポイントするデータブロックの総数等の情報を含み得る。
一実施形態では、更新モジュール218は、データ追跡モジュール212から、クライアントデバイスからのデータ呼び出しに関連付けられた情報を受信する。データ呼び出しには、データ記憶装置のセグメントのメモリ内の1つ又は複数の参照データセットを関連付け得る。更新モジュール218は次に、データ呼び出しに関連付けられたセグメントの参照データセットに関連付けられたセグメントヘッド(例えば、識別子)を更新し得る。更なる実施形態では、更新モジュール218は、セグメントがデータ呼び出しされた回数等の情報を含み得るセグメントヘッダの部分を更新する。更新モジュール218の追加の動作が本明細書の他の箇所で考察される。
同期モジュール222は、データ受信モジュール208、データ縮小ユニット210、データ追跡モジュール212、データクラスタ化モジュール214、データリタイアモジュール216、及び更新モジュール218等であるが、これらに限定されない記憶装置コントローラユニット106の1つ又は複数の他の構成要素に信頼性を提供するソフトウェア、コード、論理、又はルーチンであることができる。一実施形態では、同期モジュール222は、プロセッサ204により実行可能な命令セットである。別の実施形態では、同期モジュール222は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、同期モジュール222は、プロセッサ204及びデータ縮小ユニット210の他の構成要素を含む記憶装置コントローラユニット106の他の構成要素と協働し通信するように構成される。
一実施形態では、同期モジュール222は、記憶装置コントローラユニット106の1つ又は複数の構成要素によるデータの受信、検索、符号化、更新、変更、及び/又は記憶中での、デバイス遮断(例えば、クライアントデバイス遮断)及び/又は電力障害中等のデータ遮断から保護することができる。例えば、同期モジュール222は、データ/参照ブロック及び/又は参照データセットに関連付けられた使用カウント変数(例えば、参照カウント)を更新/変更しながら、更新モジュール218に信頼性を提供し得る。更なる実施形態では、同期モジュール222は、データ縮小ユニット210の1つ又は複数のバッファと並列に機能し得る。例えば、同期モジュール222は、データストリームをデータ入力バッファ304に送信して、データストリームのデータブロックを一時的に記憶し得、処理中、システム100で電力障害が発生する場合、データストリームのデータブロックは損なわれない。
図3Aは、本明細書において紹介される技法を実施するように構成されるハードウェア効率的データ管理システム例を示すブロック図300Aである。図3Aに示されるように、データ縮小ユニット210は、参照ブロックを受信し、参照ブロックを処理し、参照ブロックを符号化/縮小したものを出力し、符号化参照データブロックをデータ記憶装置リポジトリ220に記憶する。更に、図3Aに示される図は、記憶用途及びデータ重複排除のために類似性ベースの内容照合を含むが、これに限定されない本開示の主要ポイントを組み込む。類似性ベースの内容照合は、文書の組内での厳密な一致を識別するのとは対照的に、複数の文書にわたり適用して、1つ又は複数の文書間の類似性を検出し識別することができる。本開示は、以下の問題を解消することにより、従来の実装形態(図14A及び図14Bに示されるような)から区別される:1)記憶用途で類似性ベースの照合を使用すること、2)独自の方法で圧縮及び重複排除を入力データブロックに適用すること、3)世代的参照データセット記憶装置を使用することにより、変化するデータストリーム(トラフィック)に依存する変化する参照データセットの問題を解消すること、及び4)参照データセット管理を、フラッシュ記憶装置等であるが、これに限定されない記憶装置での空間のためのガベージコレクション及び実行時効率と統合すること。
図3Bは、本明細書に記載の方法を実施するように構成される例としてのデータ縮小ユニット210を示すブロック図である。図3Bに示されるように、データ縮小ユニット210は、参照ブロックバッファ302、データ入力バッファ304、署名指紋計算エンジン306、照合エンジン308、符号化エンジン310、圧縮ハッシュテーブルモジュール312、参照ハッシュテーブルモジュール314、圧縮バッファ316、及びデータ出力バッファ318を含み得る。
幾つかの実施形態では、構成要素302、304、306、308、310、312、314、316、及び318は、電子的に通信可能に結合されて、互いと、通信ユニット202、プロセッサ204、メモリ206、及び/又はデータ記憶装置リポジトリ220と協働し通信する。これらの構成要素302、304、306、308、310、312、314、316、及び318は、ネットワーク104を介してシステム100の他のエンティティ(例えば、クライアントデバイス102)と通信するためにも結合される。更なる実施形態では、参照ブロックバッファ302、データ入力バッファ304、署名指紋計算エンジン306、照合エンジン308、符号化エンジン310、圧縮ハッシュテーブルモジュール312、参照ハッシュテーブルモジュール314、圧縮バッファ316、及びデータ出力バッファ318は、プロセッサ204によって実行可能な命令セットであるか、又は1つ若しくは複数のカスタマイズされたプロセッサに含まれる論理であり、各機能を提供する。他の実施形態では、参照ブロックバッファ302、データ入力バッファ304、署名指紋計算エンジン306、照合エンジン308、符号化エンジン310、圧縮ハッシュテーブルモジュール312、参照ハッシュテーブルモジュール314、圧縮バッファ316、及びデータ出力バッファ318は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能であり、各機能を提供する。これらの任意の実施形態において、参照ブロックバッファ302、データ入力バッファ304、署名指紋計算エンジン306、照合エンジン308、符号化エンジン310、圧縮ハッシュテーブルモジュール312、参照ハッシュテーブルモジュール314、圧縮バッファ316、及びデータ出力バッファ318は、プロセッサ204及び計算デバイス200の他の構成要素と協働し通信するように構成される。
参照ブロックバッファ302は、データストリームを一時的に記憶する論理又はルーチンである。一実施形態では、参照ブロックバッファ302は、プロセッサ204により実行可能な命令セットである。別の実施形態では、参照ブロックバッファ302は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、参照ブロックバッファ302は、プロセッサ204及びデータ縮小ユニット210の他の構成要素を含む計算デバイス200の他の構成要素と協働し通信するように構成される。
一実施形態では、記憶装置制御エンジン108は、参照データブロックを操作し処理するために、参照データブロックをデータ記憶装置リポジトリ220から検索する。次に、記憶装置制御エンジン108は、参照データブロックを参照ブロックバッファ302に送信して、一時的に記憶し得る。参照データブロックを参照ブロックバッファ302に一時的に記憶することにより、参照データブロックの検索と参照データブロックの処理との間のシステム速度安定性が提供される。一実施形態では、記憶装置制御エンジン108は、参照データセットをデータ記憶装置リポジトリ220から検索して、計算デバイス200の1つ又は複数の構成要素と協働して参照データセットを処理する。参照データセットを処理する前、記憶装置制御エンジン108及び/又は計算デバイス200の1つ又は複数の他の構成要素は、参照データセットを参照ブロックバッファ302に送信して、一時的に記憶し得る。参照ブロックバッファ302は、計算デバイス200の1つ又は複数の構成要素により処理するために、1つ又は複数の参照データブロック及び/又は1つ又は複数の参照データセットを内部に含み得るキューであることができる。
データ入力バッファ304は、入力データストリームの1つ又は複数のデータブロックを一時的に記憶する論理又はルーチンである。一実施形態では、データ入力バッファ304は、プロセッサ204により実行可能な命令セットである。別の実施形態では、データ入力バッファ304は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、データ入力バッファ304は、プロセッサ204及びデータ縮小ユニット210の他の構成要素を含む計算デバイス200の他の構成要素と協働し通信するように構成される。
一実施形態では、記憶装置制御エンジン108は、入力データストリームのデータブロックを処理するために、クライアントデバイス(例えば、クライアントデバイス102)から1つ又は複数のデータブロックを受信する。記憶装置制御エンジン108は次に、受信したデータブロックをデータ入力バッファ304に送信して、一時的に記憶し得る。データブロックをデータ入力バッファ304に一時的に記憶することにより、データブロックの受信とデータブロックの処理との間のシステム処理効率が提供される。特に、記憶装置制御エンジン108の処理速度が、複数のクライアントデバイスから幾つかの入力データストリームを受信することに応答して増大する(例えば、1桁)場合、データ入力バッファは、キュースケジュールとして機能し得る。例えば、データ入力バッファ304は、記憶装置制御エンジン108が、キュースケジュール内のデータブロックに対応する位置に基づいてデータブロックを処理するように、複数のクライアントデバイスに関連付けられた1つ又は複数のデータブロックをキューに入れるキュースケジュールを含み得る。
署名指紋計算エンジン306は、データストリームに関連付けられたデータブロックの識別子を生成し分析するソフトウェア、コード、論理、又はルーチンである。一実施形態では、署名指紋計算エンジン306は、プロセッサ204により実行可能な命令セットである。別の実施形態では、署名指紋計算エンジン306は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、署名指紋計算エンジン306は、プロセッサ204及びデータ縮小ユニット210の他の構成要素を含む計算デバイス200の他の構成要素と協働し通信するように構成される。
一実施形態では、署名指紋計算エンジン306は、分析のために1つ又は複数のデータブロックを含むデータストリームを受信する。署名指紋計算エンジン306は、データストリームの1つ又は複数のデータブロックのそれぞれの識別子を生成し得る。幾つかの実施形態では、署名指紋計算エンジン306は、1つ又は複数の参照データブロックを含む参照データセットの参照識別子を生成し得る。識別子は、データストリームの各データブロックに関連付けられた指紋及び/又はデジタル署名等であるが、これらに限定されない情報を含み得る。
署名指紋計算エンジン306は、本明細書の他の箇所で考察するように、入力データストリームのデータブロックに一致する1つ又は複数の参照データブロック及び/又は参照データセット(すなわち、1つ又は複数の参照データブロックを含む参照データセット)について、データストア(例えば、データ記憶装置リポジトリ110、220)を分析することにより、入力データストリームに関連付けられたデータブロックの識別子情報(例えば、デジタル署名、指紋等)に関連付けられた情報を分析し得る。例えば、署名指紋計算エンジン306は、入力データストリームのデータブロックの指紋を生成する。署名指紋計算エンジン306は次に、入力データストリームのデータブロックの指紋を分析して、記憶装置に記憶されている複数の参照データブロック及び/又は参照データセットに関連付けられた1つ又は複数の指紋と比較することにより、指紋を分析し、一致があるか否かを判断する。更なる実施形態では、署名指紋計算エンジン306は、更に処理するために、分析の結果を照合エンジン308に送信し得る。
照合エンジン308は、データ間の類似性を識別するソフトウェア、コード、論理、又はルーチンである。一実施形態では、照合エンジン308は、プロセッサ204により実行可能な命令セットである。別の実施形態では、照合エンジン308は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、照合エンジン308は、プロセッサ204及びデータ縮小ユニット210の他の構成要素を含む計算デバイス200の他の構成要素と協働し通信するように構成される。データは、クライアントデバイスを介してアプリケーションによりレンダリングされるファイル、文書、電子メールメッセージに関連付けることができる1つ又は複数のデータブロック、参照データブロック、及び/又は参照データセットを含み得るが、これらに限定されない。
一実施形態では、照合エンジン308は、署名指紋計算エンジン306と協働して、類似性ベースアルゴリズムを適用し、入力データと記憶装置に前に記憶されたデータとの類似性を検出する。幾つかの実施形態では、照合エンジン308は、入力データに関連付けられた類似性ハッシュ(例えば、ハッシュスケッチ)と、記憶装置に前に記憶されたデータに関連付けられた類似性ハッシュ(例えば、ハッシュスケッチ)とを比較することにより、入力データと前に記憶されたデータとの類似性を識別する。類似性ハッシュは、指紋計算エンジン306により生成された識別子に関連付けられた情報の部分であることができる。
類似性ベースアルゴリズムを使用して、入力データストリームのデータブロックの類似性ハッシュと、参照データセットに関連付けられた類似性ハッシュとの類似性を検出することができる。更なる実施形態では、類似性ハッシュは、データブロック及び/又は参照データセットに関連付けられた内容のスケッチを反映し得る。例えば、スケッチは、参照データセットの参照データブロック及び/又は入力データストリームのデータブロックセットがわずかに変更される場合、維持される傾向がある参照データセット/データブロック内の最大値から生成することができる。したがって、入力データストリームのデータブロックが、既存の参照データセットに対応する類似性ハッシュ(例えば、ハッシュスケッチ)に基づいて類似する場合、符号化エンジン310に送信して、本明細書の他の箇所で考察するように、既存の参照データセットに相対して入力データストリームのデータブロックを符号化する。
他の実施形態では、照合エンジン308は、類似性ベースアルゴリズムをデータストアに記憶されている1つ又は複数の参照データブロックに適用して、参照データブロックから参照データセットを生成する。例えば、記憶装置内の参照データブロックが、対応する類似性ハッシュ(例えば、ハッシュスケッチ)等の基準に基づいて互いと類似する場合、参照データブロックは、本明細書の他の箇所で考察するように、参照データセットに集約することができる。
符号化エンジン310は、データを符号化するソフトウェア、コード、論理、又はルーチンである。一実施形態では、符号化エンジン310は、プロセッサ204により実行可能な命令セットである。別の実施形態では、符号化エンジン310は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、符号化エンジン310は、プロセッサ204及びデータ縮小ユニット210の他の構成要素を含む計算デバイス200の他の構成要素と協働し通信するように構成される。
一実施形態では、符号化エンジン310は、データストリームに関連付けられたデータブロックを符号化する。データストリームにはファイルを関連付けることができ、ここで、データストリームのデータブロックは、ファイルの内容定義チャンクである。幾つかの実施形態では、符号化エンジン310は、データブロックを含むデータストリームを受信し、データ記憶装置リポジトリ110等であるが、これに限定されない非一時的データストアに記憶されている参照データセットを使用することにより、データストリームの各データブロックを符号化する。
符号化エンジン310は、計算デバイス200の1つ又は複数の他の構成要素と協働して、参照データセットの識別子に関連付けられた情報と、データブロックの識別子に関連付けられた情報との類似性に基づいて、データブロックを符号化するための参照データセットを決定することができる。識別子情報は、データブロック/参照データセットの内容、内容バージョン(例えば、改訂)、内容への変更に関連付けられたカレンダー日付け、データサイズ等の情報を含み得る。更なる実施形態では、データストリームのデータブロックの符号化は、データストリームのデータブロックに符号化アルゴリズムを適用することを含み得る。符号化アルゴリズムの非限定的な例としては、重複排除/圧縮アルゴリズムを挙げ得るが、これに限定されない。一実施形態では、符号化エンジン310は、データストリームの符号化データブロックを圧縮バッファ316及び/又はデータ出力バッファ318に送信し得る。
他の実施形態では、符号化エンジン310は、参照データセットに基づいてデータブロックセットを符号化し、それと同時に、参照データブロックのサブセットを含む新しい参照データセット及びデータストリームに関連付けられたデータブロックセットを生成し得る。新しい参照データセットの参照データブロックのサブセットには、本明細書の他の箇所で考察されるように、データストアに現在記憶されている対応する参照データセットを関連付けることができる。
圧縮ハッシュテーブルモジュール312は、符号化データブロックに関連付けられた情報を更新するソフトウェア、コード、論理、又はルーチンである。一実施形態では、圧縮ハッシュテーブルモジュール312は、プロセッサ204により実行可能な命令セットである。別の実施形態では、圧縮ハッシュテーブルモジュール312は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、圧縮ハッシュテーブルモジュール312は、プロセッサ204及びデータ縮小ユニット210の他の構成要素を含む計算デバイス200の他の構成要素と協働し通信するように構成される。
幾つかの実施形態では、圧縮ハッシュテーブルモジュール312はバケットアレイを含み得る。バケットアレイは、バケットアレイ内部にデータブロック、参照データブロック、及び参照データセットを含むフラッシュ記憶装置等の記憶装置に関連付けられた記憶装置アレイであることができる。バケットアレイは有限サイズを有するアレイであることができる。更なる実施形態では、圧縮ハッシュテーブルモジュール312は、ハッシュ関数を使用してデータを記憶する。データは、入力データストリームのデータブロック、参照データセットの参照データブロック等を含み得るが、これらに限定されない。圧縮ハッシュテーブルモジュール312は、一実施形態では、ハッシュテーブルにデータを記憶するために、データに対してハッシュ関数アルゴリズムを使用する。他の実施形態では、ハッシュテーブルは、データ記憶装置リポジトリ110等であるが、これに限定されない記憶装置に記憶、検索、及び保持することができる。
一実施形態では、圧縮ハッシュテーブルモジュール312は、本明細書の他の箇所で考察するように、符号化データブロックの参照データポインタ(例えば、識別子)を生成し得る。符号化データブロックに関連付けられた参照データポインタは、データブロックの符号化に使用された、データストアに記憶されている対応する参照データセットを参照し得る。更なる実施形態では、参照データポインタは、システム100の1つ又は複数の他の構成要素により保持することができる。1つ又は複数の符号化データブロックに関連付けられた参照データポインタは、後に記憶装置(例えば、データ記憶装置リポジトリ110)から対応する参照データブロック及び/又は参照データセットを参照及び/又は検索するために使用し得、参照データセット及び/又は参照データブロックを使用して、受信データストリームに関連付けられた各データブロック及び/又はデータブロックセットを再構築するために使用し得る。
参照ハッシュテーブルモジュール314は、参照データブロックに関連付けられた情報を更新するソフトウェア、コード、論理、又はルーチンである。一実施形態では、参照ハッシュテーブルモジュール314は、プロセッサ204により実行可能な命令セットである。別の実施形態では、参照ハッシュテーブルモジュール314は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、参照ハッシュテーブルモジュール314は、プロセッサ204及びデータ縮小ユニット210の他の構成要素を含む計算デバイス200の他の構成要素と協働し通信するように構成される。
幾つかの実施形態では、参照ハッシュテーブルモジュール314は、データ記憶装置リポジトリ110に記憶されているレコードテーブルを更新し、ここで、レコードテーブルは、符号化データブロックを対応する参照データセットに関連付ける。他の実施形態では、参照ハッシュテーブルモジュール314は、参照データセットに関連付けられたポインタを更新する。参照データセットに関連付けられたポインタは、参照データセットについてのグローバル情報及び参照データセットをポイントするデータブロックの総数等であるが、これらに限定されない情報を含み得る。参照ハッシュテーブルモジュール314の追加の機能は、本開示全体を通して考察される。
圧縮バッファ316は、圧縮データストリームを一時的に記憶する論理又はルーチンである。一実施形態では、圧縮バッファ316は、プロセッサ204により実行可能な命令セットである。別の実施形態では、圧縮バッファ316は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、圧縮バッファ316は、プロセッサ204及びデータ縮小ユニット210の他の構成要素を含む計算デバイス200の他の構成要素と協働し通信するように構成される。
一実施形態では、圧縮ハッシュテーブルモジュール312は、符号化参照データブロックを更に処理するために、符号化(例えば、圧縮/縮小)参照データブロックを符号化エンジン310から検索する。幾つかの実施形態では、符号化エンジン310は、符号化参照データブロックを圧縮バッファ316に送信して、一時的に記憶し得る。符号化参照データブロックを圧縮バッファ316に一時的に記憶することにより、符号化参照データブロックの受信と符号化参照データブロックの更なる処理との間にシステム安定性が提供される。幾つかの実施形態では、符号化エンジン310は、参照データセットを符号化し、符号化参照データセットを圧縮バッファ316に送信する。他の実施形態では、符号化エンジン310は、データストリームに関連付けられた1つ又は複数のデータブロックを符号化し、符号化データブロックを圧縮バッファ316に送信し、一時的に記憶する。圧縮バッファ316は、計算デバイス200の1つ又は複数構成要素による処理のために、1つ又は複数の参照データブロック、参照データセット、及び/又はデータブロックを内部に含み得るキューであることができる。
データ出力バッファ318は、処理されたデータストリームを一時的に記憶する論理又はルーチンである。一実施形態では、データ出力バッファ318は、プロセッサ204により実行可能な命令セットである。別の実施形態では、データ出力バッファ318は、メモリ206に記憶され、プロセッサ204によりアクセス可能及び実行可能である。何れの実施形態でも、データ出力バッファ318は、プロセッサ204及びデータ縮小ユニット210の他の構成要素を含む計算デバイス200の他の構成要素と協働し通信するように構成される。
一実施形態では、圧縮ハッシュテーブルモジュール312及び/又は参照ハッシュテーブルモジュール314は、符号化(例えば、圧縮/縮小)データストリームを符号化エンジン310から受信する。幾つかの実施形態では、符号化エンジン310は、符号化データストリームをデータ出力バッファ318に送信して、一時的に記憶し得る。符号化データストリームは、1つ又は複数の参照データブロック、参照データセット、及び/又は現在のデータブロックを含み得るが、これらに限定されない。更に、符号化データストリームをデータ出力バッファ318に記憶することにより、符号化データストリームの受信と符号化データストリームの更なる処理との間のシステム交換安定性が届けられる。幾つかの実施形態では、データ出力バッファ318は、計算デバイス200の1つ又は複数の構成要素による、1つ又は複数の参照データブロック、参照データセット、及び/又はデータブロックの更なる処理が計画されるキューであることができる。
図4は、参照データセットを生成する例としての方法400のフローチャートである。方法400は、非一時的データストアから参照データブロックを検索すること(402)により開始し得る。幾つかの実施形態では、データ受信モジュール208は、参照データブロックを非一時的データストア(例えば、フラッシュメモリ、データ記憶装置リポジトリ110/220)から受信する。
次に、方法400は、基準に基づいて参照データブロックをセットに集約する(404)ことにより続き得る。幾つかの実施形態では、データ縮小ユニット210は、参照データブロックをデータ受信モジュール208から受信し、そこから機能を実行し得る。基準は、参照データブロック間のある程度の類似を含み得るが、これに限定されない。例えば、参照データブロックにファイルを関連付けることができ、ここで、ファイルは、内容定義チャンクに分割され、参照データブロックの各参照ブロックに内容定義チャンクが関連付けられる。一実施形態では、参照データブロックは、対応する参照データブロック間のファイルの内容定義チャンクに基づいて、ある程度の類似性を共有する。
一実施形態では、ある程度の類似性には、生成され、各参照データブロックに割り当てられた類似性ハッシュ(例えば、デジタル署名及び/又は指紋)であるが、これに限定されない識別子を関連付けることができる。類似性ハッシュは、より長いデータストリングから生成される小さい数字であることができるハッシュ値を含み得る。ハッシュ値のデータサイズは、参照データブロックよりも大幅に小さくすることができる。幾つかの実施形態では、類似性ハッシュは、2つの参照データブロックが厳密に一致するハッシュ値を有する可能性が低いように、アルゴリズムにより生成される。また、参照データブロックに関連付けられる識別子は、例えば、データ記憶装置リポジトリ110内のデータベースのテーブルに記憶することができる。
更なる実施形態では、署名指紋計算エンジン306は、照合エンジン308と協働して、データストアに問い合わせ、各参照データブロックに関連付けられた類似性ハッシュを比較し、対応する類似性ハッシュのコピーがデータストアに既に存在するか否かを判断することにより、基準に基づいて1つ又は複数の参照データブロックを集約し得る。幾つかの実施形態では、照合エンジン308は、類似性が一致する類似性ハッシュを共有する1つ又は複数の参照データブロックを集約し得る。例えば、2つの参照データブロック(例えば、参照データブロックA及び参照データブロックB)に文書を関連付けることができるが、参照データブロックAは文書の初期のバージョンを反映し、一方、参照データブロックBは、変更を有する文章の後のバージョンを反映する。したがって、参照データブロックA及び参照データブロックBは、文書に関連付けられた内容のある程度の類似性を共有しているため、セットに集約することができる。幾つかの実施形態では、ステップ404での動作は、本明細書の他の箇所で考察するように、システム100の1つ又は複数の他のエンティティと協働して、署名指紋計算エンジン306及び照合エンジン308により実行することができる。
次に、方法400は、セットに基づいて参照データセットを生成すること(406)により進み得る。セットは、1つ又は複数の参照データブロックの類似性ハッシュ間にある程度の類似性を共有する参照データブロックを含み得るが、これに限定されない。一実施形態では、符号化エンジン310は、集約参照データブロックを受信し、集約参照データブロックに基づいて参照データセットを生成し得る。参照データセットのうちの参照データブロックは、将来の入力データブロックのモデルとして、参照データセットを含むモデルを使用して、将来の入力データブロックを符号化することにより、機能する。このモデルベースの手法は、例えば、データ記憶装置リポジトリ110の記憶装置112a〜112nに記憶される総量を低減させ得る。幾つかの実施形態では、ステップ406での動作は、本明細書の他の箇所で考察するように、システム100の1つ又は複数の他のエンティティと協働して、署名指紋計算エンジン306及び照合エンジン308によって実行することができる。
方法400は次に、参照データセットを非一時的データストア(例えば、フラッシュメモリ、データ記憶装置リポジトリ110/220)に記憶すること(408)により続き得る。幾つかの実施形態では、上述したことは、更に後述するように、入力データストリームのデータブロックに関連して適用することができる。幾つかの実施形態では、ステップ408での動作は、本明細書の他の箇所で考察するように、データ出力バッファ318及び/又はシステム100の1つ又は複数の他のエンティティと協働して、符号化エンジン310により実行することができる。
図5は、データブロックを参照データセットに集約する例としての方法500のフローチャートである。方法500は、データブロックセットを含むデータストリームを受信すること(502)により開始し得る。幾つかの実施形態では、データ受信モジュール208は、データストリームをクライアントデバイス102から受信し、データストリームをデータ入力バッファ304に送信して、そこから動作を実行する。データブロックセットを含むデータストリームは、文書、電子メール、クライアントデバイス102により実行されレンダリングされるアプリケーション(例えば、メディアアプリケーション、ゲーミングアプリケーション、文書編集アプリケーション等)等に関連し得るが、これらに限定されない。例えば、データストリームはファイルに関連し得、ここで、データストリームのデータブロックは、ファイルの内容定義チャンクである。幾つかの実施形態では、ステップ502において実行される動作は、システム100の1つ又は複数の他のエンティティと協働してデータ受信モジュール208により実行し得る。
次に、方法500は、データブロックセットの各データブロックを符号化すること(504)により続く。幾つかの実施形態では、符号化エンジン310は、署名指紋計算エンジン306及び/又は照合エンジン308と協働して、データ記憶装置リポジトリ110等であるが、これに限定されない非一時的データストアに記憶されている参照データセットを使用して、データブロックセットのうちの各データブロックを符号化する。更に、データブロックセットのうちの各データブロックを符号化することは、符号化アルゴリズムを含み得る。符号化アルゴリズムの非限定的な例としては重複排除/圧縮を実施するプロプライエタリ符号化アルゴリズムを含み得る。
例えば、符号化エンジン310は、符号化アルゴリズムを利用して、データストリームに関連付けられたデータブロックセットのうちの各データブロックと、データストア(例えば、データ記憶装置リポジトリ110)に記憶されている参照データセットとの類似性を識別し得る。類似性は、データ内容(例えば、各データブロックの内容定義チャンク)、及び/又はデータブロックセットの各データブロック及びデータ内容に関連付けられた識別子情報、及び/又は参照データセットに関連付けられた識別子情報間のある程度の類似性を含み得るが、これらに限定されない。
幾つかの実施形態では、署名指紋計算エンジン306及び/又は照合エンジン308は、類似性ベースアルゴリズムを使用して、類似するデータブロック及び参照データセットが類似する類似性ハッシュ(例えば、スケッチ)を有する属性を有する類似性ハッシュ(例えば、スケッチ)を検出することができる。したがって、データブロックセットが、対応する類似性ハッシュ(例えば、スケッチ)に基づいて、記憶装置に記憶されている既存の参照データセットに類似する場合、既存の参照データセットに相対して符号化することができる。符号化エンジン310は次に、データブロックセットの符号化データブロックを圧縮バッファ316及び/又はデータ出力バッファ318に送信し得る。幾つかの実施形態では、ステップ504において実行される動作は、データ縮小ユニット210及び/又はシステム100の1つ又は複数の他のエンティティと協働して、符号化エンジン310により実行し得る。
方法は次に、データブロックセットの各符号化データブロックを対応する参照データセットに関連付けるレコードテーブルを更新すること(506)により続き得る。一実施形態では、符号化エンジン310は、データブロックセットの符号化データブロックを圧縮ハッシュテーブルモジュール312及び/又は参照ハッシュテーブルモジュール314に送信して、そこから動作を実行し得る。圧縮ハッシュテーブルモジュール312及び/又は参照ハッシュテーブルモジュール314は、データ記憶装置リポジトリ110に記憶されているレコードテーブルを更新し得、ここで、レコードテーブルは、各符号化データブロックを記憶装置(すなわち、データ記憶装置リポジトリ110)に記憶されている対応する参照データに関連付ける。
一実施形態では、圧縮ハッシュテーブルモジュール312は、符号化データブロックの参照データポインタを生成し得る。符号化データブロックに関連付けられた参照データポインタは、データブロックの符号化に使用された、データストアに記憶されている対応する参照データセットを参照し得る。幾つかの実施形態では、参照データポインタは、データストア内のレコードテーブルに記憶されている参照データセットの対応する識別子にリンクし得る。更なる実施形態では、1つ又は複数の符号化データブロックは、データブロックセットの1つ又は複数の符号化データブロックの符号化に使用された対応する参照データセットを参照する同じ参照データポインタを共有し得る。ステップ506において実行される動作は、データ縮小ユニット210及び/又はシステム100の1つ又は複数の他のエンティティと協働して、符号化エンジン310、及び/又は圧縮ハッシュテーブルモジュール312、及び/又は参照ハッシュテーブルモジュール314により実行し得る。
方法500は次に、符号化データブロックセットを非一時的データストア(例えば、フラッシュメモリ、データ記憶装置リポジトリ110/220)に記憶すること(508)により続き得る。記憶される符号化データブロックセットは、幾つかの実施形態では、セットのうちのデータブロックの符号化に使用された参照データセットの縮小版(例えば、データサイズがより小さいもの)であることができる。例えば、データブロックの縮小版は、データブロックに関連付けられたヘッダ(例えば、参照ポインタ)及び圧縮/重複排除データ内容を含み得る。幾つかの実施形態では、ステップ508における動作は、本明細書の他の箇所で考察するように、データ出力バッファ318及び/又はシステム100の1つ又は複数の他のエンティティと協働して、符号化エンジン310により実行し得る。
図6A〜図6Cは、データストリームが変化した場合、参照ブロックを参照データセットに集約する方法例のフローチャートである。これより図6Aを参照すると、方法600は、新しいデータブロックセットを含むデータストリームを受信すること(602)により開始し得る。新しいデータブロックセットは、文書、電子メール添付物等の内容データ及びクライアントデバイス(クライアントデバイス102)により実行されレンダリングされるアプリケーションに関連付けられた情報を含み得るが、これらに限定されない。一実施形態では、新しいデータブロックセットは、データ記憶装置リポジトリ110及び/又は220に記憶されている現在の参照データセットにまだ記憶されておらず、及び/又は関連付けられていないデータを示す。幾つかの実施形態では、ステップ602において実行される動作は、データ入力バッファ304及び/又はデータ縮小ユニット210の1つ又は複数の他のエンティティと協働して、データ受信モジュール208により実行し得る。
次に、方法600は、データストリームに関連付けられた新しいデータブロックセットに対して分析を実行すること(604)により進み得る。幾つかの実施形態では、分析は、署名指紋計算エンジン306により実行することができる。例えば、データ受信モジュール208は、新しいデータブロックセットを署名指紋計算エンジン306に送信し得る。署名指紋計算エンジン306は、データストリームの受信を受けて、新しいデータブロックセットの内容に対して分析を実行し得る。更に、分析は、新しいデータブロックセットの内容を抽象的に反映する内容を特定し、及び/又は新しいデータブロックセットの各データブロックの識別子(例えば、指紋、ハッシュ値)を生成する1つ又は複数のアルゴリズムを含み得る。新しいデータブロックセットの内容を特定するアルゴリズムの非限定的な例としては、対応する指紋の中で少なくとも重複を有するブロックの集合を使用するアルゴリズムを挙げ得るが、これに限定されない。別の実施形態では、新しいデータブロックセットの内容を特定するアルゴリズムは、入力データブロックの指紋を統計学的にクラスタ化し、各クラスタから1つの代表データブロックを識別することを含み得る。
更なる実施形態では、指紋計算エンジン306は、一般識別子(例えば、一般指紋又は一般デジタル署名)を新しいデータブロックセットに割り当て得る。一般識別子には、ハッシュアルゴリズムを使用して生成することができるハッシュ値を関連付けることができる。指紋計算エンジン306は、新しいデータブロックセットの重複データ部分を検出し、重複データを集約し、集約重複データにハッシュ値に関連付けて一般識別子を割り当てる。幾つかの実施形態では、ハッシュ値は、新しいデータブロックセットの各データブロックを排他的に及び/又はセット(すなわち、新しいデータブロックセット)を排他的に識別するデジタル指紋又はデジタル署名であることができる。更なる実施形態では、新しいデータブロックセットを含むデータストリームに関連付けられた識別子は、例えば、データ記憶装置リポジトリ110内のデータベースのテーブルに記憶することができる。
更に、類似性ハッシュは、冗長性について新しいデータブロックセットを分析するために、照合エンジン308と協働して指紋計算エンジン306により使用することができる。一実施形態では、2つ以上のデータブロックに関連付けられた類似性ハッシュが、所定の範囲(例えば、0〜1)を満たす場合、それら2つ以上のデータブロックは類似すると判断される。例えば、類似性ハッシュは、類似性ハッシュが1に近い場合、2つ以上のデータブロック間の内容が概ね同じであるように、0〜1の数字であることができる。更なる実施形態では、類似性ハッシュは、新しいデータブロックセットに関連付けられたデータブロックの小さいスケッチであることができる。更に、新しいデータブロックセットの分析は、データ記憶装置リポジトリ110の分析を含む指紋計算エンジン306及び/又は照合エンジン308により実行される類似性ベースの照合アルゴリズムを含み得る。データ記憶リポジトリ110の分析は、新しいデータブロックセットの類似性ハッシュをデータ記憶装置リポジトリ110に記憶されている1つ又は複数の参照データセットに関連付けられた類似性ハッシュと比較することを含み得る。幾つかの実施形態では、ステップ604における動作は、データ縮小ユニット210の1つ又は複数の他のエンティティと協働して署名指紋計算エンジン306により実行し得る。
方法600は次に、新しいデータブロックセットと少なくとも1つ又は複数の参照データセットとの間に類似性が存在するか否かを識別すること(606)により続き得る。幾つかの実施形態では、照合エンジン308は、署名指紋計算エンジン306と協働して、分析に基づいて、新しいデータブロックセットと非一時的データストアに記憶されている1つ又は複数の参照データセットとの間に類似性が存在するか否かを識別し得る。例えば、照合エンジン308は、データ記憶装置リポジトリ110等のデータストアに記憶されている1つ又は複数の参照データセット及び/又は参照データセットのセグメントの類似性ハッシュを新しいデータブロックセットに関連付けられた類似性ハッシュと比較し得る。幾つかの実施形態では、ステップ606における動作は、データ縮小ユニット210の1つ又は複数の他のエンティティと協働して照合エンジン308により実行し得る。方法600は608に進み、606において実行された動作に基づいて、類似性が存在するか否かを判断し得る。
類似性が存在する場合、方法600は610に進み得る。例えば、照合エンジン308は、新しいデータブロックセットの類似性ハッシュが、データストア(例えば、データ記憶装置リポジトリ110)に記憶されている1つ又は複数の参照データセットとある程度の類似性を共有していると判断し得る。次に、方法600は、類似性ハッシュに基づいてデータストア(例えば、フラッシュメモリ、データ記憶装置リポジトリ110/220)に記憶されている対応する参照データセットを使用して、新しいデータブロックセットの各データブロックを符号化し得る(610)。
例えば、符号化エンジン310は、記憶装置コントローラユニット106の1つ又は複数の他の構成要素と協働して、新しいセットのうちのデータブロックが、類似性ハッシュに基づいて、記憶装置内に記憶されている参照データセットのデータブロックとの類似性を有すると判断し得る。類似性ハッシュは、データブロックのスケッチ及び参照データブロックのスケッチを表し得、スケッチ間の類似性の程度に基づいて、新しいデータセットのデータブロックと記憶装置内の参照データブロックとの内容が類似しているか否かを判断することができる。一実施形態では、照合エンジン308は、新しいデータブロックセットの類似性ハッシュと、1つ又は複数の参照データセットの類似性ハッシュとの間の類似性の一致を示す情報を符号化エンジン310に送信する。
符号化エンジン310は、照合エンジン308から受信した情報に基づいて、新しいデータブロックセットの各データブロックを符号化し得る(610)。幾つかの実施形態では、新しいデータブロックセットは、データブロックのチャンクにセグメント化することができ、データブロックのチャンクは排他的に符号化し得る。一実施形態では、符号化エンジン310は、符号化アルゴリズム(例えば、重複排除/圧縮アルゴリズム)を使用して、新しいデータブロックセットの各データブロックを符号化し得る。符号化アルゴリズムは、デルタ符号化、類似性符号化、デルタ自己圧縮を含み得るが、これらに限定されない。
更に、参照データセットとある程度の類似性を共有するデータブロックを符号化することは、符号化エンジン310が、新しいデータブロックセットの対応する各データブロックのポインタを生成して割り当てることを含み得る。記憶装置制御エンジン108は将来、データブロックを再生成するために、記憶装置(例えば、データ記憶装置リポジトリ110/220)から対応するデータブロック及び/又はデータブロックセットを参照及び/又は検索するに当たりポインタを使用することができる。一実施形態では、1つ又は複数のデータブロックは同じポインタを共有し得る。例えば、新しいデータブロックセットの1つ又は複数のデータブロックは、1つ又は複数のデータブロックをデータ記憶装置リポジトリ110/220に独立して記憶する代わりに、データ記憶装置リポジトリ110/220に記憶された同じ参照データセットを参照し得、符号化エンジン310は、同じ参照データセットを参照するポインタ(例えば、参照データポインタ)を含む1つ又は複数のデータブロックの圧縮版を記憶する。別の実施形態では、新しいデータブロックセットが既存の参照データセットと類似する場合、符号化エンジン310は、参照データブロックと符号化された新しいデータブロックセットとの差を示すデルタを記憶し得る。ステップ610における動作は、圧縮バッファ316及びデータ縮小ユニット210の1つ又は複数の他のエンティティと協働して符号化エンジン310により実行し得る。
方法600は次に、新しいデータブロックセットの各符号化データブロックを、参照データセットに関連付けられた対応する参照データブロックに関連付けるレコードテーブルを更新すること(612)により進み得る。一実施形態では、圧縮ハッシュテーブルモジュール312は、符号化データブロックを受信し、データストア(例えば、データ記憶装置リポジトリ110/220)に記憶されているレコードテーブル内の各符号化データブロックの1つ又は複数のポインタを更新する。他の実施形態では、圧縮ハッシュテーブルモジュール312は、符号化データブロックセットを受信し、データストア(例えば、データ記憶装置リポジトリ110/220)に記憶されているレコードテーブル内の符号化データブロックに関連付けられたポインタを更新する。1つ又は複数の符号化データブロックに関連付けられたポインタは、後に使用されて、記憶装置(例えば、データ記憶装置リポジトリ110/220)から対応する参照データブロック及び/又は参照データセットを参照及び/又は検索し得、受信データストリームに関連付けられた各データブロック及び/又はデータブロックセットを再構築するのに使用し得る。
次に、方法600は、参照データセットを使用しての新しいデータブロックセットの各データブロックの符号化に基づいて、参照データセットの使用カウント変数をインクリメントすること(622)により、図6Aのブロック612から図6Cのブロック622に続く。一実施形態では、参照ハッシュテーブルモジュール314は、符号化エンジン310から、1つ又は複数の参照データセットが、新しいデータブロックセットを含むデータストリームに関連付けられた1つ又は複数のデータブロック及び/又はデータブロックセットの符号化に使用されたことのインジケータを受信する。次に、参照ハッシュテーブルモジュール314は、各データブロック及び/又はデータブロックセットを対応する参照データセットに記録し、対応する参照データセットの使用カウント変数をインクリメントし得る。使用カウント変数は、記憶装置内の特定の参照データセットを参照する(例えば、ポインタを使用して記憶装置内の参照データセットをポイントする)データブロック及び/又はデータブロックセットの数を示し得る。幾つかの実施形態では、ステップ622における動作は、参照ハッシュテーブルモジュール314、更新モジュール218、及び/又はデータ縮小ユニット210の1つ又は複数の他のエンティティと協働して、符号化エンジン310により実行し得る。
方法600は、参照データセットに関連付けられた使用カウント変数に基づいて、参照データセットがリタイア要件を満たすか否かを分析すること(624)により進み得る。一実施形態では、参照ハッシュテーブルモジュール314は、参照データセットが、所定の持続時間にわたり、1つ又は複数のデータブロック及び/又はデータブロックセットにより参照されていないと判断し得る。したがって、参照データセットの参照データブロックが、所定の持続時間にわたり、データブロックの再生成にもはや呼び出されていない場合、その参照データセットに関連付けられた使用カウント変数は変更(すなわち、デクリメント)される。所定の持続時間は、デフォルトにより割り当てられ、及び/又は管理者により定義される閾値を含み得る。一実施形態では、参照ハッシュテーブルモジュール314は、使用カウントリタイアアルゴリズム(例えば、ガベージコレクションアルゴリズム)を記憶装置に記憶されている各参照データセットに提供する。使用カウントリタイアアルゴリズムは自動的に、所定の持続時間が満たされ、参照データセットが、所定の持続時間中、データストリームに関連付けられた1つ又は複数のデータブロック又はデータブロックセットにより参照されなかった後、参照データセットに関連付けられた使用カウント変数のカウントをデクリメント及び/又はインクリメントし得る。他の実施形態では、使用カウントリタイアアルゴリズムは、データ呼び出しに関連付けられている参照データセットに応答して、その参照データセットの使用カウント変数に関連付けられたカウントをインクリメントし得る。データ呼び出しは、1つ又は複数のデータブロックの再構築に必要であり得る文書をレンダリングする、クライアントデバイス102による要求を示し得る。ステップ624における動作は任意選択的であり得、符号化エンジン310及びデータ縮小ユニット210の1つ又は複数の他のエンティティと協働して、参照ハッシュテーブルモジュール314により実行し得る。
方法600は次に、626に進み、対応する参照データセットのリタイアが満たされるか否かを判断し得る。参照データセットがリタイア要件を満たす場合、方法600は、使用カウント変数に基づいて、リタイア要件を満たす参照データセットをリタイアさせること(628)により進み得る。一実施形態では、参照ハッシュテーブルモジュール314は、特定の閾値までデクリメントされた使用カウント変数に基づいて、参照データセットがリタイア要件を満たすと判断する。幾つかの実施形態では、参照データセットの使用カウント変数のカウントがゼロにデクリメントされた場合、その参照データセットはリタイア要件を満たし得る。ゼロの使用カウント変数は、その対応する参照データセットに依存するデータブロック又はデータブロックセットがないことを示し得る。例えば、データブロックの元のバージョンを再構築するために、参照データセットに依存するデータブロック(例えば、圧縮/重複排除データブロック)はない。ステップ628における動作は、任意選択的であり得、データリタイアモジュール216及びデータ縮小ユニット210の1つ又は複数の他のエンティティと協働して、参照ハッシュテーブルモジュール314により実行し得る。次に、方法600は終了し得る。
しかし、ブロック626において、リタイア要件を満たす参照データセットがない場合、方法600は、追加の入力データストリームが存在するか否かを判断すること(630)に進み得る。追加の入力データストリームがある場合、方法600は図6Aのステップ602に戻り得、その他の場合、方法600は終了し得る。
図6Aのステップ608を再び参照すると、類似性が存在しない場合、方法600は図6Bのブロック614に進み、基準に基づいて新しいデータブロックセットのデータブロックをセットに集約し得、ここで、データブロックは、記憶装置(例えば、データ記憶装置リポジトリ110)に現在記憶されている参照データセットと異なる。記憶装置に現在記憶されている参照データセットと異なるデータブロックは、記憶装置に記憶されている参照データセットに関連付けられた内容とは異なる内容が関連付けられたデータブロックを含み得る。基準は、各データブロックに関連付けられた内容、管理者により定義される規則、データブロック及び/又はデータブロックセットのデータサイズ考慮事項、各データブロックに関連付けられたハッシュの無作為選択等を含み得るが、これらに限定されない。例えば、データブロックセットは、予め定義された範囲内の対応する各データブロックのデータサイズに基づいて一緒に集約し得る。幾つかの実施形態では、1つ又は複数のデータブロックは、無作為選択に基づいて集約し得る。更なる実施形態では、複数の基準を集約に使用し得る。ステップ614における動作は、データクラスタ化モジュール214及び計算デバイス200の1つ又は複数の他のエンティティと協働して、照合エンジン308により実行し得る。
次に、方法600は、非一時的データストア(例えば、データ記憶装置リポジトリ110/220)に現在記憶されている参照データセットと異なる新しいデータブロックセットのデータブロックを含むセットに基づいて、新しい参照データセットを生成すること(616)により続き得る。一実施形態では、照合エンジン308は、セットを符号化エンジン310に送信し、次に、符号化エンジン310は、基準を満たす1つ又は複数のデータブロックを含み得る新しい参照データセットを生成する。例えば、新しい参照データセットは、割り当てられた予め定義される範囲内であるデータサイズを満たす1つ又は複数のデータブロックに基づいて生成することができる。一実施形態では、符号化エンジン310は、1つ又は複数のデータブロックそれぞれ間である程度の類似性内にある内容を共有する1つ又は複数のデータブロックに基づいて、新しい参照データセットを生成する。幾つかの実施形態では、新しい参照データセットの生成に応答して、署名指紋計算エンジン306は、新しい参照データセットの識別子(例えば、指紋、ハッシュ値等)を生成し得る。ステップ616における動作は、データクラスタ化モジュール214及び計算デバイス200の1つ又は複数の他のエンティティと協働して、照合エンジン308により実行することができる。
次に、方法600は、使用カウント変数を新しい参照データセットに割り当てること(618)により進み得る。一実施形態では、符号化エンジン310は、使用カウント変数を新しい参照データセットに割り当てる。新しい参照データセットの使用カウント変数は、データブロック又はデータブロックセットが新しい参照データセットを参照する回数に関連付けられたデータ呼び出し回数を示し得る。更なる実施形態では、使用カウント変数は、参照データセットに関連付けられたハッシュ及び/又はヘッダの部分であり得る。新しい参照データセットは、その使用カウント変数が特定の値(例えば、ゼロ)にデクリメントされる場合、リタイア要件を満たし得る。幾つかの実施形態では、管理者が初期カウントを使用カウント変数に割り当て得る。ステップ618における動作は、データリタイアモジュール216及びデータ縮小ユニット210の1つ又は複数の他のエンティティと協働して、参照ハッシュテーブルモジュール314により実行し得る。
次に、方法600は、新しい参照データセットを非一時的データストアに記憶し得る(620)。例えば、符号化エンジン310は、新しい参照データセットを生成し、データ記憶装置リポジトリ110及び/又は220に記憶し得る。次に、方法600は、図6Cのブロック630に進み、追加の入力データストリームがあるか否かを判断し得る。追加の入力データストリームがある場合、方法600は図6Aのステップ602に戻り得、その他の場合、方法600は終了し得る。
図7は、パイプラインアーキテクチャにおいてデータブロックを符号化する例としての方法700のフローチャートである。方法700は、データブロックセットを含むデータストリームを受信すること(702)により開始し得る。例えば、データ受信モジュール208は、データブロックセットを含むデータストリームをクライアントデバイス(例えば、クライアントデバイス102)から受信する。幾つかの実施形態では、データストリームは、クライアントデバイスにより実行されレンダリングされる文書ファイル及び電子メール添付物等のコンテンツデータに関連し得るが、これに限定されない。更なる実施形態では、ステップ702における動作は、本明細書の他の箇所で考察するように、データ入力バッファ304及びシステム100の1つ又は複数の他のエンティティと協働して、データ受信モジュール208により実行し得る。
次に、方法700は、参照データセットを非一時的データストアから検索すること(704)により続き得る。
一実施形態では、照合エンジン308は、データストリームへの分析の実行に応答して、参照データセットを検索する。例えば、署名指紋計算エンジン306は、セットの各データブロックの内容及び/又はデータブロックセットに相互に関連付けられた内容を含むデータストリームの内容に対して分析を実行し得る。一実施形態では、分析は、指紋計算エンジン306により実行されるハッシュ値及び/又は指紋照合アルゴリズムを含み得、このアルゴリズムは、データブロックセットを含むデータストリームに関連付けられたハッシュ値及び/又は指紋を、データ記憶装置リポジトリ110に記憶されている1つ又は複数の参照データセットに関連付けられたハッシュ値及び/又は指紋と比較することを含む。幾つかの実施形態では、照合エンジン308は、データストリームに関連付けられた類似性ハッシュ(例えば、スケッチ)と、記憶装置に前に記憶された参照データセットに関連付けられた類似性ハッシュ(例えば、スケッチ)とを比較することにより、データストリームと記憶装置に前に記憶された参照データセットとの類似性を識別する。更なる実施形態では、ステップ704における動作は、照合エンジン308及びデータ縮小ユニット210の1つ又は複数の他のエンティティと協働して、署名指紋計算エンジン306により実行し得る。
方法700は、参照データセットに基づいてデータブロックセットを符号化すること(706)により進み得る。符号化は、重複排除、圧縮等のうちの1つ又は複数をデータに対して実行することによりデータを変更することを含み得るが、これに限定されない。幾つかの実施形態では、符号化エンジン310は、参照データセットに基づいてデータブロックセットを符号化し、それと同時に、データストリームに関連付けられた参照データブロックのサブセット及びデータブロックセットを含む新しい参照データセットを生成する。一実施形態では、参照データブロックのサブセットには、対応する参照データセットを関連付けることができる。例えば、データブロックセットを符号化する前、符号化エンジン310は、データ記憶装置リポジトリ110/220に記憶されている1つ又は複数の参照データセットを分析し得る。
幾つかの実施形態では、参照データセットの分析は、1つ又は複数の予め定義される条件に基づき得る。例えば、予め定義される条件は、閾値回数を超えて(例えば、毎分、毎時、毎日、毎週、毎月、毎年)、元のデータブロック(すなわち、符号化前の元の状態に戻ったデータブロック又はデータブロックセット)を再構築するために、システム100の少なくとも1つのエンティティによりデータ呼び出しされる(閾値を超えて)、参照データセット内部の使用頻度の高い参照データブロックを識別することを含み得る。幾つかの実施形態では、使用頻度の高い参照データブロックには、相対重要度を示すフラグを付けるか、又は識別子を割り当てることができる。識別子は、ポインタ、データブロックに関連付けられた情報を含むデータブロックに関連付けられたヘッダを含み得るが、これらに限定されない。更に、相対重要度は、参照データセットに関連付けられた、対応する参照データブロックが、データブロックを再構築するために、同じ参照データセットの部分である近傍参照データブロックと比較して、閾値を超えて利用されていることを示すことができる。
次に、方法700は、非一時的データストアに記憶されている参照データセットを使用して、データブロックセットを符号化すること(706)により続き得る。参照データセットを使用して符号化されるデータブロックセットは、データブロックセットに関連付けられた内容と参照データセットとの間である程度の類似性を共有する。一実施形態では、符号化エンジン310は、参照データセットに基づいて新しいデータブロックセットを符号化しながら、同時に、1つ又は複数の使用頻度の高い参照データブロック及びデータストリームの新しいデータブロックのサブセットを含む第2の参照データセットを生成する。更なる実施形態では、参照データブロックのサブセットは、所定量のデータブロックを含む。他の実施形態では、新しいデータブロックセットの符号化は、新しいデータブロックセットと参照データセットとの間でのある程度の類似性に基づく。
更に、符号化エンジン310は、非一時的データストアに記憶されている1つ又は複数の参照データセットとある程度の類似性を共有するデータブロックセットを符号化しながら、同時に、1)記憶装置に現在記憶されている1つ又は複数の参照データセットとある程度の類似性を共有しない符号化データブロック及び2)記憶装置に記憶されている1つ又は複数の参照データセットに関連付けられた使用頻度の高い参照データブロックを含む新しい参照データセットを生成し得る。したがって、新しい参照データセットは、1)現在記憶されている1つ又は複数の参照データセットとある程度の類似性を共有しないデータブロック及び2)記憶装置に記憶されている1つ又は複数の参照データセットに関連付けられた使用頻度の高い参照データブロックの両方を含む。参照ブロックはデータストリームを抽象的に表すため、これは、変化するデータストリームに新しい参照データセットを能動的に構築するに当たり、システム100をサポートするように機能する。参照データブロックは、データストリームを抽象的に表すため、データストリームの性質が変化するにつれて、参照ブロックセットも経時変化し、幾つかのブロックは参照セットのメンバでなくなり、新しいブロックが追加される間、新しい参照セットを生成することが予期される。したがって、参照セットが入力データストリームの良好な表現であるか否かを判断する重要な尺度、参照セットを能動的に管理することが重要である。そうしなければ、システムは、記憶装置に記憶された陳腐化データを含むことになり得、入力関連データを記憶する容量が少なくなり得る。幾つかの実施形態では、ステップ706における動作は、照合エンジン308、符号化エンジン310、及びデータ縮小ユニット210の1つ又は複数の他のエンティティと協働して、署名指紋計算エンジン306により実行し得る。
次に、方法700は、データブロックセット及び新しい参照データセットを非一時的データストアに記憶し得る(708)。
一実施形態では、圧縮ハッシュテーブルモジュール312及び参照ハッシュテーブルモジュール314は、データブロックセット及び/又は新しい参照データセットを参照し検索するために、データブロックセット及び新しい参照データセットに関連付けられた対応する識別子を更新し、及び/又はテーブルに記憶し得る。幾つかの実施形態では、符号化エンジン310は、圧縮バッファ316及びデータ出力バッファ318と協働して、データブロックセット及び新しい参照データセットをデータ記憶装置リポジトリ110/220に記憶する。
図8A及び図8Bは、パイプラインアーキテクチャにおいて参照データセットを生成する方法例のフローチャートである。これより図8Aを参照すると、方法800は、データブロックセットを受信すること(802)により開始し得る。一実施形態では、データ受信モジュール208は、データ入力バッファ304と協働して、データブロックセットを1つ又は複数のクライアントデバイス(例えば、クライアントデバイス102)から受信する。データブロックセットには、クライアントデバイス(例えば、クライアントデバイス102)のアプリケーションによりレンダリングされる、ワード文書、pdf、jpeg等であるが、これらに限定されないタイプの文書ファイルを関連付けることができるが、これに限定されない。次に、方法800は、データブロックセットの類似性分析を実行すること(804)により続き得る。幾つかの実施形態では、分析は、署名指紋計算エンジン306により実行し得る。例えば、データ受信モジュール208は、データブロックセットを署名指紋計算エンジン306に送信して、各機能を実行し得る。署名指紋計算エンジン306は、データブロックセットの内容に対して分析を実行し得る。分析は、データブロックセットに関連付けられた内容を特定する1つ又は複数のアルゴリズムを含み得る。幾つかの実施形態では、指紋計算エンジン306は、各ブロックの内容に基づいて、データブロックセットの各データブロックの識別子を生成し得る。
更なる実施形態では、指紋計算エンジン306は、一般識別子をデータブロックセットに割り当て得る。識別子には、ハッシュアルゴリズムを使用して生成することができるハッシュ値を関連付け得る。幾つかの実施形態では、データブロックセットに関連付けられた識別子は、例えば、データ記憶装置リポジトリ110内のデータベースに記憶することができる。他の実施形態では、識別子は、データブロックセットの各データブロックを排他的に分類し、及び/又はセット(すなわち、データブロックセット)を排他的に分類するデジタル指紋又はデジタル署名であることができる。指紋計算エンジン306及び/又は照合エンジン308は、識別子を使用して、冗長性についてデータブロックセットを分析することができる。例えば、分析は、データブロックセットの識別子をデータ記憶装置リポジトリ110に記憶されている1つ又は複数の参照データセットに関連付けられた識別子と比較することを含む、指紋計算エンジン306により一致ベースのアルゴリズムを適用することを含み得る。
次に、方法800は、データブロックセットと少なくとも1つ又は複数の参照データセットとの間に類似性が存在するか否かを識別すること(806)により続く。幾つかの実施形態では、照合エンジン308は、署名指紋計算エンジン306と協働して、分析に基づいて、データブロックセットと非一時的データストアに記憶されている1つ又は複数の参照データセットとの間に類似性が存在するか否かを識別し得る。例えば、照合エンジン308は、データブロックセットと記憶装置に記憶されている参照データセットとの間に厳密な一致が識別されなかったとのデータを指紋計算エンジン306から受信することに応答して、データブロックセットの類似性ハッシュを生成し得る。次に、照合エンジン308は、データ記憶装置リポジトリ110等のデータストアに記憶されている1つ又は複数の参照データセットの類似性ハッシュをデータブロックセットに関連付けられた類似性ハッシュと比較することができる。一実施形態では、照合エンジン308は、データ記憶装置リポジトリ110等のデータストアに記憶されている1つ又は複数の参照データセットの類似性ハッシュを、データブロックセットの各データブロックに関連付けられた個々の類似性ハッシュと比較し得る。幾つかの実施形態では、806における動作は、データ縮小ユニット210の1つ又は複数の他のエンティティと協働して、照合エンジン308により実行し得る。
次に、方法800は808に進み、類似性が存在するか否かを判断し得る。例えば、照合エンジン308は、データブロックセットが、識別子(例えば、類似性ハッシュ)に基づいて、データストアに記憶されている1つ又は複数の参照データセットとある程度の類似性を共有するか否かを判断し得る。ある程度の類似性は、入力データストリームのデータブロックセットと、記憶装置に記憶されている参照データセットとの同様の内容の閾値を含み得る。一実施形態では、ある程度の類似性は、データブロックの類似性ハッシュ(すなわち、スケッチ)を参照データセットの類似性ハッシュと比較することにより特定することができる。類似性が存在する場合、方法800はブロック810に進み得る。次に、方法800は、非一時的データストアに記憶されている対応する参照データセットを使用して、データブロックセットの各データブロックを符号化し得る(810)。対応する参照データセットは、入力データストリームの1つ又は複数のデータブロックとある程度の類似性を共有する参照データであることができる。例えば、入力データセットのデータブロックは、記憶装置に前に記憶され、参照データセットにより関連付けられた文書(すなわち、文書の現在のバージョン)の改訂された内容を含み得る。入力データセットは、閾値を満たす(すなわち、文書「入力データセット」の現在のバージョンのスケッチが、前のバージョンの「参照データセット」スケッチのスケッチの類似性内にある)ことに基づいて、参照データセットの内容(すなわち、文書の前に保存されたバージョン)とある程度の類似性を保持し得る。符号化エンジン310は、閾値が満たされる場合、参照データセットを使用して、重複コピーは記憶されず、圧縮版が記憶されるように、入力データセットを符号化(すなわち、圧縮/重複排除)し得る。幾つかの実施形態では、データブロックセットは、参照データセットを用いてデータブロックのセグメント/チャンクを排他的に符号化し得るデータブロックのセグメント/チャンクを含む。
照合エンジン308は、データブロックセットの内容と1つ又は複数の参照データセットとの類似性一致を示す情報を符号化エンジン310に送信し得る。次に、符号化エンジン310は、照合エンジン308から受信した情報に基づいて、データブロックセットの各データブロックを符号化し得る。一実施形態では、符号化エンジン310は、デルタ符号化、類似性符号化、デルタ自己圧縮等であるが、これらに限定されない符号化アルゴリズムを使用して、データブロックセットの各データブロックを符号化し得る。幾つかの実施形態では、参照データセットとある程度の類似性を共有するデータブロックの符号化は、符号化エンジン310が、データブロックセットの対応する各データブロックのポインタを生成し、割り当てることを含み得る。記憶装置制御エンジン108は、ポインタを使用して、将来のデータ呼び出しのために、対応する参照データブロック及び/又は参照データブロックセットを記憶装置(例えば、データ記憶装置リポジトリ110/220)を参照及び/又は検索し得る。更なる実施形態では、データブロックセットの1つ又は複数のデータブロックは、1つ又は複数のデータブロックを独立してデータ記憶装置リポジトリ110/220に記憶する代わりに、データ記憶装置リポジトリ110/220に記憶されている同じ参照データセットを参照し得、符号化エンジン310は、参照データセットを参照するポインタ(例えば、参照データポインタ)を含む1つ又は複数のデータブロックの圧縮版を記憶する。ステップ810における動作は、圧縮バッファ316及びデータ縮小ユニット210の1つ又は複数の他のエンティティと協働して、符号化エンジン310により実行し得る。
次に、方法800は、データブロックセットの各符号化データブロックを対応する参照データセットに関連付けるレコードテーブルを更新すること(812)により進み得る。一実施形態では、圧縮ハッシュテーブルモジュール312は、符号化データブロックを受信し、データストア(例えば、データ記憶装置リポジトリ110/220)に記憶されているレコードテーブル内の各符号化データブロックの1つ又は複数のポイントを更新する。他の実施形態では、圧縮ハッシュテーブルモジュール312は、符号化データブロックセットを受信し、データストア(例えば、データ記憶装置リポジトリ110/220)に記憶されているレコードテーブル内の符号化データブロックセットに関連付けられたポインタを更新する。
方法800は、図8Aのブロック812から図8Bのブロック822に移り、追加のデータブロックが入力中であるか否かを判断し得る(822)。追加の入力データブロックがある場合、方法800は、ステップ802(図8Aの)に戻り得、その他の場合、方法800は終了し得る。
再び図8Aのステップ808を参照すると、類似性が存在しない場合、方法800は図8Bのブロック814に進み、基準に基づいて、データブロックセットのデータブロックをセットに集約し得、ここで、データブロックは、記憶装置(例えば、データ記憶装置リポジトリ110/220)に前に記憶された参照データセットと異なる。基準は、各データブロックに関連付けられた内容、データブロック及び/又はデータブロックセットのデータサイズ考慮事項、各データブロックに関連付けられたハッシュの無作為選択等を含み得るが、これらに限定されない。例えば、データブロックセットは、予め定義された範囲内の対応する各データブロックのデータサイズに基づいて一緒に集約し得る。ステップ814における動作は、データクラスタ化モジュール214及び計算デバイス200の1つ又は複数の他のエンティティと協働して、照合エンジン308により実行し得る。
次に、方法800は、1つ又は複数の所定のパラメータに基づいて、1つ又は複数の参照データセットに関連付けられた参照データブロックのサブセットを識別すること(816)により進み得る。一実施形態では、符号化エンジン310は、データ記憶装置リポジトリ110/220に記憶されている1つ又は複数の参照データセットに関連付けられた参照データブロックのサブセットを分析し識別し得る。分析は、元のデータブロック(すなわち、符号化前の元の状態に戻されたデータブロック又はデータブロックセット)を再構築するために、システム100の1つ又は複数のエンティティにより頻繁にデータ呼び出しされる(すなわち、データ呼び出し閾値及び/又は閾値範囲を有するパラメータ)1つ又は複数参照データセットの参照データブロックを識別することを含み得る。幾つかの実施形態では、参照ブロックには、相対重要度を示すフラグを付けるか、又は識別子を割り当てることができる。相対重要度は、参照データセットに関連付けられた、対応する参照データブロックが、データブロックを再構築するために、同じ参照データセットの部分である他の近傍参照データブロックと比較して、閾値を超えて利用されていることを示すことができる。次に符号化エンジン310は、相対重要度を示すフラグが付けられているか、又は識別子が割り当てられた参照データブロックを参照データブロックのサブセットに集約し得る。幾つかの実施形態では、参照ブロックは、各参照データブロックの内容に関連付けられた類似性の程度に基づいて、サブセットにグループ化される。
次に、方法800は、新しい参照データセットを生成し、それと同時に、1つ又は複数の参照データセットとある程度の類似性を共有するデータブロックセットのデータブロックを符号化し得る(818)。一実施形態では、新しい参照データセットは、1つ又は複数の参照データセットとある程度の類似性を共有するデータブロックセットのデータブロックを用いて順次生成することができる。幾つかの実施形態では、符号化エンジン310は、新しい参照データセットを生成し、それと同時に、1つ又は複数の参照データセットとある程度の類似性を共有するデータブロックセットのデータブロックを符号化する。新しい参照データセットは、1つ又は複数の参照データセットからの参照データブロックのサブセット及び非一時的データストア(例えば、データ記憶装置リポジトリ110/220)に前に記憶された参照データセットとは異なるデータブロックセットのデータブロックを含み得る。
例えば、符号化エンジン310は、参照データセットを使用してデータブロックセットを符号化し得、ここで、参照データセットを使用して符号化されるデータブロックセットは、参照データセットとある程度類似する内容を共有する。符号化エンジン310は、1つ又は複数の参照データセットとある程度の類似性を共有するデータブロックセットを符号化しながら、同時に、1つ又は複数の参照データセットとある程度の類似性を共有しない(すなわち、異なる内容)符号化データブロックと、1つ又は複数の参照データセットに関連付けられた参照データブロックのサブセットとを含む新しい参照データセットを生成し得る。
したがって、新しい参照データセットは、データブロック(すなわち、前に記憶された1つ又は複数の参照データセットとは異なる内容を含む)及び非一時的データストアに記憶されている1つ又は複数の参照データセットに関連付けられた参照データブロックのサブセットの両方を含む。幾つかの実施形態では、ステップ818における動作は、照合エンジン308、符号化エンジン310、及び/又はデータ縮小ユニット210の1つ又は複数の他のエンティティにより実行し得る。
次に、方法800は、新しい参照データセットを非一時的データストに記憶すること(820)により進み得る。非一時的データストアは、データ記憶装置リポジトリ110/220及び/又は個々の記憶装置112を含み得るが、これらに限定されない。一実施形態では、圧縮ハッシュテーブルモジュール312は、新しい参照データセットを受信し、新しい参照データセットに関連付けられた識別子を生成する。識別子は、データストア(例えば、データ記憶装置リポジトリ110/220)に記憶されたレコードテーブルに記憶することができ、及び/又は参照データセットの一部であることができる。識別子は、記憶装置(例えば、データ記憶装置リポジトリ110/220)から新しい参照データセットを参照及び/又は検索するのに使用することができ、データストリームの入力データブロックの再構築に使用することができる。方法800は、追加のデータブロックが入力中であるか否かを判断すること(822)により続き得る。追加の入力データブロックがある場合、方法800は、ステップ802に戻り得、その他の場合、方法800は終了し得る。
図9は、フラッシュ記憶装置管理において参照データセットを追跡する例としての方法900のフローチャートである。方法900は、1つ又は複数のデータブロックを検索すること(902)により開始し得る。一実施形態では、データ受信モジュール208は、1つ又は複数のデータブロックを非一時的データストア(すなわち、データ記憶装置リポジトリ110/220)から検索し得る。1つ又は複数のデータブロックは、クライアントデバイス(例えば、クライアントデバイス102)により実行されレンダリングされる文書、ゲーム関連アプリケーション、電子メール添付物、及びアプリケーションに関連付けられた追加の情報を含み得るが、これらに限定されない。
次に、方法900は、1つ又は複数のデータブロックと、非一時的データストア(例えば、フラッシュ記憶装置)に記憶されている1つ又は複数の参照データセットとを関連性を識別すること(904)により続き得る。一実施形態では、署名指紋計算エンジン306は、照合エンジン308と協働して、1つ又は複数のデータブロックをデータ受信モジュール208から受信し、1つ又は複数のデータブロックと、データ記憶装置リポジトリ110/220(例えば、フラッシュ記憶装置)に記憶された1つ又は複数の参照データセットとの関連性を識別し得る。1つ又は複数のデータブロックの1つ又は複数の参照データセットへの関連性は、データ呼び出しでの1つ又は複数の参照データセットへの1つ又は複数のデータブロックの共通依存性を反映し得る。例えば、データ呼び出しは、再構築及び/又は符号化のために、1つ又は複数の参照データセットを参照する入力データストリームの1つ又は複数のデータブロックを含み得る。
方法900は、共通参照データセットに依存する1つ又は複数のデータブロックを含む1つ又は複数のセグメントをデータストア(例えば、データ記憶装置リポジトリ110/220)に生成すること(906)により続き得る。一実施形態では、照合エンジン308は、データブロックとデータストア(例えば、フラッシュ記憶装置、データ記憶装置リポジトリ110/220)に記憶されている参照データセットとの関連性を識別し、1つ又は複数のデータブロック及び関連性を共有する1つ又は複数の参照データセットを含むセグメントをデータストア(例えば、フラッシュ記憶装置、データ記憶装置リポジトリ110/220)に生成する。セグメントは、順次充填し、単位として消去することができるフラッシュ記憶装置の集合/部分を指す。各データブロックには、呼び出しのために依存することができる参照データセット(及び参照データセット内の特定の参照データブロック)を関連付けることができる。
更なる実施形態では、非一時的データストア内のセグメントは、1つ又は複数の参照データセットと関連性を共有する1つ又は複数のデータブロックに予め定義される記憶サイズを含み得るが、これに限定されない。幾つかの実施形態では、各セグメントは、セグメントが消去、書き込み、及び/又は読み出された回数を含む識別子、タイムスタンプ、及びデータブロック情報アレイ等の情報を含むセグメントヘッダを有する。データブロック情報アレイは、セグメントに関連付けられた各データブロックについての情報及び/又はデータブロックセットに限定的な情報を含み得るが、これに限定されない。幾つかの実施形態では、セグメントにはセグメント概要ヘッダを関連付けることができる。セグメント概要ヘッダは、セグメントについてのグローバル情報及びセグメントに関連付けられた総データブロック等であるが、これらに限定されない情報を含み得る。
次に、方法900は、データ呼び出しのためにセグメントに関連付けられた参照データセットを追跡すること(908)により続き得る。一実施形態では、データ追跡モジュール212は、1つ又は複数のクライアントデバイス102によるデータ呼び出しについて、非一時的データストア内のセグメントを追跡し得る。例えば、クライアントデバイス102は、1つ又は複数のアプリケーションをレンダリング中であり、非一時的データストアに記憶されているデータブロックを含むセグメントに関連付けられた内容へのアクセスを要求し得、データ追跡モジュール212は次に、要求に関連付けられた1つ又は複数の内容をレンダリングするために、セグメント及び/又は参照データセットが呼び出される回数を追跡し得る。したがって、各データブロックによる参照データセットの使用を個々に追跡する代わりに、システム100は、非一時的フラッシュデータ記憶装置内のメモリのセグメントにおけるデータブロックセットによる参照データブロックの使用を追跡することができる。幾つかの実施形態では、データ追跡モジュール212は、データ呼び出しに関連付けられた情報を更新モジュール218に送信し、クライアントデバイス102によるデータ呼び出しに関連付けられたセグメントの参照データセットに関連付けられたセグメントヘッダを更新する。一実施形態では、更新モジュール218は、セグメントがデータ呼び出しされた回数を含むセグメントヘッダの部分を更新する。ステップ908における動作は、データ追跡モジュール212及び更新モジュール218及び/又は計算デバイス200の1つ又は複数の他のエンティティにより実行し得る。
図10は、参照データセットに関連付けられたカウント変数を更新する例としての方法1000のフローチャートである。方法1000は、1つ又は複数の参照データセットを含むセグメントを特定すること(1002)により開始し得る。一実施形態では、データクラスタ化モジュール214は、1つ又は複数のデータブロックの内容と参照データセットとの間である程度の類似性を共有する1つ又は複数のデータブロックに基づいて、参照データセットに依存する1つ又は複数のデータブロックを特定する。幾つかの実施形態では、データクラスタ化モジュール214は、照合エンジン308と協働して、非一時的フラッシュデータストア(例えば、1つ又は複数の記憶装置112であることができるフラッシュメモリ)等の対応するメモリのセグメントに記憶された1つ又は複数の参照データセットへの1つ又は複数のデータブロックの依存性を特定する。1つ又は複数の参照データセットへの1つ又は複数のデータブロックの依存性は、将来のデータ呼び出しのために、メモリ内のセグメントの1つ又は複数の参照データセットへの1つ又は複数のデータブロックの共通再構築/符号化依存性を反映し得る。
次に、方法1000は、非一時的データストア内のメモリのセグメントに関連付けられた参照データセットの識別子タグを生成すること(1004)により続き得る。一実施形態では、データ追跡モジュール212は、非一時的データストア(例えば、フラッシュメモリ、記憶装置112等)に記憶されている参照データセットに依存する1つ又は複数のデータブロックを含むセグメントの識別子タグを生成し、識別子タグを非一時的データストアに記憶する。例えば、識別子タグは、セグメントが消去、書き込み、及び/又は読み出された回数、タイムスタンプ、及びデータブロック情報アレイ等の情報を含むセグメントヘッダであることができるが、これに限定されない。データブロック情報アレイは、セグメントに関連付けられた各データブロックについての情報及び/又は非一時的データストア(すなわち、固体状態デバイス、フラッシュメモリ等)内のセグメントのデータブロックセットに限定的な情報を含み得るが、これに限定されない。幾つかの実施形態では、ステップ1004における動作は、計算デバイス200の1つ又は複数の他のエンティティと協働して、データ追跡モジュール212及びデータクラスタ化モジュール214により実行することができる。
方法1000は、参照データセットのデータ呼び出し要求を受信すること(1006)により進み得る。一実施形態では、データ受信モジュール208は、非一時的データストアのセグメントに記憶し得る参照データセットに対する要求を受信する。データ呼び出し要求には、クライアントデバイス102で実行されるアプリケーションに関連付けられた1つ又は複数のコンテンツをレンダリングすることを関連付けることができる。次に、方法1000は、識別子タグに基づいて、参照データセットに対するデータ呼び出し要求をセグメントと関連付けること(1008)により続き得る。一実施形態では、データ追跡モジュール212は、識別子タグを使用して、クライアントデバイスからのデータ呼び出し要求を非一時的フラッシュデータストアに記憶されているセグメントの参照データセットと関連付けることができる。識別子タグには、識別情報と、セグメントが消去、書き込み、及び/又は呼び出された回数等の追加データとを含む参照データセットのセグメントヘッダを関連付けることができる。
方法1000は、セグメント及び参照データセットに関連付けられたデータ呼び出し動作を実行すること(1010)により進み得る。一実施形態では、データ縮小ユニット210は、非一時的データストアに記憶されている参照データセットを含むセグメントに関連付けられたデータ呼び出し動作を実行し得る。データ呼び出し動作は、1つ又は複数のデータブロックの再構築及び/又は入力データストリームの1つ又は複数のデータブロックの符号化等であるが、これらに限定されない動作を含み得る。データ呼び出し動作の実行に応答して、方法1000は、参照データセットに関連付けられた使用カウント変数を更新すること(1012)により進み得る。例えば、データ追跡モジュール212は、非一時的データストアに記憶されている参照データセットを含むセグメントに関連付けられた使用カウント変数を更新することができる。
幾つかの実施形態では、使用カウント変数は、データ呼び出し動作で呼び出された参照データセットを含む非一時的データストアのセグメントに関連付けられたセグメントヘッダの部分であることができる。本開示全体を通して考察されるように、使用カウント変数は、記憶装置(例えば、フラッシュメモリ)内のメモリのセグメントに関連付けられた特定の参照データセットを参照する(例えば、ポインタを使用して記憶装置内の参照データセットをポイントする)データブロック及び/又はデータブロックセットの数を示し得る。更なる実施形態では、参照データセットに関連付けられた使用カウント変数は、データ記憶装置リポジトリ110等のデータストア内のレコードテーブルに独立して記憶することができる。
次に、方法1000は、追加のデータ呼び出しがキュー内にあるか否かを判断すること(1014)により続き得る。追加のデータ呼び出しがキューに存在する場合、方法1000はステップ1006に戻ることができ、その他の場合、方法1000は終了することができる。
図11は、符号化データセグメントを非一時的データストア(例えば、フラッシュメモリ)内の新しいロケーションに割り当てる例としての方法1100のフローチャートである。方法1100は、データブロックに関連付けられたセグメントを識別すること(1102)により開始し得る。一実施形態では、データ受信モジュール208は、1つ又は複数のデータブロックを含む非一時的データストアのメモリのセグメントを識別する。
次に、方法1100は、セグメントに関連付けられたデータブロックに基づいて、参照データセットを特定すること(1104)により進む。一実施形態では、データ追跡モジュール212は、参照データセットの識別子(例えば、セグメントヘッダ)に基づいて、非一時的データストアのセグメントに関連付けられた参照データセットを特定する。参照データセットの特定に応答して、方法1100は、参照データセットの状態を特定すること(1106)により続くことができる。一実施形態では、データ追跡モジュール212は、所定のファクタ(例えば、陳腐化データ、削除期限のデータ等を含むメモリのセグメント)に基づいて、参照データセットの状態を特定し得る。例えば、データ追跡モジュール212は、参照データセットの状態に基づいて、部分的に充填されたセグメントから1つ又は複数のデータブロックを識別、比較、及び再分配し、参照データの部分である無効データブロック(すなわち、陳腐化データ、削除期限のデータ)を削除し得、それにより、参照データセットのセグメント及び/又はデータブロックを再割り当てすることができる。非所定のファクタの非限定的な例は、リタイアしつつある参照データセットを含み得る。
次に、方法1100は、参照データセットに基づいてセグメントを符号化すること(1108)により進み得る。一実施形態では、符号化エンジン310は、参照データセットに基づいて、データブロックに関連付けられたセグメントを符号化する。
最後に、方法1100は、参照データセットを含むセグメントを非一時的フラッシュデータストア内の新しいロケーションに割り当てること(1110)に続き得る。一実施形態では、符号化エンジン310は、出力バッファ318と協働して、状態に関連付けられた所定の値を満たす参照データセットを含むセグメントを非一時的データストア(例えば、フラッシュメモリ)内の新しいロケーションに割り当てる。例えば、参照データセットを反映することができる4つのデータブロック(A,B,C,D)が、非一時的データストア内のメモリのセグメントに書き込まれる。次に、4つの新しいデータブロック(E,F,G,H)及び4つの置換データブロック(A’,B’,C’,D’)が、メモリ(例えば、フラッシュメモリ)のそのセグメントに書き込まれる。元の4つのデータブロック(A,B,C,D)は、この時点では、無効(例えば、元の参照データセットの状態に関連付けられた所定の値を満たさない)データであるが、元の4つのデータブロック(A,B,C,D)は、メモリ(例えば、フラッシュメモリ)の完全なセグメントが消去されるまで、上書きすることができない。したがって、無効データ(A,B,C,D)を有するセグメントに書き込むためには、全て良好なデータである4つの新しいデータブロック(E,F,G,H)及び4つの置換データブロック(A’,B’,C’,D’)が読み出され、新しいセグメントに書き込まれ、次に、古いセグメントが消去される。幾つかの実施形態では、符号化エンジン310は、ガベージコレクションアルゴリズム等であるが、これに限定されないアルゴリズムを使用して、方法1100の上記ステップを実行し得る。ガベージコレクションアルゴリズムは、参照カウントアルゴリズム、マーク−スイープコレクタアルゴリズム、マーク−コンパクトコレクタアルゴリズム、コピーコレクタアルゴリズム等を含み得る。ステップ1110における動作は、データ追跡モジュール212及び計算デバイス200の1つ又は複数の他のエンティティと協働して、符号化エンジン310により実行し得る。
図12は、フラッシュ管理及びガベージコレクション統合に関連付けられたデータセグメントを符号化する例としての方法1200のフローチャートである。方法1200は、現在のデータストリームの現在のデータブロックを受信すること(1202)により開始し得る。幾つかの実施形態では、ステップ1202における動作は、照合エンジン308及び計算デバイス200の1つ又は複数の他のエンティティと協働して、署名指紋計算エンジン306により実行し得る。
次に、方法1200は、現在のデータブロックに基づいて、フラッシュ記憶装置のセグメントに関連付けられた参照データセットを特定すること(1204)に進む。一実施形態では、データ追跡モジュール212は、参照データセットの識別子(例えば、セグメントヘッダ)に基づいて、非一時的フラッシュデータストアのセグメントに関連付けられた参照データセットを特定する。一実施形態では、データ追跡モジュール212は、参照データセットを含む非一時的フラッシュデータストアのメモリのセグメントを識別する。例えば、非一時的データストアのメモリ内の識別されたセグメントは、現在のデータブロックと、識別されたセグメントに関連付けられた参照データセットとの間のある程度の類似性を反映し得る。
参照データセットの特定に応答して、方法1200は、参照データセットの状態を特定すること(1206)に続くことができる。幾つかの実施形態では、データ追跡モジュール212は、参照データセットの状態を特定し得る。例えば、データ追跡モジュール212は、参照データセットの状態に基づいて、部分的に充填されたセグメントからの1つ又は複数のデータブロックを比較し、再分配し、参照データセットの部分である無効データブロック(すなわち、陳腐化データ、削除期限のデータ)を削除し得、それにより、セグメント及び/又は参照データセットのデータブロックを再割り当てすることができる。
方法1200は、参照データセットに関連付けられた元のデータブロックを再生成すること(1208)により続き得る。一実施形態では、符号化エンジン310は、参照データセットの状態が所定の値未満であることに応答して、参照データセットに関連付けられた元のデータブロックを再生成する。所定の値未満の参照セットの状態は、参照データセットのリタイアがスケジュールされていることを示すことができる。次に、方法1200は、リタイアがスケジュールされている参照データセットに関連付けられた元のデータブロックを、非一時的データストアのメモリに記憶されている他の参照データセットを用いて符号化すること(1210)により進む。他の参照データセットは、リタイアがスケジュールされている参照データセットの元のデータブロック等の追加のデータブロックを記憶する空き記憶容量を含み得る。一実施形態では、データクラスタ化モジュール214は、符号化された元のデータブロックの記憶に利用可能である、非一時的データストアのメモリ内の1つ又は複数のセグメントを識別する。ステップ1210における動作は、データ追跡モジュール212及び計算デバイス200の1つ又は複数の他のエンティティと協働して、符号化エンジン310により実行し得る。
次に、方法1200は、他の参照データセットを使用して、現在のデータストリームの現在のデータブロックに関連付けられたセグメントを符号化すること(1212)により続き得る。一実施形態では、符号化エンジン310は、非一時的データストア(例えば、フラッシュメモリ)のメモリに記憶された他の参照データセットを含む1つ又は複数の他のセグメントを識別する。幾つかの実施形態では、現在のデータブロックは、チャンク(すなわち、セグメント)にセグメント化することができ、符号化エンジン310は、非一時的データストアのメモリ内の1つ又は複数の他の参照データセットを用いて、チャンクを独立して符号化することができる。ステップ1212における動作は、計算デバイス200の1つ又は複数の他のエンティティと協働して、符号化エンジン310により実行し得る。
図13は、フラッシュ管理に関連付けられた参照データセットをリタイアさせる例としての方法1300のフローチャートである。方法1300は、データ記憶装置リポジトリ110/220等のデータストアのメモリから、参照データセットを検索すること(1302)により開始し得る。一実施形態では、データリタイアモジュール216は、計算デバイス200の1つ又は複数の他の構成要素と協働して、非一時的データストア(例えば、フラッシュメモリ)のメモリに記憶されている1つ又は複数の参照データセットを検索する。次に、方法1300は、参照データセットの使用カウント変数を特定すること(1304)により続き得る。一実施形態では、データリタイアモジュール216は、データ追跡モジュール212と協働して、1つ又は複数の参照データセットに関連付けられた使用カウント変数を特定する。データリタイアモジュール216は、データストアに記憶されているレコードテーブルを分析し、参照データセットに関連付けられた識別子に基づいて、参照データセットの使用カウント変数を識別し得る。使用カウント変数は、非一時的データストア(例えば、フラッシュメモリ)のメモリ内の特定の参照データセットを参照する(例えば、ポインタを使用して記憶装置内の参照データセットをポイントする)データブロック及び/又はデータブロックセットの数を示し得る。
次に、方法1300は、非一時的データストアのメモリに記憶されている参照データセットに関連付けられた参照データブロックの母集団に対して、統計学的分析を実行すること(1306)により続き得る。例えば、データ追跡モジュール212は、非一時的データストア(例えば、フラッシュメモリ)のメモリに記憶されている参照データセットに関連付けられた参照データブロックの母集団に対して、統計学的分析を実行し得る。統計学的分析は、所定の閾値を超えてデータ呼び出しされる参照データセットの使用カウントの識別を含み得るが、これに限定されない。幾つかの実施形態では、データリタイアモジュール216は、参照データセットに関連付けられた使用カウント変数に基づいて、参照データセットがリタイア要件を満たすか否かを判断する。ステップ1306における動作は、計算デバイス200の1つ又は複数の他のエンティティと協働してデータ追跡モジュール212により実行し得る。
次に、方法1300は、使用カウントに基づいて、参照データセットがリタイア基準を満たすか否かを判断すること(1308)により進み得る。リタイア基準は、データセットに関連付けられた使用の持続時間、関連付けられたデータセットに対して最後に実行された更新/変更、ある持続時間にわたり関連付けられたデータセットに使用されたメモリ量、正常実行中にメモリに記憶されているデータセットにアクセスするために必要な時間量及びリソース量、データセットに関連付けられた読み出し/書き込みの頻度等を含み得るが、これらに限定されない。一実施形態では、参照ハッシュテーブルモジュール314は、所定の持続時間(例えば、数分、数時間、数日、数週等)にわたり、参照データセットが、1つ又は複数のデータブロック及び/又はデータブロックセットにより参照されなかったと判断し得る。幾つかの実施形態では、参照ハッシュテーブルモジュール314は、参照データセットが、データセットに関連付けられた読み出し/書き込みの閾値頻度を超えると判断し得、したがって、リタイアが、記憶装置(すなわち、フラッシュ記憶装置)の寿命を保持するために、リタイア要件を満たし得ると判断し得る。更なる実施形態では、参照ハッシュテーブルモジュール314は、関連付けられたデータセットの持続時間にわたり、記憶装置(すなわち、フラッシュ記憶装置)で使用されたメモリ量に基づいて、参照データセットが要件を満たすか否かを判断し得る。例えば、データセットは、そのデータセットに対して実行される改訂(例えば、追加情報を含むために、時間の経過に伴って行われる文書の更新)に基づいて、ある持続時間にわたりメモリ内で成長し得る。幾つかの実施形態では、記憶装置で使用されるメモリ量が閾値を満たし、ある持続時間にわたり呼び出されなかった場合、データセットを強制的にリタイアさせることができ、したがって、陳腐化データをクリアし、関連データにメモリ空間を提供する。方法1300は、参照データセットのリタイアを実行すること(1310)により続き得る。一実施形態では、データリタイアモジュール216は、使用カウントに基づいて、基準を満たす1つ又は複数の参照データセットのリタイアを実行する。
幾つかの実施形態では、参照ハッシュテーブルモジュール314は、使用カウントリタイアアルゴリズムを記憶装置に記憶されている各参照データセットに適用する。使用カウントリタイアアルゴリズムは自動的に、所定の持続時間が満たされ、参照データセットが、所定の持続時間中、データストリームに関連付けられた1つ又は複数のデータブロック又はデータブロックセットにより参照されなかった後、参照データセットに関連付けられた使用カウント変数のカウントをデクリメントし得る。幾つかの実施形態では、参照データセットは、参照データセットの使用カウント変数のカウントがゼロにデクリメントされた場合、リタイア要件を満たし得る。ゼロの使用カウント変数は、その対応する参照データセットに依存する及び/又は参照するデータブロック又はデータブロックセットがないことを示し得る。例えば、符号化データブロックの元のバージョンを再構築するために、参照データセットに依存する符号化データブロック(例えば、圧縮/重複排除データブロック)がない。更なる実施形態では、参照データセットの部分は、統計学的分析に基づいてリタイア判断される。データリタイアモジュール216は次に、リタイア要件を満たす参照データセットの参照データブロックの部分をリタイアさせ、それと同時に、1つ又は複数の所定のファクタ(例えば、記憶空間、参照データブロックのサイズ、参照データブロックのリタイアタイムスタンプ等)に基づいて、参照データセット内の残りの参照データブロックを記憶装置内のメモリの新しいセグメント(例えば、追加のデータブロックに利用できる空間を有する新しい参照データセット)に割り当て得る。
方法1300は、フォースファクタに基づいて参照データセットのリタイアを実行すること(1312)により続き得る。一実施形態では、データリタイアモジュール216は、フォースファクタに基づいて、非一時的データストア(例えば、110/220)のメモリに記憶されている1つ又は複数の参照データセットのリタイアを実行する。フォースファクタは、ガベージコレクションアルゴリズム等であるが、これに限定されないアルゴリズム内に組み込み得る。ステップ1312における動作は、任意選択的であり得、計算デバイス200の1つ又は複数の他のエンティティと協働してデータリタイアモジュール216により実行し得る。
図14Aは、参照データブロックを圧縮する従来技術の例を示すブロック図である。図14Aに示されるように、圧縮モジュールは、参照ブロックに関連付けられたデータのインライン圧縮のために、参照ブロックを受信する。インライン圧縮とは、参照ブロックのデータが、記憶装置アレイに記憶される際に圧縮(例えば、サイズ縮小)されることを意味する。圧縮モジュールに入る前の参照ブロックは、データサイズ4KB(キロバイト)を有し、参照ブロックが圧縮モジュールから出てくると、参照ブロックのサイズは大幅に低減する。次に、圧縮されたデータストリームは記憶装置に記憶される。更に、圧縮データストリームは、識別情報等を含むヘッダ(例えば、Hdr)を含み得る。インライン圧縮を実行する欠点は、圧縮モジュールが、メモリに書き込まれる前に参照ブロックのデータを統合することである。更に、ハッシュ処理及びハッシュ比較はリアルタイムで計算され、これは性能オーバーヘッドを追加するおそれがある。例えば、ハッシュ衝突を回避するために、バイト毎の比較が必要とされる場合、追加の性能オーバーヘッドがもたらされる。時間(すなわち、数ミリ秒)が重要である場合、参照ブロックのプライマリデータを圧縮するとき、インライン圧縮は一般に推奨されない。したがって、データストリームのインライン圧縮は、システムにもたらされる総オーバーヘッド性能に起因して推奨されない。
図14Bは、参照データブロックを重複排除する従来技術による例を示すブロック図である。図14Bに示されるように、重複排除(de−dupe)モジュールは、参照ブロックに関連付けられたデータをインライン重複排除するために、参照ブロックを受信する。インライン重複排除は、冗長データをなくすことにより、記憶ニーズを低減する技法である。例えば、図14Bに示されるように、重複排除モジュールに入る前の参照ブロックは、データサイズ4KB(キロバイト)を有し、参照ブロックが重複排除モジュールから出ると、参照ブロックのサイズは大幅に低減する。識別情報を含むヘッダ(例えば、Hdr)を含む重複排除されたデータストリームは次に、記憶装置に記憶される。
更に、インライン重複排除は、参照データブロックがクライアントデバイスに入る際、リアルタイムで重複排除ハッシュ計算がクライアントデバイスで生成されることを含む。クライアントデバイスは、記憶システムに既に記憶されたブロックに標的を定める場合、新しいブロックを記憶せず、むしろ、単に既存の参照ブロックへの参照を生成する。インライン重複排除の利点は、データが重複しないため、必要な記憶容量が少ないことである。しかし、ハッシュ計算及びハッシュテーブルでのルックアップ動作は、データの摂取を大幅に遅らせることになる大きい時間遅延を受けるため、デバイスのバックアップスループットが低減することから、効率は低下する。
図15は、デルタ符号化の例を示すグラフ表現である。図15に示されるように、データセット1502は、示されるようにデータブロック(0〜7)を含み得る。例えば、データセット1502には、データ記憶装置リポジトリ110/220等のデータストアに記憶されることが促される入力データストリームを関連付けることができる。データブロック(0〜7)を含むデータセット1502を記憶する前、符号化エンジン310は、サブブロックレベル重複排除を実行し得、この重複排除は、データブロック(0〜7)の類似性ハッシュを、データストアに記憶されている対応する参照データセット(図示せず)の記憶類似性ハッシュと比較することを含む。類似性ベースの類似性ハッシュが、データセット1502のデータブロックと、データストアに記憶されている1つ又は複数の既存の参照データセット(図示せず)との間に存在する場合、符号化エンジン310は、記憶装置内の既存の参照データセットを使用して、データブロック(0、2、3、及び7)により図15に示されるように、類似性ベースの類似性ハッシュに関連付けられた対応するデータブロックを符号化し得る。
符号化エンジン310は、デルタ符号化アルゴリズムにより実行することができる。デルタ符号化アルゴリズムは、データブロックと参照データセットとの間の同様の類似性ハッシュを識別し、変更されたデータのみを記憶する。例えば、符号化データブロック(0、2、3、及び7)は、元のデータセットの符号化(例えば、圧縮)データストリーム1504バージョンとして示される。更に、符号化データストリーム1504は、符号化データストリームを識別するヘッダを含み得る。ヘッダは、参照ブロックID、デルタ符号化ビットベクトル、及び符号化データストリームに関連付けられたグレイン数等であるが、これらに限定されない情報を含むこともできる。
図16は、類似性符号化の例を示すグラフ表現である。図16に示されるように、データセット1602は、示されるようにデータブロック(0〜7)を含み得る。例えば、データセット1602には、データ記憶装置リポジトリ110等のデータストアに記憶されることが促される入力データストリームを関連付けることができる。図16に示されるように、符号化エンジン310は、ブロックレベル重複排除を実行し得、この重複排除は、データブロック(0〜7)の類似性ハッシュ及び/又はデジタル署名/指紋を対応する参照データセット1604の記憶類似性ハッシュと比較することを含む。類似性ベースの類似性ハッシュが、データセット1602のデータブロックと参照データセット1604との間に存在する場合、符号化エンジン310は、図16に示されるように、類似性ベースの類似性ハッシュに関連付けられた対応するデータブロックを符号化し得る。符号化エンジン310は、類似性ベースの類似性ハッシュに関連付けられた対応するデータブロックに対して、重複排除及び自己圧縮を実行し得る。符号化データブロック1606は、元のデータセット1602のデータストリームを符号化(例えば、圧縮)したものとして示される。更に、符号化データストリーム1606は、符号化データストリームを識別するヘッダを含むこともできる。ヘッダは、参照ブロックID、全てゼロビットのベクトル、及び符号化データストリームに関連付けられたグレイン数等であるが、これらに限定されない情報を含むこともできる。
図17は、参照データブロックのデルタ及び自己圧縮の例を示すグラフ表現である。図17に示されるように、参照データブロック(0〜7)を含む参照データセット1702及びデータブロック(0〜7)を含むデータセット1704が示される。図17の目的は、デルタ及び自己圧縮アルゴリズムを使用してのデータセットの符号化を示すことである。例えば、符号化エンジン310は、類似性ハッシュ1710、1712、1714、1716、及び1718を計算することにより、データセット1704のデータブロックを処理することができる。類似性ハッシュが、参照データセット1702の参照データブロックと、データセット1704のデータブロックとの間で類似性一致を有さない場合、デルタ圧縮を実行することができる。また、データセットのスケッチを計算することもできる。スケッチは、データセット1704の各データブロックにわたる類似性ハッシュに基づいて計算することができる。データセット1704のデータブロックに類似性一致がない場合、符号化せずにスケッチをデータストアに記憶することができる。類似性一致が、データセット1704のデータブロックの類似性ハッシュ(例えば、スケッチ)と、参照データセット1702の類似性ハッシュ(例えば、スケッチ)との間に存在する場合、類似性一致に関連付けられたデータセット1704の対応するデータブロックは、1720及び1722を介して示されるように符号化され、これにより、データ記憶効率という利点がもたらされる。
図17に関連して、データセット1704のデータブロックには、類似性一致が関連付けられるが、データセット1704のデータブロックは、太線の枠で示されるように、参照データセット1702の参照データブロックと比較して少数の違い(例えば、内容変更)を有する。次に、符号化エンジン310は、参照データブロックに対する差を計算し、変更されたデータブロック1724、1726、及び1728をハッシュ値と共に参照データセット及び/又は参照データブロックに排他的に記憶し得る。更に、符号化データセット1706は、符号化データストリームを識別するヘッダを含み得る。ヘッダは、図17に示されるような参照ブロックID(例えば、ref blk:3,5,2)、全てゼロビットのベクトル、及び符号化データストリームに関連付けられたグレイン数等であるが、これらに限定されない情報を含むこともできる。
図18A及び図18Bは、フラッシュ管理におけるガベージコレクションを使用しての参照ブロックセットの例示的な追跡及びリタイアを示すグラフ表現である。これより図18Aを参照して、参照ブロックセットテーブル及びフラッシュ記憶装置内のメモリの複数のセグメントを対応するフラッシュセグメントヘッダと共に示す。示されるように、フラッシュ記憶装置に関連付けられたメモリのセグメントの部分は占有されている。例えば、占有されたセグメントの部分は、(1,2)、(3,1)、及び(1,1)を含む部分に関連する。フラッシュ記憶装置に関連付けられたセグメントのこれらの部分は、参照ブロックセット及び関連付けられたカウントに関連付けて、セグメントがポイントする参照セットを識別する対応するフラッシュセグメントヘッダを含む。例えば、示される実施形態では、(3,1)により示されるフラッシュ記憶装置デバイス内の占有セグメントの部分は、参照ブロックセットテーブルに示されるように、セグメントが参照データセット3を使用し、参照データセット3をポイントする1つのセットを有することを反映する。参照ブロックセットテーブルは、記憶装置内のメモリの部分が、使用中、構築中、及び/又はまだ使用されていないことを示す情報も含む。
これより図18Bを参照すると、フラッシュ管理におけるガベージコレクションを使用しての参照ブロックセットの追跡及びリタイアを示している。例えば、図18Aにおいて上述したように、フラッシュ記憶装置に関連付けられたメモリのセグメントの部分は占有された。例えば、占有されたセグメントの部分は、(1,2)、(3,1)、及び(1,1)を含む部分に関連する。しかし、図18Bでは、ブロック(3,1)のセグメントヘッダは、ここでは(5,1)と読まれ、ブロック(5,1)がフラッシュ記憶装置のメモリ内の新しい参照ブロックセットをポイントすることを示す。更に、参照ブロックセットテーブルは、変更されており、ここでは、ID−3に関連付けられたref#1がref#0に変更されたことを示し、フラッシュ記憶装置セグメントに記憶されたデータブロックがその対応する参照データセットをポイントしていないことを示す。更に、ID−5に関連付けられた参照データセットはここでは、ref#1を有し、フラッシュメモリの1つのセグメントがその参照データセットをポイントしていることを示す。
効率的なデータ管理アーキテクチャを実施するシステム及び方法について以下に説明する。上記説明では、説明のために、多くの特定の詳細が記載された。しかし、これらの特定の詳細の任意の所与のサブセットなしで、開示される技術が実施可能であることが理解される。他の場合、構造及びデバイスはブロック図形態で示されている。例えば、開示される技術は、上記の幾つかの実施形態では、ユーザインタフェース及び特定のハードウェアを参照して説明されている。更に、本技術は主にオンラインサービスに関連して上記開示されたが、開示される技術は、他のデータソース及び他のデータタイプ(例えば、他のリソース、例えば、画像、オーディオ、ウェブページの集合)にも適用される。
本明細書での「一実装形態」又は「実装形態」への言及は、その実装形態に関連して記載された特定の特徴、構造、又は特性が、開示される技術の少なくとも1つの実装形態に含まれることを意味する。本明細書の様々な箇所での「一実装形態では」という語句の出現は、必ずしも全てが同じ実装形態を指しているわけではない。
上で詳述された説明の幾つかの部分は、コンピュータメモリ内のデータビットに対するプロセス及び動作の象徴的表現に関して提示された。プロセスは一般に、結果をもたらすステップの自己矛盾のないシーケンスとして見なすことができる。ステップは、物理的数量の物理的操作を含み得る。これらの数量は、記憶、転送、結合、比較、及び他の方法での操作が可能な電気信号又は磁気信号の形態をとる。これらの信号は、ビット、値、要素、シンボル、文字、用語、数字等の形態であるものとして参照し得る。
これら及び同様の用語に、適切な物理的数量を関連付けることができ、これら及び同様の用語は、これらの数量に適用されるラベルとして見なすことができる。先の考察から明らかなように、別段のことが特に述べられる場合を除き、本説明全体を通して、例えば、「処理」、「計算」、「算出」、「特定」、又は「表示」等の用語を利用した考察が、コンピュータシステムのレジスタ及びメモリ内の物理的(電子的)数量として表されるデータを操作し、コンピュータシステムのメモリ若しくはレジスタ、他のそのような情報記憶装置、伝送デバイス、又は表示デバイス内の物理的数量として同様に表される他のデータに変換するコンピュータシステム又は同様の電子計算デバイスの動作及びプロセスを指し得ることが理解される。
開示される技術は、本明細書における動作を実行する装置にも関連し得る。この装置は、必要とされる目的に向けて特に構築してもよく、又はコンピュータに記憶されるコンピュータプログラムにより選択的にアクティブ化若しくは再構成される汎用コンピュータを含んでもよい。そのようなコンピュータプログラムは、例えば、それぞれがコンピュータシステムバスに結合されるフロッピーディスク、光ディスク、CD−ROM、及び磁気ディスクを含む任意のタイプのディスク、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、EPROM、EEPROM、磁気カード若しくは光学カード、不揮発性メモリと共にUSBキーを含むフラッシュメモリ、又は電子命令の記憶に適する任意のタイプの媒体であるが、これらに限定されないコンピュータ可読記憶媒体に記憶し得る。
開示される技術は、全体的にハードウェアの実装、全体的にソフトウェアの実装、又はハードウェア要素及びソフトウェア要素の両方を含む実装の形態をとることができる。幾つかの実装形態では、本技術は、ファームウェア、常駐ソフトウェア、マイクロコード等を含むが、これらに限定されないソフトウェアで実装される。
更に、開示される技術は、コンピュータ若しくは任意の命令実行システムにより使用されるか、又はコンピュータ若しくは任意の命令実行システムに関連して使用されるプログラムコードを提供する非一時的コンピュータ使用可能又はコンピュータ可読媒体からアクセス可能なコンピュータプログラム製品の形態をとることができる。本説明では、コンピュータ使用可能又はコンピュータ可読媒体は、命令実行システム、装置、又はデバイスにより使用されるか、これに関連して使用されるプログラムを包含、記憶、通信、伝搬、又は輸送することができる任意の装置であることができる。
プログラムコードの記憶及び/又は実行に適する計算システム又はデータ処理システムは、システムバスを通してメモリ要素に直接又は間接的に結合される少なくとも1つのプロセッサ(例えば、ハードウェアプロセッサ)を含む。メモリ要素は、プログラムコードの実際の実行中に利用されるローカルメモリ、大容量記憶装置、及び実行中、コードを大容量記憶装置から検索しなければならない回数を低減するために、少なくとも幾つかのプログラムコードの一時的記憶を提供するキャッシュメモリを含むことができる。
入/出力又はI/Oデバイス(キーボード、ディスプレイ、ポインティングデバイス等を含むが、これらに限定されない)は、直接又は介在I/Oコントローラを通してシステムに結合することができる。
ネットワークアダプタをシステムに結合することもでき、それにより、介在私設ネットワーク又は公衆ネットワークを通してデータ処理システムを他のデータ処理システム、リモートプリンタ、又は記憶装置に結合できるようにする。モデム、ケーブルモデル、及びEthernetカードは、現在利用可能なタイプのネットワークアダプタのごく少数のものである。
最後に、本明細書に提示されるプロセス及び表示は、いかなる特定のコンピュータ又は他の装置にも固有に関連しないことがある。様々な汎用システムを本明細書における教示によるプログラムと併用してもよく、又は必要とされる方法ステップを実行するより専用的な装置を構築することが好都合であると証明されることもある。様々なこれらのシステムに必要とされる構造は、上記説明から分かる。加えて、開示される技術は、いかなる特定のプログラミング言語も参照せずに説明された。本明細書に記載される技術の教示を実施するために、様々なプログラミング言語を使用し得ることが理解される。
本技法及び本技術の実施の上記説明は、例示及び説明を目的として提示された。網羅的、すなわち、本技法及び本技術を開示された厳密な形態に限定することは意図されない。上記教示に照らして、多くの変更形態及び変形形態が可能である。本技法及び本技術の範囲が、この詳細な説明により限定されないことが意図される。本技法及び本技術は、本技法及び本技術の趣旨又は基本的特徴から逸脱せずに、他の特定の形態で実施し得る。同様に、モジュール、ルーチン、特徴、属性、方法論、及び他の態様の特定の名称及び分担は、必須又は有意ではなく、本技法及び本技術又はその特徴を実施するメカニズムは、異なる名称、分担、及び/又はフォーマットを有し得る。更に、本技術のモジュール、ルーチン、特徴、属性、方法論、及び他の態様は、ソフトウェア、ハードウェア、ファームウェア、又はこれら3つの任意の組合せとして実施することができる。また、例がモジュールである構成要素がソフトウェアとして実施される場合は常に、構成要素は、スタンドアロンプログラムとして、より大きいプログラムの一部、複数の別個のプログラムとして、静的若しくは動的にリンクされるライブラリとして、カーネルロード可能なモジュールとして、デバイスドライバとして、及び/又はコンピュータプログラミングにおいて現在既知又は将来的に知られることになるあらゆる他の方法で実施することができる。更に、本技法及び本技術は決して、いかなる特定のプログラミング言語又はいかなる特定のオペレーティングシステム若しくは環境での実施にも限定されない。したがって、本技法及び本技術の開示は、限定ではなく例示であることが意図される。