高效的文件传递技术的制作方法

文档序号:32351816发布日期:2022-11-26 15:12阅读:76来源:国知局
高效的文件传递技术的制作方法
高效的文件传递技术
1.相关申请的交叉引用
2.本pct申请要求2020年5月14日提交的名称为“efficient file-delivery techniques”的美国专利申请序列号16/874,234的优先权,该专利申请的全部内容以引用方式并入本文。


背景技术:

3.随着电子设备上内容项的消费持续激增,可用内容项的数量也在增加。例如,可用于流式传输或下载的歌曲、电影、电视节目和游戏的数量近来大幅增加。这些内容项中的一些(诸如视频游戏和其他应用程序)由其相应的开发人员定期更新。这些游戏和其他应用程序的用户通常希望下载特定游戏或应用程序的最新版本,尽管这样做可能需要大量时间和大网络带宽。
附图说明
4.参考附图描述了具体实施方式。在这些图中,参考标号的最左边数字标识首次出现该参考标号的图。在不同的图中使用相同的附图标记表示相似或相同的组件或特征。
5.图1是示出了包括多个客户端计算设备的示例性环境的图示,该多个客户端计算设备由相应用户操作,并且耦接到被配置为向客户端计算设备提供游戏和其他内容项的远程计算系统。在一些情况下,远程系统从开发人员接收游戏或其他应用程序的新版本,并且作为响应,识别该新版本的哪些部分是新的、哪些部分存在于先前版本中以及在该新版本中每个部分的位置。远程系统然后可以比简单地将整个新版本发送到这些设备更高效的方式更新客户端计算设备上的游戏或应用程序。
6.图2示出了示例性场景,其中图1的远程系统的部分创建组件创建文件的第一版本的n字节大小的部分,而该远程系统的部分标识组件生成与这些相应部分相关联的数据以用于标识这些部分。数据可包括校验值(例如,循环冗余校验(crc)值)、散列值(例如,sha-1值)等。
7.图3示出了示例性场景,其中图1的远程系统的匹配部分组件分析文件的第二版本以识别第二版本的哪些部分存在于第一版本中以及哪些部分是第二版本新有的。例如,匹配部分组件可针对数据的n字节大小的部分生成crc值以识别潜在匹配部分,并且在找到潜在匹配之后,可生成散列值以确认匹配。如果没有发现匹配,则部分创建组件可生成与第二版本中的新数据对应的部分。然后,远程系统可生成更新数据,该更新数据包括新部分和清单,该清单包含用于使用第一版本和第二版本的新部分来生成文件的第二版本的重新编译指令。
8.图4示出了示例性场景,其中远程系统利用部分匹配组件从文件的第三版本中识别第三版本的存在于文件的第一版本或第二版本中的任何n字节大小的部分。另外,脏数据标识组件可被配置为从跳过的数据(即,部分匹配组件没有发现匹配的数据)中识别满足一个或多个标准(诸如,指示数据可包括指向文件中的位置的字节偏移值的标准)的“脏数
据”。另外,干净数据标识组件可识别不满足标准的“干净数据”,并且在一些情况下,可创建干净数据的一部分以及标识干净数据的该部分的数据,类似于图2的图示。
9.图5a至图5h共同示出了在脏数据的两个区段之间创建干净数据的一部分以及创建标识该干净数据的数据的场景。然后可存储干净数据的该部分及其标识数据。该标识数据稍后可用于在文件的后续版本中识别干净数据的相同区段。
10.图6a至图6b共同示出了用于在包括相应字节偏移值的数据的两个区段之间创建干净数据的一部分以及创建标识该干净数据的数据的示例性过程的流程图。另外,标识干净数据的该部分的数据可用于确定数据的该部分是否存在于文件的先前版本中。如果不存在,则可存储干净数据的该部分以及标识该部分的数据。
11.图7示出了用于生成标识数据的确实满足一个或多个标准的一部分并位于数据的确实满足该一个或多个标准的相应部分之间的数据的示例性过程的流程图。
12.图8示出了包括客户端计算设备发送对应用程序的更新版本的请求的示例性过程的流程图。该图还示出了远程系统接收请求并向客户端计算设备发送应用程序的新版本的新部分和清单,以使得该客户端计算设备能够使用该新版本的新部分和已在客户端计算设备上执行的应用程序的先前版本来重新编译新版本。
具体实施方式
13.除了别的以外,本文描述了用于识别应用程序的新版本的是该新版本新有的部分以及该新版本的是该应用程序的该新版本和先前版本共有的部分,使得客户端计算设备可高效地从该先前版本更新为该新版本的技术、设备和系统。
14.如上所述,客户端计算设备的使用继续激增,内容项(诸如,视频游戏和其他应用程序)的消费也继续激增。在一些情况下,应用程序诸如游戏的开发人员会继续添加和更改应用程序,从而产生应用程序的新版本。例如,游戏的开发人员可发布应用程序的第一版本,然后可向该游戏添加内容并发布第二版本、第三版本等。
15.通常,游戏的消费者可能希望接收游戏的最新版本,因此可向托管应用程序的远程系统发送对最新版本的更新请求。然而,远程系统不是向请求新版本的客户端计算设备发送应用程序的整个新版本,而是可能仅发送应用程序的新版本的新部分以及清单文件,该清单文件包含用于使用客户端计算设备当前执行的应用程序的先前版本和该应用程序的新部分来重新创建该应用程序的新版本的指令。这些指令可指示客户端计算设备删除一些文件、移动一些文件、复制一些文件等。正如读者将理解的,发送应用程序的新版本的新部分和清单,而不是应用程序的整个新版本,使得向客户端计算设备更高效地传递内容。也就是说,向客户端计算设备传递的包的大小可能比在远程系统发送应用程序的整个新版本的情况下传递的包的大小要小得多,因此减小了客户端计算设备接收该包所需的网络带宽和时间。此外,假设重新编译时间可能相对较短,客户端计算设备可以比在远程系统向客户端计算设备发送应用程序的整个新版本的情况下的速度更快的速度运行应用程序的新版本,并且最终用户也可更快享用该新版本。
16.然而,为了发送新部分和清单文件,远程系统可首先相对于应用程序的先前版本分析该应用程序的新版本以识别新部分。例如,远程系统可相对于先前版本分析新版本,以识别该新版本的与该先前版本内的部分匹配的部分。远程系统可将新版本的尚未发现在先
前版本中具有匹配的那些部分视为相对于应用程序的新版本的新部分。另外,远程系统的这种分析可使远程系统在新版本中识别在应用程序的先前版本和新版本两者中共有的部分的相应位置。除了存储与新部分相关联的内容之外,远程系统还可存储该重新编译信息。例如,如果远程系统识别出部分“a”在新版本中存在于位置“x”处并且在先前版本中存在于位置“y”处,则远程系统可将对部分“a”在应用程序的新版本内位于位置“x”处的指示存储为重新编译信息。
17.为了进行这种比较,在一些情况下,远程系统利用一种或多种技术来生成唯一地或相对唯一地标识文件的相应部分的数据。例如,远程系统可生成应用程序的版本的每个部分的循环冗余校验(crc)值、应用程序的版本的每个部分的散列值和/或用于唯一地标识这些部分的类似值。例如,远程系统可针对应用程序的第一版本的多个部分中的每个部分生成该数据,并且在接收到该应用程序的第二更新版本时,可分析第二版本以确定这些值是否存在。如果存在,则远程系统可确定对应部分不是第二版本新有的。
18.举个例子,设想应用程序开发人员向远程系统提供(例如,上传)应用程序的第一版本。响应于接收到该第一版本,远程系统可开始于创建应用程序的第一版本的部分(或“块”)和标识这些部分的数据。例如,远程系统可从文件的第一版本的开头开始生成“n”大小的部分(例如,其中n是预定义的字节数)。例如,远程系统可从文件的第一版本的第一“n”字节生成第一部分,从文件的第一版本的第二“n”字节生成第二部分,等等。在一些情况下,远程系统可创建一兆字节(1-mb)大小的部分,而在其他情况下,远程系统可使用任何大小的部分。
19.除了生成应用程序的第一版本的相应部分之外,远程系统还可生成唯一地或相对唯一地标识这些部分的数据。例如,远程系统可生成第一部分的crc值、第二部分的crc值等。然后,远程系统可将这些crc值与其相应部分相关联地存储。另外,远程系统可生成每个相应部分的散列值,诸如第一部分的散列值、第二部分的散列值等。这些散列值也可与其相应部分相关联地存储。
20.此后,当客户端计算设备请求接收(例如,下载)应用程序的第一版本时,远程系统可向这些设备发送整个版本。也就是说,远程系统可向客户端计算设备发送应用程序的第一版本的每个部分。
21.然而,此后,应用程序开发人员可生成应用程序的第二版本,该第二版本可与第一版本具有共性。例如,应用程序的第二版本可包括许多与第一版本相同的数据部分,可能但也可能包括附加数据,可从第一版本中移除一些数据等。
22.在接收到应用程序的第二版本时,远程系统可尝试确定第一版本和第二版本之间的对应关系。例如,远程系统可尝试识别第二版本的哪些部分也存在于第一版本中,以及这些共有部分的位置。第二版本中的剩余数据可包括新数据并且可被存储为新部分,如下所述。因此,当当前运行应用程序的第一版本的客户端计算设备请求第二版本时,远程系统可发送数据的新部分,以及用于使用这些新部分和应用程序的第一版本在客户端计算设备上构建第二版本的清单文件。
23.为了识别共有部分,远程系统可从应用程序的第二版本的开头开始分析第二版本的n大小的部分。例如,远程系统可使用文件的第二版本的第一n字节来生成数据诸如crc值,此后可将该值与表示应用程序的第一版本的先前存储部分的相应值进行比较。例如,远
程系统可生成应用程序的第二版本的第一1-mb部分的crc值,并且可将该crc值与第一版本的第一部分的crc值、第二版本的第二部分的crc值等进行比较,直到该远程系统检测到匹配或直到没有更多的crc值可供比较。在识别出匹配时,在一些情况下,远程系统可生成与第二版本的该部分相关联的附加数据,诸如应用程序的第二版本的第一1-mb部分的散列值(使用预定义的散列函数,诸如sha-1)。然后,远程系统可将该第一散列值与和应用程序的第一版本的候选部分相关联的散列值进行比较。也就是说,远程系统可将应用程序的第二版本的该部分的散列值与第一应用程序的具有匹配的crc值的部分的散列值进行比较。如果这些散列值匹配,则远程系统可存储对第一版本的该特定的先前存储部分位于应用程序的第二版本的适当字节偏移处(在该示例中,开始于第二版本的第一字节)的指示。
24.然而,如果第二版本的第一1-mb部分的crc值与任何先前存储部分的crc值不匹配,或者如果候选部分的散列值不匹配,则远程系统可将窗口偏移特定量,诸如一个字节。然后,远程系统可通过计算该新部分的crc值、对照第一版本的先前存储部分的相应crc值校验该crc值等来分析应用程序的第二版本的该新部分(在这种情况下,字节2至字节1,000,001)。因此,远程系统可使用一次移动1个字节的n大小的滑动窗口(例如,1-mb)来“遍历”文件的第二版本。在识别出匹配部分时,远程系统可存储对应用程序的第二版本和先前存储部分的开始字节偏移值的指示。例如,如果远程系统确定应用程序的第二版本的开始于字节10的1-mb窗口表示形成应用程序的第一版本的一部分的1-mb部分“a”,则远程系统可存储对应用程序的第二版本在字节10处包括“部分a”的指示。
25.然而,在一些情况下,应用程序文件的第二版本可能包括指向文件内的位置的字节偏移值。也就是说,一些文件可使用分布式目录,该分布式目录具有位于文件的开头的部分和位于文件中的附加部分。在一些情况下,这些字节偏移值指向文件内的特定素材(诸如,声音、纹理等)的位置。正如读者将理解的,当素材位置改变时,该字节偏移值的值可能会改变。因此,尽管即使这些部分的位置在版本之间发生了偏移,上述滑动窗口技术也对于在文件的不同版本之间定位n大小的部分是有效的,但在使用这种类型的分布式目录方法的文件中,字节偏移值将响应于素材的位置发生变化而发生变化,因此,该滑动窗口不会将该部分识别为与先前识别的部分相同。换句话说,如果字节偏移值在版本之间发生了变化,并且如果该字节偏移值在远程系统当前正在分析的数据的n大小的滑动窗口内,则该字节偏移值(即,该目录结构指向的位置)的变化将导致被分析的部分具有远程系统尚未看到的唯一crc和/或散列值,从而导致该远程系统无法发现匹配部分。
26.为了减轻该问题的影响,本文所述的系统和技术尝试定位这些字节偏移值,并且通过这样做,可识别两个相应字节偏移值内的数据的“干净”部分。然后,干净数据的该区段可被存储为一部分,唯一地标识数据的该干净部分的数据(例如,crc值、散列值等)也可被存储。通过这样做,远程系统可从文件的后续版本中识别数据的匹配的干净部分,即使围绕该干净部分的字节偏移值已在版本之间发生变化。
27.继续上面的示例,设想远程系统已分析应用程序文件的第二版本的前八个滑动窗口(例如,字节1至1,000,000,字节2至1,000,001、
……
、字节8至1,000,007),但没有从应用程序文件的第一版本中找到匹配部分。假设上述字节偏移值的大小为8个字节,远程系统可开始用于识别潜在字节偏移值的技术。为了确定8字节窗口包括字节偏移值(其可被标记为“脏”数据),远程系统可使用一个或多个标准。例如,远程系统可解读由这8个字节所指示的
数量,并确定该数量是否小于阈值数量,诸如文件的大小。如果该数量不小于阈值(例如,意味着它不能指向文件内的素材的位置),则远程系统可确定该数量不满足标准。另外,或在另选方案中,远程系统还可确定该数量是否大于第二阈值数量(诸如1-mb),以便不考虑可能不表示字节偏移值的多个8字节数量。在一些情况下,标准还可包括数量大于8字节窗口的位置或大于8字节窗口的位置减去某个预定义量(例如,1-mb)。在又一些情况下,远程系统可在文件内的预先确定位置之后诸如在第一1-mb之后开始校验字节偏移值(即,脏数据)。因此,该一个或多个标准可包括8字节窗口的位置是否超过该部分。当然,尽管该示例描述了8字节窗口,但应当理解,在其他情况下也可使用其他大小的窗口。
28.如果不满足该一个或多个标准,则远程系统可继续滑动8字节窗口,一次一个字节,以尝试识别字节偏移值从而将其标记为脏数据。例如,在校验由字节1至8表示的字节偏移值之后,远程系统可尝试确定字节2至9是否表示字节偏移值。
29.例如,设想远程系统确定字节200,000至200,007的8字节窗口表示字节偏移值或“脏”数据。即,远程系统可能已确定该8字节窗口满足该一个或多个标准,诸如出现在文件内大于阈值的位置处,这表示数量小于第一阈值数量(例如,文件的大小)但小于第二阈值数量(例如,2-mb),表示大于1-mb的数量小于8字节窗口的当前位置等。还应当理解,这些字节形成“跳过的数据”的一部分,因为1-mb(或n字节大小的)滑动窗口没有识别出包括这些字节的任何匹配部分。
30.在识别出该潜在的字节偏移值之后,远程系统可存储对文件的第二版本的第一部分(对应于字节200,000至200,007)表示脏数据的确定。这样做之后,远程系统可限定文件的第二部分,该第二部分包括该第一部分和在该第一部分任一侧的至少一个字节。也就是说,假设如果文件的第一部分表示字节偏移值,则相邻字节很可能还包括可能在文件的版本之间发生变化的数据。也就是说,该远程系统执行字节偏移值具有“爆炸半径”,使得相邻字节也是“脏”数据的假设。在一些情况下,第二部分因此表示第一部分加上在第一部分任一侧的爆炸半径,诸如在第一部分两侧的256个字节,但是可使用任何其他爆炸半径,该爆炸半径可能或更可能在第一部分之前和之后是相同的。因此,在该示例中,第二部分位于字节199,744至200,263之间,该第二部分被远程系统标记为脏数据。
31.在将该第二部分标记为脏数据之后,远程系统可继续分析1-mb滑动窗口(或其他n大小的窗口)后面的跳过的数据,从而试图识别匹配部分。例如,在分析200,002至200,009、200,003至200,010等的窗口之前,8字节滑动窗口可分析200,001至200,008的8字节窗口以确定该窗口是否表示字节偏移值。
32.不满足用于表示字节偏移值(即,用于表示“脏”数据)的标准的每个窗口都可被视为“干净”数据。在该示例中,设想远程系统继续分析这些8字节窗口并将一系列后续8字节窗口标记为干净数据。远程系统可被配置为确定连续干净数据的量何时大于阈值量,诸如100,000字节等。响应于确定文件的第三部分表示大于阈值大小的连续干净数据的量,远程系统可使用在该第三部分之前的跳过的数据来创建一部分。例如,设想干净区段从第二部分的末端、字节200,008处开始扩张,目前已达到为100,000个字节(字节300,007)的阈值。因此,远程系统可存储数据的在第三部分之前的第四部分。该第四部分可至少包括第二部分(即,包括爆炸半径的脏数据)和在该第二部分之前(后退到先前创建或匹配的部分)的任何跳过的数据。因此,远程系统可存储数据的该第四部分,并且除此之外,可生成标识该第
四部分的数据,诸如crc值、散列值等。远程系统还可将该标识数据与数据的第四部分相关联地存储,以供稍后在尝试在文件的随后版本中识别相同数据时使用。在该示例中,第四部分可能具有第二部分的末端(字节200,256)和为第二部分的开头(字节199,744)或更早部分的开头,这取决于跳过的数据的开头。
33.在生成数据的第四部分和标识第四部分的数据之后,远程系统可继续分析8字节窗口,直到遇到另一个字节偏移值。也就是说,数据的干净区段可继续扩展,直到远程系统识别出满足上述标准的8字节窗口。例如,设想远程系统确定301,000至301,007的8字节窗口满足标准,因此表示字节偏移值。继续上面的命名法,远程系统因此可确定该数据的第五部分表示脏数据。同样,远程系统可限定包括第五部分和围绕该第五部分的爆炸半径的第六部分。因此,在一些示例中,第六部分可包括字节299,744和300,263。
34.此时,远程系统因此确定了脏数据的两个区段:第四部分(结束于字节200,263)和第六部分(开始于字节299,744)。因此,远程系统可存储与位于数据的这两个脏区段之间的第七部分相关联的数据,该第七部分开始于字节200,264并结束于299,743。正如读者将理解的,该第七部分可包括干净数据。除了将该字节范围存储为一部分之外,远程系统还可生成并存储标识数据的该第七部分的数据,诸如crc值、散列值等。
35.应当理解,在生成数据的第七部分并生成标识第七部分的数据(例如,crc值和散列值)之后,远程系统可在文件的随后版本中识别该部分。例如,设想开发人员稍后上传文件的第三版本,并且第三版本的相关部分相对于第二版本没有改变。远程系统可使用相同的分析,并且假设数据的该区段在版本之间没有发生变化,则可在第三版本中识别数据的具有与来自第二版本的数据的第七部分匹配的crc值和散列值的一部分。因此,对于从第二版本更新为第三版本的客户端计算设备而言,远程系统不需要发送第七部分(假设这些设备已具有该数据)。相反,远程系统可将指示(即,对在第三版本中第七部分所位于的偏移值的指示)存储在与从版本二更新为版本三相关联的清单文件中。
36.除了上述之外,应当理解,如果不满足用于生成脏数据的部分和位于脏数据之间的干净数据的部分的条件,如上所述,则远程系统可生成数据的预定义大小部分。例如,如果远程系统分析文件的数据的预定义部分(诸如1-mb),但在该1-mb数据内不存在用于生成数据的脏部分和干净部分的条件,则远程系统可生成1-mb部分,并且可生成标识该部分的数据,诸如crc值和散列值。类似地,如果1-mb部分完全干净,则远程系统可将其生成为1-mb部分,并且可生成标识该部分的数据。
37.现在下面将参考附图更全面地描述本公开的某些具体实施和实施方案,在这些具体实施和实施方案中示出了各个方面。然而,各个方面可以许多不同的形式来实现并且不应被解释为限于本文所阐述的具体实施。本公开包括实施方案的变型,如本文所述。相同的编号通篇指代相同的元素。
38.图1是示出包括多个客户端计算设备(例如,102(1)和102(2),统称为“102”)的示例性环境100的图示,该多个客户端计算设备由相应用户操作,并且耦接到被配置为通过一个或多个网络106向客户端计算设备102提供游戏和其他内容项的远程计算系统104。在一些情况下,远程系统从应用程序开发人员的设备108接收游戏或其他应用程序的新版本,并且作为响应,识别该新版本的哪些部分是新的、哪些部分存在于先前版本中以及在该新版本中每个部分的位置。远程系统104然后可以比简单地将整个新版本发送到这些设备102更
高效的方式更新客户端计算设备102上的游戏或应用程序。
39.例如,图1示出了远程系统104包括存储特定应用程序的多个版本的数据存储区110,该数据存储区可包括一系列一个或多个文件。例如,数据存储区110可存储特定游戏或其他类型的应用程序的不同版本。在该示例中,数据存储区110存储应用程序的第一版本112(1)、应用程序的第二版本112(2),并且在从开发人员设备108接收到应用程序的第三版本112(3)时,存储第三版本112(3)。应当理解,尽管图1示出了一个应用程序的不同版本,但数据存储区110可存储任何数量的其他应用程序的任何数量的不同版本。
40.图1还经由数据存储区114示出了远程系统104已识别并存储了组成应用程序(统称为“112”)的这些不同版本的唯一部分116(1)、
……
、116(m)(统称为“116”)。例如,在接收到应用程序的第一版本112(1)时,远程系统104可分析该版本以生成第一版本的n大小的部分116并且可将这些不同的部分存储在数据存储区114(或110)中。另外,远程系统104可在接收到并分析了应用程序的后续版本时存储不同大小(例如,小于n大小)的部分116,如下所述。此外,应当理解,尽管图1示出了数据存储区110和114,但在一些情况下,远程系统104可将版本存储为部分,而不是存储部分116和整个版本112两者。
41.不管怎样,图1还示出了数据存储区114可存储一个或多个部分标识符118(1)、
……
、118(m)(统称为“118”),该一个或多个部分标识符中的每个部分标识符可对应于特定部分116中的一个特定部分。例如,部分标识符118可包括唯一地或相对唯一地标识部分116中的一个部分的任何类型的数据。在一个示例中,部分标识符中的每个部分标识符包括与特定部分116中的一个特定部分相关联的crc值和散列值。这些标识符118可用于稍后识别相应部分在后续版本中的出现。
42.图1还示出了远程系统104可包括数据存储区120,该数据存储区可存储用于重构应用程序的不同版本112的重新编译数据。例如,数据存储区120可存储用于重新编译应用程序的第一版本112(1)的重新编译数据122(1)、用于重新编译应用程序的第一版本112(2)的重新编译数据122(2)和用于重新编译应用程序的第一版本112(3)(以及接收和分析第三版本112(3))的重新编译数据122(3)。重新编译数据(统称为“122”)中的每个重新编译数据可包括用于对不同部分116进行排序以生成应用程序的相应版本112的指令。例如,重新编译数据可指示应用程序的特定版本112包括与部分标识符118相关联的第一部分116,随后是与部分标识符118相关联的第二部分,等等。
43.最后,图1示出了远程系统104可包括存储用于在客户端设备已存储先前版本时重构特定版本的一个或多个清单的数据存储区124。例如,数据存储区124可包括:第一清单126(1),该第一清单使得执行应用程序的第一版本112(1)的客户端计算设备能够升级到第二版本112(2);第二清单126(2),该第二清单使得执行应用程序的第一版本112(1)的客户端计算设备能够升级到第三版本112(3)(在远程系统104接收并分析第三版本112(3)之后);和第三清单126(3),该第三清单使得执行应用程序的第一版本112(2)的客户端计算设备能够升级到第三版本112(3)(在远程系统104接收并分析第三版本112(3)之后)。尽管图1示出了包括用于从先前版本生成特定版本的指令的清单,但在其他情况下,每个清单可简单地包括用于生成目标版本的指令。这样,数据存储区124可存储用于生成应用程序的第一版本的第一清单、用于生成应用程序的第二版本的第二清单、用于生成应用程序的第三版本的第三清单等。在这些情况下,每个清单可指示构成版本的部分(例如,如由散列值和部
分大小所指定的)以及在该版本内每个部分所位于的相应位置。因此,在一些情况下,清单可简单地包括相应的重新编译数据122,因此,系统可将这些清单包括在数据存储区124中,但可能不将重新编译数据122包括在数据存储区120中。不管清单是否与单个目标版本相关联或指示如何从指定版本构建目标版本,每个相应的清单文件都可包括用于使用应用程序的已位于客户端计算设备上的部分和目标版本中不存在于客户端计算设备上的任何新部分来生成该应用程序的目标版本的指令。
44.图1例如示出了两种不同的场景。首先,运行应用程序的第一版本112(1)的客户端设备102(1)请求更新该应用程序,而运行第二版本112(2)的第二客户端设备102(2)也请求更新该应用程序。在该示例中,远程系统104已接收到并分析了第三版本112(3)。例如,并且如下文进一步详细描述的,远程系统104可能已将第三版本112(3)与第一版本112(1)进行比较,以识别是第三版本相对于第一版本112(1)新有的部分(在这种情况下,部分146)并且以生成清单126(2),该清单包括用于使用应用程序的是第一版本和第三版本共有(因此,已存储在客户端计算设备102(1)上)的部分并使用新部分146来生成第三版本112(3)。清单126(2)可指示客户端设备102(1)删除、添加、移动和/或复制部分,以在客户端计算设备102(1)上生成应用程序的第三版本112(3)。如图所示,响应于接收到更新客户端计算设备102(1)上的应用程序的第一版本112(1)的请求,远程系统104可发送部分146和清单126(2)。在一些情况下,客户端计算设备102(1)可指定其正在执行的当前版本和其想要接收的目标版本,而在其他情况下,远程系统104可默认地将设备102(1)更新为最新且可用的版本。
45.此外,远程系统104可能已将第三版本112(3)与第二版本112(2)进行比较,以识别是第三版本相对于第二版本112(2)新有的部分(在这种情况下,部分148)并且以生成清单126(3),该清单包括用于使用应用程序的是第二版本和第三版本共有(因此,已存储在客户端计算设备102(2)上)的部分并使用新部分148来生成第三版本112(3)。清单126(3)可指示客户端设备102(2)删除、添加、移动和/或复制部分,以在客户端计算设备102(2)上生成应用程序的第三版本112(3)。如图所示,响应于接收到更新客户端计算设备102(2)上的应用程序的第二版本112(2)的请求,远程系统104可发送部分148和清单126(3)。如读者将理解的,通过仅发送新部分146或148和清单文件126(1)或126(2),而不是整个第三版本112(3),远程系统104和计算设备102(1)和102(2)能够准确且高效地更新应用程序。例如,发送到这些设备的数据量可能比在发送整个版本112(3)的情况下发送的数据量要少得多,因此减小了所需的网络带宽并减少了设备102(1)或102(2)更新应用程序的时间。此外,应当理解,尽管图1和本文的其他讨论描述了向客户端计算设备直接发送新部分,但在一些情况下,发送这些新部分可包括向客户端计算设备发送用于获取新部分的指令,这些客户端计算设备继而获取各个部分。例如,系统可向客户端计算设备发送用于获取新部分的相应url,客户端计算设备可向接收到的url发送对新部分的相应请求。
46.为了以这种方式更新客户端计算设备102,远程系统可包括一个或多个处理器128(例如,中央处理单元(cpu))和存储器130。存储器130可包括计算机可读介质118,以及存储在其上用于执行此处描述的技术的组件。存储器130可包括采用用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术实现的易失性存储器和非易失性存储器、可移动介质和不可移动介质。这种存储器包括但不限于ram、rom、eeprom、闪存存储器或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光学存储装置、盒式磁带、磁
带、磁盘存储装置或其他磁性存储设备、raid存储系统,或可用于存储所需信息并可由计算设备访问的任何其他介质。存储器130可被实现为计算机可读存储介质(“crsm”),该crsm可以是处理器128可访问以执行存储在存储器130上的指令的任何可用物理介质。在一种基本的具体实施中,crsm可包括随机存取存储器(“ram”)和闪存存储器。在其他具体实施中,crsm可包括但不限于只读存储器(“rom”)、电可擦除可编程只读存储器(“eeprom”)或可用于存储所需信息并可由处理器128访问的任何其他有形介质。
47.如图所示,存储器130可存储部分创建组件132、部分标识(id)组件134、匹配部分组件136、脏数据标识组件138和干净数据标识组件140。部分创建组件132可被配置为在接收到新文件时生成文件的部分。例如,在接收到应用程序112(1)的第一版本时,部分创建组件可“遍历”该数据以创建数据的一系列n字节大小的部分(或“块”)并且可将其作为部分116存储在数据存储区114中。另外,部分标识组件134可生成用于标识每个部分的数据(诸如,crc和散列值),并且可将其作为部分id 118存储在数据存储区114中。另外,在接收到应用程序的第二(或后续)版本112(2)时,部分创建组件可生成数据的小于n字节大小的部分。例如,如下文进一步详细描述的,部分创建组件132可生成“脏”数据的部分和“干净”数据的部分,并且可将这些部分作为部分116存储在数据存储区114中。同样,部分标识组件134可生成用于标识每个部分的数据(诸如,crc和散列值),并且可将其作为部分id 118存储在数据存储区114中。
48.同时,匹配部分组件136可尝试识别应用程序的新版本(例如,示例性第三版本112(3))的与该应用程序的先前版本(例如,第一版本112(1)或第二版本112(2))中的部分匹配的部分。在识别出匹配部分时,匹配部分组件136可存储对该部分的标识符118和新版本中出现所识别部分的偏移值的指示。该信息可存储在数据存储区124中的适当清单126中。
49.在一些情况下,匹配部分组件从版本的开头开始“遍历”应用程序的新版本(例如,第三版本112(3)),并分析数据的n大小的窗口以确定其是否与先前存储部分匹配。例如,匹配部分组件136可生成应用程序的新版本的第一n字节的crc值,并将该crc值与和先前存储部分116相关联的crc值(例如,被存储为部分id 118)进行比较。如果特定部分遇到匹配,则匹配部分组件136可将该部分的散列值与具有匹配的crc值的特定部分的散列值(例如,再次被存储为部分id 118)进行比较。如果没有发现crc值匹配,或者如果散列值不匹配,则匹配部分组件136可将窗口向前移动一个字节并再次执行分析。滑动窗口后面的数据可被视为“跳过的数据”,其不位于已被识别为与先前部分匹配的部分中。在一些实例中,如果以连续方式跳过n个字节(例如,因为对于这些n个字节,使用n个滑动窗口没有发现匹配),则部分创建组件132可从该跳过的数据创建一个部分并将其存储为部分116。同样,部分id组件可生成该部分的部分id(例如,crc和散列值)并且可将这些部分id存储为部分id 118。
50.在一些情况下,脏数据标识组件138和干净数据标识组件140可对跳过的数据进行操作以分别标识脏数据和干净数据,该脏数据和干净数据组件的区段可被存储为部分116。例如,脏数据标识组件138可从跳过的数据中识别满足一个或多个标准142的数据。在一些情况下,标准142包括数据表示字节偏移值,该字节偏移值本质上包括指向文件内的位置的目录结构。因此,标准142可包括数据出现在文件内大于阈值位置的位置处(例如,在特定偏移之后)并且表示小于阈值数量的数量(假设大于文件内的可能位置的数量意味着数据不是指向文件内的位置的字节偏移值)。
51.在脏数据标识组件138试图识别字节偏移值的情况下,该组件138可分析数据的8字节区段(假设这是字节偏移值的典型长度)。当然,在其他情况下,脏数据标识组件138可分析任何其他长度的窗口。在该示例中,在识别可能包括字节偏移值的8字节窗口时,脏数据标识组件138可将该8字节窗口标记为脏数据。另外,脏数据标识组件138可限定围绕该8字节区段的“爆炸半径”,诸如在该窗口之前和之后的256个字节。同样,脏数据标识组件138可将数据的该区段标记为脏数据。例如,脏数据标识组件138可将该520字节窗口(256+8+256)标记为脏数据。
52.脏数据标识组件1 138可继续分析跳过的数据,以确定后续的8字节窗口是否表示字节偏移值并且因此表示脏数据。同时,干净数据标识组件140可确定未被脏数据标识组件138标示为脏的任何跳过的数据表示干净数据。干净数据标识组件140可将该数据标记为干净。在一些情况下,响应于识别出干净数据的大于阈值大小144的连续区段,干净数据标识组件可指示部分创建组件132生成开始于后退到先前识别或创建部分的更小n字节或位置的先前脏数据的爆炸半径的末端的数据部分。与其他部分的创建一样,部分id组件134可生成该区段的部分id 118并将其存储在数据存储区114中。此外,在一些情况下,匹配部分组件136可被配置为确定这些部分id是否与任何先前存储的部分id 118匹配。
53.在生成脏数据的该部分之后,干净数据标识组件140可继续将后续分析的跳过的数据标记为“干净”,直到脏数据标识组件138识别出字节偏移值并且因此识别出脏数据。在脏数据标识组件138识别出脏数据的该8字节窗口之后,脏数据标识组件138可同样限定围绕该8字节窗口的爆炸半径。在脏数据标识组件138已这样做之后,干净数据标识组件140可指示部分创建组件132从干净数据生成一部分,该部分开始于先前脏数据的爆炸半径的末端,并且结束于新识别的脏数据的爆炸半径的开头之前的一个字节。部分创建组件132可将该部分作为部分116存储在数据存储区114内,而部分标识组件134可生成这些干净部分的部分id并将其作为部分id 118存储在数据存储区114内。在一些情况下,匹配部分组件136可在部分创建组件132创建干净部分之前将部分id与先前存储的部分id进行比较以确定之前是否已看到并存储了该干净数据。如果是,则匹配部分组件136可将对先前存储部分和当前偏移值的指示存储在适当清单中,而不是重新创建该部分。
54.应当注意,客户端设备102可被实现为被配置为执行应用程序(诸如,视频游戏、生产力应用程序等)的任何合适类型的计算设备。客户端设备102可包括但不限于个人计算机(pc)、台式计算机、膝上型计算机、移动电话(例如,智能电话)、平板电脑、便携式数字助理(pda)、可穿戴计算机(例如,虚拟现实(vr)耳机、增强现实(ar)耳机、智能眼镜等)、车载(例如车内)计算机、电视(智能电视)、机顶盒(stb)、游戏机、音乐播放器、语音控制助理和/或任何类似的计算设备。客户端设备102可通过计算机网络106与远程计算系统104通信。计算机网络106可表示和/或包括但不限于:因特网、其他类型的数据和/或语音网络、有线基础设施(例如,同轴电缆、光纤电缆等)、无线基础设施(例如,射频(rf)、蜂窝、卫星等)和/或其他连接技术。在一些情况下,计算系统104可以是经由计算机网络106维护和可访问的网络可访问计算平台的一部分。诸如此类的网络可访问计算平台可被称为术语诸如“按需计算”、“软件即服务(saas)”、“平台计算”、“网络可访问平台”、“云服务”、“数据中心”等。
55.在一些实施方案中,远程计算系统104充当或有权访问实现视频游戏服务以将视频游戏(或任何其他类型的内容项)分发(例如,下载、流式传输等)到客户端设备(诸如客户
端设备102)的视频游戏平台。在示例中,每个客户端设备可在其上安装客户端应用程序。所安装的客户端应用程序可以是视频游戏客户端(例如,用于玩视频游戏的游戏软件)。具有所安装的客户端应用程序的客户端设备102可被配置为通过计算机网络106从远程计算系统104下载、流式传输或以其他方式接收程序(例如,视频游戏及其内容)。任何类型的内容分发模型都可用于此目的,诸如可单独购买程序(例如,视频游戏)以在客户端设备102上下载和执行的直接购买模型、基于订阅的模型、租用或租赁程序一段时间、流式传输或以其他方式提供给客户端设备的内容分发模型。因此,各个客户端设备102可包括可通过加载客户端应用程序来执行的一个或多个所安装的视频游戏。
56.客户端设备102可用于向视频游戏服务注册并随后登录到视频游戏服务。用户可为此目的而创建用户账户,并且指定/设置绑定到注册用户账户的凭据(例如,密码、pin、生物识别id等)。当多个用户与视频游戏平台交互(例如,通过使用注册的用户账户访问他们的用户/玩家资料,在他们相应客户端设备上玩视频游戏等)时,客户端设备将数据发送到远程计算系统104。对于给定的客户端设备102,发送到远程计算系统104的数据可包括但不限于用户输入数据、视频游戏数据(例如,正被执行的当前版本、上传到远程系统的游戏性能统计等)、社交网络消息和相关活动、在客户端设备108上玩的视频游戏的标识符(id)等。该数据可实时(或基本上实时)流式传输,以定义的间隔向远程系统104发送,以及/或者响应于事件(例如,退出视频游戏)而上传。
57.图2示出了示例性场景200,其中部分创建组件132创建文件的第一版本112(1)的n字节大小的部分,而部分标识组件134生成与这些相应部分相关联的数据以用于标识这些部分。数据可包括校验值(例如,循环冗余校验(crc)值)、散列值(例如,sha-1值)等。
58.如图所示,在接收到文件112(1)的第一版本时,部分创建组件可从第一版本112(1)的开头开始遍历第一版本112(1)。部分创建组件可创建n字节的部分(例如,1-mb部分)并且可将这些部分存储在数据存储区114中。例如,部分创建组件132可生成并存储与第一部分116(1)、第二部分116(3)、第三部分116(3)等对应的数据。
59.同时,部分标识组件134可生成与这些部分中的每个部分相关联的一个或多个部分id。例如,部分标识组件134可针对第一部分116(1)生成一个或多个部分id 118(1),针对第二部分116(2)生成一个或多个部分id 118(2),针对第三部分116(3)生成一个或多个部分id118(3),等等。在一些情况下,这些部分id 118包括每个部分的crc值和散列值。
60.同时,在一些情况下,下面描述的技术可同样适用于应用程序的第一版本的摄取。例如,前瞻滑动窗口可用于确定第一版本中的数据的n字节大小的部分是否与任何先前看到的n字节大小的部分匹配。当然,假设数据存储区将是空的,首先,在开始分析文件的该第一版本时,最初将不会发现匹配。相反,在生成第一部分时,可将该第一部分存储在数据存储区中,与该部分相关联的标识信息(诸如crc值和/或散列值)也可被存储。然而,当数据存储区填满这种类型的信息时,该信息可用于识别文件的第一版本的后续部分。也就是说,假设一些部分可能在文件的第一版本中重复,这些部分可首先被存储并且稍后在分析期间被辨识为匹配部分。
61.此外,尽管图3示出了生成数据的n字节大小的部分,但在一些情况下,下文描述的用于生成数据的脏和/或干净部分的技术可同样地适用于应用程序的第一版本的摄取和分析。例如,如图2所示,在一些情况下,远程系统可生成文件的第一版本中的更小部分,类似
于图3中所示的那些,而不是生成所有n字节大小的窗口。
62.图3示出了示例性场景300,其中匹配部分组件136分析文件的第二版本112(2)以识别第二版本112(1)的哪些部分存在于第一版本中以及哪些部分是第二版本112(2)新有的。例如,匹配部分组件136可针对数据的n字节大小的部分生成crc值以识别潜在匹配部分,并且在找到潜在匹配之后,可生成散列值以确认匹配。如果没有发现匹配,则部分创建组件132可生成与第二版本中的新数据对应的部分。然后,远程系统102可生成更新数据302,该更新数据包括新部分(例如,部分116(4)和116(5))和清单文件126(1),该清单文件包含用于使用第一版本112(1)和第二版本112(2)的新部分来生成文件的第二版本的重新编译指令。
63.匹配部分组件136可通过分析第二版本112(2)的第一n字节以确定这些n字节是否与先前作为部分116存储在数据存储区114中的任何n字节部分匹配来开始。例如,匹配部分组件136或部分id组件134可生成第二版本的第一n字节的第一id(例如,crc值)并将其与存储在数据存储区114中的相应部分116的id 118(例如,crc值)进行比较。在发现匹配时,匹配部分组件136或部分id组件134可生成第二版本的第一n字节的第二id(例如,散列值)并将其与具有匹配的crc值的部分进行比较。在发现匹配时,匹配部分组件将把指示存储在清单文件126(1)中。然而,在该示例中,没有发现匹配,因此,匹配部分组件将窗口滑动一个字节并再次执行分析。
64.如图所示,在分析b
0+k
和b
n+k
之间的n字节窗口时,匹配部分组件136确定该窗口对应于先前存储部分116(1)。也就是说,匹配部分组件136生成该n字节窗口的crc值,确定该crc值与和部分116(1)相关联的crc值匹配,生成该窗口的散列值,并且确定该散列值也与和部分116(1)相关联的散列值匹配。因此,匹配部分组件136可将对部分116(1)从b
0+k
开始出现在文件的第二版本112(2)中的指示存储在清单文件126(1)中。
65.另外,在识别出该匹配之后,部分创建组件134可从先前跳过的数据创建部分116(4)并且可将该部分116(4)存储在数据存储区中。此外,部分标识组件134可生成对应的部分id并将其存储在数据存储区114中。同时,在一些情况下,脏数据标识组件138和干净数据标识组件140对该跳过的数据进行操作,如下面参考图4所描述的。
66.图3还示出了匹配部分组件136可识别出部分116(2)位于文件的第二版本112(2)中b
n+l
和b
2n+l
之间。因此,匹配部分组件136将对应的指示存储在清单文件126(1)中,而部分创建组件132生成与跳过的数据对应的新部分116(5)。如图所示,向要从应用程序的第一版本112(1)更新为第二版本112(2)的设备发送的更新302包括新部分116(4)和116(5)以及清单文件126(1),该清单文件包括使用新部分和已存储在这些设备上的第一版本112(1)的重新编译指令。
67.图4示出了示例性场景400,其中远程系统104利用匹配部分组件136从文件的第三版本112(3)中识别第三版本112(3)的存在于文件的第一版本112(1)或第二版本112(2)中的任何n字节大小的部分。另外,脏数据标识组件138可被配置为从跳过的数据(即,部分匹配组件136没有发现匹配的数据)中识别满足一个或多个标准142(诸如,指示数据可包括指向文件中的位置的字节偏移值的标准)的“脏数据”。另外,干净数据标识组件140可识别不满足标准142的“干净数据”,并且在一些情况下,可创建干净数据的一部分以及标识干净数据的该部分的数据,类似于图2的图示。
68.例如,图4示出了匹配部分组件136当前分析应用程序的第三版本112(3)中的数据的n大小的窗口402。同时,脏数据标识组件138和干净数据标识组件140可分析在匹配部分组件136当前正在分析的窗口“后面”的跳过的数据。在该所示的示例中,脏数据标识组件138首先识别脏数据的第一区段404(1)和脏数据的第二区段404(2)。因此,干净数据标识140识别位于脏数据的这两个区段之间的干净数据406的区段。
69.图5a至图5h共同示出了在脏数据的两个区段之间创建干净数据的一部分以及创建标识该干净数据的数据的场景500。然后可存储干净数据的该部分及其标识数据。该标识数据稍后可用于在文件的后续版本中识别干净数据的相同区段。
70.图5a开始场景的图示,并且包括:在“1”处,确定第三版本112(3)的第一部分502满足被标记为脏数据的一个或多个标准。例如,脏数据标识组件138可确定数据的该8字节区段对应于指向文件中的位置的字节偏移值(假设该区段满足上述标准142)。
71.图5b继续该图示,并且包括:在“2”处,限定第三版本112(3)的第二部分504,该第二部分包括第一部分502以及在第一部分之前的至少一个字节和在第一部分之后的至少一个字节。例如,脏数据标识组件138可限定第二部分504,该第二部分包括检测到的字节偏移值和周围爆炸半径。
72.图5c继续场景的图示,并且包括:在“3”处,确定第三版本112(3)的在第二部分504之后的第三部分506不满足标准142。例如,干净数据标识组件140可确定数据的该第三部分不包括指向文件中的位置的字节偏移值。
73.图5d继续该图示,并且包括:在“4”处,确定第三部分506现在已超过阈值大小508。也就是说,干净数据标识组件140可确定干净数据(例如,不含字节偏移值的数据)的区段大于上述阈值大小144。
74.图5e继续场景500的图示,并且包括:在“5”处,至少部分地响应于确定第三部分506大于阈值大小508而生成文件的第三版本112(3)的第四部分510。例如,部分创建组件132可创建第四部分510,该第四部分可包括第二部分504和在第二部分504之前的一个或多个字节。另外,部分id组件134可生成标识第四部分510的数据,诸如该部分510的crc值和散列值。
75.图5f继续该图示,并且包括:在“6”处,确定第三版本112(3)的在第三部分506之后的第五部分512满足一个或多个标准142(例如,包括指向文件的第一版本中的位置的第二字节偏移值)。
76.图5g继续场景500的图示,并且包括:在“7”处,限定第三版本112(3)的第六部分514,该第六部分包括第五部分512以及在第五部分512之前和之后的至少一个字节。例如,脏数据标识组件138可限定第六部分514,该第六部分包括检测到的字节偏移值和周围爆炸半径。
77.图5h终止场景500的图示,并且包括:在“8”处,生成文件的第三版本112(3)的第七部分516,该第七部分位于第四部分510和第六部分514之间。例如,部分创建组件132可生成第七部分516并将其存储在数据存储区114中。此外,部分标识组件134可生成标识第七部分516的数据(诸如,该部分的crc值和散列值),并将其存储在数据存储区114中。在一些情况下,匹配部分组件136可尝试在“8”处的操作之前识别与第七部分516对应的部分。
78.图6a至图6b共同示出了用于在包括相应字节偏移值的数据的两个区段之间创建
干净数据的一部分以及创建标识该干净数据的数据的示例性过程600的流程图。另外,标识干净数据的该部分的数据可用于确定数据的该部分是否存在于文件的先前版本中。如果不存在,则可存储干净数据的该部分以及标识该部分的数据。该过程以及本文描述的每个过程被出为逻辑流程图中的框的集合,这些框代表可在硬件、软件或其组合中实现的一系列操作。在软件的上下文中,这些框表示计算机可执行指令,这些计算机可执行指令在由一个或多个处理器执行时,执行所列举的操作。通常,计算机可执行指令包括执行特定功能或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。描述操作的顺序不旨在被理解为限制,并且可以任何顺序和/或并行地组合任意数量的所描述的框来实现这些过程。在一些情况下,计算系统104可被配置为执行这些操作中的一些或全部,但在其他情况下,其他设备可除此之外或另选地执行这些操作中的一些或全部。
79.操作602表示确定文件的第一版本的第一部分包括指向该文件的第一版本中的位置的第一字节偏移值。例如,脏数据标识组件138可确定第一部分(诸如,数据的8字节区段)满足用于表示字节偏移值的该一个或多个标准。如上所述,这可包括确定由8字节值指示的数量小于第一阈值数量(例如,文件的大小),大于第二阈值数量(例如,1-mb),出现在文件的大于阈值位置(例如,从文件的开头开始的1-mb)的位置处并且/或者指向大于8字节窗口的当前位置(或大于当前位置,小于预定义量,诸如1-mb)的位置。当然,尽管描述了几个示例性标准,但也可使用其他标准。
80.操作604表示限定文件的第一版本的第二部分,该第二部分包括第一部分以及在第一部分之前的至少一个字节和在第一部分之后的至少一个字节。在一些情况下,脏数据标识组件138可限定围绕第一部分的“爆炸半径”。该爆炸半径可包括例如在8字节窗口的任一侧或两侧上的256个字节。因此,第二部分可包括第一部分加上爆炸半径。
81.操作606表示确定文件的第一版本的在第二部分之后的第三部分不包括指向该文件的第一版本中的位置的字节偏移值。例如,脏数据标识组件138可确定数据的该部分不满足上述标准。
82.操作608表示确定第三部分是否大于阈值大小。例如,干净数据标识组件140可确定干净数据的所识别部分大于阈值大小144。如果不,则过程600可返回到操作602。
83.然而,如果是,则在操作610处,过程600可包括至少部分地响应于确定第三部分大于阈值大小而生成标识文件的第一版本的在第三部分之前的第四部分的第一数据,该第四部分至少包括第二部分。例如,部分标识组件134可生成crc值、散列值等。
84.操作612表示存储第四部分,而操作614表示将第一数据与第四部分相关联地存储。例如,部分创建组件132可生成与第四部分对应的数据的一部分并且可将其存储在数据存储区114中。同时,部分标识组件134可将第一数据作为部分id 116存储在数据存储区114中。
85.操作616表示确定文件的第一版本的在第三部分之后的第五部分包括指向该文件的第一版本中的位置的第二字节偏移值。例如,脏数据标识组件138可确定第五部分(诸如,数据的8字节区段)满足用于表示字节偏移值的该一个或多个标准。同样,这可包括确定由8字节值指示的数量小于第一阈值数量(例如,文件的大小),大于第二阈值数量(例如,1-mb),出现在文件的大于阈值位置(例如,从文件的开头开始的1-mb)的位置处并且/或者指向大于8字节窗口的当前位置(或大于当前位置,小于预定义量,诸如1-mb)的位置。同样,尽
管描述了几个示例性标准,但也可使用其他标准。
86.操作618表示限定文件的第一版本的第六部分,该第六部分包括第五部分以及在第五部分之前的至少一个字节和在第五部分之后的至少一个字节。例如,脏数据标识组件138可限定围绕第一部分的“爆炸半径”。该爆炸半径可包括例如在8字节窗口的任一侧或两侧上的256个字节。因此,第六部分可包括第五部分加上爆炸半径。
87.图6b继续该图示,并且包括:在操作620处,生成标识文件的第一版本的第七部分的第二数据,该第七部分位于第四部分和第六部分之间。例如,部分标识组件134可生成第七部分的crc值、散列值等。
88.操作622表示将第二数据与表示文件的第二版本的第一部分的第三数据进行比较。例如,匹配部分组件136可将第七部分的crc值与文件的第二版本的第一部分的crc值进行比较。如果匹配部分组件136确定这些值匹配,则匹配部分组件136可将第七部分的散列值与第二版本的第一部分的散列值进行比较。
89.操作624表示确定第二数据和第三数据是否匹配。在一些情况下,这可包括确定crc值和散列值两者是否都匹配。如果不,则过程600继续在操作626处确定是否存在用于与第二数据进行比较的(例如,与其他所存储部分相关联的)附加数据。如果是,则过程600可返回到操作622。例如,如果crc值不匹配,则匹配部分组件136可确定crc值是否与第二版本的不同部分匹配,如果是,则这些部分的散列值是否匹配。
90.然而,如果不存在用于与第二数据进行比较的另外的附加数据,则操作可前进到操作628,该操作628表示存储第七部分。例如,部分创建组件132可生成与第七部分对应的数据的一部分并且可将其存储在数据存储区114中。同时,操作630表示将第二数据(例如,crc值和散列值)与第七部分相关联地存储。
91.然而,如果第二数据与第三数据匹配,则操作632表示将对与第七部分的开头相关联的偏移值对应于与文件的第二版本的第一部分相关联的第三数据的指示存储在与该文件的第一版本相关联的清单中。例如,清单可存储对第二版本的将位于特定偏移处的第一部分的散列值和大小的指示,其中散列值和大小用于标识该部分。
92.图7示出了用于生成标识数据的确实满足一个或多个标准的一部分并位于数据的确实满足该一个或多个标准的相应部分之间的数据的示例性过程700的流程图。
93.操作702表示确定文件的第一版本的第一部分满足一个或多个标准。例如,该操作可包括确定文件的第一版本的第一部分包括指向文件的第一版本中的位置的字节偏移值。除此之外或另选地,该操作可包括确定:文件的第一版本的第一部分对应于小于阈值数量的数量,出现在文件中大于阈值位置的位置处,等等。此外,在一些情况下,后续操作还可包括限定包括第一部分以及在第一部分之前和之后的至少一个字节的部分。
94.操作704表示确定文件的第一版本的在第一部分之后的第二部分不满足该一个或多个标准。操作706表示确定文件的第一版本的在第二部分之后的第三部分满足该一个或多个标准。在一些情况下,后续操作还可包括限定包括第三部分以及在第三部分之前和之后的至少一个字节的部分。
95.操作708表示生成标识第二部分的第一数据。在一些情况下,该操作至少部分地响应于确定第二部分大于阈值大小而发生。此外,响应于确定第二部分大于阈值大小,操作可包括生成至少部分地基于数据的第一部分并且至少包括数据的第一部分的数据的一部分。
此外,在一些情况下,第一数据的生成包括使用第二部分来生成校验值(例如,crc值)以及使用第二部分来生成散列值。
96.同时,操作710表示将第一数据与标识文件的第二版本的第一部分的第二数据进行比较。在一些情况下,后续操作可包括:至少部分地基于该比较来确定第三部分对应于文件的第二版本的第一部分,以及将对与第三部分的开头相关联的偏移值对应于与文件的第二版本的第一部分相关联的第二数据的指示存储在与文件的第一版本相关联的清单中。在一些情况下,例如,第二版本的第一部分可在清单中通过散列值和第二版本的第一部分的大小来标识。
97.在一些情况下,对尚未被确定为形成数据的匹配的n字节大小的窗口的一部分的数据执行过程700。因此,该过程的操作还可包括:在确定文件的第一版本的第一部分满足该一个或多个标准之前,生成与文件的第一版本的第四部分相关联的第二数据。另外,该过程可包括:将第二数据与和文件的第二版本的相应部分相关联的相应数据进行比较,以及确定第二数据不对应于相应数据。在这些情况下,操作702至710可至少部分地响应于确定第二数据不对应于相应数据而发生。
98.图8示出了包括客户端计算设备102(1)发送对应用程序的更新版本的请求的示例性过程800的流程图。该图还示出了远程系统104接收请求并向客户端计算设备发送应用程序的新版本的新部分和清单,以使得该客户端计算设备能够使用该新版本的新部分和已在客户端计算设备上执行的应用程序的先前版本来重新编译新版本。
99.在操作802处,客户端计算设备102(1)发送对从应用程序的第一版本更新为该应用程序的第二版本的请求。客户端计算设备102(1)可响应于来自用户的请求或基于任何其他触发而发送该请求。在一些情况下,该请求伴随有远程系统用于确定正被客户端计算设备执行的当前版本和/或应用程序的期望版本的信息。
100.在操作804处,远程系统接收对更新的请求,并且在操作806处,确定要向客户端计算设备102(1)发送的一个或多个部分和适当清单。例如,远程系统可确定哪些部分是第二版本相对于新版本新有的,并且可检索这些新部分和适当清单,以使用新部分和应用程序的第一版本来从第一版本更新为第二版本。如上所述,清单可包括从第一版本更新为第二版本的操作,或者在其他情况下,可简单地包括用于第二版本的重新编译指令(而不考虑客户端计算设备当前操作的版本)。此外,在一些情况下,发送新部分可包括发送用于使得客户端计算设备能够检索新部分的信息(例如,url)。
101.在操作808处,远程系统104向客户端计算设备102(1)发送新部分和清单(例如,作为更新数据,诸如更新数据302)。客户端计算设备102(1)在操作810处接收新部分和清单,并且在操作812处可使用接收到的数据来将应用程序从第一版本更新为第二版本。如读者将理解的,与过程800相关联的从更新请求开始到成功更新应用程序的时间可能比在响应于初始更新请求,远程系统将发送整个第二版本并且客户端计算设备将安装整个第二版本的情况下的时间要短得多。
102.尽管已经用特定于结构特征的语言描述了主题,但应当理解,所附权利要求书中定义的主题不必限于所描述的具体特征。相反,具体特征被公开为实现权利要求的例示性形式。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1