(57)【特許請求の範囲】
【請求項１】
ローカルデバイスとリモートデバイスとの間で、ネットワーク上でオブジェクトを更新するためのシステムであって、該システムは、
前記ネットワーク上でオブジェクトの更新を円滑に行うよう配設されたリモートデバイスを含み、該リモートデバイスは、
前記ネットワーク上で通信を円滑に行うように配設された第１のネットワーク接続デバイスと、
第１のオブジェクトを記憶するように配設された第１のデータストーアと、
前記第１のデータストーアと前記第１のネットワーク接続デバイスとに連結する第１のプロセッサとを含み、該第１のプロセッサは、
前記リモートデバイス上の前記第１のオブジェクトのバイトオフセットごとに第１のフィンガプリント関数を計算し、
前記第１のフィンガプリント関数に基づいて前記リモートデバイス上の前記第１のオブジェクトをチャンキングし、
前記リモートデバイス上で前記第１のオブジェクトに関連するチャンクごとにリモートシグネチャを計算し、
前記リモートデバイス上で前記第１のオブジェクトに関連するリモートのシグネチャおよびチャンク長のリストを生成し、
前記リモートのシグネチャおよびチャンク長のリストを前記第１のネットワーク接続デバイスを用いて前記ネットワークへ送信し、
少なくとも１つの更新されたオブジェクトチャンクを送信するための前記ネットワークからの要求を前記第１のネットワーク接続デバイスを用いて受信し、かつ
前記ネットワーク上に少なくとも１つの更新されたオブジェクトチャンクを送信するように設定されており、
前記システムはさらに、前記リモートデバイスと有効な通信をして前記ネットワーク上にオブジェクトを円滑に更新するローカルデバイスを含み、該ローカルデバイスは、
前記ネットワーク上で通信を円滑に行うように配設された第２のネットワーク接続デバイスと、
第２のオブジェクトを記憶するように配設された第２のデータストーアと、
前記第２のデータストーアと前記第２のネットワーク接続装置とに連結する第２のプロセッサとを含み、該第２のプロセッサは、
前記ローカルデバイス上で前記第２のオブジェクトのバイトオフセットごとに第２のフィンガプリント関数を計算し、前記第１および第２のオブジェクトが互いに関連しており、ここで前記第１のフィンガプリント関数が前記第２のフィンガプリント関数に一致し、
前記第２のフィンガプリント関数に基づいて前記ローカルデバイス上で前記第２のオブジェクトをチャンキングし、ここで前記リモートデバイス上の前記第１のオブジェクトのチャンキングが前記ローカルデバイス上の前記第２のオブジェクトのチャンキングと一致し
前記ローカルデバイス上で前記第２のオブジェクトに関連する各チャンクごとにローカルシグネチャを計算し、ここで該ローカルシグネチャの計算が、前記リモートシグネチャの計算と一致し、
前記ローカルデバイス上でローカルのシグネチャおよびチャンク長のリストを生成し、該ローカルのシグネチャおよびチャンク長のリストが前記第２のオブジェクトに関連し、
前記ネットワーク上の前記リモートデバイスから前記ローカルデバイスへの前記リモートのシグネチャおよびチャンク長のリストの転送に使用する帯域幅が小さくなるように、当該リモートのシグネチャおよびチャンク長のリストをチャンキングした伝送をネゴシエーションし、
前記ローカルデバイス上で前記ローカルのシグネチャおよびチャンク長のリストを前記リモートのシグネチャおよびチャンク長のリストと比較することによって前記第１のオブジェクトと前記第２のオブジェクトの間の差分を識別し、
前記第１のオブジェクトと前記第２のオブジェクトの間の差分が前記ローカルデバイスによって識別されるとき前記リモートデバイスから少なくとも１つの更新されたオブジェクトチャンクの伝送を要求し、
前記リモートデバイスからの前記少なくとも１つの更新されたオブジェクトチャンクを受信し、かつ
前記少なくとも１つの更新されたオブジェクトチャンクを用いて前記ローカルデバイス上で前記第１のオブジェクトのコピーを組立てするように設定されており、
前記第１のプロセッサは、さらに、
前記リモートのシグネチャおよびチャンク長のリストをチャンキングしてチャンキングされたリモートのシグネチャおよびチャンク長のリストを提供し、
前記チャンキングされたリモートのシグネチャおよびチャンク長のリストに関連するチャンクごとに再帰的リモートシグネチャを計算し、
前記再帰的リモートシグネチャを用いて再帰的リモートシグネチャおよびチャンク長のリストを生成するように設定されており、かつ
前記第２のプロセッサが、さらに、
前記ローカルデバイス上で前記ローカルのシグネチャおよびチャンク長のリストをチャンキングし、ここで前記ローカルのシグネチャおよびチャンク長のリストのチャンキングが、前記リモートのシグネチャおよびチャンク長のリストのチャンキングに一致し、
前記チャンキングされたローカルのシグネチャおよびチャンク長のリストに関連するチャンクごとに再帰的ローカルシグネチャを計算し、ここで前記再帰的ローカルシグネチャの計算が、前記再帰的リモートシグネチャの計算と一致し、
前記再帰的ローカルシグネチャと前記チャンキングされたローカルのシグネチャおよびチャンク長のリストとを用いて前記ローカルデバイス上で再帰的ローカルシグネチャおよびチャンク長のリストを生成し、ここで前記再帰的ローカルシグネチャおよびチャンク長のリストの生成が、前記再帰的リモートシグネチャおよびチャンク長のリストの生成と一致し、
前記ネットワーク上で前記リモートデバイスから前記再帰的リモートシグネチャおよびチャンク長のリストを受信し、
前記ローカルデバイス上で前記再帰的リモートシグネチャおよびチャンク長のリストと前記再帰的ローカルシグネチャおよびチャンク長のリストとの間の差分を識別し、
前記ローカルデバイスによって、前記再帰的リモートシグネチャおよびチャンク長のリストと前記再帰的ローカルシグネチャおよびチャンク長のリストとの間で差分が識別されるときに、前記リモートデバイスからの少なくとも１つの更新されたシグネチャチャンクの伝送を要求するように設定されていること
を特徴とするシステム。
【請求項２】
前記第２のプロセッサは、さらに前記リモートデバイスから前記第１のオブジェクトについての更新を要求するように設定されていることを特徴とする請求項１に記載のシステム。
【請求項３】
前記第１のプロセッサは、さらに前記ローカルデバイスから前記第１のオブジェクトについての更新を要求するように設定されていることを特徴とする請求項１に記載のシステム。
【請求項４】
前記リモートのシグネチャおよびチャンク長のリストを送信することは、前記リモートデバイスから前記ローカルデバイスに前記リモートのシグネチャおよびチャンク長のリストの少なくとも一部分を送信することを含むことを特徴とする請求項１に記載のシステム。
【請求項５】
前記ローカルデバイスおよび前記リモートデバイスのうちの一方は、クライアントであり、前記ローカルデバイスおよび前記リモートデバイスのうちの他方は、サーバであることを特徴とする請求項１に記載のシステム。
【請求項６】
前記ネットワークは、直接配線接続、パラレルポート、シリアルポート、ＵＳＢ（Universal Serial Bus）ポート、ＩＥＥＥ(Institute of Electrical and Electronic Engineers) １３９４ポート、無線接続、ＩＲ(赤外線)ポート、ブルートゥースポート、有線ネットワーク、無線ネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、ウルトラワイドエリアネットワーク、インターネット、イントラネット、およびエクストラネットを含むグループの少なくとも１つのメンバーであることを特徴とする請求項１に記載のシステム。
【請求項７】
前記ローカルデバイス上で前記第２のオブジェクトに関連するチャンクごとに前記ローカルシグネチャを計算することは、強化ハッシング関数を前記ローカルデバイス上で前記チャンクに対して適用することを含むことを特徴とする請求項１に記載のシステム。
【請求項８】
前記ローカルデバイス上で前記第１のオブジェクトと前記第２のオブジェクトの間の差分を識別することは、
前記リモートのシグネチャおよびチャンク長のリストを前記ローカルのシグネチャおよびチャンク長のリストと比較し、
前記リモートのシグネチャおよびチャンク長のリストと前記ローカルのシグネチャおよびチャンク長のリストの間の少なくとも１つの差分を識別し、
前記リモートのシグネチャおよびチャンク長のリストに前記少なくとも１つの差分をマッピングし、
前記少なくとも１つの差分と前記リモートのシグネチャおよびチャンク長のリストの間での前記マッピングから前記少なくとも１つの更新されたオブジェクトチャンクを識別する
ことを含むことを特徴とする請求項１に記載のシステム。
【請求項９】
前記リモートデバイス上で前記第１のオブジェクトのバイトオフセットごとに前記第１のフィンガプリント関数を計算することは、
前記第１のオブジェクトに関連する各バイト位置の周囲で参照されるスモールウィンドウを提供し、
バイト位置ごとに前記スモールウィンドウを使用してフィンガプリントを生成する
ことを含むことを特徴とする請求項１に記載のシステム。
【請求項１０】
前記第１のプロセッサは、さらに、前記第１のオブジェクトに関連するデータタイプ、前記第２のオブジェクトに関連するデータタイプ、前記リモートデバイスに関連する環境制約、および前記ローカルデバイスに関連する環境制約と、前記ネットワークの特性と、前記第１のオブジェクトに関連する使用モデルと、前記第２のオブジェクトに関連する使用モデルを含むグループの少なくとも１つのメンバーに基づいて、前記スモールウィンドウに関連するウィンドウサイズを調整するように設定されていることを特徴とする請求項９に記載のシステム。
【請求項１１】
前記第１のフィンガプリント関数は、ラビン多項式を使用したハッシュ関数、循環シフティングハッシュ関数、３２ビットアドラーハッシュ関数を含むグループの少なくとも１つのメンバーからなることを特徴とする請求項１に記載のシステム。
【請求項１２】
前記リモートデバイス上で前記第１のオブジェクトをチャンキングすることは、少なくとも１つのチャンキングパラメータを決定することを含むことを特徴とする請求項１に記載のシステム。
【請求項１３】
前記リモートデバイス上で前記第１のオブジェクトをチャンキングすることは、さらに
前記少なくとも１つのチャンキングパラメータからチャンキングホライズンを決定し、
前記第１のオブジェクト内の各位置においてハッシュ値を計算し、
前記第１のオブジェクト内の各位置の周囲の前記チャンキングホライズン内に位置づけられたハッシュ値に数学関数を適用し、
前記数学関数が満たされるときにカットポイントおよびチャンキング境界のうちの少なくとも１つを指定し、
前記指定されたカットポイントを用いて前記第１のオブジェクトをチャンキングする
ことを含むことを特徴とする請求項１２に記載のシステム。
【請求項１４】
前記数学関数は、前記ホライズン内の最大値を決定すること、前記ホライズン内の最小値を決定すること、および前記ホライズン内のハッシュ値の間の差分を評価することを含むグループの少なくとも１つのメンバーからなることを特徴とする請求項１３に記載のシステム。
【請求項１５】
前記リモートデバイス上で前記第１のオブジェクトをチャンキングすることは、
前記少なくとも１つのチャンキングパラメータからホライズン、トリガ値、および他のトリガのリストを決定し、
前記第１のオブジェクト内の位置ごとにハッシュ値を計算し、
各計算済みのハッシュ値に数学関数を適用し、
前記数学関数が、所与のオフセットにおいて前記トリガ値を獲得し、前記ホライズンが提供するすべての対応するオフセットにおいて前記他のトリガを獲得するときにカットポイントチャンキング境界の少なくとも１つを指定し、
前記指定されたカットポイントを用いて前記第１のオブジェクトをチャンキングする
ことを含むことを特徴とする請求項１２に記載のシステム。
【請求項１６】
前記数学関数は、ハッシュ値をブール値にマッピングする述語、およびハッシュ値を適切な小さなドメイン中に区分する別の数学関数を含むグループの少なくとも１つのメンバーからなることを特徴とする請求項１３に記載のシステム。
【請求項１７】
前記第２のプロセッサは、さらに、前記第１のオブジェクトに関連するデータタイプ、前記第２のオブジェクトに関連するデータタイプ、前記リモートデバイスに関連する環境制約、前記ローカルデバイスに関連する環境制約、前記ネットワークの特性、前記第１のオブジェクトに関連する使用モデル、および前記第２のオブジェクトに関連する使用モデルを含むグループの少なくとも１つのメンバーに基づいて、前記少なくとも１つのチャンキングパラメータを調整するように設定されていることを特徴とする請求項１２に記載のシステム。
【請求項１８】
前記第１のプロセッサは、さらに、前記少なくとも１つの更新されたオブジェクトチャンクの伝送を求める前記受信された要求に応答して前記リモートデバイス上で前記第２のオブジェクトから前記少なくとも１つの更新されたオブジェクトチャンクを抽出するように設定されていることを特徴とする請求項１に記載のシステム。
【請求項１９】
前記第２のプロセッサは、さらに前記少なくとも１つの更新されたオブジェクトチャンクを用いて前記ローカルデバイス上で更新された第１のオブジェクトを組み立てるように設定されていることを特徴とする請求項１に記載のシステム。
【請求項２０】
前記更新された第１のオブジェクトを組み立てることは、さらに前記更新された第１のオブジェクトが、前記第１のオブジェクトからの少なくとも１つの変更されていないチャンクを含むように用意されていることを特徴とする請求項１９に記載のシステム。
【請求項２１】
前記リモートデバイスから前記再帰的リモートシグネチャおよびチャンク長のリストを受信することは、前記ネットワーク上で前記リモートデバイスから前記再帰的リモートシグネチャおよびチャンク長のリストの少なくとも一部分を受信するステップを含むことを特徴とする請求項１に記載のシステム。
【請求項２２】
前記リモートデバイス上で前記リモートのシグネチャおよびチャンク長のリストをチャンキングすることは、
前記リモートデバイス上で前記リモートのシグネチャおよびチャンク長のリストのバイトオフセットごとに第３のフィンガプリント関数を計算し、
前記第３のフィンガプリント関数に基づいて前記リモートデバイス上で前記リモートのシグネチャおよびチャンク長のリストをチャンキングして、前記チャンキングされたリモートのシグネチャおよびチャンク長のリストを提供する
ように設定されていることを特徴とする請求項１に記載のシステム。
【請求項２３】
前記ローカルデバイス上で前記ローカルのシグネチャおよびチャンク長のリストをチャンキングすることは、
前記ローカルデバイス上で前記ローカルのシグネチャおよびチャンク長のリストのバイトオフセットごとに第４のフィンガプリント関数を計算し、ここで前記第４のフィンガプリント関数が、前記第３のフィンガプリント関数に一致し、
前記第４のフィンガプリント関数に基づいて前記ローカルデバイス上で前記ローカルのシグネチャおよびチャンク長のリストをチャンキングして前記チャンキングされたローカルのシグネチャおよびチャンク長のリストを提供し、ここで前記ローカルデバイス上で前記ローカルのシグネチャおよびチャンク長のリストのチャンキングが、前記リモートデバイス上で前記リモートのシグネチャおよびチャンク長のリストのチャンキングと一致する
ように設定されていることを特徴とする請求項２２に記載のシステム。
【請求項２４】
前記リモートデバイス上で、前記第３のフィンガプリント関数を計算すること、および前記リモートのシグネチャおよびチャンク長のリストをチャンキングすることは、前記リモートデバイス上での前記第１のフィンガプリント関数を計算すること、および前記第１のオブジェクトをチャンキングすることとは異なる方法を使用することを特徴とする請求項２３に記載のシステム。
【請求項２５】
前記リモートデバイス上での前記第３のフィンガプリント関数を計算すること、および前記リモートのシグネチャおよびチャンク長のリストをチャンキングすることは、前記リモートデバイス上での前記第１のフィンガプリント関数を計算すること、および前記第１のオブジェクトをチャンキングすることと同じやり方を使用することを特徴とする請求項２２に記載のシステム。
【請求項２６】
前記リモートデバイス上で前記リモートのシグネチャおよびチャンク長のリストのバイトオフセットごとに前記第３のフィンガプリント関数を計算することは、
前記リモートのシグネチャおよびチャンク長のリストに関連する各バイト位置の周囲で参照されるスモールウィンドウを提供し、
バイト位置ごとに前記スモールウィンドウを使用してフィンガプリントを生成する
ことを含むことを特徴とする請求項２２に記載のシステム。
【請求項２７】
前記第１のプロセッサは、さらに、前記第１のオブジェクトに関連するデータタイプ、前記第２のオブジェクトに関連するデータタイプ、前記リモートデバイスに関連する環境制約、および前記ローカルデバイスに関連する環境制約と、前記ネットワークの特性と、前記第１のオブジェクトに関連する使用モデルと、前記第２のオブジェクトに関連する使用モデルを含むグループの少なくとも１つのメンバーに基づいて、前記スモールウィンドウに関連するウィンドウサイズを調整するように設定されていることを特徴とする請求項２６に記載のシステム。
【請求項２８】
前記第３のフィンガプリント関数は、ラビン多項式を使用したハッシュ関数、循環シフティングハッシュ関数、３２ビットアドラーハッシュ関数、循環シフトをもつ６２ビットランダムハッシュを含むグループの少なくとも１つのメンバーからなることを特徴とする請求項２２に記載のシステム。
【請求項２９】
前記リモートデバイス上で前記リモートのシグネチャおよびチャンク長のリストをチャンキングすることは、少なくとも１つの再帰的チャンキングパラメータを決定することを含むことを特徴とする請求項１に記載のシステム。
【請求項３０】
前記リモートデバイス上で前記リモートのシグネチャおよびチャンク長のリストをチャンキングすることは、さらに、
前記少なくとも１つの再帰的チャンキングパラメータから再帰的チャンキングホライズンを決定し、
前記リモートのシグネチャおよびチャンク長のリスト内の各位置においてハッシュ値を計算し、
前記リモートのシグネチャおよびチャンク長のリスト内の各位置の周囲の前記再帰的チャンキングホライズン内に位置づけられたハッシュ値に数学関数を適用し、
前記数学関数が満たされるときに前記チャンキング境界中にカットポイントを指定し、
前記指定されたカットポイントを用いて前記リモートのシグネチャおよびチャンク長のリストをチャンキングする
ことを含むことを特徴とする請求項２９に記載のシステム。
【請求項３１】
前記リモートデバイス上で前記リモートのシグネチャおよびチャンク長のリストをチャンキングすることは、さらに、
前記少なくとも１つの再帰的チャンキングパラメータから再帰的ホライズン、再帰的トリガ値、および他の再帰的トリガのリストを決定し、
前記リモートのシグネチャおよびチャンク長のリスト内の各位置においてハッシュ値を計算し、
計算された各ハッシュ値に数学関数を適用し、
前記数学関数が、所与のオフセットにおいて前記再帰的トリガ値を獲得し、前記再帰的ホライズンが提供するすべての対応するオフセットにおいて前記他の再帰的トリガを獲得するときにおいて、少なくとも１つのカットポイントおよびチャンキング境界を指定し、
前記指定されたカットポイントを用いて前記リモートのシグネチャおよびチャンク長のリストをチャンキングする
ことを含むことを特徴とする請求項２９に記載のシステム。
【請求項３２】
前記数学関数は、ハッシュ値をブール値にマッピングする述語、およびハッシュ値を適切な小さなドメイン中に区分する他の任意の数学関数を含むグループの少なくとも１つのメンバーからなることを特徴とする請求項３０に記載のシステム。
【請求項３３】
前記数学関数は、前記ホライズン内の最大値の決定、前記ホライズン内の最小値の決定、前記ホライズン内のハッシュ値の間の差分の評価、前記ホライズン内のハッシュ値の合計、および前記ホライズン内のハッシュ値の平均値の計算を含むグループの少なくとも１つのメンバーからなることを特徴とする請求項３０に記載のシステム。
【請求項３４】
前記第１のプロセッサは、さらに、前記第１のオブジェクトに関連するデータタイプ、前記第２のオブジェクトに関連するデータタイプ、前記リモートデバイスに関連する環境制約、前記ローカルデバイスに関連する環境制約、前記ネットワークの特性、前記第１のオブジェクトに関連する使用モデル、前記第２のオブジェクトに関連する使用モデルを含むグループの少なくとも１つのメンバーに基づいて、前記少なくとも１つの再帰的チャンキングパラメータを調整するように設定されていることを特徴とする請求項３１に記載のシステム。
【請求項３５】
前記リモートデバイス上で前記チャンキングされたリモートのシグネチャおよびチャンク長のリストに関連するシグネチャチャンクごとに前記再帰的リモートシグネチャを計算することは、さらに、前記リモートデバイス上で前記シグネチャチャンクに対して強化ハッシング関数を適用することを含むことを特徴とする請求項２７に記載のシステム。
【請求項３６】
前記第１のプロセッサは、さらに、前記少なくとも１つの更新されたシグネチャチャンクの伝送を求める前記受信された要求に応答して前記リモートデバイス上で前記リモートのシグネチャおよびチャンク長のリストから前記少なくとも１つの更新されたシグネチャチャンクを抽出するように設定されていることを特徴とする請求項１に記載のシステム。
【請求項３７】
前記ローカルのシグネチャおよびチャンク長のリストを組み立てることは、さらに、前記ローカルデバイス上で、前記リモートのシグネチャおよびチャンク長のリストの新しいコピーを提供することを含み、前記リモートのシグネチャおよびチャンク長のリストの前記新しいコピーは、前記少なくとも１つの更新されたシグネチャチャンクを含むことを特徴とする請求項３６に記載のシステム。
【請求項３８】
前記第２のプロセッサは、さらに、
前記ローカルデバイスを用いて前記ネットワークから前記少なくとも１つの更新されたシグネチャチャンクを受信し、
前記少なくとも１つの更新されたシグネチャチャンクを用いて前記ローカルデバイス上で前記リモートのシグネチャおよびチャンク長のリストのコピーを組み立てる
ように設定されていることを特徴とする請求項１に記載のシステム。
【請求項３９】
前記リモートのシグネチャおよびチャンク長のリストが、前記ローカルのシグネチャおよびチャンク長のリストからの少なくとも１つの変更されていないチャンクを含むことを特徴とする請求項３６に記載のシステム。
【請求項４０】
前記ローカルデバイス上で前記再帰的リモートシグネチャおよびチャンク長のリストと前記再帰的ローカルシグネチャおよびチャンク長のリストとの間の差分を識別することは、さらに、
前記再帰的リモートシグネチャおよびチャンク長のリストを前記再帰的ローカルシグネチャおよびチャンク長のリストと比較し、
前記再帰的リモートシグネチャおよびチャンク長のリストと前記再帰的ローカルシグネチャおよびチャンク長のリストとの間の差分に関連する少なくとも１つのシグネチャチャンクを識別し、
前記少なくとも１つのシグネチャチャンクを前記リモートのシグネチャおよびチャンク長のリストにマッピングし、
前記少なくとも１つのシグネチャチャンクと前記リモートのシグネチャおよびチャンク長のリストの間の前記マッピングから前記少なくとも１つの更新されたシグネチャチャンクを識別する
ことを含むことを特徴とする請求項１に記載のシステム。
【請求項４１】
前記リモートデバイス上で前記リモートのシグネチャおよびチャンク長のリストを生成することは、さらに前記リモートのシグネチャおよびチャンク長のリストをコンパクトに符号化することを含むことを特徴とする請求項１に記載のシステム。
【請求項４２】
前記ローカルデバイス上で前記ローカルのシグネチャおよびチャンク長のリストを生成することは、さらに前記ローカルのシグネチャおよびチャンク長のリストをコンパクトに符号化することを含むことを特徴とする請求項１に記載のシステム。
【請求項４３】
前記リモートデバイス上で前記再帰的リモートシグネチャおよびチャンク長のリストを生成することは、さらに前記再帰的リモートシグネチャおよびチャンク長のリストをコンパクトに符号化することを含むことを特徴とする請求項１に記載のシステム。
【請求項４４】
前記ローカルデバイス上で前記再帰的ローカルシグネチャおよびチャンク長のリストを生成することは、さらに前記再帰的ローカルシグネチャおよびチャンク長のリストをコンパクトに符号化することを含むことを特徴とする請求項１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に帯域幅の限られたネットワーク上でデータオブジェクトを更新することに関する。より詳細には、本発明は、ＲＤＣ（ｒｅｍｏｔｅ  ｄｉｆｆｅｒｅｎｔｉａｌ  ｃｏｍｐｒｅｓｓｉｏｎ遠隔差分圧縮）手法を使用した、オブジェクトデータの差分転送用のシステムと方法に関する。このＲＤＣ手法の再帰的適用を利用して大きなオブジェクトの転送のための帯域幅の使用率をさらに最小化することができる。
【背景技術】
【０００２】
イントラネット、エクストラネット、インターネットなどのネットワークの普及によって、広範なネットワーク上で情報を共有するユーザ数が増大した。最大データ転送速度は、その伝送媒体や他のインフラストラクチャ関連の制限に関連する帯域幅に基づいて各物理ネットワークに関連づけられる。ネットワークの帯域幅が制限される結果として、ユーザは、ネットワーク上で大量のデータを検索し転送する際に長い遅延を経験する可能性がある。
【０００３】
データ圧縮技法は、帯域幅の限られたネットワークをわたって大量のデータを転送するための評判のよい方法になっている。データ圧縮は、一般に可逆的または非可逆的なもののいずれかとして特徴づけることができる。可逆的圧縮は、伸張変換を適用することにより、そのデータセットを正確に再現して取り出すことができるようにデータセットの変換を行うものである。正確な再現が必要とされるときには、可逆的圧縮が最もしばしば使用されてデータが圧縮される。
【０００４】
データオブジェクトのこの受取人がそのオブジェクトの以前の、またはより古いバージョンをすでに所有している場合には、遠隔差分圧縮（ＲＤＣ）と呼ばれる可逆的圧縮手法を使用してそのオブジェクトの新しいバージョンと古いバージョンとの間の差分を決定し、この差分だけを転送することができる。ＲＤＣ転送は、その新しいバージョンと古いバージョンの間のその観測された差分（例えば、ファイルの場合には、ファイルの修正もしくは最後のアクセス日付、ファイルの属性、またはそのファイルコンテンツに対するわずかな変更）を伝えるものにすぎないので、転送されるデータの全体の量を非常に減少させることができる。ＲＤＣを別の可逆的圧縮アルゴリズムと結合してこのネットワークトラフィックをさらに減少させることができる。ＲＤＣの利点は、コンピューティングデバイス間で大きなオブジェクトを頻繁に送受する必要があり、これらのオブジェクトの以前の複製を保持することが、困難または実行不可能であり、その結果局所差分アルゴリズムを使用することができないという場合に最も顕著になる。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
簡潔に述べると、本発明は、限られた帯域幅のネットワーク上でオブジェクトを更新するための方法およびシステムに関する。
【課題を解決するための手段】
【０００６】
オブジェクトは、必要なデータ転送が最小化されるように遠隔差分圧縮（ＲＤＣ）技法を使用して２つ以上のコンピューティングデバイス間で更新される。一態様においては、効率的な大きなオブジェクトの転送が、それ自体のメタデータに対してこのＲＤＣアルゴリズムを再帰的に適用することによって達成される。すなわち、１つまたは複数の再帰的ステップをこのケースにおいて使用してこのＲＤＣアルゴリズムによってこのネットワーク上で送信されるメタデータの量を減少させることができる。オブジェクトおよび／またはシグネチャ、ならびにチャンク長リストを、動的に決定されたロケーションに境界を位置づけることによってチャンキングすることができる。数学関数が、可能性のあるチャンク境界に関連してホライズン（ｈｏｒｉｚｏｎ）ウィンドウ内に関連づけられたハッシュ値（ｈａｓｈ  ｖａｌｕｅ）を評価する。ここで説明する方法およびシステムは、ピアツーピアレプリケータ（ｐｅｅｒ−ｔｏ−ｐｅｅｒ  ｒｅｐｌｉｃａｔｏｒ）、電子メールクライアントおよび電子メールサーバ、クライアント側キャッシングシステム、汎用コピーユーティリティ、データベースレプリケータ、ポータル、ソフトウェア更新サービス、ファイル／データ同期化など様々なネットワーク化されたアプリケーションにおいて有用である。
【０００７】
本発明およびその改良についてのより完全な理解は、本発明の例示の実施形態の以下の詳細なる説明、および添付特許請求の範囲に対して、以下に簡単に概説した添付図面を参照することによって得ることが可能である。
【０００８】
本発明の非限定的かつ非網羅的な実施形態について、以下の図面を参照して説明する。
【発明を実施するための最良の形態】
【０００９】
図面を参照して本発明の様々な実施形態を詳細に説明することにする。いくつかの図面にわたって、同様な参照番号は、同様な部品およびアセンブリを表している。様々な実施形態に対する言及が、本発明の範囲を限定することはなく、この本発明の範囲は、本明細書に添付された特許請求の範囲によってしか限定されない。さらに、本明細書中に記載のどの実施例も限定することを意図したものではなく、単にこの特許請求されている本発明についての多数の可能な実施形態のうちの一部を述べているにすぎない。
【００１０】
本発明は、１つまたは複数の一般的に関連するオブジェクトが記憶されているローカルコンピューティングデバイスおよびリモートコンピューティングデバイス（または、略して「デバイス」）の文脈で説明される。用語「ローカル」および「リモート」は、この方法の１つのインスタンスを示している。しかし、この同じデバイスが、異なるインスタンスにおいて、「ローカル」の役割および「リモート」の役割を共に果たすこともできる。遠隔差分圧縮（ＲＤＣ）手法を使用して、帯域幅の制限されたネットワーク上で一般的に関連するオブジェクトを効率的に更新することができる。オブジェクトの新しいコピーを有するデバイスが、この同じオブジェクトの、または同様なオブジェクトのより古いコピーを有するデバイスを更新する必要があるとき、このＲＤＣ手法を使用してこのネットワーク上でこれらのオブジェクト間の差分だけが伝送される。一実施例として説明するＲＤＣ手法では、（１）ＲＤＣメタデータを伝送するために再帰的な手法を使用して大きなオブジェクトについて伝送されるメタデータの量が減少させられ、（２）極大ベースのチャンキング手法を使用して、帯域幅の利用が最小化されるようにこのオブジェクトの差分に関連する精度が増大させられる。この説明するＲＤＣ手法からの恩恵を受ける一部の実施例のアプリケーションには、ただいくつかの名前を挙げると、ピアツーピア複製サービス、ＳＭＢなどのファイル転送プロトコル、大きなイメージを転送する仮想サーバ、電子メールサーバ、セルラ電話とＰＤＡの同期化、データベースサーバの複製が含まれる。
【００１１】
動作環境
図１は、本発明についての動作環境の一実施例を示す図である。この図に示すように、複数のデバイスが、ネットワーク上で情報をやりとりするように配置されている。これらのデバイスは、ネットワークに接続された汎用コンピューティングデバイス、専用コンピューティングデバイス、または他の任意の適切なデバイスでもよい。このネットワーク１０２は、それだけには限定されないが、直接配線接続（例えば、パラレルポート、シリアルポート、ＵＳＢ、ＩＥＥＥ１３９４など）、無線接続（例えば、ＩＲポート、ブルートゥース（Ｂｌｕｅｔｏｏｔｈ）ポートなど）、有線ネットワーク、無線ネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、ウルトラワイドエリアネットワーク、インターネット、イントラネット、およびエクストラネットを含めて任意の接続トポロジに対応したものとすることができる。
【００１２】
デバイスＡ（１００）とデバイスＢ（１０１）の間の対話の一実施例においては、あるオブジェクトの異なるバージョンが、２つのデバイス上に、すなわちオブジェクトＯＡが１００上に、オブジェクトＯＢが１０１上にローカルに記憶されている。あるポイントにおいて、デバイスＡ（１００）は、オブジェクトＯＡのそのコピーをデバイスＢ（１０１）上に記憶されたコピー（オブジェクトＯＢ）で更新しようと決定し、デバイスＢ（１０１）に要求を送信してＲＤＣ手法を開始する。代替実施形態においては、このＲＤＣ手法をデバイスＢ（１０１）が開始することができる。
【００１３】
デバイスＡ（１００）とデバイスＢ（１０１）は、共にそれらのローカルに記憶されたオブジェクトを処理し、データに依存するようにしてその関連するデータを可変数のチャンク（例えば、それぞれ、オブジェクトＯＢについてのチャンク１〜ｎ、またオブジェクトＯＡについてのチャンク１〜ｋ）に分割する。これらのチャンクについてのストロングハッシュ（ｓｔｒｏｎｇ  ｈａｓｈ）（ＳＨＡ）など、１組のシグネチャが、両方のデバイスによってローカルに計算される。これらのデバイスは共に、シグネチャの別々のリストをコンパイルする。このＲＤＣ手法の次のステップ中に、デバイスＢ（１０１）は、このネットワーク１０２上で、シグネチャとチャンク長１〜ｎのその計算済みのリストをデバイスＡ（１００）に送信する。デバイスＡ（１００）は、受信された各シグネチャをそれ自体の生成済みのシグネチャリスト１〜ｋと比較することによってこのシグネチャリストを評価する。このシグネチャリストにおけるミスマッチは、訂正を要求するこれらオブジェクトにおける１つまたは複数の差分を示す。デバイスＡ（１００）は、このシグネチャリスト中のミスマッチによって識別されたチャンクをデバイスＢ（１０１）が送信するように求める要求を送信する。その後、デバイスＢ（１０１）は、この要求されたチャンクを圧縮し送信し、次いでこれらのチャンクは、受信と伸張が実現された後にデバイスＡ（１００）によって再組立てされる。デバイスＡ（１００）は、この受信済みのチャンクをそれ自体のマッチングチャンクと一緒に再組立てして、オブジェクトＯＢのローカルコピーを得る。
【００１４】
コンピューティングデバイス例
図２は、本発明に従って構成されたコンピューティングデバイスの一実施例のブロック図である。基本的な構成においては、コンピューティングデバイス２００は、一般に少なくとも１つの処理装置（２０２）およびシステムメモリ（２０４）を含んでいる。コンピューティングデバイスのその厳密な構成およびタイプに応じて、システムメモリ２０４は、（ＲＡＭなどの）揮発性、（ＲＯＭ、フラッシュメモリなどの）不揮発性、またはこれら２つの何らかの組合せとすることができる。システムメモリ２０４は、一般にオペレーティングシステム（２０５）、１つまたは複数のプログラムモジュール（２０６）を含んでおり、またプログラムデータ（２０７）を含むこともある。この基本的な構成が、図２の破線２０８内のこれらのコンポーネントによって示されている。
【００１５】
コンピューティングデバイス２００はまた、追加の特徴または機能を有することができる。例えば、コンピューティングデバイス２００は、例えば、磁気ディスク、光ディスク、テープなど（着脱可能および／または着脱不能な）追加のデータストレージデバイスも含むことができる。かかる追加のストレージは、図２において着脱可能なストレージ２０９および着脱不能なストレージ２１０によって示されている。コンピュータストレージ媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、他のデータなどの情報を記憶するための任意の方法または技術で実装された揮発性および不揮発性の着脱可能および着脱不能な媒体を含むことができる。システムメモリ２０４、着脱可能なストレージ２０９、および着脱不能なストレージ２１０は、すべてコンピュータストレージ媒体の実施例である。コンピュータストレージ媒体には、それだけには限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋデジタル多用途ディスク）または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気ストレージデバイス、あるいは所望の情報を記憶するために使用することができ、コンピューティングデバイス２００によってアクセスすることが可能な他の任意の媒体が含まれる。かかるコンピュータストレージ媒体はどれも、デバイス２００の一部分とすることができる。コンピューティングデバイス２００はまた、キーボード、マウス、ペン、ボイス入力デバイス、タッチ入力デバイスなどの１つ（または複数）の入力デバイス２１２を有することもできる。ディスプレイ、スピーカ、プリンタなどの１つ（または複数）の出力デバイス２１４もまた含めることができる。すべてのこれらのデバイスは、当技術分野において知られており、ここで長く論ずる必要はない。
【００１６】
コンピューティングデバイス２００はまた、このデバイスがネットワーク上などで他のコンピューティングデバイス２１８と情報をやりとりすることができるようにする１つ（または複数）の通信接続２１６を含んでもいる。１つ（または複数）の通信接続２１６は、通信媒体の一実施例である。通信媒体は一般に、搬送波や他の搬送メカニズムなどの被変調データ信号の形でコンピュータ読取り可能命令、データ構造、プログラムモジュールまたは他のデータを実施しており、任意の情報配信媒体を含んでいる。この用語「被変調データ信号」とは、信号に情報を符号化するように１つまたは複数のその特性が設定され変更された信号を意味する。一例として、限定するものではないが、通信媒体には、有線ネットワークや直接配線接続などの有線媒体、および音響、ＲＦ、マイクロ波、衛星、赤外線、他の無線媒体などの無線媒体が含まれる。本明細書中で使用される用語、コンピュータ読取り可能媒体は、ストレージ媒体も通信媒体も共に含んでいる。
【００１７】
システムメモリ２０４中に存在する１つまたは複数のアプリケーションプログラム中で、様々なプロシージャおよびインターフェースを実装することができる。一実施例においては、このアプリケーションプログラムは、このコンピューティングデバイス（例えば、クライアント）と別のリモートに位置づけられたコンピューティングデバイス（例えば、サーバ）との間でファイルの同期化をスケジュールする遠隔差分圧縮アルゴリズムである。別の実施例においては、このアプリケーションプログラムは、データを圧縮し伸張するための、システムメモリ２０４中で提供される圧縮／伸張プロシージャである。さらに他の実施例においては、このアプリケーションプログラムは、クライアントデバイスのシステムメモリ２０４中において提供される暗号解読プロシージャである。
【００１８】
遠隔差分圧縮（ＲＤＣ）
図３Ａおよび３Ｂは、本発明の少なくとも一態様によるＲＤＣプロシージャの実施例を示す図である。特にチャンク数は、この実際のオブジェクトＯＡおよびＯＢに応じてインスタンスごとに変化することが可能である。
【００１９】
図３Ａを参照すると、この基本的なＲＤＣプロトコルは、２つのコンピューティングデバイス（デバイスＡとデバイスＢ）の間でネゴシエーションが行われる。このＲＤＣプロトコルでは暗黙に、これらのデバイスＡおよびＢが、それぞれオブジェクトインスタンス（またはバージョン）ＯＡおよびＯＢによって識別される同じオブジェクトまたはリソースの２つの異なるインスタンス（またはバージョン）を有するという想定が行われる。この図に示す実施例では、デバイスＡは、リソースの古いバージョンＯＡを有するが、デバイスＢは、そのリソースに関連したコンテンツ（またはデータ）がわずかに（または増分的に）異なるバージョンＯＢを有する。
【００２０】
デバイスＢからデバイスＡにこの更新されたオブジェクトＯＢを転送するためのプロトコルについて以下に説明する。同様なプロトコルを使用してあるオブジェクトをデバイスＡからデバイスＢに転送することができ、この転送を以下に示すプロトコルをあまり変更せずにデバイスＡまたはデバイスＢのいずれかの命令で開始することができる。
【００２１】
１．ＲＤＣプロトコルを使用して、デバイスＡは、デバイスＢにオブジェクトＯＢを転送する要求を送信する。代替実施形態においては、デバイスＢが、この転送を開始する。この場合には、このプロトコルは、ステップ１をスキップし、以下のステップ２から開始される。
【００２２】
２．デバイスＡは、オブジェクトＯＡをチャンク１〜ｋに区分し、オブジェクトＯＡの各チャンク１．．．ｋごとにシグネチャＳｉｇＡｉおよび長さ（またはバイトサイズ）ＬｅｎＡｉを計算する。このチャンクへの区分について、以下に詳細に説明することにする。デバイスＡは、このシグネチャおよびチャンク長のリスト（（ＳｉｇＡ１，ＬｅｎＡ１）．．．（ＳｉｇＡｋ，ＬｅｎＡｋ））を記憶する。
【００２３】
３．デバイスＢは、オブジェクトＯＢをチャンク１〜ｎに区分し、オブジェクトＯＢの各チャンク１．．．ｎごとにシグネチャＳｉｇＢｉおよび長さＬｅｎＢｉを計算する。ステップ３で使用されるこの区分アルゴリズムは、以上のステップ２のアルゴリズムとマッチする必要がある。
【００２４】
４．デバイスＢは、オブジェクトＯＢに関連するその計算済みのチャンクシグネチャおよびチャンク長のリスト（（ＳｉｇＢ１，ＬｅｎＢ１）．．．（ＳｉｇＢｎ，ＬｅｎＢｎ））をデバイスＡに送信する。その後、このチャンク長情報をデバイスＡが使用してそれらの開始オフセットおよびそれらの長さを用いてそれらを識別することによって特定の１組のチャンクを要求する。このリストの順次的性質のために、このリスト中のすべての先行するチャンクの長さを合計することによって各チャンクＢｉのバイト中の開始オフセットを計算することが可能である。
【００２５】
別の実施形態においては、チャンクシグネチャおよびチャンク長のリストは、デバイスＡに送信する前に、可逆的圧縮アルゴリズムを使用してコンパクトに符号化され、さらに圧縮される。
【００２６】
５．このデータを受信すると、デバイスＡは、そのコンテンツの古いバージョンに関連する、デバイスＡがステップ２でオブジェクトＯＡについて計算したそれらのシグネチャＳｉｇＡ１．．．ＳｉｇＡｋに対してこの受信したシグネチャリストを比較する。
【００２７】
６．デバイスＡは、ステップ４においてデバイスＢから受信したシグネチャが、ステップ２でデバイスＡが計算したシグネチャのどれかとマッチングに失敗したすべてのチャンクについてデバイスＢに対して要求を送信する。要求されたチャンクＢｉごとにこの要求は、ステップ４でデバイスＡが計算したチャンク開始オフセットとそのチャンク長とを含む。
【００２８】
７．デバイスＢは、すべての要求されたチャンクに関連するそのコンテンツをデバイスＡに対して送信する。デバイスＢが送信するこのコンテンツは、デバイスＡに送信する前に可逆的圧縮アルゴリズムを使用してさらに圧縮することができる。
【００２９】
８．デバイスＡは、ステップ７でデバイスＢから受信したチャンクを使用することによってオブジェクトＯＢのローカルコピー、ならびにステップ４でデバイスＢが送信したシグネチャとマッチングしたオブジェクトＯＡのそれ自体のチャンクを再構築する。このローカルチャンクとリモートチャンクがデバイスＡ上で再配置される順序は、ステップ４でデバイスＡが受信したチャンクシグネチャのリストによって決定される。
【００３０】
区分ステップ２および３は、関連するオブジェクト（それぞれ、ＯＡおよびＯＢ）中のあらゆるバイト位置ごとに計算されるフィンガプリント関数（ｆｉｎｇｅｒｐｒｉｎｔｉｎｇ  ｆｕｎｃｔｉｏｎ）を使用するデータに依存する方法で行うことができる。所与の位置では、このフィンガプリント関数は、このオブジェクト中のバイト位置を囲む小さなデータウィンドウを使用して計算される。したがって、このフィンガプリント（指紋）関数の値は、このウィンドウ内に含まれるオブジェクトのすべてのバイトに依存する。このフィンガプリント関数は、例えばハッシュ関数（ｈａｓｈ  ｆｕｎｃｔｉｏｎ）やラビン多項式（Ｒａｂｉｎ  ｐｏｌｙｎｏｍｉａｌ）など適切な任意の関数とすることができる。
【００３１】
チャンク境界は、選択された条件を満たす値になるまでこのフィンガプリント関数が計算するそのオブジェクト中の位置において決定される。このチャンクシグネチャは、暗号によるセキュアハッシュ関数（ｓｅｃｕｒｅ  ｈａｓｈ  ｆｕｎｃｔｉｏｎ）（ＳＨＡ）、または衝突耐久性ハッシュ関数（ｃｏｌｌｉｓｉｏｎ−ｒｅｓｉｓｔａｎｔ  ｈａｓｈ  ｆｕｎｃｔｉｏｎ）など、他の何らかのハッシュ関数を使用して計算することができる。
【００３２】
ステップ４で送信されるこのシグネチャおよびチャンク長のリストは、この最初のチャンクとこの識別済みの更新された、または新しいチャンクの両方を使用してこのオブジェクトを再構築するための基礎を提供する。ステップ６で要求されるチャンクは、そのオフセットおよび長さによって識別される。このオブジェクトは、ステップ４でデバイスＡが受信したシグネチャとそのシグネチャが同じ順序でマッチングするローカルチャンクおよびリモートチャンクを使用することによってデバイスＡ上で再構築される。
【００３３】
この再構築ステップがデバイスＡによって完了された後に、オブジェクトＯＡは、削除し、デバイスＡ上で再構築済みのオブジェクトＯＢのコピーで置き換えることが可能である。他の実施形態においては、デバイスＡは、将来のＲＤＣ転送中にチャンクを「再使用」する可能性のためにオブジェクトＯＡをそのまま保持しておくこともできる。
【００３４】
大きなオブジェクトでは、例えオブジェクトＯＡおよびオブジェクトＯＢが、非常に近い、または同一であったとしても、図３Ａに示す基本的なＲＤＣプロトコルインスタンスが、ステップ４においてかなりの固定オーバヘッドを招く。平均のチャンクサイズＣを想定すると、ステップ４においてこのネットワーク上で伝送される情報量は、オブジェクトＯＢのサイズに比例し、特にこの情報量は、オブジェクトＢ、したがってステップ４で伝送される（チャンクシグネチャ，チャンク長）対のチャンク数となる、Ｃで分割されたオブジェクトＯＢのサイズに比例する。
【００３５】
例えば、図６を参照すると、大きなイメージ（例えば、マイクロソフト仮想サーバ（Ｍｉｃｒｏｓｏｆｔ  Ｖｉｒｔｕａｌ  Ｓｅｒｖｅｒ）などの仮想マシンモニタが使用する仮想ハードディスクイメージ）は、９．１ＧＢのサイズのオブジェクト（ＯＢ）をもたらし得る。３ＫＢに等しい平均チャンクサイズＣでは、この９ＧＢのオブジェクトは、ステップ４でそのネットワーク上で送信する必要がある４２ＭＢの関連するシグネチャおよびチャンク長の情報を伴って、オブジェクトＯＢについて生成される３百万個のチャンクをもたらすこともある。例えオブジェクトＯＡとオブジェクトＯＢの間の差分（および、したがってステップ７で送信する必要があるデータ量）が非常に小さいときでも、この４２ＭＢのシグネチャ情報をそのネットワーク上で送信する必要があるので、このプロトコルの固定オーバヘッドコストは、過剰に高いものになる。
【００３６】
この固定オーバヘッドコストは、ステップ４におけるシグネチャ情報転送の代わりにこのＲＤＣプロトコルの再帰的適用を利用することによってかなり低減することができる。図３Ｂを参照して、その基本ＲＤＣアルゴリズムのステップ４を置き換える追加のステップ４．２〜４．８について、以下のように説明する。ステップ４．２〜４．８は、前述の基本的なＲＤＣプロトコルのステップ２〜８の再帰的適用に対応する。この再帰的適用については、以下のステップ４．４に、また所望の任意の再帰性の深さまでなど、さらに適用することができる。
【００３７】
４．２．デバイスＡは、そのシグネチャおよびチャンク長のリスト（（ＳｉｇＡ１，ＬｅｎＡ１）．．．（ＳｉｇＡｋ，ＬｅｎＡｋ））の再帰的なシグネチャチャンクへの再帰的チャンキングを実施し、再帰的シグネチャおよび再帰的チャンク長の別のリスト（（ＲＳｉｇＡ１，ＲＬｅｎＡ１）．．．（ＲＳｉｇＡｓ，ＲＬｅｎＡｓ））、を得る（ここでｓ＜＜ｋ）。
【００３８】
４．３．デバイスＢは、シグネチャおよびチャンク長のリスト（（ＳｉｇＢ１，ＬｅｎＢ１）．．．（ＳｉｇＢｎ，ＬｅｎＢｎ））を再帰的にチャンキングして再帰的シグネチャおよび再帰的チャンク長のリスト（（ＲＳｉｇＢ１，ＲＬｅｎＢ１）．．．（ＲＳｉｇＢｒ，ＲＬｅｎＢｒ））を生成する（ここでｒ＜＜ｎ）。
【００３９】
４．４．デバイスＢは、再帰的シグネチャおよび再帰的チャンク長の順序づけされたリスト（（ＲＳｉｇＢ１，ＲＬｅｎＢ１）．．．（ＲＳｉｇＢｒ，ＲＬｅｎＢｒ））をデバイスＡに送信する。この再帰的チャンクシグネチャおよび再帰的チャンク長のリストは、デバイスＡに送信する前に、コンパクトに符号化され、可逆的圧縮アルゴリズムを使用してさらに圧縮することができる。
【００４０】
４．５．デバイスＡは、ステップ４．２で計算した再帰的シグネチャのそれ自体のリストとデバイスＢから受信したこの再帰的シグネチャを比較する。
【００４１】
４．６．デバイスＡは、デバイスＡがそのセット（ＲＳｉｇＡ１．．．ＲＳｉｇＡｓ）中にマッチングする再帰的シグネチャをもたないあらゆる別個の（再帰的シグネチャＲＳｉｇＢｋを有する）再帰的シグネチャチャンクを求める要求をデバイスＢに送信する。
【００４２】
４．７．デバイスＢは、この要求された再帰的なシグネチャチャンクをデバイスＡに送信する。この要求された再帰的シグネチャチャンクは、デバイスＡに送信する前に、可逆的圧縮アルゴリズムを使用してさらに圧縮することができる。
【００４３】
４．８．デバイスＡは、このローカルにマッチングした再帰的シグネチャチャンク、およびステップ４．７でデバイスＢから受信したこれらの再帰的チャンクを使用してシグネチャおよびチャンク情報のリスト（（ＳｉｇＢ１，ＬｅｎＢ１）．．．（ＳｉｇＢｎ，ＬｅｎＢｎ））を再構築する。
【００４４】
以上のステップ４．８が完了した後に、前述のその基本的なＲＤＣプロトコルのステップ５において実行が続行され、それについては図３Ａに示されている。
【００４５】
再帰的チャンキング動作の結果、そのオブジェクトに関連する再帰的シグネチャの数は、その平均チャンクサイズＣに等しいファクタだけ低減され、再帰的シグネチャのかなり小さな数がもたらされる（それぞれ、オブジェクトＯＡについてはｓ＜＜ｋ、オブジェクトＯＢについてはｒ＜＜ｎとなる）。一実施形態においては、最初のオブジェクトＯＡおよびＯＢをチャンキングするためのものと同じチャンキングパラメータを、これらのシグネチャをチャンキングするために使用することができる。代替実施形態においては、他のチャンキングパラメータを、再帰的ステップのために使用することができる。
【００４６】
非常に大きなオブジェクトでは、以上の再帰的ステップは、ｋ≧１となるｋ回にわたって適用することができる。Ｃの平均チャンクサイズでは、再帰的チャンキングにより、このネットワーク（ステップ４．２ないし４．８）上でおよそＣｋに対応するファクタだけこのシグネチャトラフィックのサイズを低減することができる。Ｃは、比較的大きいので、１よりも大きな再帰性深さは、非常に大きなオブジェクトについてのみ必要になり得る。
【００４７】
一実施形態においては、再帰的ステップ数は、以下の予想された平均チャンクサイズ、オブジェクトＯＡおよび／またはＯＢのサイズ、オブジェクトＯＡおよび／またはＯＢのデータフォーマット、デバイスＡとデバイスＢを接続するネットワークの待ち時間特性および帯域幅特性のうちの１つまたは複数を含むパラメータを考慮することによって動的に決定することができる。
【００４８】
ステップ２で使用されるフィンガプリント関数は、ステップ３で使用されるフィンガプリント関数にマッチングさせられる。同様に、ステップ４．２で使用されるフィンガプリント関数は、ステップ４．３で使用されるフィンガプリント関数にマッチングさせられる。ステップ２〜３からのフィンガプリント関数は、ステップ４．２〜４．３からのフィンガプリント関数にオプションとしてマッチングさせることができる。
【００４９】
以前に説明したように、各フィンガプリント関数は、そのオブジェクト中の位置を囲む小さなデータウィンドウを使用する。ここで、このフィンガプリント関数に関連する値は、このデータウィンドウの内側に含まれるこのオブジェクトのすべてのバイトに依存する。このデータウィンドウのサイズは、１つまたは複数の判断基準に基づいて動的に調整することができる。さらに、このチャンキングプロシージャは、このフィンガプリント関数の値と１つまたは複数の追加のチャンキングパラメータを使用して以上のステップ２〜３および４．２〜４．３においてこのチャンク境界を決定する。
【００５０】
ウィンドウサイズとチャンキングパラメータを動的に変更することにより、このチャンク境界は、どのような必要なデータ転送でもその使用可能な帯域幅を最小限に消費するだけで実現されるように調整される。
【００５１】
このウィンドウサイズとチャンキングパラメータを調整するための判断基準の実施例は、そのオブジェクトに関連するデータタイプ、環境制約、使用モデル、デバイスＡとデバイスＢとを接続するネットワークの待ち時間特性および帯域幅特性、および平均データ転送ブロックサイズを決定するための他の適切な任意のモデルを含んでいる。データタイプの実施例には、ワードプロセッシングファイル、データベースイメージ、スプレッドシート、プレゼンテーションスライドショー、およびグラフィックイメージが含まれる。使用モデルの一実施例には、典型的なデータ転送で必要とされるその平均バイト数が監視される場合もある。
【００５２】
アプリケーションプログラム内における１つの要素に対する変更が、その関連するデータおよび／またはファイルに対するいくつかの変更をもたらす可能性がある。ほとんどのアプリケーションプログラムは、関連するファイルタイプを有するので、このファイルタイプは、そのウィンドウサイズおよびそのチャンキングパラメータを調整するに際して考慮に値する可能性のある１つの判断基準である。一実施例においては、ワードプロセッシングドキュメントにおける１つのキャラクタの修正により、この関連するファイル中で約１００バイトの変更がもたらされることになる。別の実施例においては、データベースアプリケーションにおける１つの要素の修正により、そのデータベース索引ファイル中で１０００バイトの変更がもたらされることになる。各実施例では、その適切なウィンドウサイズおよびチャンキングパラメータは、このチャンキングプロシージャがその特定のアプリケーションに基づいて最適化される適切な細分性を有するように異なる場合もある。
【００５３】
プロセスフローの実施例
図４Ａおよび４Ｂは、本発明の少なくとも一態様に従って構成される一実施例のＲＤＣプロシージャ中のローカルデバイス（例えば、デバイスＡ）と、リモートデバイス（例えば、デバイスＢ）との間の対話についてのプロセスフローを示す図である。図４Ａの左側は、このローカルデバイスＡ上で動作させられるステップ４００〜４１３を示すが、一方、図４Ａの右側は、このリモートデバイスＢ上で動作させられるステップ４５０〜４５６を示している。
【００５４】
図４Ａに示すように、この対話は、ステップ４００において、デバイスＡがオブジェクトＯＢのＲＤＣ転送を要求し、ステップ４５０において、デバイスＢがこの要求を受信することによって開始される。これに続いて、このローカルデバイスＡとリモートデバイスＢは共に、それぞれステップ４０１および４５１において、フィンガプリントを独立に計算し、ステップ４０２および４５２において、それらの各オブジェクトをチャンクに分割し、ステップ４０３および４５３においてチャンクごとにシグネチャ（例えば、ＳＨＡ）を計算する。
【００５５】
ステップ４５４において、デバイスＢは、ステップ４５２および４５３で計算したそのシグネチャおよびチャンク長のリストをデバイスＡに送信し、デバイスＡは、ステップ４０４においてこの情報を受信する。
【００５６】
ステップ４０５において、ローカルデバイスＡは、この要求されたチャンクリスト（ＲＥＱＵＥＳＴ）を空リスト（Ｅｍｐｔｙ）に初期化し、このリモートチャンクについての追跡オフセットを０に初期化する。ステップ４０６において、ステップ４０４で受信されるそのリストから次の（シグネチャ，チャンク長）対（ＳｉｇＢｉ，ＬｅｎＢｉ）を考慮するために選択する。ステップ４０７において、デバイスＡは、ステップ４０６で選択されたこのシグネチャＳｉｇＢｉがステップ４０３中にデバイスＡが計算したシグネチャのどれかとマッチングするかどうかを検査する。シグネチャがマッチングする場合は、ステップ４０９から実行が続行される。シグネチャがマッチングしない場合には、ステップ４０８において、この追跡リモートチャンクオフセットおよびバイト長ＬｅｎＢｉがその要求リストに追加される。ステップ４０９において、この追跡オフセットは、現行のチャンク長ＬｅｎＢｉ分だけ増分される。
【００５７】
ステップ４１０において、ローカルデバイスＡは、ステップ４０４中に受信されたすべての（シグネチャ，チャンク長）対が処理されているかどうかをテストする。処理されていない場合には、ステップ４０６から実行が継続される。処理されている場合には、ステップ４１１において、このチャンク要求リストは、コンパクトな様式に適切に符号化され、圧縮され、リモートデバイスＢに送信される。
【００５８】
ステップ４５５において、リモートデバイスＢは、この圧縮されたチャンクリストを受信し、ステップ４５６においてこのチャンクリストを伸張し、次いでこのチャンクデータを圧縮し返送する。
【００５９】
ステップ４１２において、このローカルデバイスは、この要求されたチャンクデータを受信し伸張する。ステップ４１３において、オブジェクトＯＡのローカルコピーと受信されたチャンクデータとを使用して、このローカルデバイスは、ＯＢのローカルコピーを再組立てする。
【００６０】
図４Ｂは、図４Ａからのステップ４１３についての詳細な実施例を示している。処理がステップ４１４から継続され、このステップにおいて、ローカルデバイスＡは、この再構築されたオブジェクト（ＮＥＷＯＢＪＥＣＴ）を空（Ｅｍｐｔｙ）に初期化する。
【００６１】
ステップ４１５において、次の（シグネチャ，チャンク長）対（ＳｉｇＢｉ，ＬｅｎＢｉ）がステップ４０４で受信されたリストから考慮するために選択される。ステップ４１６において、デバイスＡは、ステップ４１７中で選択されたシグネチャＳｉｇＢｉが、ステップ４０３中にデバイスＡが計算したシグネチャのどれかとマッチングするかどうかを検査する。
【００６２】
シグネチャがマッチングする場合、ステップ４１７から実行が継続され、このステップではその対応するローカルチャンクがその再構築済みのオブジェクトに追加される。シグネチャがマッチングしない場合には、ステップ４１８において、この受信され伸張されたリモートチャンクが、この再構築済みのオブジェクトに追加される。
【００６３】
ステップ４１９においては、ローカルデバイスＡは、ステップ４０４で受信されたすべての（シグネチャ，チャンク長）対が処理されているかどうかをテストする。処理されていない場合、ステップ４１５から実行が継続される。処理されている場合には、ステップ４２０において、この再構築済みのオブジェクトを使用してデバイスＡ上のオブジェクトＯＡの以前のコピーを置き換える。
【００６４】
実施例の再帰的シグネチャ転送プロセスフロー
図５Ａおよび５Ｂは、本発明の少なくとも一態様に従って構成されるＲＤＣプロシージャの一実施例におけるそのシグネチャおよびチャンク長のリストの再帰的な転送についてのプロセスフローを示す図である。以下で説明するプロシージャは、一般的に関連するオブジェクトを更新しようと試みるローカルデバイスとリモートデバイスの両方に対して適用することができる。
【００６５】
図５Ａの左側は、このローカルデバイスＡ上で動作させられるステップ５０１〜５１３を示すが、一方、図５Ａの右側は、このリモートデバイスＢ上で動作させられるステップ５５１〜５５６を示している。ステップ５０１〜５１３は、図４Ａ中のステップ４０４を置き換えるが、ステップ５５１〜５５６は、図４Ａ中のステップ４５４を置き換えるものである。
【００６６】
ステップ５０１および５５１において、これらのローカルデバイスＡとリモートデバイスＢは共に、それぞれステップ４０２／４０３と４５２／４５３で計算されているそのシグネチャおよびチャンク長のリスト（（ＳｉｇＡ１，ＬｅｎＡ１）．．．（ＳｉｇＡｋ，ＬｅｎＡｋ））と（（ＳｉｇＢ１，ＬｅｎＢ１）．．．（ＳｉｇＢｎ，ＬｅｎＢｎ））の再帰的フィンガプリントを独立に計算する。これらのデバイスは、それぞれステップ５０２および５５２において、それらの各シグネチャおよびチャンク長のリストを再帰的チャンクに分割し、ステップ５０３および５５３において、再帰的チャンクごとに再帰的シグネチャ（例えば、ＳＨＡ）を計算する。
【００６７】
ステップ５５４において、デバイスＢは、このステップ５５２および５５３で計算された再帰的なシグネチャおよびチャンク長のリストをデバイスＡに送信し、このデバイスＡは、ステップ５０４において、この情報を受信する。
【００６８】
ステップ５０５において、ローカルデバイスＡは、この要求された再帰的チャンクリスト（ＲＥＱＥＳＴ）を空リスト（Ｅｍｐｔｙ）に初期化し、このリモート再帰的チャンクについてのこの追跡リモート再帰的オフセット（ＲＯＦＦＳＥＴ）を０に初期化する。ステップ５０６において、次の（再帰的シグネチャ，再帰的チャンク長）対（ＲＳｉｇＢｉ，ＲＬｅｎＢｉ）が、考慮するために、ステップ５０４で受信されたリストから選択される。ステップ５０７において、デバイスＡは、ステップ５０６で選択されたこの再帰的シグネチャＲＳｉｇＢｉがステップ５０３中にデバイスＡが計算したその再帰的シグネチャのどれかとマッチングするかどうかを検査する。シグネチャがマッチングする場合、ステップ５０９から実行が継続される。シグネチャがマッチングしない場合には、ステップ５０８において、この追跡リモート再帰的チャンクオフセットおよびバイト長ＲＬｅｎＢｉが、その要求リストに追加される。ステップ５０９において、この追跡リモート再帰的オフセットは、現行の再帰的チャンク長ＲＬｅｎＢｉ分だけ増分される。
【００６９】
ステップ５１０において、ローカルデバイスＡは、ステップ５０４で受信されたすべての（再帰的シグネチャ，再帰的チャンク長）対が、処理されているかどうかをテストする。処理されていない場合、ステップ５０６から実行が継続される。処理されている場合には、ステップ５１１において、この再帰的チャンク要求リストは、コンパクトに符号化され、圧縮され、リモートデバイスＢに送信される。
【００７０】
このリモートデバイスＢは、ステップ５５５において、再帰的チャンクのその圧縮されたリストを受信し、そのリストを伸張し、次いでステップ５５６においてこの再帰的チャンクデータを圧縮し返送する。
【００７１】
ステップ５１２において、このローカルデバイスは、この要求された再帰的チャンクデータを受信し伸張する。ステップ５１３において、そのシグネチャおよびチャンク長のリスト（（ＳｉｇＡ１，ＬｅｎＡ１）．．．（ＳｉｇＡｋ，ＬｅｎＡｋ））のそのローカルコピーとこの受信された再帰的チャンクデータとを使用して、このローカルデバイスは、そのシグネチャおよびチャンク長のリスト（（ＳｉｇＢ１，ＬｅｎＢ１）．．．（ＳｉｇＢｎ，ＬｅｎＢｎ））のローカルコピーを再組立てする。次いで、図４Ａ中のステップ４０５から実行が継続される。
【００７２】
図５Ｂは、図５Ａからのステップ５１３についての詳細な実施例を示している。処理は、ステップ５１４から継続され、このステップにおいて、このローカルデバイスＡは、リモートシグネチャおよびチャンク長のリストＳＩＧＣＬを空リストに初期化する。
【００７３】
ステップ５１５において、次の（再帰的シグネチャ，再帰的チャンク長）対（ＲＳｉｇＢｉ，ＲＬｅｎＢｉ）が、考慮するために、ステップ５０４で受信されたリストから選択される。ステップ５１６において、デバイスＡは、ステップ５１５で選択された再帰的シグネチャＲＳｉｇＢｉが、ステップ５０３中にデバイスＡが計算した再帰的シグネチャのどれかとマッチングするかどうかを検査する。
【００７４】
シグネチャがマッチングする場合、ステップ５１７から実行が継続され、このステップにおいてデバイスＡは、対応するローカル再帰的チャンクをＳＩＧＣＬに追加する。シグネチャがマッチングしない場合には、ステップ５１８において、このリモート受信された再帰的チャンクがＳＩＧＣＬに追加される。
【００７５】
ステップ５１９において、このローカルデバイスＡは、ステップ５０４で受信されたすべての（再帰的シグネチャ，再帰的チャンク長）対が処理されているかどうかをテストする。処理されていない場合、ステップ５１５から実行が継続される。処理されている場合には、ステップ５２０において、このシグネチャおよびチャンク長のリスト（（ＳｉｇＢ１，ＬｅｎＢ１）．．．（ＳｉｇＢｋ，ＬｅｎＢｎ））のローカルコピーが、ＳＩＧＣＬの値に設定される。次いで、図４Ａ中のステップ４０５に戻って実行が継続される。
【００７６】
この再帰的シグネチャおよびチャンク長のリストをオプションとして評価して、前述のように帯域幅の利用を最小にするために追加の再帰的遠隔差分圧縮が必要かどうかが決定される。この再帰的シグネチャおよびチャンク長のリストは、ステップ５０４および５５４をこのＲＤＣプロシージャの別のインスタンスなどで置き換えることにより、所望の圧縮レベルが達成されるまでこの説明したチャンキングプロシージャを使用して再帰的に圧縮することができる。この再帰的なシグネチャリストが十分に圧縮された後に、前述のようにこのリモートデバイスとローカルデバイスの間で伝送するために、この再帰的なシグネチャリストが返される。
【００７７】
図６は、例示の本発明の実施形態に従って構成されるＲＤＣシーケンスの実施例における再帰的圧縮の実施例を図示した図である。図６に示す実施例では、最初のオブジェクトは、９．１ＧＢのデータである。シグネチャおよびチャンク長のリストは、チャンキングプロシージャを使用してコンパイルされ、ここでこのシグネチャおよびチャンク長のリストにより、３百万個のチャンク（または、４２ＭＢのサイズ）がもたらされる。第１の再帰的ステップの後に、このシグネチャリストは、３万３千個のチャンクに分割され、３３ＫＢのサイズの再帰的シグネチャおよび再帰的チャンク長のリストにまで減少する。このシグネチャリストを再帰的に圧縮することにより、このシグネチャリストを転送するための帯域幅利用率は、したがって４２ＭＢから３９５ＫＢに劇的に減少する。
【００７８】
オブジェクト更新の実施例
図７は、本発明の少なくとも一態様に従って構成されるＲＤＣプロシージャの一実施例を使用したクライアントアプリケーションとサーバアプリケーションの対話を示す図である。サーバとクライアントの両方の上の最初のファイルは、テキスト「The quick fox jumped over the lazy brown dog.  The dog was so lazy that he didn't notice the fox jumping over him.（すばやい狐は、のろまな茶色の犬の上を飛び越えた。この犬はあまりにものろまだったので、狐が自分の上を飛び越えたことに気がつかなかった。）」を含んでいた。
【００７９】
後続の時刻において、このサーバ上のこのファイルは、「The quick fox jumped over the lazy brown dog.  The brown dog was so lazy that he didn't notice the fox jumping over him.（すばやい狐は、のろまな茶色の犬の上を飛び越えた。この茶色の犬はあまりにものろまだったので、狐が自分の上を飛び越えたことに気がつかなかった。）」に更新される。
【００８０】
以前に説明したように、このクライアントは、このファイルが更新されるように定期的に要求する。これらのクライアントおよびサーバは共に、このオブジェクト（テキスト）を図に示すようにチャンクにチャンキングする。このクライアント上では、それらのチャンクは、「Ｔｈｅ  ｑｕｉｃｋ  ｆｏｘ  ｊｕｍｐｅｄ」、「ｏｖｅｒ  ｔｈｅ  ｌａｚｙ  ｂｒｏｗｎ  ｄｏｇ．」、「Ｔｈｅ  ｄｏｇ  ｗａｓ  ｓｏ  ｌａｚｙ  ｔｈａｔ  ｈｅ  ｄｉｄｎ’ｔ  ｎｏｔｉｃｅ」、および「ｔｈｅ  ｆｏｘ  ｊｕｍｐｉｎｇ  ｏｖｅｒ  ｈｉｍ．」であり、このクライアントシグネチャリストは、ＳＨＡ１１、ＳＨＡ１２、ＳＨＡ１３、およびＳＨＡ１４として生成される。このサーバ上では、それらのチャンクは、「Ｔｈｅ  ｑｕｉｃｋ  ｆｏｘ  ｊｕｍｐｅｄ」、「ｏｖｅｒ  ｔｈｅ  ｌａｚｙ  ｂｒｏｗｎ  ｄｏｇ．」、「Ｔｈｅ  ｂｒｏｗｎ  ｄｏｇ  ｗａｓ」、「ｓｏ  ｌａｚｙ  ｔｈａｔ  ｈｅ  ｄｉｄｎ’ｔ  ｎｏｔｉｃｅ」、および「ｔｈｅ  ｆｏｘ  ｊｕｍｐｉｎｇ  ｏｖｅｒ  ｈｉｍ．」であり、このサーバシグネチャリストは、ＳＨＡ２１、ＳＨＡ２２、ＳＨＡ２３、ＳＨＡ２４、およびＳＨＡ２５として生成される。
【００８１】
このサーバは、以前に説明したような再帰的シグネチャ圧縮技法を使用してこのシグネチャリスト（ＳＨＡ２１〜ＳＨＡ２５）を送信する。このクライアントは、そのローカルに記憶済みのシグネチャリスト（ＳＨＡ１１〜ＳＨＡ１４）が、その受信されたシグネチャリスト（ＳＨＡ２１〜ＳＨＡ２５）にマッチングしないことを認識し、このサーバからの不足しているチャンク３および４を要求する。このサーバは、チャンク３および４（「Ｔｈｅ  ｂｒｏｗｎ  ｄｏｇ  ｗａｓ」および「ｓｏ  ｌａｚｙ  ｔｈａｔ  ｈｅ  ｄｉｄｎ’ｔ  ｎｏｔｉｃｅ」）を圧縮し送信する。このクライアントは、図７に示すように、これらの圧縮されたチャンクを受信し、それらを伸張し、そのファイルを更新する。
【００８２】
チャンキング解析
前述のこの基本的なＲＤＣプロシージャの有効性は、このオブジェクトデータをチャンキングし、かつ／またはこのシグネチャおよびチャンク長のリストをチャンキングするために使用されるチャンキングプロシージャを最適化することによって増大させることができる。
【００８３】
この基本的なＲＤＣプロシージャは、以下の合計に一致するネットワーク通信オーバヘッドコストを有する。
【００８４】
（Ｓ１）｜Ｂからのシグネチャおよびチャンク長｜＝｜ＯＢ｜×｜ＳｉｇＬｅｎ｜／Ｃ、式中で｜ＯＢ｜は、オブジェクトＯＢのバイトサイズであり、ＳｉｇＬｅｎは、（シグネチャ，チャンク長）対のバイトサイズであり、Ｃは、予想される平均チャンクのバイトサイズであり、
（Ｓ２）Σｃｈｕｎｋ＿ｌｅｎｇｔｈ、式中で（ｓｉｇｎａｔｕｒｅ，ｃｈｕｎｋ＿ｌｅｎｇｔｈ）∈Ｂからのシグネチャ、および
【００８５】
【数１】
0004796315.tif 000002
【００８６】
である。
【００８７】
したがってこの通信コストは、大きな平均チャンクサイズ、ならびにこのリモートチャンクとローカルチャンクの間の大きな共通部分からの恩恵を受ける。どのようにしてオブジェクトをチャンクに切り分けるかの選択が、このプロトコルの品質を決定する。このローカルデバイスとリモートデバイスは、事前の通信なしにどこでオブジェクトを切り分けるかについて合意する必要がある。以下は、切れ目（ｃｕｔ）を見出すための様々な方法を説明し解析している。
【００８８】
以下の特性が、このカッティングアルゴリズム（ｃｕｔｔｉｎｇ  ａｌｇｏｒｉｔｈｍ）について知られているものと想定する。
【００８９】
１．スラック（ｓｌａｃｋ）：異なるファイル間でチャンクを一致させるために必要なバイト数。ｓ１、ｓ２、およびｓ３を考慮して、連結によって２つのシーケンスｓ１ｓ３、およびｓ２ｓ３を形成する。これら２つのシーケンスについてのチャンク、Ｃｈｕｎｋｓ１およびＣｈｕｎｋｓ２を生成する。Ｃｈｕｎｋｓ１’およびＣｈｕｎｋｓ２’が、それぞれＣｈｕｎｋｓ１およびＣｈｕｎｋｓ２からのチャンク長の和である場合、第１の共通の接尾辞に到達するまで、バイトのスラックは、以下の式によって与えられる。
ｓｌａｃｋ＝Ｃｈｕｎｋｓ１’−｜ｓ１｜＝Ｃｈｕｎｋｓ２’−｜ｓ２｜
【００９０】
２．平均チャンクサイズＣ：
オブジェクトＯＡおよびＯＢが、平均サイズＫを共通にもつＳ個のセグメントを有するとき、このクライアント上でローカルに取得することができるチャンク数は、次式で与えられる。
【００９１】
【数２】
0004796315.tif 000003
【００９２】
前記（Ｓ２）は、以下のように書き換えられる。
【００９３】
【数３】
0004796315.tif 000004
【００９４】
したがって、スラックを最小化するチャンキングアルゴリズムは、このワイヤ上で送信されるバイト数を最小化することになる。したがって、この予想されるスラックを最小化するチャンキングアルゴリズムを使用することが有利である。
【００９５】
フィンガプリント関数
すべてのチャンキングアルゴリズムは、スモールウィンドウ（小型のウィンドウ）、すなわち限られたバイトシーケンスに依存するフィンガプリント関数またはハッシュを使用する。これらのアルゴリズムが有限の差分（強度削減）最適化に従うとき、チャンキングのために使用されるハッシュアルゴリズムの実行時間は、このハッシュウィンドウサイズから独立している。したがって、サイズｋのハッシュウィンドウでは、ｂ０、ｂｋ、および＃［ｂ０，ｂ１，．．．，ｂｋ−１］だけを使用してそのハッシュ＃［ｂ１，．．．，ｂｋ−１，ｂｋ］を計算することは簡単な（一定のステップ数しか必要としない）はずである。ラビン多項式を使用したハッシュ関数や、あらかじめ計算済みの乱数テーブルに基づいた計算上より効率的に見える他のハッシュ関数など、様々なハッシング関数（ｈａｓｈｉｎｇ  ｆｕｎｃｔｉｏｎ）を使用することができる。
【００９６】
一実施例においては、ローリングチェックサム（ｒｏｌｌｉｎｇ  ｃｈｅｃｋｓｕｍ）に基づいた３２ビットのアドラーハッシュ（Ａｄｌｅｒ  ｈａｓｈ）をフィンガプリントのためのハッシング関数として使用することができる。このプロシージャでは、それぞれあらかじめ計算済みの１６ビットの乱数の２５６エントリを有する固定テーブルを使用することによって妥当で良好なランダムハッシュ関数が提供される。このテーブルを使用してフィンガプリントバイトがランダムな１６ビットの数に変換される。この３２ビットのハッシュが２つの１６ビットの数ｓｕｍ１およびｓｕｍ２に分割され、これらは、以下のプロシージャを想定して更新される。
ｓｕｍ１＋＝ｔａｂｌｅ［ｂｋ］−ｔａｂｌｅ［ｂ０］
ｓｕｍ２＋＝ｓｕｍ１−ｋ×ｔａｂｌｅ［ｂ０］
【００９７】
他の実施例においては、循環シフティング（ｃｙｃｌｉｃ  ｓｈｉｆｔｉｎｇ）を伴う６４ビットのランダムハッシュは、フィンガプリントのためのハッシング関数として使用することができる。循環シフトの周期は、そのハッシュ値のサイズによって縛られる。したがって、６４ビットのハッシュ値の使用によって、このハッシュの周期は６４に設定される。このハッシュを更新するためのプロシージャは、次式で与えられる。
ｈａｓｈ＝ｈａｓｈ＾（（ｔａｂｌｅ［ｂ０］＜＜ｌ）｜（ｔａｂｌｅ［ｂ０］＞＞ｕ））＾ｔａｂｌｅ［ｂｋ］；
ｈａｓｈ＝（ｈａｓｈ＜＜ｌ）｜（ｈａｓｈ＞＞６３）；
式中でｌ＝ｋ％６４、およびｕ＝６４−ｌ
【００９８】
さらに他の実施例においては、他のシフティング手法を使用してフィンガプリントを提供することができる。直接的循環シフティングは、限られた長さの周期を生成し、そのハッシュ値のサイズによって縛られる。他の順列は、より長い周期を有する。例えば、循環が提供する順列、（１  ２  ３  ０）（５  ６  ７  ８  ９  １０  １１  １２  １３  １４  ４）（１６  １７  １８  １９  ２０  ２１  １５）（２３  ２４  ２５  ２６  ２２）（２８  ２９  ２７）（３１  ３０）は長さ４×３×５×７×１１＝４６２０の周期を有する。この実施例の順列の１つの適用では、各間隔の先頭における位置にパッチアップ（ｐａｔｃｈ  ｕｐ）する動作が後に続く右シフトを使用して計算することができる。
【００９９】
所定のパターンにおいてチャンキングするための以前の技術の解析
以前のチャンキング手法では、所定のウィンドウサイズｋ（＝４８）を有するフィンガプリントハッシュを計算し、ハッシュビットのサブセットが所定のパターンとマッチングするかどうかに基づいてカットポイントを識別することによって決定される。ランダムハッシュ値を用いると、このパターンは、同様に０となることもあり、これに関連するサブセットも同様にこのハッシュの接頭辞になることもある。基本的な命令においては、これは、以下の形式の述語に変換される。
ＣｕｔＰｏｉｎｔ（ｈａｓｈ）≡０＝＝（ｈａｓｈ＆（（１＜＜ｃ）−１））
式中、ｃはマッチングさせるべきビット数である。
【０１００】
ランダムハッシュ関数の与えられたマッチングについての確率が２−Ｃであるので、平均チャンクサイズＣ＝２Ｃがもたらされる。しかし、最小チャンクサイズも最大チャンクサイズもこのプロシージャによっては決定されない。ｍの最小チャンク長が定められる場合には、平均チャンクサイズは、次のようになる。
Ｃ＝ｍ＋２Ｃ
【０１０１】
この予想されるスラックの大まかな推定値は、ストリームｓ１ｓ３およびｓ２ｓ３を考慮することによって得られる。ｓ１およびｓ２におけるカットポイントは、どのような位置に現れてもよい。平均チャンク長は、Ｃ＝ｍ＋２Ｃであるので、ｓ１およびｓ２における最後のカットポイントの（２Ｃ／Ｃ）２付近では、距離ｍを超えることになる。これらは、およそ２Ｃにおけるスラックに寄与することになる。この残りの１−（２Ｃ／Ｃ）２は約Ｃの長さのスラックで寄与する。その場合には、この予想されるスラックは、およそ（２Ｃ／Ｃ）３＋（１−（２Ｃ／Ｃ）２）×（Ｃ／Ｃ）＝（２Ｃ／Ｃ）３＋１−（２Ｃ／Ｃ）２となり、これは、ｍ＝２Ｃ−１についてグローバル最小値を有し、約２３／２７＝０．８５の値を有する。より正確な解析では、残りの１−（２Ｃ／Ｃ）２端数部についていくらか小さな推定値が提供されるが、ｓ３内側の距離ｍの内部のカットについて補償する必要があることにもなり、これはより大きな推定値に寄与する。
【０１０２】
したがって、従来技術についての予想されるスラックは、約０．８５×Ｃとなる。
【０１０３】
フィルタにおけるチャンキング（新しい技術）
フィルタにおけるチャンキングは、長さｍのパターンシーケンスとなっているフィルタを修正し、このフィルタに対してフィンガプリントハッシュシーケンスをマッチングさせることに基づいている。このフィルタが、ハッシュシーケンスをこのフィルタの接頭辞にも接尾辞にもマッチングさせないときには、任意の２つのマッチング部間の最小距離が、少なくともｍになる必要があることが推論できる。フィルタの一実施例は、以前の技術で使用されたカットポイント述語から、最初のｍ−１個のパターンを次式のように設定し、
０！＝（ｈａｓｈ＆（（１＜＜ｃ）−１））
また最後のパターンを次式のように
０＝＝（ｈａｓｈ＆（（１＜＜ｃ）−１））
設定することによって得ることができる。
【０１０４】
このフィルタをマッチングさせる確率は、（１−ｐ）ｍ−１ｐで与えられ、式中でｐは２−Ｃである。この予想されるチャンク長が、フィルタをマッチングさせる確率の逆数によって与えられることを算出することができ（このフィルタが、シーケンスが接頭辞にも接尾辞にもマッチングさせないようにする必要がある）、したがってこの実施例のフィルタの予想される長さは、（１−ｐ）−ｍ＋１ｐ−１となる。この長さは、ｐ：＝１／ｍを設定する際に最小になり、これは約（ｅ×ｍ）であることが分かる。この平均スラックは、約０．８付近にあり、当業者なら検証することができよう。この方法の代替実施形態は、生入力を用いて直接に機能するパターンを使用し、ローリングハッシュは使用していない。
【０１０５】
極大におけるチャンキング（新しい技術）
極大（Ｌｏｃａｌ  Ｍａｘｉｍａ）におけるチャンキングは、縛られたホライズン内部で最大となるカットポイント位置として選択することに基づいている。以下では、本発明者らは、ホライズン値についてはｈを使用することにする。ｏｆｆｓｅｔ−ｈ、．．．、ｏｆｆｓｅｔ−１、ならびにｏｆｆｓｅｔ＋１、．．．、ｏｆｆｓｅｔ＋ｈにおけるハッシュ値がすべて、ｏｆｆｓｅｔにおけるハッシュ値よりも小さい場合には、位置ｏｆｆｓｅｔにおけるハッシュは、ｈ−極大であると言う。換言すれば、ｈステップ左からｈステップ右までのすべての位置が、より小さなハッシュ値を有する。極大は、極小または（メジアンハッシュ値に対する「最近接」（ｃｌｏｓｅｓｔ  ｔｏ  ｔｈｅ  ｍｅｄｉａｎ  ｈａｓｈ  ｖａｌｕｅ）など）比較に基づく他の任意の距離で置き換えることもできることが当業者には理解されよう。
【０１０６】
サイズｎのオブジェクトについての極大の組は、この極大の組を計算するコストが独立なチャンキングに基づいてこのカットポイントを計算するコストと近いか、または同じになるように２・ｎ個の演算によって縛られる時間内で計算することができる。極大を使用して生成されるチャンクは常に、約２ｈ＋１の平均サイズを伴い、ｈに対応する最小サイズを有する。ＣｕｔＰｏｉｎｔプロシージャを、図８および９に示し、これについて次のように以下に説明する。
【０１０７】
１．エントリがレコード｛ｉｓＭａｘ＝ｆａｌｓｅ，ｈａｓｈ＝０，ｏｆｆｓｅｔ＝０｝で開始される長さｈのアレイＭを割り付ける。各フィールド中の第１のエントリ（ｉｓＭａｘ）は、候補が極大になりうるかどうかを示す。第２のフィールドエントリ（ｈａｓｈ）は、そのエントリに関連するハッシュ値を示し、０（またはその代わりに、可能な極大ハッシュ値）に初期化される。このエントリ中の最後のフィールド（ｏｆｆｓｅｔ）は、このフィンガプリントオブジェクトへの候補に対するバイトでの絶対オフセットを示す。
【０１０８】
２．アレイＭへのオフセット最小値および最大値を０に初期化する。これらの変数は、現在使用されているこのアレイの最初の要素および最後の要素を指し示す。
【０１０９】
３．ＣｕｔＰｏｉｎｔ（ｈａｓｈ，ｏｆｆｓｅｔ）は、図８のステップ８００から開始され、このオブジェクトの各オフセットで呼び出されてＭを更新し、特定のオフセットがカットポイントであるかどうかを示す結果を返す。
【０１１０】
このプロシージャはステップ８０１においてｒｅｓｕｌｔ＝ｆａｌｓｅを設定することによって開始される。
【０１１１】
ステップ８０３において、このプロシージャは、Ｍ［ｍａｘ］．ｏｆｆｓｅｔ＋ｈ＋１＝ｏｆｆｓｅｔが成立するかどうかを検査する。この条件が真である場合、ステップ８０４から実行が継続され、このステップで以下の割当てが実施される。すなわち、結果がＭ［ｍａｘ］．ｉｓＭａｘに設定され、ｍａｘがｍａｘ−１％ｈに設定される。次いでステップ８０５から実行が継続される。ステップ８０３における条件が偽である場合には、ステップ８０５から実行が継続される。
【０１１２】
ステップ８０５において、このプロシージャは、Ｍ［ｍｉｎ］．ｈａｓｈ＞ｈａｓｈが成立するかどうかを検査する。この条件が真である場合、ステップ８０６から実行が継続され、ここで、ｍｉｎが（ｍｉｎ−１）％ｈに設定される。ステップ８０７から実行が継続され、ここでＭ［ｍｉｎ］は、｛ｉｓＭａｘ＝ｆａｌｓｅ，ｈａｓｈ＝ｈａｓｈ，ｏｆｆｓｅｔ＝ｏｆｆｓｅｔ｝に設定され、ステップ８１１に進み、ここで計算結果が返される。
【０１１３】
ステップ８０５における条件が偽である場合には、ステップ８０８から実行が継続され、ここでこのプロシージャはＭ［ｍｉｎ］．ｈａｓｈ＝ｈａｓｈが成立するかどうかを検査する。この条件が真である場合、ステップ８０７から実行が継続される。
【０１１４】
ステップ８０８における条件が偽である場合には、ステップ８０９から実行が継続され、ここでこのプロシージャは、ｍｉｎ＝ｍａｘが成立するかどうかを検査する。この条件が真である場合、ステップ８１０から実行が継続され、ここでＭ［ｍｉｎ］は、｛ｉｓＭａｘ＝ｔｒｕｅ，ｈａｓｈ＝ｈａｓｈ，ｏｆｆｓｅｔ＝ｏｆｆｓｅｔ｝に設定される。次いで、ステップ８１１から実行が継続され、ここでその計算結果が返される。
【０１１５】
ステップ８０９における条件が偽である場合には、ステップ８１2から実行が継続され、ここでｍｉｎは、（ｍｉｎ＋１）％ｈに設定される。次いでステップ８０５に戻って実行が継続される。
【０１１６】
４．ＣｕｔＰｏｉｎｔ（ｈａｓｈ，ｏｆｆｓｅｔ）が真値を返すときには、それは、位置ｏｆｆｓｅｔ−ｈ−１におけるオフセットが新しいカットポイントになる場合のはずである。
【０１１７】
極大プロシージャの解析
ｎバイトを有するオブジェクトは、所与のオブジェクトについて多くてもｎ個のエントリが挿入されるようにＣｕｔＰｏｉｎｔをｎ回呼び出すことによって処理される。ｎ個より多いエントリを削除することがないように、ステップ８０５から開始されるループが反復されるたびに１つのエントリが除去される。したがって、この処理ループは、あらゆるエントリについて一度しか入ることができず、反復の結合回数は、多くてもｎ回とすることができる。これは、ＣｕｔＰｏｉｎｔに対する各呼出しにおけるループ内のステップの平均数が２よりわずかに少なく、カットポイントを計算するステップ数が、ｈからは独立していることを意味する。
【０１１８】
これらの要素からのハッシュ値は、ｍｉｎとｍａｘの間の降順チェーンを形成するので、ｍｉｎとｍａｘの間の平均距離（｜ｍｉｎ−ｍａｘ｜％ｈ）は、ｈの自然対数によって与えられることが分かる。Ｍ中の２つの隣接エントリの間に含まれないオフセットは、これら２つのエントリ以下のハッシュ値を有する。かかるチェーンの平均長は、漸化式ｆ（ｎ）＝１＋１／ｎ×Σｋ＜ｎｆ（ｋ）によって与えられる。長さｎの間隔上の最長の降順チェーンの平均長は、最大要素の位置から開始されるこの最長の降順チェーンの平均長よりも１だけ大きく、ここでこの最大要素は、任意の位置において確率１／ｎで見出すことができる。この循環関係は、調和次数に対応する解としてＨｎ＝１＋１／２＋１／３＋１／４＋．．．．＋１／ｎを有し、この式は、この式にＨｎを代入し、ｎについての帰納法を実施することによって正当性を検証することができる。Ｈｎはｎの自然対数に比例している。したがって、アレイＭにはサイズｈが割り付けられているが、どんなときにもサイズの小さな端数部ｌｎ（ｈ）しか使用されない。
【０１１９】
法ｈを用いてｍｉｎおよびｍａｘを計算することにより、これらの数の間の距離がｈ内にとどまる限りは、Ｍの使用間隔を任意に大きくすることが可能である。
【０１２０】
Ｍについての初期値の選択は、カットポイントがこの最初のｈオフセット内で生成できることを意味する。このアルゴリズムでは、これらの最初のｈオフセットにおけるカットポイントを回避するようにすることもできる。
【０１２１】
このプロシージャが生成するチャンクの予想されるサイズは、約２ｈ＋１である。所与の位置がカットポイントであるというその確率からこの数字が得られる。このハッシュがｍ個の可能な異なる値を有するものと想定する。その場合には、この確率は次式によって決定される。
Σ０≦ｋ＜ｍ１／ｍ（ｋ／ｍ）２ｈ
【０１２２】
積分∫０≦ｘ＜ｍ１／ｍ（ｘ／ｍ）２ｈｄｘ＝１／（２ｈ＋１）を使用した近似は、ｍが十分に大きいときのこの確率を示している。
【０１２３】
この確率は、まずこの和を次式に簡略化することによってさらに高精度に計算することができる。
（１／ｍ）２ｈ＋１Σ０≦ｋ＜ｍｋ２ｈ
【０１２４】
この式は、ベルヌーイ数（Ｂｅｒｎｏｕｌｌｉ  ｎｕｍｂｅｒ）Ｂｋを使用して次式に展開される。
（１／ｍ）２ｈ＋１１／（２ｈ＋１）Σ０≦ｋ＜２ｈ（２ｈ＋１）！／ｋ！（２ｈ＋１−ｋ）！Ｂｋｍ２ｈ＋１−ｋ
【０１２５】
非ゼロの唯一の奇数のベルヌーイ数は、Ｂ１であり、これは−１／２の対応する値を有する。偶数のベルヌーイ数は、次式を満たす。
Ｈ∞（２ｎ）＝（−１）ｎ−１２２ｎ−１π２ｎＢ２ｎ／（２ｎ）！
【０１２６】
この左辺は無限の和１＋（１／２）２ｎ＋（１／３）２ｎ＋．．．，を表し、これは、ｎのちょうど穏当な値については、１に非常に近くなる。
【０１２７】
ｍがｈに比べてずっと大きいときには、積分によって分かったように、第１の項以外のすべての項を無視することができる。これらは、ｈｋ−１／ｍｋに比例する項で０と１の間の定数に乗ずることによって与えられる。第１項（ここでは、Ｂ０＝１）は、１／（２ｈ＋１）に簡略化される。（第２項は−１／（２ｍ）であり、第３項はｈ／（６ｍ２）である）。
【０１２８】
この予想されるスラックの概略推定値については、ストリームｓ１ｓ３およびｓ２ｓ３を考慮する。ｓ１およびｓ２の内側の最後のカットポイントは、どのような位置に現れてもよい。平均チャンク長は約２ｈ＋１であるので、最後のカットポイントの約１／４までは、ｓ１でもｓ２でも距離ｈの範囲内にあることになる。これらは、約７／８ｈにおけるカットポイントに寄与する。他の１／２の場合においては、一方のカットポイントは、距離ｈの範囲内にあり、他方は、距離ｈを超えている。これらは、約３／４ｈのカットポイントで寄与する。ｓ１およびｓ２の最後のカットポイントの残りの１／４は、ｈよりも長い距離にあることになる。したがって、この予想されるスラックは、約１／４×７／８＋１／２×３／４＋１／４×１／４＝０．６６になる。
【０１２９】
したがって、発明者らの独立なチャンキング手法についての予想されるスラックは、０．６６×Ｃとなり、これは、従来技術（０．８５×Ｃ）よりも改善されている。
【０１３０】
ｈ、または平均してｌｎｈにせいぜい比例するスペースを使用しながら、平均して少ない命令しか実行する必要のない、カットポイントを識別する代替手法が存在する。以上のプロシージャでは、長さｎのストリーム中のあらゆる位置０．．ｎ−１ごとにエントリが挿入される。代替プロシージャにおける基本的なアイデアは、長さｈの間隔内の昇順チェーンの要素に出合う際にしか更新を行わないことである。発明者らは、間隔当たりに平均してｌｎｈのこのような更新しか存在しないことを観察した。さらに、長さｈの２つの連続した間隔中で極大を比較することにより、これら２つの極大のそれぞれが、ｈ極大にもなり得るかどうかを決定することができる。この代替プロシージャには、１つの特殊性がある。この代替プロシージャは、各ブロックが逆方向にトラバース（ｔｒａｖｅｒｓｅ）される、サイズｈのブロック中でこのストリームをトラバースすることによってその昇順チェーンを計算する必要がある。
【０１３１】
代替プロシージャ（図１０および１１参照）においては、簡潔に説明するためにハッシュのストリームがシーケンスとして提供されると想定している。このサブルーチンＣｕｔＰｏｉｎｔは、（図中で「ｈｏｒｉｚｏｎ」に展開された）長さｈのサブシーケンスごとに呼び出される。このサブルーチンは、０またはカットポイントであると決定された１つのオフセットを返す。Ｉｎｓｅｒｔに対する呼出しのｌｎ（ｈ）だけがこの最初のテストに合格することになる。
【０１３２】
Ａへの挿入は、それまでのＡ中の最大のエントリに対してこのオフセットにおけるそのハッシュ値をテストすることによって達成される。
【０１３３】
Ａ［ｋ］もＢ［ｋ］．ｉｓＭａｘも共に更新するループは、平均してそのループ本体において１つのテストしか実施されないように最適化することができる。Ｂ［１］．ｈａｓｈ＜＝Ａ［ｋ］．ｈａｓｈ、およびＢ［１］．ｉｓＭａｘのこのケースは、２つのループで処理され、この第１のものは、その第２の更新Ａ［ｋ］よりも小さくなくなるまでＢ［１］．ｈａｓｈに対してそのハッシュ値を検査する。他方のケースは、Ｂ［１］．ｉｓＭａｘへの更新が続くＡ［ｋ］しか更新しないループを使用して処理することができる。
【０１３４】
ＣｕｔＰｏｉｎｔに対する各呼出しは、Ａに対して平均でｌｎｈ回のメモリ書込みを必要とし、極大を見出すことに関連したｈ＋ｌｎｈ回の比較を行うループを伴う。Ａ［ｋ］．ｉｓＭａｘに対する最後の更新は、バイナリ探索によって、またはインデックス０から開始して平均して多くてもｌｏｇｌｎｈ回のステップでＢをトラバースすることによって実施することができる。ＣｕｔＰｏｉｎｔに対する各呼出しは、更新されるウィンドウ中の最後の位置におけるそのローリングハッシュを再計算することも必要とする。これは、そのローリングハッシュウィンドウのサイズだけの多数のステップを必要とする。
【０１３５】
改善されたチャンキングアルゴリズムの観察された利点
前述の極大手法とフィルタ手法では共に、最小のチャンクサイズが構築される。従来技術の実装形態では、最小のチャンクサイズには、追加のパラメータを別に供給することが必要になる。
【０１３６】
この極大（または数学）ベースの手法では、測定可能なより良好なスラック推定値が生成され、この推定値は変換されてこのネットワーク上でさらに圧縮される。フィルタ手法でも、従来技術の方法に比べてより良好なスラック性能が生成される。
【０１３７】
これらの新しい方法は共に、カットポイントの局所特性を有する。ホライズンを超えるｓ３の内側のすべてのカットポイントは、ストリームｓ１ｓ３とｓ２ｓ３の両方についてのカットポイントになる。（換言すれば、ストリームｓ１ｓ３を考慮すると、ｐが≧｜ｓ１｜＋ｈｏｒｉｓｏｎとなる位置であり、ｐがｓ１ｓ３中のカットポイントである場合には、ｐは、ｓ２ｓ３中のカットポイントでもある。この同じ特性が他の方向についても（対称的に）当てはまり、ｐがｓ２ｓ３中のカットポイントである場合には、ｐは、ｓ１ｓ２中のカットポイントにもなる）。以上は、従来技術の方法では成り立たず、従来の方法では、カットがある最小のチャンクサイズを超えるという要件が、不利に妨害し合うこともある。
【０１３８】
代替的な数学関数
前述のチャンキングプロシージャは、極大計算を使用してカットポイントを位置づける手段について説明しているが、本発明は、それだけには限定されない。任意の数学関数を構成して可能性のあるカットポイントを検査することができる。可能性のある各カットポイントは、考慮されたカットポイントについてのホライズンウィンドウ内に配置されたハッシュ値を評価することによって評価される。このハッシュ値の評価は、このホライズン内の最大値の位置を見つけるステップ、このホライズン内の最小値の位置を見つけるステップ、ハッシュ値の間の差分を評価するステップ、任意の定数に対してその結果を比較するステップのうちの少なくとも１つを含み得る数学関数、ならびに他の何らかの数学関数または統計的関数によって達成される。
【０１３９】
極大について以前に説明した特定の数学関数は、２項の述語「＿＞＿」である。ｐがこのオブジェクト中のオフセットであるケースでは、ｈａｓｈｐ＞ｈａｓｈｋがすべてのｋについて成立し、ここでｐ−ｈｏｒｉｚｏｎ≦ｋ＜ｐ、またはｐ＜ｋ≦ｐ＋ｈｏｒｉｚｏｎである場合には、ｐはカットポイントとして選択される。しかし、この２項の述語＞は、本発明の趣旨を逸脱することなく他の任意の数学関数で置き換えることができる。
【０１４０】
以上の本明細書、実施例、およびデータは、本発明の製造および構成物の使用についての完全なる記述を提供している。本発明の多数の実施形態は、本発明の趣旨および範囲を逸脱することなく作成することができるので、本発明は、添付の特許請求の範囲内に存在している。
【産業上の利用可能性】
【０１４１】
上述したように、本発明において、オブジェクトは、必要なデータ転送が最小化されるように遠隔差分圧縮（ＲＤＣ）手法を使用して２つ以上のコンピューティングデバイスの間で更新される。一態様においては、効率的な大きなオブジェクトの転送が、それ自体のメタデータに対してこのＲＤＣアルゴリズムを再帰的に適用することによって達成される。すなわち、１つまたは複数の再帰的ステップをこのケースにおいて使用してこのＲＤＣアルゴリズムによってこのネットワーク上で送信されるメタデータの量を減少させることができる。オブジェクト、および／または、シグネチャおよびチャンク長リストを、動的に決定されたロケーションに境界を位置づけることによってチャンキングすることができる。数学関数が、可能性のあるチャンク境界に関連してホライズンウィンドウ内に関連づけられたハッシュ値を評価する。従って、本発明の方法およびシステムは、ピアツーピアレプリケータ、電子メールクライアントおよび電子メールサーバ、クライアント側キャッシングシステム、汎用コピーユーティリティ、データベースレプリケータ、ポータル、ソフトウェア更新サービス、ファイル／データ同期化など様々なネットワーク化されたアプリケーションにおいて有用である。
【図面の簡単な説明】
【０１４２】
【図１】本発明に係わる動作環境を示す図である。
【図２】本発明に従うコンピューティングデバイスの一実施例を示す図である。
【図３Ａ】本発明に従うＲＤＣプロシージャの一実施例を示す図である。
【図３Ｂ】本発明に従うＲＤＣプロシージャの一実施例を示す図である。
【図４Ａ】本発明に従うＲＤＣプロシージャの一実施例中における、ローカルデバイスとリモートデバイスの間の対話についてのプロセスフローを示す図である。
【図４Ｂ】本発明に従うＲＤＣプロシージャの一実施例中における、ローカルデバイスとリモートデバイスの間の対話についてのプロセスフローを示す図である。
【図５Ａ】本発明に従うＲＤＣプロシージャ中における対話の一実施例におけるシグネチャおよびチャンク長のリストの再帰的遠隔差分圧縮についてのプロセスフローを示す図である。
【図５Ｂ】本発明に従うＲＤＣプロシージャ中における対話の一実施例におけるシグネチャおよびチャンク長のリストの再帰的遠隔差分圧縮についてのプロセスフローを示す図である。
【図６】本発明に従うＲＤＣシーケンスの一実施例における再帰的圧縮の一実施例を図示する図である。
【図７】本発明に従うＲＤＣプロシージャの一実施例を使用した、クライアントアプリケーションとサーバアプリケーションの対話を示す図である。
【図８】本発明に従うチャンキングプロシージャの一実施例についてのプロセスフローを示す図である。
【図９】本発明に従うチャンキングプロシージャの一実施例についての命令コードの実施例を示す図である。
【図１０】本発明の少なくとも一態様に従って構成されるチャンキングプロシージャの他の実施例についての命令コードの他の実施例を示す図である。
【図１１】本発明の少なくとも一態様に従って構成されるチャンキングプロシージャの他の実施例についての命令コードの他の実施例を示す図である。
【符号の説明】
【０１４３】
１００  デバイスＡ
１０１  デバイスＢ
１０２  ネットワーク
２００  コンピューティングデバイス
２０２  処理装置
２０４  システムメモリ
２０５  オペレーティングシステム
２０６  プログラムモジュール
２０７  プログラムデータ
２０９  着脱可能ストレージ
２１０  着脱不能ストレージ
２１２  １つ（または複数）の入力デバイス
２１４  １つ（または複数）の出力デバイス
２１６  １つ（または複数）の通信接続
２１８  他のコンピューティングデバイス
【図１】
0004796315.tif 000005
【図２】
0004796315.tif 000006
【図３Ａ】
0004796315.tif 000007
【図３Ｂ】
0004796315.tif 000008
【図４Ａ】
0004796315.tif 000009
【図４Ｂ】
0004796315.tif 000010
【図５Ａ】
0004796315.tif 000011
【図５Ｂ】
0004796315.tif 000012
【図６】
0004796315.tif 000013
【図７】
0004796315.tif 000014
【図８】
0004796315.tif 000015
【図９】
0004796315.tif 000016
【図１０】
0004796315.tif 000017
【図１１】
0004796315.tif 000018