Techniques for updating files

By identifying the similarities between file versions, generating patch files, and sending the differences, the problem of high network bandwidth and time consumption during file updates is solved, achieving more efficient file updates.

CN113316773BActive Publication Date: 2026-07-14VALVE CORPORATION

Patent Information

Authority / Receiving Office
CN · China
Patent Type
Patents(China)
Current Assignee / Owner
VALVE CORPORATION
Filing Date
2019-12-24
Publication Date
2026-07-14

AI Technical Summary

Technical Problem

Existing technologies require high network bandwidth and long processing times when updating files, especially as the complexity and size of files increase, leading to excessive resource consumption.

Method used

The remote system generates patch files by identifying similarities between different versions of a file, and sends only the differences and a manifest to update the file, reducing the consumption of network bandwidth and computing resources.

Benefits of technology

Sending patch files reduces network bandwidth and computing resource consumption, thus improving the efficiency of file updates.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN113316773B_ABST
    Figure CN113316773B_ABST
Patent Text Reader

Abstract

This application is directed to techniques, devices, and systems for updating files. For example, a remote system can store first data representative of a first version of a file and second data representative of a second version of the file. The remote system can then determine that a first portion of the first data corresponds to a first portion of the second data. Based at least in part on the determination, the remote system can use the first portion of the first data to identify a second portion of the first data and use the first portion of the second data to identify a second portion of the second data. The remote system can then generate third data representative of differences between the second portion of the second data and the second portion of the first data. Additionally, the remote system can store the third data in association with the file.
Need to check novelty before this filing date? Find Prior Art

Description

[0001] Cross-references to related applications

[0002] This application claims priority to U.S. Patent Application 16 / 262,431, filed January 30, 2019, entitled “TECHNIQUES FOR UPDATING FILES”, the entire contents of which are incorporated herein by reference. Background Technology

[0003] Remote systems can send files to electronic devices via a network (such as the Internet). Sometimes, the developers of these files may update them and provide the updated version to the remote system. These updated files can then be provided to the electronic device in response to a request from the device or by other means. However, as files become more complex and larger, sending updated files to electronic devices may require high network bandwidth and may take a relatively long time to store them on those devices. Attached Figure Description

[0004] The specific embodiments are described in detail with reference to the accompanying drawings. In the drawings, the leftmost numeral of the reference numeral indicates the drawing in which that reference numeral first appears. The same reference numerals are used in different drawings to indicate similar or identical parts or features.

[0005] Figure 1 This is a schematic diagram illustrating an exemplary environment including a remote system configured to generate patch files for updating a file from a first version of the file to a second version of the file.

[0006] Figure 2 It is an example of identifying portions of the first version of a file that are similar to the second version of the file to generate a patch for updating instances of the first version of the file to the second version of the file.

[0007] Figure 3 This is an example of a remote system configured to generate patch files for various versions of a file.

[0008] Figures 4A to 4B This is a flowchart of an exemplary process for generating data to update a file from a first version to a second version.

[0009] Figure 5 This is a flowchart of a first exemplary process for identifying portions of first data that resemble portions of second data.

[0010] Figure 6 This is a flowchart of a second exemplary process for identifying portions of first data that resemble portions of second data. Detailed Implementation

[0011] Among other things, this document describes technologies, devices, and systems for efficiently updating files. For example, a remote system may generate, receive, and / or store data representing a first version of a file (referred to in this example as "first data"). This file may represent a game, video, document, etc. In some instances, the file may be provided to the remote system by a third party, such as a game developer. The remote system may then receive a request for the file from one or more electronic devices, such as a personal computer, laptop computer, game console, tablet computer, etc. In response, the remote system may send the first data representing the first version of the file to one or more electronic devices. In some examples, to send the first data, the remote system may first divide the first data into contiguous portions, such as one megabytes. After dividing the first data, the remote system may send these portions to the electronic devices one at a time. In some instances, the remote system may additionally send a manifest to one or more electronic devices that defines the order in which the portions of the first data on the electronic devices are reassembled to generate the first version of the file. Upon receiving the manifest and each portion of the first data, the electronic devices may generate the first version of the file, making the corresponding instance of the file executable or otherwise rendered by the devices.

[0012] Subsequently, the remote system may generate, receive, and / or store data representing a second updated version of the file (referred to in this example as "second data"). To generate the second data, the file's developer may have added, deleted, and / or altered data from the first version of the file. The remote system may then send the second data to one or more electronic devices, which can use it to update the first version of the file to the second version. In some examples, to conserve computing resources such as network bandwidth, the remote system may send a portion of the second data to one or more electronic devices. These devices can then use that portion of the second data to "patch" the first data to update the first version of the file to the second version. In some instances, the patch file is pushed to the electronic device storing the first version of the file, while in other instances, the patch file is sent to those devices in response to a corresponding request received by the remote system from them.

[0013] To generate a patch file, the remote system may begin by dividing a portion of the second data into contiguous parts, which may have the same or similar size as contiguous parts of the first data (e.g., one megabyte). The remote system can then analyze the portion of the first data relative to the portion of the second data to identify similarities between that portion of the first data and that portion of the second data. For example, the remote system may "traverse" the second data to identify matching portions, such as portions of the first data that match portions of the second data.

[0014] In some examples, to analyze portions of first data relative to portions of second data, the remote system may fingerprint or mark these portions. For a first example, the remote system may utilize Cyclic Redundancy Check (CRC) to generate a first checksum associated with a portion of the first data and a second checksum associated with a portion of the second data. The remote system may then compare these first checksums with these second checksums to identify a first checksum that matches these second checksums. Based on the identified match, the remote system may identify a portion of the first data corresponding to a portion of the second data (e.g., data that includes the same portion as the second data). For a second example, the remote system may utilize Secure Hash Algorithm 1 (SHA-1) to generate a first hash value associated with a portion of the first data and a second hash value associated with a portion of the second data. The remote system may then compare these first hash values ​​with these second hash values ​​to identify a first hash value that matches these second hash values. Based on these matches, the remote system may identify a portion of the first data corresponding to that second value. Of course, while some exemplary techniques for identifying matching portions have been described, it should be understood that the remote system may utilize any other techniques to identify such matching portions.

[0015] In some examples, the remote system may then store a unique portion of the second data (e.g., a portion of the second data that does not correspond to a portion of the first data). Additionally, the remote system may generate a manifest indicating the order in which a second version of the file is reassembled using certain portions of the first version of the file and portions of the second version of the file (that are new or unique for the second version). In other words, the manifest defines the order for reassembling (1) portions of the first data corresponding to the second data and (2) the unique portion of the second data. The remote system may then send the unique portion of the second data, along with the manifest, to one or more electronic devices for reassembling the second version of the file. The one or more electronic devices may then use the portions of the first data corresponding to the second data stored on the one or more electronic devices, the received unique portion of the second data, and the manifest to reassemble the second version of the file. Thus, in some examples, instead of sending the entire second data, the remote system may send the unique portion of the second data along with the manifest to one or more electronic devices. This reduces the network bandwidth and time used when a client device updates the first version of a file to the second version of the file.

[0016] In some examples, the unique portion of the second data may be sufficiently similar to a portion of the first data so that the unique portion of the second data can be converted to a portion of the first data using minimal instructions. For example, the difference between the unique portion of the second data and a portion of the first data may include one or more bytes of data that have been added to, removed from, or modified within the portion of the first data. Thus, before and / or instead of sending the unique portion of the second data to one or more electronic devices, the remote system may initially determine whether the unique portion can be converted to a portion of the first data. Based on the determination that the unique portion of the second data can be converted to a portion of the first data, the remote system may generate data representing instructions for converting the unique portion of the second data to a portion of the first data. The remote system may then perform a similar process on other unique portions of the portion that can be converted to the first data. Using this data, the remote system may generate a patch file and send the patch file to one or more electronic devices.

[0017] For example, a remote system can use the above process to identify that a first portion of first data corresponds to a first portion of second data. The remote system can then use similarity to identify a second portion of the second data that can be converted into a second portion of the first data (e.g., a unique portion). In some examples, the remote system identifies the second portion of the second data as a "neighbor" of the first portion of the second data, and identifies the second portion of the first data as a "neighbor" of the first portion of the first data. For a first example, the second portion of the second data may include portions of the second data preceding the first portion of the second data, and the second portion of the first data may include portions of the first data preceding the first portion of the first data. For a second example, the second portion of the second data may include portions of the second data following the first portion of the second data, and the second portion of the first data may include portions of the first data following the first portion of the first data.

[0018] The remote system can then generate data representing the difference between the second portion of the second data and the second portion of the first data. Based on determining that the difference does not meet a threshold difference, the remote system can determine that the second portion of the second data is not similar to the second portion of the first data. However, based on determining that the difference meets the threshold difference, the remote system can determine that the second portion of the second data is similar to the second portion of the first data. The remote system can then store the data representing the difference as at least a portion of a patch file for a second version of the file.

[0019] In some examples, the remote system may use compression to determine whether a second portion of the second data is similar to a second portion of the first data. For example, the remote system may use one or more algorithms (e.g., Lempel-Ziv-Markov Chain Algorithm (LZMA), Lempel-Ziv-Welch (LZW), British Telecom Lempel Ziv (BTLZ), LZ77, LZ78, etc.) to compress the second portion of the first data. Based on this compression, the remote system may generate first compressed data of the second portion of the first data. The remote system may also use an algorithm to compress the second portion of the second data. Based on this compression, the remote system may generate second compressed data of the second portion of the second data. Furthermore, the remote system may use the algorithm and the first compressed data to compress the second portion of the second data again. For example, the remote system may use the first compressed data as a basis to generate third compressed data, where the third compressed data represents the difference between the second portion of the first data and the second portion of the second data.

[0020] The remote system can then determine the difference between the second compressed data and the third compressed data. The remote system can then determine whether the difference meets a threshold difference. For a first example, the remote system can determine the size difference between the second compressed data and the third compressed data. The remote system can then determine whether the size difference meets a size threshold. For example, if the size difference is 0.5 megabytes and the size threshold is 0.75 megabytes, the remote system can determine that the size difference meets the size threshold (e.g., within the size threshold). For a second example, the remote system can determine the ratio (e.g., the difference) between the size of the third compressed data and the size of the second compressed data. The remote system can then determine whether the ratio meets a threshold. For example, if the second compressed data includes a size of 0.5 megabytes and the third compressed data includes a size of 0.8 megabytes, the remote system can determine that the ratio between the size of the second compressed data and the size of the third compressed data is 0.625. If the threshold includes 0.8, the remote system can determine that the ratio meets the threshold (e.g., within the threshold). For example, the remote system can determine that a ratio of 0.625 is within the threshold of 0.8 (e.g., less than the threshold). In some examples, the smaller the ratio, the more the second part of the second data resembles the second part of the first data.

[0021] In some examples, compressed data may include dictionaries and / or references. For example, a remote system may use an algorithm to compress a second portion of the first data. Based on this compression, the remote system may generate a first dictionary and a first reference (e.g., a first sequence of symbols and phrase references). The remote system may also use an algorithm to compress a second portion of the second data. Based on this compression, the remote system may generate a second dictionary and a second reference (e.g., a second sequence of symbols and phrase references). Furthermore, the remote system may use the algorithm and the first dictionary to compress the second portion of the second data again. For example, the remote system may use the first dictionary as a basis to generate a third dictionary and / or a third reference (e.g., a third sequence of symbols and phrase references), which represents the differences between the second portion of the first data and the second portion of the second data.

[0022] For example, in some cases, if the second part of the second data is highly similar to the second part of the first data, such as differing by a few bytes, then the third dictionary and / or the third reference is considered similar to the first dictionary and / or the first reference. Conversely, if the second part of the second data is not similar to the second part of the first data, then the third dictionary and / or the third reference is not considered similar to the first dictionary and / or the first reference.

[0023] The remote system can then determine the difference between the second and third dictionaries. The remote system can then determine whether this difference meets a threshold difference. For a first example, the remote system can determine the size difference between the second and third dictionaries. The remote system can then determine whether this size difference meets a size threshold. For example, if the size difference is 0.5 megabytes and the size threshold is 0.75 megabytes, the remote system can determine that the size difference meets the size threshold (e.g., is within the size threshold). For a second example, the remote system can determine the ratio (e.g., the difference) between the size of the third dictionary and the size of the second dictionary. The remote system can then determine whether this ratio meets a threshold. For example, if the second dictionary includes a size of 0.5 megabytes and the third dictionary includes a size of 0.8 megabytes, the remote system can determine that the ratio of the size of the second dictionary to the size of the third dictionary is 0.625. If the threshold includes 0.8, the remote system can determine that the ratio meets the threshold (e.g., is within the threshold). For example, the remote system can determine that a ratio of 0.625 is within the threshold of 0.8 (e.g., is less than the threshold). In some examples, the smaller the ratio, the more the second part of the second data resembles the second part of the first data.

[0024] In some examples, based on determining that the difference meets a threshold, the remote system may store data representing the difference (e.g., at least a portion of third compressed data, at least a portion of a third dictionary different from the first dictionary and / or the third reference, etc.) as part of a patch file for a second version of the file. Alternatively, the remote system may perform a similar process to generate additional data representing the difference for one or more other portions of the second data that the remote system determines resembles the first data. The remote system may then store this additional data as part of the patch file. In some examples, the remote system may then send the patch file, rather than the only portion of the second data that the remote system determines resembles the first data, to one or more electronic devices. By sending the patch file, the remote system can further conserve computational resources, such as network bandwidth.

[0025] In some examples, a remote system may perform a similar process to update other versions of a file. For instance, the remote system may store data representing a third version of the file (referred to as "third data" in this example). The remote system may then identify portions of the third data corresponding to portions of the second data, generate patches for unique portions of the third data found to resemble portions of the second data, and identify portions of the third data that do not resemble portions of the second data. The remote system may then send the patch file for the unique portions of the third data found to resemble the portions of the second data, and the portions of the third data that do not resemble the portions of the second data, to one or more electronic devices.

[0026] In some examples, when there are numerous versions of a file, the remote system can perform the above process on one or more pairs of versions of the file. For the first example, if the file has four versions, the remote system can perform the above process to update version 1 to version 2, version 1 to version 3, version 1 to version 4, version 2 to version 3, version 2 to version 4, and / or version 3 to version 4. For the second example, the remote system can perform the above process for the most popular update. For example, if one electronic device updates version 1 to version 4 and fifty electronic devices update version 3 to version 4, the remote system can perform the above process to update version 3 to version 4, but the remote system may not perform the above process to update version 1 to version 4.

[0027] It should be noted that in some examples, when analyzing the identified portion of the second data relative to the identified portion of the first data, the remote system may determine that the identified portion of the second data is similar to the identified portion of the first data. In such examples, the remote system may then determine that the identified portion of the second data corresponds to the identified portion of the first data. Alternatively, the remote system may use the "neighbors" of the identified portion of the second data and the identified portion of the first data to perform the above process.

[0028] In some examples, by performing the above process (e.g., using matching parts), the remote system can more easily identify portions of the first data that correspond to portions of the second data. This reduces the need for the remote system to analyze each portion of the first data to each portion of the second data, thereby reducing the amount of processing performed by the remote system. Thus, by performing the above process, the remote system may require fewer computational resources when processing the first and second data.

[0029] Figure 1 This is a schematic diagram illustrating an exemplary environment 100 including a remote system 102 configured to generate a patch file for updating a file from a first version 104 of the file to a second version 106 of the file. In some examples, the file may correspond to a game. For example, the first version 104 of the file may correspond to a first version of the game, and the second version 106 of the file may correspond to an updated second version of the game. In other examples, the file may correspond to an application, program, document, video, image, etc. In some examples, the remote system 102 may receive the first version 104 and / or the second version 106 of the file from one or more computing devices associated with the developer of the file.

[0030] At the first moment, remote system 102 can send first data 110, representing the first version 104 of a file, to one or more electronic devices, such as first electronic device 112(1), second electronic device 112(2), and third electronic device 112(3), via network 108. Although only three electronic devices 112(1)-(3) are shown for clarity, in other examples, remote system 102 can send the first data 110 to any number of electronic devices.

[0031] In some examples, in order to send first data 110 to electronic devices 12(1)-(3), remote system 102 may use partitioning component 114 to identify portions 116(1)-(6) of the first data 110. Portions 116(1)-(6) may include consecutive segments of the first data 110. In some examples, portions 116(1)-(6) of the first data 110 may include any size. For example, portions 116(1)-(6) may include, but are not limited to: a consecutive segment of 500 bytes of the first data 110, a consecutive segment of 1 megabyte of the first data 110, a consecutive segment of 5 megabytes of the first data 110, etc. Remote system 102 may then send portions 116(1)-(6) of the first data 110 to electronic devices 112(1)-(3). Additionally, in some examples, remote system 102 may send data representing list 118 to electronic devices 112(1)-(3). Listing 118 may define the order in which portions 116(1)-(6) of the first data 110 on the electronic device 112(1)-(3) are reassembled to generate the first version 104 of the file.

[0032] Subsequently, remote system 102 may generate, receive, and / or store second data 120 representing a second version 106 of the file. To generate the second data 120, data may have been added to first data 110, removed from first data 110, or modified within first data 110, etc. Using the first data 110 and the second data 120, remote system 102 may generate a patch on electronic devices 112(1)-(3) to update the first version 104 of the file to the second version 106 of the file. For example, remote system 102 may utilize partitioning component 114 to identify portions 116(1), 116(4), 116(6), and 116(7)-(9) of the second data 120. Portions 116(1), 116(4), 116(6), and 116(7)-(9) may comprise consecutive segments of the second data. In some examples, portions 116(1), 116(4), 116(6), and 116(7)-(9) of the second data 120 may include any size. For example, portions 116(1), 116(4), 116(6), and 116(7)-(9) may include, but are not limited to: a 500-byte contiguous segment of the first data 110, a 1-megabyte contiguous segment of the first data 110, a 5-megabyte contiguous segment of the first data 110, etc.

[0033] Then, the remote system 102 can use the matching component 122 to analyze the portions 116(1)-(6) of the first data 110 relative to portions 116(1), 116(4), 116(6), and 116(7)-(9) of the second data 120 to identify the similarity between portions of the first data 110 and portions of the second data 120. In some examples, to perform this analysis, the matching component 122 can fingerprint or mark portions 116(1)-(9). For a first example, the matching component 122 can use CRC to generate a first check value 124 associated with portions 116(1)-(6) of the first data 110 and a second check value 124 associated with portions 116(1), 116(4), 116(6), and 116(7)-(9) of the second data 120. Then, the matching component 122 can compare the first check value 124 with the second check value 124 to identify the portion of the first data 110 that corresponds to the portion of the second data 120 (e.g., including data that is the same as the portion of the second data).

[0034] For example, such as Figure 1As shown in the example, the matching component 122 can determine that the check value 124 associated with portion 116(1) of the first data 110 and the check value 124 associated with portion 116(1) of the second data 120 match. Thus, the matching component 122 can determine that portion 116(1) of the first data 110 corresponds to portion 116(1) of the second data 120. Additionally, the matching component 122 can determine that the check value 124 associated with portion 116(4) of the first data 110 and the check value 124 associated with portion 116(4) of the second data 120 match. Thus, the matching component 122 can determine that portion 116(4) of the first data 110 corresponds to portion 116(4) of the second data 120. Furthermore, the matching component 122 can determine that the check value 124 associated with portion 116(6) of the first data 110 and the check value 124 associated with portion 116(6) of the second data 120 match. In this way, the matching component 122 can determine that part 116(6) of the first data 110 corresponds to part 116(6) of the second data 120.

[0035] For the second example, as a supplement or alternative to using CRC, the matching component 122 may use SHA-1 to generate a first hash value 124 associated with portions 116(1)-(6) of the first data 110 and a second hash value 124 associated with portions 116(1), 116(4), 116(6), and 116(7)-(9) of the second data 120. The matching component 122 may then compare the first hash value 124 with the second hash value 124 to identify the portion of the first data 110 corresponding to the portion of the second data 120.

[0036] For example, such as Figure 1 As shown in the example, the matching component 122 can determine that the hash value 124 associated with a portion 116(1) of the first data 110 matches the hash value 124 associated with a portion 116(1) of the second data 120. Thus, the matching component 122 can determine that a portion 116(1) of the first data 110 corresponds to a portion 116(1) of the second data 120. Additionally, the matching component 122 can determine that the hash value 124 associated with a portion 116(4) of the first data 110 matches the hash value 124 associated with a portion 116(4) of the second data 120. Thus, the matching component 122 can determine that a portion 116(4) of the first data 110 corresponds to a portion 116(4) of the second data 120. Furthermore, the matching component 122 can determine that the hash value 124 associated with a portion 116(6) of the first data 110 matches the hash value 124 associated with a portion 116(6) of the second data 120. In this way, the matching component 122 can determine that part 116(6) of the first data 110 corresponds to part 116(6) of the second data 120.

[0037] In some examples, the matching part 122 also identifies a unique portion of the second data 120. For example, as... Figure 1 As shown in the example, the matching component 122 can determine that the checksum 124 and / or hash value 124 associated with portions 116(7)-(9) of the second data 120 does not match the checksum 124 and / or hash value 124 associated with portions 116(1)-(7) of the first data 110. Thus, the matching component 122 can determine that portions 116(7)-(9) of the second data 120 include unique parts. In some examples, when electronic devices 112(1)-(3) update files, the remote system 102 can send the unique portion 116(7)-(9) of the second data 120 along with data representing list 118 to electronic devices 112(1)-(3). Listing 116 may define the order in which a second version 106 of a file is generated by reassembling portions 116(1), 116(4), 116(6) of the first data 110 stored on electronic devices 112(1)-(3) and unique portions 116(7)-(9) of the second data 120.

[0038] However, in some examples, the unique portion of the second data 120 may be sufficiently similar to a portion of portions 116(1)-(6) of the first data 110, such that the unique portion of the second data 120 can be converted to portions 116(1)-(6) of the first data 120 using minimal instructions. For example, the difference between the unique portion of the second data 120 and portions 116(1)-(6) of the first data 110 may include one or more bytes of data that have been added to portions 116(1)-(6) of the first data 110, removed from those portions of the first data, or modified within those portions of the first data. Thus, before and / or instead of sending the unique portion of the second data 116(7)-(9) to one or more electronic devices 112(1)-(3), the remote system 102 may initially determine whether the unique portion 116(7)-(9) can be converted to a portion of portions 116(1)-(6) of the first data 110. Based on the determination that a unique portion of the second data 120 can be converted into portions 116(1)-(6) of the first data 110, the remote system 102 can generate data representing instructions for converting that unique portion of the second data 120 into portions 116(1)-(6) of the first data 110. The remote system 102 can then perform a similar process on other unique portions 116(1)-(6) that can be converted into the first data 110. Using this data, the remote system 102 can generate a patch file 126 and send the patch file 126 to one or more electronic devices 112(1)-(3).

[0039] For example, matching component 122 may determine that portion 116(4) of first data 110 corresponds to portion 116(4) of second data 120. Matching component 122 may then use similarity to identify portions of second data 120 that can be converted into portions of first data 110 (e.g., unique portions). In some examples, matching component 122 identifies that portion of second data 120 as a “neighbor” of portion 116(4) of second data 120, and identifies that portion of first data 110 as a “neighbor” of portion 116(4) of first data 110. For a first example, matching component 122 may identify portions 116(8) of second data 120 preceding portion 116(4) of second data 120 and portions 116(3) of first data 110 preceding portion 116(4) of first data 110. For the second example, the matching component 122 can identify the portion 116(9) of the second data 120 after the portion 116(4) of the second data 120 and the portion 116(5) of the first data 110 after the portion 116(4) of the first data 110.

[0040] Then, the remote system 102 can generate data representing the difference between the identified portion of the second data 120 and the identified portion of the first data 110. Based on determining that the difference does not meet threshold 130, the remote system 102 can determine that the identified portion of the second data 120 is not similar to the identified portion of the first data 110. However, based on determining that the difference meets the threshold difference, the remote system 102 can determine that the identified portion of the second data 120 is similar to the identified portion of the first data 110. The remote system 102 can then store the data representing the difference in a patch file 126 for a second version 106 of the file.

[0041] In some examples, remote system 102 may use compression to determine whether an identified portion of second data 120 is similar to an identified portion of first data 110. For example, and by using subsequent portions of first data 110 and second data 120, remote system 102 may utilize compression component 128 to compress portion 116(5) of first data 110 and portion 116(9) of second data. For example, compression component 128 may use an algorithm (e.g., LZMA, LZW, BTLZ, LZ77, LZ78, etc.) to compress portion 116(5) of first data 110. Based on this compression, compression component 128 may generate first compressed data of portion 116(5) of first data 110. Compression component 128 may also use an algorithm to compress portion 116(9) of second data 120. Based on this compression, compression component 128 generates second compressed data of portion 116(9) of second data 120. Additionally, compression component 128 may use the algorithm and the first compressed data to compress portion 116(9) of second data 120 again. For example, compression component 128 can use the first compression data as a basis to generate third compression data, wherein the third compression data represents the difference between portion 116(5) of the first data 110 and portion 116(9) of the second data 120.

[0042] The remote system 102 can then determine the difference between the second compressed data and the third compressed data. The analysis unit 136 can then determine whether the difference meets a threshold difference. For a first example, the analysis unit 136 can determine the size difference between the second compressed data and the third compressed data. The analysis unit 136 can then determine whether the size difference meets a size threshold. For example, if the size difference is 0.5 megabytes and the size threshold is 0.75 megabytes, then the analysis unit 136 can determine that the size difference meets the size threshold (e.g., within the size threshold). For a second example, the analysis unit 136 can determine the ratio (e.g., the difference) between the size of the third compressed data and the size of the second compressed data. The analysis unit 136 can then determine whether the ratio meets a threshold. For example, if the second compressed data includes a size of 0.5 megabytes and the third compressed data includes a size of 0.8 megabytes, then the analysis unit 136 can determine that the ratio between the size of the second compressed data and the size of the third compressed data is 0.625. If the threshold includes 0.8, then the analysis unit 136 can determine that the ratio meets the threshold (e.g., within the threshold). For example, analysis component 136 can determine that a ratio of 0.625 is within (e.g., less than) a threshold of 0.8. In some examples, the smaller the ratio, the more the second portion of the second data 120 resembles the second portion of the first data 110.

[0043] In some examples, the compressed data may include dictionaries and / or references. For example, compression component 128 may use an algorithm (e.g., LZMA, LZW, BTLZ, LZ77, LZ78, etc.) to compress portion 116(5) of the first data 110. Based on this compression, compression component 128 may generate a first dictionary 132 and a first reference 134 (e.g., a first sequence of symbols and phrase references). Compression component 128 may also use an algorithm to compress portion 116(9) of the second data 120. Based on this compression, compression component 128 may generate a second dictionary 132 and a second reference 134 (e.g., a second sequence of symbols and phrase references). Additionally, compression component 128 may use the algorithm and the first dictionary 132 to compress portion 116(9) of the second data 120 again. For example, compression component 128 may use the first dictionary 132 as a basis to initially populate a third dictionary 132. Then, compression component 128 can add additional data to the third dictionary, wherein the additional data represents the difference between portion 116(5) of the first data 110 and the second portion 116(9) of the second data 120. In addition, compression component 128 can generate a third reference 134 (e.g., a third sequence of symbols and phrase references) for the third dictionary 132.

[0044] The remote system 102 can then use the analysis component 136 to determine the difference between the second dictionary 132 and the third dictionary 132. The analysis component 136 can then determine whether the difference meets a threshold 130. For a first example, the analysis component 136 can determine the size difference between the second dictionary 132 and the third dictionary 132. The analysis component 136 can then determine whether the size difference meets a size threshold 130. The size threshold 130 may include, but is not limited to, 100 bytes, 250 bytes, 500 bytes, 1 megabyte, and / or any other size. For example, if the size difference between the second dictionary 132 and the third dictionary 132 is 0.5 megabytes and the size threshold is 0.75 megabytes, then the analysis component 136 can determine that the size difference meets the size threshold 130 (e.g., within that size threshold).

[0045] For the second example, analysis component 136 can determine the ratio (e.g., difference) between the size of the third dictionary 132 and the size of the second dictionary 132. The remote system can then determine whether this ratio satisfies a threshold 130. Threshold 130 may include, but is not limited to, 0.1, 0.2, 0.5, 0.8, and / or any other threshold. For example, if the second dictionary 132 comprises 0.5 megabytes and the third dictionary 132 comprises 0.8 megabytes, then the remote system 102 can determine that the ratio of the size of the second dictionary 132 to the size of the third dictionary 132 is 0.625. If the threshold includes 0.8, then the remote system 102 can determine that the ratio satisfies the threshold (e.g., is within the threshold). For example, the remote system 102 can determine that the ratio of 0.625 is within the threshold of 0.8 (e.g., is less than the threshold).

[0046] In some examples, remote system 102 may utilize update component 138 to generate patch file 126 for a second version 106 of a file. For example, based on determining that the difference meets threshold 130, update component 138 may store conversion data 140 representing the difference between a portion 115(9) of second data 120 and a portion 115(5) of first data 110. In some examples, conversion data 140 may represent the difference between a third dictionary 132 and a first dictionary 132. Additionally, update component 138 may store data representing a third reference 134 generated for the third dictionary 132.

[0047] In some examples, the remote system 102 may then perform a similar process for each of the other unique portions 116(7)-(8) of the second data 120. For example, the remote system 102 may analyze portion 116(8) of the second data 120 relative to portion 116(3) of the first data 110. During this analysis, the update component 138 may determine that the difference between portion 116(8) of the second data 120 and portion 116(3) of the first data 110 satisfies a threshold 130. Based on this determination, the update component 138 may store transformed data 140 representing the difference between portion 116(8) of the second data 120 and portion 116(3) of the first data 110 in a patch file 126. Additionally, the update component 138 may store data representing a fourth reference 134 (e.g., a fourth sequence of symbols and phrase references) of a fourth dictionary 132, which is generated by the compression component 128 for portion 116(8) of the second data 120.

[0048] In some examples, remote system 102 may determine that a unique portion of the second data 120 is not similar to one of the portions 116(1)-(6) of the first data 110. For example, remote system 102 may analyze portion 116(7) of the second data 120 relative to portion 116(2) of the first data 110. During this analysis, update component 138 may determine that the difference between portion 116(7) of the second data 120 and portion 116(2) of the first data 110 does not meet threshold 130. In some examples, based on this determination, update component 138 stores partial data 142 representing portion 116(7) of the second data 120 in patch file 126. In some examples, update component 138 may store data that associates portion 116(7) of the second data 120 with a second version 106 of the file.

[0049] Then, remote system 102 can send patch file 126 to electronic device 112(1)-(3) via network 108. In some examples, if patch file 126 does not include partial data 142, remote system 102 can send part 116(7) of second data 120 separately to electronic device 112(1)-(3). Electronic device 112(1)-(3) can then use the first data 110 for the first version 104 of the file, patch file 126 and / or dictionary 132 associated with part 116(1)-(6) of the first data 110 to update the first version 104 of the file to the second version 106 of the file.

[0050] For example, electronic device 112(1) may use portions 116(1), 116(4), and 116(6) of first data 110 corresponding to portions 116(1), 116(4), and 116(6) of second data 120, wherein portions 116(1), 116(4), and 116(6) of first data 110 have been stored by electronic device 112(1). Additionally, electronic device 112(1) may use a dictionary 132 associated with portion 116(3) of first data 110, conversion data 140 associated with portion 116(8) of second data 120, and / or a reference 134 associated with portion 116(8) of second data 120 to convert portion 116(3) of first data 110 into portion 116(8) of second data 120. Similarly, electronic device 112(1) may use a dictionary 132 associated with portion 116(5) of first data 110, conversion data 140 associated with portion 116(9) of second data 120, and / or a reference 134 associated with portion 116(9) of second data 120 to convert portion 116(5) of first data 110 into portion 116(9) of second data 120. Furthermore, electronic device 112(1) may use portion 116(7) of second data 120 instead of portion 116(2) of first data 110.

[0051] like Figure 1 As further shown, remote system 102 may include processor 144, network interface 146, and memory 148, and electronic device 112(1) may include processor 150, network interface 152, and memory 154. As used herein, processors (such as processor 144 and processor 150) may include multiple processors and / or processors having multiple cores. Furthermore, processors may include one or more cores of different types. For example, processors may include application processing units, graphics processing units, etc. In one embodiment, processors may include microcontrollers and / or microprocessors. Processors may include graphics processing units (GPUs), microprocessors, digital signal processors, or other processing units or components known in the art. Alternatively or additionally, the functions described herein may be performed at least in part by one or more hardware logic components. For example, but not limited to, exemplary types of hardware logic components that may be used include field-programmable gate arrays (FPGAs), application-specific integrated circuits (ASICs), application-specific standard products (ASSPs), systems-on-a-chip (SOCs), complex programmable logic devices (CPLDs), etc. Additionally, each processor in the processor may have its own local memory, which may also store program components, program data, and / or one or more operating systems.

[0052] Memory (such as memory 148 and memory 154) may include volatile and non-volatile memory, removable and non-removable media, which are implemented in any method or technology for storing information such as computer-readable instructions, data structures, program components or other data. Such memory includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technologies, CD-ROM, digital versatile disc (DVD) or other optical storage devices, magnetic tape, magnetic tape, disk storage devices or other magnetic storage devices, RAID storage systems, or any other medium that can be used to store desired information and is accessible by a computing device. Memory may be implemented as a computer-readable storage medium (“CRSM”), which may be any available physical medium accessible to a processor to execute instructions stored on the memory. In one basic embodiment, the CRSM may include random access memory (“RAM”) and flash memory. In other embodiments, the CRSM may include, but is not limited to, read-only memory (“ROM”), electrically erasable programmable read-only memory (“EEPROM”), or any other tangible medium that can be used to store desired information and is accessible by a processor.

[0053] Furthermore, functional components may be stored in corresponding memories, or the same functionality may alternatively be implemented in hardware, firmware, application-specific integrated circuits (ASICs), field-programmable gate arrays (FPGAs), or as a system-on-a-chip (SoC). Additionally, although not shown, each corresponding memory discussed herein (such as a memory) may include at least one operating system (OS) component configured to manage hardware resource devices (such as network interfaces, I / O devices of the corresponding device, etc.) and provide various services to applications or components executing on the processor. Such OS components may implement variants of the FreeBSD operating system released by the FreeBSD project; other UNIX or UNIX-like variants; variants of the Linux operating system released by Linus Torvalds; the FireOS operating system of Amazon.com Inc. in Seattle, Washington, USA; the Windows operating system of Microsoft Corporation in Redmond, Washington, USA; LynxOS released by Lynx Software Technologies, Inc. in San Jose, California, USA; and the embedded operating system (Enea OSE) released by ENEA AB in Sweden, etc.

[0054] Network interfaces (such as network interface 146 and network interface 152) enable communication between components and / or devices shown in environment 100 and / or with one or more other remote systems and other networked devices. Such network interfaces may include one or more network interface controllers (NICs) or other types of transceiver devices to send and receive communications over network 108. For example, each network interface may include a Personal Area Network (PAN) component to enable communication to be transmitted over one or more short-range wireless communication channels. For example, the PAN component may enable communication conforming to at least one of the following standards: IEEE 802.15.4 (ZigBee), IEEE 802.15.1 (Bluetooth), IEEE 802.11 (WiFi), or any other PAN communication protocol. Furthermore, each network interface may include a Wide Area Network (WAN) component to enable communication to be transmitted over a wide area network.

[0055] Figure 2 This is an example of identifying a portion of first data 202 that is a portion of second data 206 representing a first version 204 of a file, which can be converted to a second version 208 of a file. For example, remote system 102 may analyze portions 210(1)-(6) of first data 202 relative to portions 210(3) and 212(1)-(5) of second data 206 to identify portions of first data 202 that are similar to portions of second data 206. For example, at process 214, remote system 102 may use the procedures described herein (e.g., CRC, SHA-1, etc.) to initially determine that portion 210(3) of first data 202 corresponds to portion 210(3) of second data 206. Then, remote system 102 may use portion 210(3) of first data 202 and portion 210(3) of second data 206 as “anchor” portions to identify portions of first data 202 that are similar to portions of second data 206.

[0056] Next, at process 216, remote system 102 may analyze the “neighbor” portions of these anchor portions to determine whether these neighbor portions are similar to each other. For the first example, remote system 102 may use one or more of the methods described herein (e.g., LZMA, LZW, BTLZ, LZ77, LZ78, etc.) to analyze portion 210(2) of first data 202 relative to portion 212(3) of second data 206 to determine whether portion 210(2) of first data 202 is similar to portion 212(3) of second data 206. Additionally, remote system 102 may use one or more of the methods described herein (e.g., LZMA, LZW, BTLZ, LZ77, LZ78, etc.) to analyze portion 210(4) of first data 202 relative to portion 212(4) of second data 206 to determine whether portion 210(4) of first data 202 is similar to portion 212(4) of second data 206.

[0057] Next, at process 218, when the remote system 102 determines that the two portions are similar to each other, the remote system can continue to analyze the neighboring portion. For the first example, the remote system 102 may have determined that portion 210(4) of the first data 202 is similar to portion 212(4) of the second data 206 (e.g., the difference between portion 210(4) of the first data 202 and portion 212(4) of the second data 206 meets a threshold). Based on this determination, the remote system 102 may use one or more of the methods described herein (e.g., LZMA, LZW, BTLZ, LZ77, LZ78, etc.) to analyze portion 210(5) of the first data 202 relative to portion 212(5) of the second data 206 to determine whether portion 210(5) of the first data 202 is similar to portion 212(5) of the second data 206.

[0058] For the second example, the remote system 102 may have determined that portion 210(2) of the first data 202 is not similar to portion 212(3) of the second data 206 (e.g., the difference between portion 210(2) of the first data 202 and portion 212(3) of the second data 206 does not meet a threshold). In some examples, and as... Figure 2As illustrated in the example, based on this determination, remote system 102 may determine not to analyze portion 210(1) of first data 202 relative to portion 212(2) of second data 206. However, in other examples, remote system 102 may still use one or more of the methods described herein (e.g., LZMA, LZW, BTLZ, LZ77, LZ78, etc.) to analyze portion 210(1) of first data 202 relative to portion 212(2) of second data 206 to determine whether portion 210(1) of first data 202 is similar to portion 212(2) of second data 206.

[0059] Figure 3 This is an example of remote system 102 generating patch files for various versions of a file. For example, remote system 102 may store a first version 302 of a file, a second version 304 of a file, a third version 306 of a file, and a fourth version 308 of a file. By using the process described herein, remote system 102 may generate a first patch file 310 for updating the first version 302 of a file to the second version 304 of a file, a second patch file 312 for updating the first version 302 of a file to the third version 306 of a file, a third patch file 314 for updating the first version 302 of a file to the fourth version 308 of a file, a fourth patch file 316 for updating the second version 304 of a file to the third version 306 of a file, a fifth patch file 318 for updating the second version 304 of a file to the fourth version 308 of a file, and / or a sixth patch file 320 for updating the third version 306 of a file to the fourth version 308 of a file.

[0060] Then, remote system 102 can send patch files 310-320 to the electronic devices based on the current version of the file stored on the electronic devices. For the first example, the first set of electronic devices 322 may be storing a third version 306 of the file. Thus, remote system 102 can send a sixth patch file 320 to the first set of electronic devices 322 to update the third version 306 of the file to a fourth version 308. Additionally, the second set of electronic devices 324 may be storing a second version 304 of the file. Thus, remote system 102 can send a fifth patch file 318 to the second set of electronic devices 324 to update the second version 304 of the file to a fourth version 308. Furthermore, the third set of electronic devices 326 may be storing a first version 302 of the file. Thus, remote system 102 can send a first patch file 310 to the third set of electronic devices 326 to update the first version 302 of the file to a fourth version 308.

[0061] In some examples, instead of generating each of patch files 310-320, remote system 102 may generate a patch file for the most popular update of the file. For example, in Figure 3 In the example, the first group of electronic devices 322 includes four electronic devices that update the file from version 306 (third version) to version 308 (fourth version), the second group of electronic devices 324 includes four electronic devices that update the file from version 304 (second version) to version 308 (fourth version), and the third group of electronic devices 326 includes two electronic devices that update the file from version 302 (first version) to version 308 (fourth version). Thus, in some examples, the remote system 102 may only generate a fifth patch file 318 for updating the file from version 304 (second version) to version 308 (fourth version) and a sixth patch file 320 for updating the file from version 306 (third version) to version 308 (fourth version) because these are the most popular updates. However, because only two electronic devices are updating the file from version 302 (first version) to version 308 (fourth version), the remote system 102 may not generate a first patch file 310.

[0062] The processes described herein are represented as a collection of boxes in a logic flowchart, each box representing a series of operations that can be implemented in hardware, software, or a combination thereof. In the context of software, these boxes represent computer-executable instructions that, when executed by one or more processors, perform the listed operations. Typically, computer-executable instructions include routines, programs, objects, components, data structures, etc., that perform a specific function or implement a specific abstract data type. The order in which the operations are described is not intended to be construed as limiting, and any number of the described boxes can be combined in any order and / or in parallel to implement these processes.

[0063] Figures 4A to 4B This is a flowchart of an exemplary process 400 for generating data to update a file from one version to a second version of the file. At 402, process 400 may include storing first data representing a first version of the file. For example, remote system 102 may store the first data representing the first data of the file. In some examples, the file may be associated with a game. In some examples, remote system 102 may receive the first data from one or more computing devices associated with the developer of the file.

[0064] At 404, process 400 may include identifying a first portion of first data representing a first version of a file. For example, remote system 102 may identify a first portion of first data representing a first version of a file. These first portions of the first data may include consecutive segments of the first data. For example, the first portions of the first data may include, but are not limited to: a consecutive segment of 500 bytes of the first data, a consecutive segment of 1 megabyte of the first data, a consecutive segment of 5 megabytes of the first data, etc.

[0065] At 406, process 400 may include storing second data representing a second version of the file. For example, remote system 102 may store second data representing a second version of the file. In some examples, data may have been added to, removed from, or modified within the first data in order to generate the second data. In some examples, remote system 102 may receive the second data from one or more computing devices associated with the file's developer.

[0066] At 408, process 400 may include identifying a second portion of second data representing a second version of the file. For example, remote system 102 may identify a second portion of second data representing a second version of the file. The second portion of the second data may include contiguous segments of the second data. For example, the second portion of the second data may include, but is not limited to: a contiguous segment of 500 bytes of the second data, a contiguous segment of 1 megabyte of the second data, a contiguous segment of 5 megabytes of the second data, etc. In some examples, the second portion of the second data may include a size similar to the first portion of the first data.

[0067] At 410, process 400 may include determining that the first part of the first part corresponds to the first part of the second part. For example, remote system 102 may determine that the first part of the first part corresponds to the first part of the second part. In some examples, to make this determination, remote system 102 may use CRC to determine a first checksum of the first part of the first part and a second checksum of the first part of the second part. Then, remote system 102 may determine that the first checksum is the same as the second checksum. In some examples, to make this determination, remote system 102 may use SHA-1 to determine a first hash value of the first part of the first part and a second hash value of the first part of the second part. Then, remote system 102 may determine that the first hash value is the same as the second hash value.

[0068] At 412, process 400 may include using the first portion of the first part to identify a second portion of the first part. For example, remote system 102 may use the first portion of the first part to identify a second portion of the first part. In some examples, remote system 102 may identify the second portion of the first part as a portion of first data following the first portion of the first part. In some examples, remote system 102 may identify the second portion of the first part as a portion of first data preceding the first portion of the first part.

[0069] At 414, process 400 may include using the first portion of the second part to identify the second portion of the second part. For example, remote system 102 may use the first portion of the second part to identify the second portion of the second part. In some examples, remote system 102 may identify the second portion of the second part as a portion of second data following the first portion of the second part. In some examples, remote system 102 may identify the second portion of the second part as a portion of first data preceding the first portion of the second part.

[0070] At 416, process 400 may include compressing a second portion of the first portion by generating at least a first dictionary. For example, remote system 102 may compress the second portion of the first portion by generating at least a first dictionary. In some examples, remote system 102 uses one or more algorithms (e.g., LZMA, LZW, BTLZ, LZ77, LZ78, etc.) associated with one or more compression techniques to compress the second portion of the first portion. In some examples, remote system 102 uses one or more other compression techniques to compress the second portion of the first portion.

[0071] At 418, process 400 may include compressing the second part of the second part by generating at least a second dictionary. For example, remote system 102 may compress the second part of the second part by generating at least a second dictionary. In some examples, remote system 102 uses one or more algorithms (e.g., LZMA, LZW, BTLZ, LZ77, LZ78, etc.) associated with one or more compression techniques to compress the second part of the second part. In some examples, remote system 102 uses one or more other compression techniques to compress the second part of the second part.

[0072] At 420, process 400 may include compressing the second portion of the second part by generating at least a third dictionary and a reference using a first dictionary. For example, remote system 102 may compress the second portion of the first part by generating at least a third dictionary and a reference using a first dictionary. For example, remote system 102 may use a first dictionary as a base. Then, remote system 102 may add additional data to the first dictionary based on the first data included in the second portion of the second part to generate a third dictionary. In some examples, remote system 102 uses one or more algorithms associated with one or more compression techniques (e.g., LZMA, LZW, BTLZ, LZ77, LZ78, etc.) to compress the second portion of the second part. In some examples, remote system 102 uses one or more other compression techniques to compress the second portion of the second part.

[0073] At 422, process 400 may include using a second dictionary and a third dictionary to determine the difference between the second part of the first part and the second part of the second part. For example, remote system 102 may use the second dictionary and the third dictionary to determine the difference between the second part of the first part and the second part of the second part. In some examples, remote system 102 may determine the difference as a size difference between the second dictionary and the third dictionary. In some examples, remote system 102 may determine the difference as a ratio between the second dictionary and the third dictionary.

[0074] At 424, process 400 may include determining whether the difference meets a threshold. For example, remote system 102 may determine whether the difference meets a threshold difference. In some examples, when the difference includes a size difference, remote system 102 may determine that the size difference meets the threshold when the size difference is within a size threshold. In some examples, when the difference includes a ratio, remote system 102 may determine that the size difference meets the threshold when the ratio is within a ratio threshold.

[0075] If it is determined at 424 that the difference does not meet the threshold, then at 426, process 400 may include determining that the second part of the second portion is not similar to the second part of the first portion. For example, if remote system 102 determines that the difference does not meet the threshold, remote system 102 may determine that the second part of the second portion is not similar to the second part of the first portion. Additionally, in some examples, when remote system 102 receives a request from an electronic device to update a first version of a file to a second version of the file, remote system 102 may send the second part of the second portion to the electronic device.

[0076] If it is determined at 424 that the difference meets a threshold, then at 428, process 400 may include determining that the second part of the second part is similar to the second part of the first part. For example, if remote system 102 determines that the difference meets a threshold, then remote system 102 may determine that the second part of the second part is similar to the second part of the first part.

[0077] At 430, process 400 may include storing at least a portion of a third dictionary and / or references as a patch file for a second version of the file. For example, remote system 102 may store at least a portion of a third dictionary and references as a patch file for a second version of the file. Additionally, in some examples, when remote system 102 receives a request from an electronic device to update a first version of the file to a second version, remote system 102 does not send the second portion of the second portion to the electronic device, but instead sends the patch file to the electronic device.

[0078] In some examples, remote system 102 may perform at least steps 410-430 on additional portions of the first and second data. Additionally, based on the determination that additional portions of the second data are similar to additional portions of the first data, remote system 102 may continue to add data to a patch file for a second version of the file.

[0079] Figure 5 This is a flowchart of an exemplary process 500 for identifying portions of first data that resemble portions of second data. At 502, process 500 may include storing first data representing a first version of a file. For example, remote system 102 may store first data representing first data of a file. In some examples, the file may be associated with a game. In some examples, remote system 102 may receive the first data from one or more computing devices associated with the developer of the file.

[0080] At 504, process 500 may include storing second data representing a second version of the file. For example, remote system 102 may store second data representing a second version of the file. In some examples, data may have been added to, removed from, or modified within the first data in order to generate the second data. In some examples, remote system 102 may receive the second data from one or more computing devices associated with the file's developer.

[0081] At 506, process 500 may include determining that a first portion of the first data corresponds to a first portion of the second data. For example, remote system 102 may determine that the first portion of the first data corresponds to the first portion of the second data. In some examples, to make this determination, remote system 102 may use CRC to determine a first checksum of the first portion of the first data and a second checksum of the first portion of the second data. Then, remote system 102 may determine that the first checksum and the second checksum are the same. In some examples, to make this determination, remote system 102 may use SHA-1 to determine a first hash value of the first portion of the first data and a second hash value of the first portion of the second data. Then, remote system 102 may determine that the first hash value and the second hash value are the same.

[0082] At 508, process 500 may include using the first portion of the first data to identify a second portion of the first data. For example, remote system 102 may use the first portion of the first data to identify the second portion of the first data. In some examples, remote system 102 may identify the second portion of the first data as a portion of first data following the first portion of the first data. In some examples, remote system 102 may identify the second portion of the first data as a portion of first data preceding the first portion of the first data.

[0083] At 510, process 500 may include using the first portion of the second data to identify a second portion of the second data. For example, remote system 102 may use the first portion of the second data to identify a second portion of the second data. In some examples, remote system 102 may identify the second portion of the second data as a portion of second data following the first portion of the second data. In some examples, remote system 102 may identify the second portion of the second data as a portion of first data preceding the first portion of the second data.

[0084] At 512, process 500 may include generating third data representing the difference between the second portion of the second data and the second portion of the first data. For example, remote system 102 may generate third data representing the difference between the second portion of the second data and the second portion of the first data. In some examples, the difference may include a portion of a dictionary generated for the second portion of the second data, wherein the dictionary is generated using a dictionary associated with the second portion of the first data. In some examples, the difference may include a reference associated with a dictionary generated for the second portion of the second data.

[0085] At 514, process 500 may include storing third data in association with a file. For example, remote system 102 may store the third data in association with a file. The third data can then be used to convert a second portion of the first data into a second portion of the second data.

[0086] Figure 6 This is a flowchart of a second exemplary process 600 for identifying a portion of first data that resembles a second portion of the second data. At 602, process 600 may include identifying a first portion of the first data. For example, remote system 102 may identify a first portion of the first data. In some examples, the first data may represent a first version of a file. In some examples, remote system 102 may receive the first data from one or more computing devices associated with the developer of the file.

[0087] At 604, process 600 may include identifying a second portion of the second data. For example, remote system 102 may identify a second portion of the second data. In some examples, the second data may represent a second version of a file. For example, in order to generate the second data, data may have been added to the first data, removed from the first data, modified within the first data, etc. In some examples, remote system 102 may receive the second data from one or more computing devices associated with the file's developer.

[0088] At 606, process 600 may include determining that a first portion of the first data corresponds to a first portion of the second data. For example, remote system 102 may determine that the first portion of the first data corresponds to the first portion of the second data. In some examples, to make this determination, remote system 102 may use CRC to determine a first checksum of the first portion of the first data and a second checksum of the first portion of the second data. Then, remote system 102 may determine that the first checksum and the second checksum are the same. In some examples, to make this determination, remote system 102 may use SHA-1 to determine a first hash value of the first portion of the first data and a second hash value of the first portion of the second data. Then, remote system 102 may determine that the first hash value and the second hash value are the same.

[0089] At 608, process 600 may include using the first portion of the first data to identify a second portion of the first data. For example, remote system 102 may use the first portion of the first data to identify the second portion of the first data. In some examples, remote system 102 may identify the second portion of the first data as a portion of first data following the first portion of the first data. In some examples, remote system 102 may identify the second portion of the first data as a portion of first data preceding the first portion of the first data.

[0090] At 610, process 600 may include using the first portion of the second data to identify a second portion of the second data. For example, remote system 102 may use the first portion of the second data to identify a second portion of the second data. In some examples, remote system 102 may identify the second portion of the second data as a portion of second data following the first portion of the second data. In some examples, remote system 102 may identify the second portion of the second data as a portion of first data preceding the first portion of the second data.

[0091] At 612, process 600 may include analyzing a second portion of the second data relative to a second portion of the first data. For example, remote system 102 may analyze the second portion of the second data relative to a second portion of the first data. In some examples, to perform the analysis, remote system 102 may generate third data representing the difference between the second portion of the second data and the second portion of the first data. In some examples, the difference may include a portion of a dictionary generated for the second portion of the second data, wherein the dictionary is generated using a dictionary associated with the second portion of the first data. In some examples, the difference may include a reference associated with a dictionary generated for the second portion of the second data.

[0092] Although the subject matter has been described in language specific to structural features, it should be understood that the subject matter defined in the appended claims is not limited to the specific features described. Rather, specific features are disclosed as exemplary forms for implementing the claims.

Claims

1. One or more computing devices, including: One or more processors; and One or more computer-readable media storing instructions that, when executed by the one or more processors, cause the one or more processors to perform operations including: Stores the first data representing the first version of the file; Identify a first portion of the first data representing the first version of the file; Store second data representing a second version of the file; Identify the first portion of the second data representing the second version of the file; Determine that the first portion of the first data corresponds to the first portion of the second data; The second part of the first data is identified at least in part based on the first part of the first data corresponding to the first part of the second data, wherein the second part of the first data follows the first part of the first data; The second part of the second data is identified at least in part based on the first part of the first data corresponding to the first part of the second data, wherein the second part of the second data follows the first part of the second data; The second part of the first data is compressed by generating at least a first dictionary associated with the second part of the first data; The second part of the second data is compressed by generating at least a second dictionary associated with the second part of the second data; The second part of the second data is compressed by using the first dictionary to generate at least a third dictionary and reference associated with the second part of the second data; The second dictionary and the third dictionary are used to determine the difference between the second part of the first data and the second part of the second data; Determine that the difference satisfies a threshold difference; and At least in part based on the difference satisfying the threshold difference, a portion of the third dictionary or a portion of the reference is stored as a patch file for the second version of the file.

2. The computing device of claim 1, wherein the reference is a first reference, and the difference is a first difference, and wherein the operation further comprises: Identify a third portion of the first data, wherein the third portion of the first data precedes the first portion of the first data; Identify a third portion of the second data, wherein the third portion of the second data precedes the first portion of the second data; The third part of the first data is compressed by generating at least a fourth dictionary associated with the third part of the first data; The third part of the second data is compressed by generating at least a fifth dictionary associated with the third part of the second data; The third part of the second data is compressed by using the fourth dictionary to generate at least a sixth dictionary and a second reference associated with the third part of the second data; The fifth and sixth dictionaries are used to determine a second difference between the third portion of the first data and the third portion of the second data; The second difference is determined to satisfy the threshold difference; as well as At least one of the sixth dictionary or the second reference is stored as part of the patch file, based at least in part on the second difference satisfying the threshold difference.

3. The computing device according to claim 1, wherein the operation further comprises: Use the first portion of the first data to generate the first value; as well as The first portion of the second data is used to generate the second value; The determination that the first part of the first data corresponds to the first part of the second data includes determining that the first value matches the second value.

4. The computing device according to claim 1, wherein the operation further comprises: Receive third data from the electronic device representing a request to update the first version of the file to the second version of the file; as well as The patch file is sent to the electronic device.

5. A method comprising: Stores the first data representing the first version of the file; Store second data representing a second version of the file; Determine that the first portion of the first data corresponds to the first portion of the second data; as well as At least in part, the first portion of the first data corresponds to the first portion of the second data: Use the first portion of the first data to identify the second portion of the first data; Use the first portion of the second data to identify the second portion of the second data; First compressed data is generated by compressing the second portion of the first data; Second compressed data is generated by compressing the second portion of the second data; The third compressed data is generated by compressing the second portion of the second data using the first compressed data; Determine the first difference between the third compressed data and the second compressed data; Determine that the first difference satisfies the first threshold difference; and The third compressed data is stored in association with the file.

6. The method according to claim 5, further comprising: Generate third data representing the second difference between the second portion of the second data and the second portion of the first data; as well as The third data is stored in association with the file.

7. The method according to claim 6, further comprising: The second difference is determined to satisfy the second threshold difference. The storage of the third data includes storing the third data as a patch file for the file, at least in part based on the second difference satisfying the second threshold difference.

8. The method according to claim 6, further comprising: Generate fourth data representing the first dictionary associated with the second portion of the first data. in: The third data represents at least one of a second dictionary or reference associated with the second portion of the second data; and The generation of the third data includes using the fourth data representing the first dictionary to generate the third data representing at least one of the second dictionary or the reference associated with the second portion of the second data.

9. The method according to claim 8, further comprising: Generate fifth data representing a third dictionary associated with the second portion of the second data; Determine the third difference between the third dictionary and the second dictionary; as well as The third difference is determined to satisfy the second threshold difference. The storage of the third data is at least in part based on the third difference satisfying the second threshold difference.

10. The method of claim 6, further comprising: The second difference is determined to satisfy the second threshold difference; as well as The second threshold difference is satisfied at least in part based on the second difference: Use the second part of the first data to identify the third part of the first data; as well as Use the second part of the second data to identify the third part of the second data; as well as Generate fourth data representing the third difference between the third portion of the second data and the third portion of the first data.

11. The method of claim 10, further comprising: It is determined that the third difference does not satisfy the third threshold difference; and Based at least in part on the determination that the third difference does not meet the third threshold difference, perform at least one of the following: Avoid using the third portion of the first data to identify the fourth portion of the first data; or Avoid using the third portion of the second data to identify the fourth portion of the second data.

12. The method according to claim 5, further comprising: The second portion of the second data is determined to be similar to the second portion of the first data, at least in part, based on the determination that the first difference satisfies the first threshold difference.

13. The method according to claim 5, wherein: The identification of the second portion of the first data using the first portion of the first data includes identifying the second portion of the first data as preceding the first portion of the first data; and The identification of the second portion of the second data using the first portion of the second data includes identifying the second portion of the second data as preceding the first portion of the second data.

14. The method according to claim 5, wherein: The identification of the second portion of the first data using the first portion of the first data includes identifying the second portion of the first data as following the first portion of the first data; and The identification of the second portion of the second data using the first portion of the second data includes identifying the second portion of the second data as following the first portion of the second data.

15. The method according to claim 5, wherein, The third compressed data represents the difference between the second portion of the first data and the second portion of the second data, and the method further includes: A patch file is sent to an electronic device, the patch file including instructions for converting the second portion of the first data into the second portion of the second data, at least in part, based on the third compressed data.

16. One or more computing devices, including: One or more processors; as well as One or more computer-readable media storing instructions that, when executed by the one or more processors, cause the one or more processors to perform operations including: Identify the first portion of the first data, which represents the first version of the file; Identify the first portion of the second data, which represents a second version of the file; Determine that the first portion of the first data corresponds to the first portion of the second data; and At least in part, the first portion of the first data corresponds to the first portion of the second data: Use the first portion of the first data to identify the second portion of the first data; Use the first portion of the second data to identify the second portion of the second data; First compressed data is generated by compressing the second portion of the first data; Second compressed data is generated by compressing the second portion of the second data; The third compressed data is generated by compressing the second portion of the second data using the first compressed data; Determine the first difference between the third compressed data and the second compressed data; Determine that the first difference satisfies the first threshold difference; and The third compressed data is stored in association with the file.

17. The computing device of claim 16, further comprising: Generate third data representing the second difference between the second portion of the second data and the second portion of the first data; as well as The third data is stored in association with the file.

18. The computing device of claim 17, wherein the operation comprises: The second difference is determined to satisfy the second threshold difference. The storage of the third data includes storing the third data as a patch file for the file, at least in part based on the second difference satisfying the second threshold difference.

19. The computing device of claim 17, further comprising: Generate fourth data representing the first dictionary associated with the second portion of the first data. in: The third data represents at least one of a second dictionary or reference associated with the second portion of the second data; and The generation of the third data includes using the first dictionary to generate the third data representing at least one of the second dictionary or the reference associated with the second portion of the second data.

20. One or more computing devices according to claim 16, wherein: The identification of the second portion of the first data using the first portion of the first data includes identifying the second portion of the first data as occurring before or after the first portion of the first data; and The identification of the second portion of the second data using the first portion of the second data includes identifying the second portion of the second data as occurring before or after the first portion of the second data.