Patent Description:
A remote system may send files to electronic devices over networks, such as the Internet. At times, developers of these files may update these files and provide updated versions to the remote system. These updated files may then be provided to the electronic devices, either in response to requests from the devices or otherwise. However, as files have grown in complexity and size, sending the updated files to the electronic devices may require a great amount of network bandwidth and may take a relatively long amount of time to be stored on these devices.

<CIT> discloses using an algorithm to create a "delta" or patch between two versions of a file, a directory or a block. The file may be divided into a plurality of blocks. The delta is used to patch to the latest version of the file.

<CIT> discloses generation of a patch file by pre-loading a dictionary of an LZ77-type compressor with a prior version of a file when compressing a later version of the file.

Described herein are, among other things, techniques, devices, and systems for efficiently updating files. For example, a remote system may generate and/or receive data (referred to, in this example, as "first data") representing a first version of a file. The remote system stores the first data representing the first version of the file. The file may represent a game, a video, a document, and/or the like. In some instances, the file may be provided to the remote system by a third party, such as a game developer or the like. Thereafter, the remote system may receive a request for the file from one or more electronic devices, such as personal computers, laptop computers, game consoles, tablet computers, or the like. In response, the remote system may send the first data, representative of 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 partition the first data into contiguous portions, such as one megabyte portions. After partitioning the first data, the remote system may send the portions to the electronic devices one at a time. In some instances, the remote system may additionally send a manifest to the one or more electronic devices, with the manifest defining an order for reassembling the portions of the first data on the electronic devices to generate the first version of the file. Upon receiving the manifest and each of the portions of the first data, the electronic devices may generate the first versions of the file such that the devices may execute or otherwise render respective instances of the file.

Later, the remote system may generate and/or receive data (referred to, in this example, as "second data") representing a second, updated version of the file. To generate the second data, the developer of the file may have added, removed, and/or changed data from the first version of the file. The remote system stores the second data representing the second version of the file. The remote system may then send the second data to the one or more electronic devices, which the one or more electronic devices may use to update the first version of the file to the second version of the file. In some examples, in order to save computing resources, such as network bandwidth, the remote system may send a portion of the second data to the one or more electronic devices. The one or more electronic devices may then use the portion of the second data to "patch" the first data in order to update the first version of the file to the second version of the file. In some instances, this patch file is pushed to electronic devices that store the first version of the file, while in other instances the patch file is sent to the electronic devices in response to the remote system receiving respective requests from these devices.

In order to generate a patch file, the remote system may begin by partitioning portions of the second data into contiguous portions, which may be of the of the same or similar size of the contiguous portions of the first data (e.g., one megabyte). The remote system may then analyze the portions of the first data with respect to the portions of the second data to identify similarities between portion(s) of the first data and portion(s) of the second data. For instance, the remote system may "walk through" the second data to identify matching portions, such as a portion of the first data that matches a portion of the second data.

In some examples, to analyze the portions of the first data with respect to the portions of the second data, the remote system may fingerprint or tag the portions. For a first example, the remote system may utilize cyclic redundancy check (CRC) to generate first check values associated with the portions of the first data and second check values associated with the portions of the second data. The remote system may then compare the first check values to the second check values to identify first check value(s) that match the second check value(s). Based on identifying match(es), the remote system may identify portion(s) of the first data that correspond to (e.g., include the same data as) portion(s) of the second data. For a second example, the remote system may utilize Secure Hash Algorithm <NUM> (SHA-<NUM>) to generate first hash values associated with the portions of the first data and second hash values associated with the portions of the second data. The remote system may then compare the first hash values to the second hash values to identify first hash value(s) that match the second hash value(s). Based on the matches, the remote system may identify portion(s) of the first data that correspond to portion(s) of the second value. Of course, while a few example techniques for identifying matching portions are described, it is to be appreciated that the remote system may utilize any other technique to identify such matching portions.

In some examples, the remote system may then store unique portion(s) of the second data (e.g., portion(s) of the second data that do not correspond to portions of the first data). Additionally, the remote system may generate a manifest that indicates an order for reassembling the second version of the file using some portions of the first version of the file and the portions of the second version of the file that are new or unique to the second version. Stated otherwise, the manifest may define an order for reassembling (<NUM>) the portion(s) of the first data that correspond to portion(s) of the second data and (<NUM>) the unique portion(s) of the second data. The remote system may then send, to the one or more electronic devices, the unique portion(s) of the second data along with the manifest for reassembling the second version of the file. The one or more electronic devices may then use the portion(s) of the first data that correspond to the portion(s) of the second data, which are stored on the one or more electronic devices, the received unique portion(s) of the second data, and the manifest to reassemble the second version of the file. As such, in some examples, instead of sending the one or more electronic devices the entirety of the second data, the remote system may send the unique portion(s) of the second data along with the manifest. This may reduce network bandwidth and lessen the amount of time it takes to update a client device from a first version of the file to the second version of the file.

In some examples, a unique portion of the second data may be similar enough to a portion of the first data that the unique portion of the second data can be converted to the portion of the first data with minimal instructions. For example, the difference between the unique portion of the second data and the portion of the first data may include one or more bytes of data that were added to, removed from, or changed within the portion of the first data. As such, before and/or instead of sending unique portion(s) of the second data to the one or more electronic devices, the remote system may initially determine whether the unique portion(s) can be converted to one of the portions of the first data. Based on determining that a 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 into the portion of the first data. The remote system may then perform a similar process for other unique portion(s) that can be converted to portions of the first data. Using this data, the remote system may generate a patch file and send the patch file to the one or more electronic devices.

The remote system identifies that a first portion of the first data corresponds to a first portion of the second data, for example using the processes described above. The remote system may then use the similarity to identify a second portion (e.g., unique portion) of the second data that may converted to a second portion of the first data. In some examples, the remote system identifies the second portion of the second data as a "neighbor" to the first portion of the second data and identifies the second portion of the first data as a "neighbor" to the first portion of the first data. For a first example, the second portion of the second data may include the portion of the second data that precedes the first portion of the second data, and the second portion of the first data may include the portion of the first data that precedes the first portion of the first data. For a second example, the second portion of the second data may include the portion of the second data that is subsequent to the first portion of the second data, and the second portion of the first data may include the portion of the first data that is subsequent to the first portion of the first data.

The remote system then generates data representing a 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 satisfy a threshold difference, the remote system may 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 satisfies the threshold difference, the remote system may determine that the second portion of the second data is similar to the second portion of the first data. The remote system then stores the data representing the difference as at least part of the patch file for the second version of the file.

In some examples, the remote system may use compression to determine if the second portion of the second data is similar to the second portion of the first data. For example, the remote system may use one or more algorithm(s) (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 the compression, the remote system may generate first compressed data for the second portion of the first data. The remote system may further use the algorithm(s) to compress the second portion of the second data. Based on the compression, the remote system may generate second compressed data for the second portion of the second data. Additionally, the remote system may use the algorithm(s) and the first compressed data to again compress the second portion of the second data. For instance, the remote system may use the first compressed data as a base to generate the third compressed data, where the third compressed data represents a difference between the second portion of the first data and the second portion of the second data.

The remote system may then determine a difference between second compressed data and the third compressed data. The remote system may then determine if the difference satisfies a threshold difference. For a first example, the remote system may determine a size difference between the second compressed data the third compressed data. The remote system may then determine if the size difference satisfies a size threshold. For instance, if the size difference is <NUM> megabytes, and the size threshold is <NUM> megabytes, then the remote system may determine that the size difference satisfies (e.g., is within) the size threshold. For a second example, the remote system may determine a ratio (e.g., a difference) of the size of the third compressed data to the size to the second compressed data. The remote system may then determine if the ratio satisfies a threshold. For instance, if the second compressed data includes a size of <NUM> megabytes and the third compressed data includes a size of <NUM> megabytes, then the remote system may determine that the ratio of the size of the second compressed data to the size of the second compressed data is <NUM>. If the threshold includes <NUM>, then the remote system may determine that the ratio satisfies (e.g., is within) the threshold. For example, the remote system may determine that the ratio of <NUM> is within (e.g., less than) the threshold of <NUM>. In some examples, the smaller the ratio, the more similar the second portion of the second data is to the second portion of the first data.

The compressed data includes a dictionary and may include a reference. The remote system uses the algorithm(s) to compress the second portion of the first data. Based on the compression, the remote system generates a first dictionary and may generate a first reference (e.g., a first sequence of symbols and phrase references). The remote system uses the algorithm(s) to compress the second portion of the second data. Based on the compression, the remote system generates a second dictionary and may generate a second reference (e.g., a second sequence of symbols and phrase references). The remote system uses the algorithm(s) and the first dictionary to again compress the second portion of the second data. The remote system uses the first dictionary as a base to generate a third dictionary and may generate a third reference (e.g., a third sequence of symbols and phrase references), where the third dictionary and/or the third reference represents a difference between the second portion of the first data and the second portion of the second data.

For instance, in some examples, if the second portion of the second data and the second portion of the first data have a high degree of similarity, such as differing by a few bytes of data, then the third dictionary and/or the third reference will be deemed similar to the first dictionary and/or the third reference. Additionally, if the second portion of the second data and the second portion of the first data are not similar, then the third dictionary and/or the third reference will not be deemed similar to the first dictionary and/or the first reference.

The remote system may then determine a difference between second dictionary and the third dictionary. The remote system may then determine if the difference satisfies a threshold difference. For a first example, the remote system may determine a size difference between the second dictionary and the third dictionary. The remote system may then determine if the size difference satisfies a size threshold. For instance, if the size difference is <NUM> megabytes, and the size threshold is <NUM> megabytes, then the remote system may determine that the size difference satisfies (e.g., is within) the size threshold. For a second example, the remote system may determine a ratio (e.g., a difference) of the size of the third dictionary to the size to the second dictionary. The remote system may then determine if the ratio satisfies a threshold. For instance, if the second dictionary includes a size of <NUM> megabytes and the third dictionary includes a size of <NUM> megabytes, then the remote system may determine that the ratio of the size of the second dictionary to the size of the second dictionary is <NUM>. If the threshold includes <NUM>, then the remote system may determine that the ratio satisfies (e.g., is within) the threshold. For example, the remote system may determine that the ratio of <NUM> is within (e.g., less than) the threshold of <NUM>. In some examples, the smaller the ratio, the more similar the second portion of the second data is to the second portion of the first data.

Based on determining that the difference satisfies the threshold, the remote system may store the data representing the difference (e.g., at least a portion of the third compressed data, at least a portion of the third dictionary that differs from the first dictionary and/or the third reference, etc.) as part of the patch file for the second version of the file. Additionally, the remote system may perform similar processes to generate additional data representing difference(s) for one or more other portion(s) of the second data that the remote systems determines to be similar to portions of the first data. The remote system may then store the additional data as part on the patch file. The remote system then sends, to the one or more electronic devices, the patch file instead of the unique portion(s) of the second data that the remote system determined to be similar to the portion(s) of the first data. By sending the patch file, the remote system may further save computing resources, such as network bandwidth.

In some examples, the remote system may perform similar processes for updating other versions of the file. For instance, the remote system may store data (referred to, in this example, as "third data") representing a third version of the file. The remote system may then identify portion(s) of the third data that correspond to portions(s) of the second data, generate patch fil(s) for unique portion(s) of the third data that are found to be similar to portion(s) for the second data, and identify portion(s) of the third data that are not similar to portion(s) of the second data. The remote system may then send, to the one or more electronic devices, the patch file(s) for unique portion(s) of the third data that are found to be similar to portion(s) for the second data and the portion(s) of the third data that are not similar to portion(s) of the second data.

In some examples, where there are numerous versions of a file, the remote system may perform the processes above for one or more pairs of the versions of the file. For a first example, if there are four versions of the file, the remote system may perform the processes above for updating the first version to the second version, the first version to the third version, the first version to the fourth version, the second version to the third version, the second version to the fourth version, and/or the third version to the fourth version. For a second example, the remote system may perform the processes above for the most popular updates. For instance, if one electronic device updates the first version to the fourth version and fifty electronic devices update the third version to the fourth version, the remote system may perform the processes above for updating the third version of the fourth version, but the remote system may not perform the processes above for updating the first version to the fourth version.

It should be noted that, in some examples, when analyzing an identified portion of the second data with respect to an identified 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. Additionally, the remote system may perform the processes described above using the "neighbors" of the identified portion of the second data and the identified portion of the first data.

In some examples, by performing the processes described above (e.g., using matching portion(s)), the remote system is able to more easily identify portion(s) of the first data that may correspond to portion(s) of the second data. This may reduce the need for the remote system to analyze each portion of the first data to each portion of the second data, which may reduce the amount of processing that is performed by the remote system. As such, by performing the processes described above, the remote system may require less computing resources when processing the first data and the second data.

<FIG> is a diagram illustrating an example environment <NUM> that includes a remote system <NUM> configured to generate a patch file for updating a file from a first version <NUM> of the file to a second version <NUM> of the file. In some examples, the file may correspond to a game. For instance, the first version <NUM> of the file may correspond to a first version of the game and the second version <NUM> of the file may correspond to an updated, second version of the game. In other examples, the file may correspond to an application, a program, a document, a video, an image, and/or the like. In some examples, the remote system <NUM> may receive the first version <NUM> of the file and/or the second version <NUM> from one or more computing devices associated with a developer of the file.

At a first time, the remote system <NUM> may send, over the network <NUM>, first data <NUM> representing the first version <NUM> of the file to one or more electronic devices, such as a first electronic device <NUM>(<NUM>), a second electronic device <NUM>(<NUM>), and a third electronic device <NUM>(<NUM>). While only three electronic devices <NUM>(<NUM>)-(<NUM>) are illustrated for clarify purposes, in other example, the remote system <NUM> may send the first data <NUM> to any number of electronic devices.

In some examples, to send the first data <NUM> to the electronic device(s) <NUM>(<NUM>)-(<NUM>), the remote system <NUM> may utilize a partition component <NUM> to identify portions <NUM>(<NUM>)-(<NUM>) of the first data <NUM>. The portions <NUM>(<NUM>)-(<NUM>) may include contiguous sections of the first data <NUM>. In some examples, the portions <NUM>(<NUM>)-(<NUM>) of the first data <NUM> may include any size. For example, the portions <NUM>(<NUM>)-(<NUM>) may include, but are not limited to, <NUM> Byte contiguous sections of the first data <NUM>, <NUM> megabyte contiguous sections of the first data <NUM>, <NUM> megabyte contiguous sections of the first data <NUM>, and/or the like. The remote system <NUM> may then send the portions <NUM>(<NUM>)-(<NUM>) of the first data <NUM> to the electronic devices <NUM>(<NUM>)-(<NUM>). Additionally, in some examples, the remote system <NUM> may send data representing a manifest <NUM> to the electronic devices <NUM>(<NUM>)-(<NUM>). The manifest <NUM> may define an order for reassembling the portions <NUM>(<NUM>)-(<NUM>) of the first data <NUM> on the electronic devices <NUM>(<NUM>)-(<NUM>) in order to generate the first version <NUM> of the file.

Later, the remote system <NUM> may generate and/or receive second data <NUM> representing the second version <NUM> of the file. The remote system <NUM> stores the second data <NUM>. To generate the second data <NUM>, data may have been added to the first data <NUM>, removed from the first data <NUM>, changed within the first data <NUM>, and/or the like. Using the first data <NUM> and the second data <NUM>, the remote system <NUM> generates a patch for updating the first version <NUM> of the file to the second version <NUM> of the file on the electronic devices <NUM>(<NUM>)-(<NUM>). For example, the remote system <NUM> may utilize the partition component <NUM> identify portions <NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>), and <NUM>(<NUM>)-(<NUM>) of the second data <NUM>. The portions <NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>), and <NUM>(<NUM>)-(<NUM>) may include contiguous sections of the second data. In some examples, the portions <NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>), and <NUM>(<NUM>)-(<NUM>) of the second data <NUM> may include any size. For example, the portions <NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>), and <NUM>(<NUM>)-(<NUM>) may include, but are not limited to, <NUM> Byte contiguous sections of the first data <NUM>, <NUM> megabyte contiguous sections of the first data <NUM>, <NUM> megabyte contiguous sections of the first data <NUM>, and/or the like.

The remote system <NUM> may then utilize a matching component <NUM> to analyze the portions <NUM>(<NUM>)-(<NUM>) of the first data <NUM> with respect to the portions <NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>), and <NUM>(<NUM>)-(<NUM>) of the second data <NUM> to identify similarities between portion(s) of the first data <NUM> and portion(s) of the second data <NUM>. In some examples, to perform the analysis, the matching component <NUM> may fingerprint or tag the portions <NUM>(<NUM>)-(<NUM>). For a first example, the matching component <NUM> may utilize CRC to generate first check values <NUM> associated with the portions <NUM>(<NUM>)-(<NUM>) of the first data <NUM> and second check values <NUM> associated with the portions <NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>), and <NUM>(<NUM>)-(<NUM>) of the second data <NUM>. The matching component <NUM> may then compare the first check values <NUM> to the second check values <NUM> to identify portion(s) of the first data <NUM> that correspond to (e.g., include the same data as) portion(s) of the second data <NUM>.

For instance, and as shown in the example of <FIG>, the matching component <NUM> may determine that the check value <NUM> associated with the portion <NUM>(<NUM>) of the first data <NUM> matches the check value <NUM> associated with the portion <NUM>(<NUM>) of the second data <NUM>. As such, the matching component <NUM> may determine that the portion <NUM>(<NUM>) of the first data <NUM> corresponds to the portion <NUM>(<NUM>) of the second data <NUM>. Additionally, the matching component <NUM> may determine that the check value <NUM> associated with the portion <NUM>(<NUM>) of the first data <NUM> matches the check value <NUM> associated with the portion <NUM>(<NUM>) of the second data <NUM>. As such, the matching component <NUM> may determine that the portion <NUM>(<NUM>) of the first data <NUM> corresponds to the portion <NUM>(<NUM>) of the second data <NUM>. Furthermore, the matching component <NUM> may determine that the check value <NUM> associated with the portion <NUM>(<NUM>) of the first data <NUM> matches the check value <NUM> associated with the portion <NUM>(<NUM>) of the second data <NUM>. As such, the matching component <NUM> may determine that the portion <NUM>(<NUM>) of the first data <NUM> corresponds to the portion <NUM>(<NUM>) of the second data <NUM>.

For a second example, and in addition to, or alternatively from, utilizing CRC, the matching component <NUM> may utilize SHA-<NUM> to generate first hash values <NUM> associated with the portions <NUM>(<NUM>)-(<NUM>) of the first data <NUM> and second hash values <NUM> associated with the portions <NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>), and <NUM>(<NUM>)-(<NUM>) of the second data <NUM>. The matching component <NUM> may then compare the first hash values <NUM> to the second hash values <NUM> to identify portion(s) of the first data <NUM> that correspond to portion(s) of the second data <NUM>.

For instance, and as shown in the example of <FIG>, the matching component <NUM> may determine that the hash value <NUM> associated with the portion <NUM>(<NUM>) of the first data <NUM> matches the hash value <NUM> associated with the portion <NUM>(<NUM>) of the second data <NUM>. As such, the matching component <NUM> may determine that the portion <NUM>(<NUM>) of the first data <NUM> corresponds to the portion <NUM>(<NUM>) of the second data <NUM>. Additionally, the matching component <NUM> may determine that the hash value <NUM> associated with the portion <NUM>(<NUM>) of the first data <NUM> matches the hash value <NUM> associated with the portion <NUM>(<NUM>) of the second data <NUM>. As such, the matching component <NUM> may determine that the portion <NUM>(<NUM>) of the first data <NUM> corresponds to the portion <NUM>(<NUM>) of the second data <NUM>. Furthermore, the matching component <NUM> may determine that the hash value <NUM> associated with the portion <NUM>(<NUM>) of the first data <NUM> matches the hash value <NUM> associated with the portion <NUM>(<NUM>) of the second data <NUM>. As such, the matching component <NUM> may determine that the portion <NUM>(<NUM>) of the first data <NUM> corresponds to the portion <NUM>(<NUM>) of the second data <NUM>.

In some examples, the matching component <NUM> further identifies the unique portion(s) of the second data <NUM>. For instance, and as shown in the example of <FIG>, the matching component <NUM> may determine that the check values <NUM> and/or the hash values <NUM> associated with the portions <NUM>(<NUM>)-(<NUM>) of the second data <NUM> do not match the check values <NUM> and/or the hash values <NUM> associated with the portions <NUM>(<NUM>)-(<NUM>) of the first data <NUM>. As such, the matching component <NUM> may determine that the portions <NUM>(<NUM>)-(<NUM>) of the second data <NUM> includes unique portions. In some examples, when the electronic devices <NUM>(<NUM>)-(<NUM>) update the file, the remote system <NUM> may send to the unique portions <NUM>(<NUM>)-(<NUM>) of the second data <NUM> to the electronic device <NUM>(<NUM>)-(<NUM>) along with data representing a manifest <NUM>. The manifest <NUM> may define an order for generating the second version <NUM> of the file by reassembling the portions <NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>) of the first data <NUM> already stored on the electronic devices <NUM>(<NUM>)-(<NUM>) and the unique portions <NUM>(<NUM>)-(<NUM>) of the second data <NUM>.

However, in some examples, a unique portion of the second data <NUM> may be similar enough to one of the portions <NUM>(<NUM>)-(<NUM>) of the first data <NUM> that the unique portion of the second data <NUM> can be converted to the portion <NUM>(<NUM>)-(<NUM>) of the first data <NUM> with minimal instructions. For example, the difference between the unique portion of the second data <NUM> and the portion <NUM>(<NUM>)-(<NUM>) of the first data <NUM> may include one or more bytes of data that were added to, removed from, or changed within the portion <NUM>(<NUM>)-(<NUM>) of the first data <NUM>. As such, before and/or instead of sending unique portions <NUM>(<NUM>)-(<NUM>) of the second data <NUM> to the electronic devices <NUM>(<NUM>)-(<NUM>), the remote system <NUM> may initially determine whether the unique portions <NUM>(<NUM>)-(<NUM>) can be converted to one of the portions <NUM>(<NUM>)-(<NUM>) of the first data <NUM>. Based on determining that a unique portion of the second data <NUM> can be converted to a portion <NUM>(<NUM>)-(<NUM>) of the first data <NUM>, the remote system <NUM> may generate data representing instructions for converting the unique portion of the second data <NUM> into the portion <NUM>(<NUM>)-(<NUM>) of the first data <NUM>. The remote system <NUM> may then perform a similar process for other unique portion(s) that can be converted to portions <NUM>(<NUM>)-(<NUM>) of the first data <NUM>. Using this data, the remote system <NUM> may generate a patch file <NUM> and send the patch file <NUM> to the electronic devices <NUM>(<NUM>)-(<NUM>).

For example, the matching component <NUM> may identify that the portion <NUM>(<NUM>) of the first data <NUM> corresponds to the portion <NUM>(<NUM>) of the second data <NUM>. The matching component <NUM> may then use the similarity to identify a portion (e.g., unique portion) of the second data <NUM> that may be converted to a portion of the first data <NUM>. In some examples, the matching component <NUM> identifies the portion of the second data <NUM> as a "neighbor" to the portion <NUM>(<NUM>) of the second data <NUM> and identifies the portion of the first data <NUM> as a "neighbor" to the portion <NUM>(<NUM>) of the first data <NUM>. For a first example, the matching component <NUM> may identify the portion <NUM>(<NUM>) of the second data <NUM> that precedes the portion <NUM>(<NUM>) of the second data <NUM> and the portion <NUM>(<NUM>) of the first data <NUM> that precedes the portion <NUM>(<NUM>) of the first data <NUM>. For a second example, the matching component <NUM> may identify the portion <NUM>(<NUM>) of the second data <NUM> that is subsequent to the portion <NUM>(<NUM>) of the second data <NUM> and the portion <NUM>(<NUM>) of the first data <NUM> that is subsequent to the portion <NUM>(<NUM>) of the first data <NUM>.

The remote system <NUM> may then generate data representing a difference between the identified portion of the second data <NUM> and the identified portion of the first data <NUM>. Based on determining that the difference does not satisfy a threshold <NUM>, the remote system <NUM> may determine that the identified portion of the second data <NUM> is not similar to the identified portion of the first data <NUM>. However, based on determining that the difference satisfies the threshold difference, the remote system <NUM> may determine that the identified portion of the second data <NUM> is similar to the identified second portion of the first data <NUM>. The remote system <NUM> may then store the data representing the difference in the patch file <NUM> for the second version <NUM> of the file.

In some examples, the remote system <NUM> may use compression to determine if the identified portion of the second data <NUM> is similar to the identified portion of the first data <NUM>. For example, and using the subsequent portions of the first data <NUM> and the second data <NUM>, the remote system <NUM> may utilize a compression component <NUM> to compress the portion <NUM>(<NUM>) of the first data <NUM> and the portion <NUM>(<NUM>) of the second data. For instance, the compression component <NUM> may use algorithm(s) (e.g., LZMA, LZW, BTLZ, LZ77, LZ78 etc.) to compress the portion <NUM>(<NUM>) of the first data <NUM>. Based on the compression, the compression component <NUM> may generate first compressed data for the portion <NUM>(<NUM>) of the first data <NUM>. The compression component <NUM> may further use the algorithm(s) to compress the portion <NUM>(<NUM>) of the second data <NUM>. Based on the compression, the compression component <NUM> may generate second compressed data for the portion <NUM>(<NUM>) of the second data <NUM>. Additionally, the compression component <NUM> may use the algorithm(s) and the first compressed data to again compress the portion <NUM>(<NUM>) of the second data <NUM>. For instance, the compression component <NUM> may use the first compressed data as a base to generate the third compressed data, where the third compressed data represents a difference between the portion <NUM>(<NUM>) of the first data <NUM> and the portion <NUM>(<NUM>) of the second data <NUM>.

The remote system <NUM> may then determine a difference between second compressed data and the third compressed data. The analysis component <NUM> may then determine if the difference satisfies a threshold difference. For a first example, the analysis component <NUM> may determine a size difference between the second compressed data the third compressed data. The analysis component <NUM> may then determine if the size difference satisfies a size threshold. For instance, if the size difference is <NUM> megabytes, and the size threshold is <NUM> megabytes, then the analysis component <NUM> may determine that the size difference satisfies (e.g., is within) the size threshold. For a second example, the analysis component <NUM> may determine a ratio (e.g., a difference) of the size of the third compressed data to the size to the second compressed data. The analysis component <NUM> may then determine if the ratio satisfies a threshold. For instance, if the second compressed data includes a size of <NUM> megabytes and the third compressed data includes a size of <NUM> megabytes, then the analysis component <NUM> may determine that the ratio of the size of the second compressed data to the size of the second compressed data is <NUM>. If the threshold includes <NUM>, then the analysis component <NUM> may determine that the ratio satisfies (e.g., is within) the threshold. For example, the analysis component <NUM> may determine that the ratio of <NUM> is within (e.g., less than) the threshold of <NUM>. In some examples, the smaller the ratio, the more similar the second portion of the second data <NUM> is to the second portion of the first data <NUM>.

In some examples, the compressed data may include a dictionary and/or a reference. For instance, the compression component <NUM> may use the algorithm(s) (e.g., LZMA, LZW, BTLZ, LZ77, LZ78 etc.) to compress the portion <NUM>(<NUM>) of the first data <NUM>. Based on the compression, the compression component <NUM> may generate a first dictionary <NUM> and a first reference <NUM> (e.g., a first sequence of symbols and phrase references). The compression component <NUM> may further use the algorithm(s) to compress the portion <NUM>(<NUM>) of the second data <NUM>. Based on the compression, the compression component <NUM> may generate a second dictionary <NUM> and a second reference <NUM> (e.g., a second sequence of symbols and phrase references). Additionally, the compression component <NUM> may use the algorithm(s) and the first dictionary <NUM> to again compress the portion <NUM>(<NUM>) of the second data <NUM>. For instance, the compression component <NUM> may use the first dictionary <NUM> as a base to initially populate a third dictionary <NUM>. The compression component <NUM> may then add additional data to the third dictionary, where the additional data represents the difference between the portion <NUM>(<NUM>) of the first data <NUM> and the second portion <NUM>(<NUM>) of the second data <NUM>. Furthermore, the compression component <NUM> may generate the third reference <NUM> (e.g., a third sequence of symbols and phrase references) for the third dictionary <NUM>.

The remote system <NUM> may then utilize an analysis component <NUM> determine a difference between the second dictionary <NUM> and the third dictionary <NUM>. The analysis component <NUM> may then determine if the difference satisfies the threshold <NUM>. For a first example, the analysis component <NUM> may determine a size difference between the second dictionary <NUM> and the third dictionary <NUM>. The analysis component <NUM> may then determine if the size difference satisfies a size threshold <NUM>. The size threshold <NUM> may include, but is not limited to, <NUM> bytes, <NUM> bytes, <NUM> bytes, <NUM> megabyte, and/or any other size. For instance, if the size difference between the second dictionary <NUM> and the third dictionary <NUM> is <NUM> Megabytes, and the size threshold is <NUM> Megabytes, then the analysis component <NUM> may determine that the size difference satisfies (e.g., is within) the size threshold <NUM>.

For a second example, the analysis component <NUM> may determine a ratio (e.g., a difference) of the size of the third dictionary <NUM> to the size to the second dictionary <NUM>. The remote system may then determine if the ratio satisfies a threshold <NUM>. The threshold <NUM> may include, but is not limited to, <NUM>, <NUM>, <NUM>, <NUM>, and/or any other threshold. For instance, if the second dictionary <NUM> includes a size of <NUM> megabytes and the third dictionary <NUM> includes a size of <NUM> megabytes, then the remote system <NUM> may determine that the ratio of the size of the second dictionary <NUM> to the size of the second dictionary <NUM> is <NUM>. If the threshold includes <NUM>, then the remote system <NUM> may determine that the ratio satisfies (e.g., is within) the threshold. For example, the remote system <NUM> may determine that the ratio of <NUM> is within (e.g., less than) the threshold of <NUM>.

In some examples, the remote system <NUM> may utilize an update component <NUM> to generate the patch file <NUM> for the second version <NUM> of the file. For example, based on determining that the difference satisfies the threshold <NUM>, the update component <NUM> may store conversion data <NUM> representing the difference between the portion <NUM>(<NUM>) of the second data <NUM> and the portion <NUM>(<NUM>) of the first data <NUM>. In some examples, the conversion data <NUM> may represent the difference between the third dictionary <NUM> and the first dictionary <NUM>. Additionally, the update component <NUM> may store data representing the third reference <NUM> generated for the third dictionary <NUM>.

In some examples, the remote system <NUM> may then perform similar processes for each of the other unique portions <NUM>(<NUM>)-(<NUM>) of the second data <NUM>. For instance, the remote system <NUM> may analyze the portion <NUM>(<NUM>) of the second data <NUM> with respect to the portion <NUM>(<NUM>) of the first data <NUM>. During the analysis, the update component <NUM> may determine that the difference between the portion <NUM>(<NUM>) of the second data <NUM> and the portion <NUM>(<NUM>) of the first data <NUM> satisfies the threshold <NUM>. Based on the determination, the update component <NUM> may store conversion data <NUM> representing the difference between the portion <NUM>(<NUM>) of the second data <NUM> and the portion <NUM>(<NUM>) of the first data <NUM> in the patch file <NUM>. Additionally, the update component <NUM> may store data representing a fourth reference <NUM> (e.g., a fourth sequence of symbols and phrase references) for a fourth dictionary <NUM> generated by the compression component <NUM> for the portion <NUM>(<NUM>) of the second data <NUM>.

In some examples, the remote system <NUM> may determine that a unique portion of the second data <NUM> is not similar to one of the portions <NUM>(<NUM>)-(<NUM>) of the first data <NUM>. For example, the remote system <NUM> may analyze the portion <NUM>(<NUM>) of the second data <NUM> with respect to the portion <NUM>(<NUM>) of the first data <NUM>. During the analysis, the update component <NUM> may determine that the difference between the portion <NUM>(<NUM>) of the second data <NUM> with respect to the portion <NUM>(<NUM>) of the first data <NUM> does not satisfy the threshold <NUM>. In some examples, based on the determination, the update component <NUM> store portion data <NUM> representing the portion <NUM>(<NUM>) of the second data <NUM> in the patch file <NUM>. In some examples, the update component <NUM> may store data associating the portion <NUM>(<NUM>) of the second data <NUM> with the second version <NUM> of the file.

The remote system <NUM> then sends, over the network <NUM>, the patch file <NUM> to the electronic devices <NUM>(<NUM>)-(<NUM>). In some examples, if the patch file <NUM> does not include the portion data <NUM>, the remote system <NUM> may separately send the portion <NUM>(<NUM>) of the second data <NUM> to the electronic device <NUM>(<NUM>)-(<NUM>). The electronic devices <NUM>(<NUM>)-(<NUM>) may then use the first data <NUM> for the first version <NUM> of the file, the patch file <NUM>, and/or the dictionaries <NUM> associated with the portion <NUM><NUM>(<NUM>)-(<NUM>) of the first data <NUM> to update the first version <NUM> of the file to the second version <NUM> of the file.

The electronic device <NUM>(<NUM>) uses the portions <NUM>(<NUM>), <NUM>(<NUM>), and <NUM>(<NUM>) of the first data <NUM> that correspond to the portions <NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>) of the second data <NUM>, where the portions <NUM>(<NUM>), <NUM>(<NUM>), and <NUM>(<NUM>) of the first data <NUM> are already stored by the electronic device <NUM>(<NUM>). The electronic device <NUM>(<NUM>) uses the dictionary <NUM> associated with the portion <NUM>(<NUM>) of the first data <NUM>, and may use the conversation data <NUM> associated with the portion <NUM>(<NUM>) of the second data <NUM> and/or the reference <NUM> associated with the portion <NUM>(<NUM>) of the second data <NUM> to convert the portion <NUM>(<NUM>) of the first data <NUM> to the portion <NUM>(<NUM>) of the second data <NUM>. Similarly, the electronic device <NUM>(<NUM>) uses the dictionary <NUM> associated with the portion <NUM>(<NUM>) of the first data <NUM>, and may use the conversation data <NUM> associated with the portion <NUM>(<NUM>) of the second data <NUM> and/or the reference <NUM> associated with the portion <NUM>(<NUM>) of the second data <NUM> to convert the portion <NUM>(<NUM>) of the first data <NUM> to the portion <NUM>(<NUM>) of the second data <NUM>. Furthermore, the electronic device <NUM>(<NUM>) may replace the portion <NUM>(<NUM>) of the first data <NUM> with the portion <NUM>(<NUM>) of the second data <NUM>.

As further illustrated in <FIG>, the remote system <NUM> include processor(s) <NUM> and memory <NUM> and may include network interface(s) <NUM>, and the electronic device <NUM>(<NUM>) may include processor(s) <NUM>, network interface(s) <NUM>, and memory <NUM>. As used herein, a processor, such as processor(s) <NUM> and processor(s) <NUM>, may include multiple processors and/or a processor having multiple cores. Further, the processors may comprise one or more cores of different types. For example, the processors may include application processor units, graphic processing units, and so forth. In one implementation, the processor may comprise a microcontroller and/or a microprocessor. The processor(s) may include a graphics processing unit (GPU), a microprocessor, a digital signal processor or other processing units or components known in the art. Alternatively, or in addition, the functionally described herein can be performed, at least in part, by one or more hardware logic components. For example, and without limitation, illustrative types of hardware logic components that can be used include field-programmable gate arrays (FPGAs), application-specific integrated circuits (ASICs), application-specific standard products (ASSPs), system-on-a-chip systems (SOCs), complex programmable logic devices (CPLDs), etc. Additionally, each of the processor(s) may possess its own local memory, which also may store program components, program data, and/or one or more operating systems.

Memory, such as the memory <NUM> and the memory <NUM>, may include volatile and nonvolatile memory, removable and non-removable media implemented in any method or technology for storage of information, such as computer-readable instructions, data structures, program component, or other data. Such memory includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, RAID storage systems, or any other medium which can be used to store the desired information and which can be accessed by a computing device. The memory may be implemented as computer-readable storage media ("CRSM"), which may be any available physical media accessible by the processor(s) to execute instructions stored on the memory. In one basic implementation, CRSM may include random access memory ("RAM") and Flash memory. In other implementations, CRSM may include, but is not limited to, read-only memory ("ROM"), electrically erasable programmable read-only memory ("EEPROM"), or any other tangible medium which can be used to store the desired information and which can be accessed by the processor(s).

Further, functional components may be stored in the respective memories, or the same functionality may alternatively be implemented in hardware, firmware, application specific integrated circuits, field programmable gate arrays, or as a system on a chip (SoC). In addition, while not illustrated, each respective memory, such as memory, discussed herein may include at least one operating system (OS) component that is configured to manage hardware resource devices such as the network interface(s), the I/O devices of the respective apparatuses, and so forth, and provide various services to applications or components executing on the processors. Such OS component may implement a variant of the FreeBSD operating system as promulgated by the FreeBSD Project; other UNIX or UNIX-like variants; a variation of the Linux operating system as promulgated by Linus Torvalds; the FireOS operating system from Amazon. of Seattle, Washington, USA; the Windows operating system from Microsoft Corporation of Redmond, Washington, USA; LynxOS as promulgated by Lynx Software Technologies, Inc. of San Jose, California; Operating System Embedded (Enea OSE) as promulgated by ENEA AB of Sweden; and so forth.

Network interface(s), such as the network interface(s) <NUM> and the network interface(s) <NUM>, may enable communications between the components and/or devices shown in environment <NUM> and/or with one or more other remote systems, as well as other networked devices. Such network interface(s) may include one or more network interface controllers (NICs) or other types of transceiver devices to send and receive communications over the network <NUM>. For instance, each of the network interface(s) may include a personal area network (PAN) component to enable communications over one or more short-range wireless communication channels. For instance, the PAN component may enable communications compliant with at least one of the following standards IEEE <NUM>. <NUM> (ZigBee), IEEE <NUM>. <NUM> (Bluetooth), IEEE <NUM> (WiFi), or any other PAN communication protocol. Furthermore, each of the network interface(s) may include a wide area network (WAN) component to enable communication over a wide area network.

<FIG> is an example of identifying portions of first data <NUM> representing a first version <NUM> of file that may be converted to portions of second data <NUM> representing a second version <NUM> of the file. For example, the remote system <NUM> may analyze the portions <NUM>(<NUM>)-(<NUM>) of the first data <NUM> with respect to the portions <NUM>(<NUM>) and <NUM>(<NUM>)-(<NUM>) of the second data <NUM> to identify portion(s) of the first data <NUM> that are similar to portion(s) of the second data <NUM>. For instance, at process <NUM>, the remote system <NUM> may initially identify that the portion <NUM>(<NUM>) of the first data <NUM> corresponds to the portion <NUM>(<NUM>) of the second data <NUM>, using the processes described herein (e.g., CRC, SHA-<NUM>, etc.). The remote system <NUM> may then use the portion <NUM>(<NUM>) of the first data <NUM> and the portion <NUM>(<NUM>) of the second data <NUM> as "anchor" portions for identifying the portion(s) of the first data <NUM> that are similar to the portion(s) of the second data <NUM>.

Next, at process <NUM>, the remote system <NUM> may analyze the "neighbor" portions to the anchor portions to determine if the neighbor portions are similar to one another. For a first example, the remote system <NUM> may analyze the portion <NUM>(<NUM>) of the first data <NUM> with respect to the portion <NUM>(<NUM>) of the second data <NUM> to determine if the portion <NUM>(<NUM>) of the first data <NUM> is similar to the portion <NUM>(<NUM>) of the second data <NUM>, using one or more of the processes described herein (e.g., LZMA, LZW, BTLZ, LZ77, LZ78 etc.). Additionally, the remote system <NUM> may analyze the portion <NUM>(<NUM>) of the first data <NUM> with respect to the portion <NUM>(<NUM>) of the second data <NUM> to determine if the portion <NUM>(<NUM>) of the first data <NUM> is similar to the portion <NUM>(<NUM>) of the second data <NUM>, using one or more of the processes described herein (e.g., LZMA, LZW, BTLZ, LZ77, LZ78 etc.).

Next, at process <NUM>, the remote system may continue to analyze the neighbor portions when the remote system <NUM> determines that two portions are similar to one another. For a first example, the remote system <NUM> may have determine that the portion <NUM>(<NUM>) of the first data <NUM> is similar to the portion <NUM>(<NUM>) of the second data <NUM> (e.g., the difference between the portion <NUM>(<NUM>) of the first data <NUM> and the portion <NUM>(<NUM>) of the second data <NUM> satisfies a threshold). Based on the determination, the remote system <NUM> may analyze the portion <NUM>(<NUM>) of the first data <NUM> with respect to the portion <NUM>(<NUM>) of the second data <NUM> to determine if the portion <NUM>(<NUM>) of the first data <NUM> is similar to the portion <NUM>(<NUM>) of the second data <NUM>, using one or more of the processes described herein (e.g., LZMA, LZW, BTLZ, LZ77, LZ78 etc.).

For a second example, the remote system <NUM> may have determine that the portion <NUM>(<NUM>) of the first data <NUM> is not similar to the portion <NUM>(<NUM>) of the second data <NUM> (e.g., the difference between the portion <NUM>(<NUM>) of the first data <NUM> and the portion <NUM>(<NUM>) of the second data <NUM> does not satisfy the threshold). In some examples, and as illustrated in the example of <FIG>, based on the determination, the remote system <NUM> may determine not to analyze the portion <NUM>(<NUM>) of the first data <NUM> with respect to the portion <NUM>(<NUM>) of the second data <NUM>. However, in other examples, the remote system <NUM> may still analyze the portion <NUM>(<NUM>) of the first data <NUM> with respect to the portion <NUM>(<NUM>) of the second data <NUM> to determine if the portion <NUM>(<NUM>) of the first data <NUM> is similar to the portion <NUM>(<NUM>) of the second data <NUM>, using one or more of the processes described herein (e.g., LZMA, LZW, BTLZ, LZ77, LZ78 etc.).

<FIG> is an example of the remote system <NUM> generating patch files for various version of a file. For example, the remote system <NUM> may store a first version <NUM> of a file, a second version <NUM> of the file, a third version <NUM> of the file, and a fourth version <NUM> of the file. Using the processes described herein, the remote system <NUM> may generate a first patch file <NUM> for updating the first version <NUM> of the file to the second version <NUM> of the file, a second patch file <NUM> for updating the first version <NUM> of the file to the third version <NUM> of the file, a third patch file <NUM> for updating the first version <NUM> of the file to the fourth version <NUM> of the file, a fourth patch file <NUM> for updating the second version <NUM> of the file to the third version <NUM> of the file, a fifth patch file <NUM> for updating the second version <NUM> of the file to the fourth version <NUM> of the file, and/or a sixth patch file <NUM> for updating the third version <NUM> of the file to the fourth version <NUM> of the file.

The remote system <NUM> may then send the patch files <NUM>-<NUM> to electronic devices based on the current versions of the file stored on the electronic devices. For a first example, a first group of electronic devices <NUM> may be storing the third version <NUM> of the file. As such, the remote system <NUM> may send the first group of electronic devices <NUM> the sixth patch file <NUM> for updating the third version <NUM> of the file to the fourth version <NUM> of the file. Additionally, a second group of electronic devices <NUM> may be storing second version <NUM> of the file. As such, the remote system <NUM> may send the second group of electronic devices <NUM> the fifth patch file <NUM> for updating the second version <NUM> of the file to the fourth version <NUM> of the file. Furthermore, a third group of electronic devices <NUM> may be storing the first version <NUM> of the file. As such, the remote system <NUM> may send the third group of electronic devices <NUM> the first patch file <NUM> for updating the first version <NUM> of the file to the fourth version <NUM> of the file.

In some examples, alternatively from generating each of the patch files <NUM>-<NUM>, the remote system <NUM> may generate patch files for the most popular updates of the file. For instance, in the example of <FIG>, the first group of electronic devices <NUM> includes four electronic devices updating the third version <NUM> of the file to the fourth version <NUM> of the file, the second group of electronic devices <NUM> includes fourth electronic devices updating the second version <NUM> of the file to the fourth version <NUM> of the file, and the third group of electronic devices <NUM> includes two electronic devices updating the first version <NUM> of the file to the fourth version <NUM> of the file. As such, in some examples, the remote system <NUM> may only generate the fifth patch file <NUM> for updating the second version <NUM> of the file to the fourth version <NUM> of the file and the sixth patch file <NUM> for updating the third version <NUM> of the file to the fourth version <NUM> of the file since those are the most popular updates. However, since only two electronic devices are updating the first version <NUM> of the file to the fourth version <NUM> of the file, the remote system <NUM> may not generate the first patch file <NUM>.

The processes described herein are illustrated as a collection of blocks in a logical flow graph, which represent a sequence of operations that can be implemented in hardware, software, or a combination thereof. In the context of software, the blocks represent computer-executable instructions that, when executed by one or more processors, perform the recited operations. Generally, computer-executable instructions include routines, programs, objects, components, data structures, and the like that perform particular functions or implement particular abstract data types. The order in which the operations are described is not intended to be construed as a limitation, and any number of the described blocks can be combined in any order and/or in parallel to implement the processes.

<FIG> is a flow diagram of an example process <NUM> for generating data for updating a file from a version of the file to a second version of the file. At <NUM>, the process <NUM> includes storing first data representing a first version of a file. For example, the remote system <NUM> 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, the remote system <NUM> may receive the first data from one or more computing devices associated with a developer of the file.

At <NUM>, the process <NUM> includes identifying first portions of the first data representing the first version of the file. For example, the remote system <NUM> may identify the first portions of the first data representing the first version of the file. The first portions of the first data may include contiguous sections of the first data. For example, the first portions of the first data may include, but are not limited to, <NUM> byte contiguous sections of the first data, <NUM> megabyte contiguous sections of the first data, <NUM> megabyte contiguous sections of the first data, and/or the like.

At <NUM>, the process <NUM> includes storing second data representing a second version of the file. For example, the remote system <NUM> may store the second data representing the second version of the file. In some examples, to generate the second data, data may have been added to the first data, removed from the first data, changed within the first data, and/or the like. In some examples, the remote system <NUM> may receive the second data from the one or more computing devices associated with a developer of the file.

At <NUM>, the process <NUM> includes identifying second portions of the second data representing the second version of the file. For example, the remote system <NUM> may identify the second portions of the second data representing the second version of the file. The second portions of the second data may include contiguous sections of the second data. For example, the second portions of the second data may include, but are not limited to, <NUM> byte contiguous sections of the second data, <NUM> megabyte contiguous sections of the second data, <NUM> megabyte contiguous sections of the second data, and/or the like. In some examples, the second portions of the second data may include a similar size as the first portions of the first data.

At <NUM>, the process <NUM> includes determining that a first portion of the first portions corresponds to a first portion of the second portions. For examples, the remote system <NUM> may determine that the first portion of the first portions corresponds to the first portion of the second portions. In some examples, to make the determination, the remote system <NUM> may use CRC to determine a first check value for the first portion of the first potions and a second check value for the first portion of the second portions. The remote system <NUM> may then determine that the first check value is the same as the second check value. In some examples, to make the determination, the remote system <NUM> may use SHA-<NUM> to determine a first hash value for the first portion of the first portions and a second hash value for the first portion of the second portions. The remote system <NUM> may then determine that the first hash value is the same as the second hash value.

At <NUM>, the process <NUM> includes identifying a second portion of the first portions using the first portion of the first portions. For example, the remote system <NUM> may identify the second portion of the first portions using the first portion of the first portions. In some examples, the remote system <NUM> may identify the second portion of the first portions as a portion of the first data that is subsequent to the first portion of the first portions. In some examples, the remote system <NUM> may identify the second portion of the first portions as a portion of the first data that precedes the first portion of the first portions.

At <NUM>, the process <NUM> includes identifying a second portion of the second portions using the first portion of the second portions. For example, the remote system <NUM> may identify the second portion of the second portions using the first portion of the second portions. In some examples, the remote system <NUM> may identify the second portion of the second portions as a portion of the second data that is subsequent to the first portion of the second portions. In some examples, the remote system <NUM> may identify the second portion of the second portions as a portion of the first data that precedes the first portion of the second portions.

At <NUM>, the process <NUM> includes compressing the second portion of the first portions by at least generating a first dictionary. For example, the remote system <NUM> may compress the second portion of the first portions by at least generating the first dictionary. In some examples, the remote system <NUM> compresses the second portion of the first portions using one or more algorithm associated with one or more compression techniques (e.g., LZMA, LZW, BTLZ, LZ77, LZ78 etc.). In some examples, the remote system <NUM> compresses the second portion of the first portions using one or more other compression techniques.

At <NUM>, the process <NUM> includes compressing the second portion of the second portions by at least generating a second dictionary. For example, the remote system <NUM> may compress the second portion of the second portions by at least generating the second dictionary. In some examples, the remote system <NUM> compresses the second portion of the second portions using one or more algorithm associated with one or more compression techniques (e.g., LZMA, LZW, BTLZ, LZ77, LZ78 etc.). In some examples, the remote system <NUM> compresses the second portion of the second portions using one or more other compression techniques.

At <NUM>, the process <NUM> includes compressing the second portion of the second portions by at least generating, using the first dictionary, a third dictionary and possibly a reference. For example, the remote system <NUM> may compress the second portion of the first portions by at least generating the third dictionary and the reference using the first dictionary. For instance, the remote system <NUM> may use the first dictionary as a base. The remote system <NUM> may then add additional data, based on the first data included in the second portion of the second portions, additional data to the first dictionary in order to generate the third dictionary. In some examples, the remote system <NUM> compresses the second portion of the second portions using one or more algorithms associated with one or more compression techniques (e.g., LZMA, LZW, BTLZ, LZ77, LZ78 etc.). In some examples, the remote system <NUM> compresses the second portion of the second portions using one or more other compression techniques.

At <NUM>, the process <NUM> includes determining a difference between the second portion of the first portions and the second portion of the second portions, for instance using the second dictionary and the third dictionary. For example, the remote system <NUM> may determine the difference between the second portion of the first portions and the second portion of the second portions using the second dictionary and the third dictionary. In some examples, the remote system <NUM> may determine the difference as a size difference between the second dictionary and the third dictionary. In some examples, the remote system <NUM> may determine the difference as a ratio between the second dictionary and the third dictionary.

At <NUM>, the process <NUM> includes determining whether the difference satisfies a threshold. For example, the remote system <NUM> may determine whether the difference satisfies the threshold difference. In some examples, when the difference includes the size difference, the remote system <NUM> may determine that the size difference satisfies the threshold when the size difference is within a size threshold. In some examples, when the difference includes a ratio, the remote system <NUM> may determine that the size difference satisfies the threshold when the ratio is within a ratio threshold.

If, at <NUM> it is determined that the difference does not satisfy the threshold, then at <NUM>, the process <NUM> may include determining that the second portion of the second portions is not similar to the second portion of the first portions. For example, if the remote system <NUM> determines that the difference does not satisfy the threshold, then the remote system <NUM> may determine that the second portion of the second portions is not similar to the second portion of the first portions. Additionally, in some examples, when the remote system <NUM> receives a request from an electronic device to update the first version of the file to the second version of the file, the remote system <NUM> may send, to the electronic device, the second portion of the second portions.

If, at <NUM> it is determined that the difference satisfies the threshold, then at <NUM>, the process <NUM> may include determining that the second portion of the second portions is similar to the second portion of the first portions. For example, if the remote system <NUM> determines that the difference satisfies the threshold, then the remote system <NUM> may determine that the second portion of the second portions is similar to the second portion of the first portions.

At <NUM>, the process <NUM> may include storing at least a portion of the third dictionary and/or the reference as a patch file for the second version of the file. For example, the remote system <NUM> may store the at least the portion of the third dictionary and the reference as a patch file for the second version of the file. Additionally, in some examples, when the remote system <NUM> receives a request from an electronic device to update the first version of the file to the second version of the file, the remote system <NUM> may send, to the electronic device, the patch file rather than the second portion of the second portions.

In some examples, the remote system <NUM> may perform at least <NUM>-<NUM> for additional portions of the first data and the second data. Additionally, based on determining that additional portion(s) of the second data are similar to additional portion(s) of the first data, the remote system <NUM> may continue to add data to the patch file for the second version of the file.

<FIG> is a flowchart of an example process <NUM> for identifying a portion of first data that is similar to a portion of second data. At <NUM>, the process <NUM> includes storing first data representing a first version of a file. For example, the remote system <NUM> 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, the remote system <NUM> may receive the first data from one or more computing devices associated with a developer of the file.

At <NUM>, the process <NUM> includes determining that a first portion of the first data corresponds to a first portion of the second data. For examples, the remote system <NUM> may determine that the first portion of the first data corresponds to the first portion of the second data. In some examples, to make the determination, the remote system <NUM> may use CRC to determine a first check value for the first portion of the first data and a second check value for the first portion of the second data. The remote system <NUM> may then determine that the first check value is the same as the second check value. In some examples, to make the determination, the remote system <NUM> may use SHA-<NUM> to determine a first hash value for the first portion of the first data and a second hash value for the first portion of the second data. The remote system <NUM> may then determine that the first hash value is the same as the second hash value.

At <NUM>, the process <NUM> includes identifying a second portion of the first data using the first portion of the first data. For example, the remote system <NUM> may identify the second portion of the first data using the first portion of the first data. In some examples, the remote system <NUM> may identify the second portion of the first data as a portion of the first data that is subsequent to the first portion of the first data. In some examples, the remote system <NUM> may identify the second portion of the first data as a portion of the first data that precedes the first portion of the first data.

At <NUM>, the process <NUM> includes identifying a second portion of the second data using the first portion of the second data. For example, the remote system <NUM> may identify the second portion of the second data using the first portion of the second data. In some examples, the remote system <NUM> may identify the second portion of the second data as a portion of the second data that is subsequent to the first portion of the second data. In some examples, the remote system <NUM> may identify the second portion of the second data as a portion of the first data that precedes the first portion of the second data.

At <NUM>, the process <NUM> includes generating third data representing a difference between the second portion of the second data and the second portion of the first data. For example, the remote system <NUM> may generate the 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, where 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.

At <NUM>, the process <NUM> includes storing the third data in association with the file. For example, the remote system <NUM> may store the third data in association with the file. The third data may then be used to convert the second portion of the first data to the second portion of the second data.

<FIG> is a flowchart of a second example process <NUM> for identifying a portion of first data that is similar to a portion of second data. At <NUM>, the process <NUM> includes identifying a first portion of first data. For example, the remote system <NUM> may identify the first portion of the first data. In some examples, the first data may represent a first version of a file. In some examples, the remote system <NUM> may receive the first data from one or more computing devices associated with a developer of the file.

At <NUM>, the process <NUM> includes identifying a second portion of second data. For example, the remote system <NUM> may identify the second portion of the second data. In some examples, the second data may represent a second version of the file. For instance, to generate the second data, data may have been added to the first data, removed from the first data, changed within the first data, and/or the like. In some examples, the remote system <NUM> may receive the second data from the one or more computing devices associated with a developer of the file.

At <NUM>, the process <NUM> includes determining that the first portion of the first data corresponds to the first portion of the second data. For examples, the remote system <NUM> may determine that the first portion of the first data corresponds to the first portion of the second data. In some examples, to make the determination, the remote system <NUM> may use CRC to determine a first check value for the first portion of the first data and a second check value for the first portion of the second data. The remote system <NUM> may then determine that the first check value is the same as the second check value. In some examples, to make the determination, the remote system <NUM> may use SHA-<NUM> to determine a first hash value for the first portion of the first data and a second hash value for the first portion of the second data. The remote system <NUM> may then determine that the first hash value is the same as the second hash value.

At <NUM>, the process <NUM> may include analyzing the second portion of the second data with respect to the second portion of the first data. For example, the remote system <NUM> may analyze the second portion of the second data with respect to the second portion of the first data. In some examples, to perform the analysis, the remote system <NUM> 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, where 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.

Claim 1:
A method comprising:
storing first data (<NUM>) representing a first version (<NUM>, <NUM>) of a file;
storing second data (<NUM>) representing a second version (<NUM>, <NUM>) of the file;
determining that a first portion (<NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>)) of the first data includes the same data as a first portion (<NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>)) of the second data; and
based at least in part on the first portion of the first data includes the same data as the first portion of the second data:
identifying a second portion (<NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>)) of the first data using the first portion of the first data;
identifying a second portion (<NUM>(<NUM>), <NUM>(<NUM>), <NUM>(<NUM>)) of the second data using the first portion of the second data;
generating first compressed data by compressing the second portion of the first data by at least generating a first dictionary (<NUM>) associated with the second portion of the first data;
generating second compressed data by compressing the second portion of the second data by at least generating a second dictionary (<NUM>) associated with the second portion of the second data;
generating third compressed data by compressing the second portion of the second data by at least generating a third dictionary (<NUM>) associated with the second portion of the second data using the first dictionary as a base to generate the third dictionary;
determining a difference between the third compressed data and the second compressed data;
determining that the difference satisfies a threshold difference;
storing the third compressed data as at least part of a patch file (<NUM>, <NUM>) for the file; and
sending, to one or more electronic devices (<NUM>), the patch file for updating the file from the first version of the file to the second version of the file.