(57)【要約】【課題】  類似の性質を有する複数のファイルが関係する場合の記憶資源および通信資源の使用の共有およびその他の最適化を行うシステムおよび方法を提供する。【解決手段】  値シーケンスにおける位置のフィンガープリント値を取得することおよびフィンガープリント値がＤ１整合であるかどうかを判断し、少なくとも、フィンガープリント値がＤ１整合でない場合に、フィンガープリント値がＤ２整合であるかどうかを判断することを含み、関数Ｄ１Ｍａｔｃｈが値に適用されると「真」を返す場合にその値はＤ１整合であり、関数Ｄ２Ｍａｔｃｈが値に適用されると「真」を返す場合にその値はＤ２整合であり、Ｄ１ＭａｔｃｈおよびＤ２Ｍａｔｃｈは整数をブール値にマッピングするブール関数であり、ランダムな整数に適用された場合に、Ｄ１Ｍａｔｃｈが「真」を返す確率は、Ｄ２Ｍａｔｃｈが「真」を返す確率よりも小さい、プロセッサベースの方法とする。【選択図】          図１
2006031686.tif 000002
【特許請求の範囲】
【請求項１】
値シーケンスを、１つ以上のチャンクに分割するプロセッサベースの方法は、
前記シーケンスにおける位置のフィンガープリント値を取得すること、および
前記フィンガープリント値がＤ１整合であるかどうかを判断し、少なくとも、前記フィンガープリント値がＤ１整合でない場合に、前記フィンガープリント値がＤ２整合であるかどうかを判断すること、
を含み、
関数Ｄ１Ｍａｔｃｈが値に適用されると「真」を返す場合に、その値はＤ１整合であり、
関数Ｄ２Ｍａｔｃｈが値に適用されると「真」を返す場合に、その値はＤ２整合であり、
Ｄ１ＭａｔｃｈおよびＤ２Ｍａｔｃｈは、整数をブール値にマッピングするブール関数であり、
ランダムな整数に適用された場合に、Ｄ１Ｍａｔｃｈが「真」を返す確率は、Ｄ２Ｍａｔｃｈが「真」を返す確率よりも小さい、
プロセッサベースの方法。
【請求項２】
前記シーケンスにおける位置のフィンガープリント値を取得することは、該フィンガープリント値が取得される前記位置を含んだウィンドウに含まれるデータ値シーケンスのハッシュ値を取得することを含む、請求項１に記載のプロセッサベースの方法。
【請求項３】
前記値シーケンスを、該シーケンス内の位置をブレークポイントとして指定することによって分割することをさらに含み、各ブレークポイントはチャンクの始点または終点であり、以下のブレークポイント条件、すなわち、
その位置のフィンガープリント値がＤ１整合であること、
その位置のフィンガープリント値がＤ２整合であり、かつ、前のブレークポイントがもしあれば、該前のブレークポイントと、あらゆる後続のＤ１整合のブレークポイントとの間の距離が所定の最大値Ｍ１よりも大きいこと、および
前のブレークポイントがもしあれば、該前のブレークポイントと現在位置との間の距離が前記最大値Ｍ１に等しいこと、
の少なくとも１つが真である場合に、該その位置がブレークポイントとして指定される、
請求項２に記載のプロセッサベースの方法。
【請求項４】
ブレークポイント条件がたとえ真であっても、位置とあらゆる前のブレークポイントとの間の距離が所定の最小値Ｍ２よりも小さい場合には、その位置はブレークポイントとして指定されない、請求項３に記載のプロセッサベースの方法。
【請求項５】
前記関数Ｄ１Ｍａｔｃｈは、前記値を第１の除数Ｄ１によって除算した結果、剰余が値Ｒ１を有する場合に「真」を返し、
前記関数Ｄ２Ｍａｔｃｈは、前記値を第２の除数Ｄ２によって除算した結果、剰余が値Ｒ２を有する場合に「真」を返し、
Ｄ１はＤ２に等しくなく、
Ｄ１、Ｄ２、Ｒ１、およびＲ２は所定の値を有する、
請求項１に記載のプロセッサベースの方法。
【請求項６】
マシンによって実行されると、値シーケンスを、各チャンクがより小さな値シーケンスとなる複数のチャンクに分割するオペレーションを該マシンに実行させる命令を含んだマシン可読媒体を備える装置であって、該オペレーションは、
前記シーケンスにおける位置のフィンガープリント値を取得すること、および
前記フィンガープリント値がＤ１整合であるかどうかを判断し、少なくとも、前記フィンガープリント値がＤ１整合でない場合に、前記フィンガープリント値がＤ２整合であるかどうかを判断すること、
を含み、
関数Ｄ１Ｍａｔｃｈが値に適用されると「真」を返す場合に、その値はＤ１整合であり、
関数Ｄ２Ｍａｔｃｈが値に適用されると「真」を返す場合に、その値はＤ２整合であり、
Ｄ１ＭａｔｃｈおよびＤ２Ｍａｔｃｈは、整数をブール値にマッピングする所定のブール関数であり、
ランダムな整数に適用された場合に、Ｄ１Ｍａｔｃｈが「真」を返す確率は、Ｄ２Ｍａｔｃｈが「真」を返す確率よりも小さい、
装置。
【請求項７】
前記オペレーションは、前記シーケンスを、複数の隣接した重なり合わないチャンクに分割し、各チャンクは、以下のブレークポイント条件、すなわち、
その位置のフィンガープリント値がＤ１整合であること、
その位置のフィンガープリント値がＤ２整合であり、かつ、前のブレークポイントがもしあれば、該前のブレークポイントと、あらゆる後続のＤ１整合のブレークポイントとの間の距離が所定の最大値Ｍ１よりも大きいこと、および
前のブレークポイントがもしあれば、該前のブレークポイントと現在位置との間の距離が前記最大値Ｍ１に等しいこと、
の少なくとも１つを満たす該その位置で開始または終了する、請求項６に記載の装置。
【請求項８】
複数のチャンクに分割された値シーケンスを備える装置であって、各チャンクは、以下のブレークポイント条件、すなわち、
その位置のフィンガープリント値がＤ１整合であること、
その位置のフィンガープリント値がＤ２整合であり、かつ、前のブレークポイントがもしあれば、該前のブレークポイントと、あらゆる後続のＤ１整合のブレークポイントとの間の距離が所定の最大値Ｍ１よりも大きいこと、および
前のブレークポイントがもしあれば、該前のブレークポイントと現在位置との間の距離が前記最大値Ｍ１に等しいこと、
の少なくとも１つを満たす該その位置で開始または終了し、
値を第１の除数Ｄ１によって除算した結果、剰余が値Ｒ１を有する場合に、その値はＤ１整合であり、
値を第２の除数Ｄ２によって除算した結果、剰余が値Ｒ２を有する場合に、その値はＤ２整合であり、
Ｄ１はＤ２に等しくなく、
Ｄ１、Ｄ２、Ｒ１、およびＲ２は特定の値を有する、
装置。
【請求項９】
前記装置は、各チャンクのハッシュ値を取得しなければならないか、または、取得するように適合され、該ハッシュ値を、先に記憶されたチャンクのハッシュ値と比較して、記憶すべきチャンクがもしあれば、いずれのチャンクを記憶すべきかを判断するように適合される、請求項８に記載の装置。
【請求項１０】
前記装置は、前記チャンクのハッシュ値を受信装置に最初に送信し、該受信装置にまだ記憶されていないチャンクのみを送信することによって、前記分割されたシーケンスを送信するように適合される、請求項８に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この開示は、包括的には、記憶資源および通信資源の使用の共有およびその他の最適化に関し、詳細には、類似の性質を有する複数のファイルが関係する場合の記憶資源および通信資源の使用の共有およびその他の最適化を行うシステムおよび方法に関する。
【背景技術】
【０００２】
企業および個人が、ますます、自身のコンピュータシステムおよびネットワークを使用し、これらに依拠するにつれて、より効率的なシステムおよびより高速のネットワークの必要性がより重要となってきている。その結果、コンピュータシステムは、今や、情報（例えば、データファイルおよびアプリケーションプログラム）を記憶するのにより大きなメモリを有し、コンピュータネットワークは、情報を伝送するのにより大きな帯域幅を有する。記憶される情報量および伝送される情報量が増加し続けているので、コンピュータシステムおよびネットワークの効率性および速度は、より効率的かつ高速に情報を記憶、検索、および伝送することによってさらに改良される可能性がある。情報の効率的かつ高速な処理を実行するさまざまなシステムおよび方法が開発されてきた。これらのシステムおよび方法は、ステートレスチャンキングアルゴリズム（stateless chunking algorithm）を利用して、効率および速度の改善を達成することができる。
【０００３】
チャンキングアルゴリズムは、長いバイトシーケンスＳを一連の小さなサイズのブロックまたはチャンクｃ１、ｃ２、…、ｃｎに分割するものである。これは、チャンクシーケンスがＳの局所的な変更の下で安定するように行われることが好ましい。局所的な変更の下で安定するということは、Ｓに対して小さな変更を行い、その結果、Ｓ’になり、このＳ’にチャンキングアルゴリズムを適用すると、Ｓ’に対して作成されたチャンクのほとんどがＳに対するチャンクと同一であることを意味する。このアルゴリズムの名前における用語「ステートレス」は、そのタスクを実行するのに、アルゴリズムが入力としてのバイトシーケンスＳのみに依拠し、利用可能となり得る他の一時的な情報または状態に依存した情報を調べることが可能でないことを意味する。不安定なチャンキングアルゴリズムでは、シーケンスの中央の軽微な挿入または削除であっても、その変更点に続くすべてのチャンク境界がシフトされる。チャンク境界をシフトさせる結果、ハッシュ値が異なるおそれがあり、その結果、通常、変更のないデータが挿入または削除の後に続くという理由だけで、それら変更のないデータが大量に記憶および／または伝送されることになる。
【０００４】
チャンキングオーバーヘッドは、変更された部分シーケンスに実際の含まれるデータの他に、通信および記憶する必要のあるデータの量の尺度である。チャンキングオーバーヘッドを削減することによって、チャンキングアルゴリズムを使用している装置の効率性は、当該装置による通信資源および記憶資源の使用に関して増加する。
【０００５】
【特許文献１】米国特許第５９９０８１０号
【非特許文献１】Brin, J. DavisおよびH. Garcia-Molina著「Copy detection mechanisms for digital documents」、Department of Computer Science Report、Stanford University、October 1994
【非特許文献２】Udi Manber著「Finding Similar Files in a Large File System」、DEPARTMENT OF COMPUTER SCIENCE、University of Arizona TR 93-33 October 1993
【非特許文献３】A. Muthitacharoen、B. ChenおよびD. Mazieres著「A low-bandwidth network file system」、In Proceedings of the 18th ACM Symposium on OperatingSystems Principles (SOSP '01)、pages 174-187、Chateau Lake Louise、Banff、 Canada、 October 2001
【非特許文献４】M.O. Rabin著「Fingerprinting by Random Polynomials」、 Tech. Rep. TR-15-81、 Center for Research in Computing Technology、Harvard Univ.、Cambridge、Mass.、1981
【発明の開示】
【発明が解決しようとする課題】
【０００６】
局所的な変更の下で安定したチャンキングアルゴリズムは、（１）アーカイブファイルシステム、および、（２）低帯域幅ネットワークファイルシステムといった少なくとも２つの状況で必要となってくる。あいにく、既知のチャンキング方法およびそのような方法を含む装置は、安定性および効率性の双方に関して失望せざるを得ない。したがって、本開示は、特にアーカイブファイルシステムおよび低帯域幅ネットワークファイルシステムで実施された場合に、安定性および／または効率性をさらに提供できる方法およびシステムを対象とする。
【課題を解決するための手段】
【０００７】
本発明のプロセッサベースの方法は、値シーケンスを、１つ以上のチャンクに分割するプロセッサベースの方法であって、前記シーケンスにおける位置のフィンガープリント値を取得すること、および前記フィンガープリント値がＤ１整合であるかどうかを判断し、少なくとも、前記フィンガープリント値がＤ１整合でない場合に、前記フィンガープリント値がＤ２整合であるかどうかを判断すること、を含み、関数Ｄ１Ｍａｔｃｈが値に適用されると「真」を返す場合に、その値はＤ１整合であり、関数Ｄ２Ｍａｔｃｈが値に適用されると「真」を返す場合に、その値はＤ２整合であり、Ｄ１ＭａｔｃｈおよびＤ２Ｍａｔｃｈは、整数をブール値にマッピングするブール関数であり、ランダムな整数に適用された場合に、Ｄ１Ｍａｔｃｈが「真」を返す確率は、Ｄ２Ｍａｔｃｈが「真」を返す確率よりも小さい。
【０００８】
この発明の正確な本質、ならびに、この発明の目的および利点は、以下の明細書を添付図面と共に考慮することによって容易に明らかになる。添付図面において、同じ参照番号は、添付図面の図全体を通じて同じ部分を指す。
【発明を実施するための最良の形態】
【０００９】
次に、この発明の例示の実施の形態を参照する。例示の実施の形態の例は添付図面に図示されている。この発明は、１つまたは２つ以上の実施の形態と共に説明されるが、これらの実施の形態は、この発明を限定することを意図したものではない。これとは逆に、この発明は、代替的なもの、変更したもの、および均等なものをカバーするように意図され、これらは、添付した特許請求の範囲によって画定されるこの発明の趣旨および範囲内に含めることができる。以下の詳細な説明では、本発明の十分な理解を提供するために、多数の具体的な詳細を説明する。しかしながら、本発明はこれらの具体的な詳細がなくても実施できることが、当業者の１人には理解されよう。それ以外の例では、本発明の重要な態様を不必要に分かりにくくしないように、周知の方法、手順、およびコンポーネントは詳細に説明していない。
【００１０】
ファイルをチャンクにする等、シーケンスのより安定した分割（すなわち、所与の挿入および削除に対してチャンクの変更が少ない分割）を提供するために、チャンクの境界は、ファイルの始点からの距離ではなく、ファイルの局所的な内容に依存して作成することができる。これを行う一方法は、スライディングウィンドウアルゴリズムを使用することである。このスライディングウィンドウアルゴリズムでは、ファイル内の各位置について、その位置で終了するウィンドウ内に含まれるデータシーケンスのフィンガープリントが計算され、このフィンガープリントが特定の判定基準を満たす場合に、その位置がチャンクの終点（すなわち、ブレークポイント）として指定される。一例として、ファイルが１０００個の文字位置を含み、５０のウィンドウサイズが使用される場合に、位置１０００のフィンガープリントは、位置９５１から開始して１０００で終了するシーケンスのフィンガープリントとなり、位置９９９のフィンガープリントは、位置９５０から開始して９９９で終了するシーケンスのフィンガープリントとなり、位置９９８のフィンガープリントは、位置９４９から開始して９９８で終了するシーケンスのフィンガープリントとなる。他の位置のフィンガープリントも、同様にして決定される。各位置のフィンガープリントは、決定されると、所定の整数Ｄによって除算され、その剰余が所定の値ｒと比較される。この剰余がｒと等しい場合には、その位置がブレークポイントとして使用される。特定の位置について、剰余がｒに等しい場合、その位置には「フィンガープリント整合（fingerprint match）」が存在する。
【００１１】
「フィンガープリント整合」のさらに形式的な定義は、シーケンスＳ＝ｓ１，ｓ２，…ｓｎ、ハッシュ関数ｈ、およびウィンドウ長ｌが与えられると、或る所定のｒ＜Ｄについて、ｈ（Ｗ）  ｍｏｄ  Ｄ＝ｒが、Ｓにおける位置ｋの前方の長さｌの部分シーケンスである場合に、位置ｋにフィンガープリントが存在するということである。ここで、Ｗ＝ｓｋ−ｌ＋１，ｓｋ−ｌ＋２，…，ｓｋである。本明細書で使用されるような「スライディングウィンドウチャンキング方法」は、フィンガープリント整合が存在するシーケンスの各位置にブレークポイントを設定するチャンキング方法である。位置のフィンガープリント値を計算する際に、「ラビンの（Rabin's）」フィンガープリントアルゴリズム等の非常に効率的なアルゴリズムを使用して、チャンキング方法の効率を改善することができる。
【００１２】
明らかなはずであるが、固定サイズのチャンクを使用するのではなく、スライディングウィンドウアルゴリズムを使用してチャンク境界を決定することの利点は、変更が行われるチャンク以外のチャンクはその変更による影響を受けないということである。さらに、チャンクサイズの最大値および最小値を設定し、（ａ）最小サイズよりも小さなチャンクを規定するために前のブレークポイントに非常に接近したあらゆるブレークポイントを削除し、（ｂ）少なくとも１つの最大サイズのチャンクおよび最大サイズ以下の少なくとも１つのチャンクを規定するために、最大サイズよりも大きなチャンクを規定するあらゆる２つのブレークポイント間に少なくとも１つのブレークポイントを挿入する、ことによって、改良を行うことができる。
【００１３】
上述したような装置および方法のさらなる情報は、以下の参考文献を参照することによって見つけることができる。（１）Brin, J. DavisおよびH. Garcia-Molinaの「Copy detection mechanisms for digital documents」、Department of Computer Science Report、Stanford University、October 1994（非特許文献１）、（２）Udi Manberの 「Finding Similar Files in a Large File System」、DEPARTMENT OF COMPUTER SCIENCE、University of Arizona TR 93-33 October 1993（非特許文献２）、（３）米国特許第５９９０８１０号の「Method for partitioning a block of data into subblocks and for storing and communicating such subblocks」（特許文献１）、（４）A. Muthitacharoen、B. ChenおよびD. Mazieresの「A low-bandwidth network file system」、In Proceedings of the 18th ACM Symposium on OperatingSystems Principles (SOSP '01)、pages 174-187、Chateau Lake Louise、Banff、 Canada、 October 2001（非特許文献３）、ならびに（５）M.O. Rabinの「Fingerprinting by Random Polynomials」、 Tech. Rep. TR-15-81、 Center for Research in Computing Technology、Harvard Univ.、Cambridge、Mass.、1981（非特許文献４）。これらの参考文献のそれぞれは、この引用によって、その全内容が参照により本明細書に援用される。
【００１４】
シーケンスをチャンク、すなわち、より小さなシーケンスに分割するよりよい方法は、次のものを含む。事前に定義されたプロシージャＤ１Ｍａｔｃｈ（Ｆ）およびＤ２Ｍａｔｃｈ（Ｆ）、ならびに、３つの所定の整数Ｗ、Ｍ１、およびＭ２で開始することができる。Ｄ１Ｍａｔｃｈは、整数Ｆに適用されると、「真」または「偽」を返す決定性プロシージャである。Ｄ１Ｍａｔｃｈの１つの可能な実施の形態は、Ｆを所定の整数Ｄ１で除算した剰余を計算し、その剰余が所定の整数Ｒ１に等しい場合には真を返し、そうでない場合には偽を返すことである。Ｄ２Ｍａｔｃｈも、整数Ｆに適用されると、「真」または「偽」を返す決定性プロシージャである。Ｄ２Ｍａｔｃｈの１つの可能な実施の形態は、Ｆを所定の整数Ｄ２で除算した剰余を計算し、その剰余が所定の整数Ｒ２に等しい場合には真を返し、そうでない場合には偽を返すことである。Ｗはウィンドウサイズであり、このウィンドウサイズは、上述したようなスライディングウィンドウチャンキングアルゴリズムについて行われるような各位置のフィンガープリントを取る部分シーケンスのサイズを決定するものである。好ましくは、ランダムに選択したＦに対して、Ｄ２Ｍａｔｃｈ（Ｆ）が真を返す確率は、Ｄ１Ｍａｔｃｈが真を返す確率よりも高い。Ｍ１およびＭ２は、それぞれ、最大チャンクサイズおよび最小チャンクサイズである。
【００１５】
ｂｍをｍ番目のブレークポイント（または、ｂｍ＋１がシーケンスの最初のブレークポイントとなる場合には、シーケンスの開始点）とすると、ｂｍ＋１は、以下のステップを実行することによって決定される。ｂｍ＋Ｍ２がシーケンスの終点位置よりも大きいかまたは終点位置と等しい場合には、我々は終了する。そうでない場合には、シーケンスの走査が、位置ｂｍ＋Ｍ２で開始され、各位置ｋにおいて、位置ｋ−Ｗと位置ｋとの間の部分シーケンスのフィンガープリント値ｆが計算される。Ｄ１Ｍａｔｃｈ（ｆ）が計算されて、このＤ１Ｍａｔｃｈ（ｆ）が真を返すと、我々は、ｋにおいて「Ｄ１整合」が存在すると言う。Ｄ２Ｍａｔｃｈ（ｆ）も計算されて、このＤ２Ｍａｔｃｈ（ｆ）が真を返すと、我々は、ｋにおいて「Ｄ２整合」が存在すると言う。走査は、いずれが最初に起こるとしても、Ｄ１整合が見つかるまで、または、位置ｂｍ＋Ｍ１に達するまで続けられる。Ｄ１整合が、しきい値Ｍ１に達する前に見つかると、その位置が、ブレークポイントｂｍ＋１として指定される。Ｄ１整合が、しきい値Ｍ１に達する前に見つからないが、少なくとも１つのＤ２整合が見つかっている場合には、最新のＤ２整合になる位置がブレークポイントｂｍ＋１として指定される。Ｄ１整合またはＤ２整合が見つからない場合には、ｂｍ＋Ｍ１の位置がブレークポイントｂｍ＋１として指定される。
【００１６】
その後、これらのステップは、シーケンスの終点に達するまで、または、現在分割中の区間の終点に達するまで繰り返すことができる。この方法は、整数シーケンスに有利に適用できるが、他のシーケンスにも同様に適用可能な場合があることに留意すべきである。また、この方法は、フィンガープリント値が第１の組の判定基準を満たすかどうか、すなわち、フィンガープリント値がＤ１整合であるかどうか、および、フィンガープリント値が第２の組の判定基準を満たすかどうか、すなわち、フィンガープリント値がＤ２整合であるかどうか、を判断することも検討する。この方法は、異なる組の判定基準を利用するように変更することができる。この変更は、異なる除数値および剰余値を有する同じ組の判定基準を使用して、かつ／または、Ｄ１整合もＤ２整合も発生しない場合に使用されるバックアップブレークポイントを追加する付加的な組の判定基準を使用して行われる。
【００１７】
説明した方法では、現在ウィンドウ内にあるシーケンスのメンバのフィンガープリント値を取得することは、ラビンのフィンガープリントアルゴリズムを使用して行われることが好ましい。このアルゴリズムはこの技術分野で周知であるので、本明細書では詳細に説明しない。代替的に、他のハッシュ／フィンガープリントアルゴリズムを使用することもできる。
【００１８】
好ましいチャンキング方法のより詳細な実施の形態を図１の方法１として示す。この方法は、Ｓをチャンクに分割するブレークポイントの配列Ｂを生成するのに使用される。図１のブロック３において、さまざまな初期化が実行され、ｐｏｓｉｔｉｏｎ（位置）変数がフィンガープリントウィンドウＷのサイズに設定され、ｌａｓｔＢｒｅａｋ（最終ブレーク）変数が、ブレークポイントがまだ見つかっていないことを示す０に等しく設定され、ブレークポイントＢの配列が空配列となるように設定され、ｆが、分割中の整数シーケンスＳにおける、ウィンドウの始点（ｐｏｓｉｔｉｏｎ−ｗｉｎｄｏｗＳｉｚｅ（ウィンドウサイズ））で開始してウィンドウの終点（ｐｏｓｉｔｉｏｎ）で終了するセグメントのフィンガープリント値に等しく設定される。判定ボックス７において、シーケンスの終点にすでに達しているかどうかを調べるチェックが行われる。シーケンスの終点にすでに達している場合には、シーケンスＳのチャンキングは完了する。シーケンスの終点にまだ達していない場合には、シーケンスＳのチャンキングは続けられる。このチェックは、「ｐｏｓｉｔｉｏｎ」の現在値がＳの長さよりも小さいかどうかを判断することによって行われる。「ｐｏｓｉｔｉｏｎ」の現在値がＳの長さよりも小さい場合には、Ｓの終点にはまだ達しておらず、処理は判定ボックス９に続く。
【００１９】
判定ボックス９において、現在位置をブレークポイントとして指定することにより、チャンクが最小チャンクサイズよりも小さくなるかどうかを判断するチェックが行われる。チャンクが最小チャンクサイズよりも小さくなる場合には、ボックス２７に示すように、ウィンドウが移動され、フィンガープリント値が更新される。チャンクが最小チャンクサイズよりも小さくない場合には、フィンガープリント値が評価される。このチェックは、ｐｏｓｉｔｉｏｎとｌａｓｔＢｒｅａｋとの差を値Ｔｍｉｎ（前の例ではＭ２）と比較することによって行われる。
【００２０】
判定ボックス１１において、フィンガープリント値ｆをＤ２によって除算した結果の剰余をｒ２と比較することによって、ｆが評価される。この方法の最初の説明と同様に、Ｄ２はバックアップ除数値であり、ｒ２はバックアップ剰余値である。剰余がｒ２に等しい場合には、ボックス１３において、ｂａｃｋｕｐＢｒｅａｋ（バックアップブレーク）をｐｏｓｉｔｉｏｎと等しく設定されることにより、現在位置がバックアップブレークポイント位置として指定される。剰余がｒ２に等しくない場合には、この方法は、ポイント１５にジャンプし、ボックス１３を迂回する。
【００２１】
判定ボックス１７において、フィンガープリント値ｆをＤ１で除算した結果の剰余をｒ１と比較することによって、ｆが評価される。この方法の最初の説明と同様に、Ｄ１はメイン除数値であり、ｒ１はメイン剰余値である。剰余がｒ１に等しい場合には、ボックス３１において、配列Ｂの後部に現在位置を追加することにより、現在位置がブレークポイント位置として指定され、ｌａｓｔＢｒｅａｋ（最終ブレーク）をｐｏｓｉｔｉｏｎに等しく設定することにより、最終ブレークポイントの最終位置が現在位置に更新され、ｂａｃｋｕｐＢｒｅａｋを０に設定することにより、あらゆるバックアップブレークポイント位置が廃棄される。その後、ボックス２７に示すように、ウィンドウが移動され、フィンガープリント値が更新される。剰余がｒ１に等しくない場合には、この方法は、判定ボックス１９を続ける。
【００２２】
判定ボックス１９において、現在位置にブレークポイントを設定することによって、チャンクが最大チャンクサイズに等しくなるかどうかを判断するチェックが行われる。チャンクが最大チャンクサイズに等しくならない場合には、ボックス２７に示すように、ウィンドウが移動され、フィンガープリント値が更新される。チャンクが最大チャンクサイズに等しくなる場合には、バックアップブレークポイントまたは現在位置のいずれかがブレークポイントとして指定され、チャンクサイズが最大許容サイズよりも大きくなることが防止され、この方法は判定ボックス２１に進む。ボックス１９のチェックは、ｐｏｓｉｔｉｏｎとｌａｓｔＢｒｅａｋとの差を最大チャンクサイズであるＴｍａｘ（前の例ではＭ１）と比較することによって行われる。
【００２３】
ウィンドウをスライディングさせることによって、チャンクサイズが最大チャンクサイズを超える可能性がある場合には、ボックス２１に達する。ボックス２１において、バックアップブレークポイントが見つかったかどうかを判断するチェックが行われる（ｂａｃｋｕｐＢｒｅａｋを０と比較することによって）。バックアップブレークポイントが見つかった場合には、そのバックアップブレークポイントを配列Ｂの後部に追加することによって、当該バックアップブレークポイントがブレークポイントとして指定され（ボックス２３に示すように）、ｌａｓｔＢｒｅａｋをｂａｃｋｕｐＢｒｅａｋに等しく設定することによって、最終ブレークポイント位置がそのバックアップブレークポイント位置に設定され、ｂａｃｋｕｐＢｒｅａｋを０に設定することによって、バックアップブレークポイント位置がクリアされる。その後、ボックス２７に示すように、ウィンドウが移動され、フィンガープリント値が更新される。
【００２４】
ボックス２１において、チェックが、バックアップブレークポイントが見つからなかったと判断すると、ボックス２９に示すように、現在位置がブレークポイントとして指定されて、最大サイズのチャンクが作成される。これは、現在位置を配列Ｂの後部に追加して、ｌａｓｔＢｒｅａｋをｐｏｓｉｔｉｏｎに等しく設定することによって行われる。その後、ボックス２７に示すように、ウィンドウが移動され、フィンガープリント値が更新される。
【００２５】
ボックス２１において、現在位置が、分割中のシーケンスの次の位置になるように変更され、フィンガープリント値ｆが更新される。
【００２６】
図２では、擬似Ｃコードスニペットが本発明の別の実施の形態を提供する。図２のコードは、一例としての機能を果たすには十分完成したものであるが、その現在の形でコンパイルするには必ずしも適していないことに留意すべきである。図２では、多数の変数が図１に関して説明した変数と対応する。例外は、「Ｄ１」および「Ｄ２」の代わりに「Ｄ」および「Ｄｄａｓｈ」が使用され、「ｒ１」の代わりに「Ｄ−１」が使用され、「ｒ２」の代わりに「Ｄｄａｓｈ−１」が使用され、「ｆ」の代わりに「ｈａｓｈ」が使用されることである。また、このコードは、ブレークポイントの配列にブレークポイントを追加するステップを示す関数「ａｄｄＢｒｅａｋｐｏｉｎｔ」も含む。
【００２７】
本発明のいくつかの実施の形態は、上述した方法に加えて、少なくとも、このような方法を使用してチャンキングされたシーケンス、このような方法を記憶および／または実行する装置、ならびに、このような方法を使用してチャンキングされたシーケンスを記憶および／または伝送する装置も包含する。
【００２８】
したがって、ＣＤ、ＤＶＤ、または他の記憶デバイスを使用して、本明細書で説明した方法の１つまたは２つ以上を実施する命令セットを記憶することができ、かつ／または、本明細書で説明した方法の１つまたは２つ以上を使用してチャンキングされたリストを記憶することができる。検討された記憶装置には、揮発性ソリッドステートメモリ、不揮発性ソリッドステートメモリ、光ディスク、磁気ディスク、光磁気ディスク、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、磁気テープ、１つもしくは２つ以上の電子回路、および／またはＲＡＩＤ装置、ＤＡＳ装置、ＮＡＳ装置、もしくはＳＡＮ装置が含まれるが、必ずしもこれらに限定されるものではない。いくつかの場合において、記憶装置は、より大きなシステムに含めることができる一方、それ以外では、記憶装置はスタンドアロンである。
【００２９】
一例として、図３では、装置３１はコンピュータ３２であり、このコンピュータ３２は、プロセッサ３３、メモリ３４、およびマシン可読媒体３５を備える。マシン可読媒体３５は、分割される値シーケンス３７および命令セット３９を含む。命令セット３９は、プロセッサによって実行されると、上述したように、値シーケンス３７を複数のチャンクに分割するオペレーションをプロセッサに実行させる。図４は、装置４１が、命令セット４７を含むＤＶＤディスクであるマシン可読媒体４５を備える別の例を提供する。命令セット４７は、マシンによって実行されると、上述したように、値シーケンスを複数のチャンクに分割するオペレーションをマシンに実行させる。
【００３０】
この発明を実施する装置が、本明細書で説明した方法の１つまたは２つ以上を実施する命令セットを備える場合に、この命令セットは、任意の適当な形を有することができる。したがって、この命令セットは、少なくとも、図２に示す形と類似したコンピュータプログラミング言語のシンタックスのテキストとして記憶することもできるし、コンパイルされたがリンクされていないフォーマットのオブジェクトコードとして記憶することもできるし、実行可能フォーマットで記憶することもできるし、暗号化することもできるし、かつ／または、圧縮することもできる。この命令セットは、テキストフォーマットで記憶される場合、特に、Ｃ、Ｃ＋＋、Ｃ＃、ＰＡＳＣＡＬ、ＢＡＳＩＣ、ＣＯＢＯＬ、ＦＯＲＴＲＡＮ、ＲＰＧ、ＬＩＳＰ、ＪＡＶＡ（登録商標）、ＨＴＭＬ、ＸＭＬ、ＳＱＬ、Ｐｅｒｌ、ＡＤＡ、Ｂｅｔａ、Ｃｅｃｉｌ、Ｅｉｆｆｅｌ、Ｅｌｆ、Ｅｒｌａｎｇ、Ｆｏｒｔｈ、Ｇｅｎｔｌｅ、Ｈａｓｋｅｌｌ、Ｈｏｐｅ、ｌａｍｂｄａ、Ｌｙｇｏｎ、Ｍｅｒｃｕｒｙ、Ｍｏｄｕｌａ、Ｎａｐｉｅｒ、Ｎｅｓｔｌ、Ｏｂｌｉｑ、Ｏｃｃａｍ、Ｏｚ、Ｐｉｃｔ、Ｐｉｌｏｔ、Ｐｉｚｚａ、Ｐｒｏｍｅｔｈｉｕｓ、Ｐｙｔｈｏｎ、Ｓａｓｅｒ、Ｓｃｈｅｍｅ、Ｓｉｓｌ、Ｔｈｅｔａ、Ｐｏｓｔｓｃｒｉｐｔ、またはアセンブリ言語の「プログラム」もしくはプログラムセットとして記憶することができる。さらに、この命令セットは、ライブラリに組み込むこともできるし、１つまたは２つ以上の個別のファイルに記憶することもできる。
【００３１】
この発明を実施する装置が、本明細書で説明した方法の１つまたは２つ以上を使用してチャンキングされたシーケンスを備える場合、このチャンキングされたシーケンスは、任意の適当な形を有することができる。したがって、いくつかの場合において、生成されたブレークポイントは、そのシーケンスの切り離せない部分とすることができ、それ以外では、生成されたブレークポイントは、おそらく配列、リスト、および／またはシーケンスとして別々に記憶することができる。いくつかの場合において、ブレークポイントは、明確に生成されないことがあるが、他の或るメカニズムを使用すると、チャンク自体を配列、リスト、または他の或る形で記憶すること等によってシーケンスを分割することができる。
【００３２】
この装置は、シーケンスを記憶するように適合されると、チャンキングされたシーケンスのハッシュ値を、先に記憶されたチャンクのハッシュ値と比較して、記憶すべきチャンクがもしあれば、どのチャンクを記憶すべきかを決定するように適合することができる。この装置は、分割したシーケンスを送信するように適合されると、チャンクのハッシュ値を受信装置に最初に送信して、受信装置にまだ記憶されていないチャンクのみを送信することにより、分割したシーケンスを送信することができる。特定のチャンクが受信装置に存在するかどうかの判断は、送信システムまたは受信システムのいずれかによって行うことができる。受信システムによって行われる場合、シーケンスの送信は、そのシーケンスのハッシュ値を送信することと、受信システムがまだ有していないチャンクについて、受信システムからの要求に応答することとを含むことができる。
【００３３】
装置の一部であれば、その装置は、命令セットおよび／またはチャンキングされたシーケンスの記憶、実行、および／または送信を行う最小の要素を備えることができる。多くの実施の形態では、この装置は、ＤＯＳ、ＣＰＭ、ＵＮＩＸ（登録商標）、ＷＩＮＤＯＷＳ（登録商標）、ＰａｌｍＯＳ、またはＭａｃｉｎｔｏｓｈファミリーのオペレーティングシステムを実行するコンピュータであると考えられる。他の実施の形態では、他のオペレーティングシステムを使用することができ、および／または、メインフレーム、ロボット工学、製造に専用化されたオペレーティングシステム／アプリケーションおよび／または実時間制御システム等の専用オペレーティングシステム／アプリケーションを使用することができる。
【００３４】
いくつかの場合において、この装置は、命令セットのコピーまたはチャンキングされたリストのコピーを購入者に提供するように製造された製品とすることができる。いくつかの場合において、この製品は、受信装置に電子的に転送可能なファイルまたはファイルセットである一方、それ以外では、上述したようなＣＤまたはＤＶＤとすることができる。
【００３５】
図１および図２の方法は例示の実施の形態にすぎないことに留意することは重要である。したがって、代替的な実施の形態は、追加ステップもしくはこれよりも少ないステップを含むこともでき、および／または、類似した順序もしくは異なる順序でステップを実行することもできる。一例として、いくつかの実施の形態では、フィンガープリント値を評価して、Ｄ２整合が生じたかどうかを判断することは、前の評価が、Ｄ１整合が生じなかったことを示す場合にのみ行うことができる。別の例として、説明した方法は、シーケンス（または部分シーケンス）の始点から終点に向けて走査するが、代替的な方法は、終点から始点に向けて走査することもできるし、他の形式でブレークポイントを見つけることもできる。同様に、ブレークポイントの実際の割り当ては、ブレークポイントがシーケンスに現れる順序で行うこともできるし、タイプに基づいて行うこともできるし（すなわち、最初にＤ１整合、次にＤ２整合等）、他の或る方法で行うこともできる。
【００３６】
本明細書で使用するように、用語「取得する」は、広く使用され、少なくとも、内部または外部のソースから取得されたオブジェクトを受け取ること、オブジェクトを生成するステップを実行すること、ならびに／または、値の場合には、その値を生成する演算を実行することおよび／もしくはその値を計算することを含む。用語「〜するように適合される」も、適合されたオブジェクトが、識別された機能を実行することを容易にする少なくとも１つの特性を有することを示すように広く使用される。いくつかの例の適合は、オブジェクトを適切なサイズおよび寸法にすること、オブジェクトをプログラミングすること、ならびに、適切な回路、センサ、およびアクチュエータをオブジェクトに提供することである。
【００３７】
本明細書で説明した方法および装置は、データブロックを記憶するのに使用されるアーカイブファイルシステムであって、ブロック識別子として各データブロックのハッシュを利用するアーカイブファイルシステムでの使用に適している。ファイルの記憶にハッシュベースの記憶方式を使用するために、各ファイルは、本明細書で説明したチャンキングアルゴリズムを使用して多数のブロックに分割され、これらのブロックは別々に記憶される。
【００３８】
本明細書で説明した方法および装置は、受信機（サーバまたはクライアント）が、送信される情報（例えばファイル）の同様のバージョンをすでに有する場合に、低帯域幅ネットワークファイルシステムの実施に使用されて、サーバとクライアントとの間で転送される情報量を最小にするのに適している。例えば、サーバは、クライアントがサーバに保存したいファイルの旧バージョンを有することがある。その新しいファイルは、既存のファイルの検索および編集を行うことによって作成されている可能性がある。サーバは、既存のファイルを受信すると、本明細書で説明したようなチャンキングアルゴリズムを使用して、既存のファイルをチャンクに分割し、各チャンクのハッシュまたは識別子を作成する。サーバは、自身のメモリに記憶されたすべてのチャンクのハッシュのテーブルまたはリストを、チャンク自体の記憶場所のポインタと共に保持する。次に、クライアントが、ファイルの新しいバージョンをサーバに保存したい場合、クライアントは、同じチャンキングアルゴリズムを使用して、その新しいファイルをチャンクに分割し、各チャンクのハッシュを作成し、ハッシュをサーバに送信する。サーバは、自身のテーブルでハッシュを調べて、ハッシュがテーブルで見つからないチャンクの要求をクライアントに送信する。クライアントは、次に、それら見つからないチャンクをサーバに送信する。チャンキングアルゴリズムの安定特性により、サーバは、クライアントのファイルに属するチャンキングのほとんどを有することがある。サーバは、チャンクを使用して、あいまいさもエラーもなくファイルを再構築する。類似の方法を使用して、サーバからクライアントにファイルを送信することもできる。
【００３９】
本明細書で説明した本発明の実施の形態は、複数の新規な特徴を備え、説明した各実施の形態は、単一のこのような特徴またはこのような特徴の組み合わせのいずれかを含む。他の検討した実施の形態は、１つまたは２つ以上のこのような新規な特徴のすべての組み合わせを含むが、このような組み合わせは、説明した実施の形態から容易に見分けることができるので、本明細書では明示的に説明していない。検討したさまざまな実施の形態に鑑み、本発明は、このようないくつかの特徴付けの例を提供する以下のパラグラフにより、多数の方法で特徴付けることができる。
【００４０】
本発明の１つの有用な実施の形態は、値シーケンスを、各チャンクがより小さな値シーケンスである、複数のチャンクに分割する方法としてのものである。この方法は、シーケンスにおける位置のフィンガープリント値を取得することと、そのフィンガープリント値がＤ１整合であるかどうかを判断し、少なくともＤ１整合でない場合には、そのフィンガープリント値がＤ２整合であるかどうかを判断することとを含む。ここで、値を第１の除数Ｄ１によって除算した結果、剰余が値Ｒ１を有する場合には、その値はＤ１整合であり、値を第２の除数Ｄ２によって除算した結果、剰余が値Ｒ２を有する場合には、その値はＤ２整合であり、Ｄ１はＤ２に等しくなく、Ｄ１、Ｄ２、Ｒ１、およびＲ２は所定の値を有する。
【００４１】
いくつかの場合において、有用な実施の形態は、フィンガープリント値を取得する位置を含んだウィンドウに含まれるデータ値シーケンスのハッシュ値を取得することによって、シーケンスにおける位置のフィンガープリント値を取得することを含むことができる。このようないくつかの場合において、実施の形態は、シーケンス内の位置をブレークポイントとして指定することによって、値シーケンスを分割することをさらに含むことができ、ここで、各ブレークポイントは、チャンクの始点または終点であり、位置は、以下のブレークポイント条件の少なくとも１つが真である場合にブレークポイントとして指定される。このブレークポイント条件とは、すなわち、その位置のフィンガープリント値がＤ１整合であることと、その位置のフィンガープリント値がＤ２整合であり、かつ、前のブレークポイントがもしあれば、当該前のブレークポイントと、あらゆる後続のＤ１整合のブレークポイントとの間の距離が所定の最大値Ｍ１よりも大きいことと、前のブレークポイントがもしあれば、当該前のブレークポイントと現在位置との間の距離が最大値Ｍ１に等しいこととである。このようないくつかの場合において、実施の形態は、ブレークポイント条件がたとえ真であっても、位置とあらゆる前のブレークポイントとの間の距離が所定の最小値Ｍ２よりも小さい場合には、その位置をブレークポイントとして指定しないことがある。いくつかの場合において、有用な実施の形態は、値シーケンスを複数のチャンクに分割することを含むことができ、ここで、各チャンクの最後の位置は、ブレークポイントおよび／または分割中のシーケンスの最後の位置である。いくつかの場合において、有用な実施の形態は、値シーケンスを複数のチャンクに分割することを含むことができ、ここで、各チャンクの最初の位置は、ブレークポイントおよび／または分割中のシーケンスの最初の位置である。
【００４２】
いくつかの場合において、有用な実施の形態は、値シーケンスの一方の端部またはその近傍から開始して、値シーケンスの他方の端部に向かって進みながらフィンガープリント値を決定することによってブレークポイントが生じるシーケンスにおいて、ブレークポイントを指定することを含むことができる。いくつかの場合において、値シーケンスは整数値シーケンスであり、Ｄ１、Ｄ２、Ｒ１、およびＲ２は整数であり、Ｄ１が偶数であり、かつ、Ｄ２がＤ１の２分の１であるか、または、Ｄ１が奇数であり、かつ、Ｄ２がＤ１を２で除算したものよりも次に大きいかもしくは次に小さい整数である。
【００４３】
いくつかの場合において、方法は、コンピュータによって実行することができ、および／または、少なくとも、フィンガープリント値がＤ１整合でもＤ２整合でもない場合に、フィンガープリント値を少なくとも１つの追加除数ＤＮによって除算した結果、剰余が値ＲＮを有するかどうかを判断することも含むことができる。ここで、ＤＮおよびＲＮは所定の値を有し、ＤＮはＤ１にもＤ２にも等しくなく、ＲＮはＤＮに対応する。
【００４４】
いくつかの場合において、有用な実施の形態は、値シーケンスを、各チャンクがより小さな値シーケンスとなる複数のチャンクに分割する複数の命令を備える装置を含むことができる。複数の命令は、シーケンスにおける位置のフィンガープリント値を取得することと、フィンガープリント値がＤ１整合であるかどうかを判断し、少なくとも、フィンガープリント値がＤ１整合でない場合に、フィンガープリント値がＤ２整合であるかどうかを判断することとを含む。ここで、値を第１の除数Ｄ１によって除算した結果、剰余が値Ｒ１を有する場合に、その値はＤ１整合であり、値を第２の除数Ｄ２によって除算した結果、剰余が値Ｒ２を有する場合に、その値はＤ２整合であり、Ｄ１はＤ２に等しくなく、Ｄ１、Ｄ２、Ｒ１、およびＲ２は所定の値を有する。このようないくつかの場合において、実施の形態は、シーケンスを、複数の隣接した重なり合わないチャンクに分割する命令も含むことができる。ここで、各チャンクは、以下のブレークポイント条件の少なくとも１つを満たす位置で開始または終了する。このブレークポイント条件とは、すなわち、その位置のフィンガープリント値がＤ１整合であることと、その位置のフィンガープリント値がＤ２整合であり、かつ、前のブレークポイントがもしあれば、当該前のブレークポイントと、あらゆる後続のＤ１整合のブレークポイントとの間の距離が所定の最大値Ｍ１よりも大きいことと、前のブレークポイントがもしあれば、当該前のブレークポイントと現在位置との間の距離が最大値Ｍ１に等しいこととである。いくつかの場合において、実施の形態は、この命令セットを別の装置に電子的に転送するように適合することができる。いくつかの場合において、実施の形態は、次のもの、すなわち、揮発性ソリッドステートメモリ、不揮発性ソリッドステートメモリ、光ディスク、磁気ディスク、光磁気ディスク、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、磁気テープ、電子回路の少なくとも１つを備えることができ、および／または、ＲＡＩＤ装置、ＤＡＳ装置、ＮＡＳ装置、もしくはＳＡＮ装置である。いくつかの場合において、この装置はコンピュータとすることができる。
【００４５】
いくつかの場合において、有用な実施の形態は、各チャンクが、以下のブレークポイント条件の少なくとも１つを満たす位置で開始または終了する複数のチャンクに分割された値シーケンスを備える装置を含むことができる。ブレークポイント条件とは、その位置のフィンガープリント値がＤ１整合であることと、その位置のフィンガープリント値がＤ２整合であり、かつ、前のブレークポイントがもしあれば、当該前のブレークポイントと、あらゆる後続のＤ１整合のブレークポイントとの間の距離が所定の最大値Ｍ１よりも大きいことと、前のブレークポイントがもしあれば、当該前のブレークポイントと現在位置との間の距離が最大値Ｍ１に等しいこととである。ここで、値を第１の除数Ｄ１によって除算した結果、剰余が値Ｒ１を有する場合に、その値はＤ１整合であり、値を第２の除数Ｄ２によって除算した結果、剰余が値Ｒ２を有する場合に、その値はＤ２整合であり、Ｄ１はＤ２に等しくなく、Ｄ１、Ｄ２、Ｒ１、およびＲ２は所定の値を有する。このようないくつかの場合において、実施の形態は、各チャンクのハッシュ値を取得しなければならないか、または、取得するように適合され、そのハッシュ値を、先に記憶されたチャンクのハッシュ値と比較して、記憶すべきチャンクがもしあれば、いずれのチャンクを記憶すべきかを判断するように適合される。いくつかの場合において、実施の形態は、チャンクのハッシュ値を受信装置に最初に送信し、受信装置にまだ記憶されていないチャンクのみを送信することによって、分割されたシーケンスを送信するように適合することができる。このようないくつかの場合またはそれ以外の場合において、実施の形態は、受信装置がハッシュ値を受信した後、受信装置が要求したチャンクのみを送信することができる。
【図面の簡単な説明】
【００４６】
【図１】本発明の実施の形態による方法を示すフローチャートである。
【図２】本発明の実施の形態による第２の方法を示すコードスニペットである。
【図３】本発明の実施の形態による第１の装置の概略図である。
【図４】本発明の実施の形態による第２の装置の概略図である。
【符号の説明】
【００４７】
３１  装置
３２  コンピュータ
３３  プロセッサ
３４  メモリ
３５  記憶デバイス
３７  値シーケンス
３９  命令セット
４１  装置
４５  マシン可読媒体
４７  命令セット
【図１】
2006031686.tif 000003
【図２】
2006031686.tif 000004
【図３】
2006031686.tif 000005
【図４】
2006031686.tif 000006