(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-03-17
(54)【発明の名称】ファイルを更新するための技術
(51)【国際特許分類】
G06F 16/174 20190101AFI20220310BHJP
G06F 8/65 20180101ALI20220310BHJP
G06F 16/17 20190101ALI20220310BHJP
【FI】
G06F16/174
G06F8/65
G06F16/17 200
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2021544198
(86)(22)【出願日】2019-12-24
(85)【翻訳文提出日】2021-07-28
(86)【国際出願番号】 US2019068488
(87)【国際公開番号】W WO2020159651
(87)【国際公開日】2020-08-06
(32)【優先日】2019-01-30
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】517160525
【氏名又は名称】バルブ コーポレーション
(74)【代理人】
【識別番号】110001737
【氏名又は名称】特許業務法人スズエ国際特許事務所
(72)【発明者】
【氏名】オッテン、マーティン
(72)【発明者】
【氏名】シャーマン、テイラー
(72)【発明者】
【氏名】ゴフィン、ヘンリー
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376CA02
5B376CA10
5B376CA89
(57)【要約】
アプリケーションは、ファイルを更新するための技術、デバイス、およびシステムを対象とする。例えば、リモートシステムは、ファイルの第1のバージョンを表す第1のデータおよびファイルの第2のバージョンを表す第2のデータを記憶し得る。次いで、リモートシステムは、第1のデータの第1の部分が、第2のデータの第1の部分に対応すると判定し得る。判定に少なくとも部分的に基づいて、リモートシステムは、第1のデータの第1の部分を使用して第1のデータの第2の部分を識別し、第2のデータの第1の部分を使用して第2のデータの第2の部分を識別し得る。次いで、リモートシステムは、第2のデータの第2の部分と第1のデータの第2の部分との間の差を表す第3のデータを生成し得る。加えて、リモートシステムは、ファイルに関連して第3のデータを記憶してもよい。
【選択図】
図1
【特許請求の範囲】
【請求項1】
1つ以上のコンピューティングデバイスであって、
1つ以上のプロセッサと、
1つ以上のコンピュータ可読媒体であって、前記1つ以上のプロセッサによって実行される場合、前記1つ以上のプロセッサに、
ファイルの第1のバージョンを表す第1のデータを記憶することと、
前記ファイルの前記第1のバージョンを表す前記第1のデータの第1の部分を識別することと、
前記ファイルの第2のバージョンを表す第2のデータを記憶することと、
前記ファイルの前記第2のバージョンを表す前記第2のデータの第1の部分を識別することと、
前記第1のデータの前記第1の部分が、前記第2のデータの前記第1の部分に対応することを判定することと、
前記第2のデータの前記第1の部分に対応する前記第1のデータの前記第1の部分に少なくとも部分的に基づいて、前記第1のデータの第2の部分を識別することであって、前記第1のデータの前記第2の部分が、前記第1のデータの前記第1の部分に続いている、識別することと、
前記第2のデータの前記第1の部分に対応する前記第1のデータの第1の部分に少なくとも部分的に基づいて、前記第2のデータの第2の部分を識別することであって、前記第2のデータの前記第2の部分が、前記第2のデータの前記第1の部分に続いている、識別することと、
前記第1のデータの前記第2の部分と関連付けられた第1の辞書を少なくとも生成することによって、前記第1のデータの前記第2の部分を圧縮することと、
前記第2のデータの前記第2の部分に関連付けられた第2の辞書を少なくとも生成することによって、前記第2のデータの前記第2の部分を圧縮することと、
前記第1の辞書を使用して、第3の辞書および前記第2のデータの前記第2の部分に関連付けられた基準を少なくとも生成することによって、前記第2のデータの前記第2の部分を圧縮することと、
前記第2の辞書および前記第3の辞書を使用して、前記第1のデータの前記第2の部分と前記第2のデータの前記第2の部分との間の差を判定することと、
前記差が閾値差を満たすと判定することと、
前記閾値差を満たす前記差に少なくとも部分的に基づいて、前記第3の辞書または前記基準のうちの少なくとも1つを、前記ファイルの前記第2のバージョンのパッチファイルとして記憶することと、を含む動作を実行させる、命令を記憶している1つ以上のコンピュータ可読媒体と、を備える、1つ以上のコンピューティングデバイス。
【請求項2】
前記基準が、第1の基準であり、前記差が、第1の差であり、前記動作が、
前記第1のデータの第3の部分を識別することであって、前記第1のデータの前記第3の部分は、前記第1のデータの前記第1の部分に先行する、識別することと、
前記第2のデータの第3の部分を識別することであって、前記第2のデータの前記第3の部分は、前記第2のデータの前記第1の部分に先行する、識別することと、
前記第1のデータの前記第3の部分と関連付けられた第4の辞書を少なくとも生成することによって、前記第1のデータの前記第3の部分を圧縮することと、
前記第2のデータの前記第3の部分と関連付けられた第5の辞書を少なくとも生成することによって、前記第2のデータの前記第3の部分を圧縮することと、
前記第4の辞書を使用して、第6の辞書および前記第2のデータの前記第3の部分に関連付けられた第2の基準を少なくとも生成することによって、前記第2のデータの前記第3の部分を圧縮することと、
前記第5の辞書および前記第6の辞書を使用して、前記第1のデータの前記第3の部分と前記第2のデータの前記第3のデータとの間の第2の差を判定することと、
前記第2の差が前記閾値差を満たしていることを判定することと、
前記閾値差を満たす前記第2の差に少なくとも部分的に基づいて、前記パッチファイルの一部として、前記第6の辞書の一部または前記第2の基準のうちの少なくとも1つを記憶することと、さらに含む、請求項1に記載の1つ以上のコンピューティングデバイス。
【請求項3】
前記動作が、
前記第1のデータの前記第1の部分を使用して第1の値を生成することと、
前記第2のデータの前記第1の部分を使用して第2の値を生成することと、をさらに含み、
前記第1のデータの前記第1の部分が前記第2のデータの前記第1の部分に対応していることを前記判定することが、前記第1の値が前記第2の値とマッチしていることを判定することを含む、請求項1に記載の1つ以上コンピューティングデバイス。
【請求項4】
前記動作が、
電子デバイスから、前記ファイルの前記第1のバージョンを前記ファイルの前記第2のバージョンに更新する要求を表す第3のデータを受信することと、
前記電子デバイスに前記パッチファイルを送信することと、をさらに含む、請求項1に記載の1つ以上コンピューティングデバイス。
【請求項5】
方法であって、
ファイルの第1のバージョンを表す第1のデータを記憶することと、
前記ファイルの第2のバージョンを表す第2のデータを記憶することと、
前記第1のデータの第1の部分が前記第2のデータの第1の部分に対応することを判定することと、
前記第2のデータの前記第1の部分に対応する前記第1のデータの前記第1の部分に少なくとも部分的に基づいて、
前記第1のデータの前記第1の部分を使用して、前記第1のデータの第2の部分を識別することと、
前記第2のデータの前記第1の部分を使用して、前記第2のデータの第2の部分を識別することと、
前記第1のデータの前記第2の部分に対して、前記第2のデータの前記第2の部分を分析することと、を含む、方法。
【請求項6】
前記分析することに少なくとも部分的に基づいて、前記第2のデータの前記第2の部分と前記第1のデータの前記第2の部分との間の差を表す第3のデータを生成することと、
前記ファイルに関連して前記第3のデータを記憶することと、をさらに含む、請求項5に記載の方法。
【請求項7】
前記差が閾値差を満たすと判定することと、をさらに含み、
前記第3のデータを前記記憶することは、前記閾値を満たす前記差に少なくとも部分的に基づいて、前記ファイルについてのパッチファイルとして前記第3のデータを記憶することを含む、請求項6に記載の方法。
【請求項8】
前記第1のデータの前記第2の部分に関連付けられた第1の辞書を表す第4のデータを生成することと、をさらに含み、
前記第3のデータが、第2の辞書または前記第2のデータの前記第2の部分に関連付けられた基準のうちの少なくとも1つを表し、
前記第3のデータを前記生成することが、前記第1の辞書を表す前記第4のデータを使用して、前記第2のデータの前記第2の部分に関連付けられている前記第2の辞書または前記基準のうちの少なくとも1つを表す前記第3のデータを生成することと、を含む、請求項6に記載の方法。
【請求項9】
前記第2のデータの前記第2の部分に関連付けられた第3の辞書を表す第5のデータを生成することと、
前記第3の辞書と前記第2の辞書との間の追加の差を判定することと、
前記追加の差が閾値差を満たすと判定することと、をさらに含み、
前記第3のデータの前記記憶することが、前記閾値差を満たす前記追加の差に少なくとも部分的に基づいている、請求項8に記載の方法。
【請求項10】
前記差が閾値差を満たすと判定することと、
前記閾値差を満たす前記差に少なくとも部分的に基づいて、
前記第1のデータの前記第2の部分を使用して、前記第1のデータの第3の部分を識別することと、
前記第2のデータの前記第2の部分を使用して、前記第2のデータの第3の部分を識別することと、
前記第2のデータの前記第3の部分と前記第1のデータの前記第3の部分との間の追加の差を表す第4のデータを生成することと、をさらに含む、請求項6に記載の方法。
【請求項11】
前記追加の差が閾値差を満たさないと判定することと、
前記追加の差が前記閾値差を満たしていないことを前記判定することに少なくとも部分的に基づいて、
前記第1のデータの前記第3の部分を使用して、前記第1のデータの第4の部分を識別することから自制することと、
前記第2のデータの前記第3の部分を使用して、前記第2のデータの第4の部分を識別することから自制することとのうちの少なくとも1つを実行することと、をさらに含む、請求項10に記載の方法。
【請求項12】
前記分析に少なくとも部分的に基づいて、前記第2のデータの前記第2の部分が前記第1のデータの前記第2の部分と類似していることを判定することをさらに含む、請求項5に記載の方法。
【請求項13】
前記第1のデータの前記第1の部分を使用して、前記第1のデータの前記第2の部分を識別することは、前記第1のデータの前記第2の部分を、前記第1のデータの前記第1の部分に先行することとして識別することを含み、
前記第2のデータの前記第1の部分を使用して、前記第2のデータの前記第2の部分を識別することは、前記第2のデータの前記第2の部分を、前記第2のデータの前記第1の部分に先行することとして識別することを含む、請求項5に記載の方法。
【請求項14】
前記第1のデータの前記第1の部分を使用して、前記第1のデータの前記第2の部分を識別することは、前記第1のデータの前記第2の部分を、前記第1のデータの前記第1の部分に続くものとして識別することを含み、
前記第2のデータの前記第1の部分を使用して、前記第2のデータの前記第2の部分を識別することは、前記第2のデータの前記第2の部分を、前記第2のデータの前記第1の部分に続くものとして識別することを含む、請求項5に記載の方法。
【請求項15】
前記第1のデータの前記第2の部分に対して前記第2のデータの前記第2の部分を前記分析することは、
前記第1のデータの前記第2の部分を圧縮することによって、第1の圧縮データを生成することと、
前記第2のデータの前記第2の部分を圧縮することによって、第2の圧縮データを生成することと、
前記第1の圧縮データを使用して、前記第2のデータの前記第2の部分を圧縮することによって、第3の圧縮データを生成することと、
前記第3の圧縮データと前記第2の圧縮データとの間の差を判定することと、
前記差が閾値を満たすと判定することと、を含み、および
および前記方法は、前記ファイルと関連付けて前記第3の圧縮データを記憶することをさらに含む、請求項5に記載の方法。
【請求項16】
1つ以上のコンピューティングデバイスであって、
1つ以上のプロセッサと、
1つ以上のコンピュータ可読媒体であって、前記1つ以上のプロセッサによって実行される場合、前記1つ以上のプロセッサに、
第1のデータの第1の部分を識別することであって、前記第1のデータがファイルの第1のバージョンを表す、識別することと、
第2のデータの第2の部分を識別することであって、前記第2のデータが前記ファイルの第2のバージョンを表す、識別することと、
前記第1のデータの前記第1の部分が、前記第2のデータの前記第1の部分に対応することを判定することと、
前記第2のデータの前記第1の部分に対応する前記第1のデータの前記第1の部分に少なくとも部分的に基づいて、
前記第1のデータの前記第1の部分を使用して、前記第1のデータの第2の部分を識別することと、
前記第2のデータの前記第1の部分を使用して、前記第2のデータの第2の部分を識別することと、
前記第1のデータの前記第2の部分に対して、前記第2のデータの前記第2の部分を分析することと、を含む、動作を実行させる命令を記憶している1つ以上のコンピュータ可読媒体と、を含む、1つ以上のコンピューティングデバイス。
【請求項17】
前記動作が、
前記分析することに少なくとも部分的に基づいて、前記第2のデータの前記第2の部分と前記第1のデータの前記第2の部分との間の差を表す第3のデータを生成することと、
前記ファイルに関連して前記第3のデータを記憶することと、をさらに含む、請求項16に記載の1つ以上のコンピューティングデバイス。
【請求項18】
前記動作が、
前記差が閾値差を満たすと判定すること、を含み、
前記第3のデータを前記記憶することは、前記閾値を満たす前記差に少なくとも部分的に基づいて、前記ファイルについてのパッチファイルとして前記第3のデータを記憶することを含む、請求項17に記載の1つ以上のコンピューティングデバイス。
【請求項19】
前記動作が、
前記第1のデータの前記第2の部分に関連付けられた第1の辞書を表す第4のデータを生成すること、をさらに含み、
前記第3のデータが、第2の辞書または前記第2のデータの前記第2の部分に関連付けられた基準のうちの少なくとも1つを表し、
前記第3のデータを前記生成することが、前記第1の辞書を使用して、前記第2のデータの前記第2の部分に関連付けられている前記第2の辞書または前記基準のうちの少なくとも1つを表す前記第3のデータを生成することを含む、請求項17に記載の1つ以上のコンピューティングデバイス。
【請求項20】
前記第1のデータの前記第1の部分を使用して、前記第1のデータの前記第2の部分を識別することは、前記第1のデータの前記第1の部分に先行するか、または前記第1のデータの前記第1の部分に続く、前記第1のデータの前記第2の部分を識別することを含み、
前記第2のデータの前記第1の部分を使用して、前記第2のデータの前記第2の部分を識別することは、前記第2のデータの前記第1の部分に先行するか、または前記第2のデータの前記第1の部分に続く、前記第2のデータの前記第2の部分を識別することを含む、請求項16に記載の方法。
【発明の詳細な説明】
【関連出願の相互参照】
【0001】
本出願は、2019年1月30日に出願された「TECHNIQUES FOR UPDATING FILES」と題された米国特許出願第16/262,431号の優先権を主張するものであり、その米国特許出願の全内容は参照により本明細書に組み込まれる。
【技術分野】
【0002】
[背景技術]
リモートシステムは、インターネットなどのネットワークを介して電子デバイスにファイルを送信し得る。これらのファイルの開発者は、これらのファイルを更新し、更新されたバージョンをリモートシステムに提供し得る。次いで、これらの更新されたファイルは、デバイスからの要求に応答して、またはそれ以外の方法で電子デバイスに提供され得る。しかしながら、ファイルが複雑さおよびサイズを増大させるにつれて、更新されたファイルを電子デバイスに送信することは、非常に大きな量のネットワーク帯域幅を必要とし得、かつこれらのデバイスに記憶されるのに比較的長い長さの時間がかかり得る。
【図面の簡単な説明】
【0003】
詳細な説明を、添付の図を参照して説明する。図において、参照符号の左端の数字は、参照符号が最初に現れる図を指す。異なる図における同じ参照番号の使用は、類似または同一の構成要素または機能を示す。
【0004】
【
図1】ファイルをファイルの第1のバージョンからファイルの第2のバージョンに更新するためのパッチファイルを生成するように構成されたリモートシステムを含む例示的な環境を示す図である。
【0005】
【
図2】第1のバージョンのインスタンスをファイルの第2のバージョンに更新するためのパッチを生成するためのファイルの第2のバージョンの部分に類似し得るファイルの第1のバージョンの部分を識別する例である。
【0006】
【
図3】ファイルの様々なバージョンについてパッチファイルを生成するように構成されたリモートシステムの例である。
【0007】
【
図4A】ファイルを第1のバージョンから第2のバージョンに更新するためのデータを生成するための例示的なプロセスのフロー図である。
【
図4B】ファイルを第1のバージョンから第2のバージョンに更新するためのデータを生成するための例示的なプロセスのフロー図である。
【0008】
【
図5】第2のデータの一部に類似する第1のデータの一部を識別するための第1の例示的プロセスのフローチャートである。
【0009】
【
図6】第2のデータの一部に類似する第1のデータの一部を識別するための第2の例示的なプロセスのフローチャートである。
【発明を実施するための形態】
【0010】
本明細書において、とりわけ、ファイルを効率的に更新するための技術、デバイス、およびシステムについて説明する。例えば、リモートシステムは、ファイルの第1のバージョンを表すデータ(この例では、「第1のデータ」と称される)を生成、受信、および/または記憶し得る。ファイルは、ゲーム、ビデオ、文書などを表し得る。場合によっては、ファイルは、ゲーム開発者などの第三者によってリモートシステムに提供され得る。その後、リモートシステムは、パーソナルコンピュータ、ラップトップコンピュータ、ゲームコンソール、タブレットコンピュータなどの1つ以上の電子デバイスからファイルに対する要求を受信し得る。これに応答して、リモートシステムは、ファイルの第1のバージョンを表す第1のデータを1つ以上の電子デバイスに送信し得る。いくつかの例では、第1のデータを送信するために、リモートシステムは、最初に第1のデータを1つのメガバイト部分などの連続した部分に分割し得る。第1のデータを分割した後、リモートシステムは、それら部分を一度に1つの電子デバイスに送信し得る。場合によっては、リモートシステムは、さらに、マニフェストを1つ以上の電子デバイスに送信し得、マニフェストは、ファイルの第1のバージョンを生成するために電子デバイス上の第1のデータの部分を再構築するための順序を定義する。マニフェストおよび第1のデータの各部分を受信すると、電子デバイスは、デバイスがファイルのそれぞれのインスタンスを実行する、またはそれ以外の場合レンダリングし得るように、ファイルの第1のバージョンを生成してもよい。
【0011】
後に、リモートシステムは、ファイルの第2の更新されたバージョンを表すデータ(この例では、「第2のデータ」と称される)を生成、受信、および/または記憶してもよい。第2のデータを生成するために、ファイルの開発者は、ファイルの第1のバージョンからデータを追加、削除、および/または変更してもよい。リモートシステムは、次いで、第2のデータを1つ以上の電子デバイスに送信し得、1つ以上の電子デバイスは、ファイルの第1のバージョンをファイルの第2のバージョンに更新するために使用し得る。いくつかの実施例では、ネットワーク帯域幅などのコンピューティングリソースを節約するために、リモートシステムは、第2のデータの一部分を1つ以上の電子デバイスに送信し得る。1つ以上の電子デバイスは、次いで、ファイルの第1のバージョンをファイルの第2のバージョンに更新するために、第2のデータの一部を使用して、第1のデータを「パッチ」し得る。場合によっては、このパッチファイルは、ファイルの第1のバージョンを記憶する電子デバイスにプッシュされるが、他の事例では、パッチファイルは、リモートシステムがこれらのデバイスからそれぞれの要求を受信したことに応答して電子デバイスに送信される。
【0012】
パッチファイルを生成するために、リモートシステムは、第2のデータの部分を、第1のデータの連続する部分の同じまたは類似のサイズ(例えば、1メガバイト)のものであり得る連続する部分に分割することによって開始し得る。次いで、リモートシステムは、第1のデータの部分を第2のデータの部分に関して分析して、第1のデータの部分(複数可)と第2のデータの部分(複数可)との間の類似性を識別し得る。例えば、リモートシステムは、第2のデータの一部分とマッチングする第1のデータの一部分などのマッチする部分を識別するために、第2のデータを「通過する」ことができる。
【0013】
いくつかの例では、第2のデータの部分に対して第1のデータの部分を分析するために、リモートシステムは、部分にフィンガプリントを付けるか、またはタグ付けし得る。第1の例について、リモートシステムは、第1のデータの部分に関連付けられた第1のチェック値および第2のデータの部分に関連付けられた第2のチェック値を生成するために、周期的冗長性チェック(CRC)を利用してもよい。次いで、リモートシステムは、第1のチェック値を第2のチェック値と比較して、第2のチェック値(複数可)とマッチする第1のチェック値(複数可)を識別し得る。マッチ(複数可)の識別に基づいて、リモートシステムは、第2のデータの部分(複数可)に対応する(例えば、第2のデータの部分(複数可)と同じデータを含む)第1のデータの部分(複数可)を識別し得る。第2の例について、リモートシステムは、第1のデータの部分に関連付けられた第1のハッシュ値および第2のデータの部分に関連付けられた第2のハッシュ値を生成するために、セキュアハッシュアルゴリズム1(SHA-1)を利用してもよい。次いで、リモートシステムは、第1のハッシュ値を第2のハッシュ値と比較して、第2のハッシュ値(複数可)にマッチする第1のハッシュ値(複数可)を識別し得る。マッチに基づいて、リモートシステムは、第2の値の部分(複数可)に対応する第1のデータの部分(複数可)を識別してもよい。当然のことながら、マッチ部分を識別するためのいくつかの例示的な技術が説明されているが、リモートシステムがそのようなマッチ部分を識別するために任意の他の技術を利用できることを理解されたい。
【0014】
いくつかの例では、リモートシステムは、次いで、第2のデータの一意の部分(複数可)を記憶し得る(例えば、第1のデータの部分に対応しない第2のデータの部分(複数可))。加えて、リモートシステムは、ファイルの第1のバージョンのいくつかの部分、およびファイルの第2のバージョンのうち、新しいまたは第2のバージョンに固有の部分を使用して、ファイルの第2のバージョンを再構築するための順序を示すマニフェストを生成し得る。別段の記載がない場合、マニフェストは、(1)第2のデータの部分(複数可)に対応する第1のデータの部分(複数可)、および(2)第2のデータの一意の部分(複数可)を再構築するための順序を定義し得る。リモートシステムは、次いで、ファイルの第2のバージョンを再構築するためのマニフェストとともに、第2のデータの一意の部分(複数可)を1つ以上の電子デバイスに送信してもよい。1つ以上の電子デバイスは、次いで、1つ以上の電子デバイスに記憶されている、第2のデータの部分(複数可)に対応する第1のデータの部分(複数可)、第2のデータの受信された一意の部分(複数可)、およびマニフェストを使用して、ファイルの第2のバージョンを再構築し得る。したがって、いくつかの例では、1つ以上の電子デバイスに第2のデータの全体を送信する代わりに、リモートシステムは、マニフェストとともに第2のデータの一意の部分(複数可)を送信してもよい。これは、ネットワーク帯域幅を減らし、クライアントデバイスをファイルの第1のバージョンからファイルの第2のバージョンに更新するのにかかる時間の長さを減らし得る。
【0015】
いくつかの例では、第2のデータの一意の部分は、第2のデータの一意の部分が最小の命令で第1のデータの一部分に変換され得る第1のデータの一部分に十分に類似してもよい。例えば、第2のデータの一意の部分と第1のデータの一部との差は、第1のデータの一部に追加された、削除された、またはその一部内で変更された1つ以上のバイトのデータを含み得る。したがって、第2のデータの一意の部分(複数可)を1つ以上の電子デバイスに送信する前および/またはその代わりに、リモートシステムは、一意の部分(複数可)が第1のデータの一部のうちの1つに変換され得るかどうかを最初に判定してもよい。第2のデータの一意の部分が第1のデータの一部分に変換され得ると判定することに基づいて、リモートシステムは、第2のデータの一意の部分を第1のデータの一部分に変換するための命令を表すデータを生成し得る。次いで、リモートシステムは、第1のデータの一部に変換され得る他の一意の部分(複数可)について同様のプロセスを実行してもよい。このデータを使用して、リモートシステムは、パッチファイルを生成し、パッチファイルを1つ以上の電子デバイスに送信し得る。
【0016】
例えば、リモートシステムは、上述のプロセスを使用して、第1のデータの第1の部分が第2のデータの第1の部分に対応することを識別し得る。次いで、リモートシステムは、類似性を使用して、第1のデータの第2の部分に変換され得る第2のデータの第2の部分(例えば、一意の部分)を識別し得る。いくつかの例では、リモートシステムは、第2のデータの第2の部分を、第2のデータの第1の部分に対する「隣人」として識別し、第1のデータの第2の部分を、第1のデータの第1の部分に対する「隣人」として識別する。第1の例について、第2のデータの第2の部分は、第2のデータの第1の部分に先行する第2のデータの部分を含み得、第1のデータの第2の部分は、第1のデータの第1の部分に先行する第1のデータの部分を含み得る。第2の例について、第2のデータの第2の部分は、第2のデータの第1の部分に続く第2のデータの部分を含み得、第1のデータの第2の部分は、第1のデータの第1の部分に続く第1のデータの部分を含み得る。
【0017】
次いで、リモートシステムは、第2のデータの第2の部分と第1のデータの第2の部分との間の差を表すデータを生成し得る。差が閾値差を満たさないと判定することに基づいて、リモートシステムは、第2のデータの第2の部分が第1のデータの第2の部分と類似していないと判定し得る。しかしながら、差が閾値差を満たすと判定することに基づいて、リモートシステムは、第2のデータの第2の部分が第1のデータの第2の部分と類似していると判定し得る。次に、リモートシステムは、差を表すデータを、ファイルの第2のバージョンについてのパッチファイルの少なくとも一部として記憶し得る。
【0018】
いくつかの例では、リモートシステムは、圧縮を使用して、第2のデータの第2の部分が第1のデータの第2の部分と類似しているかどうかを判定し得る。例えば、リモートシステムは、1つ以上のアルゴリズム(複数可)(例えば、Lempel-Ziv-Markovチェーンアルゴリズム(LZMA))、Lempel-Ziv-Welch(LZW)、British Telecom Lempel Ziv(BTLZ)、LZ77、LZ78など)を使用して、第1のデータの第2の部分を圧縮し得る。圧縮に基づいて、リモートシステムは、第1のデータの第2の部分についての第1の圧縮データを生成し得る。リモートシステムは、アルゴリズム(複数可)をさらに使用して、第2のデータの第2の部分を圧縮してもよい。圧縮に基づいて、リモートシステムは、第2のデータの第2の部分について第2の圧縮データを生成し得る。加えて、リモートシステムは、アルゴリズム(複数可)および第1の圧縮データを使用し得、第2のデータの第2の部分を再び圧縮する。例えば、リモートシステムは、第1の圧縮データをベースとして使用し得、第3の圧縮データを生成するが、第3の圧縮データは、第1のデータの第2の部分と第2のデータの第2の部分との間の差を表す。
【0019】
次に、リモートシステムは、第2の圧縮データと第3の圧縮データとの間の差を判定してもよい。次いで、リモートシステムは、差が閾値差を満たすか否かを判定し得る。第1の例について、リモートシステムは、第2の圧縮データと第3の圧縮データとの間のサイズ差を判定し得る。次いで、リモートシステムは、サイズ差がサイズ閾値を満たすか否かを判定し得る。例えば、サイズ差が0.5メガバイトであり、サイズ閾値が0.75メガバイトである場合、リモートシステムは、サイズ差がサイズ閾値を満たす(例えば、それ以内である)と判定し得る。第2の例について、リモートシステムは、第3の圧縮データのサイズの第2の圧縮データのサイズに対する比(例えば、差)を判定し得る。次に、リモートシステムは、比が閾値を満たすか否かを判定し得る。例えば、第2の圧縮データが0.5メガバイトのサイズを含み、第3の圧縮データが0.8メガバイトのサイズを含む場合、リモートシステムは、第2の圧縮データのサイズに対する第2の圧縮データのサイズの比が0.625であると判定してもよい。閾値が0.8を含む場合、リモートシステムは、比が閾値を満たす(例えば、閾値内にある)と判定し得る。例えば、リモートシステムは、0.625の比が0.8の閾値内(例えば、それ未満)であると判定し得る。いくつかの例では、比が小さいほど、第2のデータの第2の部分は、第1のデータの第2の部分とより類似する。
【0020】
いくつかの例では、圧縮データは、辞書および/または基準を含んでもよい。例えば、リモートシステムは、アルゴリズム(複数可)を使用して、第1のデータの第2の部分を圧縮し得る。圧縮に基づいて、リモートシステムは、第1の辞書および第1の基準(例えば、記号およびフレーズ基準の第1のシーケンス)を生成し得る。リモートシステムは、アルゴリズム(複数可)をさらに使用して、第2のデータの第2の部分を圧縮してもよい。圧縮に基づいて、リモートシステムは、第2の辞書および第2の基準(例えば、記号およびフレーズ基準の第2のシーケンス)を生成し得る。加えて、リモートシステムは、アルゴリズム(複数可)および第1の辞書を使用して、第2のデータの第2の部分を再び圧縮してもよい。例えば、リモートシステムは、第1の辞書をベースとして使用して、第3の辞書および/または第3の基準(例えば、記号およびフレーズ基準の第3のシーケンス)を生成してもよく、ここで、第3の辞書および/または第3の基準は、第1のデータの第2の部分と第2のデータの第2の部分との間の差を表す。
【0021】
例えば、いくつかの例では、第2のデータの第2の部分および第1のデータの第2の部分が、例えば、数バイトのデータによって異なるなど、高い程度の類似性を有する場合、第3の辞書および/または第3の基準は、第1の辞書および/または第1の基準に類似していると見なされる。加えて、第2のデータの第2の部分および第1のデータの第2の部分が類似していない場合、第3の辞書および/または第3の基準は、第1の辞書および/または第1の基準に類似していないと見なされる。
【0022】
次に、リモートシステムは、第2の辞書と第3の辞書との間の差を判定し得る。次いで、リモートシステムは、差が閾値差を満たすか否かを判定し得る。第1の例では、リモートシステムは、第2の辞書と第3の辞書との間のサイズ差を判定し得る。次いで、リモートシステムは、サイズ差がサイズ閾値を満たすか否かを判定し得る。例えば、サイズ差が0.5メガバイトであり、サイズ閾値が0.75メガバイトである場合、リモートシステムは、サイズ差がサイズ閾値を満たす(例えば、それ以内である)と判定し得る。第2の例について、リモートシステムは、第3の辞書のサイズと第2の辞書に対するサイズとの比(例えば、差)を判定し得る。次に、リモートシステムは、比が閾値を満たすか否かを判定し得る。例えば、第2の辞書が0.5メガバイトのサイズを含み、第3の辞書が0.8メガバイトのサイズを含む場合、リモートシステムは、第2の辞書のサイズと第2の辞書のサイズとの比が0.625であると判定してもよい。閾値が0.8を含む場合、リモートシステムは、比が閾値を満たす(例えば、閾値内にある)と判定し得る。例えば、リモートシステムは、0.625の比が0.8の閾値内(例えば、それ未満)であると判定し得る。いくつかの例では、比が小さいほど、第2のデータの第2の部分は、第1のデータの第2の部分とより類似する。
【0023】
いくつかの例では、差が閾値を満たすと判定することに基づいて、リモートシステムは、差を表すデータ(例えば、第3の圧縮データの少なくとも一部分、第1の辞書および/または第3の基準と異なる第3の辞書の少なくとも一部分など)を、ファイルの第2のバージョンのパッチファイルの一部として記憶し得る。加えて、リモートシステムは、類似のプロセスを実行して、リモートシステムが第1のデータの一部に類似していると判定する第2のデータの1つ以上の他の部分(複数可)の差(複数可)を表す追加のデータを生成してもよい。次いで、リモートシステムは、追加のデータをパッチファイルの一部として記憶し得る。いくつかの例では、リモートシステムは、次に、リモートシステムが第1のデータの部分(複数可)に類似していると判定した第2のデータの一意の部分(複数可)の代わりに、パッチファイルを1つ以上の電子デバイスに送信し得る。パッチファイルを送信することによって、リモートシステムは、ネットワーク帯域幅などのコンピューティングリソースをさらに節約し得る。
【0024】
いくつかの例では、リモートシステムは、ファイルの他のバージョンを更新するために同様のプロセスを実行し得る。例えば、リモートシステムは、ファイルの第3のバージョンを表すデータ(この例では、「第3のデータ」と称される)を記憶してもよい。次いで、リモートシステムは、第2のデータの部分(複数可)に対応する第3のデータの部分(複数可)を識別し、第2のデータの部分(複数可)に類似すると見出される第3のデータの一意の部分(複数可)についてパッチファイル(複数可)を生成し、第2のデータの部分(複数可)に類似しない第3のデータの部分(複数可)を識別し得る。次いで、リモートシステムは、第2のデータのための部分(複数可)に類似していると見出される第3のデータの一意の部分(複数可)および第2のデータの部分(複数可)に類似していない第3のデータの部分(複数可)のためのパッチファイル(複数可)を1つ以上の電子デバイスに送信し得る。
【0025】
いくつかの例では、ファイルの多数のバージョンがある場合、リモートシステムは、ファイルのバージョンの1つ以上の対について上述のプロセスを実行し得る。第1の例では、ファイルの4つのバージョンがある場合、リモートシステムは、第1のバージョンを第2のバージョンに、第1のバージョンを第3のバージョンに、第1のバージョンを第4のバージョンに、第2のバージョンを第3のバージョンに、第2のバージョンを第4のバージョンに、および/または第3のバージョンを第4のバージョンに更新するための上述の処理を実行してもよい。第2の例では、リモートシステムは、最も一般的な更新のために上述のプロセスを実行し得る。例えば、1つの電子デバイスが第1のバージョンを第4のバージョンに更新し、50の電子デバイスが第3のバージョンを第4のバージョンに更新する場合、リモートシステムは、第4のバージョンの第3のバージョンを更新するために上述のプロセスを実行してもよいが、リモートシステムは、第1のバージョンを第4のバージョンに更新するために上述のプロセスを実行しなくてもよい。
【0026】
いくつかの例では、第1のデータの識別された部分に関して第2のデータの識別された部分を分析する場合、リモートシステムは、第2のデータの識別された部分が第1のデータの識別された部分と類似していると判定し得ることに留意されたい。そのような例では、リモートシステムは、次いで、第2のデータの識別された部分が第1のデータの識別された部分に対応すると判定してもよい。加えて、リモートシステムは、第2のデータの識別された部分および第1のデータの識別された部分の「隣人」を使用して、上述のプロセスを実行し得る。
【0027】
いくつかの例では、上述のプロセスを実行することによって(例えば、マッチ部分(複数可)を使用することによって)、リモートシステムは、第2のデータの部分(複数可)に対応し得る第1のデータの部分(複数可)をより容易に識別することができる。これにより、リモートシステムによって実行される処理の量を低減し得る、リモートシステムが第1のデータの各部分を第2のデータの各部分に分析する必要性を低減し得る。したがって、上述したプロセスを実行することによって、リモートシステムは、第1のデータおよび第2のデータを処理する場合、より少ないコンピューティングリソースを必要とし得る。
【0028】
図1は、ファイルの第1のバージョン104からファイルの第2のバージョン106にファイルを更新するためのパッチファイルを生成するように構成されたリモートシステム102を含む例示的な環境100を示す図である。いくつかの例では、ファイルがゲームに対応し得る。例えば、ファイルの第1のバージョン104は、ゲームの第1のバージョンに対応し得、ファイルの第2のバージョン106は、ゲームの更新された第2のバージョンに対応し得る。他の例では、ファイルは、アプリケーション、プログラム、文書、ビデオ、画像などに対応し得る。いくつかの例では、リモートシステム102は、ファイルの開発者に関連付けられた1つ以上のコンピューティングデバイスからファイルの第1のバージョン104および/または第2のバージョン106を受信してもよい。
【0029】
第1の時間において、リモートシステム102は、ネットワーク108を介して、ファイルの第1のバージョン104を表す第1のデータ110を、第1の電子デバイス112(1)、第2の電子デバイス112(2)、および第3の電子デバイス112(3)のような1つ以上の電子デバイスに送信し得る。明確な目的のために3つの電子デバイス112(1)~(3)のみが図示されるが、他の例では、リモートシステム102は、任意の数の電子デバイスに第1のデータ110を送信し得る。
【0030】
いくつかの例では、第1のデータ110を電子デバイス(複数可)112(1)~(3)に送信するために、リモートシステム102は、第1のデータ110の部分116(1)~(6)を識別するために、パーティション構成要素114を利用し得る。部分116(1)~(6)は、第1のデータ110の連続するセクションを含み得る。いくつかの例では、第1のデータ110の部分116(1)~(6)は、任意のサイズを含んでもよい。例えば、部分116(1)~(6)は、第1のデータ110の500バイトの連続セクション、第1のデータ110の1メガバイトの連続セクション、第1のデータ110の5メガバイトの連続セクションなどを含み得るが、これらに限定されるものではない。リモートシステム102は、次いで、第1のデータ110の部分116(1)~(6)を電子デバイス112(1)~(3)に送信し得る。加えて、いくつかの例では、リモートシステム102は、マニフェスト118を表すデータを電子デバイス112(1)~(3)に送信し得る。マニフェスト118は、ファイルの第1のバージョン104を生成するために、電子デバイス112(1)~(3)上の第1のデータ110の部分116(1)~(6)を再構築するための順序を定義し得る。
【0031】
後に、リモートシステム102は、ファイルの第2のバージョン106を表す第2のデータ120を生成、受信、および/または記憶してもよい。第2のデータ120を生成するために、データは、第1のデータ110に追加されてもよく、第1のデータ110から削除されてもよく、第1のデータ110内で変更されるなどでもよい。第1のデータ110および第2のデータ120を使用して、リモートシステム102は、電子デバイス112(1)~(3)上でファイルの第1のバージョン104をファイルの第2のバージョン106に更新するためのパッチを生成してもよい。例えば、リモートシステム102は、第2のデータ120の部分116(1)、116(4)、116(6)、および116(7)~(9)を識別するパーティション構成要素114を利用し得る。部分116(1)、116(4)、116(6)、および116(7)~(9)は、第2のデータの連続するセクションを含み得る。いくつかの例では、第2のデータ120の部分116(1)、116(4)、116(6)、および116(7)~(9)は、任意のサイズを含み得る。例えば、部分116(1)、116(4)、116(6)、および116(7)~(9)は、第1のデータ110の500バイトの連続セクション、第1のデータ110の1メガバイトの連続セクション、第1のデータ110の5メガバイトの連続セクションなどを含み得るが、これらに限定されない。
【0032】
次いで、リモートシステム102は、マッチング構成要素122を利用して、第1のデータ110の部分116(1)~(6)を、第2のデータ120の部分116(1)、116(4)、116(6)、および116(7)~(9)に対して分析し、第1のデータ110の部分(複数可)と第2のデータ120の部分(複数可)との間の類似性を識別し得る。いくつかの例では、分析を実行するために、マッチング構成要素122は、部分116(1)~(9)にフィンガプリントを付けるか、またはタグ付けし得る。第1の例について、マッチング構成要素122は、CRCを利用して、第1のデータ110の部分116(1)~(6)に関連付けられた第1のチェック値124、ならびに第2のデータ120の部分116(1)、116(4)、116(6)、および116(7)~(9)に関連付けられた第2のチェック値124を生成し得る。次いで、マッチング構成要素122は、第1のチェック値124を第2のチェック値124と比較して、第2のデータ120の部分(複数可)に対応する(例えば、それと同じデータを含む)第1のデータ110の部分(複数可)を識別し得る。
【0033】
例えば、
図1の例に示すように、マッチング構成要素122は、第1のデータ110の部分116(1)に関連付けられたチェック値124が、第2のデータ120の部分116(1)に関連付けられたチェック値124とマッチすると判定し得る。したがって、マッチング構成要素122は、第1のデータ110の部分116(1)が第2のデータ120の部分116(1)に対応すると判定し得る。加えて、マッチング構成要素122は、第1のデータ110の部分116(4)と関連付けられたチェック値124が、第2のデータ120の部分116(4)と関連付けられたチェック値124とマッチすると判定し得る。したがって、マッチング構成要素122は、第1のデータ110の部分116(4)が第2のデータ120の部分116(4)に対応すると判定してもよい。さらに、マッチング構成要素122は、第1のデータ110の部分116(6)と関連付けられたチェック値124が、第2のデータ120の部分116(6)と関連付けられたチェック値124とマッチすると判定してよい。したがって、マッチング構成要素122は、第1のデータ110の部分116(6)が第2のデータ120の部分116(6)に対応すると判定してもよい。
【0034】
第2の例について、およびCRCを利用することに加えて、または代替的に、マッチング構成要素122は、SHA-1を利用して、第1のデータ110の部分116(1)~(6)に関連付けられた第1のハッシュ値124、ならびに第2のデータ120の部分116(1)、116(4)、116(6)、および116(7)~(9)に関連付けられた第2のハッシュ値124を生成し得る。次いで、マッチング構成要素122は、第1のハッシュ値124を第2のハッシュ値124と比較して、第2のデータ120の部分(複数可)に対応する第1のデータ110の部分(複数可)を識別し得る。
【0035】
例えば、
図1の例に示すように、マッチング構成要素122は、第1のデータ110の部分116(1)に関連付けられたハッシュ値124が、第2のデータ120の部分116(1)に関連付けられたハッシュ値124とマッチすると判定し得る。したがって、マッチング構成要素122は、第1のデータ110の部分116(1)が第2のデータ120の部分116(1)に対応すると判定し得る。加えて、マッチング構成要素122は、第1のデータ110の部分116(4)と関連付けられたハッシュ値124が、第2のデータ120の部分116(4)と関連付けられたハッシュ値124とマッチすると判定してよい。したがって、マッチング構成要素122は、第1のデータ110の部分116(4)が第2のデータ120の部分116(4)に対応すると判定してもよい。さらに、マッチング構成要素122は、第1のデータ110の部分116(6)と関連付けられたハッシュ値124が、第2のデータ120の部分116(6)と関連付けられたハッシュ値124とマッチすると判定し得る。したがって、マッチング構成要素122は、第1のデータ110の部分116(6)が第2のデータ120の部分116(6)に対応すると判定してもよい。
【0036】
いくつかの例では、マッチング構成要素122は、第2のデータ120の一意の部分(複数可)をさらに識別する。例えば、
図1の例に示されるように、マッチング構成要素122は、第2のデータ120の部分116(7)~(9)に関連付けられたチェック値124および/またはハッシュ値124が、第1のデータ110の部分116(1)~(7)に関連付けられたチェック値124および/またはハッシュ値124とマッチしないと判定してもよい。したがって、マッチング構成要素122は、第2のデータ120の部分116(7)~(9)が一意の部分を含むと判定し得る。いくつかの例では、電子デバイス112(1)~(3)がファイルを更新する場合、リモートシステム102は、マニフェスト118を表すデータとともに、第2のデータ120の一意の部分116(7)~(9)を電子デバイス112(1)~(3)に送信し得る。マニフェスト118は、電子デバイス112(1)~(3)に既に記憶されている第1のデータ110の部分116(1)、116(4)、116(6)、および第2のデータ120の一意の部分116(7)~(9)を再構築することによって、ファイルの第2のバージョン106を生成するための順序を定義し得る。
【0037】
しかしながら、いくつかの例では、第2のデータ120の一意の部分は、第2のデータ120の一意の部分が最小限の命令で第1のデータ110の部分116(1)~(6)に変換され得るように、第1のデータ110の部分116(1)~(6)のうちの1つに十分に類似し得る。例えば、第2のデータ120の一意の部分と第1のデータ110の部分116(1)~(6)との差は、第1のデータ110の部分116(1)~(6)に追加された、削除された、またはその中で変更された1つ以上のデータのバイトを含み得る。したがって、第2のデータ120の一意の部分116(7)~(9)を電子デバイス112(1)~(3)に送信する前および/またはその代わりに、リモートシステム102は、一意の部分116(7)~(9)が第1のデータ110の部分116(1)~(6)のうちの1つに変換され得るか否かを最初に判定し得る。第2のデータ120の一意の部分が、第1のデータ110の部分116(1)~(6)に変換され得ると判定することに基づいて、リモートシステム102は、第2のデータ120の一意の部分を第1のデータ110の部分116(1)~(6)に変換するための命令を表すデータを生成し得る。次いで、リモートシステム102は、第1のデータ110の部分116(1)~(6)に変換され得る他の一意の部分(複数可)について同様のプロセスを実行してもよい。このデータを使用して、リモートシステム102は、パッチファイル126を生成し、パッチファイル126を電子デバイス112(1)~(3)に送信し得る。
【0038】
例えば、マッチング構成要素122は、第1のデータ110の部分116(4)が第2のデータ120の部分116(4)に対応することを識別し得る。次いで、マッチング構成要素122は、類似性を使用して、第1のデータ110の一部分に変換され得る第2のデータ120の一部分(例えば、一意の部分)を識別し得る。いくつかの例では、マッチング構成要素122は、第2のデータ120の部分の一部を、第2のデータ120の部分116(4)に対する「隣人」として識別し、第1のデータ110の部分の一部を、第1のデータ110の部分116(4)に対する「隣人」として識別する。第1の例について、マッチング構成要素122は、第2のデータ120の部分116(4)に先行する第2のデータ120の部分116(8)、および第1のデータ110の部分116(4)に先行する第1のデータ110の部分116(3)を識別し得る。第2の例について、マッチング構成要素122は、第2のデータ120の部分116(4)に続く第2のデータ120の部分116(9)、および第1のデータ110の部分116(4)に続く第1のデータ110の部分116(5)を識別し得る。
【0039】
次いで、リモートシステム102は、第2のデータ120の識別された部分と第1のデータ110の識別された部分との間の差を表すデータを生成し得る。差が閾値130を満たさないと判定することに基づいて、リモートシステム102は、第2のデータ120の識別された部分が第1のデータ110の識別された部分と類似していないと判定し得る。しかしながら、差が閾値差を満たすと判定することに基づいて、リモートシステム102は、第2のデータ120の識別された部分が、第1のデータ110の識別された第2の部分と類似していると判定し得る。リモートシステム102は、次いで、ファイルの第2のバージョン106についてのパッチファイル126における差を表すデータを記憶し得る。
【0040】
いくつかの例では、リモートシステム102は、圧縮を使用して、第2のデータ120の識別された部分が、第1のデータ110の識別された部分と類似しているか否かを判定し得る。例えば、第1のデータ110および第2のデータ120の後続の部分を使用して、リモートシステム102は、圧縮構成要素128を利用して、第1のデータ110の部分116(5)および第2のデータの部分116(9)を圧縮し得る。例えば、圧縮構成要素128は、アルゴリズム(複数可)(例えば、LZMA、LZW、BTLZ、LZ77、LZ78など)を使用して、第1のデータ110の部分116(5)を圧縮してもよい。圧縮に基づいて、圧縮構成要素128は、第1のデータ110の部分116(5)についての第1の圧縮データを生成し得る。圧縮構成要素128は、アルゴリズム(複数可)をさらに使用して、第2のデータ120の部分116(9)を圧縮してもよい。圧縮に基づいて、圧縮構成要素128は、第2のデータ120の部分116(9)について第2の圧縮データを生成してもよい。さらに、圧縮構成要素128は、アルゴリズム(複数可)および第1の圧縮データを使用し得、第2のデータ120の部分116(9)を再び圧縮する。例えば、圧縮構成要素128は、第1の圧縮データをベースとして使用し得、第3の圧縮データを生成し、第3の圧縮データは、第1のデータ110の部分116(5)と第2のデータ120の部分116(9)との間の差を表す。
【0041】
次いで、リモートシステム102は、第2の圧縮データと第3の圧縮データとの間の差を判定し得る。次いで、分析構成要素136は、差が閾値差を満たすか否かを判定し得る。第1の例について、分析構成要素136は、第2の圧縮データと第3の圧縮データとの間のサイズ差を判定し得る。次いで、分析構成要素136は、サイズ差がサイズ閾値を満たすか否かを判定し得る。例えば、サイズ差が0.5メガバイトであり、サイズ閾値が0.75メガバイトである場合、分析構成要素136は、サイズ差がサイズ閾値を満たす(例えば、それ以内である)と判定してもよい。第2の例について、分析構成要素136は、第3の圧縮データのサイズの、第2の圧縮データのサイズに対する比(例えば、差)を判定し得る。次いで、分析構成要素136は、比が閾値を満たすか否かを判定し得る。例えば、第2の圧縮データが0.5メガバイトのサイズを含み、第3の圧縮データが0.8メガバイトのサイズを含む場合、分析構成要素136は、第2の圧縮データのサイズに対する第2の圧縮データのサイズの比が0.625であると判定してもよい。閾値が0.8を含む場合、次いで分析構成要素136は、比が閾値を満たす(例えば、閾値内にある)と判定し得る。例えば、分析構成要素136は、0.625の比が0.8の閾値内(例えば、それ未満)であると判定してもよい。いくつかの例では、比が小さいほど、第2のデータ120の第2の部分は、第1のデータ110の第2の部分とより類似する。
【0042】
いくつかの例では、圧縮データは、辞書および/または基準を含んでもよい。例えば、圧縮構成要素128は、アルゴリズム(複数可)(例えば、LZMA、LZW、BTLZ、LZ77、LZ78など)を使用して、第1のデータ110の部分116(5)を圧縮してもよい。圧縮に基づいて、圧縮構成要素128は、第1の辞書132および第1の基準134(例えば、記号およびフレーズ基準の第1のシーケンス)を生成し得る。圧縮構成要素128は、アルゴリズム(複数可)をさらに使用して、第2のデータ120の部分116(9)を圧縮してもよい。圧縮に基づいて、圧縮構成要素128は、第2の辞書132および第2の基準134(例えば、記号およびフレーズ基準の第2のシーケンス)を生成し得る。さらに、圧縮構成要素128は、アルゴリズム(複数可)および第1の辞書132を使用して、第2のデータ120の部分116(9)を再び圧縮してもよい。例えば、圧縮構成要素128は、第1の辞書132をベースとして使用して、最初に第3の辞書132を入力してもよい。次いで、圧縮構成要素128は、追加のデータを第3の辞書に追加し得、追加のデータは、第1のデータ110の部分116(5)と第2のデータ120の第2の部分116(9)との間の差を表す。さらに、圧縮構成要素128は、第3の辞書132について第3の基準134(例えば、記号およびフレーズ基準の第3のシーケンス)を生成し得る。
【0043】
次いで、リモートシステム102は、分析構成要素136を利用して、第2の辞書132と第3の辞書132との間の差を判定し得る。次いで、分析構成要素136は、差が閾値130を満たすか否かを判定し得る。第1の例について、分析構成要素136は、第2の辞書132と第3の辞書132との間のサイズ差を判定し得る。次いで、分析構成要素136は、サイズ差がサイズ閾値130を満たすか否かを判定し得る。サイズ閾値130は、これらに限定されるものではないが、100バイト、250バイト、500バイト、1メガバイト、および/または任意の他のサイズを含み得る。例えば、第2の辞書132と第3の辞書132との間のサイズ差が0.5メガバイトであり、サイズ閾値が0.75メガバイトである場合、分析構成要素136は、サイズ差がサイズ閾値130を満たす(例えば、それ以内である)と判定し得る。
【0044】
第2の例について、分析構成要素136は、第3の辞書132のサイズと第2の辞書132に対するサイズとの比(例えば、差)を判定し得る。次いで、リモートシステムは、比が閾値130を満たすか否かを判定し得る。閾値130は、これらに限定されるものではないが、0.1、0.2、0.5、0.8、および/または任意の他の閾値を含み得る。例えば、第2の辞書132が0.5メガバイトのサイズを含み、第3の辞書132が0.8メガバイトのサイズを含む場合、リモートシステム102は、第2の辞書132のサイズと第2の辞書132のサイズとの比が0.625であると判定し得る。閾値が0.8を含む場合、リモートシステム102は、比が閾値を満たす(例えば、閾値内にある)と判定し得る。例えば、リモートシステム102は、0.625の比が0.8の閾値内(例えば、それ未満)であると判定してもよい。
【0045】
いくつかの例では、リモートシステム102は、更新構成要素138を利用して、ファイルの第2のバージョン106についてパッチファイル126を生成し得る。例えば、差が閾値130を満たすと判定することに基づいて、更新構成要素138は、第2のデータ120の部分115(9)と第1のデータ110の部分115(5)との間の差を表す変換データ140を記憶し得る。いくつかの例では、変換データ140は、第3の辞書132と第1の辞書132との差を表し得る。追加的に、更新構成要素138は、第3の辞書132のために生成された第3の基準134を表すデータを記憶してもよい。
【0046】
いくつかの例では、リモートシステム102は、次いで、第2のデータ120の他の一意の部分116(7)~(8)の各々について同様のプロセスを実行し得る。例えば、リモートシステム102は、第1のデータ110の部分116(3)に関して、第2のデータ120の部分116(8)を分析してもよい。分析中、更新構成要素138は、第2のデータ120の部分116(8)と第1のデータ110の部分116(3)との間の差が閾値130を満たすと判定し得る。判定に基づいて、更新構成要素138は、第2のデータ120の部分116(8)と第1のデータ110の部分116(3)と間の差を表す変換データ140をパッチファイル126に記憶し得る。加えて、更新構成要素138は、第2のデータ120の部分116(8)について圧縮構成要素128によって生成された第4の辞書132についての第4の基準134(例えば、記号およびフレーズ基準の第4のシーケンス)を表すデータを記憶してもよい。
【0047】
いくつかの例では、リモートシステム102は、第2のデータ120の一意の部分が、第1のデータ110の部分116(1)~(6)のうちの1つに類似していないと判定し得る。例えば、リモートシステム102は、第1のデータ110の部分116(2)に対して第2のデータ120の部分116(7)を分析し得る。分析中、更新構成要素138は、第1のデータ110の部分116(2)に対する第2のデータ120の部分116(7)の差が閾値130を満たさないと判定し得る。いくつかの実施例では、判定に基づいて、更新構成要素138は、パッチファイル126内に、第2のデータ120の部分116(7)を表す部分データ142を記憶する。いくつかの例では、更新構成要素138は、第2のデータ120の部分116(7)をファイルの第2のバージョン106と関連付けるデータを記憶し得る。
【0048】
次いで、リモートシステム102は、ネットワーク108を介して、パッチファイル126を電子デバイス112(1)~(3)に送信し得る。いくつかの例では、パッチファイル126が部分データ142を含まない場合、リモートシステム102は、第2のデータ120の部分116(7)を電子デバイス112(1)~(3)に別々に送信し得る。次いで、電子デバイス112(1)~(3)は、ファイルの第1のバージョン104、パッチファイル126、および/または第1のデータ110の部分116(1)~(6)に関連付けられた辞書132について第1のデータ110を使用し得、ファイルの第1のバージョン104をファイルの第2のバージョン106に更新する。
【0049】
例えば、電子デバイス112(1)は、第2のデータ120の部分116(1)、116(4)、および116(6)に対応する第1のデータ110の部分116(1)、116(4)、および116(6)を使用し得るが、第1のデータ110の部分116(1)、116(4)、および116(6)は、電子デバイス112(1)によって既に記憶されている。加えて、電子デバイス112(1)は、第1のデータ110の部分116(3)に関連付けられた辞書132、第2のデータ120の部分116(8)に関連付けられた会話データ140、および/または第2のデータ120の部分116(8)に関連付けられた基準134を使用し得、第1のデータ110の部分116(3)を第2のデータ120の部分116(8)に変換する。同様に、電子デバイス112(1)は、第1のデータ110の部分116(5)に関連付けられた辞書132、第2のデータ120の部分116(9)に関連付けられた会話データ140、および/または第2のデータ120の部分116(9)に関連付けられた基準134を使用し得、第1のデータ110の部分116(5)を第2のデータ120の部分116(9)に変換する。さらに、電子デバイス112(1)は、第1のデータ110の部分116(2)を第2のデータ120の部分116(7)に置き換え得る。
【0050】
図1にさらに例示されるように、リモートシステム102は、プロセッサ(複数可)144、ネットワークインターフェース(複数可)146、およびメモリ148を含んでもよく、電子デバイス112(1)は、プロセッサ(複数可)150、ネットワークインターフェース(複数可)152、およびメモリ154を含んでもよい。本明細書で使用される場合、プロセッサ(複数可)144およびプロセッサ(複数可)150などのプロセッサは、複数のプロセッサおよび/複数のコアを有するプロセッサを含んでもよい。さらに、プロセッサは、異なるタイプの1つ以上のコアを含み得る。例えば、プロセッサは、アプリケーションプロセッサユニット、グラフィック処理ユニットなどを含み得る。一実装形態では、プロセッサは、マイクロコントローラおよび/またはマイクロプロセッサを含んでもよい。プロセッサ(複数可)は、グラフィック処理ユニット(GPU)、マイクロプロセッサ、デジタル信号プロセッサ、または当該技術分野で知られている他の処理ユニットもしくは構成要素を含んでもよい。代替的に、または追加的に、本明細書で機能的に説明されるのは、少なくとも部分的に、1つ以上のハードウェアロジック構成要素によって実施されることができる。例えば、非限定的に、使用され得るハードウェアロジック部品の例示的なタイプとしては、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、特定用途向け標準製品(ASSP)、システムオンチップシステム(SOC)、コンプレックスプログラマブルロジックデバイス(CPLD)などが挙げられる。加えて、プロセッサ(複数可)の各々は、プログラム構成要素、プログラムデータ、および/または1つ以上のオペレーティングシステムも記憶し得る独自のローカルメモリを保有し得る。
【0051】
メモリ148およびメモリ154のようなメモリは、コンピュータ可読命令、データ構造、プログラム構成要素、または他のデータのような情報の記憶のための任意の方法または技術で実装される、揮発性および不揮発性メモリ、取り外し可能媒体および取り外し不可能媒体を含んでもよい。そのようなメモリは、これらに限定されるものではないが、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD-ROM、デジタル多用途ディスク(DVD)もしくは他の光メモリ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、RAIDストレージシステム、または所望の情報を記憶するために使用することができ、かつコンピューティングデバイスからアクセスすることができる任意の他の媒体を含む。メモリは、コンピュータ可読記憶媒体(「CRSM」)として実装され得、これは、メモリに記憶された命令を実行するためにプロセッサ(複数可)によってアクセス可能な任意の利用可能な物理媒体であり得る。1つの基本的な実装形態では、CRSMには、ランダムアクセスメモリ(「RAM」)およびフラッシュメモリを含み得る。他の実装では、CRSMは、限定されるものではないが、読み出し専用メモリ(「ROM」)、電気的消去可能プログラム可能読み出し専用メモリ(「EEPROM」)、または所望の情報を記憶するために使用され得、かつプロセッサ(複数可)によってアクセスされ得る、任意の他の有形媒体を含み得る。
【0052】
さらに、機能構成要素は、それぞれのメモリに記憶され得るか、または同じ機能は、代替的に、ハードウェア、ファームウェア、特定用途向け集積回路、フィールドプログラマブルゲートアレイ、またはシステムオンチップ(SoC)に実装され得る。加えて、例示されないが、本明細書で説明されるメモリなどの各対応するメモリは、ネットワークインターフェース(複数可)、対応する装置のI/Oデバイスなどのハードウェアリソースデバイスを管理し、プロセッサ上で実行するアプリケーションまたは構成要素に様々なサービスを提供するように構成された少なくとも1つのオペレーティングシステム(OS)構成要素を含み得る。そのようなOS構成要素は、FreeBSDプロジェクトによって公表されたFreeBSDオペレーティングシステムの変形例、他のUNIXまたはUNIXのような変形例、Linus Torvaldsによって公表されたLinuxオペレーティングシステムの変形例、Seattle,Washington,USAのAmazon.com Inc.のFireOSオペレーティングシステム、Redmond,Washington,USAのMicrosoft CorporationのWindowsオペレーティングシステム、San Jose,CaliforniaのLynx Software Technologies,Inc.によって公表されたLynxOS、SwedenのENEA ABによって公表された組み込みオペレーティングシステム(Enea OSE)などを実装し得る。
【0053】
ネットワークインターフェース(複数可)146およびネットワークインターフェース(複数可)152などのネットワークインターフェース(複数可)は、環境100に示される構成要素および/またはデバイスとの間、ならびに/または1つ以上の他のリモートシステム、ならびに他のネットワークデバイスとの間の通信を可能にし得る。そのようなネットワークインターフェース(複数可)は、ネットワーク108を介して通信を送信および受信するための1つ以上のネットワークインターフェースコントローラ(NIC)または他のタイプのトランシーバデバイスを含み得る。例えば、ネットワークインターフェース(複数可)の各々は、1つ以上の短距離無線通信チャネルを介した通信を可能にするために、パーソナルエリアネットワーク(PAN)構成要素を含み得る。例えば、PAN構成要素は、以下の規格IEEE 802.15.4(ZigBee)、IEEE 802.15.1(BluetoothTM)、IEEE 802.11(WiFiTM)、または任意の他のPAN通信プロトコルのうちの少なくとも1つに準拠した通信を可能にし得る。さらに、ネットワークインターフェース(複数可)の各々は、広域ネットワークを介した通信を可能にするために、広域ネットワーク(WAN)構成要素を含んでもよい。
【0054】
図2は、ファイルの第2のバージョン208を表す第2のデータ206の部分に変換され得るファイルの第1のバージョン204を表す第1のデータ202の部分を識別する例である。例えば、リモートシステム102は、第2のデータ206の部分210(3)および212(1)~(5)に関して第1のデータ202の部分210(1)~(6)を分析し得、第2のデータ206の部分(複数可)に類似する第1のデータ202の部分(複数可)を識別する。例えば、プロセス214において、リモートシステム102は、最初に、本明細書に記載のプロセス(例えば、CRC、SHA-1など)を使用して、第1のデータ202の部分210(3)が第2のデータ206の部分210(3)に対応することを識別し得る。次いで、リモートシステム102は、第1のデータ202の部分210(3)および第2のデータ206の部分210(3)を、第2のデータ206の部分(複数可)に類似する第1のデータ202の部分(複数可)を識別するための「アンカー」部分として使用してもよい。
【0055】
次に、プロセス216において、リモートシステム102は、アンカー部分に対する「隣接する」部分を分析して、隣接する部分が互いに類似しているかどうかを判定してもよい。第1の例について、リモートシステム102は、本明細書に記載のプロセス(例えば、LZMA、LZW、BTLZ、LZ77、LZ78など)のうちの1つ以上を使用して、第1のデータ202の部分210(2)を第2のデータ206の部分212(3)に対して分析し得、第1のデータ202の部分210(2)が第2のデータ206の部分212(3)に類似しているか否かを判定する。加えて、リモートシステム102は、本明細書に記載のプロセス(例えば、LZMA、LZW、BTLZ、LZ77、LZ78など)のうちの1つ以上を使用して、第1のデータ202の部分210(4)を第2のデータ206の部分212(4)に対して分析し得、第1のデータ202の部分210(4)が第2のデータ206の部分212(4)に類似しているか否かを判定する。
【0056】
次に、プロセス218において、リモートシステム102が2つの部分が互いに類似していると判定した場合に、リモートシステムは隣接部分を分析し続けてもよい。第1の例について、リモートシステム102は、第1のデータ202の部分210(4)が第2のデータ206の部分212(4)に類似している(例えば、第1のデータ202の部分210(4)と第2のデータ206の部分212(4)との差が閾値を満たす)と判定してもよい。判定に基づいて、リモートシステム102は、本明細書に記載のプロセス(例えば、LZMA、LZW、BTLZ、LZ77、LZ78など)のうちの1つ以上を使用して、第1のデータ202の部分210(5)を第2のデータ206の部分212(5)に対して分析し得、第1のデータ202の部分210(5)が第2のデータ206の部分212(5)に類似しているか否かを判定する。
【0057】
第2の例について、リモートシステム102は、第1のデータ202の部分210(2)が第2のデータ206の部分212(3)と類似していない(例えば、第1のデータ202の部分210(2)と第2のデータ206の部分212(3)との差が閾値を満たさない)と判定してもよい。いくつかの例では、
図2の例に例示されるように、判定に基づいて、リモートシステム102は、第2のデータ206の部分212(2)に関して第1のデータ202の部分210(1)を分析しないと判定し得る。しかしながら、他の例では、リモートシステム102は、本明細書に記載されるプロセス(例えば、LZMA、LZW、BTLZ、LZ77、LZ78など)のうちの1つ以上を使用して、第1のデータ202の部分210(1)を、第2のデータ206の部分212(2)に対して分析し得、第1のデータ202の部分210(1)が第2のデータ206の部分212(2)に類似しているか否かを判定する。
【0058】
図3は、ファイルの様々なバージョンのためのパッチファイルを生成するリモートシステム102の例である。例えば、リモートシステム102は、ファイルの第1のバージョン302、ファイルの第2のバージョン304、ファイルの第3のバージョン306、およびファイルの第4のバージョン308を記憶してもよい。本明細書に記載のプロセスを使用して、リモートシステム102は、ファイルの第1のバージョン302をファイルの第2のバージョン304に更新するための第1のパッチファイル310、ファイルの第1のバージョン302をファイルの第3のバージョン306に更新するための第2のパッチファイル312、ファイルの第1のバージョン302をファイルの第4のバージョン308に更新するための第3のパッチファイル314、ファイルの第2のバージョン304をファイルの第3のバージョン306に更新するための第4のパッチファイル316、ファイルの第2のバージョン304をファイルの第4のバージョン308に更新するための第5のパッチファイル318、および/またはファイルの第3のバージョン306をファイルの第4のバージョン308に更新するための第6のパッチファイル320を生成し得る。
【0059】
リモートシステム102は、次いで、電子デバイスに記憶されたファイルの現在のバージョンに基づいて、パッチファイル310~320を電子デバイスに送信してもよい。第1の例では、電子デバイス322の第1のグループは、ファイルの第3のバージョン306を記憶してもよい。したがって、リモートシステム102は、ファイルの第3のバージョン306をファイルの第4のバージョン308に更新するために、第1のグループの電子デバイス322と第6のパッチファイル320とを送信し得る。加えて、第2のグループの電子デバイス324は、ファイルの第2のバージョン304を記憶してもよい。したがって、リモートシステム102は、ファイルの第2のバージョン304をファイルの第4のバージョン308に更新するために、第2のグループの電子デバイス324に第5のパッチファイル318を送信し得る。さらに、第3のグループの電子デバイス326は、ファイルの第1のバージョン302を記憶し得る。したがって、リモートシステム102は、ファイルの第1のバージョン302をファイルの第4のバージョン308に更新するために、第3のグループの電子デバイス326に第1のパッチファイル310を送信し得る。
【0060】
いくつかの例では、代替として、パッチファイル310~320の各々を生成することから、リモートシステム102は、ファイルの最も一般的な更新のためにパッチファイルを生成し得る。例えば、
図3の例では、第1の電子デバイスグループ322は、ファイルの第3のバージョン306をファイルの第4のバージョン308に更新する4つの電子デバイスを含み、第2の電子デバイスグループ324は、ファイルの第2のバージョン304をファイルの第4のバージョン308に更新する第4の電子デバイスを含み、第3の電子デバイスグループ326は、ファイルの第1のバージョン302をファイルの第4のバージョン308に更新する2つの電子デバイスを含む。したがって、いくつかの例では、リモートシステム102は、ファイルの第2のバージョン304をファイルの第4のバージョン308に更新するための第5のパッチファイル318、およびファイルの第3のバージョン306をファイルの第4のバージョン308に更新するための第6のパッチファイル320のみを生成し得る。しかしながら、2つの電子デバイスのみがファイルの第1のバージョン302をファイルの第4のバージョン308に更新しているため、リモートシステム102は第1のパッチファイル310を生成しなくてもよい。
【0061】
本明細書で説明されるプロセスは、ロジックフローグラフ内のブロックの集合として示され、ハードウェア、ソフトウェア、またはそれらの組み合わせで実装され得る一連の動作を表す。ソフトウェアのコンテキストにおいて、ブロックは、1つ以上のプロセッサによって実行される場合、詳述された動作を実行するコンピュータ実行可能命令を表す。一般的に、コンピュータ実行可能命令は、特定の機能を実行するかまたは特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、部品、データ構造などを含む。動作が記載される順序は、限定として解釈されることを意図するものではなく、記載される任意の数のブロックは、プロセスを実装するために任意の順序で、および/または並列に組み合わせることができる。
【0062】
図4は、ファイルのバージョンからファイルの第2のバージョンに更新するためのデータを生成するための例示的なプロセス400のフロー図である。402において、プロセス400は、ファイルの第1のバージョンを表す第1のデータを記憶することを含み得る。例えば、リモートシステム102は、ファイルの第1のデータを表す第1のデータを記憶し得る。いくつかの例では、ファイルは、ゲームに関連付けられてもよい。いくつかの例では、リモートシステム102は、ファイルの開発者と関連付けられた1つ以上のコンピューティングデバイスから第1のデータを受信し得る。
【0063】
404において、プロセス400は、ファイルの第1のバージョンを表す第1のデータの複数の第1の部分を識別することを含み得る。例えば、リモートシステム102は、ファイルの第1のバージョンを表す第1のデータの複数の第1の部分を識別し得る。第1のデータの複数の第1の部分は、第1のデータの連続するセクションを含み得る。例えば、第1のデータの複数の第1の部分は、第1のデータの500バイトの連続セクション、第1のデータの1メガバイトの連続セクション、および/または第1のデータの5メガバイトの連続セクションなどを含み得るが、これらに限定されない。
【0064】
406で、プロセス400は、ファイルの第2のバージョンを表す第2のデータを記憶することを含み得る。例えば、リモートシステム102は、ファイルの第2のバージョンを表す第2のデータを記憶し得る。いくつかの例では、第2のデータを生成するために、データが第1のデータに追加されてもよく、第1のデータから削除されてもよく、第1のデータ内で変更される等でもよい。いくつかの例では、リモートシステム102は、ファイルの開発者と関連付けられた1つ以上のコンピューティングデバイスから第2のデータを受信し得る。
【0065】
408で、プロセス400は、ファイルの第2のバージョンを表す第2のデータの複数の第2の部分を識別することを含み得る。例えば、リモートシステム102は、ファイルの第2のバージョンを表す第2のデータの複数の第2の部分を識別し得る。第2のデータの複数の第2の部分は、第2のデータの連続するセクションを含んでもよい。例えば、第2のデータの複数の第2の部分は、第2のデータの500バイトの連続セクション、第2のデータの1メガバイトの連続セクション、および/または第2のデータの5メガバイトの連続セクションなどを含み得るが、これらに限定されない。いくつかの例では、第2のデータの複数の第2の部分は、第1のデータの第1の部分と同様のサイズを含み得る。
【0066】
410において、プロセス400は、複数の第1の部分の第1の部分が複数の第2の部分の第1の部分に対応することを判定することを含み得る。例えば、リモートシステム102は、複数の第1の部分の第1の部分が、複数の第2の部分の第1の部分に対応すると判定し得る。いくつかの例では、判定を行うために、リモートシステム102は、CRCを使用して、複数の第1の部分の第1の部分についての第1のチェック値および複数の第2の部分の第1の部分についての第2のチェック値を判定し得る。次いで、リモートシステム102は、第1のチェック値が第2のチェック値と同じであると判定し得る。いくつかの例では、判定を行うために、リモートシステム102は、SHA-1を使用して、複数の第1の部分の第1の部分の第1のハッシュ値および複数の第2の部分の第1の部分の第2のハッシュ値を判定し得る。次いで、リモートシステム102は、第1のハッシュ値が第2のハッシュ値と同じであると判定し得る。
【0067】
412において、プロセス400は、複数の第1の部分の第1の部分を使用して複数の第1の部分の第2の部分を識別することを含み得る。例えば、リモートシステム102は、複数の第1の部分の第1の部分を使用して、複数の第1の部分の第2の部分を識別し得る。いくつかの例では、リモートシステム102は、複数の第1の部分の第2の部分を、複数の第1の部分の第1の部分に続く第1のデータの一部として識別し得る。いくつかの例では、リモートシステム102は、複数の第1の部分の第1の部分に先行する第1のデータの一部として、複数の第1の部分の第2の部分を識別し得る。
【0068】
414において、プロセス400は、複数の第2の部分の第1の部分を使用して、複数の第2の部分の第2の部分を識別することを含み得る。例えば、リモートシステム102は、複数の第2の部分の第1の部分を使用して、複数の第2の部分の第2の部分を識別し得る。いくつかの例では、リモートシステム102は、複数の第2の部分の第2の部分を、複数の第2の部分の第1の部分に続く第2のデータの一部として識別し得る。いくつかの例では、リモートシステム102は、複数の第2の部分の第2の部分を、複数の第2の部分の第1の部分に先行する第1のデータの一部として識別し得る。
【0069】
416において、プロセス400は、少なくとも第1の辞書を生成することによって、複数の第1の部分の第2の部分を圧縮することを含み得る。例えば、リモートシステム102は、少なくとも第1の辞書を生成することによって、複数の第1の部分の第2の部分を圧縮し得る。いくつかの例では、リモートシステム102は、1つ以上の圧縮技術(例えば、LZMA、LZW、BTLZ、LZ77、LZ78など)に関連付けられた1つ以上のアルゴリズムを使用して、複数の第1の部分の第2の部分を圧縮する。いくつかの例では、リモートシステム102は、1つ以上の他の圧縮技術を使用して、複数の第1の部分の第2の部分を圧縮する。
【0070】
418において、プロセス400は、少なくとも第2の辞書を生成することによって、複数の第2の部分の第2の部分を圧縮することを含み得る。例えば、リモートシステム102は、少なくとも第2の辞書を生成することによって、複数の第2の部分の第2の部分を圧縮し得る。いくつかの例では、リモートシステム102は、1つ以上の圧縮技術(例えば、LZMA、LZW、BTLZ、LZ77、LZ78など)に関連付けられた1つ以上のアルゴリズムを使用して、複数の第2の部分の第2の部分を圧縮する。いくつかの例では、リモートシステム102は、1つ以上の他の圧縮技術を使用して、複数の第2の部分の第2の部分を圧縮する。
【0071】
420において、プロセス400は、第1の辞書を使用して、第3の辞書および基準を少なくとも生成することによって、複数の第2の部分の第2の部分を圧縮することを含み得る。例えば、リモートシステム102は、第1の辞書を使用して少なくとも第3の辞書および基準を生成することによって、複数の第1の部分の第2の部分を圧縮してもよい。例えば、リモートシステム102は、第1の辞書をベースとして使用してもよい。次いで、リモートシステム102は、第3の辞書を生成するために、複数の第2の部分の第2の部分に含まれる第1のデータに基づいて、追加のデータを第1の辞書に追加し得る。いくつかの例では、リモートシステム102は、1つ以上の圧縮技術(例えば、LZMA、LZW、BTLZ、LZ77、LZ78など)に関連付けられた1つ以上のアルゴリズムを使用して、複数の第2の部分の第2の部分を圧縮する。いくつかの例では、リモートシステム102は、1つ以上の他の圧縮技術を使用して、複数の第2の部分の第2の部分を圧縮する。
【0072】
422において、プロセス400は、第2の辞書および第3の辞書を使用して、複数の第1の部分の第2の部分と複数の第2の部分の第2の部分との間の差を判定することを含み得る。例えば、リモートシステム102は、第2の辞書および第3の辞書を使用して、複数の第1の部分の第2の部分と複数の第2の部分の第2の部分との間の差を判定し得る。いくつかの例では、リモートシステム102は、その差を第2の辞書と第3の辞書との間のサイズ差として判定し得る。いくつかの例では、リモートシステム102は、第2の辞書と第3の辞書との間の比として差を判定し得る。
【0073】
424で、プロセス400は、差が閾値を満たすか否かを判定することを含み得る。例えば、リモートシステム102は、差分が閾値差分を満たすか否かを判定し得る。いくつかの例では、差がサイズ差を含む場合、リモートシステム102は、サイズ差がサイズ閾値内にあるときにサイズ差が閾値を満たすと判定し得る。いくつかの例では、差が比を含む場合、リモートシステム102は、比が比閾値内にあるときにサイズ差が閾値を満たすと判定し得る。
【0074】
424において、差が閾値を満たさないと判定される場合、次いで426において、プロセス400は、複数の第2の部分の第2の部分が複数の第1の部分の第2の部分に類似していないと判定することを含み得る。例えば、リモートシステム102が、差が閾値を満たさないと判定する場合、リモートシステム102は、複数の第2の部分の第2の部分が複数の第1の部分の第2の部分と類似していないと判定し得る。加えて、いくつかの例では、リモートシステム102が、ファイルの第1のバージョンをファイルの第2のバージョンに更新するための要求を電子デバイスから受信する場合、リモートシステム102は、複数の第2の部分の第2の部分を電子デバイスに送信し得る。
【0075】
424において、差が閾値を満たすと判定される場合、次いで428において、プロセス400は、複数の第2の部分の第2の部分が複数の第1の部分の第2の部分と類似していると判定することを含み得る。例えば、リモートシステム102が、差分が閾値を満たすと判定する場合、リモートシステム102は、複数の第2の部分の第2の部分が複数の第1の部分の第2の部分と類似していると判定し得る。
【0076】
430において、プロセス400は、ファイルの第2のバージョンのパッチファイルとして第3の辞書および/または基準の少なくとも一部分を記憶することを含み得る。例えば、リモートシステム102は、第3の辞書の少なくとも一部および基準を、ファイルの第2のバージョンのパッチファイルとして記憶し得る。加えて、いくつかの例では、リモートシステム102が、ファイルの第1のバージョンをファイルの第2のバージョンに更新するための要求を電子デバイスから受信する場合、リモートシステム102は、複数の第2の部分の第2の部分ではなく、パッチファイルを電子デバイスに送信し得る。
【0077】
いくつかの例では、リモートシステム102は、第1のデータおよび第2のデータの追加の部分について少なくとも410~430を実行し得る。加えて、第2のデータの追加部分(複数可)が第1のデータの追加部分(複数可)に類似していると判定することに基づいて、リモートシステム102は、ファイルの第2のバージョンのパッチファイルにデータを追加し続けてもよい。
【0078】
図5は、第2のデータの一部に類似する第1のデータの一部を識別するための例示的なプロセス500のフローチャートである。502において、プロセス500は、ファイルの第1のバージョンを表す第1のデータを記憶することを含み得る。例えば、リモートシステム102は、ファイルの第1のデータを表す第1のデータを記憶し得る。いくつかの例では、ファイルは、ゲームに関連付けられてもよい。いくつかの例では、リモートシステム102は、ファイルの開発者と関連付けられた1つ以上のコンピューティングデバイスから第1のデータを受信し得る。
【0079】
504で、プロセス500は、ファイルの第2のバージョンを表す第2のデータを記憶することを含み得る。例えば、リモートシステム102は、ファイルの第2のバージョンを表す第2のデータを記憶し得る。いくつかの例では、第2のデータを生成するために、データが第1のデータに追加されてもよく、第1のデータから削除されてもよく、第1のデータ内で変更される等でもよい。いくつかの例では、リモートシステム102は、ファイルの開発者と関連付けられた1つ以上のコンピューティングデバイスから第2のデータを受信し得る。
【0080】
506において、プロセス500は、第1のデータの第1の部分が第2のデータの第1の部分に対応することを判定することを含み得る。例えば、リモートシステム102は、第1のデータの第1の部分が、第2のデータの第1の部分に対応すると判定し得る。いくつかの例では、判定を行うために、リモートシステム102は、CRCを使用して、第1のデータの第1の部分についての第1のチェック値および第2のデータの第1の部分についての第2のチェック値を判定し得る。次いで、リモートシステム102は、第1のチェック値が第2のチェック値と同じであると判定し得る。いくつかの例では、判定を行うために、リモートシステム102は、SHA-1を使用して、第1のデータの第1の部分についての第1のハッシュ値および第2のデータの第1の部分についての第2のハッシュ値を判定し得る。次いで、リモートシステム102は、第1のハッシュ値が第2のハッシュ値と同じであると判定し得る。
【0081】
508において、プロセス500は、第1のデータの第1の部分を使用して、第1のデータの第2の部分を識別することを含み得る。例えば、リモートシステム102は、第1のデータの第1の部分を使用して、第1のデータの第2の部分を識別し得る。いくつかの例では、リモートシステム102は、第1のデータの第1の部分に続く第1のデータの一部として第1のデータの第2の部分を識別し得る。いくつかの例では、リモートシステム102は、第1のデータの第2の部分を、第1のデータの第1の部分に先行する第1のデータの一部として識別し得る。
【0082】
510において、プロセス500は、第2のデータの第1の部分を使用して、第2のデータの第2の部分を識別することを含み得る。例えば、リモートシステム102は、第2のデータの第1の部分を使用して、第2のデータの第2の部分を識別してもよい。いくつかの例では、リモートシステム102は、第2のデータの第2の部分を、第2のデータの第1の部分に続く第2のデータの一部として識別し得る。いくつかの例では、リモートシステム102は、第2のデータの第2の部分を、第2のデータの第1の部分に先行する第1のデータの一部として識別し得る。
【0083】
512では、プロセス500は、第2のデータの第2の部分と第1のデータの第2の部分との間の差を表す第3のデータを生成することを含み得る。例えば、リモートシステム102は、第2のデータの第2の部分と第1のデータの第2の部分との間の差を表す第3のデータを生成し得る。いくつかの例では、差は、第2のデータの第2の部分について生成される辞書の一部を含み得、辞書は、第1のデータの第2の部分と関連付けられた辞書を使用して生成される。いくつかの例では、この差は、第2のデータの第2の部分のために生成された辞書と関連付けられた基準を含み得る。
【0084】
514で、プロセス500は、ファイルに関連する第3のデータを記憶することを含み得る。例えば、リモートシステム102は、ファイルに関連する第3のデータを記憶することができる。次いで、第3のデータは、第1のデータの第2の部分を第2のデータの第2の部分に変換するために使用され得る。
【0085】
図6は、第2のデータの一部に類似する第1のデータの一部を識別するための第2の例示的なプロセス600のフロー図である。602において、プロセス600は、第1のデータの第1の部分を識別することを含み得る。例えば、リモートシステム102は、第1のデータの第1の部分を識別し得る。いくつかの例では、第1のデータは、ファイルの第1のバージョンを表し得る。いくつかの例では、リモートシステム102は、ファイルの開発者と関連付けられた1つ以上のコンピューティングデバイスから第1のデータを受信し得る。
【0086】
604において、プロセス600は、第2のデータの第2の部分を識別することを含み得る。例えば、リモートシステム102は、第2のデータの第2の部分を識別し得る。いくつかの例では、第2のデータは、ファイルの第2のバージョンを表し得る。例えば、第2のデータを生成するために、データは、第1のデータに追加されてもよく、第1のデータから削除されてもよく、第1のデータ内で変更されるなどでもよい。いくつかの例では、リモートシステム102は、ファイルの開発者と関連付けられた1つ以上のコンピューティングデバイスから第2のデータを受信し得る。
【0087】
606において、プロセス600は、第1のデータの第1の部分が第2のデータの第1の部分に対応すると判定することを含み得る。例えば、リモートシステム102は、第1のデータの第1の部分が、第2のデータの第1の部分に対応すると判定し得る。いくつかの例では、判定を行うために、リモートシステム102は、CRCを使用して、第1のデータの第1の部分についての第1のチェック値および第2のデータの第1の部分についての第2のチェック値を判定し得る。次いで、リモートシステム102は、第1のチェック値が第2のチェック値と同じであると判定し得る。いくつかの例では、判定を行うために、リモートシステム102は、SHA-1を使用して、第1のデータの第1の部分についての第1のハッシュ値および第2のデータの第1の部分についての第2のハッシュ値を判定し得る。次いで、リモートシステム102は、第1のハッシュ値が第2のハッシュ値と同じであると判定し得る。
【0088】
608において、プロセス600は、第1のデータの第1の部分を使用して、第1のデータの第2の部分を識別することを含み得る。例えば、リモートシステム102は、第1のデータの第1の部分を使用して、第1のデータの第2の部分を識別し得る。いくつかの例では、リモートシステム102は、第1のデータの第1の部分に続く第1のデータの一部として第1のデータの第2の部分を識別し得る。いくつかの例では、リモートシステム102は、第1のデータの第2の部分を、第1のデータの第1の部分に先行する第1のデータの一部として識別し得る。
【0089】
610において、プロセス600は、第2のデータの第1の部分を使用して、第2のデータの第2の部分を識別することを含み得る。例えば、リモートシステム102は、第2のデータの第1の部分を使用して、第2のデータの第2の部分を識別してもよい。いくつかの例では、リモートシステム102は、第2のデータの第2の部分を、第2のデータの第1の部分に続く第2のデータの一部として識別し得る。いくつかの例では、リモートシステム102は、第2のデータの第2の部分を、第2のデータの第1の部分に先行する第1のデータの一部として識別し得る。
【0090】
612では、プロセス600は、第1のデータの第2の部分に対して、第2のデータの第2の部分を分析することを含み得る。例えば、リモートシステム102は、第1のデータの第2の部分に対して、第2のデータの第2の部分を分析し得る。いくつかの例では、分析を実行するために、リモートシステム102は、第2のデータの第2の部分と第1のデータの第2の部分との間の差を表す第3のデータを生成し得る。いくつかの例では、差は、第2のデータの第2の部分について生成される辞書の一部を含み得、辞書は、第1のデータの第2の部分と関連付けられた辞書を使用して生成される。いくつかの例では、この差は、第2のデータの第2の部分のために生成された辞書と関連付けられた基準を含み得る。
【0091】
本主題は、構造的特徴に特有の言語で説明されているが、添付の特許請求の範囲に定義された主題は、必ずしも説明された特定の特徴に限定されるものではないことを理解されたい。むしろ、特定の特徴は、特許請求の範囲を実装する例示的な形態として開示される。
【国際調査報告】