IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ バルブ コーポレーションの特許一覧

<>
  • 特表-効率的なファイル配信技術 図1
  • 特表-効率的なファイル配信技術 図2
  • 特表-効率的なファイル配信技術 図3
  • 特表-効率的なファイル配信技術 図4
  • 特表-効率的なファイル配信技術 図5A
  • 特表-効率的なファイル配信技術 図5B
  • 特表-効率的なファイル配信技術 図5C
  • 特表-効率的なファイル配信技術 図5D
  • 特表-効率的なファイル配信技術 図5E
  • 特表-効率的なファイル配信技術 図5F
  • 特表-効率的なファイル配信技術 図5G
  • 特表-効率的なファイル配信技術 図5H
  • 特表-効率的なファイル配信技術 図6A
  • 特表-効率的なファイル配信技術 図6B
  • 特表-効率的なファイル配信技術 図7
  • 特表-効率的なファイル配信技術 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-06-15
(54)【発明の名称】効率的なファイル配信技術
(51)【国際特許分類】
   G06F 8/65 20180101AFI20230608BHJP
【FI】
G06F8/65
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022563998
(86)(22)【出願日】2021-05-12
(85)【翻訳文提出日】2022-10-20
(86)【国際出願番号】 US2021070545
(87)【国際公開番号】W WO2021232059
(87)【国際公開日】2021-11-18
(31)【優先権主張番号】16/874,234
(32)【優先日】2020-05-14
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】517160525
【氏名又は名称】バルブ コーポレーション
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】シャーマン、テイラー・カーステン
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376CA14
(57)【要約】
本明細書において説明されるものは、数ある中でも、クライアントコンピューティングデバイスが、以前のバージョンから新たなバージョンに効率的に更新し得るように、新たなバージョンに対して新しい、アプリケーションの新たなバージョンの部分と、アプリケーションの新たなバージョン及び以前のバージョンに共通する、新たなバージョンの部分と、を識別するための技術、デバイス、及びシステムである。
【選択図】図1
【特許請求の範囲】
【請求項1】
方法であって、
ファイルの第1のバージョンの第1の部分が、前記ファイルの前記第1のバージョンにおける位置を指す第1のバイトオフセット値を含むと判定することと、
前記第1の部分と、前記第1の部分よりも前の少なくとも1バイトと、前記第1の部分よりも後の少なくとも1バイトと、を含む、前記ファイルの前記第1のバージョンの第2の部分を定義することと、
前記第2の部分に後続する、前記ファイルの前記第1のバージョンの第3の部分が、前記ファイルの前記第1のバージョンにおける位置を指すバイトオフセット値を含まないと判定することと、
前記第3の部分が閾値サイズよりも大きいと判定することと、
前記第3の部分が前記閾値サイズよりも大きいと判定することに少なくとも部分的に応答して、前記第3の部分よりも前の前記ファイルの前記第1のバージョンの第4の部分を識別する第1のデータを生成することであって、前記第4の部分が、少なくとも前記第2の部分を含む、生成することと、
前記第3の部分に後続する前記ファイルの前記第1のバージョンの第5の部分が、前記ファイルの前記第1のバージョンにおける位置を指す第2のバイトオフセット値を含むと判定することと、
前記第5の部分と、前記第5の部分よりも前の少なくとも1バイトと、前記第5の部分よりも後の少なくとも1バイトと、を含む、前記ファイルの前記第1のバージョンの第6の部分を定義することと、
前記ファイルの前記第1のバージョンの第7の部分を識別する第2のデータを生成することであって、前記第7の部分が、前記第4の部分と前記第6の部分との間に存在する、生成することと、を含む、方法。
【請求項2】
前記第2のデータを、前記ファイルの第2のバージョンの第1の部分を表す第3のデータと比較することと、
前記第2のデータが、前記第3のデータに対応すると判定することと、
前記第7の部分が、前記ファイルの前記第2のバージョンの前記第1の部分に対応すると判定することと、を更に含む、請求項1に記載の方法。
【請求項3】
前記ファイルの前記第1のバージョンに関連するマニフェストに、前記第7の部分の先頭に関連するオフセット値が、前記ファイルの前記第2のバージョンの前記第1の部分に関連する前記第3のデータに対応することを示す指標を記憶することを更に含む、請求項2に記載の方法。
【請求項4】
前記第1のデータを、前記ファイルの第2のバージョンの第1の部分を表す第3のデータと比較することと、
前記第1のデータが、前記第3のデータに対応すると判定することと、
前記第4の部分が、前記ファイルの前記第2のバージョンの前記第1の部分に対応すると判定することと、を更に含む、請求項1に記載の方法。
【請求項5】
システムであって、
1つ以上のプロセッサと、
コンピュータ実行可能命令を記憶する1つ以上のコンピュータ読み取り可能媒体と、を備え、前記コンピュータ実行可能命令は、実行されたときに、前記1つ以上のプロセッサに、
ファイルの第1のバージョンの第1の部分が、1つ以上の基準を満たすと判定することと、
前記第1の部分に後続する前記ファイルの前記第1のバージョンの第2の部分が、前記1つ以上の基準を満たさないと判定することと、
前記第2の部分に後続する前記ファイルの前記第1のバージョンの第3の部分が、前記1つ以上の基準を満たすと判定することと、
前記第2の部分を識別する第1のデータを生成することと、
前記第1のデータを、前記ファイルの第2のバージョンの第1の部分を識別する第2のデータと比較することと、を含む行為を実行させる、システム。
【請求項6】
前記ファイルの前記第1のバージョンの前記第1の部分が、前記1つ以上の基準を満たすと判定することは、前記ファイルの前記第1のバージョンの前記第1の部分が、前記ファイルの前記第1のバージョンにおける位置を指すバイトオフセット値を含むと判定することを含む、請求項5に記載のシステム。
【請求項7】
前記ファイルの前記第1のバージョンの前記第1の部分が、前記1つ以上の基準を満たすと判定することは、前記ファイルの前記第1のバージョンの前記第1の部分が、閾値数よりも小さい数に対応すると判定することを含む、請求項5に記載のシステム。
【請求項8】
前記ファイルの前記第1のバージョンの前記第1の部分が、前記1つ以上の基準を満たすと判定することは、前記ファイルの前記第1のバージョンの前記第1の部分が、第1の閾値数よりも小さく、かつ第2の閾値数よりも大きい数に対応すると判定することを含む、請求項5に記載のシステム。
【請求項9】
前記1つ以上のコンピュータ読み取り可能媒体が、コンピュータ実行可能命令を更に記憶し、前記コンピュータ実行可能命令は、実行されたときに、前記1つ以上のプロセッサに、
前記第2の部分が閾値サイズよりも大きいと判定することを含む行為を実行させ、
前記第1のデータを生成することが、前記第2の部分が閾値サイズよりも大きいと判定することに少なくとも部分的に応答して、前記第1のデータを生成することを含む、請求項5に記載のシステム。
【請求項10】
前記1つ以上のコンピュータ読み取り可能媒体が、コンピュータ実行可能命令を更に記憶し、前記コンピュータ実行可能命令は、実行されたときに、前記1つ以上のプロセッサに、
前記第2の部分が閾値サイズよりも大きいと判定することと、
前記第2の部分が前記閾値サイズよりも大きいと判定することに少なくとも部分的に応答して、前記ファイルの前記第1のバージョンの第4の部分を識別する第3のデータを生成することであって、前記第4の部分が、前記第2の部分よりも前にあり、前記ファイルの前記第1のバージョンの少なくとも前記第1の部分を含む、生成することと、を含む行為を実行させる、請求項5に記載のシステム。
【請求項11】
前記1つ以上のコンピュータ読み取り可能媒体は、コンピュータ実行可能命令を更に記憶し、前記コンピュータ実行可能命令は、実行されたときに、前記1つ以上のプロセッサに、
前記ファイルの前記第1のバージョンの第4の部分を定義することであって、前記第4の部分が、前記ファイルの前記第1のバージョンの前記第1の部分と、前記第1の部分に後続する少なくとも1バイトと、を含む、定義することと、
前記ファイルの前記第1のバージョンの第5の部分を定義することであって、前記第5の部分が、前記第3の部分と、前記第3の部分よりも前の少なくとも1バイトと、を含む、定義することと、を含む行為を実行させ、
前記第2の部分が、前記第4の部分と前記第5の部分との間に存在する、請求項5に記載のシステム。
【請求項12】
前記1つ以上のコンピュータ読み取り可能媒体が、コンピュータ実行可能命令を更に記憶し、前記コンピュータ実行可能命令は、実行されたときに、前記1つ以上のプロセッサに、
前記比較することに少なくとも部分的に基づいて、前記第3の部分が前記ファイルの前記第2のバージョンの前記第1の部分に対応すると判定することと、
前記ファイルの前記第1のバージョンに関連するマニフェストに、前記第3の部分の先頭に関連するオフセット値が、前記ファイルの前記第2のバージョンの前記第1の部分に関連する第2のデータに対応することを示す指標を記憶することと、を含む行為を実行させる、請求項5に記載のシステム。
【請求項13】
前記第1のデータを生成することが、前記第2の部分を使用してチェック値を生成することと、前記第2の部分を使用してハッシュ値を生成することと、を含む、請求項5に記載のシステム。
【請求項14】
前記1つ以上のコンピュータ読み取り可能媒体が、コンピュータ実行可能命令を更に記憶し、前記コンピュータ実行可能命令は、実行されたときに、前記1つ以上のプロセッサに、
前記ファイルの前記第1のバージョンの前記第1の部分が、前記1つ以上の基準を満たすと判定する前に、前記ファイルの前記第1のバージョンの第4の部分に関連する第2のデータを生成することと、
前記第2のデータを、前記ファイルの前記第2のバージョンのそれぞれの部分と関連付けられたそれぞれのデータと比較することと、
前記第2のデータが、前記それぞれのデータに対応しないと判定することと、を含む行為を実行させ、
前記ファイルの前記第1のバージョンの前記第1の部分が、前記1つ以上の基準を満たすと判定することは、前記第2のデータが、前記それぞれのデータに対応しないと判定することに少なくとも部分的に応答して、前記ファイルの前記第1のバージョンの第1の部分が、前記1つ以上の基準を満たすと判定することを含む、請求項5に記載のシステム。
【請求項15】
方法であって、
ファイルの第1のバージョンの第1の部分が、1つ以上の基準を満たすと判定することと、
前記第1の部分に後続する前記ファイルの前記第1のバージョンの第2の部分が、前記1つ以上の基準を満たさないと判定することと、
前記第2の部分に後続する前記ファイルの前記第1のバージョンの第3の部分が、前記1つ以上の基準を満たすと判定することと、
前記第2の部分を識別する第1のデータを生成することと、
前記第1のデータを、前記ファイルの第2のバージョンの第1の部分を識別する第2のデータと比較することと、を含む、方法。
【請求項16】
前記ファイルの前記第1のバージョンの前記第1の部分が、前記1つ以上の基準を満たすと判定することは、前記ファイルの前記第1のバージョンの前記第1の部分が、前記ファイルの前記第1のバージョンにおける位置を指すバイトオフセット値を含むと判定することを含む、請求項15に記載の方法。
【請求項17】
前記ファイルの前記第1のバージョンの前記第1の部分が、前記1つ以上の基準を満たすと判定することは、前記ファイルの前記第1のバージョンの前記第1の部分が、閾値数よりも小さい数に対応すると判定することを含む、請求項15に記載の方法。
【請求項18】
前記ファイルの前記第1のバージョンの前記第1の部分が、前記1つ以上の基準を満たすと判定することは、前記ファイルの前記第1のバージョンの前記第1の部分が、第1の閾値数よりも小さく、かつ第2の閾値数よりも大きい数に対応すると判定することを含む、請求項15に記載の方法。
【請求項19】
前記第2の部分が閾値サイズよりも大きいと判定することを更に含み、
前記第1のデータを生成することが、前記第2の部分が閾値サイズよりも大きいと判定することに少なくとも部分的に応答して、前記第1のデータを生成することを含む、請求項15に記載の方法。
【請求項20】
前記第2の部分が閾値サイズよりも大きいと判定することと、
前記第2の部分が前記閾値サイズよりも大きいと判定することに少なくとも部分的に応答して、前記ファイルの前記第1のバージョンの第4の部分を識別する第3のデータを生成することであって、前記第4の部分が、前記第2の部分よりも前にあり、前記ファイルの前記第1のバージョンの少なくとも前記第1の部分を含む、生成することと、を更に含む、請求項15に記載の方法。
【請求項21】
前記ファイルの前記第1のバージョンの第4の部分を定義することであって、前記第4の部分が、前記ファイルの前記第1のバージョンの前記第1の部分と、前記第1の部分に後続する少なくとも1バイトと、を含む、定義することと、
前記ファイルの前記第1のバージョンの第5の部分を定義することであって、前記第5の部分が、前記第3の部分と、前記第3の部分よりも前の少なくとも1バイトと、を含む、定義することと、を更に含み、
前記第2の部分が、前記第4の部分と前記第5の部分との間に存在する、請求項15に記載の方法。
【請求項22】
前記比較することに少なくとも部分的に基づいて、前記第3の部分が、前記ファイルの前記第2のバージョンの前記第1の部分に対応すると判定することと、
前記ファイルの前記第1のバージョンに関連するマニフェストに、前記第3の部分の先頭と関連付けられたオフセット値が、前記ファイルの前記第2のバージョンの前記第1の部分と関連付けられた前記第2のデータに対応することを示す指標を記憶することと、を更に含む、請求項15に記載の方法。
【請求項23】
前記ファイルの前記第1のバージョンの前記第1の部分が、前記1つ以上の基準を満たすと判定する前に、前記ファイルの前記第1のバージョンの第4の部分と関連付けられた第2のデータを生成することと、
前記第2のデータを、前記ファイルの前記第2のバージョンのそれぞれの部分と関連付けられたそれぞれのデータと比較することと、
前記第2のデータが、前記それぞれのデータに対応しないと判定することと、を更に含み、
前記ファイルの前記第1のバージョンの前記第1の部分が、前記1つ以上の基準を満たすと判定することは、前記第2のデータが前記それぞれのデータに対応しないと判定することに少なくとも部分的に応答して、前記ファイルの前記第1のバージョンの前記第1の部分が、前記1つ以上の基準を満たすと判定することを含む、請求項15に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2020年5月14日に出願された「EFFICIENT FILE-DELIVERY TECHNIQUES」と題された米国特許出願第16/874,234号に対する優先権を主張するPCT出願であり、その内容全体が参照により本明細書に組み込まれたものとする。
【背景技術】
【0002】
電子デバイスにおけるコンテンツアイテムの消費が増加し続けるにつれて、利用可能なコンテンツアイテムの量も増加し続けている。例えば、ストリーミング又はダウンロードのために利用可能な曲、映画、テレビ番組及びゲームの数は、近年著しく増加している。ビデオゲーム及び他のアプリケーションのようなこれらのコンテンツアイテムのうちのいくつかは、それぞれの開発者によって定期的に更新される。これらのゲーム及び他のアプリケーションのユーザはしばしば、特定のゲーム又はアプリケーションの最新のバージョンをダウンロードすることと欲するが、そうすることは、かなりの時間及びネットワーク帯域幅を必要とし得る。
【図面の簡単な説明】
【0003】
添付の図を参照して、発明を実施するための形態が説明される。各図において、参照番号の左端数字は、参照番号が最初に現れる図を識別する。異なる図における同じ参照番号の使用は、類似又は同一のコンポーネント又は特徴を示す。
【0004】
図1図1は、ゲーム及び他のコンテンツアイテムをクライアントコンピューティングデバイスに提供するように構成されたリモートコンピューティングシステムに結合された、それぞれのユーザによって動作される複数のクライアントコンピューティングデバイスを含む例示的な環境を例解する図である。いくつかの例においては、リモートシステムは、開発者からゲーム又は他のアプリケーションの新たなバージョンを受信し、これに応答して、新たなバージョンのどの部分が新しいか、どの部分が以前のバージョンにも存在していたか、更には新たなバージョンにおける各部分の位置を識別する。リモートシステムは次いで、単に新たなバージョン全体をこれらのデバイスに送信するよりも効率的な態様で、クライアントコンピューティングデバイス上のゲーム又はアプリケーションを更新し得る。
【0005】
図2図2は、図1のリモートシステムの部分生成コンポーネントが、ファイルの第1のバージョンのNバイトサイズの部分を生成し、リモートシステムの部分識別コンポーネントが、当該部分を識別するためのこれらそれぞれの部分に関連するデータを生成する、例示的なシナリオを例解する。データは、チェック値(例えば巡回冗長検査(CRC)値)、ハッシュ値(例えばSHA-1値)、及び/又は同様のものを含み得る。
【0006】
図3図3は、図1のリモートシステムの合致部分コンポーネントが、ファイルの第2のバージョンを分析して、第2のバージョンのどの部分が第1のバージョンにも存在していたか、及びどの部分が第2のバージョンに対して新しいかを識別する、例示的なシナリオを例解する。例えば、合致部分コンポーネントは、潜在的な合致部分を識別するために、データのNバイトサイズの部分に対してCRC値を生成し得、潜在的な合致部分を発見した後、合致を確認するためのハッシュ値を生成し得る。合致が見出されない場合には、部分生成コンポーネントは、第2のバージョンにおける新たなデータに対応する部分を生成し得る。リモートシステムは次いで、新たな部分と、第1のバージョン及び第2のバージョンの新たな部分を使用してファイルの第2のバージョンを生成するための再コンパイル命令を含むマニフェストと、を含む更新データを生成し得る。
【0007】
図4図4は、リモートシステムが、部分合致コンポーネントを利用して、ファイルの第3のバージョンから、ファイルの第1の又は第2のバージョンに存在していた第3のバージョンの任意のNバイトサイズの部分を識別する、例示的なシナリオを例解する。加えて、汚いデータ識別コンポーネントが、スキップされたデータ(すなわち部分合致コンポーネントが合致を見出さなかったデータ)から、データがファイルにおける位置を指すバイトオフセット値を含み得ることを示す基準のような1つ以上の基準を満たす「汚いデータ」を識別するように構成され得る。加えて、きれいなデータ識別コンポーネントが、基準を満たさない「きれいなデータ」を識別し得、いくつかの例においては、図2の例解と同様に、きれいなデータの部分ときれいなデータの部分を識別するデータとを生成し得る。
【0008】
図5A図5Aは、汚いデータの2つのセクションの間のきれいなデータの部分と、きれいなデータを識別するデータとを生成する一つ目のシナリオを例解する。このきれいなデータの部分及びその識別データは、次いで記憶され得る。識別データは後に、ファイルの後続するバージョンにおいて、きれいなデータの同じセクションを識別するために使用され得る。
図5B図5Bは、汚いデータの2つのセクションの間のきれいなデータの部分と、きれいなデータを識別するデータとを生成する二つ目のシナリオを例解する。このきれいなデータの部分及びその識別データは、次いで記憶され得る。識別データは後に、ファイルの後続するバージョンにおいて、きれいなデータの同じセクションを識別するために使用され得る。
図5C図5Cは、汚いデータの2つのセクションの間のきれいなデータの部分と、きれいなデータを識別するデータとを生成する三つ目のシナリオを例解する。このきれいなデータの部分及びその識別データは、次いで記憶され得る。識別データは後に、ファイルの後続するバージョンにおいて、きれいなデータの同じセクションを識別するために使用され得る。
図5D図5Dは、汚いデータの2つのセクションの間のきれいなデータの部分と、きれいなデータを識別するデータとを生成する四つ目のシナリオを例解する。このきれいなデータの部分及びその識別データは、次いで記憶され得る。識別データは後に、ファイルの後続するバージョンにおいて、きれいなデータの同じセクションを識別するために使用され得る。
図5E図5Eは、汚いデータの2つのセクションの間のきれいなデータの部分と、きれいなデータを識別するデータとを生成する五つ目のシナリオを例解する。このきれいなデータの部分及びその識別データは、次いで記憶され得る。識別データは後に、ファイルの後続するバージョンにおいて、きれいなデータの同じセクションを識別するために使用され得る。
図5F図5Fは、汚いデータの2つのセクションの間のきれいなデータの部分と、きれいなデータを識別するデータとを生成する六つ目のシナリオを例解する。このきれいなデータの部分及びその識別データは、次いで記憶され得る。識別データは後に、ファイルの後続するバージョンにおいて、きれいなデータの同じセクションを識別するために使用され得る。
図5G図5Gは、汚いデータの2つのセクションの間のきれいなデータの部分と、きれいなデータを識別するデータとを生成する七つ目のシナリオを例解する。このきれいなデータの部分及びその識別データは、次いで記憶され得る。識別データは後に、ファイルの後続するバージョンにおいて、きれいなデータの同じセクションを識別するために使用され得る。
図5H図5Hは、汚いデータの2つのセクションの間のきれいなデータの部分と、きれいなデータを識別するデータとを生成する八つ目のシナリオを例解する。このきれいなデータの部分及びその識別データは、次いで記憶され得る。識別データは後に、ファイルの後続するバージョンにおいて、きれいなデータの同じセクションを識別するために使用され得る。
【0009】
図6A図6Aは、それぞれのバイトオフセット値を含むデータの2つのセクションの間のきれいなデータの部分と、きれいなデータを識別するデータとを生成するための例示的なプロセスの一つ目のフロー図を例解する。加えて、きれいなデータの部分を識別するデータは、データのこの部分がファイルの以前のバージョンに存在していたか否かを判定するために使用され得る。否である場合、きれいなデータの部分は、この部分を識別するデータとともに記憶され得る。
図6B図6Bは、それぞれのバイトオフセット値を含むデータの2つのセクションの間のきれいなデータの部分と、きれいなデータを識別するデータとを生成するための例示的なプロセスの二つ目のフロー図を例解する。加えて、きれいなデータの部分を識別するデータは、データのこの部分がファイルの以前のバージョンに存在していたか否かを判定するために使用され得る。否である場合、きれいなデータの部分は、この部分を識別するデータとともに記憶され得る。
【0010】
図7図7は、1つ以上の基準を満たすデータの部分を識別し、該1つ以上の基準を満たすデータのそれぞれの部分の間に存在するデータを生成するための例示的なプロセスのフロー図を例解する。
【0011】
図8図8は、クライアントコンピューティングデバイスがアプリケーションの更新されたバージョンの要求を送信することを含む例示的なプロセスのフロー図を例解する。本図はまた、リモートシステムが要求を受信し、クライアントコンピューティングデバイスに、アプリケーションの新たなバージョンの新たな部分と、クライアントコンピューティングデバイスが新たなバージョンの新たな部分とクライアントコンピューティングデバイス上ですでに実行中のアプリケーションの以前のバージョンとを使用して新たなバージョンを再コンパイルすることを可能にするためのマニフェストと、を送信することを例解する。
【発明を実施するための形態】
【0012】
本明細書において説明されるものは、数ある中でも、クライアントコンピューティングデバイスが、以前のバージョンから新たなバージョンに効率的に更新し得るように、新たなバージョンに対して新しい、アプリケーションの新たなバージョンの部分と、アプリケーションの新たなバージョン及び以前のバージョンに共通する、新たなバージョンの部分と、を識別するための技術、デバイス、及びシステムである。
【0013】
上述したように、クライアントコンピューティングデバイスの使用は、ビデオゲーム及び他のアプリケーションのようなコンテンツアイテムの消費と同様に、増加し続けている。いくつかの例においては、ゲームのようなアプリケーションの開発者は、アプリケーションを追加及び変更し続け、アプリケーションの新たなバージョンに帰着する。例えば、ゲームの開発者は、アプリケーションの第1のバージョンをリリースし、その後、ゲームにコンテンツを追加して第2のバージョン、第3のバージョン等をリリースし得る。
【0014】
しばしば、ゲームの消費者は、ゲームの最新のバージョンを受け取ることを望む、したがって、アプリケーションをホストするリモートシステムに最新のバージョンを求める更新要求を送信し得る。しかしながら、新たなバージョンを要求するクライアントコンピューティングデバイスにアプリケーションの新たなバージョン全体を送信するのではなく、リモートシステムは、代わりに、アプリケーションの新たなバージョンの新たな部分のみを送信するとともに、クライアントコンピューティングデバイスが現在実行するアプリケーションの以前のバージョンとアプリケーションの新たな部分とを使用して、アプリケーションの新たなバージョンを再生成するための命令を含むマニフェストファイルを送信し得る。これらの命令は、クライアントコンピューティングデバイスに、いくつかのファイルを削除すること、いくつかのファイルを移動すること、いくつかのファイルを複製すること、及び/又は同様のことを命令し得る。読者は理解するように、アプリケーションの新たなバージョンの全体ではなく、アプリケーションの新たなバージョンの新たな部分及びマニフェストを送信することは、クライアントコンピューティングデバイスへのコンテンツのより効率的な配信に帰着する。すなわち、クライアントコンピューティングデバイスに配信されるパッケージのサイズは、リモートシステムがアプリケーションの新たなバージョン全体を送信する場合より著しく小さくなり、したがって、クライアントコンピューティングデバイスがパッケージを受信するために必要とされるネットワーク帯域幅及び時間を短縮し得る。更に、再コンパイル時間が相対的に小さいことを考えると、クライアントコンピューティングデバイスは、リモートシステムがクライアントコンピューティングデバイスにアプリケーションの新たなバージョン全体を送信する場合より、迅速にアプリケーションの新たなバージョンを実行し得、エンドユーザはそれを楽しみ得る。
【0015】
しかしながら、新たな部分及びマニフェストファイルを送信するために、リモートシステムは最初に、新たな部分を識別するために、アプリケーションの以前のバージョンと比べてアプリケーションの新たなバージョンを分析し得る。例えば、リモートシステムは、以前のバージョンと比べて新たなバージョンを分析し、以前のバージョン内の部分と合致する新たなバージョンの部分を識別し得る。リモートシステムは、新たなバージョンのうち、以前のバージョン内で合致する部分を有することが見出されなかった部分を、アプリケーションの新たなバージョンと比べて新たな部分とみなし得る。加えて、リモートシステムによるこの分析は、リモートシステムが、アプリケーションの以前のバージョンと新たなバージョンとの両方で共通する部分の、新たなバージョンにおけるそれぞれの位置を識別することに帰着し得る。新たな部分に関連するコンテンツを記憶することに加えて、リモートシステムは、この再コンパイル情報を記憶し得る。例えば、リモートシステムが、部分「A」が新たなバージョンにおいては位置「X」に存在し、以前のバージョンでは位置「Y」に存在することを識別した場合、リモートシステムは、部分「A」がアプリケーションの新たなバージョン内の位置「X」に存在することを示す指標を再コンパイル情報として記憶し得る。
【0016】
この比較を行うために、いくつかの例においては、リモートシステムは、ファイルのそれぞれの部分を一意に又は相対的に一意に識別するデータを生成するための1つ以上の技術を利用する。例えば、リモートシステムは、アプリケーションのバージョンの各部分の巡回冗長検査(CRC)値、アプリケーションのバージョンの各部分のハッシュ値、及び/又は、部分を一意に識別するための同種のものを生成し得る。例えば、リモートシステムは、アプリケーションの第1のバージョンの複数の部分の各々についてこのデータを生成し、アプリケーションの第2の更新されたバージョンを受信すると、第2のバージョンを分析してこれらの値が存在するか否かを判定し得る。そうである場合、リモートシステムは、対応する部分が第2のバージョンに対して新しいものではないと判定し得る。
【0017】
一例を挙げると、アプリケーション開発者が、アプリケーションの第1のバージョンをリモートシステムに提供(例えばアップロード)することを想定する。この第1のバージョンを受信することに応答して、リモートシステムは、アプリケーションの第1のバージョンの部分(又は「チャンク」)及びこれらの部分を識別するデータを生成することにより始め得る。例えば、リモートシステムは、ファイルの第1のバージョンの先頭から始めて、「N」サイズ(例えばここでNは予め定義されたバイト数である)の部分を生成し得る。例えば、リモートシステムは、ファイルの第1のバージョンの最初の「N」バイトから第1の部分を生成し、ファイルの第1のバージョンの第2の「N」バイトから第2の部分を生成する等し得る。いくつかの例においては、リモートシステムは、1メガバイト(1MB)サイズの部分を生成し得、他の例においては、リモートシステムは、任意のサイズの部分を利用し得る。
【0018】
アプリケーションの第1のバージョンのそれぞれの部分を生成することに加えて、リモートシステムは、これらの部分を一意に又は相対的に一意に識別するデータを生成し得る。例えば、リモートシステムは、第1の部分のCRC値、第2の部分のCRC値等を生成し得る。リモートシステムは次いで、これらのCRC値をそれぞれの部分と関連付けて記憶し得る。加えて、リモートシステムは、第1の部分のハッシュ値、第2の部分のハッシュ値等のような、各それぞれの部分のハッシュ値を生成し得る。これらのハッシュ値はまた、それぞれの部分と関連付けて記憶され得る。
【0019】
その後、クライアントコンピューティングデバイスがアプリケーションの第1のバージョンを受信する(例えばダウンロードする)ことを要求すると、リモートシステムは、該デバイスにバージョン全体を送信し得る。すなわち、リモートシステムは、アプリケーションの第1のバージョンの各部分をクライアントコンピューティングデバイスに送信し得る。
【0020】
しかしながらその後、アプリケーション開発者は、第1のバージョンとの間に共通性を有し得る、アプリケーションの第2のバージョンを生成し得る。例えば、アプリケーションの第2のバージョンは、第1のバージョンと同じデータの多くの部分を含み得るが、追加のデータも含み得、第1のバージョン及び/又は同様のもの等からいくつかのデータを削除し得る。
【0021】
アプリケーションの第2のバージョンを受信すると、リモートシステムは、第1のバージョンと第2のバージョンとの間の対応を判定することを試み得る。例えば、リモートシステムは、第2のバージョンのどの部分が第1のバージョンにも存在するか、及び、これらの共通部分の位置を識別することを試み得る。第2のバージョンにおける残りのデータは、新たなデータを含み得、以下に説明されるように、新たな部分として記憶され得る。したがって、アプリケーションの第1のバージョンを現在動作させているクライアントコンピューティングデバイスが第2のバージョンを要求すると、リモートシステムは、データの新たな部分とともに、該新たな部分とアプリケーションの第1のバージョンとを使用してクライアントコンピューティングデバイス上で第2のバージョンを構築するためのマニフェストファイルを送信し得る。
【0022】
共通部分を識別するために、リモートシステムは、アプリケーションの第2のバージョンの先頭から始めて、第2のバージョンのNサイズの部分を分析し得る。例えば、リモートシステムは、ファイルの第2のバージョンの最初のNバイトを使用して、CRC値のようなデータを生成し得、その後、この値を、アプリケーションの第1のバージョンの以前に記憶された部分を表すそれぞれの値と比較し得る。例えば、リモートシステムは、アプリケーションの第2のバージョンの最初の1MB部分のCRC値を生成し得、リモートシステムが合致を検出するまで、又は比較すべき更なるCRC値がなくなるまで、このCRC値を第1のバージョンの第1の部分及び第2のバージョンの第2の部分等のCRC値と比較し得る。合致を識別すると、いくつかの例においては、リモートシステムは、アプリケーションの第2のバージョンの最初の1MB部分のハッシュ値(SHA-1のような予め定義されたハッシュ関数を使用して)のような、第2のバージョンの部分に関連する追加的なデータを生成し得る。リモートシステムは次いで、この第1のハッシュ値を、アプリケーションの第1のバージョンの候補部分に関連するハッシュ値と比較し得る。すなわち、リモートシステムは、アプリケーションの第2のバージョンの部分のハッシュ値を、合致するCRC値を有する第1のアプリケーションの部分のハッシュ値と比較し得る。これらのハッシュ値が合致する場合、リモートシステムは、第1のバージョンのこの特定の以前に記憶された部分が、アプリケーションの第2のバージョンの適切なバイトオフセットに存在する(この例においては、第2のバージョンの最初のバイトで始まる)ことを示す指標を記憶し得る。
【0023】
しかしながら、第2のバージョンの最初の1MB部分のCRC値が、以前に記憶されたいずれの部分のCRC値とも合致しない場合、又は候補部分のハッシュ値が合致しない場合、リモートシステムは、1バイトのような特定の量だけウィンドウをシフトさせ得る。リモートシステムは次いで、アプリケーションの第2のバージョンのこの新たな部分(この例においては、バイト2~バイト1,000,001)を、そのCRC値をコンピューティングし、第1のバージョンの以前に記憶された部分のそれぞれのCRC値と照合すること等により、分析し得る。したがって、リモートシステムは、一度に1バイトずつ移動するNサイズのスライドするウィンドウ(例えば1MB)を使用して、ファイルの第2のバージョンを「ウォークスルー」し得る。合致する部分を識別すると、リモートシステムは、アプリケーションの第2のバージョン及び以前に記憶された部分の先頭バイトオフセット値の指標を記憶し得る。例えば、リモートシステムが、バイト10で始まるアプリケーションの第2のバージョンの1MBウィンドウが、アプリケーションの第1のバージョンの一部を形成した1MBの部分「A」を表すと判定した場合、リモートシステムは、アプリケーションの第2のバージョンがバイト10において「部分A」を含むことを示す指標を記憶し得る。
【0024】
しかしながら、いくつかの例においては、アプリケーションファイルの第2のバージョンは、ファイル内の位置を指すバイトオフセット値を含み得る。すなわち、いくつかのファイルは、ファイルの先頭に存在する部分と、ファイルを通じて存在する追加的な部分とを有する、分散された目次を利用し得る。いくつかの例においては、これらのバイトオフセット値は、サウンド又はテクスチャ等の位置のようなファイル内の特定のアセットの位置を指す。読者は理解するように、このバイトオフセット値の値は、アセットの位置が変化すると変化し得る。したがって、上記のスライドするウィンドウの技術は、これらの部分の位置がバージョン間でシフトしていたとしても、ファイルの異なるバージョン間でNサイズの部分を見つけるのに有効であるが、このタイプの分散された目次のアプローチを利用するファイルにおいては、バイトオフセット値は、アセットの位置が変わることに応じて変化し、したがって、スライドするウィンドウは、その部分が以前に識別された部分と同じであると識別しないこととなる。換言すれば、バイトオフセット値がバージョン間で変化し、このバイトオフセット値がリモートシステムが現在分析しているデータのNサイズのスライドするウィンドウ内にある場合、このバイトオフセット値(すなわちこの目次構造が指す位置)の変化は、分析された部分がリモートシステムがまだ見ていない一意なCRC及び/又はハッシュ値を持つことに帰着することとなり、したがって、リモートシステムが合致する部分を見出すことを失敗することに帰着する。
【0025】
この問題の影響を軽減するために、本明細書に説明されるシステム及び技術は、これらのバイトオフセット値を見つけることを試み、そうすることによって、2つのそれぞれのバイトオフセット値内のデータの「きれいな」部分を識別し得る。このきれいなデータのセクションは次いで、データのこのきれいな部分を一意に識別するデータ(例えばCRC値、ハッシュ値等)と同様に、部分として記憶され得る。そうすることにより、リモートシステムは、このきれいな部分の周囲のバイトオフセット値がバージョン間で変化していた場合であっても、ファイルの後続するバージョンからデータの合致するきれいな部分を識別し得る。
【0026】
上記の例から続けて、リモートシステムが、アプリケーションファイルの第1のバージョンから合致する部分を見出すことなく、アプリケーションファイルの第2のバージョンの最初の8つのスライドするウィンドウ(例えば、バイト1~1,000,000、バイト2~1,000,001、・・・、バイト8~1,000,007)を分析したと仮定する。以上に説明されたバイトオフセット値が8バイトのサイズであることを考えると、リモートシステムは、潜在的なバイトオフセット値を識別するための技術を開始し得る。8バイトのウィンドウが「汚い」データとしてマークされ得るバイトオフセット値を含むと判定するために、リモートシステムは、1つ以上の基準を利用し得る。例えば、リモートシステムは、これらの8バイトにより示される数を解釈し、この数がファイルのサイズのような閾値数よりも小さいか否かを判定し得る。数が閾値よりも小さくない場合(例えばファイル内のアセットの位置を指し得ないことを意味する)、リモートシステムは、基準を満たさないと判定し得る。加えて、又は代替として、リモートシステムはまた、バイトオフセット値を表していない見込みが高いいくつかの8バイトの数を考慮から除外するように、数が1MBのような第2の閾値数よりも大きいか否かを判定し得る。いくつかの例においては、基準はまた、数が8バイトのウィンドウの位置よりも大きいこと、又は8バイトのウィンドウの位置から何らかの予め定義された量(例えば1MB)だけ小さい位置よりも大きいことも含み得る。更に他の例においては、リモートシステムは、最初の1MBの後のような、ファイル内の所定の位置の後で、バイトオフセット値(すなわち汚いデータ)についてのチェックを開始し得る。したがって、1つ以上の基準は、8バイトのウィンドウの位置がこの部分を過ぎているか否かを含み得る。当然ながら、この例は8バイトのウィンドウを説明しているが、他の例においては他のサイズのウィンドウが利用され得ることは理解されるべきである。
【0027】
1つ以上の基準が満たされない場合、リモートシステムは、8バイトのウィンドウを一度に1バイトだけスライドさせて、汚いデータとしてマークするバイトオフセット値を識別することを試み得る。例えば、バイト1~8により表されるバイトオフセット値についてチェックした後、リモートシステムは、バイト2~9がバイトオフセット値を表すか否かを判定することを試み得る。
【0028】
例えば、リモートシステムが、バイト200,000~200,007の8バイトのウィンドウがバイトオフセット値、すなわち「汚い」データを表していると判定することを想定する。すなわち、リモートシステムは、この8バイトのウィンドウが、ファイル内の閾値よりも大きい位置に出現すること、第1の閾値数(例えばファイルのサイズ)よりも小さいが第2の閾値数(例えば2MB)よりも小さい数を表すこと、8バイトのウィンドウの現在の位置より1MBよりも大きい量だけ小さい数を表すこと、及び/又は同様のもののような、1つ以上の基準を満たすと判定している場合がある。また、これらのバイトは、1MB(又はNバイトサイズ)のスライドするウィンドウがこれらのバイトを含むいずれの合致部分も識別しなかったという意味において、「スキップされたデータ」の部分を形成することは理解されるべきである。
【0029】
この潜在的なバイトオフセット値を識別した後、リモートシステムは、ファイルの第2のバージョンの第1の部分(バイト200,000~200,007に対応する)が汚いデータを表すという判定を記憶し得る。そうした後、リモートシステムは、この第1の部分と、第1の部分のいずれかの側における少なくとも1バイトと、を含む、ファイルの第2の部分を定義し得る。すなわち、ファイルのこの第1の部分がバイトオフセット値を表す場合を考えると、隣接するバイトもまた、ファイルのバージョン間で変化し得るデータを含む見込みが高い。すなわち、このリモートシステムは、バイトオフセット値が、隣接するバイトもまたいくつかの例においては「汚い」データであるような「ブラスト半径」を有するという仮定を実行し、したがって、第2の部分は、第1の部分に、第1の部分のいずれかの側における256バイトのような、第1の部分のいずれかの側におけるブラスト半径を加えたものを表すが、第1の部分の前後で同じであり得るか、又はそれ以上であり得る、他の任意のブラスト半径が使用され得る。したがって、この例においては、第2の部分はバイト199,744~200,263の間であり、リモートシステムはこれを汚いデータとしてマークし得る。
【0030】
この第2の部分を汚いデータとしてマークした後、リモートシステムは、合致する部分を識別することを試みる、1MBのスライドするウィンドウ(又は他のNサイズのウィンドウ)の背後で、スキップされたデータの分析を続け得る。例えば、8バイトのスライドするウィンドウは、200,001~200,008の8バイトのウィンドウを分析して、このウィンドウがバイトオフセット値を表しているか否かを判定して、その後に200,002~200,009、200,003~200,010等を分析し得る。
【0031】
バイトオフセット値を表すための(つまり「汚い」データを表すための)基準を満たさない各ウィンドウは、「きれいな」データとみなされ得る。この例においては、リモートシステムがこれらの8バイトのウィンドウを分析し続け、一連の後続する8バイトのウィンドウをきれいなデータとしてマークすることを想定する。リモートシステムは、連続するきれいなデータの量が100,000バイト等のような閾値量よりも大きい場合を判定するように構成され得る。ファイルの第3の部分が閾値サイズよりも大きい連続するきれいなデータの量を表すと判定することに応答して、リモートシステムは、この第3の部分よりも前のスキップされたデータを使用して部分を生成し得る。例えば、きれいなセクションがバイト200,008における第2の部分の最後から広がり、現在100,000バイトの閾値に達している(バイト300,007)と仮定する。したがって、リモートシステムは、第3の部分に先行するデータの第4の部分を記憶し得る。この第4の部分は、少なくとも第2の部分(すなわちブラスト半径を含む汚いデータ)及びこの第2の部分に先行する(以前に生成された又は合致する部分まで戻る)任意のスキップされたデータを含み得る。したがって、リモートシステムは、データのこの第4の部分を記憶し得、更に、CRC値、ハッシュ値及び/又は同様のもの等のような、この第4の部分を識別するデータを生成し得る。リモートシステムはまた、後にユーザがファイルの後のバージョンにおいて同じデータを識別することを試みる際に、この識別データをデータの第4の部分と関連付けて記憶し得る。この例においては、第4の部分は、第2の部分の最後(バイト200,256)と、スキップされたデータの先頭に依存して、第2の部分の先頭(バイト199,744)又はそれよりも前である先頭と、有し得る。
【0032】
データの第4の部分と第4の部分を識別するデータとを生成した後、リモートシステムは、別のバイトオフセット値に遭遇するまで、8バイトのウィンドウの分析を続け得る。すなわち、データのきれいなセクションは、リモートシステムが以上に説明された基準を満たす8バイトのウィンドウを識別するまで拡大し続け得る。例えば、301,000~301,007の8バイトのウィンドウが基準を満たし、したがって、バイトオフセット値を表していることを、リモートシステムが判定する場合を想定する。以上からの命名法を続けると、リモートシステムは、したがって、データのこの第5の部分が汚いデータを表すと判定し得る。ここでもまた、リモートシステムは、第5の部分と、この第5の部分のまわりのブラスト半径とを含む、第6の部分を定義し得る。したがって、第6の部分は、いくつかの例において、バイト299,744及び300,263を含み得る。
【0033】
この時点において、リモートシステムは、したがって、汚いデータの2つの部分、すなわち第4の部分(バイト200,263において終了する)及び第6の部分(バイト299,744において始まる)を判定している。したがって、リモートシステムは、バイト200,264で始まりバイト299,743で終わる、これらのデータの2つの汚いセクションの間に存在する第7の部分に関連するデータを記憶し得る。読者は理解するように、この第7の部分は、きれいなデータを含み得る。このバイト範囲を部分として記憶することに加えて、リモートシステムはまた、CRC値、ハッシュ値等のような、このデータの第7の部分を識別するデータを生成及び記憶し得る。
【0034】
データの第7の部分を生成し、第7の部分を識別するデータ(例えばCRC値及びハッシュ値)を生成した後、リモートシステムは、ファイルの後のバージョンにおけるこの部分を識別し得ることは、理解されるべきである。例えば、開発者が後の時点でファイルの第3のバージョンをアップロードし、第3のバージョンの関連する部分が第2のバージョンと比べて変化していないことを想定する。リモートシステムは、同じ分析を利用し得、データのこの部分がバージョン間で変化していないことを考えると、第3のバージョンにおいて、第2のバージョンからのデータの第7の部分と合致するCRC値及びハッシュ値を有するデータの部分を識別し得る。したがって、クライアントコンピューティングデバイスが第2のバージョンから第3のバージョンに更新するためには、これらのデバイスはこのデータをすでに持っていることを考えると、リモートシステムは、第7の部分を送信する必要はない。その代わりに、リモートシステムは、バージョン2からバージョン3への更新に関連するマニフェストファイルにおいて、第7の部分が存在する第3のバージョンにおけるオフセット値の指標を記憶し得る。
【0035】
以上に加えて、以上に説明されたように、汚いデータの部分と、汚いデータ間に存在するきれいなデータの部分とを生成するための条件が満たされない場合、リモートシステムは、予め定義されたサイズのデータの部分を生成し得ることは、理解されるべきである。例えば、リモートシステムがファイルの1MBのようなデータの予め定義された部分を分析するが、その1MBのデータ内にデータの汚い部分及びきれいな部分を生成するための条件が存在しない場合、リモートシステムは、1MB部分を生成し得、CRC値及びハッシュ値のような、この部分を識別するデータを生成し得る。同様に、1MB部分が完全にきれいである場合、リモートシステムは、これを1MB部分として生成し得、この部分を識別するデータを生成し得る。
【0036】
本開示の特定の実装形態及び実施形態はここで、様々な態様が示されている添付の図を参照しながら、以下により完全に説明される。しかしながら、様々な態様は、多くの異なる形態で実施され得、本明細書に示される実装形態に限定されるものとして解釈されるべきではない。本開示は、本明細書に説明されるような、実施形態の変形例を包含する。同様の番号は、全体を通して同様の要素を示す。
【0037】
図1は、1つ以上のネットワーク106を通してクライアントコンピューティングデバイス102にゲーム及び他のコンテンツアイテムを提供するように構成されたリモートコンピューティングシステム104に結合された、それぞれのユーザによって動作される複数のクライアントコンピューティングデバイス(例えば102(1)及び102(2)、集合的に「102」)を含む、例示的な環境100を例解する図である。いくつかの例においては、リモートシステムは、アプリケーション開発者のデバイス108からゲーム又は他のアプリケーションの新たなバージョンを受信し、これに応答して、新たなバージョンのどの部分が新しいか、及びどの部分が以前のバージョンにも存在していたか、並びに新たなバージョンにおける各部分の位置を識別する。リモートシステム104は次いで、単に新たなバージョン全体をこれらのデバイス102に送信するより効率的な態様で、クライアントコンピューティングデバイス102上のゲーム又はアプリケーションを更新し得る。
【0038】
例えば、図1は、リモートシステム104が、特定のアプリケーションの複数のバージョンを記憶するデータ記憶部110を含み、このデータ記憶部110は、一連の1つ以上のファイルを含み得ることを例解する。例えば、データ記憶部110は、特定のゲーム又は他のタイプのアプリケーションの種々のバージョンを記憶し得る。この例においては、データ記憶部110は、アプリケーションの第1のバージョン112(1)、アプリケーションの第2のバージョン112(2)、及び、開発者デバイス108からアプリケーションの第3のバージョン112(3)を受信した際に第3のバージョン112(3)を記憶する。図1は、1つのアプリケーションの種々のバージョンを例解しているが、データ記憶部110は、任意の数の他のアプリケーションの任意の数の種々のバージョンを記憶し得ることは、理解されるべきである。
【0039】
図1は、データ記憶部114を介して、リモートシステム104が、アプリケーションのこれらの種々のバージョン(集合的に「112」)を構成している一意な部分116(1)、・・・、116(M)(集合的に「116」)を識別して記憶したことを更に例解する。例えば、アプリケーションの第1のバージョン112(1)を受信すると、リモートシステム104は、このバージョンを分析して、第1のバージョンのNサイズの部分116を生成し得、これらの種々の部分をデータ記憶部114(又は110)に記憶し得る。加えて、リモートシステム104は、以下に説明されるように、アプリケーションの後続するバージョンを受信して分析する際に、異なるサイズ(例えばNサイズよりも小さい)の部分116を記憶し得る。更に、図1は、データ記憶部110及び114の両方を例解しているが、いくつかの例においては、リモートシステム104は、部分116及びバージョン112の全体の両方を記憶するのではなく、バージョンを部分として記憶し得ることは、理解されるべきである。
【0040】
これにかかわらず、図1は更に、データ記憶部114が1つ以上の部分識別子118(1)、・・・、118(M)(集合的に「118」)を記憶し得ることを例解し、これらの各々は、特定の部分116のうちの1つに対応し得る。例えば、部分識別子118は、部分116のうちの1つを一意に又は相対的に一意に識別する任意のタイプのデータを含み得る。一例においては、部分識別子の各々は、特定の部分116のうちの1つに関連するCRC値及びハッシュ値を含む。これらの識別子118は、後続するバージョンにおける対応する部分の出現を後に識別するために使用され得る。
【0041】
図1は、リモートシステム104が、アプリケーションの種々のバージョン112を再構築するための再コンパイルデータを記憶し得るデータ記憶部120を含み得ることを更に例解する。例えば、データ記憶部120は、アプリケーションの第1のバージョン112(1)を再コンパイルするための再コンパイルデータ122(1)、アプリケーションの第1のバージョン112(2)を再コンパイルするための再コンパイルデータ122(2)、アプリケーションの第1のバージョン112(3)を再コンパイル(及び第3のバージョン112(3)を受信して分析)するための再コンパイルデータ122(3)を記憶し得る。再コンパイルデータ(集合的に「122」)の各々は、アプリケーションのそれぞれのバージョン112を生成するための種々の部分116を順序付けるための命令を含み得る。例えば、再コンパイルデータは、アプリケーションの特定のバージョン112が、部分識別子118に関連する第1の部分116を含み、その後に部分識別子118に関連する第2の部分を含む等することを示し得る。
【0042】
最後に、図1は、リモートシステム104が、クライアントデバイスがすでに以前のバージョンを記憶している場合に、特定のバージョンを再構築するための1つ以上のマニフェストを記憶するデータ記憶部124を含み得ることを例解する。例えば、データ記憶部124は、アプリケーションの第1のバージョン112(1)を実行するクライアントコンピューティングデバイスが第2のバージョン112(2)にアップグレードすることを可能にする第1のマニフェスト126(1)と、(リモートシステム104が第3のバージョン112(3)を受信して分析した後に)アプリケーションの第1のバージョン112(1)を実行するクライアントコンピューティングデバイスが第3のバージョン112(3)にアップグレードすることを可能にする第2のマニフェスト126(2)と、(リモートシステム104が第3のバージョン112(3)を受信して分析した後に)アプリケーションの第1のバージョン112(2)を実行するクライアントコンピューティングデバイスが第3のバージョン112(3)にアップグレードすることを可能にする第3のマニフェスト126(3)と、を含み得る。図1は、以前のバージョンから特定のバージョンを生成するための命令を含むマニフェストを例解しているが、他の例においては、各マニフェストは、単に目標バージョンを生成するための命令を含み得る。そのため、データ記憶部124は、アプリケーションの第1のバージョンを生成するための第1のマニフェスト、アプリケーションの第2のバージョンを生成するための第2のマニフェスト、アプリケーションの第3バージョンを生成するための第3のマニフェスト等を記憶し得る。これらの例においては、各マニフェストは、バージョンを構成する部分(例えばハッシュ値及び部分サイズによって指定されるような)及び各部分が存在するバージョン内のそれぞれの位置を示し得る。したがって、いくつかの例においては、マニフェストは単にそれぞれの再コンパイルデータ122を含み得、それ故、システムはデータ記憶部124にマニフェストを含み得るが、データ記憶部120に再コンパイルデータ122を含まない場合がある。マニフェストが単一の目標バージョンに関連付けられるか、指定されたバージョンから目標バージョンを構築する方法を示すかにかかわらず、各それぞれのマニフェストファイルは、クライアントコンピューティングデバイスにすでに存在するアプリケーションの部分、及びクライアントコンピューティングデバイスに存在しない目標バージョンにおける任意の新たな部分を使用して、アプリケーションの目標バージョンを生成するための命令を含み得る。
【0043】
図1は例えば、2つの異なるシナリオを例解する。最初に、アプリケーションの第1のバージョン112(1)を動作させるクライアントデバイス102(1)が、アプリケーションを更新することを要求し、第2のバージョン112(2)を動作させる第2のクライアントデバイス102(2)もまた、アプリケーションを更新することを要求する。この例においては、リモートシステム104は、第3のバージョン112(3)をすでに受信及び分析している。例えば、また以下に更に詳細に説明されるように、リモートシステム104は、第3のバージョン112(3)を第1のバージョン112(1)と比較して、第1のバージョン112(1)と比べて第3のバージョンに対して新しい部分(この例においては部分146)を識別するとともに、第1及び第3のバージョンに共通するアプリケーションの部分(かつ、したがって、すでにクライアントコンピューティングデバイス102(1)に記憶されている)を使用して、及び新たな部分146を使用して、第3のバージョン112(3)を生成するための命令を含むマニフェスト126(2)を生成し得る。マニフェスト126(2)は、クライアントコンピューティングデバイス102(1)上にアプリケーションの第3のバージョン112(3)を生成するために、部分を削除、追加、移動及び/又は複製するようにクライアントデバイス102(1)に命令し得る。例解されているように、クライアントコンピューティングデバイス102(1)上のアプリケーションの第1のバージョン112(1)を更新する要求を受信することに応答して、リモートシステム104は、部分146及びマニフェスト126(2)を送信し得る。いくつかの例においては、クライアントコンピューティングデバイス102(1)は、それが実行している現在のバージョンと、それが受け取りたい目標バージョンとを指定し得、他の例においては、リモートシステム104は、デフォルトでデバイス102(1)を最新かつ利用可能なバージョンに更新し得る。
【0044】
更に、リモートシステム104は、第3のバージョン112(3)を第2のバージョン112(2)と比較して、第2のバージョン112(2)と比べて第3のバージョンに対して新しい部分(この例においては部分148)を識別するとともに、第2及び第3のバージョンに共通するアプリケーションの部分(かつ、したがって、すでにクライアントコンピューティングデバイス102(2)上に記憶されている)を使用して、及び新たな部分148を使用して、第3のバージョン112(3)を生成するための命令を含むマニフェスト126(3)を生成し得る。マニフェスト126(3)は、クライアントコンピューティングデバイス102(2)上にアプリケーションの第3のバージョン112(3)を生成するために、部分を削除、追加、移動及び/又は複製するようにクライアントデバイス102(2)に命令し得る。例解されているように、クライアントコンピューティングデバイス102(2)上のアプリケーションの第2のバージョン112(2)を更新する要求を受信することに応答して、リモートシステム104は、部分148及びマニフェスト126(3)を送信し得る。読者は理解するように、第3のバージョン112(3)の全体ではなく、新たな部分146又は148及びマニフェストファイル126(1)又は126(2)のみを送信することによって、リモートシステム104並びにコンピューティングデバイス102(1)及び102(2)は、アプリケーションを正確にかつ効率的に更新することが可能である。例えば、これらのデバイスに送信されるデータの量は、バージョン112(3)全体が送信される場合より著しく少なくなり得、したがって、必要なネットワーク帯域幅を小さくするとともに、デバイス102(1)又は102(2)がアプリケーションを更新するための時間を短くし得る。更に、図1及び本明細書における他の考察は、新たな部分をクライアントコンピューティングデバイスに直接送信することを説明しているが、いくつかの例においては、これらの新たな部分を送信することは、新たな部分をフェッチするための命令をクライアントコンピューティングデバイスに送信することを含み得、該クライアントコンピューティングデバイスが次いで、個々の部分をフェッチすることは、理解されるべきである。例えば、システムは、新たな部分をフェッチするためのそれぞれのURLをクライアントコンピューティングデバイスに送信し得、クライアントコンピューティングデバイスが、受信したURLに新たな部分を求めるそれぞれの要求を送信し得る。
【0045】
この態様でクライアントコンピューティングデバイス102を更新するために、リモートシステムは、1つ以上のプロセッサ128(例えば中央処理デバイス(CPU))及びメモリ130を含み得る。メモリ130は、コンピュータ読み取り可能媒体118と、ここで説明する技術を実行するための該媒体上に記憶されたコンポーネントと、を含み得る。メモリ130は、コンピュータ読み取り可能命令、データ構造、プログラムモジュール、又は他のデータのような情報の記憶のための任意の方法又は技術で実装された、揮発性及び不揮発性メモリ、取り外し可能及び取り外し不可能な媒体を含み得る。かかるメモリは、限定するものではないが、RAM、ROM、EEPROM、フラッシュメモリ若しくは他のメモリ技術、CD-ROM、ディジタル多用途ディスク(DVD)若しくは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ若しくは他の磁気ストレージデバイス、RAIDストレージシステム、又は他の所望の情報を記憶するために使用することができ、かつコンピューティングデバイスによってアクセスすることができる、任意の媒体を含む。メモリ130は、コンピュータ読み取り可能記憶媒体(「CRSM」)として実装され得、これは、メモリ130に記憶された命令を実行するためにプロセッサ128によってアクセス可能ないずれの利用可能な物理媒体であり得る。1つの基本的な実装形態においては、CRSMは、ランダムアクセスメモリ(「RAM」)及びフラッシュメモリを含み得る。他の実装形態においては、CRSMは、限定するものではないが、読み取り専用メモリ(「ROM」)、電気的に消去可能なプログラム可能読み取り専用メモリ(「EEPROM」)、又は他の、プロセッサ128によってアクセスすることができる、所望の情報を記憶するために使用することができる任意の有形媒体を含み得る。
【0046】
例解されているように、メモリ130は、部分生成コンポーネント132、部分識別(ID)コンポーネント134、合致部分コンポーネント136、汚いデータ識別コンポーネント138、及びきれいなデータ識別コンポーネント140を記憶し得る。部分生成コンポーネント132は、新たなファイルを受信したときに、ファイルの部分を生成するように構成され得る。例えば、アプリケーション112(1)の第1のバージョンを受信すると、部分生成コンポーネントは、データを「ウォークスルー」して、データの一連のNバイトサイズの部分(又は「チャンク」)を生成し得、これらを部分116としてデータ記憶部114に記憶し得る。加えて、部分識別コンポーネント134は、CRC及びハッシュ値のような、各部分を識別するためのデータを生成し得、これらを部分ID118としてデータ記憶部114に記憶し得る。加えて、アプリケーションの第2の(又は後続する)バージョン112(2)を受信すると、部分生成コンポーネントは、Nバイトサイズよりも小さいデータの部分を生成し得る。例えば、また以下で更に詳細に説明されるように、部分生成コンポーネント132は、「汚い」データの部分と「きれいな」データの部分とを生成し得、これらを部分116としてデータ記憶部114に記憶し得る。ここでもまた、部分識別コンポーネント134は、CRC及びハッシュ値のような、各部分を識別するためのデータを生成し得、これらを部分ID118としてデータ記憶部114に記憶し得る。
【0047】
一方、合致部分コンポーネント136は、アプリケーションの以前のバージョン(例えば第1の112(1)又は第2のバージョン112(2))の部分と合致するアプリケーションの新たなバージョン(例えば本例の第3のバージョン112(3))の部分を識別することを試み得る。合致する部分を識別すると、合致部分コンポーネント136は、その部分の識別子118の指標と、識別された部分が新たなバージョンにおいて出現するオフセット値とを記憶し得る。この情報は、データ記憶部124における適切なマニフェスト126に記憶され得る。
【0048】
いくつかの例においては、合致部分コンポーネントは、アプリケーションの新たなバージョン(例えば第3のバージョン112(3))をバージョンの最初で始めて「ウォークスルー」して、データのNサイズのウィンドウを分析し、以前に記憶された部分に合致するか否かを判定する。例えば、合致部分コンポーネント136は、アプリケーションの新たなバージョンの最初のNバイトのCRC値を生成し、このCRC値を、以前に記憶された部分116に関連するCRC値(例えば部分ID118として記憶されている)と比較し得る。特定の部分と合致が遭遇された場合、合致部分コンポーネント136は、この部分のハッシュ値を、合致したCRC値を有する特定の部分のハッシュ値(例えば、ここでもまた部分ID118として記憶されている)と比較し得る。CRC値の合致が見出されない場合、又はハッシュ値が合致しない場合、合致部分コンポーネント136は、ウィンドウを1バイト先に移動させ、再び分析を実行し得る。以前の部分と合致すると識別された部分に存しないスライドするウィンドウの背後のデータは、「スキップされたデータ」とみなされ得る。いくつかの例においては、Nバイトが連続的な態様でスキップされた場合(例えばこれらのNバイトについてN個のスライドするウィンドウを使用して合致が見出されなかったために)、部分生成コンポーネント132は、このスキップされたデータから部分を生成し、それを部分116として記憶し得る。ここでもまた、部分IDコンポーネントは、この部分の部分ID(例えばCRC及びハッシュ値)を生成し得、これらを部分ID118として記憶し得る。
【0049】
いくつかの例においては、汚いデータ識別コンポーネント138及びきれいなデータ識別コンポーネント140は、スキップされたデータ上で動作して、汚いデータ及びきれいなデータをそれぞれ識別し得、これらのセクションが、部分116として記憶され得る。例えば、汚いデータ識別コンポーネント138は、スキップされたデータから、1つ以上の基準142を満たすデータを識別し得る。いくつかの例においては、基準142は、本質的にファイル内の位置を指す目次構造を含むバイトオフセット値を表すデータを含む。したがって、基準142は、閾値の位置よりも大きい(例えば特定のオフセットの後の)ファイル内の位置に出現し、(ファイル内のとり得る位置よりも大きい数は、データがファイル内の位置を指すバイトオフセット値でないことを意味することを考慮して)閾値数よりも小さい数を表すデータを含み得る。
【0050】
汚いデータ識別コンポーネント138がバイトオフセット値を識別することを試みる例においては、このコンポーネント138は、8バイトがバイトオフセット値の典型的な長さであることを考慮して、データの8バイトセクションを分析し得る。当然ながら、他の例においては、汚いデータ識別コンポーネント138は、他の任意の長さのウィンドウを分析し得る。この例においては、バイトオフセット値を含む見込みが高い8バイトのウィンドウを識別すると、汚いデータ識別コンポーネント138は、この8バイトのウィンドウを汚いデータとしてマークし得る。加えて、汚いデータ識別コンポーネント138は、このウィンドウの前後256バイトのような、この8バイトセクションのまわりに「ブラスト半径」を定義し得る。ここでもまた、汚いデータ識別コンポーネント138は、データのこのセクションを汚いデータとしてマークし得る。例えば、汚いデータ識別コンポーネント138は、この520バイト(256+8+256)のウィンドウを汚いデータとしてマークし得る。
【0051】
汚いデータ識別コンポーネント138は、スキップされたデータの分析を続けて、後続する8バイトのウィンドウがバイトオフセット値、それ故汚いデータを表すか否かを判定し得る。一方、きれいなデータ識別コンポーネント140は、汚いデータ識別コンポーネント138によって汚いものとしてフラグを立てられていないスキップされたデータがきれいなデータを表すと判定し得る。きれいなデータ識別コンポーネント140は、このデータをきれいなものとしてマークし得る。いくつかの例においては、閾値サイズ144よりも大きいきれいなデータの連続セクションを識別することに応答して、きれいなデータ識別コンポーネントは、Nバイト又は以前に識別若しくは生成された部分の位置のうち小さい方に戻る先行する汚いデータのブラスト半径の端において始まるデータの部分を生成するように、部分生成コンポーネント132に命令し得る。他の部分の生成と同様に、部分IDコンポーネント134は、このセクションの部分ID118を生成し、これらをデータ記憶部114に記憶し得る。更に、いくつかの例においては、合致部分コンポーネント136は、これらの部分IDがいずれかの以前に記憶された部分ID118と合致するか否かを判定するように構成され得る。
【0052】
この汚いデータの部分を生成した後、きれいなデータ識別コンポーネント140は、汚いデータ識別コンポーネント138がバイトオフセット値、それ故汚いデータを識別するまで、その後に分析されたスキップされたデータを「きれい」とマークし続け得る。汚いデータ識別コンポーネント138がこの汚いデータの8バイトのウィンドウを識別した後、汚いデータ識別コンポーネント138は、ここでもまたこの8バイトのウィンドウのまわりにブラスト半径を定義し得る。汚いデータ識別コンポーネント138がそれを行った後、きれいなデータ識別コンポーネント140は、きれいなデータから、以前の汚いデータのブラスト半径の最後において始まり、新たに識別された汚いデータのブラスト半径の先頭の1バイト前で終わる部分を生成するように、部分生成コンポーネント132に命令し得る。部分生成コンポーネント132は、これを部分116としてデータ記憶部114内に記憶し得、一方、部分識別コンポーネント134は、これらのきれいな部分の部分IDを生成して、これらを部分ID118としてデータ記憶部114内に記憶し得る。いくつかの例においては、合致部分コンポーネント136は、部分生成コンポーネント132がきれいな部分を生成する前に、部分IDを、以前に記憶された部分IDと比較して、このきれいなデータが以前に見られ記憶されていたか否かを判定し得る。そうである場合、部分を再生成するのではなく、合致部分コンポーネント136は、以前に記憶された部分の指標と現在のオフセット値とを適切なマニフェストに記憶し得る。
【0053】
クライアントデバイス102は、ビデオゲーム、生産性アプリケーション及び/又は同様のもののようなアプリケーションを実行するように構成された任意の好適なタイプのコンピューティングデバイスとして実装され得ることに留意されたい。クライアントデバイス102は、限定するものではないが、パーソナルコンピュータ(PC)、デスクトップコンピュータ、ラップトップコンピュータ、携帯電話(例えばスマートフォン)、タブレットコンピュータ、携帯ディジタルアシスタント(PDA)、ウェアラブルコンピュータ(例えば仮想現実(VR)ヘッドセット、拡張現実(AR)ヘッドセット、スマートグラス等)、車載(例えば車内用)コンピュータ、テレビジョン(スマートテレビジョン)、セットトップボックス(STB)、ゲーム機、音楽プレーヤー、音声制御アシスタント、及び/又は任意の同様のコンピューティングデバイスを含み得る。クライアントデバイス102は、コンピュータネットワーク106を通してリモートコンピューティングシステム104と通信し得る。コンピュータネットワーク106は、限定するものではないが、インターネット、他のタイプのデータ及び/又は音声ネットワーク、有線インフラストラクチャ(例えば同軸ケーブル、光ファイバケーブル等)、無線インフラストラクチャ(例えば無線周波数(RF)、セルラ、衛星等)、及び/又は他の接続技術を表し得及び/又は含み得る。コンピューティングシステム104は、いくつかの例においては、コンピュータネットワーク106を介して維持されアクセス可能なネットワークアクセス可能なコンピューティングプラットフォームの一部であり得る。このようなネットワークアクセス可能なコンピューティングプラットフォームは、「オンデマンドコンピューティング」、「ソフトウェアアズアサービス(SaaS)」、「プラットフォームコンピューティング」、「ネットワークアクセス可能プラットフォーム」、「クラウドサービス」及び「データセンタ」等の用語を使用して参照され得る。
【0054】
いくつかの実施形態においては、リモートコンピューティングシステム104は、クライアントデバイス102のようなクライアントデバイスにビデオゲーム(又は任意の他のタイプのコンテンツアイテム)を配布(例えばダウンロード、ストリーミング等)するためのビデオゲームサービスを実装するビデオゲームプラットフォームとして機能するか、又はかかるプラットフォームにアクセスする。一例においては、各クライアントデバイスは、そこにクライアントアプリケーションをインストールし得る。インストールされたクライアントアプリケーションは、ビデオゲームクライアント(例えばビデオゲームをプレイするためのゲームソフトウェア)であり得る。インストールされたクライアントアプリケーションを有するクライアントデバイス102は、コンピュータネットワーク106を通してリモートコンピューティングシステム104からプログラム(例えばビデオゲーム及びそのコンテンツ)をダウンロード、ストリーミング、又は他の方法で受信するように構成され得る。この目的のために、プログラム(例えばビデオゲーム)がクライアントデバイス102上でダウンロード及び実行するために個別に購入可能である直接購入モデル、購読ベースのモデル、プログラムが一定期間レンタル若しくはリースされる、ストリーミングされる、又は他の方法でクライアントデバイスで利用可能となるコンテンツ配信モデルのような、任意の種類のコンテンツ配信モデルを利用することができる。したがって、個々のクライアントデバイス102は、クライアントアプリケーションをロードすることによって実行可能な1つ以上のインストールされたビデオゲームを含み得る。
【0055】
クライアントデバイス102は、ビデオゲームサービスに登録し、その後にそのサービスにログインするために使用され得る。ユーザは、この目的のためにユーザアカウントを生成し、登録されたユーザアカウントに結び付けられた認証情報(例えばパスワード、PIN、生体ID等)を指定/設定し得る。複数のユーザがビデオゲームプラットフォームと相互作用する(例えば登録されたユーザアカウントでユーザ/プレイヤプロファイルにアクセスし、それぞれのクライアントデバイスでビデオゲームをプレイすること等により)と、クライアントデバイスはリモートコンピューティングシステム104にデータを送信する。所与のクライアントデバイス102について、リモートコンピューティングシステム104に送信されるデータは、限定するものではないが、ユーザ入力データ、ビデオゲームデータ(例えば、実行中の現在のバージョン、リモートシステムにアップロードされたゲームパフォーマンス統計等)、ソーシャルネットワークメッセージ及び関連する活動、並びにクライアントデバイス108上でプレイされるビデオゲームの識別子(ID)等を含み得る。このデータは、リアルタイム(又は実質的にリアルタイム)でストリーミングし、定義された間隔でリモートシステム104に送信し、及び/又はイベント(例えばビデオゲームを終了すること)に応答してアップロードすることができる。
【0056】
図2は、部分生成コンポーネント132が、ファイルの第1のバージョン112(1)のNバイトサイズの部分を生成し、部分識別コンポーネント134が、部分を識別するためのこれらのそれぞれの部分に関連するデータを生成する、例示的なシナリオ200を例解する。このデータは、チェック値(例えば巡回冗長検査(CRC)値)、ハッシュ値(例えばSHA-1値)、及び/又は同様のものを含み得る。
【0057】
例解されているように、ファイルの第1のバージョン112(1)を受信すると、部分生成コンポーネントは、第1のバージョン112(1)の先頭から始めて、第1のバージョン112(1)をウォークスルーし得る。部分生成コンポーネントは、Nバイトの部分(例えば1MBの部分)を生成し得、これらの部分をデータ記憶部114に記憶し得る。例えば、部分生成コンポーネント132は、第1の部分116(1)、第2の部分116(3)、第3の部分116(3)等に対応するデータを生成及び記憶し得る。
【0058】
一方、部分識別コンポーネント134は、これらの部分の各々に関連する1つ以上の部分IDを生成し得る。例えば、部分識別コンポーネント134は、第1の部分116(1)についての1つ以上の部分ID118(1)、第2の部分116(2)についての1つ以上の部分ID118(2)、第3の部分116(3)についての1つ以上の部分ID118(3)等を生成し得る。いくつかの例においては、これらの部分ID118は、各部分についてのCRC値及びハッシュ値を含む。
【0059】
一方、いくつかの例においては、以下に説明される技術は、アプリケーションの第1のバージョンの取り込みに等しく適用され得る。例えば、ルックアヘッド型のスライドするウィンドウが、第1のバージョンにおけるデータのNバイトサイズの部分が、以前に見られたNバイトサイズの部分と合致するか否かを判定するために使用され得る。当然ながら、最初にデータ記憶部が空であることを考えると、ファイルのこの第1のバージョンの分析の開始のために、最初は、合致は見出されないこととなる。その代わりに、第1の部分を生成すると、第1の部分は、CRC値及び/又はハッシュ値のような、この部分に関連する識別情報であり得るため、データ記憶部に記憶され得る。しかしながら、データ記憶部がこのタイプの情報で一杯になると、その情報は、ファイルの第1のバージョンの後続する部分を識別するために使用され得る。すなわち、いくつかの部分がファイルの第1のバージョン内で繰り返され得ることを考えると、これらの部分は最初に記憶され、後に分析の間に合致する部分として認識され得る。
【0060】
更に、図3はデータのNバイトサイズの部分を生成することを例解しているが、いくつかの例においては、データの汚い及び/又はきれいな部分を生成するための以下に説明される技術は、アプリケーションの第1のバージョンの取り込み及び分析に等しく適用され得る。例えば、図2に示されるように、全てのNバイトサイズのウィンドウを生成するのではなく、いくつかの例においては、リモートシステムは、図3に例解されるものと同様の、ファイルの第1のバージョンにおけるより小さな部分を生成し得る。
【0061】
図3は、合致部分コンポーネント136が、ファイルの第2のバージョン112(2)を分析して、第2のバージョン112(1)のどの部分が第1のバージョンにも存在しており、どの部分が第2のバージョン112(2)に対して新しいかを識別する、例示的なシナリオ300を例解する。例えば、合致部分コンポーネント136は、潜在的な合致部分を識別するために、データのNバイトサイズの部分に対してCRC値を生成し得、潜在的な合致部分を見出した後、合致を確認するためにハッシュ値を生成し得る。合致が見出されない場合、部分生成コンポーネント132は、第2のバージョンにおける新たなデータに対応する部分を生成し得る。リモートシステム102は次いで、新たな部分(例えば部分116(4)及び116(5))と、第1のバージョン112(1)及び第2のバージョン112(2)の新たな部分を使用してファイルの第2のバージョンを生成するための再コンパイル命令を含むマニフェストファイル126(1)と、を含む更新データ302を生成し得る。
【0062】
合致部分コンポーネント136は、第2のバージョン112(2)の最初のNバイトを分析して、これらのNバイトがデータ記憶部114に部分116として以前に記憶されたいずれかのNバイト部分と合致するか否かを判定することによって開始し得る。例えば、合致部分コンポーネント136又は部分IDコンポーネント134は、第2のバージョンの最初のNバイトの第1のID(例えばCRC値)を生成し、これをデータ記憶部114に記憶されたそれぞれの部分116のID118(例えばCRC値)と比較し得る。合致を見出すと、合致部分コンポーネント136又は部分IDコンポーネント134は、第2のバージョンの最初のNバイトの第2のID(例えばハッシュ値)を生成し、これを合致するCRC値を有する部分と比較し得る。合致を見出すと、合致部分コンポーネントは、マニフェストファイル126(1)に指標を記憶することとなる。しかしながら、この例においては、合致が見出されず、したがって、合致部分コンポーネントはウィンドウを1バイトだけスライドさせ、分析を再度実行する。
【0063】
例解されているように、B0+KとBN+Kとの間のNバイトウィンドウを分析すると、合致部分コンポーネント136は、このウィンドウが以前に記憶された部分116(1)に対応すると判定する。すなわち、合致部分コンポーネント136は、このNバイトウィンドウのCRC値を生成し、それが部分116(1)に関連するCRC値と合致すると判定し、このウィンドウのハッシュ値を生成し、このハッシュ値も部分116(1)に関連するハッシュ値と合致すると判定している。したがって、合致部分コンポーネント136は、部分116(1)がB0+Kにおいて始まるファイルの第2のバージョン112(2)に出現するという指標を、マニフェストファイル126(1)に記憶し得る。
【0064】
加えて、この合致を識別した後、部分生成コンポーネント134は、以前にスキップされたデータから部分116(4)を生成し得、この部分116(4)をデータ記憶部に記憶し得る。更に、部分識別コンポーネント134は、対応する部分IDを生成してデータ記憶部114に記憶し得る。一方、いくつかの例においては、汚いデータ識別コンポーネント138及びきれいなデータ識別コンポーネント140は、図4を参照しながら以下に説明されるように、このスキップされたデータに対して動作する。
【0065】
図3は更に、合致部分コンポーネント136が、部分116(2)がBN+LとB2N+Lとの間のファイルの第2のバージョン112(2)に存在することを識別し得ることを例解する。したがって、合致部分コンポーネント136は、対応する指標をマニフェストファイル126(1)に記憶し、一方、部分生成コンポーネント132は、スキップされたデータに対応する新たな部分116(5)を生成する。例解されているように、アプリケーションの第1のバージョン112(1)から第2のバージョン112(2)に更新するデバイスに送信される更新302は、新たな部分116(4)及び116(5)、並びに新たな部分及びこれらのデバイスにすでに記憶された第1のバージョン112(1)を使用する再コンパイル命令を含むマニフェストファイル126(1)を含む。
【0066】
図4は、リモートシステム104が、合致部分コンポーネント136を利用して、ファイルの第3のバージョン112(3)から、ファイルの第1のバージョン112(1)又は第2のバージョン112(2)に存在した第3のバージョン112(3)の任意のNバイトサイズの部分を識別する、例示的なシナリオ400を例解する。加えて、汚いデータ識別コンポーネント138は、スキップされたデータ(すなわち部分合致コンポーネント136が合致を見出さなかったデータ)から、データがファイルにおける位置を指すバイトオフセット値を含み得ることを示す基準のような1つ以上の基準142を満たす「汚いデータ」を識別するように構成され得る。加えて、きれいなデータ識別コンポーネント140は、基準142を満たさない「きれいなデータ」を識別し得、いくつかの例においては、図2の例解と同様に、きれいなデータの部分とともに、きれいなデータの部分を識別するデータを生成し得る。
【0067】
例えば、図4は、合致部分コンポーネント136が現在、アプリケーションの第3のバージョン112(3)におけるデータのNサイズのウィンドウ402を分析していることを例解する。一方、汚いデータ識別コンポーネント138及びきれいなデータ識別コンポーネント140は、合致部分コンポーネント136によって現在分析されているウィンドウの「背後」にあるスキップされたデータを分析し得る。この例解された例においては、汚いデータ識別コンポーネント138は最初に、汚いデータの第1のセクション404(1)、及び汚いデータの第2のセクション404(2)を識別する。したがって、きれいなデータの識別140は、汚いデータのこれら2つのセクションの間に存在するきれいなデータのセクション406を識別する。
【0068】
図5A~5Hは、汚いデータの2つのセクションの間のきれいなデータの部分と、きれいなデータを識別するデータとを生成するシナリオ500を集合的に例解する。このきれいなデータの部分及びその識別データは、次いで記憶され得る。識別データは、後に、ファイルの後続するバージョンにおいてきれいなデータの同じセクションを識別するために使用され得る。
【0069】
図5Aは、このシナリオの例解を開始するものであり、「1」において、第3のバージョン112(3)の第1の部分502が汚いデータとラベル付けされるための1つ以上の基準を満たすと判定することを含む。例えば、汚いデータ識別コンポーネント138は、この8バイトのデータセクションが、以上に説明された基準142を満たすならば、ファイル内の位置を指すバイトオフセット値に対応すると判定し得る。
【0070】
図5Bは、この例解を続け、「2」において、第1の部分502と、第1の部分の前の少なくとも1バイトと、第1の部分の後の少なくとも1バイトと、を含む、第3のバージョン112(3)の第2の部分504を定義することを含む。例えば、汚いデータ識別コンポーネント138は、検出されたバイトオフセット値及び周囲のブラスト半径を含む第2の部分504を定義し得る。
【0071】
図5Cは、シナリオの例解を続け、「3」において、第2の部分504に後続する第3のバージョン112(3)の第3の部分506が基準142を含み満たさないと判定することを含む。例えば、きれいなデータ識別コンポーネント140は、データのこの第3の部分が、ファイルにおける位置を指すバイトオフセット値を含まないと判定し得る。
【0072】
図5Dは、この例解を続け、「4」において、第3の部分506が、ここで、閾値サイズ508を超えたと判定することを含む。すなわち、きれいなデータ識別コンポーネント140は、きれいなデータのセクション(例えばバイトオフセット値のないデータ)が、以上に説明された閾値サイズ144よりも大きいと判定し得る。
【0073】
図5Eは、シナリオ500の例解を続け、「5」において、第3の部分506が閾値サイズ508よりも大きいと判定することに少なくとも部分的に応答して、ファイルの第3のバージョン112(3)の第4の部分510を生成することを含む。例えば、部分生成コンポーネント132は、第2の部分504と第2の部分504の前の1つ以上のバイトとを有し得る、第4の部分510を生成し得る。加えて、部分IDコンポーネント134は、この部分510のCRC値及びハッシュ値のような、第4の部分510を識別するデータを生成し得る。
【0074】
図5Fは、この例解を続け、「6」において、第3の部分506に後続する第3のバージョン112(3)の第5の部分512が1つ以上の基準142を満たす(例えば、ファイルの第1のバージョンにおける位置を指す第2のバイトオフセット値を含む)と判定することを含む。
【0075】
図5Gは、シナリオ500の例解を続け、「7」において、第5の部分512と、第5の部分512の前後の少なくとも1バイトと、を含む、第3のバージョン112(3)の第6の部分514を定義することを含む。例えば、汚いデータ識別コンポーネント138は、検出されたバイトオフセット値及び周囲のブラスト半径を含む第6の部分514を定義し得る。
【0076】
図5Hは、シナリオ500の例解を終了するものであり、「8」において、第4の部分510と第6の部分514との間に存在する、ファイルの第3のバージョン112(3)の第7の部分516を生成することを含む。例えば、部分生成コンポーネント132は、第7の部分516を生成し、データ記憶部114に記憶し得る。更に、部分識別コンポーネント134は、この部分のCRC値及びハッシュ値のような、第7の部分516を識別するデータを生成し、データ記憶部114に記憶し得る。いくつかの例においては、合致部分コンポーネント136は、「8」における動作の前に、第7の部分516に対応する部分を識別することを試み得る。
【0077】
図6A~6Bは、それぞれのバイトオフセット値を含むデータの2つのセクションの間のきれいなデータの部分、及びきれいなデータを識別するデータを生成するための、例示的なプロセス600のフロー図を集合的に例解する。加えて、きれいなデータの部分を識別するデータは、データのこの部分がファイルの以前のバージョンに存在していたか否かを判定するために使用され得る。否である場合、きれいなデータの部分は、この部分を識別するデータとともに記憶され得る。このプロセス、及び本明細書で説明される各プロセスは、ハードウェア、ソフトウェア又はそれらの組み合わせで実装することができる一連の動作を表す、論理フローグラフにおけるブロックの集合体として例解されている。ソフトウェアの文脈では、これらのブロックは、1つ以上のプロセッサによって実行されたときに言及された動作を実行するコンピュータ実行可能命令を表す。一般に、コンピュータ実行可能な命令は、特定の機能を実行する又は特定の抽象的なデータ型を実装するルーチン、プログラム、オブジェクト、コンポーネント及びデータ構造等を含む。動作が説明される順序は、限定として解釈されることを意図されておらず、任意の数の説明されるブロックを任意の順序で及び/又は並行して組み合わせて、プロセスを実装することができる。いくつかの例においては、コンピューティングシステム104は、動作のうちのいくつか又は全部を実行するように構成され得るが、他の例においては、他のデバイスが動作うちののいくつか又は全部を追加的又は代替的に実行し得る。
【0078】
動作602は、ファイルの第1のバージョンの第1の部分が、ファイルの第1のバージョンにおける位置を指す第1のバイトオフセット値を含むと判定することを表す。例えば、汚いデータ識別コンポーネント138は、データの8バイトセクションのような第1の部分が、バイトオフセット値を表すための1つ以上の基準を満たすと判定し得る。以上に説明されたように、このことは、8バイト値によって示される数が、第1の閾値数(例えばファイルのサイズ)よりも小さく、第2の閾値数(例えば1MB)よりも大きいこと、閾値の位置よりも大きいファイルの位置(例えばファイルの先頭から1MB)に出現すること、及び/又は8バイトのウィンドウの現在の位置よりも大きい(又は現在の位置から1MBのような所定の量だけ小さい位置よりも大きい)位置を指すと判定することを含み得る。当然ながら、いくつかの例示的な基準が説明されているが、他の基準が使用され得る。
【0079】
動作604は、第1の部分と、第1の部分の前の少なくとも1バイトと、第1の部分の後の少なくとも1バイトと、を含む、ファイルの第1のバージョンの第2の部分を定義することを表す。いくつかの例においては、汚いデータ識別コンポーネント138は、第1の部分のまわりに「ブラスト半径」を定義し得る。このブラスト半径は、例えば、8バイトのウィンドウのいずれかの側又は両側における256バイトを含み得る。したがって、第2の部分は、第1の部分にブラスト半径を加えたものを含み得る。
【0080】
動作606は、第2の部分に後続するファイルの第1のバージョンの第3の部分が、ファイルの第1のバージョンにおける位置を指すバイトオフセット値を含まないと判定することを表す。例えば、汚いデータ識別コンポーネント138は、データのこの部分が以上に考察された基準を満たさないと判定し得る。
【0081】
動作608は、第3の部分が閾値サイズよりも大きいか否かを判定することを表す。例えば、きれいなデータ識別コンポーネント140は、きれいなデータの識別された部分が閾値サイズ144よりも大きいと判定し得る。否である場合、プロセス600は、動作602に戻り得る。
【0082】
しかしながら、そうである場合、動作610において、プロセス600は、第3の部分が閾値サイズよりも大きいと判定することに少なくとも部分的に応答して、第3の部分の前にあるファイルの第1のバージョンの第4の部分を識別する第1のデータを生成することを含み得、第4の部分は少なくとも第2の部分を含む。例えば、部分識別コンポーネント134は、CRC値、ハッシュ値及び/又は同様のものを生成し得る。
【0083】
動作612は、第4の部分を記憶することを表し、動作614は、第1のデータを第4の部分と関連付けて記憶することを表す。例えば、部分生成コンポーネント132は、第4の部分に対応するデータの部分を生成し得、これをデータ記憶部114に記憶し得る。一方、部分識別コンポーネント134は、第1のデータを部分ID116としてデータ記憶部114に記憶し得る。
【0084】
動作616は、第3の部分に後続するファイルの第1のバージョンの第5の部分が、ファイルの第1のバージョンにおける位置を指す第2のバイトオフセット値を含むと判定することを表す。例えば、汚いデータ識別コンポーネント138は、データの8バイトセクションのような第5の部分が、バイトオフセット値を表すための1つ以上の基準を満たすと判定し得る。ここでもまた、このことは、8バイト値によって示される数が、第1の閾値数(例えばファイルのサイズ)よりも小さく、第2の閾値数(例えば1MB)よりも大きいこと、閾値の位置よりも大きいファイルの位置(例えばファイルの先頭から1MB)に出現すること、及び/又は8バイトのウィンドウの現在の位置よりも大きい(又は現在の位置より1MBのような所定の量だけ小さい位置よりも大きい)位置を指すと判定することを含み得る。ここでもまた、いくつかの例示的な基準が説明されているが、他の基準が使用され得る。
【0085】
動作618は、第5の部分と、第5の部分の前の少なくとも1バイトと、第5の部分の後の少なくとも1バイトと、を含む、ファイルの第1のバージョンの第6の部分を定義することを表す。例えば、汚いデータ識別コンポーネント138は、第1の部分のまわりに「ブラスト半径」を定義し得る。このブラスト半径は、例えば、8バイトのウィンドウのいずれかの側又は両側における256バイトを含み得る。したがって、第6の部分は、第5の部分にブラスト半径を加えたものを含み得る。
【0086】
図6Bは、この例解を続け、動作620において、ファイルの第1のバージョンの第7の部分を識別する第2のデータを生成することを含み、第7の部分は、第4の部分と第6の部分との間に存在する。例えば、部分識別コンポーネント134は、第7の部分のCRC値、ハッシュ値及び/又は同様のものを生成し得る。
【0087】
動作622は、第2のデータを、ファイルの第2のバージョンの第1の部分を表す第3のデータと比較することを表す。例えば、合致部分コンポーネント136は、第7の部分のCRC値を、ファイルの第2のバージョンの第1の部分のCRC値と比較し得る。合致部分コンポーネント136が、これらの値が合致すると判定した場合、合致部分コンポーネント136は、第7の部分のハッシュ値を、第2のバージョンの第1の部分のハッシュ値と比較し得る。
【0088】
動作624は、第2のデータと第3のデータとが合致するか否かを判定することを表す。いくつかの例においては、このことは、CRC値及びハッシュ値の両方が合致するか否かを判定することを含み得る。否である場合、プロセス600は、動作626において、第2のデータと比較するための追加的なデータ(例えば他の記憶された部分と関連する)があるか否かを判定することに進む。そうである場合、プロセス600は、動作622に戻り得る。例えば、CRC値が合致しない場合、合致部分コンポーネント136は、CRC値が第2のバージョンの異なる部分と合致するか否かを判定し得、そうである場合、これらの部分のハッシュ値が合致するか否かを判定し得る。
【0089】
しかしながら、第2のデータを比較する更なる追加的なデータがない場合、動作は、第7の部分を記憶することを表す動作628に進み得る。例えば、部分生成コンポーネント132は、第7の部分に対応するデータの部分を生成し得、これをデータ記憶部114に記憶し得る。一方、動作630は、第2のデータ(例えばCRC値及びハッシュ値)を第7の部分と関連付けて記憶することを表す。
【0090】
しかしながら、第2のデータが第3のデータと合致する場合、動作632は、ファイルの第1のバージョンに関連するマニフェストに、第7の部分の先頭と関連するオフセット値がファイルの第2のバージョンの第1の部分と関連する第3のデータに対応することを示す指標を記憶することを表す。例えば、マニフェストは、特定のオフセットに存在するべき第2のバージョンの第1の部分のハッシュ値及びサイズの指標を記憶し得、ここでハッシュ値及びサイズは、その部分を識別するように機能する。
【0091】
図7は、1つ以上の基準を満たすデータの部分を識別し、該1つ以上の基準を満たすデータのそれぞれの部分の間に存在するデータを生成するための、例示的なプロセス700のフロー図を例解する。
【0092】
動作702は、ファイルの第1のバージョンの第1の部分が1つ以上の基準を満たすと判定することを表す。例えば、この動作は、ファイルの第1のバージョンの第1の部分が、ファイルの第1のバージョンにおける位置を指すバイトオフセット値を含むと判定することを含み得る。追加的又は代替的に、この動作は、ファイルの第1のバージョンの第1の部分が、閾値数よりも小さい数に対応すること、ファイルにおける閾値の位置よりも大きい位置に出現すること、及び/又は同様のものと判定することを含み得る。更に、いくつかの例においては、後続する動作は、第1の部分と、第1の部分の前後の少なくとも1つのバイトと、を含む部分を定義することを更に含み得る。
【0093】
動作704は、第1の部分に後続するファイルの第1のバージョンの第2の部分が1つ以上の基準を満たさないと判定することを表す。動作706は、第2の部分に後続するファイルの第1のバージョンの第3の部分が1つ以上の基準を満たすと判定することを表す。いくつかの例においては、後続する動作は、第3の部分と、第3の部分の前後の少なくとも1つのバイトと、を含む、部分を定義することを更に含み得る。
【0094】
動作708は、第2の部分を識別する第1のデータを生成することを表す。いくつかの例においては、この動作は、第2の部分が閾値サイズよりも大きいと判定することに少なくとも部分的に応答して実行される。更に、第2の部分が閾値サイズよりも大きいと判定することに応答して、動作は、データの第1の部分に少なくとも部分的に基づいておりかつ少なくともデータの第1の部分を含む、データの部分を生成することを含み得る。更に、いくつかの例においては、第1のデータの生成は、第2の部分を使用してチェック値(例えばCRC値)を生成すること、及び第2の部分を使用してハッシュ値を生成することを含む。
【0095】
一方、動作710は、第1のデータを、ファイルの第2のバージョンの第1の部分を識別する第2のデータと比較することを表す。いくつかの例においては、後続する動作は、この比較に少なくとも部分的に基づいて、第3の部分がファイルの第2のバージョンの第1の部分に対応すると判定することと、ファイルの第1のバージョンに関連するマニフェストに、第3の部分の先頭に関連するオフセット値がファイルの第2のバージョンの第1の部分に関連する第2のデータに対応することを示す指標を記憶することと、を含み得る。いくつかの例においては、例えば、第2のバージョンの第1の部分は、第2のバージョンの第1の部分のハッシュ値及びサイズによって、マニフェストにおいて識別され得る。
【0096】
いくつかの例においては、プロセス700は、データの合致するNバイトサイズのウィンドウの一部を形成すると判定されていないデータに対して実行される。したがって、このプロセスの動作は、ファイルの第1のバージョンの第1の部分が1つ以上の基準を満たすと判定する前に、ファイルの第1のバージョンの第4の部分に関連する第2のデータを生成することを更に含み得る。加えて、このプロセスは、第2のデータを、ファイルの第2のバージョンのそれぞれの部分に関連するそれぞれのデータと比較することと、第2のデータがそれぞれのデータに対応しないと判定することとを含み得る。これらの例においては、動作702~710は、第2のデータがそれぞれのデータに対応しないと判定することに少なくとも部分的に応答して実行され得る。
【0097】
図8は、クライアントコンピューティングデバイス102(1)がアプリケーションの更新されたバージョンの要求を送信することを含む例示的なプロセス800のフロー図を例解する。本図はまた、リモートシステム104が要求を受信し、クライアントコンピューティングデバイスに、アプリケーションの新たなバージョンの新たな部分と、新たなバージョンの新たな部分及びクライアントコンピューティングデバイス上ですでに実行中のアプリケーションの以前のバージョンを使用してクライアントコンピューティングデバイスが新たなバージョンを再コンパイルすることを可能にするためのマニフェストと、を送信することを例解する。
【0098】
動作802において、クライアントコンピューティングデバイス102(1)は、アプリケーションの第1のバージョンからアプリケーションの第2のバージョンへの更新の要求を送信する。クライアントコンピューティングデバイス102(1)は、ユーザからの要求に応答して、又は他のいずれかのトリガに基づいて、これを送信し得る。いくつかの例においては、要求は、クライアントコンピューティングデバイスによって実行されている現在のバージョン及び/又はアプリケーションの所望のバージョンを判定するためにリモートシステムによって使用される情報を伴う。
【0099】
動作804において、リモートシステムは、更新の要求を受信し、動作806において、クライアントコンピューティングデバイス102(1)に送信するべき1つ以上の部分及び適切なマニフェストを判定する。例えば、リモートシステムは、どの部分が新たなバージョンに対して第2のバージョンと比べて新しいかを判定し得、これらの新たな部分と、新たな部分及びアプリケーションの第1のバージョンを使用して第1のバージョンから第2のバージョンに更新するための適切なマニフェストとを取得し得る。以上に説明されたように、マニフェストは、第1のバージョンから第2のバージョンに更新するための動作を含み得るか、又は、他の例においては、(クライアントコンピューティングデバイスが現在どのバージョンを動作させているかに関係なく)単に第2のバージョンのための再コンパイル命令を含み得る。更に、いくつかの例においては、新たな部分を送信することは、クライアントコンピューティングデバイスが新たな部分を取得することを可能にするための情報(例えばURL)を送信することを含み得る。
【0100】
動作808において、リモートシステム104は、新たな部分及びマニフェストを(例えば、更新データ302のような更新データとして)クライアントコンピューティングデバイス102(1)に送信する。クライアントコンピューティングデバイス102(1)は、動作810において、新たな部分及びマニフェストを受信し、動作812において、受信されたデータを使用して、アプリケーションを第1のバージョンから第2のバージョンに更新し得る。読者は理解するように、更新要求の開始からアプリケーションの成功した更新までのプロセス800に関連する時間は、最初の更新要求に応答して、リモートシステムが第2のバージョン全体を送信し、クライアントコンピューティングデバイスが第2のバージョン全体をインストールする場合よりも、著しく短くなり得る。
【0101】
本主題は、構造的特徴に特有の文言で説明されてきたが、添付される請求項において定義される主題は、必ずしも説明された特定の特徴に限定されないことは理解されるべきである。むしろ、特定の特徴は、請求項を実装する例解的な形態として開示される。
図1
図2
図3
図4
図5A
図5B
図5C
図5D
図5E
図5F
図5G
図5H
図6A
図6B
図7
図8
【国際調査報告】