(57)【要約】  データ管理およびデータ処理のシステムと方法が提供される。実施形態は、かなり高品質の結果を有する高速データ選択に関するシステムと方法を含み、高速データ選択関数と低速データ選択関数を含む。種々の実施形態は、データセットまたはデータのストリングに対するデータハッシングおよび/またはデータ冗長識別・除去に関するシステムと方法を含む。実施形態は、データセットまたはデータストリームから境界ポイントまたはデータブロック/ウインドウを予め選択するのに使用される第1の選択関数と、境界ポイントまたはデータブロック/ウインドウを洗練するのに使用される第２の選択関数を含む。第２の選択関数は、データセットまたはデータストリーム内の境界ポイントまたはデータブロック/ウインドウの最良の場所を決定するのが得てである。種々の実施形態において、データは第1のより高速のハッシュ関数およびより低速のより特異な第2のハッシュ関数によって処理される。
2010512565.tif 000002
【特許請求の範囲】
【請求項１】
データストリーム中の、データの複数のウインドウの一部を、第1の選択関数を用いて予め選択するステップと、
予め選択された、前記複数のウインドウの前記一部のサブセットを、第２の選択関数を用いて選択するステップと、
を有するデータ管理方法。
【請求項２】
前記第1の関数は前記第2の関数よりも、データブロック境界を選択するのが速い、請求項1に記載の方法。
【請求項３】
前記第1の関数は前記第2の関数よりも、ウインドウを選択するのが速い、請求項２に記載の方法。
【請求項４】
前記第1の関数は、ボックスカーサム関数、MLCG関数、またはrolN-xor関数を含む 請求項１に記載の方法。
【請求項５】
前記第1の関数は前記ボックスカーサム関数であり、該ボックスカーサム関数は、前記ボックスカーサムの値の選択基準と結合されている、請求項4に記載の方法。
【請求項６】
前記第2の関数はRabin指紋、SHA-1関数、またはCRC32c関数を含む、請求項1に記載の方法。
【請求項７】
前記第1の関数は、ローリングウインドウ関数、スライディングウインドウ関数、またはムービングウインドウ関数を含む、請求項1に記載の方法。
【請求項８】
前記ウインドウは、ハッシングのためのデータグループを定めるのに使用され、前記データストリーム中のブレイクポイントを決定する速度が大きくされる、請求項1に記載の方法。
【請求項９】
前記サブセットの1つまたは2つ以上のチャンクポイントによって定まるデータチャンクサイズの値を生成するステップをさらに有し、生成された値は前記データチャンクに含まれる基底データを示す、請求項１に記載の方法。
【請求項１０】
前記生成された値を、以前に生成された１つまたは複数の値と比較して、前記生成された値が、前記の以前に生成された１つまたは複数の値と等しいかどうか判定するステップをさらに有する、請求項９に記載の方法。
【請求項１１】
データ重複が存在すると判定するステップと、
重複データを有すると判定されたデータチャンク内のデータをさらに処理するのを停止するステップと、
をさらに有する、請求項10に記載の方法。
【請求項１２】
前記の生成された値を、データ重複がない場合に格納するステップをさらに有する、請求項10に記載の方法。
【請求項１３】
前記第2の関数によって選択された、データの新しいウインドウまたはデータチャンクに含まれる基底データを、以前に定められた、データの1つまた複数のウインドウまたは１つまたは複数のデータチャンクからの以前に発生した基底データと比較するステップをさらに有する、請求項1に記載の方法。
【請求項１４】
データの前記新しいウインドウに含まれる基底データを、それが前記の以前に発生した基底データと等しくなければ出力するステップと、
前記の新しいデータチャンクに含まれる前記基底データを、それが前記の以前に発生した基底データと等しくない場合に出力しないステップと、
をさらに有する、請求項1に記載の方法。
【請求項１５】
データのウインドウまたはデータチャンクに含まれる基底データを示す、データのウインドウまたはデータチャンクの値を生成するステップをさらに有する、請求項1に記載の方法。
【請求項１６】
前記生成された値を、前記の以前に生成されたまたは発生した1つまたは複数の値と比較するステップをさらに有する、請求項１５に記載の方法。
【請求項１７】
前記の生成された値を、それが前記の以前に生成されたまたは発生した1つまたは複数の値と等しくなければ出力するステップと、
前記の生成された値を、それが前記の以前に生成されたまたは発生した1つまたは複数の値と等しければ出力しないステップと、
をさらに有する、請求項16に記載の方法。
【請求項１８】
データ管理のために、データストリーム中の境界ポイントを求める方法であって、
データストリーム中の複数の境界ポイントの一部分を、第1の選択関数を用いて予め選択するステップと、
予め選択された、前記複数の境界ポイントの前記一部分のサブセットを、第２の選択関数を用いて選択するステップと、
前記複数の境界ポイントの前記一部分の前記サブセットによって求められたデータのチャンクの値を生成するステップと、
を有する方法。
【請求項１９】
前記の生成された値を、重複を検出するようにまたは前記の生成された値を格納するように、1つまたは複数の格納された値と比較するステップをさらに有する、請求項18に記載の方法。
【請求項２０】
値を生成することが、ハッシングによって行われる、請求項19に記載の方法。
【請求項２１】
1つまたは複数の境界ポイントによって定まるデータのチャンクに含まれるデータをハッシングすることによって見出された重複データを除去するステップをさらに有する、請求項20に記載の方法。
【請求項２２】
データブレイクポイントまたはウインドウの第1のセットを予め選択するように構成された第1の選択関数モジュールと、
前記の予め選択されたデータブレイクポイントまたはウインドウのサブセットを選択するように構成された第2の選択関数モジュールと、を有し、前記第1の選択関数モジュールは前記第2の選択関数モジュールよりも速くデータブレイクポイントまたはウインドウを処理する
データ処理システム。
【請求項２３】
前記第1の選択関数モジュールはボックスカーサム関数を含み、前記第2の選択関数モジュールはRabin関数を含む、請求項22に記載のデータ処理システム。
【請求項２４】
前記データ処理システムはハッシングシステムであり、コンテンツで規定される1つまた複数のデータブロックまたは1つまたは複数のチャンクポイントを出力する、請求項23に記載のデータ処理システム。
【請求項２５】
データブレイクポイントまたはウインドウの第1のセットを予め選択する手段と、
前記の予め選択されたデータブレイクポイントまたはウインドウを選択し、出力する手段と、を有し、前記の予め選択する手段は、前記データブレイクポイントまたはウインドウを前記の選択する手段よりも速く処理する、
データ処理システム。
【請求項２６】
前記サブセットの前記1つまたは複数のデータブレイクポイントまたは1つまたは複数のウインドウの各々の値を生成する手段をさらに有する、請求項25に記載のデータ処理システム。
【請求項２７】
前記のデータブレイクポイントまたはウインドウの第1のセットを予め選択する手段はローリングボックスサム関数を実行し、前記の予め選択されたデータブレイクポイントまたはウインドウのサブセットを選択し、出力する手段はRabin関数を実行し、値を生成する前記手段はSHA-1関数を実行する、請求項26に記載のデータ処理システム。
【請求項２８】
前記の生成された値はハッシュ値である、請求項27に記載のデータ処理システム。
【請求項２９】
前記データ処理システムはハッシングシステムであり、コンテンツで規定される1つまた複数のデータブロックまたは1つまたは複数のチャンクポイントを出力する、請求項25に記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理とデータ管理の分野に関し、特に、データハッシングおよび/またはデータ冗長除去のような用途のための迅速なデータ処理に関係する方法およびシステムに関する。
【０００２】
この特許出願は、2006年12月1日に出願された、Cezary Dubnicki, Erik Kruus, Cristian Ungureanunによる「即時かつ効率的データ管理および/またはデータ処理方法およびシステム」とういう名称の米国特許出願(出願番号未定)に関し、ここに全ての目的のために参照用に組み込む。
【０００３】
この開示は、例えば、ここに提示する種々の例示的C++コードおよび擬似コードのような、著作権保護を受ける情報を含む。著作権の所有者は、本特許開示または本特許のいかなる者によるファクシミリ再生に対して、本特許開示または本特許が米国特許商標庁のファイルまたは記録に現れるので異議を唱えないが、そうでない場合には全ての著作権を何が何でも留保する。
【背景技術】
【０００４】
毎日ますます多くの情報が世界中で生み出され、保持され、送信されている情報の量は驚くべき速度で増大し、データ処理と管理に重大な懸念を引き起こしている。この情報の多くは電子的に生成され、処理され、保持され、送信され、格納される。このデータ、関連するデータストリームおよび格納を処理しようとする単なる大きさは莫大である。その結果、できるだけ多くの重複データ(duplicate data)を除去することによって、データをより迅速に処理し、より少ないデータを格納し、送信する幾つかのシステムおよび方法が開発されてきた。例えば、コンピュータ、コンピュータネットワーク(例えば、イントラネットおよびインターネット)、電話機やPDAなどのモバイル機器、ハードウェア記憶装置等の種々の電子機器から重複データを格納、送信等をする必要を減らすのを助ける様々なシステムと方法が開発されてきた。さらに、特に、例えばデータ送信の間、暗号法を用いてデータを暗号化する必要性が存在する。例えば、強固な(すなわち、暗号法の)ハッシング法を提供するシステムと方法が開発され、そのような方法は、安全でない通信チャネルを通じてデータ冗長の除去を行うデータハッシングを用いる用途に全く当然に含まれる。
【０００５】
種々の電子データ管理方法およびシステムでは、データをハッシュし、および/または、例えばデータ記憶装置およびデータ送信から冗長データを除去する幾つかの方法が開発されてきた。これらの技術には、様々なデータ圧縮、データハッシュ、および暗号化法が含まれる。幾つかの例示的技術が、非特許文献1、非特許文献2、非特許文献3、非特許文献4を含む様々論文に開示されている。特許文献1、特許文献2、特許文献3、特許文献4、特許文献5を含む、様々な例示的技術を開示した幾つかの米国特許および米国特許公開も存在する。
【０００６】
しかしながら、これらの公知の技術は、ある有用な能力を欠いている。通常、良好に働く選択技術(例えば、データ冗長の高除去)程より多くの処理時間を使用し(長い時間がかかり)、非常に高速のデータ選択技術は所望の程度のデータ除去に欠ける。例えば、ファイル全体ハッシュ法(whole file hashing)、一定サイズデータデータブロックハッシュ法(fixed size data block hashing)、コンテンツで規定されるデータチャンクハッシュ法(content-defined data chunk hashing)を含む幾つかのハッシュ関数法が存在する。しかしながら、これらの技術のいずれもかなり早い(わずかの計算時間しかからず)、かつデータセット内のデータ冗長の多くを特定する能力(例えば、データ冗長の高除去を有する)ことはない。
【非特許文献１】Philip Koopman, 32-Bit Cyclic Redundancy Codes for Internet Ap  plications, Proceedings of the 2002 Conference on Dependable Systems and Netwo  rks, 2002
【非特許文献２】Jonathan Stone and Michael Greenwald, Performance of Checksums   and CRCs over Real Data, IEEE/ACM Transactions on Networking, 1998
【非特許文献３】Val Henson and Richard Henderson, An Analysis of Compare-by-Ha  sh, proceedings of the Ninth Workshop on Hot Topics in Operating Systems, Lihu  e, Hawaii, May 2003, pp. 13-18
【非特許文献４】Raj Jain, A Comparison of Hashing Schemes for Address Lookup i  n Computer Networks, IEEE Transactions on Communications, 1992.
【特許文献１】米国特許公開第2005/0131939号
【特許文献２】米国特許公開第2006/0047855号
【特許文献３】米国特許公開第2006/0112148号
【特許文献４】米国特許第7,103,602号
【特許文献５】米国特許第6,810,398号
【発明の開示】
【発明が解決しようとする課題】
【０００７】
したがって、妥当な性能を有し、かつ高速のデータ選択技術の必要性が存在する。例えば、データセット内の冗長データの多くを依然として特定しつつ、データハッシュ法および/またはデータ冗長の特定・除去を迅速に行うことができるハッシュ法および/またはデータ冗長特定・除去システムおよび方法が必要とされる。コンテンツで規定される(content defined)ハッシュ関数でデータブロックまたはデータチャンク(data chunk)を求める適切なブレイクポイント(break points)または境界(boundaries)をより迅速に求めるシステムおよび方法に対する必要性も存在する。
【課題を解決するための手段】
【０００８】
本発明は概して、データ管理およびデータ処理のシステムおよび方法を提供することに関する。例えば、実施態様は、良好に働く選択結果(例えば、データ冗長の高除去)を有する高速なデータ選択に関するシステムおよび方法を含み、より高速のデータ選択プロセスとより低速のデータ選択プロセスを含む。さらに、データセットまたはデータストリングに対するデータハッシュ法および/またはデータ冗長の特定・除去に関する例示的システムおよび方法が提供される。本発明はロバストで、高速ハッシュの速度の幾つかを、ブレイクポイントまたは境界のより適切なセットを決定するハッシュのよりロバストな性能特性と結合するシステムおよび方法を提供する。本発明は、データ処理結果の品質を著しく下げることなくデータ処理速度を上げるために、ソフトウェアとハードウェアを含むコンピュータで実行される発明であってもよい。
【０００９】
本発明の種々の実施形態において、例えば、データセットまたはデータストリームから境界ポイントまたはデータブロック/ウインドウを予め選択する第1の選択関数を含み、またデータセットまたはデータストリームから境界ポイントまたはデータブロック/ウインドウを洗練する(refine)第2の選択関数を含むシステムおよび方法が提供される。第1の関数は、第2の選択関数よりも計算が速い(例えば、ロール(roll)、すなわち、前記データセットまたはデータストリームから後続のデータブロック/ウインドウに対するハッシュ値を生成する処理時間が少なくて済む)。第２の選択関数は、境界ポイントまたはデータブロック/ウインドウのデータセットまたはデータストリーム内の適切な位置を求めるのが得てである。第２の選択関数はロール可能(rollable)であるが,そうである必要はない。1つの例示的な第1の関数は、例えば、移動するウインドウを用いる、ボックスカーサム(boxcar sum) をベースとする関数であってよい。これは、特に高速なデータ選択プロセスである。1つの例示的な第2の関数は、Rabin指紋(fingerprint)関数であってよい。この第1の関数は特に高速で、この第2の関数は、特に良好なビットランダム化(bit-randomizing)特性を有している。種々の実施態様において、第1の関数および第2の関数は、どのポイントにおいてデータセットまたはデータストリームが種々のデータブロック、チャンク、またはウインドウに分離すべきかを決定するために、コンテンツで規定される複数の境界ポイント、ブロックブレイクポイント、またはチャンクポイントを生成するのに使用されることがある。種々の実施態様において、コンテンツで規定される境界は、ハッシュ関数が適用されるデータブロック、チャンク、またはウインドウサイズを求めるのに使用され、結果としてのハッシュ値が生成されてもよい。種々の実施態様において、結果としてのハッシュ値は、データブロック、チャンク、またはウインドウが全く重複データかどうか判定し、新しいハッシュ値が固有のデータブロック、チャンク、またはウインドウとして格納されるべきかどうか判定するために、1つまたは複数の格納されたハッシュ値と比較される。
【００１０】
種々の実施態様において、データハッシュ法のための、コンテンツで規定される技術が与えられる。コンテンツで規定される技術は、高速のハッシュ関数モジュール(例えば、計算が少ないため処理時間があまりかからない)と低速のハッシュ関数モジュール(例えば、計算が多いため多くの処理時間がかかる)を有する処理システムを含む。高速のハッシュ関数モジュールは、例えば、データストリームからデータを受信し、データストリームが、データの相異なるブロックまたはチャンクに分解できる1つまたは複数の境界ポイント、ブレイクポイント、ブロックポイント、またはチャンクポイントを予め選択する。高速のハッシュ関数は、最良のデータ境界ポイント、ブレイクポイント、ブロックポイント,またはチャンクポイントを求めるときにいくらか性能が低い。高速のハッシュ関数は、例えば、ローリングウインドウまたはムービングウインドウを用いる、例えば、ボックスカーサム関数であってよい。低速のハッシュ関数モジュールは、高速のハッシュ関数によって予め選択されてデータブロックまたはデータチャンクに対してだけハッシュを行ってよい。低速のハッシュ関数ポイントは、特定の目的(例えば、より多くの冗長を特定する)を達成するためお最良のデータ境界ポイント、ブレイクポイント、ブロックポイント、またはチャンクポイントを求めるのが得てである。低速のハッシュ関数は、例えば、Rabin指紋関数、SHA-1ハッシュ、CRC32cハッシュ等であってよく、そしてローリング(rolling)または非ローリングであってよい。
【００１１】
種々の実施態様のために含まれるさらに他の態様は、次の開示と添付の図面を精読することによって当業者にとって明らかになる。
【発明を実施するための最良の形態】
【００１２】
本発明の有用性、目的、特徴、および利ポイントは、同じ番号が付された要素は同一である添付の図面とともに、本発明の実施形態の以下の詳細な説明を考慮することで容易に理解されるであろう。
【００１３】
本発明は概して、データ管理とデータ処理のシステムおよび方法に関する。種々の実施形態はマルチモードデータ選択技術に関するシステムと方法を含む。特に、種々の実施形態は、かなり高品質の結果が得られる高速データ選択に関するシステムと方法を含み、高速のデータ選択方法と低速のデータ選択方法を含む。本発明の種々の実施形態では、例えば、データセットまたはデータストリームから境界ポイントまたはデータブロック/ウインドウを予め選択するのに使用される第1の選択関数と、データセットまたはデータストリームから境界ポイントまたはデータブロック/ウインドウを純化する(refine)第2の選択関数を含むシステムと方法が提供される。第1の選択関数は第2の選択関数よりも計算速度が速い(例えば、処理時間が短い)。第2 の選択関数は、データセットまたはデータストリーム内の境界ポイントまたはデータブロック/ウインドウのための最善の場所を決定するのが得てである。第1の選択関数の1つの例は、例えばムービングウインドウを用いるボックスカーサムをベースとする関数である。これは特に高速なデータ選択方法である。第2の選択関数の1つの例は、ローリングまたは非ローリングで合ってよいRabin指紋関数である。他の選択関数は、等しく適用可能な高速/低速特性である。
【００１４】
本発明は、データ処理結果の質を著しく下げることなくデータ処理速度を改善するために、ソフトウェアとハードウェアを含む、コンピュータで実施される発明であってよい。少なくとも1つの実施形態において、ここで提供される１つまたは複数のシステムおよび1つまたは複数の方法は、コンピュータ装置(computing device)を用いて実施してよく、ネットワーク内の1つまたは複数のコンピュータ上で動作するものであってよい。例示の1つまたは複数のコンピュータ装置および１つまたは複数のネットワークの詳細が図8および図9にいくらか詳細に記載されている。これらの例に対する以前の参照は本発明の種々の詳細をよく理解する上で助けになることがわかる。
【００１５】
いずれにせよ、理解を容易にするために、ハッシュ関数および/またはデータ冗長性の同定および/またはデータ重複の除去を用いて本発明をより詳しく説明する。しかしながら、当業者は、本発明が、処理する、または格納する一連のデータを有するコンピュータ、送信するデータを有する無線通信、インターネットおよびイントラネットの用途、データ暗号化技術等を含む他のデータ管理・処理システムおよび方法にも適用できることを理解するであろう。特に、本発明を説明するのにここで使用される例示の実施形態は主として、データハッシュおよびデータ重複の除去に関する。
【００１６】
データハッシュおよび/またはデータ冗長の同定および/または除去の実施形態において、本発明は、高速のハッシュ関数と低速なハッシュ関数を含んでよい。高速な関数はチャンク、ブロックまたはハッシュポイントの事前選択であってよい。低速なハッシュ関数は、どの予め選択されたチャンクポイント、ブロックポイント、またはハッシュポイントが多くのデータ重複を特定するのによりよいかを判定するのに適用してもよい。データセットまたはデータストリング用のハッシュ関数を、大量のデータの同一のデータセクションを特定するのに使用してもよい。３つの一般的なハッシュ技術、ファイルコンテンツ全体のハッシュ、一定サイズブロックのハッシュ、コンテンツで規定されるハッシュがある。ファイルコンテンツ全体のハッシュは、データファイル全体（例えば、完全テキストまたはイメージファイル）のハッシュ値またはチェックサムを生成するように動作する。一定サイズデータブロックのハッシュは様々なデータサイズの所定の一定サイズ部分(例えば1000ビット)のハッシュ値またはチェックサムを生成するように動作する。コンテンツで規定されるデータブロックのハッシングは、大きさが選択されたデータコンテンツ標準によって決まる可変サイズデータブロックに基づいてハッシュ値またはチェックサムを生成する(例えば、X個の連続した1または0がデータ内に発見された後、データをデータチャンクに分割する)ように動作することがある。
【００１７】
次の数段落では、SHA-1の速度は3つの全ケース、すなわちファイル全体チャンキング(whole-file chunking)、一定サイズチャンキング、可変サイズチャンキング全てにおいて殆ど同じであってよい。各ケースでは、全ての入力は固有のチャンクにあり、全てのそのようなチャンクはSHA-1を評価しなければならない。しかしながら、ファイル全体チャンキング、一定サイズチャンキング、可変サイズチャンキングの間で異なることがある主なポイントの1つはそのようなSHA-1の計算の数である。それにもかかわらず、SHA-1の評価では、処理時間の大半は多くがSHA-1の計算そのものにあり、オーバーヘッドに関係した、1つまたは幾つかのSHA-1ハッシュ値の格納にはないので、全処理時間(例えばCPU時間)は殆ど同じである。
【００１８】
ファイル全体ハッシングの場合、ハッシングは全ファイルの全てのデータのハッシュ関数を適用することによって行ってもよい。例えば、SHA-1ハッシュ関数を使用し、全データファイルに適用してもよい。SHA-1ハッシュ関数は計算が複雑で、他の幾つかのハッシュ関数に対して遅い。このケースでは、それとは関係なく、重複を特定し、除去する目的で、最少の数のデータ重複が見出され、除去される。その理由は、単一ビットのデータがファイル内で変化すると、結果として得られるハッシュ値は、以前に保存されたものとは異なり、変更されたファイルと関連する全量のデータが送信されるか保存される必要があるからである(例えば、テキストファイル内の1つの文字が変化すると、テキストファイルの全データ表示とそのハッシュ値が、同じテキストファイルの以前のバージョンの重複にならないように変化する)。他方、ハッシュ関数は、データファイル全体について1回動作する必要があるだけなので、ハッシュは速い。
【００１９】
上記したように、一定サイズデータブロックハッシュ関数は、ファイル全体に見出される全データの一部またはブロックにハッシングを行い(例えば、単一のテキストファイルは10Kビットの10個の同じサイズのデータブロックに分割してもよい)、データブロックは重ならない一定サイズにセットしてもよい。もう一度、SHA-1ハッシュ関数はファイル全体(例えば100Kビット)を構成する一定サイズのブロック群(例えば10Kビット)の各々に適用してもよい。この場合、各時間にハッシュされたデータのブロックはより小さいため多くの重複があり、ファイル全体内のどこかでの単一ビット変化が、ファイル全体を構成する多数のブロックの1つが変化するに過ぎない(例えば、10個の10Kビットのブロックのうちの9個が重複する)。しかしながら、単一バイトの挿入は、多数のブロックに対する重複の検出を妨げることがある(例えば、最初の挿入を含むブロックに続くブロックは非重複にされることがある)。ブロックが小さいほど、冗長検出がよくなるが、ハッシュ関数、例えばSHA-1は、全体データファイル内で見出された同じ量のデータに対してより多くの回数、実行されなければならないので、プロセスはわずかに遅くなる。
【００２０】
最後に、コンテンツで規定されるデータチャンクハッシングを用いて、コンテンツによって定まるデータの種々のチャンクの値を同定し、生成するために、かなり低速で、幾分良好な性能(例えば、より正確で、際立った計算)を用いることによってハッシングを行うことができる。この場合、局所化された挿入(localized insertion)および局所化された代替変形例は、コンテンツで規定される単一のチャンクへ変化し、一定サイズのチャンキングと比べて、見出される重複の量を増す。1つのそのようなハッシュ関数はRabin指紋法とSHA-1ハッシュ関数の組み合わせを含んでもよい。所定の境界ポイント基準(例えば、関数の値が、X個の０また１で終わる所定数のビットまたはバイトに等しい)に基づいて、データファイル内のどこにチャンク境界をセットすべきかを判定するためにRabin指紋法を多数回、データウインドウ(例えば、スライディングウインドウ)を重複させるために用いてもよく、それからSHA-1ハッシュ関数が、(サイズが、解析されつつある根底にあるデータに基づいて変化する)決定されたデータブロックの各々に適用される。再び、入力の各バイトは、前に述べたように、あるSHA-1ハッシュ計算に入る。しかし、Rabin指紋法は、一定サイズチャックに比べて、追加の計算負荷(例えば処理時間)を呈する。このやり方は、より多くのデータ重複を特定するのに非常に得てであるが、これらの関数の両方は時間がかかり、一緒になって、ハッシングおよび/またはデータ重複の特定と除去を非常に時間のかかるものにする。事実、Rabin指紋法は、冗長データ特定および/またはデータ除去の最適化を試みる際に特に種々のデータブロックカット(cuts)またはハッシュポイントが存在すべき場所を特定するのに特に時間がかかる。
【００２１】
チャンク(chunk)するために、所望の程度のデータ除去を達成する1つの手段は、与えられたランダムデータ入力の分布と非常に一致するチャンクサイズ分布を達成するように、コンテンツ規定される決定論的方法(deterministic manner)で現実データからチャンクを生成する選択関数を用いることである。これを達成する1つの方法は、ハッシュ関数とこれに続く、発生の既知の確率を有する選択基準を用いることである。通常、任意のデータウインドウ内のビットを「スクランブルする」優れた能力を有する単一のハッシュ関数が選択される。このようにして、出力値は、入力ウインドウ内の実際のデータビットとの相関関係を殆ど示さない。そのようなビットランダム化(bit-randomizing)のハッシュ値Hによって、使用されてきた簡単な選択基準は、例えば、ある個数のビットが所定値に等しいこと主張し、またはＨ＾(Ｈ−１)＞閾値、Ｈ＞閾値、またはHとマスク＝＝値を要求することを含む。ビットランダム化ハッシュを選択手順基準と結合することは、入力ウインドウの「ランダムに見える(random-lookinｇ)」サブセットを選択する選択関数を生ずることがある。共通の願望は、そのような選択関数が、現実の(例えばランダムでない)データ入力と共に提示されたとき、ランダム状のチャンクサイズ分布を生成する、優れた可能性を有することである。
【００２２】
現実のデータを前にしてランダム状のチャンクサイズを持つと予想される種々の選択関数をここでは、優れた「ビットスクランブル」能力を有すると呼ぶ。本発明の1つの性能目標は2つの側面、すなわち1つは容易に理解できること、すなわち、動作速度であり、他の1つは、いくらか抽象的であるが、上記のビットスクランブル動作である。本発明は、どれだけビットスクランブル能力が低下するについての制御の尺度を依然として保持しつつ、動作速度を著しく大きくするデータ処理用途に対する機構を提供する。抽象的なビットスクランブル目標を満たす選択関数は十分に、それらのドメインに特有の非抽象的目標をよりよく達成できる用途が得られる。例えば、種々の用途においてこれらの目標は、良好な重複検出、良好な潜在的重複検出、良好な類似検出、少ない送信データ、大きな帯域幅、小さい記憶装置要求等を含む重複検出に関連している。そのような用途内での本発明の使用は、例えば非抽象的目標を高速に達成することになる。本発明のいくつかの特定の用途は、一例として、具体的性能目標が重複除去の速度と量であるデータ記憶システムに集中している。したがって、現実データに対する(本発明の意味での)良好な性能をもたらすハッシュ関数は、現在の瞬間またはウインドウにおける値と次の瞬間またはウインドウにおける値の間のビット毎の相関関係を有しない傾向がある。望ましいハッシュ関数は、ウインドウが入力データストリームの1つの時間から次の時間へロールしたときにハッシュ値の全てのビットにランダムに影響する可能性が大いにある。
【００２３】
ランダムデータでうまく機能するが、現実にはそうではない選択関数の例は、Ｈ＝選択規則「H＝０」に結合された「30バイトウインドウ内でのH＝非アルファベット文字(［A-Za-z］にない)の数のカウント」である。ランダムデータ入力では、Hは、確率が(204/256)**30〜=0.0011でランダムにゼロになり、したがって、908個のウインドウの1つは選択を生じ、平均が約908バイトのチャンクサイズの指数関数分布が期待される。残念なことに、ニュースの切り抜きのアーカイブを保存すると、30文字からなる単語の出現回数はこの予想よりも稀になる可能性があり、有用なチャンクポイントが得られるのが稀である可能性がある。
【００２４】
現実のデータに対して「良好な」性能を生ずるハッシュ関数は、1つの瞬間またはウインドウにおける値と次の瞬間またはウインドウにおける値の間のビット毎の相関関係を有しない傾向がある。望ましいハッシュ関数は、ウインドウが入力データストリームの1つの時間から次の時間へロールしたときにハッシュ値の全てのビットにランダムに影響する可能性が大いにある。望ましいハッシュ関数はまた、入力ウインドウ内の単一ビットが変化したときに多くのビットにランダムに影響する可能性がある。同様の考えが、良好なハッシュ関数特性の従来の多くの定義に対応し、これらの特性を果たす関数は、本発明を用いる種々の用途のために良好なビットスクランブル能力が得られる。いずれにせよ、そのようなハッシュ関数は、非ランダムの現実データで提示されたときでもうまく機能することが一般に仮定されている。
【００２５】
例えば、ボックスカー関数は、そのハッシュ値の最下位ビットを入力のバイトに対してスクランブルするのに特に不得手で、最下位ビットは入力データウインドウのビット０のパリティにのみ関連しているのは自明である。しかしながら、ボックスカー関数が入力データの連続したウインドウに対するハッシュを評価する速度は、本発明で用いられるのを特に魅力あるものにする。さらに、ボックスカーハッシュに対する選択基準はビットゼロの使用を避けて選択関数を実現するためにいくつかの実施形態では変更してもよい。上記の付随特許である米国特許出願「高速で効率的データ管理および/または処理の方法およびシステム」は、速度および重複除去の本願の性能目標が本発明によって著しく改善され、すなわち速度の大幅な増大が測定され、一方重複除去の量は、1.1テラバイトの現実データセット上で、コンテンツで規定されるチャンキングをただ行うために、例えばRabin指紋法または倍数直線一致発生器(multiplicative linear congruential generator:MLCG)を用いる幾つかの実施形態で得られたものとほぼ同じであると実証された。
【００２６】
図１を参照すると、本発明の少なくとも1つの実施形態による、マルチモードデータ境界ポイント/データブロック決定法を用いる例示的なデータ管理またデータ処理システム100が示されている。この例示的システムでは、入力データ110が高速境界ポイント/データブロックウインドウモジュール(Faster Boundary Point/Data Block Window Module)120に与えられる。この入力データ110は、マイクロプロセッサ、記憶ディスク、メモリ、コンピュータシステム等の1つまたは複数の電子装置で処理され、送信され、または格納される必要がある、例えば、一連のファイルまたはバイナリの1または０のデータのパケットであってよい。モジュール120は、それが、良好なハッシュポイント、カットポイント、境界ポイントまたはブレイクポイントを決定する従来の方法よりも処理時間が少ない、例えばボックスカー合算方法または関数を用いるので、入力データ110内のハッシュポイント、カットポイント、境界ポイントまたはブレイクポイントの決定を高速に処理することができる。モジュール120は、入力データ110内のハッシュポイント、カットポイント、境界ポイントまたはブレイクポイントを最善に選択することはできないが、その速度はより低品質のハッシュポイント、カットポイント、境界ポイントまたはブレイクポイント (例えば、重複データが特定されるのが少なくなる) を埋め合わせる。種々の実施形態では、モジュール120は考えられる全てのハッシュポイント、カットポイント、境界ポイントまたはブレイクポイントのサブセットを予め選択する。容易に回転可能な(rollable)例示的な幾つかのハッシュ関数は、ボックスカーサム関数、連続した、定数乗算およびバイト値加算（multiply-by-constant and add-byte-value :MLCG）関数、rolN-xor関数等を含んでよい。高速境界ポイント/データブロックウインドウモジュール120は低速高速境界ポイント/データブロックウインドウモジュール(Slower Boundary Point/Data Block Window Module)130と接続されていてよい。モジュール130はモジュール120よりも繰り返し当たりの処理時間が比較的長いが、ハッシュポイント、カットポイント、境界ポイントまたはブレイクポイント の決定をよりよくする(例えば、重複データが特定されるのが多くなる)のが可能である。種々の実施形態において、モジュール130は、ローリングウインドウまたは非ローリングウインドウを含んでよいCRC32c関数、Rabin指紋関数、SHA-1関数等を利用してもよい。様々なカットポイント、ブレイクポイント、ハッシュポイント、ブロックポイントの種々の関数のテーブルが表１に示され、シミュレーション中に達成される種々の速度を示している。
【００２７】
【表１】
2010512565.tif 000003
【００２８】
幾つかの簡単なハッシュ関数が表１に示されている。ハッシュに一定の初期値が割り当てられている。ウインドウ内の各バイトについて、次のバイト値ｂを加えることによってハッシュが変更されている。ここに挙げたハッシュ関数は高速ローリング版である。ここで、AとＮはハッシュに固有の定数であり、ROLは左回転(rotate-left)動作である。ｘAdlerハッシュはAdler（/Fletcher）の簡素版である。速度値は、最大量のコンパイル時間定数を有する、かなり最適化されたコードを表し、かつハッシュ関数速度を正当に示すものとしてみなすべきである。速度テストはハッシュをローリングさせることを測定し、メモリ内ランダムデータの数百メガバイト上の末端のゼロビットがないかどうか調べる。表１からわかるように、ボックスカー、MLCG、およびrolN-xorハッシュが最速とし、ゼロテーブル索引を有して、アルゴリズム速度は、要求された外部検索の数に大体従う。ローリングバージョン(以下を参照)またはxor、rolN-xor[]およびRabinハッシュはフォームA[b]の2つの索引を必要とする。
【００２９】
ハッシュ関数の種々の例示の非ローリングおよび対応するローリングバージョンのための、C++状のコードの特定バージョンを以下に示す。例示のコードでは、wsはウインドウサイズであり、bufは数バイトの入力データバッファであってよい。関数calc(buf)はチェックサムcsumの非ローリング計算であり、roll(buf)は、値がcalc(buf)であるチェックサムを少ない計算でcalc(&buf[1])での値に更新するローリングバージョンである。一定のランダム数の全体テーブルが、入力バイトを、32ビットを超えるランダムな量へ予め変換するのを要求するアルゴリズムのためのrndTable[256]として利用可能であると仮定する。ウインドウサイズがコンパイラー時間定数であるならば、幾つかのアルゴリズムがより早くロールする。より早い速度を達成するために、実際のコードは、コンパイラー最適化オプションのような種々の最適化を用いることができる。
【００３０】
非ローリングcalcおよびローリングrollルーチンに対する例示のBoxcar C++状擬似コードを以下に示す。
【００３１】
【数１】
2010512565.tif 000004
【００３２】
倍数線形合同発生器モジュール２32を用いる、非ローリングcalcおよびローリングrollルーチン用のMLCG C++状擬似コードの例を以下に示す。この選択によって、32ビット算術演算のオーバーフローはこの関数を黙示的に実行するので、モジュロ演算は32ビットマシン上では必要ないかもしれない。
【００３３】
【数２】
2010512565.tif 000005
【００３４】
簡単のため、左回転関数rol32を5ビット用い、64バイトウインドウを仮定して(roll関数にフィックスアップロール(fixups rol)演算は必要ないように) 非ローリングcalcルーチンおよびローリングrollルーチン用の例示的rolNxor C++状擬似コードを以下に示す。
【００３５】
【数３】
2010512565.tif 000006
【００３６】
簡単のため、左回転関数rol32を5ビット用い、64バイトウインドウを仮定して(roll関数にフィックスアップロール(fixups rol) 演算は必要ないように) 非ローリングcalcルーチンおよびローリングrollルーチン用の例示的rolNxor C++状擬似コードを以下に示す。
【００３７】
【数４】
2010512565.tif 000007
【００３８】
回転動作なしを除いて、rolNxor[]と同じ、非ローリングcalcルーチンおよびローリングrollルーチン用の例示的xorハッシュ C++状擬似コードを以下に示す。
【００３９】
【数５】
2010512565.tif 000008
【００４０】
索表を有しない、例えば、Adler（/Fletcher）ハッシュの変更バージョンを用いる、非ローリングcalcおよびローリングrollルーチン用の例示的xAdler C++状擬似コードを以下に示す。これらルーチンは、scramble関数によって与えられる、別の異なったステップでチェックサム値を生成しつつ、内部状態をロールするroll関数を示している。あるいは、rndTable[]を、よりスタンダードなAdlerアルゴリズムと一緒に用いることができた。
【００４１】
【数６】
2010512565.tif 000009
【００４２】
CRCを簡単に実現するための非ローリングcalcルーチンおよびローリングrollルーチン用の例示的Rabin C++状擬似コードを以下に示す。定数T[256]およびU[256]のテーブルを以下のように、例えば A. Broder, Sequences ＩＩ:Methods in Communications, Security, and Computer Science pp.143#152(1993)で 計算してもよい。
【００４３】
【数７】
2010512565.tif 000010
【００４４】
表１の簡単なハッシュ関数をチャンキングアルゴリズムで用いるとき、データは小さなチャンクで送られ、余計なバッファ管理が必要なので、実際の速度は実質的により小さい。さらに、チャンキングアプリケーションは通常チャンク全体に対して計算される頑丈な(strong)ハッシュ関数を必要とする。
【００４５】
さらに、種々の実施形態において、モジュール120とモジュール130によって使用される本方法は、コンテンツで規定されるハッシングであり、Content Defined Block/Chunk Points 140を出力する。一般に、ローリングウインドウ関数は非ローリングウインドウ関数よりも高速である。前述したように、一般に、コンテンツベースのハッシング技術は、ファイルまたは一定サイズハッシング技術よりもより多くの重複を特定するのが得手である。いずれにせよ、コンテンツで規定されるブロック/チャンクポイント140は、入力データを処理する妥当な品質レベルを維持しつつ処理時間を改善するのに使用してもよい。種々の実施形態において、これらの、コンテンツで規定されるブロック/チャンクポイント140を、重複データを特定し、暗号化を改良し、データ送信等を改善するのに使用してもよい。モジュール130はモジュール120の出力によって送られてもよいが、これらのモジュールで行われるプロセスはある程度並行にまたは同時に(例えば、デュアルプロセッサを使用して)生じることがあることに留意すべきである。モジュール130は幾つかの実施形態ではさらに入力データ１１０への直接のリソースを持ってもよい。例えば、例外的に、モジュール120が所定の基準を満たさないと判定されると、モジュール130は、破線150で示される、コンテンツで規定されるチャンキングの代わりの機構を介して入力データを処理する、多分より低速で好ましくないプロセスに着手するであろう。そのような代わりの機構は、例えば、ステップ140の出力として使われる一群のチャンクポイントを求める既知の関数を用いる技術によって提供されてもよい。
【００４６】
図2を参照すると、本発明の少なくとも1つの実施形態による、マルチモードのデータ境界ポイント/データブロック決定法を用いる例示的データ管理または処理方法200が提供される。この実施形態では、ステップ200にデータストリームまたはデータが本方法の入力として与えられる。次に、ステップ220に、境界ポイント/データチャンクウインドウの事前選択が行われる。種々の実施形態において、この事前選択は高速ハッシュ関数を用いて行ってよい。幾つかの例示的な高速ハッシュ関数には、rol-5-xor関数、定数乗算およびバイト値加算関数等が含まれる。次に、ステップ230において、境界ポイント/データの洗練されたサブセットを、低速だが良好な決定論関数、例えば、入力データにおける重複データの特定のような、好ましい特性を最大化する、ハッシュ、カット、境界、チャンクポイントを識別する品質ハッシュ関数を用いて特定してもよい。低速で高品質のハッシングの幾つかの例示的方法として、ローリングウインドウまたは非ローリングウインドウを含む、例えば、Rabin指紋関数、SHA-1関数等が含まれる。最後に、ステップ240において、本方法は、例えば、本発明の実施形態の幾つかでデータ重複および/または重複除去を決定するハッシュ値を決定するのに使われる、コンテンツで規定される境界ポイント/データチャンクウインドウを出力する。
【００４７】
図3を参照すると、本発明の少なくとも1つの実施形態による、マルチモードデータ境界ポイント決定システムおよび方法を用いるデータ管理または処理の例示的概念300が示されている。この例では、第1の高速選択関数(305)と第2の低速選択関数(310)は、考えられるデータポイント/ウインドウ320の大きなセットから望ましいハッシュ、カット、境界またはチャンクのポイントおよび/またはウインドウ340を素早く特定する(秒当たりより大きいメガバイト)を処理するように一緒に動作する。考えられるハッシュ、カット、境界またはチャンクポイントおよび/またはウインドウ320の大きなセットは、例えば、データポイントまたはチャンクA(319a), B(312a), C(317a), D(311a), E(315a), E(315a), F(316a), G(321a), H(313a), I(314a), J(318a)を含む。第1の高速選択関数305は、望ましいハッシュ、カット、境界またはチャンクポイントおよび/またはウインドウ330の、かなり良好な、予め選択されたサブグループを素早く選択するために、考えられるデータポイント/ウインドウ320の大きなセットを処理する。この例では、サブグループ330へと予め選択されるデータポイントおよび/またはデータウインドウはデータポイントおよび/またはウインドウB(312b), D(311b), E(315b), H(313b), およびI(314b)を含む。第1の高速選択関数305の処理速度は、第2の低速選択関数310よりも、例えば約2倍高速である。しかしながら、それが選択するデータハッシュポイント、カットポイント、境界ポイント、またはブレイクポイントおよび/またはデータウインドウは、第2の低速選択関数310がデータセット320を解析さえすれば、第2の低速選択関数310によって選択されるであろうものよりも低い性能を持つか好ましくないであろう。一方、第1の高速選択関数305は、かなりの数のデータハッシュポイント、カットポイント、境界ポイント、またはブレイクポイントおよび/またはデータウインドウ320を、これらのポイントが、多くの好ましい特性の最高の品質を有する多くのデータブレイクポイントおよび/またはウインドウを含む可能性が統計的に非常に高くなるように、生成することができる。したがって、第2の低速選択関数310は、B(312b), D(311b), E(315b), H(313b), およびI(314b)を含むデータポイントおよび/またはウインドウを処理し、例えば高い品質特性を有するB(312b)とD(311b)を含むデータポイントおよび/またはウインドウを含むグループ340を選択し、望ましいデータハッシュポイント、カットポイント、境界ポイントまたはブレイクポイントおよび/またはデータウインドウの多くを特定する。この方法は、データセットまたはデータストリーム内の全てのデータが処理されるまで繰り返される。
【００４８】
図4を参照すると、データセットまたはデータストリーム内の以前に発生したデータを識別するためにマルチモードデータ境界ポイント判定法を用いる、本発明の少なくとも1つの実施形態による、データ管理または処理の例示的方法400が示されている。まず、ステップ405において、入力データが処理のために与えられる。この入力データ405は、処理され、送信され、マイクロプロセッサ、記憶ディスク、メモリ、コンピュータシステム等のような1つまたは2つ以上の電子デバイスに格納される必要がある、例えば、一続きのファイルまたはバイナリの1と0のデータのパケットであってよい。次に、ステップ410において、第1の選択関数が実行される。第1の選択関数は、1つまたは2つ以上の論理ブレイクまたは境界ポイントがデータセットまたはデータストリーム内のどこで作られたかを、所定のデータ処理目的に基づいて特定する高速選択関数であってよい。種々の実施形態において、第1の選択プロセス410は、データセットまたはデータストリーム内のデータハッシュポイント、カットポイント、境界ポイントまたはブレイクポイントを特定するかなり高速のハッシュ関数であってよいが、ビットスクランブル能力が低い。第1の選択関数は、第2の選択関数に入力される全ての考えられるハッシング、カット、またはブレイクポイントのサブセットを特定する。高速の第1の選択関数は、1秒当たり処理されるメガバイトの入力データに基づいてチェックサムを高速に出力できる関数と定義される。幾つかの例示的な第1の選択関数410には、boxcar sum関数、rol-5-xor関数、連続的な定数乗算・バイト値加算関数等が含まれ、その幾つかを上記に詳細に説明し、そのあるものを以下に詳細に説明する。次に、ステップ415において、データセットまたはデータストリームにおける好適なハッシュ、カット、または境界ブレイクポイントを選択するのに優れた性能を有する第2の選択関数が実行される。種々の実施形態において、この第2の選択関数は第1の選択関数よりも低速であるが、データセットまたはデータストリームにおける好適な(例えば、重複識別および/または除去の所望の特性に基づいて)ハッシュ、カット、境界またはブレイクポイントを特定する際の良好な識別および/または正確さをもたらす。例示的な第2の選択関数415の幾つかには、上記したように、CRC32c 関数、Rabin指紋関数等が含まれ、以下に詳細に説明する。幾つかの実施形態では、第2の選択関数は、第1の選択基準によって特定されるデータセットまたはデータストリームにおけるハッシュポイント、カットポイント、境界ポイントまたはブレイクポイントのサブセットを考慮するだけである。このようにして、単一モードの選択技術に比べて、本方法はより早く行われ、処理時間が少なくて済む。
【００４９】
他の実施形態において、第2の選択関数は、第1の選択関数の出力が所定の基準を満たさず、(第2の選択モジュールの範囲内で)チャンクポイントを生成する他の機構を生成することに気づく。そのような他の機構はもっと遅く動作し、例外的な状況においてのみ動作するのが好ましい。例えば、入力の全てのウインドウが第1の選択関数によって選択され、サイズが1の多数のチャンクが生ずること、または第1の選択関数が、統計的にありそうにもない低い割合で(ランダム入力に基づく期待値に比べて)チャンクを生成していることが気づかれると、第2の選択関数は、第1の選択関数が不十分であったと判定する。この場合、呼び出された他のポリシーは、第1の(高速の)選択関数によって与えられるものよりも優れたビットスクランブル能力のハッシュ関数を用いる、例えば、チャンク技術を用いて最後のチャンクポイントまたはブレイクポイントを生成するために(鎖線417で示すように)オリジナルデータへの頼みを有している。
【００５０】
次に、ステップ420と435の一方または両方が実行される。ステップ420において、チャンクに含まれる最も新しい基底データ(underlying data)が、以前に発生した基底データと共に、それらが比較されるように特定される。ステップ420において、最も新しい基底データは、以前に発生した全ての基底データと、それらが一致するかどうか調べるために比較される。例えば、種々の実施形態において、新しい基底データは、以前に格納され、送信された基底データと比較される。ステップ420において一致があると、ステップ425において、以前に発生した基底データと一致した最も新しい基底データは出力されない。例えば、種々の実施形態において、重複が検出される。その場合、重複した基底データが除去される。一方、ステップ420において、最も新しい基底データが以前に発生した基底データのいずれとも等しくないと、ステップ430において新しい基底データが出力される(例えば、格納または送信される)。
【００５１】
ステップ435に、1つまたは複数のデータチャンクまたは1つまたは複数のブロックブロック内に含まれる基底データを示す、選択された1つまたは複数のデータチャンクまたは1つまたは複数のブロックの値が生成される。例えば、1つまたは複数のデータチャンクまたは1つまたは複数のブロックに含まれる特定のデータを表すハッシュ値が生成される。該値を生成する1つの例示的な関数は、例えば、SHA-1関数である。次に、ステップ440で、ステップ435からの最も新しく生成された値が、以前に生成された値とともに、それらが比較されるように識別される。最も新しく生成された値は、以前に生成され、発生した全ての値と、それらが一致するかどうか調べるために比較される。例えば、種々の実施形態において、新しく生成されたハッシュ値は、以前に生成されおよび/または格納され、または送信されたハッシュ値と比較される。ステップ440において一致があると、ステップ445において、以前に生成された値と一致した最も新しく生成された値は出力されない。例えば、種々の実施形態において、重複が検出される。その場合、重複したデータとその生成された値が除去され、以前に格納されたハッシュ値に関連するロケーションインディケータが、除去されたデータを再生成するように、どの場所にデータが格納されるかを示す。一方、ステップ440に、新しく生成された値、例えば、ハッシュ値が、以前に発生した値のいずれとも等しくないと、ステップ450に、新しく生成された値(例えば、ハッシュ値)とロケーションインディケータが出力され、それが表すデータが出力される(例えば、格納または送信される)。ハッシュ値の場合、それは、将来の参照のためにハッシュテーブルに格納される。
【００５２】
図5を参照すると、本発明の少なくとも1つの実施形態による、コンテンツで規定されるデータブロックまたはデータチャンクを用いる例示的なハッシング技術が示されている。コンテンツで規定されるハッシュ関数は、データセットまたはデータストリーム中のどのポイントでハッシュ、カット、境界、またはチャンクポイントが生成されるべきかを決定する所定のルールを用いて動作する。このルール、例えば、Ｘ個の連続した0と1は、データセットまたはデータストリームに適用されると、ハッシュ値を生成するためにハッシュされる、ランダムなハッシュ、カット、境界、チャンク、またはブレイクポイントおよび可変長のデータチャンクまたはデータウインドウ(例えば、C1525, C2530, C3535,およびC4540はそれぞれ異なった長さ)を生ずる。他の例として、コンテンツで規定されるデータチャンクは、各スライディングウインドウフレームに対する指紋(所定の計算に基づく基底データを表す)が計算されるRabin関数に基づく。この計算の値が、例えば、定数のｘ個の最下位ビットと一致するならば、ハッシュ、カット、境界、チャンク、またはブレイクポイントが求められ、データブロックまたはウインドウをハッシュするのに後で使用するために印を付けられる(例えば、選択される)。図5の参照番号500は、ハッシュ、カット、境界、チャンク、またはブレイクポイントを用いて、チャンクC1525、C2530、C3535、C4540へと部分的に分解されたデータストリーム502を示している。これは、スライディング法を用いることによって行うことができ、新しいバイト510をスライディングウインドウに加えることは、2つの部分で行うことができる。データストリームのウインドウエリアは、例えば、64バイトのウインドウであってよい部分520であってよい。スライディングウインドウプロセスの各ステップにおいて、スライディングウインドウの最古の部分が取り去られ、新しいものが追加される。第１のウインドウ515内の最古のバイトｂi-64505の値が指紋から減算され、新しいバイトｂi510の値がデータ指紋に加えられて第２のウインドウ518が生成される。この方法は、シンプルなボックスカー関数におけるように、指紋を加算に対して可換(commutative)にすることによって、またはウインドウサイズの特有のより複雑な機構およびスライディングウインドウフレームに対して選択された指紋計算によって可能になる。このプロセスは、新しいデータ555が、矢印560で示されるようにある時間にわたってプロセスに与えられるので、ある時間にわたって続く。最古のバイトをある時間にわたって減算すると、本計算の速度と性能は、予め計算したテーブルを用いることによって上がる。上記したように、このRabin指紋法は、その良好なビットスクランブル力のおかげで、性能の良いブレイクポイントを見つけるために第２の選択関数として用いられ、第１の選択関数よりも低速である。しかしながら、優れたビットスクランブル力をも有し、第２の選択関数としても使ってもよい他の関数が存在する。例えば、SHA-１関数を使ってもよく、あるいは、CRC32cのようなRabin指紋法の特定のバージョンを使ってもよい。
【００５３】
さて、図6を参照すると、少なくとも一実施形態による、ボックスカーサム 技術を用いる例示的な第1の選択関数600が図示されている。この例では、ボックスカーサム関数は、データセットまたはデータストリーム中のハッシュ、カット、境界、チャンク、またはブレイクポイントを求めるのに使用される。この場合、スライディングウインドウが再び使用される。さらに、プロセスを速くするために、取り除かれる古いデータブロックと、加えられる新しいデータブロックは単に所定数のバイトまたはビットのデータであり、計算は単に、Boxcar Sum=ΣＮ-バイトをi=1からｎまでとなるように、データブロックの各々における全てのデータ値を加算した合計である。したがって、新しいボックスカーサムを計算するために、データサムの最も以前のグループが取り除かれ、データ合計の最も新しいグループが加えられる。図示するように、データセットまたはデータストリーム605がハッシュするために設けられ、データグループａ，ｂ，ｃ，ｄ，ｅからなっている。データグループａ，ｂ，ｃ，ｄ，ｅは、例えば64ビットのビットまたはバイト長に等しい。第1のウインドウ610はデータグループa, b, cからなっている。データグループ「a」は、例えば15の合計値(例えば、グループaのビットのそれぞれの値の合計)を有している。データグループ「ｂ」は例えば10の合計値を有している。データグループ「ｃ」は5に等しい合計値を有している。データグループ「ｄ」は例えば10の合計値を有している。データグループ「ｅ」は例えば5の合計値を有している。データストリームまたはデータセット内の種々のデータグループに対してこれらの値が所与のものとすると、ウインドウ610のボックスカーサムは15+10+5=30となる。次に、次のボックスカーサムが、以前に計算されたサム−最も古いデータグループa640＋最も新しいデータグループｄ650、すなわち30−15＋10=25と計算される。次に、次のボックスカーサムが、以前に計算されたサム−最も古いデータグループb6550＋最も新しいデータグループｅ660、すなわち25−10＋5=20と計算される。該関数が、サムが25に等しいハッシュ、カット、境界、チャンク、またはブレイクポイントを作成するようにセットされると、ハッシュ、カット、境界、チャンク、またはブレイクポイントのサブセットはこの短い例ではポイント670を含む。わかるように、これはデータをハッシュする第1の選択関数を実行する特に簡単で早い方法であるが、ハッシュポイントの質は、高度化が欠けているため、いくらか低い。したがって、ボックスカーサム法はハッシュポイント、カットポイント、境界ポイント、チャンクポイント、またはブレイクポイントの、事前選択サブセットを生成することができる。
【００５４】
図7aと7bを参照すると、本発明の少なくとも一つの実施形態による、データウインドウ、データブロック、またはデータチャンクが、コンテンツで規定されるデータブロックまたはデータチャンクを用いる例示的なハッシュ技術のために提供される。図7aは、種々のウインドウの指紋またはハッシュ値が所定の値に等しいデータストリーム中の種々のポイントにおけるチャンキング700を示している。種々の関数をローリングウインドウ、ムービングウインドウまたはスライディングウインドウに適用してもよい。この例は、ボックスカーサムやRabin指紋関数のような、ローリングウインドウまたはスライディングウインドウを含むより高速またはより低速の選択関数を示し、所定の値に対する質の基準は、ある所望の出現確率を有する他の基準に代えることができる。この例では、スライディングウインドウ関数内の種々のウインドウ(705a−735a)が肉太で図示され、データグループa、b、c、d、e、ｆ、ｇ、ｈ、ｉ、およびjを有する、データセットまたはデータストリーム中の複数のデータグループとして構成されている。種々の時点において、新しいウインドウが形成され、ハッシュポイント、カットポイント、境界ポイント、チャンクポイント、またはブレイクポイントを生成できるかどうか判定するために所定の値に対して評価される。この例では、該所定値から、第2のウインドウ710aの終わり740で特定されるハッシュ、カットポイント、境界ポイント、チャンクポイント、またはブレイクポイントが得られる。したがって、ハッシュ値は、データブロックa、ｂ、c、ｄのサムのデータから作られる。次に、２つのスライディングタイムウインドウ、第3のウインドウ715a、第4のウインドウ720aよりも多いスライディングタイムウインドウにおいてハッシュを行ったあと、ハッシュ、カット、境界、チャンク、またはブレイクポイントが第4のウインドウ720aの終わり750で特定される。したがって、ハッシュ値がデータブロックeとｆのサム中のデータから作られる。次に、2つのスライディングタイムウインドウ、第5のウインドウ725aと第6のウインドウ730aよりも多いスライディングタイムウインドウにおけるデータの値を計算した後、ハッシュ、カット、境界、チャンク、またはブレイクポイントが第6のウインドウ730aの終わり760と特定される。したがって、ハッシュ値がデータブロックgとｈのサム中のデータから作られる。図示されるように、プロセスは、他の値一致を見出し、ハッシュ、カット、境界、チャンク、またはブレイクポイントが得られることなく第7のウインドウ735aまで続く。
【００５５】
図7bは、種々のウインドウの指紋またはハッシュ値が所定の値に等しいデータストリーム中の種々のポイントにおけるチャンキング765を示している。この例は、ハッシュ、カット、境界、チャンク、またはブレイクポイントが、新しいデータグループｚが、データグループａ、b、ｃ、ｄ、e、ｆ、ｇ、ｈ、i、およびｊを有する、以前に示されたデータセットまたはデータストリーム内に挿入されたためにどのように変わるかを示している。この図からわかるように、新しいデータグループの導入は、第4のウインドウ720ｂにおいて以前に発生した1つのハッシュ、カット、境界、チャンク、またはブレイクポイントの除去につながり、この場合、ハッシュ、カット、境界、チャンク、またはブレイクのポイントは780において選択されない。この例では、スライディングウインドウ関数内の種々のウインドウ(705b‐735b)が肉太に図示され、データグループa、b、c、d、e、ｆ、ｇ、ｈ、ｉ、およびjを有する、データセットまたはデータストリーム中の複数のデータグループとして構成され、新しいデータグループzがeとｆの間に挿入されている。種々の時点において、新しいウインドウが形成され、ハッシュ、カット、境界、チャンク、またはブレイクポイントを生成すべきかどうか判定するために所定の値に対して評価される。この例では、該所定値から、第2のウインドウ710bの終わり770に特定されるハッシュ、カット、境界、チャンク、またはブレイクポイントが得られる。したがって、ハッシュ値がデータブロックa、b、c、およびdのサム中のデータから作られる。次に、2つのスライディングタイムウインドウ、第３のウインドウ715ｂおよび第4のウインドウ720ｂよりも多いスライディングタイムウインドウでハッシュを行った後、新しいデータグループzが生じ、ハッシュ、カット、境界、チャンク、またはブレイクポイントが第4のウインドウ720bの終わり780で特定されない。次に、3つのスライディングタイムウインドウ(スライディングウインドウは3つのデータグループをカバーするため)、第5のウインドウ725ｂ、第6のウインドウ730b、第7のウインドウ735b、よりも多いスライディングタイムウインドウ中のデータの値を計算した後、ハッシュ、カット、境界、チャンク、またはブレイクポイントが第7のウインドウ735bの終わり790で特定される。したがって、新しいハッシュ値をデータブロックe、z、ｆ、ｇ、およびｈのサム中のデータから作ってもよい。図示されているように、新しいデータグループzの挿入は、基底データの変更は単一のデータグループにのみ限られ、スライディングウインドウは3つのデータグループを含むので、最大で3つの場所における選択関数の出力を変えることがある。図７において、作用は、「所定値に等しい」との選択基準の間、影響を受けた全ての3つのウインドウを不活性にすることであると仮定した。スライディングウインドウ関数のこの例に基づいて、データまたは異なったデータの変化がどのようにして、ハッシュ、カット、境界、チャンク、またはブレイクポイントが変化する結果となるかを理解することができる。種々の実施形態において、高速の選択関数の場合に、ハッシュ、カット、境界、チャンク、またはブレイクポイントが一旦特定されると、ハッシュ、カット、境界、チャンク、また���ブレイクポイントのサブセットが、例えば、上記のローリングウインドウ、スライディングウインドウ、またはムービングウインドウを有するボックスカーサム関数を用いて求められ、それから低速であるが性能のよい第２の選択関数が用いられる。次に、例えば、ハッシュ、カット、境界、チャンク、またはブレイクポイントの選択のため相応の質を維持しつつ、処理時間を減らすように、Rabin指紋関数が、スタートポイントとして予め選択されたハッシュ、カット、境界、チャンク、またはそのブレイクポイントのサブセットを用いて実行してもよい。
【００５６】
第2の選択関数のためのハッシュ関数の特に良い例がCRC32cである。CRC32c関数は、Rabin指紋法の特定の実現であり、例えばJ.Stone, R.Stewart and D.Otis, "Stream Control Transmission Protocol (SCTP) Checksum Change゛, The Internet Society, RFC 3309, Sep.2002, pages 1-17 に見ることができる。これはCRC32c標準を説明し、このハッシュ関数を記載するサンプル実施を述べている。このCRC32c推薦は実際、多項式除法に基づくハッシュの特定の実施であり、したがってそれはある程度Rabinハッシュの特別な例と考えられる。CRC32cは通常32ビットコードであり、多少、特定の多項式および方法を特定する。これらの関数はC++言語に対して修正することができ、64ビット多項式を支持するように修正できる。第2の関数に対するコードは包括的であり(例えば、既製(off-the-shelf))またはハードウェアに組み込まれている(hardwired)。もし、それが「包括的」であるならば、それはいくらか低速であることがわかる。
【００５７】
上記したように、種々の実施形態において、本発明は、データ識別および重複データ除去に使用される。したがって、好適なハッシュ、カット、境界、チャンク、またはブレイクポイントを求めるのに続けて、データの求められたチャンクのハッシュ値が生成され、以前に格納されたハッシュ値と比較される。種々の実施形態において、本発明はデータ重複除去に特に適用できる。さらに、上記したように、本発明は、処理され、格納され、および/または送信されるデータストリングを有する、無線ネットワーク、インターネット、イントラネット、コンピュータシステム、およびネットワークを含む種々の電子システムに等しく適用できる。本発明が動作する種々のシステムのいくつかを以下に説明する。
【００５８】
上記したように、種々の実施形態において、ここに述べた1つまたは複数のシステムおよび1つまたは複数の方法は、コンピュータにここに述べた動作を実行させるように構成する一連の命令を実行するようにプログラムされた、例えば、パーソナルコンピュータ、サーバー、ミニメインフレームコンピュータ、および/またはメインフレームコンピュータ等のコンピュータ装置を用いて実現してもよい。種々の実施形態において、コンピュータ装置は、例えば、ウインドウスXP(登録商標)、リナックスオペレーティングシステムが動作し、周辺装置(例えば、キーボード、マウス、ディスプレイ、プリンター)の標準セットを有する、例えば、テキサス、オーステインのデルコンピュータのようないくつかの市販メーカーから入手可能な、例えば、パーソナルコンピュータであってよい。図8は、ここに記載した1つまたは複数のシステムおよび1つまたは複数の方法を実施するソフトウェアアプリケーションプログラムを動作させるのに有用なコンピュータ装置800の一実施形態の機能ブロック図である。図8を参照すると、コンピュータ装置800は、処理ユニット805、1つまたは複数の通信インタフェース810、1つまたは複数の記憶装置815、ユーザーインタフェース820、1つまたは複数のオペレーティングシステムの命令835、アプリケーションが実行可能な命令/API840を含み、これらは全て機能的通信で備えられ、例えば、データバス850を用いる。コンピュータ装置800はシステムメモリ855、データおよびデータ実行可能なコード865、ソフトウェアモジュール860、および1つまたは複数のインタフェースポートも含む。1つまたは複数のインタフェースポート870はプリンター、1つまたは複数のスキャナー、プリンター/スキャナー/FAXの統合機等の1つまたは複数の入出力装置875に接続される。1つまたは複数の処理ユニット805は、ここに記載された機能を実行するソフトウェア命令を実行するように構成された1つまたは複数のマイクロプロセッサまたはマイクロコントローラであってよい。アプリケーションが実行可能な命令/API840およびオペレーティングシステム命令835は、1つまたは複数の記憶装置815および/または、揮発性または不揮発性のメモリを含むシステムメモリ855上にコンピュータ装置800を用いて格納される。アプリケーションが実行可能な命令/API840は、本発明の1つまたは複数のシステムおよび1つまたは複数の方法を実施するソフトウェアアプリケーションプログラムを含む。オペレーティングシステムは、プロセッサ805の基本動作と制御を制御するように動作可能なソフトウェア命令を含む。一実施形態では、例えば、ワシントン、レッドモンドのマイクロソフトコーポレーションから入手可能なXP(登録商標)オペレーティングシステムを含む。
【００５９】
命令は、記憶装置のような他のコンピュータ読み取り可能な媒体からメインメモリに読み込まれる。ここで用いる「コンピュータ読み取り可能な媒体」は、命令を実行のために処理ユニット805に与えるのに関与する任意の媒体を指す。そのような媒体は、非揮発性媒体、揮発性媒体、伝送媒体を含むが、これらに限定されない多くの形態をとり得る。非揮発性媒体は、例えば、光学または磁気ディスク、サム(thumb)またはジャンプドライブ、記憶装置を含む。揮発性媒体は、メインメモリやキャッシュメモリのようなダイナミックメモリを含む。伝送媒体は、バス850を含む接続部を含む、同軸ケーブル、銅ワイヤ、光ファイバーを含む。伝送媒体は、無線周波数(RF)および赤外線(IR)データ通信の間に生成されるような音響波や光波の形態もとる。コンピュータ読み取り可能な媒体の共通の形態には、例えば、フロッピディスク、フレキシブルディスク、ハードディスク、磁気テープ、他の磁気媒体、ユニバーサルシリアルバス(USB)メモリスティック(登録商標)、CD-ROM、DVD、他の光学媒体、RAM、ROM、PROM、EPROM、フラッシュEPROM、他のメモリチップまたはメモリカートリッジ、後述する伝送波、またはコンピュータが読み取ることができる他の媒体が含まれる。
【００６０】
コンピュータ読み取り可能な媒体の種々の形態には、処理ユニット805へ1つまたは複数の命令の1つまたは他のシーケンスを実行のために搬送することが含まれる。例えば、これら命令は最初に、遠隔コンピュータ885(例えば、サーバー、PC、メインフレーム等)の磁気ディスク上で生成される。1つまたは複数の遠隔コンピュータ885は命令をダイナミックメモリに格納し、該命令を、例えば、アナログ、ディジタル、DSLまたはケーブルモデムであってよいモデムに接続された電話線を用いて、1つまたは複数のネットワークインタフェース880によって送信する。ネットワークは、例えば、インターネット、イントラネット、ピアツウピアネットワーク等である。コンピュータ装置800は、通信インタフェース810によって、1つまたは複数のインタフェース880に接続された他の1つまたは複数のコンピュータを経て、メッセージを送信し、1つまたは複数のプログラムコードを含むデータを受信する。サーバーが、アプリケーションプログラム用の要求されたコードを、ダウンロードされたアプリケーションのためにインターネットを介して送信する。受信されたコードは、それが受信されたとき、1つまたは複数の処理ユニット805によって実行され、および/または、後での実行のために記憶装置815または他の不揮発性記憶装置855に格納される。このようにして、コンピュータ装置800は、搬送波の形態のアプリケーションコードを得る。
【００６１】
本発明の1つまたは複数のシステムおよび1つまたは複数の方法は、単一のコンピュータ装置またはプラットフォーム800上、または複数のコンピュータ装置800上に常駐していてよく、または異なったアプリケーションが個別のコンピュータ装置800に常駐してもよい。アプリケーションが実行可能な命令/API840およびオペレーティングシステム命令835は、コンピュータ装置800の揮発性メモリの1つまたは複数の割り当てられたコード部分に、ランタイムの実行のためにロードされる。一実施形態では、コンピュータ装置800は、512MBの揮発性メモリおよび80GBの不揮発性メモリ装置のようなシステムメモリ855を含む。少なくとも1つの実施形態において、本発明の1つまたは複数のシステムおよび1つまたは複数の方法のソフトウェア部分は、例えば、Ｃプログラミング言語ソースコード命令を用いて実行することができる。他の実施形態が考えられる。
【００６２】
アプリケーションが実行可能な命令/API840は1つまたは複数のアプリケーションプログラムインタフェース(API)を含む。本発明の1つまたは複数のシステムおよび1つまたは複数の方法は、プロセス間通信のためのAPI840を用い、アプリケーション間ファンクションコールを要求し、返す。データベースに特定のデータ記憶格納または検索動作を、スクリプトで指定された命令にしたがって起こさせるのに有用な、例えばSQLスクリプトの展開を容易にするために、APIがデータベース865と一緒に設けられる。一般に、APIは、個々に記載された機能の幾つかを実行するようにプログラムされたアプリケーションプログラムの展開を容易にするために用いられる。
【００６３】
1つまたは複数の通信インタフェース810は、電子メール、HTMLまたはXMLページを含むが、これらに限定されない情報をインターネットを介して送受信する能力とファイル転送能力をコンピュータ装置800に与える。このために、1つまたは複数の通信インタフェース810は、マイクロソフトコーポレーションにより提供されるマイクロソフト  インターネット  エクスプローラ(登録商標)のような、しかしこれに限定されないウェブブラウザをさらに含んでいる。1つまたは複数のユーザーインタフェース820は、コンピュータ端末ディスプレイ、キーボード、マウス装置を含んでいる。双方向のHTMLまたはXMLに含まれるデータを表示し、操作するために、１または複数のグラフィカルユーザインタフェース(GUI)も含まれている。
【００６４】
図9を参照すると、1つまたは複数の本システム1つまたは複数の方法が動作するネットワーク900が図示されている。上記したように、本特許出願の1つまたは複数のシステムと1つまたは複数の方法は1つまたは複数のコンピュータ上で動作可能である。ネットワーク900は、1つまたは複数の記憶装置910に接続された1つまたは複数のクライアント905を含んでいる。これら1つまたは複数のクライアントは通信ネットワーク(例えば、光ファイバー、電話線、無線等)を介して通信フレームワーク930に接続されている。通信フレームワーク230は、例えば、インターネット、イントラネットワーク、ピアツーピアネットワーク、LAN、アドホックコンピュータ−コンピュータネットワークなどである。ネットワーク900は、通信フレームワーク930とサーバーデータ記憶装置920に接続された1つまたは複数のサーバー915 も含んでいる。本発明の1つまたは複数のシステムと1つまたは複数の方法は、1つの完全な1つまたは複数の動作システムと1つまたは複数の方法として動作するように、ネットワーク900の1つまたは複数の構成部品上で動作する部分も有している。
【００６５】
本発明の実施形態を上記したが、多くの代替、変更、および変形が当業者にとって明らかであることは自明である。一般に、実施形態は、データの解析が行われるこれらおよび他のビジネスプロセスの自動化に関連する。したがって、本発明の実施形態は、上記したように、例示を意図しており、本発明の範囲を制限するものと解釈してはならない。種々の変更が、本発明の要旨と範囲から外れることなしになされてよい。したがって本発明の範囲は上記に示した実施形態によってではなく、本明細書に添付の特許請求の範囲およびその法律的等価物によって定められるべきである。
【００６６】
ここで引用したすべての文献、特許、および特許出願はその全体を、全ての目的のためにここに参照によって含める。
【図面の簡単な説明】
【００６７】
【図１】図1は少なくとも一実施形態による、マルチモードデータ境界ポイント決定法を用いる例示的なデータ管理またはデータ処理システムの図である。
【図２】図2は少なくとも一実施形態による、マルチモードデータ境界ポイント決定法を用いる例示的なデータ管理またはデータ処理システムの図である。
【図３】図3は少なくとも一実施形態による、マルチモードデータ境界ポイント決定システムの動作の例示的図である。
【図４】図4は少なくとも一実施形態による、データセットまたはデータストリーム中の以前に発生したデータを識別するマルチモードデータ境界ポイント決定法を用いる、データ管理またはデータ処理の詳細な例示的方法を示す図である。
【図５】図5は少なくとも一実施形態による、コンテンツで規定されるデータブロックまたはデータチャンクを用いる例示的ハッシュ技術を示す図である。
【図６】図6は少なくとも一実施形態による、ボックスカーサム技術を用いる例示的な第1の選択関数を図である。
【図７ａ】図7aは少なくとも一実施形態による、コンテンツで規定されるデータブロックまたはデータチャンクを用いる例示的ハッシュ技術のためのデータウインドウ、データブロック、またはデータチャンクを例示的に示す図である。
【図７ｂ】図7bは少なくとも一実施形態による、コンテンツで規定されるデータブロックまたはデータチャンクを用いる例示的ハッシュ技術のためのデータウインドウ、データブロック、またはデータチャンクを例示的に示す図である。
【図８】図8は少なくとも一実施形態による、コンピュータ装置の例示的な機能ブロック図である。
【図９】図9は少なくとも一実施形態による、ネットワークの例示的な機能ブロック図である。
【図１】
2010512565.tif 000011
【図２】
2010512565.tif 000012
【図３】
2010512565.tif 000013
【図４】
2010512565.tif 000014
【図５】
2010512565.tif 000015
【図６】
2010512565.tif 000016
【図７ａ】
2010512565.tif 000017
【図７ｂ】
2010512565.tif 000018
【図８】
2010512565.tif 000019
【図９】
2010512565.tif 000020
【国際調査報告】
2010512565.tif 000021
2010512565.tif 000022