特許第6186433号(P6186433)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ヴイエムウェア インコーポレイテッドの特許一覧

<>
  • 特許6186433-ファイル間差分コンテンツ同期 図000002
  • 特許6186433-ファイル間差分コンテンツ同期 図000003
  • 特許6186433-ファイル間差分コンテンツ同期 図000004
  • 特許6186433-ファイル間差分コンテンツ同期 図000005
  • 特許6186433-ファイル間差分コンテンツ同期 図000006
  • 特許6186433-ファイル間差分コンテンツ同期 図000007
  • 特許6186433-ファイル間差分コンテンツ同期 図000008
  • 特許6186433-ファイル間差分コンテンツ同期 図000009
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6186433
(24)【登録日】2017年8月4日
(45)【発行日】2017年8月23日
(54)【発明の名称】ファイル間差分コンテンツ同期
(51)【国際特許分類】
   G06F 12/00 20060101AFI20170814BHJP
【FI】
   G06F12/00 533J
   G06F12/00 510B
【請求項の数】15
【全頁数】23
(21)【出願番号】特願2015-520728(P2015-520728)
(86)(22)【出願日】2014年3月3日
(65)【公表番号】特表2015-528165(P2015-528165A)
(43)【公表日】2015年9月24日
(86)【国際出願番号】US2014020023
(87)【国際公開番号】WO2014137938
(87)【国際公開日】20140912
【審査請求日】2014年12月25日
(31)【優先権主張番号】13/784,551
(32)【優先日】2013年3月4日
(33)【優先権主張国】US
(31)【優先権主張番号】13/784,557
(32)【優先日】2013年3月4日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】510149482
【氏名又は名称】ヴイエムウェア インコーポレイテッド
【氏名又は名称原語表記】VMware,Inc.
(74)【代理人】
【識別番号】100105957
【弁理士】
【氏名又は名称】恩田 誠
(74)【代理人】
【識別番号】100068755
【弁理士】
【氏名又は名称】恩田 博宣
(74)【代理人】
【識別番号】100142907
【弁理士】
【氏名又は名称】本田 淳
(72)【発明者】
【氏名】カルコウスキー、グジェゴシ
(72)【発明者】
【氏名】チュワン、ミンツェ
【審査官】 小林 哲雄
(56)【参考文献】
【文献】 米国特許出願公開第2010/0306283(US,A1)
【文献】 特表2006−516341(JP,A)
【文献】 米国特許出願公開第2004/0186861(US,A1)
【文献】 国際公開第2006/001137(WO,A1)
【文献】 特開2005−044360(JP,A)
【文献】 米国特許出願公開第2007/0094348(US,A1)
【文献】 Athicha Muthitacharoen, et. al.,"A Low-bandwidth Network File System",PROCEEDINGS OF THE EIGHTEENTH ACM SYMPOSIUM ON OPERATING SYSTEMS PRINCIPLES,米国,ACM,2001年10月21日,Volume 35, Issue 5,pp.174-187,ISBN 1-58113-389-8
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
(57)【特許請求の範囲】
【請求項1】
新しい又は修正されたファイルのコンテンツを、クライアント・コンピューティング・システムとは別個のかつ分離したサーバ・コンピューティング・システムと同期させるために、前記クライアント・コンピューティング・システムでコンピュータによって実行するための方法において、
前記クライアント・コンピューティング・システム上にあり、かつ前記クライアント・コンピューティング・システムの複数のファイルのデータ・コンテンツをインデックス付けするローカル・データ・コンテンツ・インデックスをクライアント・コンピューティング・システムにおいて保持するステップであって、前記ファイルの少なくとも一部は、前記クライアント・コンピューティング・システムから前記サーバ・コンピューティング・システムに以前に送信されており、又は、前記サーバ・コンピューティング・システムから前記クライアント・コンピューティング・システムにダウンロードされているものであって前記クライアント・コンピューティング・システムによって前記サーバ・コンピューティング・システムに存在するものと見なされるファイルである、ローカル・データ・コンテンツ・インデックスを保持するステップと、
前記クライアント・コンピューティング・システムにおいて、前記新しい又は修正されたファイルの1つ又は複数の部分を特定するステップと、
前記新しい又は修正されたファイルの前記特定された1つ又は複数の部分のうちのどれが、前記サーバ・コンピューティング・システム上で不変に記憶されたファイルにすでに存在すると見なされるデータ・コンテンツに対応するのかを前記ローカル・データ・コンテンツ・インデックスに従って判定するステップであって、前記判定するステップにおいて、前記クライアント・コンピューティング・システム上で、前記ローカル・データ・コンテンツ・インデックスへのインデックス・ルックアップを行い、どのようなデータ・コンテンツが前記サーバ・コンピューティング・システム上にすでに存在するかを見いだすために前記サーバ・コンピューティング・システムに問い合わせることなしに、判定するステップと、
前記新しい又は修正されたファイルの前記特定された1つ又は複数の部分に対応し、各セグメントが、データ・コンテンツ又はデータ・コンテンツへの参照のいずれかを含んでなり、前記新しい又は修正されたファイルの前記対応する部分が前記サーバ・コンピューティング・システム上にすでに存在すると見なされないデータ・コンテンツに対応すると
判断されるとき、データ・コンテンツを含んでなり、かつ、前記新しい又は修正されたファイルの前記対応する部分が前記サーバ・コンピューティング・システム上にすでに存在すると見なされるデータ・コンテンツに対応すると判断されるとき、前記サーバ・コンピューティング・システム上にすでにあるデータ・コンテンツへの参照を含んでなる、1つ又は複数のセグメントからなるパッチを生成するステップと、
前記生成されたパッチを転送し、前記サーバ・コンピューティング・システム上にすでに存在するデータ・コンテンツとともに、前記パッチから前記サーバ・コンピューティング・システム上で前記新しい又は修正されたファイルを生成させ、それによって、前記新しい又は修正されたファイルの前記データ・コンテンツ全体を転送することなしに、前記新しい又は修正されたファイルの前記コンテンツを同期させるステップと
を備える、方法。
【請求項2】
前記生成されたパッチが有するすべてのデータ・コンテンツが、前記新しい又は修正されたファイルの前記データ・コンテンツ全体よりも少ない、請求項1に記載の方法。
【請求項3】
前記新しい又は修正されたファイルの前記1つ又は複数の部分を前記特定するステップは、
チャンキング又はフィンガープリンティング・アルゴリズムを使用して、前記ファイルのデータ・コンテンツの1つ又は複数のチャンクを決定することからなる、請求項1又は2に記載の方法。
【請求項4】
前記ローカル・データ・コンテンツ・インデックスが、前記クライアント・コンピューティング・システムの前記複数のインデックス付けされたファイルのためのデータ・コンテンツのチャンクのハッシュ値をインデックス付けし、前記方法は、
前記新しい又は修正されたファイルのデータ・コンテンツの前記決定された1つ又は複数のチャンクの各々のためのハッシュ値を決定するステップと、
前記ファイルのデータ・コンテンツの前記決定された1つ又は複数のチャンクの各々のための前記決定されたハッシュ値をルック・アップすることによって、前記ローカル・データ・コンテンツ・インデックスへの前記インデックス・ルックアップを行い、前記新しい又は修正されたファイルのデータ・コンテンツの前記決定されたチャンクが、前記クライアント・コンピューティング・システム上の別のファイル中にすでに存在するデータを参照するかどうかを判断するステップとをさらに備える、請求項3に記載の方法。
【請求項5】
前記新しい又は修正されたファイルのデータ・コンテンツの前記チャンクが、前記クライアント・コンピューティング・システム上の前記別のファイル中にすでに存在するデータを参照すると判断することが、前記データを前記サーバ・コンピューティング・システム上にすでに存在すると見なすために使用される、請求項4に記載の方法。
【請求項6】
データ・コンテンツへの参照を含んでなる、前記生成されたパッチの各セグメントがまた、前記参照によって参照される前記データ・コンテンツのハッシュ値をも記憶し、前記パッチの受信者が、前記データ・コンテンツへの参照を評価した結果として検索されたデータ・コンテンツのハッシュ値を計算し、前記計算されたハッシュ値を、前記セグメントに記憶された前記ハッシュ値に対して比較して、前記検索されたデータ・コンテンツの正確性を検証し得る、請求項1乃至5のいずれか1項に記載の方法。
【請求項7】
前記パッチが、ヘッダと、その後に続く、データ・コンテンツ又はデータ・コンテンツへの参照のいずれかの1つ又は複数のセグメントとからなる、請求項1乃至6のいずれか1項に記載の方法。
【請求項8】
前記生成されたパッチの少なくとも1つのセグメントが、前記クライアント・コンピュー
ティング・システムから削除されたファイルのデータ・コンテンツへの参照、及び、第1のファイルからのデータ・コンテンツへの参照のうちの少なくとも一方を含んでなり、及び、少なくとも1つのセグメントが、前記第1のファイルとは別個でありかつ分離した第2のファイルからのデータ・コンテンツへの参照を含んでなる、請求項1乃至7のいずれか1項に記載の方法。
【請求項9】
前記生成されたパッチの前記転送を、前記パッチが生成されるときに行うこと、及び、前記生成されたパッチの各セグメントを、前記パッチが生成されるときに転送することのうちの少なくとも一方を行うことと、
前記生成されたパッチの前記1つ又は複数のセグメント中に含まれるデータ・コンテンツのための前記参照によって参照されるすべてのファイルの指示を含んでなる、マニフェストを転送することとのうちの少なくとも一方を行う、請求項1乃至8のいずれか1項に記載の方法。
【請求項10】
請求項1乃至9に記載の方法の少なくとも1つを行うことによって、ファイルを同期させるように、クライアント・コンピューティング・システム中のコンピュータ・プロセッサを制御するコンテンツを含んでなる、コンピュータ可読ストレージ媒体。
【請求項11】
ファイルのコンテンツを同期させるためのサーバ・コンピューティング・システム、あるいは、方法を行うことによって前記ファイルの前記コンテンツを同期させるようにサーバ中のコンピュータ・プロセッサを制御するコンテンツを備えるコンピュータ・ストレージ媒体のうちのいずれか一方において、コンピュータによって実行するための方法であって、
請求項1乃至10に記載の方法の少なくとも1つに従って生成されるパッチであって、同期されるべき前記ファイルの1つ又は複数の部分に対応し、かつ、各セグメントがデータ・コンテンツ又はデータ・コンテンツへの参照を含んでなる、1つ又は複数のセグメントからなるパッチを、前記サーバ・コンピューティング・システムとは分離しておりかつ別個であるクライアント・コンピューティング・システムから受信するステップと、
前記受信されたパッチの終わりが検出されるまで、前記受信されたパッチの各セグメントを処理して、新しいファイルを作成することからなり、前記処理するステップとを備え、
前記処理するステップは、
前記セグメントがデータ・コンテンツを含んでなるとき、前記データ・コンテンツを前記新しいファイルに追加すること、
前記セグメントがデータ・コンテンツへの参照を含んでなるとき、前記参照された被参照データ・コンテンツの位置を特定するように試みること、及び、前記被参照データ・コンテンツの位置が特定されるとき、前記位置が特定されたデータ・コンテンツを前記新しいファイルに追加すること、及び、
そうでない場合、前記被参照データ・コンテンツの位置が特定されないとき、前記被参照データ・コンテンツを含んでなる、前記クライアント・コンピューティング・システムからの参照ファイルのコピーを要求すること、及び、前記参照ファイルが受信されるとき、前記参照ファイル中で前記被参照データ・コンテンツの位置を特定し、前記参照ファイル中で位置が特定された前記データ・コンテンツを前記新しいファイルに追加すること、からなる、コンピュータによって実行するための方法。
【請求項12】
前記受信されたパッチを、前記サーバ・コンピューティング・システム上のローカル・キャッシュに記憶するステップと、
前記新しいファイルを求める要求を受信すると、前記記憶されたパッチを、別のクライアント・コンピューティング・システムに提供すること、及び
前記記憶されたパッチが前記ローカル・キャッシュから除去された後、前記新しいファ
イルを求める要求が受信されるとき、前記新しいファイルの前記データ・コンテンツ全体のコピーを提供することのうちの少なくとも一方からなるステップと、をさらに備える、請求項11に記載の方法。
【請求項13】
前記受信されたパッチが、ある期間の間に記憶され、前記期間が満了するとき、前記記憶されたパッチが前記ローカル・キャッシュから除去されることと、
前記受信されたパッチを記憶するための前記時間期間が構成可能であることと、
前記受信されたパッチが、アルゴリズムに従って前記ローカル・キャッシュから消去されることと、
前記受信されたパッチを消去するための前記アルゴリズムが、最低使用頻度、最長時間未使用、又は先入れ先出しのうちの少なくとも1つであることとのうちの少なくとも1つが行われる、請求項12に記載の方法。
【請求項14】
前記新しいファイルを求める要求を、別のクライアント・コンピューティング・システムから受信するステップと、
前記新しいファイルの前記データ・コンテンツ全体の代わりに、前記受信されたパッチを前記別のクライアント・コンピューティング・システムに提供するステップとをさらに備える、請求項11乃至13の少なくとも1項に記載の方法。
【請求項15】
前記受信されたパッチ中に含まれるデータ・コンテンツへの任意の参照によって参照されるすべてのロケーションへの指示を含んでなる、マニフェストを受信するステップと、
前記受信されたパッチの各セグメントを処理する前に、前記受信されたマニフェストを処理して、前記指示されたロケーションが実際に利用可能であるかどうかを判断するステップとのうちの少なくとも一方をさらに備える、請求項11乃至14のいずれか1項に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、ファイル同期のための方法、技法、及びシステムに関する。
【背景技術】
【0002】
典型的な企業環境では、ユーザは、様々なクライアント・デバイス及びクライアント・コンピューティング・システムを採用して、たとえば、パブリック又はプライベート・コンピューティング「クラウド」にリモートで記憶されているユーザのファイルを使用、共有、及び更新することができる。ここで、コンピューティング・クラウドとは、典型的にはインターネットなどのネットワーク上でサービスとして配信される、ソフトウェアを含むコンピューティング・リソースを指す。ファイルは、1つ又は複数のサーバ・コンピューティング・システム上で、たとえば、ネットワーク・ファイル・システム又は他のネットワーク・ストレージにリモートで記憶され、ネットワーク、たとえば、インターネットなどのワイド・エリア・ネットワーク(WAN)、プライベートWAN、又はローカル・エリア・ネットワーク(LAN)を介してアクセス可能である。クライアント・デバイスには、パーソナル・コンピュータ、タブレット、ラップトップ・コンピュータ、スマート・フォン、及び他のモバイル・デバイスなどのデバイスが含まれてもよく、それらのうちのいくつかは、リソース容量が限られている。
【0003】
ファイルへのリモート・アクセスは、特にWAN上では、待ち時間の問題、及び最終的に効果的でなく苛立たしいユーザ・エクスペリエンスにつながり得る、帯域幅の問題(低速接続を介して移送されるデータが多すぎるなど)を受けることがある。これらの問題は、なおファイル全体が1つ又は複数のクライアント・デバイスと1つ又は複数のサーバ・コンピューティング・システムとの間で往復して移送される結果となる、ファイルに対する小さい増分的変更があるとき、特に苛立たしいものとなり得る。たとえば、典型的な企業ユーザは、1日に多数の修正を同じ表計算ファイル、プレゼンテーション、又は文書に対して行うことがあり、ユーザは、協力の目的でそれらの修正を別のユーザと共有することを望む。修正されたファイルは、したがって、1日に数回往復して移送され得る。
【発明の概要】
【発明が解決しようとする課題】
【0004】
したがって、効率的なデータ移送を提供できることは、ユーザ・エクスペリエンスを左右することがあり、加えて、使用ベースのデータ・プランに加入する、モバイル・ユーザなどの限られたリソース・クライアント・プラットフォームのためのコスト節約につながり得る。
【課題を解決するための手段】
【0005】
本願明細書で説明する実施形態は、ファイルなどのコンテンツを、1つ又は複数のクライアント(たとえば、クライアント・コンピューティング・システム)と、1つ又は複数のサーバ(たとえば、サーバ・コンピューティング・システム)との間で同期させるための、向上したコンピュータ・ベース及びネットワーク・ベースの方法、システム、及び技法を提供する。例示的な実施形態は、ファイルのコンテンツ全体の移送を必要とすることなしに、ほぼ即時の方法で、リモート・システム間でファイルを同期させるために、ファイル間差分コンテンツ同期システム(CDCSS)を提供する。具体的には、CDCSSは、受信者がすでにアクセスを有するコンテンツに基づいて、修正された、又は新しいデータ・コンテンツを構築するように、受信者に命令するパッチ機構を提供することによって、可能な限り、データ・コンテンツ中の差分のみを受信者システムへ移送する。加えて、一実施形態では、CDCSS同期ソリューションは、パッチ及びファイルを追跡するた
めに(他の実施形態において提供され得る、サーバ・ベースのインデックス、又は共有のクライアント及びサーバ・インデックスではなく)クライアント・ベースのインデックスを提供し、それによって、サーバ上の計算及びI/O(入出力)オーバーヘッドの量を低減し、更新を提供するためにクライアントとサーバとの間のネゴシエーションを必要としない。これは、サーバから作業をオフロードするために十分なコンピューティング能力を有する、デスクトップ・コンピュータ及びラップトップ・コンピュータなどの「シック」クライアントでは、特に効果がある。加えて、サーバによって移送され、リモート・クライアントにおいて最終的に記憶される、重複データの量を制限することによって、更新を携帯電話にダウンロードするときなど、更新がサーバからリモート・クライアントへ効率的に提供され得る。
【図面の簡単な説明】
【0006】
図1】ファイル間差分コンテンツ同期システムを展開するための例示的な環境のブロック図。
図2】ファイル間差分コンテンツ同期システムを使用して、例示的なサーバと、及び互いに、ファイルを同期させる例示的なクライアントのブロック図。
図3】クライアント上で修正されたファイルへの更新を同期させるために、ファイル間差分コンテンツ同期システムによって製作された、例示的な単一ファイル・パッチを示すブロック図。
図4】別のクライアントによって生成されたファイルへの更新を同期させるために、ファイル間差分コンテンツ同期システムによって製作された、例示的なファイル間パッチを示すブロック図。
図5】例示的なファイル間差分コンテンツ同期クライアント処理、及び例示的なファイル間差分コンテンツ同期サーバ処理の、構成要素を示すブロック図。
図6】ファイル間差分コンテンツ同期システムにおいて使用するためのパッチを生成するための論理の例示的なフローチャート。
図7】ファイル間差分コンテンツ同期システムにおいて使用するためのパッチを処理するための論理の例示的なフローチャート。
図8】本願明細書で説明するファイル間差分コンテンツ同期システムの実施形態を実施するために使用され得る、例示的なコンピューティング・システムの例示的なブロック図。
【発明を実施するための形態】
【0007】
例示的な実施形態では、CDCSSは、ファイル間差分コンテンツ同期(CDCS)クライアントと呼ばれるクライアント部分、及び、ファイル間差分コンテンツ同期(CDCS)サーバと呼ばれるサーバ部分からなり、それらの部分は、同期が望まれるとき、協働して、2つのコンピューティング・システム間で「パッチ」を移送する。パッチは、変更になった(又は、さもなければ、別のファイル中で位置を特定することができない)ファイル・コンテンツの部分のための新しいデータと、変更になっておらず、他の場所で位置が特定可能であるデータのロケーションへの参照とを含む、ファイル・コンテンツの表現である。パッチは、したがって、「差分同期」又は「差分sync」−すなわち、コンテンツが更新又は作成された前及び後の、コンテンツ中の差分のみの同期(又は「sync」)を提供する。本願明細書で使用されるとき、「ファイル」は、どのように記憶されるか(たとえば、ファイルの1部分、オブジェクト、記憶されたデータなど)にかかわらず、任意のタイプのファイル・コンテンツを指し、テキスト、ビデオ、画像、バイナリ、又は他のデータなどのコンテンツを含み得る。各パッチは、複数のセグメント(たとえば、レコード、部分など)を含み、各セグメントは、データ・コンテンツ(直接)、又は、データ・コンテンツの位置が特定され得る別のファイル・ロケーションへの参照(たとえば、インジケータ、ポインタ、記述など)を含む。
【0008】
パッチは、1つ又は複数の他のファイルに記憶されるデータを参照することができるので、「ファイル間」パッチと見なされ得る。たとえば、ある会社のレターヘッド・テンプレートを使用して製作されるレターを考えられたい。会社のロゴは、あるファイルにおいて記憶され、位置が特定可能であり得るものであり、レターの受取人の住所は、連絡先ディレクトリにおいて記憶され、位置が特定可能であり得るものであり、レターのコンテンツはさらに、第3のファイルにおいて記憶され、位置が特定可能であり得る。CDCSSによって製作される例示的なパッチは、レターの実際のコンテンツと、(具体的なロケーション情報を含む)会社のロゴを含む第2のファイル中のエリアへの参照と、受取人情報を含む第3のファイルへの参照とを含み得る。第2のファイル及び第3のファイルが受信者コンピューティング・システム上にすでに存在するとき、第2のファイル及び第3のファイル内のロケーションへの参照を使用することによって、パッチ機構は、受信者コンピューティング・システム上にすでに存在する重複データを送信することを回避する。
【0009】
ファイルが、たとえば、情報の「製作者」として働くクライアント・デバイス(たとえば、製作者クライアント・デバイス)によって、新たに作成又は修正されるとき、クライアント・デバイスは、パッチを計算し、パッチを宛先又は受信者サーバへ送信する。サーバは、すでに記憶されたデータとともにパッチを処理して、新しい又は修正されたファイルを作成する。後に、別のクライアント・デバイス(たとえば、データの「消費者」)が、新しい又は修正されたファイルで更新されるとき(たとえば、ファイルの同期、要求などが行われるとき)、ファイル全体を送信する代わりに、サーバは、製作者クライアント・デバイスによってすでに計算されたパッチのみを、消費者として働くクライアント・デバイス(たとえば、消費者クライアント・デバイス)へ送信することができる。消費者クライアント・デバイスは、すでに有するファイルを使用してパッチを処理することによって、かつ/又は、任意の欠落した情報をダウンロードすることによって、それ自体の新しい又は修正されたファイルを作成することを担う。したがって、新しい又は修正されたファイルは、(差分sync機構を使用して)パッチを計算すること、及び、パッチを(たとえば、クラウド中の)サーバにアップロードすることによって、他者と共有することができ、サーバは、ファイルを構成/再構成し、パッチをキャッシュし、(たとえば、ダウンロードすることによって)他のコンピューティング・システムへ伝搬され得るようにする。
【0010】
いくつかの実施形態では、パッチは、(たとえば、設定された、プリセットされた、構成されたなどの)ある時間期間の間に、又は、あるアルゴリズム(たとえば、最長時間未使用、最低使用頻度、FIFOなど)に従ってキャッシュされ、次いで、時間期間が満了するか、又はアルゴリズムがそのように指図するとき、キャッシュからフラッシュされる。パッチをキャッシュから削除すると、更新を受信する消費者クライアントは、パッチの代わりにファイル・コンテンツ全体を受信し得る。加えて、いくつかの実施形態では、たとえば、パッチがもはやキャッシュされていないか、又は利用可能でないとき、サーバは、必要に応じてパッチを再計算し得る。いずれの場合も、消費者クライアントが処理するためにパッチを受信するとき、消費者クライアントは、それが製作者クライアント・デバイスによって作成された元のパッチであったか、サーバによって作成された新しいパッチであったかを知る必要はない。いくつかの実施形態では、ストレージが、事実上、無制限である場合、パッチは、削除又は満了なしにキャッシュされ得る。
【0011】
場合によっては、クライアント・デバイスは、他者(たとえば、発行者の立場で働くクライアント・デバイス)によって作成された情報を、この情報をサーバに効率的にアップロードし、パッチを通して広めることによって、さらに発行することができる。発行されるべき情報が、発行者クライアント・デバイス上にすでに存在する他の情報に依存する範囲で、パッチは計算可能であり、広められ得る。発行されるべき情報がそのように依存しない範囲では、発行されるべき情報全体がサーバへ送信される必要があり得る。
【0012】
説明するように展開されるとき、CDCSSは、システム間で移送される重複データの量を低減することによって、移送される情報を最適化する。これは、データ移送が低速であるか、又はコストがかかり得る環境において特に有用であり、増分的に修正されたコンテンツの即時に近い(たとえば、リアルタイムに近い)同期を提供する。CDCSS技法は、類似データが特定のコンピューティング・システム上に存在する高い確率を活用し、それに応じて、大規模なグローバル重複排除方式を管理するのではなく、分散ベース(各クライアント)のより小さいインデックスを管理する。加えて、CDCSSは、構成要素がファイル・システム及び他のシステム態様から分離しているので、重複排除を念頭に置くことなしに設計されたアーキテクチャに組み込むことができる。
【0013】
図1は、ファイル間差分コンテンツ同期システムを展開するための例示的な環境のブロック図である。環境100は、少なくとも1つのクライアント・コンピューティング・システム(クライアント)101と、少なくとも1つのサーバ・コンピューティング・システム(サーバ)120とを含む。クライアント101は、サーバ120と通信して、ファイルを同期させる。上述のように、そのような通信及び同期は、LAN、WANなどのネットワークであり得る通信機構130を介して、又は、ある通信ゲートウェイを介して行われ得る。サーバ120は、「クラウド」中のサーバであってもよく、クライアント101に知られていないあるホスト・コンピューティング・システム上のサービス型ソフトウェア(SAAS:software as a service)アプリケーションとして展開され得る。
【0014】
クライアント101は、CDCSクライアント102の使用を通して、パッチ110などの1つ又は複数のパッチを、通信機構130を介してサーバ120へ送信する。クライアント101が生成した(又は、ファイル・ストレージ103にファイルとして記憶した)、新しい又は修正されたファイルを同期させるために、クライアント101は、図3図4、及び図6を参照して以下でさらに詳細に説明するように、修正の前及び後の、ファイル・コンテンツ中の差分を記述するパッチ110を計算する。サーバ120は、CDCSサーバ121の使用を通して、パッチ110などの1つ又は複数のパッチを、通信機構130を介してクライアント101から受信する。図7に関してさらに説明するように、パッチ110は、セグメント(たとえば、レコード、部分など)において受信され、パイプラインで(たとえば、逐次的に、又は流れ処理を介して)処理され得る。各パッチが処理されて、ファイル・システム122に記憶されるファイル(又は、ファイル・バージョン)が生成される。加えて、パッチ110のコピーが、他のクライアント(図示せず)を同期させる/更新するためのさらなる配信のために、パッチ・キャッシュ123にキャッシュされる。加えて、サーバ120が(たとえば、別のパッチ110を送信して、クライアント101を更新するために)さらにパッチを配信して、クライアント同期させる/更新するとき、サーバ120は、パッチ110中で参照されるすべてのファイルのリスティングを含む、パッチ・マニフェスト115を計算及び送信する。このようにして、受信者コンピューティング・システムは、被参照ファイルが実際に存在することを最初に検証し、被参照ファイルが存在しない場合、ファイル全体を全部要求するか、又は、ただ参照を処理するのではなく、被参照ファイルからのデータ・コンテンツを要求するかのいずれかを選ぶことができる。
【0015】
クライアント101は、クライアント101がそれについて知っており、サーバ120上に存在すると考える、ファイルの部分へのインデックスを含む、ローカル・チャンク・インデックス104に基づいて、パッチ110を計算する。一実施形態では、CDCSSの各ファイルが、線形にバイト1〜Nまでのデータ(データ・コンテンツ)の1つ又は複数のチャンクに分割される。可変サイズのデータの重複しないチャンクが、「コンテンツ定義チャンキング」(CDC:content−defined chunking)と
呼ばれる技法を使用して、それらのコンテンツに基づいて決定される。「ラビン・フィンガープリンティング」などの異なるアルゴリズムが、ファイルをチャンクに分割するため、及び、ファイル・コンテンツを表現するために、CDCSSに組み込まれ得る。ファイルがチャンクに分割されると、チャンクごとに、ハッシュが計算され、ローカル・チャンク・インデックス104中でインデックス付けされる。各チャンクのためのハッシュは、そのチャンクについてのロケーション情報、たとえば、ファイル識別子及びオフセットに関連付けられるので、インデックス付けされたハッシュに基づいて、チャンクについてのロケーション情報が識別され得る。いくつかの実施形態では、ハッシュは、チャンクのコンテンツの強力暗号学的ハッシュ(たとえば、SHA−256)であるが、他の実施形態では、他のハッシュ及び/又は他の識別子が組み込まれてもよい。
【0016】
ファイル・コンテンツが修正又は作成されるとき、CDCSSは、(たとえば、ラビン・フィンガープリンティング・アルゴリズムを使用して)ファイルをチャンクに分割し、チャンク・インデックス104中のチャンクのハッシュをルック・アップすることによって、各チャンクがローカル・チャンク・インデックス104中にすでに存在するかどうかを判断する。ローカル・チャンク・インデックス104を表現するための任意のデータ構造が使用されてもよく、たとえば、リスト、ファイル、データベース、アレイ、テーブルなどが含まれる。チャンクがローカル・チャンク・インデックス104中にすでに存在する場合では、CDCSSは、ファイルのそのチャンクを表現する参照情報をパッチ110中に生成する。チャンクがすでに存在するのではない場合では、CDCSSは、そのチャンクについてのデータ・コンテンツ情報をパッチ110に記憶する。このようにして、CDCSSは、ファイルをチャンクごとに検査することによって、パッチ110を逐次的に構築する。結果として、パッチ110は、作成されるときに(又は、いくつかの実施形態では、パッチ全体が計算された後に)、分けて受信者へ転送(たとえば、送信、移送、通信など)されて、受信されるときに、逐次的に、たとえば、パイプラインにおいて処理され得る。注目すべきことに、パッチのフォーマットは、使用されるチャンキング・アルゴリズム、及び、パッチがどのように作成されるかとは無関係である。したがって、パッチは、どのようにパッチが作成されたかの詳細の知識なしに、受信されるときに処理され得るものであり−単に、パッチがコンテンツ及びコンテンツへの参照を含むこと、ならびに、パッチ自体をどのように処理するかである。
【0017】
一実施形態では、「ラビン・フィンガープリンティング」アルゴリズムは、ファイルのチャンク境界を決定するために、及び、したがって、ファイルのためのチャンクを選択するために採用される。コンテンツをフィンガープリンティングする処理はまた、「チャンキング」とも呼ばれる。ラビン・フィンガープリンティングは、ラビン,マイケル オー(Rabin,Michael O.),Fingerprinting by Random Polynomials,Technical Report TR−15−81,コンピューティング技術研究センター(Center for Research in Computing Technology),ハーバード大学(Harvard
Univ.),1981に詳述されており、その全体を本願明細書に援用する。コンテンツ定義チャンキング(CDC)のためのラビン・フィンガープリンティングの使用は、Muthitacharoenら(Muthitacharoen et al.),A
Low−Bandwidth Network File System,Proc.18th Symp.Operating System Principles,Banff,CA,October,2001に記載されており、その全体を本願明細書に援用する。要約すれば、ラビン・フィンガープリントは、あらかじめ選択された既約多項式によって除算されたバイト列の多項式表現の除算からのリマインダとして定義される。フィンガープリントは、2つの異なるバイト列が異なるフィンガープリントを有することになる強い確率を提供する。ファイルのバイト(40バイトと64バイトとの間)のスライディング・ウィンドウのフィンガープリントは、ローリング・チェックサムとほぼ同様に
計算される。ウィンドウのフィンガープリントの最下位13ビットが、あらかじめ選択された「マジック」値に等しいとき、ウィンドウの終了オフセットがチャンク境界であると見なされる。チャンクの最小サイズ及び最大サイズは、必要に応じて構成及び調整され得る。一実施形態では、それらは、それぞれ4KB及び16KBに設定される。ロビン・フィンガープリント・アルゴリズム及び同様のアルゴリズムに存在する計算のようなローリング・チェックサムは、信頼性と速度とのバランスを提供する。
【0018】
注目すべきことに、他のアルゴリズムが例示的なCDCSSに組み込まれてもよい。たとえば、適度な一様分布による任意のハッシング・アルゴリズムが、ファイル・データのフィンガープリンティング/チャンキングを行うために使用され得る。たとえば、SHA−1又はMD5などのセキュアなハッシュ・アルゴリズム・ファミリーからのハッシュが使用され得るが、それらは一般に、計算のためにより費用がかかる。
【0019】
パッチが送信されると、パッチは、たとえば、受信者(サーバ又は消費者クライアント)によって、受信されるときに「オン・ザ・フライ」で処理され得る。図7に関してさらに説明するように、サーバ又は他の受信者は、パッチを線形に処理して、それ自体のチャンク・インデックスを必要としないことを含めて、いかなるチャンク・インデックスも必要とすることなしに、そのコンテンツからファイルを生成することができる。パッチ・フォーマットは、単体で、そのコンテンツからファイルを生成するためのレシピを記述する。新しい又は修正されたファイルは、パッチに埋め込まれるデータ・コンテンツを追加することによって、及び、パッチ中で参照される他のファイルからのデータ・コンテンツのチャンクをコピーすることによって、構築される。結果として、CDCS技法は、差分syncのために、又は重複排除処理を使用するためにセット・アップされなかったコンピューティング・システムとともに使用され、又はそれに組み込まれ得る。具体的には、クライアントがCDCSクライアント(たとえば、syncデーモン処理)を実行し、サーバがCDCSサーバ(たとえば、syncプロセッサ)を実行する限り、クライアント及びサーバが通信して、さらなる修正なしに差分syncを提供することができる。
【0020】
パッチ・フォーマット、ならびに、チャンク・インデックスを生成及び転送するための技法のために、CDCSSは、コンテンツがサーバ上で利用可能であるかどうかを確かめるための、受信者サーバとのいかなるネゴシエーションもなしに、何がインデックス中に含まれているかについてのクライアント側の知識のみに基づいて、ファイル・コンテンツの差分syncを行うことができる。具体的には、サーバがあらゆるファイルを不変に記憶する(たとえば、すべてのファイル、バージョンなどが、永久に記憶され、又はアクセス可能である)環境では、製作者クライアントは、(クライアントの通知によって確定され得る、チャンク・インデックス中のエラーがない限り)ファイルがそのチャンク・インデックスによって参照される場合、ファイルがサーバ上に存在すると仮定し得る。さらに、チャンク・インデックスの設計及び実装形態に応じて、クライアント上で削除された可能性のあるファイルが、依然として、ある時間期間の間に、又は無期限に、クライアントのチャンク・インデックスによって参照されることがある。これらのファイルは、サーバ上で不変である(たとえば、アーカイブされ得るが、実質的な意味においては決して削除されない)ので、ファイルがクライアント上にもはや存在しないとしても、依然としてサーバ上にあるファイルの存在を活用するパッチを作成して、sync動作においてクライアントによって転送されるデータの量を低減することができる。この態様は、「新しいファイルとして保存する&元のファイルを削除する」シナリオにおいて、特に有用であり得る。
【0021】
図2は、ファイル間差分コンテンツ同期システムを使用して、例示的なサーバと、及び互いに、ファイルを同期させる例示的なクライアントのブロック図である。例200によれば、複数のクライアント・コンピューティング・システム201a、201b、及び2
01cが、サーバ・コンピューティング・システム220に通信可能に接続される。図示しないが、クライアント201a〜201cはまた、様々な他のサーバに接続されてもよく、様々な他のサーバのうちの複数にファイルを同期させてもよい。各クライアント201a〜201cは、それぞれ、それ自体のチャンク・インデックス202a、202b、及び202cと、それぞれ、それ自体のsyncデーモン(CDCSクライアント)203a、203b、及び203cとを有する。チャンク・インデックス202a〜202c及びsyncデーモン203a〜203cは、図1に関して説明したように動作する。syncデーモン203a〜203cは、クライアントがその製作者の役割で働いている(ファイルを修正中又は作成中である)とき、パッチを生成し、サーバ220へ転送することを担い、クライアントがその消費者の役割で働いている(ファイルに対する更新又は新しいファイルを受信中である)とき、パッチを受信及び処理することを担う。
【0022】
ファイルを記憶するためのサーバ・ファイル・システム223は、サーバ220に関連付けられ、各クライアント201a〜201cは、そのファイルが最新に保たれ、他のクライアントと共有され得るように、そのファイルをサーバ220と同期させることを担う。いくつかの実施形態では、ファイル・システム223が分散されるが、同期方法はなお、すべてのシステム上のファイルを最新に保つために採用され得る。サーバ220はまた、受信されたパッチを処理して、サーバに関連付けられたファイル・システム223に記憶される、ファイル224a〜224dなどのファイルを作成することを担う、syncプロセッサ(CDCSサーバ)221を実行する。
【0023】
図示の例では、クライアント201aは、ファイル「A」204を含み、それを修正しており−ファイル「A’」205として示す。図3において説明するように、ファイルA’205は、いくつかの修正とともにファイルA204に基づくコンテンツを有する。クライアント201Aは、syncデーモン203aの使用を通して、サーバ220へアップロードするパッチ215を生成する。サーバ220は、そのsyncプロセッサ221を通して、パッチ215を処理して、新しいファイル(又はバージョン)である、ファイルA’224bを生成し、それをファイル・システム223に記憶する。syncプロセッサ221はまた、パッチ214のコピーを構築し、かつ/又はパッチ・キャッシュ222に記憶する。
【0024】
例200では、クライアント201bは、そのsyncデーモン203bを使用して、ファイルA’を生成するために使用されるパッチのコピー(ここでは、パッチ・インスタンス216)をダウンロードする。パッチ216がsyncデーモン203bによって処理されて、ファイルA’のそれ自体のコピー207が、ファイルAのそれ自体のコピーへの参照(図示せず)に基づいて生成される。ここで、クライアント201bは、消費者クライアントとして働いている。別の例では、クライアント201bは、パッチ(図示せず)を送信して、同じく共有及び同期のために、サーバ220上でファイルB206を生成又は更新する。この場合は、クライアント201bは、製作者クライアントとして働いている。
【0025】
また、例200では、クライアント201cは、サーバ・ファイルB224cストレージからファイルBのコピー209を、及び、サーバ・ファイルB224bストレージからファイルA’210を(全ファイル・コンテンツ・ダウンロードを通して、又は、1つもしくは複数のパッチを以前に受信及び処理することによって)以前にダウンロード/更新しており、パッチ217を受信して、新しいファイルであるファイルC208を生成する。ファイルC208のためのパッチは、図4を参照して説明するように、ファイルB209中で発見され得るあるコンテンツと、ファイルA’210中で発見され得るあるコンテンツとを含む。
【0026】
図3は、クライアント上で修正されたファイルへの更新を同期させるために、ファイル間差分コンテンツ同期システムによって製作された、例示的な単一ファイル・パッチを示すブロック図である。例300は、ファイルA204に対して行われた変更をアップロードして、たとえば、新しいバージョンであるファイルA’224bとしてサーバ220上に記憶されるようにするために、図2におけるクライアント201aにおいてパッチがどのように生成されるかを示す。この例では、ファイルA’は、ファイルAの修正されたバージョンを示す。チャンク301は、ファイルをデータ・コンテンツのセグメントに分割するチャンキング・アルゴリズムを適用した結果として生じる、ファイルAのチャンクを表現する。ファイルAは、5つの別々のチャンク、すなわち、AからAに分割されるように示される。チャンク302によって表現されたファイルA’は、7つの異なるチャンクを含むように示され、そのうちの4つは、ファイルA中に含まれるものと同一であり、すなわち、チャンクA、A、A、及びAである。チャンク302のうちの3つは、新しいか又は修正されており、その理由は、それらがチャンクA’などのまったく新しいデータ(グレーの点描によって図示)を含むから、又は、それらが、ファイルAからのチャンクAに対するいくつかの修正を含むチャンクA’など、修正されたファイルAのチャンクからのデータを含むからである。具体的には、チャンクAは、ファイルA’において2つの新しいチャンク、すなわち、修正を含むチャンクA’と、ファイルAからのデータを含むチャンクA’とに分離されている。
【0027】
パッチ305は、クライアント201aによって、差分syncを行い、ここではファイルA’と命名される、ファイルAに対する修正を作成するために生成される、例示的なパッチである。(実装形態に応じて、修正は、新しいファイル、新しいファイル・バージョン、又はファイルAに対する修正であると考えられ得ることに留意されたい。)図3の目的では、ファイルA’は、ファイルAのより最近のバージョンとして扱われる。CDCSS技法による例示的なパッチ・フォーマットでは、パッチ305は、ヘッダと、その後に続くファイルA中のチャンクAへの参照と、その後に続くチャンクA’のためのデータ・コンテンツと、その後に続くファイルA中のチャンクAへの参照と、その後に続くチャンクA’のためのデータ・コンテンツと、その後に続くチャンクA’のためのデータ・コンテンツと、その後に続くファイルA中のチャンクAへの参照と、その後に続くファイルA中のチャンクAへの参照とからなる。
【0028】
一般に、一実施形態によれば、パッチは、ヘッダの後に続く1つ又は複数のセグメント(たとえば、レコード、アイテムなど)からなり、ヘッダは、パッチ識別子、フォーマット・インジケータ、パッチを適用した結果として生じるべきであるファイルの長さのインジケータ、及び、結果として生じるファイルのメディア・タイプのインジケータなど、パッチについてのある情報を与える。パッチの各セグメントは、その中に含まれているデータ・コンテンツのそのサイズ及びタイプを識別するデータ・レコード、又は、データを含むファイルの一意のファイル識別子(たとえば、ファイルID又はUUID)と、バージョン識別子と、オフセット(たとえば、被参照ファイル中のデータのチャンクへのバイト・オフセット)と、チャンクのハッシュ(たとえば、SHA−256ハッシュ)とを示す、タプルを含む、参照レコードのいずれかである。受信者は、ファイルID及びオフセットに基づいて、検索されたデータのハッシュを計算すること、ならびに、そのハッシュを記憶されたハッシュ値と比較することによって、ハッシュを使用して、検索されたデータを検証することができる。それらが同じではない場合、受信者は、パッチ中、又は記憶されたファイル中でエラーを検出することができる。この場合、受信者(たとえば、サーバ)は、パッチをアップロードしたクライアントに、そのパッチが不正確であると通知することができる。いくつかの実施形態では、参照レコードを含むパッチ・セグメントは、(ファイルID/UUID及びバージョンを使用して)参照を定義する別のレコード、及び、参照内のチャンクのロケーション(オフセット、長さ、ハッシュ)を示す別のレコードを実際に記憶し得る。これにより、パッチ内に含まれた参照のリストを提供するマニフェ
ストの容易な作成が可能になる。
【0029】
図3から顕著であるように、ファイルA’は、「単一ファイル」パッチ305の生成を引き起こす。すなわち、このパッチは、パッチ・フォーマットが複数のファイルをハンドリング可能であり−よって「ファイル間」パッチという用語であるにもかかわらず、2以上のファイルを参照する参照を有していない。1つのファイルのみが参照されるそのような場合、必ずではないが、パッチの表現に対する単純化が採用されてもよい。加えて、他のクライアントへパッチを送信することを伴うか、又はそれに先行するように後に作成されるマニフェストは、1つのファイルのみを参照するので、単純化されてもよい。
【0030】
他のシナリオでは、ある他の最適化又は向上が、パッチ及び/又はパッチ・マニフェストに組み込まれてもよい。たとえば、パッチは、自己参照的であってもよく、すなわち、パッチの部分がパッチの他の部分を参照することができる、パッチが圧縮され得るか、もしくは圧縮されるデータ・コンテンツを含み得る、又は、パッチが、上記で識別されたフォーマット(データ・レコード及び参照レコード)に加えて、もしくはその代わりに、挿入/削除命令もしくは他のタイプの演算子を含み得る。他の最適化が組み込まれてもよい。たとえば、ファイルが、それらの特定のフォーマット(たとえば、フォーマット・アウェアなチャンキング)に基づいて、チャンクにセグメント化されてもよい。1例として、zipファイルは、当然、サブ・ファイル境界に分割されてもよく、サブ・ファイル境界はさらに分割され得る。同様に、特定のフォーマットのチャンキングが、MP3などのフォーマットのために、オーディオ・データからメタデータを分離するために開発されてもよい。また、いくつかの実施形態では、増分/差分syncの目的のためのパッチが、潜在的に構成可能な、あるサイズを上回るファイルのためにのみ生成されてもよい。
【0031】
図4は、別のクライアントによって生成されたファイルへの更新を同期させるために、ファイル間差分コンテンツ同期システムによって製作された、例示的なファイル間パッチを示すブロック図である。例400は、ファイルB及びファイルA’からファイルCを生成するために使用され得るパッチをダウンロードするために、図2におけるクライアント201cにおいてパッチがどのように処理されるかを示す。この例では、ファイルA’は、ファイルAの直近のバージョンを示す。チャンク401は、図3を参照して説明したファイルA’のチャンクを表現する。ファイルA’は、7つの別々のチャンクに分割されるように示される。チャンク402は、以前にクライアント201cにダウンロードされたファイルB(図2のファイルB209)のチャンクを表現する。チャンク405は、新しいデータ・コンテンツ・チャンクC,Cから、ならびに、ファイルA’及びファイルB内のデータ(それぞれ、チャンクA,A、ならびに、チャンクB,B)から形成された、ファイルC(図2のファイルC208)のデータ・チャンクを表現する。
【0032】
CDCSS技法による例示的なパッチ・フォーマットでは、パッチ406は、ヘッダと、その後に続くチャンクCのためのデータ・コンテンツと、その後に続くファイルB中のチャンクBへの参照と、その後に続くファイルA’中のチャンクAへの参照と、その後に続くファイルA’中のチャンクAへの参照と、その後に続くチャンクCのためのデータ・コンテンツと、その後に続くファイルB中のチャンクBへの参照とからなる。
【0033】
図5は、例示的なファイル間差分コンテンツ同期クライアント処理、及び例示的なファイル間差分コンテンツ同期サーバ処理の、構成要素を示すブロック図である。一実施形態では、ファイル間差分コンテンツ同期システムは、最適化された方法でコンテンツ差分を同期させるためにともに働く、1つ又は複数の機能的な構成要素/モジュールからなる。これらの構成要素は、ソフトウェアもしくはハードウェア、又は両方の組合せで実装され得る。例示500によれば、ファイル間差分コンテンツ同期システムは、CDCSクライ
アント501及びCDCSサーバ510からなる。CDCSクライアント501は、コンテンツ同期デーモン処理502、パッチ・インデックス506、チャンク・ロケーション情報507、及びパッチ生成作業空間からなる。CDCSサーバ510は、コンテンツ同期プロセッサ511、パッチ・キャッシュ515、及びファイル生成作業空間516からなる。
【0034】
図1を参照して説明したように、コンテンツ同期デーモン(処理)502は、クライアント上で実行し、新しいファイル及び修正されたファイルをサーバにアップロードするためにパッチを生成すること、ならびに、新しいファイル及び修正されたファイルをダウンロードするためにパッチを処理することを担う。一実施形態では、処理502は、クライアント・システム上の既知のフォルダを監視して、いつファイルが変更されたかを判断する。監視はまた、あるオペレーティング・システム・イベント・ハンドリングをサブスクライブすることによっても達成され得る。(サブスクライブされたシステム・イベントに従って)変更がファイルに対して行われるとき、ファイルが読み出され、インデックス付けされ、処理502は、変更を同期させるかどうか、及び、いつ同期させるかを判断する。代替実施形態では、処理502は、I/Oドライバ又は階層の一部として実行し得る。加えて、処理502は、フォルダ階層を走査して、いつファイルが変更されたかを判断し得る。これは、イベントをサブスクライブすること、もしくはドライバ階層の一部として実行することに関連して起こり得るものであり、又は、他の実施形態では、監視のための単独の機構を提供し得る。他の機構が、デーモン502がいつパッチを生成又は処理するかを判断するために、同様に組み込まれてもよい。
【0035】
処理502は、さらに、マニフェスト・ハンドラ503、パッチ・ハンドラ504、及びファイル・アセンブラ505を備え、又はそれらに関連付けられる。マニフェスト・ハンドラは、たとえば、マニフェストがサーバから受信されるとき、マニフェストを処理して、今度の又は付随するパッチによって参照される、参照される(被参照)ファイルが、真に利用可能であることを確認する。それらが利用可能でないか、又はさもなければエラーである場合、クライアント501は、ファイルのための完全ファイル・コンテンツがダウンロードされることを要求するオプション、又は、いずれにせよパッチを受け入れ、欠落したパートを充填することによって破損している参照を「修復」するために(ロケーション及びバイト数によって指定もされる)特定のコンテンツを、たとえばサーバから要求するオプションを有する。そのような場合、サーバは、エラーをハンドリングし、記憶されたパッチ(たとえば、パッチ・キャッシュ515にキャッシュされたパッチ)を修復するように、プログラムされ得る。一実施形態では、受信者クライアントが、マニフェストを処理することによってパッチが適用され得ることを検証するまで、及びそうでない限り、パッチはダウンロードされない。
【0036】
パッチ・ハンドラ504は、受信されたパッチを処理することを担う。(受信者サーバによるか、受信者クライアントによるかにかかわらず)パッチを処理することを、図7を参照してさらに説明する。パッチは、逐次パイプラインの方法で、1度に1セグメントずつ処理され得るものであり、結果のファイルは、ファイル・アセンブラ505によって構築され得る。
【0037】
図1を参照して説明したように、パッチ・インデックス506(ローカル・チャンク・インデックス)は、クライアント上のすべてのファイルのコンテンツ・チャンクを、典型的には、暗号学的ハッシュを使用してインデックス付けする。これらのインデックス付けされたハッシュ値は、ファイルをチャンクにセグメント化することを助けるために使用される、いかなるハッシュ又は他のアルゴリズムとも無関係であり、別々のアルゴリズムを使用して導出され得る。各インデックス・キー(たとえば、ハッシュ値)は、コンテンツのチャンクについてのロケーション情報に帰着する。いくつかの実施形態では、ロケーシ
ョン情報は、別のリポジトリ507に記憶される。他の実施形態では、ロケーション情報は、直接、パッチ・インデックス506の一部として記憶される。パッチ・インデックス506は、パッチを転送してファイルを同期させるために、新しい又は修正されたファイル・データの製作者として働くクライアントのために、パッチを生成するために使用される。他の場所で説明したように、新しい又は修正されたデータに遭遇するとき、そのチャンクのハッシュが、パッチ・インデックス506中でインデックス・キーとしてルック・アップされ、ハッシュが存在する場合、既存のデータへの参照が生成中のパッチに入れられ、ハッシュが存在しない場合、データ・コンテンツ自体が生成中のパッチに記憶される。いくつかの実施形態では、パッチ生成作業空間508が、パッチの生成を援助するために、CDCSクライアント501中に含まれる。
【0038】
同様に、CDCSサーバ510のコンテンツ同期プロセッサ511は、マニフェスト・ハンドラ512、パッチ・ハンドラ513、及びファイル・アセンブラ514を含む。マニフェスト・ハンドラ512は、受信されたパッチのためのマニフェストを(たとえば、パッチが別のクライアントに伝搬される前に)生成することを担う。パッチ・ハンドラ513は、ファイルをsync中であるクライアントからパッチを受信し、パッチ・キャッシュ515に記憶された、キャッシュされたパッチを、受信者である他のクライアントへ転送(たとえば、送信、搬送、通信など)する。ファイル・アセンブラ514は、パッチが処理中であるとき、新しい又は修正されたファイルをアセンブルするために使用される。パッチから新しい(又は、新しいバージョンの)ファイルへデータを直接コピーすることによって、又は、記憶されたロケーション情報、サイズなどに従って、パッチによって参照されるファイルからデータを検索することによって、ファイルがファイル生成作業空間516中でアセンブルされる。
【0039】
一実施形態では、CDCSサーバ510のコンテンツ同期プロセッサ511は、RESTアプリケーション・プログラミング・インターフェース(API)を使用して実装され、したがって、サービス型ソフトウェア(SAAS)として、又は他のウェブで利用可能なリソースとして、利用可能である。プロセッサ511として働くウェブ・サーバは、ファイルの要求に対応し、可能な限り、パッチを返す。
【0040】
CDCSSの技法は、一般に、任意のタイプのファイルに適用可能であるが、「ファイル」という言い回しは、一般に、そこから差分コンテンツが決定され得る任意のタイプのオブジェクトを暗示するために使用される。また、本願明細書で説明する例は、しばしば、サーバ・ファイル・システムに言及するが、本願明細書で説明する技法はまた、ローカルで、ネットワーク・ファイル・システムとともにリモートで、又は、重複排除を促進するための他のアーキテクチャにおいても使用され得る。たとえば、本願明細書で説明する技法は、任意のタイプのファイル・システムに記憶されたファイル、任意のタイプのデータ・ストアに記憶されたオブジェクト、又は、任意の線形バイト・ストリームのデータとともに使用され得る。加えて、説明する概念及び技法は、他のアーキテクチャ、パッチ・プロトコル、デバイスなどに適用可能である。本質的に、説明する概念及び技法は、任意のファイル又はオブジェクト同期に適用可能である。
【0041】
また、いくつかの用語が本願明細書で主に使用されるが、他の用語が、均等な実施形態及び例を生じるために、互換的に使用され得る。加えて、用語は、明示的に記載されることもされないこともある代替スペリングを有することがあり、すべてのそのような用語の変形が含まれることが意図される。
【0042】
本願明細書で説明する例示的な実施形態は、ファイルのコンテンツを同期させるために使用されるようにファイル間差分コンテンツ同期システムを実装するためのアプリケーション、ツール、データ構造、及び他のサポートを提供する。説明する技法の他の実施形態
は、一般に重複排除を含む他の目的のために使用され得る。以下の説明では、説明する技法の完全な理解を提供するために、データ・フォーマット及びコード・シーケンスなど、多数の具体的詳細を示す。説明する実施形態はまた、本願明細書で説明する具体的詳細のうちのいくつかなしに、又は、論理の順序に関する変更、異なる論理など、他の具体的詳細とともに実施され得る。したがって、説明する技法及び/又は機能の範囲は、任意の特定のルーチン、モジュール、構成要素などを参照して説明する態様の特定の順序、選択、又は分解によって限定されない。
【0043】
図6は、ファイル間差分コンテンツ同期システムにおいて使用するためのパッチを生成するための論理の例示的なフローチャートである。図6の論理は、新しい又は修正されたファイルのためのパッチを生成するために、CDCSクライアント、たとえば、図1のsyncデーモン102によって使用され得る。ブロック601で、パッチ・データ構造が初期化され、パッチを識別するヘッダ情報が追加される。随意に、パッチ・フォーマットのバージョン、結果として生じるファイルの長さ、及び生成中のファイルのメディア・タイプなど、追加の情報もまた、ヘッダ中に含まれ得る。ブロック602〜611で、論理が、新しい又は修正されたファイルのデータ・コンテンツの各チャンクを処理するためのループを実行する。具体的には、ブロック602で、論理が、処理するべきチャンクがさらにあるかどうかを判断し、そうである場合、ブロック603で継続し、それ以外の場合、ブロック612で終了する。パッチ全体の処理の最後に、パッチが返され、たとえば、サーバへ転送される場合には、ブロック612で、パッチが返される。そうでない場合、論理は単に、パッチがすでに転送されたときに戻る。
【0044】
ブロック603で、論理が、どのようなチャンキング・アルゴリズムが使用されるかに基づいて、ファイルのデータ・コンテンツの次のチャンクを取得する。以前に説明したように、一実施形態では、コンテンツ定義チャンキング(CDC)を実装するラビン・フィンガープリンティング・アルゴリズムが、ファイルのデータ・コンテンツを、どのコンテンツが変更になったかを判断するために比較され得るセグメントに分解するために、使用される。他の実施形態では、たとえば、MD5又はSHA−1ハッシュを含む、他のアルゴリズムが使用され得る。選ばれたアルゴリズムを、クライアント側のみのキャッシュをサポートするシステムにおいて実装することができ、サーバは、パッチを処理するために、キャッシュのコピーを有する必要も、チャンキング・アルゴリズムを承知している必要もない。
【0045】
ブロック604で、チャンク境界アルゴリズムに従って以前に決定されたチャンクをインデックス付けするために、別の表現値、たとえば、SHA−256などの強力暗号学的ハッシュ値が計算される。ブロック605で、論理が、この値をパッチ・インデックスへの「キー」として使用して、その値(ハッシュ)によって表現されたデータ・コンテンツがすでにインデックス付けされているかどうかを判断する。そうである場合、論理が、ブロック606で継続して、生成中のパッチ中の参照において使用するために、データ・コンテンツについてのロケーション情報を取得し、そうでない場合、ブロック608で継続して、新しいインデックス付けされたレコードを編成し、生成中のパッチに直接、データ・コンテンツを記憶する。
【0046】
具体的には、(ハッシュ)キーが、データ・コンテンツがパッチ・インデックス中にすでに存在することを示す場合、ブロック606で、論理が、インデックス付けされた(ハッシュ)値に関連付けられたロケーション情報からチャンク・ロケーション情報を取得する。次いで、ブロック607で、この検索されたロケーション情報が、生成中のパッチ中にパッチ参照データとして追加される。いくつかの実施形態では、生成中のパッチのためのマニフェストもまた、パッチが生成中である間に生成される。そのような場合、ブロック607とともに、論理が、パッチ中で新たに作成されたパッチ参照に対応する、マニフ
ェスト中のレコードを生成することができる。さらに、逐次的、又はストリームライン処理をサポートする実施形態では、生成中のパッチの新しいセグメントがサーバへ(直接又は間接的に)転送(たとえば、送信、通信など)される。論理が、次いで、ブロック602におけるループの先頭に戻る。
【0047】
一方、(ハッシュ)キーが、データ・コンテンツがパッチ・インデックス中で発見されないことを示す場合、ブロック608で、新しい又は修正されたコンテンツ・チャンクのための(ハッシュ)キーがインデックス付けされ、ブロック609で、新しい又は修正されたコンテンツ・チャンクに関連付けられたロケーション情報が記憶される。たとえば、ファイルのためのUUID、チャンクが発見され得るファイル内の位置、及び、チャンクの長さが記憶され得る。ブロック610で、この記憶されたロケーション情報が、次いで、新たにインデックス付けされた(ハッシュ)キーに関連付けられる。一実施形態では、ブロック609,610が、ロケーション・データがパッチ・インデックスに直接記憶されるとき、同時に行われる。他の実施形態では、ロケーション情報は、個別に、たとえば、パッチ・インデックスから相互参照される別のデータ・リポジトリに記憶され得る。
【0048】
ブロック611で、新しい又は修正されたコンテンツが、生成中のパッチのセグメントにパッチ・データとして記憶される。次いで、逐次的、又はストリームライン処理をサポートする実施形態では、生成中のパッチの新しいセグメントがサーバへ(直接又は間接的に)転送される。論理が、次いで、ブロック602におけるループの先頭に戻る。
【0049】
図7は、ファイル間差分コンテンツ同期システムにおいて使用するためのパッチを処理するための論理の例示的なフローチャートである。図7の論理は、新しい又は修正されたファイルのための受信されたパッチを処理するために、CDCSクライアント、たとえば、図1のsyncデーモン102、又はCDCSサーバ、たとえば、syncプロセッサ121によって使用され得る。わずかな違いが、サーバによる処理、又は消費者クライアントによる処理に適用され得るが、本願明細書で説明する基本的な論理は、両方に適用可能である。
【0050】
ブロック701で、マニフェストが利用可能であると仮定して、マニフェストが受信される。ブロック702で、論理が、マニフェスト・レコード中に含まれたファイルのリストを検討して、その中で参照されるファイルのすべてへのアクセスを有すると判断する。そうである場合、又は、論理が、いずれにせよパッチを処理すると判断する場合、論理がブロック704で継続し、そうでない場合、ブロック703で継続する。ブロック703で、論理が、ファイル・コンテンツ全体がアップロード/ダウンロードされる必要があると判断及び要求し、次いで、論理が714で終了する。
【0051】
ブロック704で、論理が、パッチの少なくとも1部分を受信し、作成されるべきファイルの最初の部分を生成し、パッチ・ヘッダを処理する。
ブロック705乃至713は、パッチの各セグメントを処理するためのループを実施する。具体的には、ブロック705で、論理が、パッチ中に処理するべきセグメントがさらにあるかどうかを判断する。そうでない場合、論理がブロック706で継続し、さもなければブロック707で継続する。
【0052】
ブロック706で、論理が、作成中のファイルを終了し、又はさもなければ閉じ、(論理がサーバによって実行される場合には)キャッシュ中のパッチを閉じ、又はさもなければ終了する。いくつかのサーバ実施形態では、(将来の消費者のために)パッチを処理中に、マニフェストが作成され、そうである場合、マニフェストが閉じられる。論理が、次いでブロック714へ進み、処理を終了する。
【0053】
ブロック707で、論理が、次のパッチ・セグメントがデータ・セグメントである(データ・コンテンツを含む)かどうかを判断し、そうである場合、ブロック708で継続し、そうでない場合、ブロック709で継続する。ブロック708で、論理が、データ・コンテンツをパッチから読み出し、ここまで生成されたファイル部分の最後にデータ・コンテンツを追加し、ブロック713で継続する。
【0054】
ブロック709で、論理が、次のパッチ・セグメントが参照(又はエラー)であるかどうかを判断(そうであると推定)し、ブロック710へ進む。ブロック710で、論理が、参照されるファイル中のデータの位置が特定されたかどうかを判断する。そうである場合、論理がブロック712で継続し、そうでない場合、ブロック711で継続して、エラーをハンドリングする。エラーをハンドリングすることは、たとえば、ファイルの特定の部分のためのデータを要求すること、パッチ処理をアボートすること、又は、ファイル全体を要求することさえも含み得る。次いで、論理がブロック712で継続する。
【0055】
いくつかの実施形態では、ブロック710で、論理が、被参照データを検索し、検索されたデータのためのそれ自体のハッシュ値を計算し、次いで、計算されたハッシュを、データへの参照を提供したパッチ・レコードとともに記憶されたハッシュ値と比較する。このようにして、論理は、発見されたデータが、パッチによって指定されたデータに一致することを、検証することができる。そうでない場合、ブロック711に従って、エラーがハンドリングされる。
【0056】
ブロック712で、論理が、引き続き、ここまで生成されたファイル部分の最後に、位置が特定された/検索されたデータを連結(追加)し、ブロック713で継続する。
ブロック713で、論理が、キャッシュ中のパッチに、処理されたパッチ・セグメントを連結(追加)し、ブロック705におけるパッチ・セグメント処理ループの先頭に戻る。(たとえば、将来の消費者のために)パッチを処理中に、マニフェストが作成される実施形態では、次いで、レコードが、ブロック709で検査されたパッチ・セグメントに含まれた参照に対応するように、マニフェストに追加される。論理が、次いで、ブロック705で次のパッチ・セグメントを処理するために、ループの先頭に戻る。
【0057】
図8は、本願明細書で説明するファイル間差分コンテンツ同期システムの実施形態を実施するために使用され得る、例示的なコンピューティング・システムの例示的なブロック図である。適切に命令された1つもしくは複数の仮想もしく物理的な汎用コンピューティング・システム、又は専用コンピューティング・システムが、CDCSSを実装するために使用され得ることに留意されたい。さらに、CDCSSは、本願明細書で説明する能力を達成するために、ソフトウェア、ハードウェア、ファームウェア、又はある組合せで実装され得る。
【0058】
コンピューティング・システム800は、1つ又は複数のサーバ・コンピューティング・システム及び/又はクライアント・コンピューティング・システムからなり得るものであり、分散ロケーションに広がり得る。加えて、図示の各ブロックは、特定の実施形態に適するような1つ又は複数のブロックを表現することができ、又は、他のブロックと組み合わせられてもよい。また、CDCSS810の様々なブロックは、規格(たとえば、TCP/IP)又はプロプライエタリな処理間通信機構を使用して互いに通信する、1つ又は複数のマシン上に物理的に存在し得る。
【0059】
図示の実施形態では、クライアントとして、又はサーバとして使用するための、コンピュータ・システム800は、コンピュータ・メモリ(「メモリ」)801、ディスプレイ802、1つ又は複数の中央処理装置(「CPU」)803、入出力デバイス804(たとえば、キーボード、マウス、CRT又はLCDディスプレイなど)、他のコンピュータ
可読媒体805、及び、1つ又は複数のネットワーク接続806からなる。CDCSS(クライアント又はサーバ)810は、メモリ801中に存在するように示される。他の実施形態では、コンテンツのある部分、CDCSS810の構成要素のうちの一部、又は全部が、他のコンピュータ可読媒体805上に記憶され、かつ/又はそれを介して送信され得る。CDCSS810の構成要素は、好適には、1つ又は複数のCPU803上で実行し、本願明細書で説明するように、パッチの生成及び処理を管理する。他のコード又はプログラム830、及び、潜在的にデータ・リポジトリ806などの他のデータ・リポジトリもまた、メモリ801中に存在し、好適には、1つ又は複数のCPU803上で実行する。注目すべきことに、図8の構成要素のうちの1つ又は複数は、任意の特定の実装形態において存在しなくてもよい。たとえば、他のソフトウェアに埋め込まれたいくつかの実施形態は、ユーザ入力又は表示のための手段を提供しなくてもよい。
【0060】
典型的な実施形態では、CDCSS(クライアント又はサーバ)810は、1つ又は複数のマニフェスト・ハンドラ811、1つ又は複数のパッチ・ハンドラ812、及び、1つ又は複数のファイル・アセンブラ813を含む。少なくともいくつかの実施形態では、パッチは、CDCSSクライアント又はサーバの外部で提供され、潜在的に、1つ又は複数のネットワーク850を介して利用可能である。他の及び/又は異なるモジュールが実装され得る。加えて、CDCSSは、CDCSクライアント810によって計算されたパッチを使用するアプリケーションもしくはクライアント・コード855、1つもしくは複数のクライアント・コンピューティング・システム860、及び/又は、1つもしくは複数のサード・パーティ・パッチ・プロバイダ865と、ネットワーク850を介して対話することができる。また、注目すべきことに、CDCSクライアント・コードをホストするコンピューティング・システムでは、パッチ・データ816は、ネットワーク850を介して他のシステムにとってアクセス可能にされ得るパッチ・インデックスを含み得る。
【0061】
例示的な実施形態では、CDCSS810の構成要素/モジュールは、標準的なプログラミング技法を使用して実装される。たとえば、それらは、1つ又は複数の静的又は動的ライブラリとともに、CPU803上で実行する「ネイティブ」の実行ファイルとして実装され得る。他の実施形態では、CDCSクライアント又はCDCSサーバ810の構成要素は、仮想マシンによって処理される命令として実装され得る。当技術分野で知られている様々なプログラミング言語が、そのような例示的な実施形態を実装するために採用されてもよく、それらのプログラミング言語には、限定されないが、オブジェクト指向(たとえば、JAVA(登録商標)、C++、C#、Visual Basic.NET、Smalltalkなど)、関数型(たとえば、ML、Lisp、Schemeなど)、手続き型(たとえば、C、Pascal、Ada、Modulaなど)、スクリプト(たとえば、Perl、Ruby、Python、JAVASCRIPT(登録商標)、VBScriptなど)、及び宣言型(たとえば、SQL、Prologなど)を含む、様々なプログラミング言語パラダイムの代表的な実装形態が含まれる。
【0062】
上記で説明した実施形態はまた、よく知られているか又はプロプライエタリな、同期又は非同期クライアント−サーバ・コンピューティング技法も使用し得る。また、様々な構成要素は、よりモノリシックなプログラミング技法を使用して、たとえば、シングルCPUコンピュータ・システム上で実行する実行ファイルとして実装されてもよく、又は別法として、限定されないが、各々が1つもしくは複数のCPUを有する1つもしくは複数のコンピュータ・システム上で実行する、マルチプログラミング、マルチスレッディング、クライアント−サーバ、もしくはピアツーピアを含む、当技術分野で知られている様々な構造化技法を使用して分解されてもよい。いくつかの実施形態は、同時及び非同期的に実行し、メッセージ・パッシング技法を使用して通信し得る。均等な同期実施形態もまたサポートされる。
【0063】
加えて、CDCSSクライアント又はCDCSSサーバ810の一部として(たとえば、データ・リポジトリ816に)記憶されたデータへのプログラミング・インターフェースは、C、C++、C#、及びJava APIを通して、ファイル、データベース、もしくは他のデータ・リポジトリにアクセスするためのライブラリ、XMLなどのスクリプト言語を通して、又は、記憶されたデータへのアクセスを提供するウェブ・サーバ、FTPサーバ、もしくは他のタイプのサーバを通してなど、標準的な機構によって利用可能であり得る。パッチ・データ816は、コンピューティング・システム800がクライアントであるとき、パッチ・インデックスを含み、1つもしくは複数のデータベース・システム、ファイル・システム、もしくはそのような情報を記憶するための任意の他の技法、又は、分散コンピューティング技法を使用する実装形態を含む上記の任意の組合せとして、実装され得る。
【0064】
また、例示的なCDCSS810は、複数の、異種でさえある、コンピュータ・システム及びネットワークからなる分散環境において実装され得る。プログラム及びデータの異なる構成及びロケーションが、本願明細書で説明する技法とともに使用するために企図される。加えて、サーバ及び/又はクライアントは、物理的又は仮想コンピューティング・システムであってもよく、同じ物理的システム上に存在してもよい。また、モジュールのうちの1つ又は複数は、負荷分散、信頼性又はセキュリティの理由などのために、それ自体が分散され、プールされ、又はさもなければグループ化されてもよい。様々な分散コンピューティング技法が、例示した実施形態の構成要素を分散的な方法で実装するために適しており、限定されないが、TCP/IPソケット、RPC、RMI、HTTP、ウェブ・サービス(XML−RPC、JAX−RPC、SOAPなど)などが含まれる。他の変形形態が可能である。また、他の機能性が、各構成要素/モジュールによって提供可能であり、又は、既存の機能性が、異なる方法で構成要素/モジュール間で分散され得るが、それでもなお、CDCSSの機能を達成することができる。
【0065】
さらに、いくつかの実施形態では、CDCSS810の構成要素のうちの一部又は全部が、少なくとも部分的にファームウェア及び/又はハードウェアにおいてなど、他の方法で実装又は提供されてもよく、ファームウェア及び/又はハードウェアには、限定されないが、1つ又は複数の特定用途向け集積回路(ASIC)、標準集積回路、適切な命令を実行するコントローラが含まれ、ならびに、マイクロコントローラ及び/又は埋込みコントローラ、フィールド・プログラマブル・ゲート・アレイ(FPGA)、複合プログラマブル論理デバイス(CPLD:complex programmable logic
device)などが含まれる。システム構成要素及び/又はデータ構造のうちの一部又は全部はまた、コンテンツとして(たとえば、実行ファイル、又は他のマシン可読ソフトウェア命令、又は構造化データとして)、コンピュータ可読媒体(たとえば、ハード・ディスク、メモリ、ネットワーク、他のコンピュータ可読媒体、又は、DVDもしくはフラッシュ・メモリ・デバイスなど、適切なドライブによって、もしくは適切な接続を介して読み取られる他のポータブル媒体品)上に記憶されて、コンピュータ可読媒体が、説明した技法のうちの少なくともいくつかを行うために、コンテンツを実行するか、又はさもなければ使用もしくは提供することが可能にされ得る。構成要素及び/又はデータ構造のうちの一部又は全部は、有形の、非一時的ストレージ媒体上に記憶され得る。システム構成要素及びデータ構造のうちの一部又は全部はまた、(たとえば、搬送波の一部として符号化されるか、又は、アナログもしくはデジタル伝搬信号の一部として含まれることによって)データ信号として、ワイヤレス・ベース及びワイヤード/ケーブル・ベースの媒体にわたることを含めて、次いで送信される、様々なコンピュータ可読伝送媒体上に記憶されてもよく、(たとえば、単一もしくは多重化アナログ信号の一部として、又は、複数の個別のデジタル・パケットもしくはフレームとしての)様々な形態を取り得る。そのようなコンピュータ・プログラム製品はまた、他の実施形態では他の形態を取り得る。したがって、本開示の実施形態は、他のコンピュータ・システム構成とともに実施され得る。
【0066】
本願明細書で参照された、かつ/又は出願データ・シートにリストされた、上記の米国特許、米国特許出願公開、米国特許出願、外国特許、外国特許出願、及び非特許刊行物のすべてについては、それらの全体を本願明細書に援用する。
【0067】
例示のために特定の実施形態を本願明細書で説明したが、様々な修正が本開示の趣旨及び範囲から逸脱することなく行われ得ることは、上記から諒解されよう。たとえば、本願明細書で論じたファイル同期を行うための方法及びシステムは、クライアント−サーバ・アーキテクチャ以外の他のアーキテクチャに適用可能である。また、本願明細書で論じた方法及びシステムは、異なるプロトコル、通信媒体(光、ワイヤレス、ケーブルなど)、及びデバイス(ワイヤレス・ハンドセット、電子手帳、携帯情報端末、タブレット、ポータブル電子メール・マシン、ゲーム・マシン、ページャ、GPS受信機などのナビゲーション・デバイスなど)に適用可能である。
図1
図2
図3
図4
図5
図6
図7
図8