Abstract:
The present invention significantly improves the performance of matching target file window partitions to source file window partitions in delta compression. In particular, the present invention enhances delta compression performance of delta compressors based on the idea of modeling a dataset with the frequencies of its n-grams and employs a method to compute good source and target window matching in linear time.

Description:
This application claims the benefit of U.S. Provisional Application No. 60/487,992 filed on Jul. 17, 2003, which is herein incorporated by reference. 

   The present invention relates generally to data compression and, more particularly, to a method for efficient window partition matching in delta compressors to enhance compression performance based on the idea of modeling a dataset with the frequencies of its n-grams. 
   BACKGROUND OF THE INVENTION 
   Compression programs routinely limit the data to be compressed together in segments called windows. The process of doing this is called windowing. Delta compression techniques were developed to compress a target file given some other related source file. An early example delta compressor was the UNIX diff tool which computes differences between versions of text files by matching text lines across files. Diff was used to reduce disk storage in UNIX based source code control systems such as Source Code Control System (SCCS) and Revision Control System (RCS). One of the first delta compressors that could deal with binary data was Vdelta. Unlike other delta compressors which do nothing without source data, the algorithm used in Vdelta compresses data when source data is absent. Vdelta was used in the Bell Labs source and binary code control system (SBCS) and later in the experiments that spurred the addition of delta-encoding to the Internet HTTP protocol. Windowing is necessary to delta compressors partly due to their use of memory-intensive string matching algorithms and partly due to improved coding of addresses of matches. Here, windowing means first dividing a target file into data segments called target windows, then for each target window selecting some suitably similar source window to compress against. Current practice uses source data with matching file offsets to given target windows. This may work for file versions created by simple editing but often fails when significant data updates happen between versions. 
   Therefore, a need exists for a method for efficiently matching target file windows with source file windows to improve delta compression performance. 
   SUMMARY OF THE INVENTION 
   In one embodiment, the present invention significantly improves the performance of matching target file window partitions to source file window partitions in delta compression. In particular, the present invention enhances delta compression performance of delta compressors based on the idea of modeling a dataset with the frequencies of its n-grams and employs a method to compute good source and target window matching in time O(s). 

   
     BRIEF DESCRIPTION OF THE DRAWINGS 
     The teaching of the present invention can be readily understood by considering the following detailed description in conjunction with the accompanying drawings, in which: 
       FIG. 1  illustrates an example of window matching using the file offset alignment strategy; 
       FIG. 2  illustrates a flowchart of a fast search for source window matching method of the present invention; 
       FIG. 3  illustrates an exemplary partition of the source and target files of the present invention; 
       FIG. 4  illustrates the candidate source window matches with the target window T and the associated votes by target each target segment in target window T; 
       FIG. 5  illustrates a detailed window matching algorithm in C programming codes of the present invention; 
       FIG. 6  illustrates a flowchart of a best match method for finding the best match between the target segment T among the top source window candidates; 
       FIG. 7  illustrates an example of the extended search area for the top source window candidates and the associated target window T of the present invention; and 
       FIG. 8  illustrates the present window matching method implemented using a general purpose computer or any other hardware equivalents. 
   

   To facilitate understanding, identical reference numerals have been used, where possible, to designate identical elements that are common to the figures. 
   DETAILED DESCRIPTION 
   The present invention relates to data compression using delta compressors based on the idea of modeling a dataset with the frequencies of its n-grams. 
   To better understand the present invention, a description of n-grams and its use are first provided. The present invention uses n-grams to model data. For any data segment S with length s, an n-gram in S is a subsequence of n&lt;s consecutive bytes. Assume an arbitrary but fixed n, the notation S i  will denote the n-gram in S starting at location i while S[i] denotes the byte at location i. For example, the string S=abababac is of length 8 and has five 4-grams, of which three are distinct: abab, baba and abac. The 4-grams S 0  and S 2  are the same: abab. 
   The present invention repeatedly examine n-gram frequencies of given data segments. Thus, it is beneficial if this step can be executed quickly. For any general data segment S, the notation F s  shall be used to denote an associative array of frequencies indexed by the n-grams of S. Suppose that F s  was initialized to 0&#39;s, the below loop computes all n-gram frequencies:
         for (i=0; i&lt;=s−n; i+=1)   F S [S i ]+=1;       

   This loop runs in time O(s) as long as the cost of indexing the array F S  can be bounded by some constant. This can be ensured by implementing F S  as a hash table indexed by the distinct n-grams. However, hash table look-up cost is significant and the frequency estimates do not always need to be exact. Thus, F S  is chosen to be implemented as a normal array of size A by hashing each n-gram S i  to an integer via the below hash function with some preselected constant α:
 
χ( S   i )=(α n−1   S[i]+α   n−2   S[i]+ . . . +S[i+n− 1])mod  A   (Equ. 1)
 
   The above loop then becomes:
         for (i=0; i&lt;=s−n; i+=1)   F S [χ(S i )]+=1;       

   For nontrivial values of n, the loop can be further optimized by exploiting the linearity of the hash function χ to compute χ(S i+1 ) from χ(S i ) via:
 
χ( S   i+1 )={α(χ( S   i )−α n−1   S[i]}+S[i+n ]} mod  A   (Equ. 2)
 
   For assessment and identification of string similarity in delta compressors, larger values of n are required (n usually greater than 1). In that case, a small number of n-grams may collide and get mapped into the same indices in F S . Henceforth, given a data segment S and a frequency array F S , it shall be assumed that F S  is indexed by mapping the n-grams via the χ function as described. Therefore, the notation F S [S i ] will mean F S [χ(S i )]. 
   Delta compressors typically deal with two files at a time. A target file is compressed against some related source file. For large files, windowing is done by first dividing the target file into target windows, then compressing each such window against some source window. A source window is often from the source file but it could also come from some part of the target file earlier than the current target window. Since the target file is often a later version of the source file created via local editing operations, windowing is conventionally done by aligning a target window with a source window in the source file using the same file offset. However, it is increasingly common to have more extensive changes between versions, for example, in applications that compute patches between archives of source code or store versions of daily disk back-up archives. The file offset alignment strategy is often ineffective for processing these very large files because data may be moved to remote locations between versions.  FIG. 1  illustrates an example of window matching using the file offset alignment strategy. The source file S contains three string based sections A, B, and C ordered consecutively in sequence. The target file is simply a version of the source file by moving section A to the end of the file via local editing. The target file contains the same string based sections as the source file but the sections are ordered in the sequence of B, C, and A instead. If target window  1 , T, is used to match against source window  1 , a match cannot be found. In fact, the contents in the T have shifted quite far away from the source window  1 . In this case, the file offset alignment strategy performs very poorly in matching a target window with a source window. A brute force approach is to simply align a target window with every location in the source file and run the compression algorithm itself to find the best one. This would be unbearably slow. 
   To address this criticality, the present invention provides a method for matching source and target file windows by modeling data using n-grams. The present invention gives a way to construct fast linear-time window matching algorithms. 
   In the present invention, the concept of signatures to represent a data segment is introduced. Given a data segment P of length λ, define its signature σ(P) as the sum of the hash values of all n-grams using the same hash function shown in Equ. 1 and 2. If i represents the hashed value of n-grams and A is the size of the n-gram frequency array, then: 
   
     
       
         
           
             
               
                 
                   σ 
                   ⁡ 
                   
                     ( 
                     P 
                     ) 
                   
                 
                 = 
                 
                   
                     ∑ 
                     
                       i 
                       = 
                       0 
                     
                     
                       A 
                       - 
                       1 
                     
                   
                   ⁢ 
                   
                     
                       F 
                       P 
                     
                     ⁡ 
                     
                       [ 
                       i 
                       ] 
                     
                   
                 
               
             
             
               
                 ( 
                 
                   Equ 
                   . 
                   
                       
                   
                   ⁢ 
                   3 
                 
                 ) 
               
             
           
         
       
     
   
   The constant A is chosen so that the total sum would not exceed the maximum allowed size in a computer word. In one embodiment of the present invention, λ is typically 2 10  so A=2 20  is used to ensure that each signature fits in a 32-bit integer. A nice property of σ( ) is that similar data segments get mapped to similar values. The signature distance between two segments P 1  and P 2  is defined as: 
   
     
       
         
           
             
               
                 
                   δ 
                   ⁡ 
                   
                     ( 
                     
                       
                         P 
                         1 
                       
                       , 
                       
                         P 
                         2 
                       
                     
                     ) 
                   
                 
                 = 
                 
                   
                      
                     
                       
                         σ 
                         ⁡ 
                         
                           ( 
                           
                             P 
                             1 
                           
                           ) 
                         
                       
                       - 
                       
                         σ 
                         ⁡ 
                         
                           ( 
                           
                             P 
                             2 
                           
                           ) 
                         
                       
                     
                      
                   
                   
                     max 
                     ⁡ 
                     
                       ( 
                       
                         
                           σ 
                           ⁡ 
                           
                             ( 
                             
                               P 
                               1 
                             
                             ) 
                           
                         
                         , 
                         
                           σ 
                           ⁡ 
                           
                             ( 
                             
                               P 
                               2 
                             
                             ) 
                           
                         
                       
                       ) 
                     
                   
                 
               
             
             
               
                 ( 
                 
                   Equ 
                   . 
                   
                       
                   
                   ⁢ 
                   4 
                 
                 ) 
               
             
           
         
       
     
   
     FIG. 2  illustrates a flowchart of a fast search for matching source window method  200  of the present invention. Method  200  starts in step  205  and proceeds to step  210 . 
   In step  210 , a source file S is partitioned into a sequence of segments, S 0 , S 1 , . . . , S a , each of fixed size λ in length as shown in  310  in  FIG. 3 . Note that the starting offset of segment S i  in the source file is iλ. The last segment is omitted if it is smaller than λ. 
   In step  220 , a target file is kλ in length and is split into L target windows as shown in  320  in  FIG. 3 . Each target window T is further split into a sequence of segments T 0 , T 1 , . . . , T b  each of the same size λ as shown in  320  in  FIG. 3 . Note that the target window size is arbitrary and can be chosen to suit a particular application or implementation. Therefore, the values of b and L are arbitrary as well, depending on the value of the target window size chosen. In one is chosen to be 3λ and the values of b and L are therefore 3 and kλ/3 respectively. 
   In step  230 , for each segment T j  in a particular target window T, the set of all S i &#39;s such that j≦i≦a−b and δ(S i , T i )≦ε are computed. Then, the method asserts T j &#39;s vote for each such source window with starting offset (i−j)λ as a candidate for a match. Note that different segments in T may vote for the same position. To further illustrate this step, the example in  FIG. 4  is used. In  FIG. 4 , the current target window T is target window  3 . For segment T 0  in T, T 0  will be used to compute the signatures in conjunction with source segments S 0 , S 1 , S 2 , . . . , S a-b  to produce δ(S 0 , T 0 ), δ(S 1 , T 0 ), δ(S 2 , T 0 ), . . . , and δ(S a-b , T 0 ). Similarly, for segment T 1  in T, T 1  will be used to compute the signatures in conjunction with source segments S 1 , S 2 , S 3 , . . . , S a-b  to produce δ(S 1 , T 1 ), δ(S 2 , T 1 ), δ(S 3 , T 1 ), and δ(S a-b , T 1 ). Similarly, for segment T 2  in T, T 2  will be used to compute the signatures in conjunction with source segments S 2 , S 2 , S 4 , . . . , S a-b  to produce δ(S 2 , T 2 ), δ(S 3 , T 2 ), δ(S 4 , T 2 ), . . . , and δ(S a-b , T 2 ). Considering an example with signatures of all source and target segment pairs that meet the condition of δ(S i , T i )≦ε are shown in TABLE 1. 
   
     
       
             
           
         
             
               TABLE 1 
             
             
                 
             
             
               Source Target Segment Pairs 
             
             
               Meeting Condition of δ(S i , T i ) ≦ ε 
             
             
                 
             
           
           
             
               S 0 , T 0   
             
             
               S 1 , T 0   
             
             
               S 3 , T 0   
             
             
               S 1 , T 1   
             
             
               S 8 , T 1   
             
             
               S 2 , T 2   
             
             
               S 5 , T 2   
             
             
               S 11 , T 2   
             
             
                 
             
           
        
       
     
   
   In this example, the candidate source windows that potentially match the current target window T and their associated votes by each target segment are shown in  430  to  434  in  FIG. 4 . The eight source and target window pairs that meet the δ(S i , T i )≦ε condition in this example produces five candidate matching source windows for the current target window. 
   For target window segment T 0 , it has a potential match with S 0 , S 1 , and S 3 . In this case, j=0 and i=0, 1, and 3. Applying the previously defined rule of voting, then the T 0  and S 0  segment pair leads to 1 vote by target window segment T 0  for candidate source window  1  which contains source segments S 0 , S 1 , and S 2 ; the T 0  and S 1  segment pair leads to 1 vote by target window segment T 0  for candidate source window  2  which contains source segments S 1 , S 2 , and S 3 ; the T 0  and S 3  segment pair leads to 1 vote by target window segment T 0  for candidate source window  3  which contains source segments S 3 , S 4 , and S 5 . 
   For target window segment T 1 , it has a potential match with S 1  and S 8 . In this case, j=1 and i=1 and 8. Applying the previously defined rule of voting, then the T 1  and S 1  segment pair leads to 1 vote by target window segment T 1  for candidate source window  1  which contains source segments S 0 , S 1 , and S 2 ; the T 1  and S 8  segment pair leads to 1 vote by target window segment T 1  for candidate source window  4  which contains source segments S 7 , S 8 , and S 9 . 
   For target window segment T 2 , it has a potential match with S 2 , S 5 , and S 11 . In this case, j=2 and i=2, 5, and 11. Applying the previously defined rule of voting, then the T 2  and S 2  segment pair leads to 1 vote by target window segment T 2  for candidate source window  1  which contains source segments S 0 , S 1 , and S 2 ; the T 2  and S 5  segment pair leads to 1 vote by target window segment T 2  for candidate source window  3  which contains source segments S 3 , S 4 , and S 5 ; the T 2  and S 11  segment pair leads to 1 vote by target window segment T 2  for candidate source window  5  which contains source segments S 9 , S 10 , and S 11 . 
   At the end of step  230 , the method produces the voting results by the target window segments of the current target window and the associated candidate matching source windows as shown in TABLE 2. 
   
     
       
             
             
             
           
         
             
               TABLE 2 
             
             
                 
             
             
               Candidate Matching 
               Source Window 
               Number of Votes by Current 
             
             
               Source Windows 
               Segments 
               Target Window 
             
             
                 
             
           
           
             
               1 
               S 0 , S 1 , S 2   
               3 
             
             
               2 
               S 1 , S 2 , S 3 , 
               1 
             
             
               3 
               S 3 , S 4 , S 5   
               2 
             
             
               4 
               S 7 , S 8 , S 9   
               1 
             
             
               5 
               S 9 , S 10 , S 11   
               1 
             
             
                 
             
           
        
       
     
   
   Note that votes are weighted by the number of agreeing neighbors to increase accuracy, such as the case of candidate source window  1 . The results of this example mean that candidate source window  1  has the highest potential match with the current target window T with 3 votes. The second highest potential match is candidate source window  3 ; the third highest potential match is a tie consisting candidate source windows  2 ,  4 , and  5 . These candidate matching source windows are the top  5  match of the candidate source windows. 
   Note also that large signatures often mean small values even if they represent fairly distinct data segments. Thus, a graduated scheme is used to set the threshold ε so that larger signatures get smaller thresholds. For example, in comparing two signatures σ 1  and σ 2 , one embodiment of the present invention uses ε=0.05 when min(σ 1 , σ 2 )&gt;2 24  and ε=0.08 when min(σ 1 , σ 2 )&lt;2 16 . Experimentation with a wide variety of data showed that these parameters provided the best balance between window selections and running time. However, these parameters can be arbitrarily chosen to suit a particular application or implementation. 
   In step  240 , the top k candidate source window positions identified in step  230  that have the closest signature distance from a target window T will be applied as inputs to the detailed matching algorithm to a small neighborhood of the candidate source windows to find the best match to T. The detailed matching method is discussed in detail in  FIGS. 5 and 6 . In one embodiment of the present invention, the number of selected top candidates k=8 is used and 2λ (i.e., twice the length of a segment) for the search size for a candidate&#39;s neighborhood that will be used in the detailed matching method to be discussed later. Experimentation with a wide variety of data showed that these parameters provided the best balance between window selections and running time. However, these parameters can be arbitrarily chosen to suit a particular application or implementation. 
   The key step in matching windows is to measure their similarity. This is done by defining a distance between two data segments using their n-grams. Let S 1  and S 2  be two non-empty data segments with corresponding n-gram frequency arrays F S     1    and F S     2    computed by hashing n-grams as described in Equ. 1 and 2 and related exemplary programming loops described previously. The distance between S 1  and S 2  is defined as follows: 
   
     
       
         
           
             
               
                 
                   Δ 
                   ⁡ 
                   
                     ( 
                     
                       
                         S 
                         1 
                       
                       , 
                       
                         S 
                         2 
                       
                     
                     ) 
                   
                 
                 = 
                 
                   
                     
                       ∑ 
                       
                         i 
                         = 
                         0 
                       
                       
                         A 
                         - 
                         1 
                       
                     
                     ⁢ 
                     
                        
                       
                         
                           
                             F 
                             
                               S 
                               1 
                             
                           
                           ⁡ 
                           
                             [ 
                             i 
                             ] 
                           
                         
                         - 
                         
                           
                             F 
                             
                               S 
                               2 
                             
                           
                           ⁡ 
                           
                             [ 
                             i 
                             ] 
                           
                         
                       
                        
                     
                   
                   
                     
                       ∑ 
                       
                         i 
                         = 
                         0 
                       
                       
                         A 
                         - 
                         1 
                       
                     
                     ⁢ 
                     
                       max 
                       ⁡ 
                       
                         ( 
                         
                           
                             
                               F 
                               
                                 S 
                                 1 
                               
                             
                             ⁡ 
                             
                               [ 
                               i 
                               ] 
                             
                           
                           , 
                           
                             
                               F 
                               
                                 S 
                                 2 
                               
                             
                             ⁡ 
                             
                               [ 
                               i 
                               ] 
                             
                           
                         
                         ) 
                       
                     
                   
                 
               
             
             
               
                 ( 
                 
                   Equ 
                   . 
                   
                       
                   
                   ⁢ 
                   5 
                 
                 ) 
               
             
           
         
       
     
   
   The distance Δ is normalized so that 0≦Δ(S 1 , S 2 )≦1. This enables using some preset threshold to cut short a search for similar data segments. The parameters defining n-grams and frequency arrays can have large effect on the quality of Δ. In one embodiment of the present invention, n=4 is used since that is the minimum match length allowed by the underlying delta compressor. The parameters α and A were set to be 101 and 2 13 . These choices keep the frequency arrays at a reasonable size with few n-gram collisions. Although Δ can be applied to data segments with different lengths, the use of Δ by the present invention to be shown below will always be on segments with the same length. 
   Considering an example of two data segments S and T with sizes s&gt;t and a sub-segment of S with length t that matches T best needs to be found. The detailed matching algorithm in  FIG. 5  shows how this can be done. 
     FIG. 5  illustrates a detailed window matching algorithm  500  in C programming codes of the present invention. The first loop computes the distance between T and an initial segment W of S of length t. The variables d and m keep the values of the sums used in defining the distance Δ. Then, the second loop slides W over S one position at a time. At each step, W drops off the left-most n-gram and adds a new n-gram on the right. The frequency array F W  and the variables d and m can be updated in constant time to reflect this. Therefore, the entire loop runs in time O(s). Omitted in the algorithm was the O(t) cost of computing the initial frequency arrays. Adding this back in, the algorithm, when given two data segments S and T with sizes s&gt;t, can find a best match to a target window T in S in time O(s+t). 
     FIG. 6  illustrates a flowchart of a best match method  600  using the top candidate source windows found by method  200  and the associated target window T as inputs to find the best match between the target segment T among the top source window candidates. Method  600  starts in step  605  and proceeds to step  610 . 
   In step  610 , the method accepts the top candidate source windows found by method  200  and the associated target window T as inputs. 
   In step  620 , the method extends the search neighborhood of each of the top candidate source windows by 2λ to give extended search windows S&#39;s. For instance, for each of the top k source window candidate found in method  200 , the method uses 2λ (i.e. twice the length of a segment) for the search size for a candidate&#39;s neighborhood. In other words, the method uses a candidate source window generated from method  200  and extend the search area λ to the right and λ to the left of the candidate source window. In the case the source window candidate is at the beginning of the source file, the extension of the search area to the left may not be possible and can be ignored. Similarly, in the case the source window candidate is at the end of the source file, the extension of the search area to the right may not be possible and can be ignored.  FIG. 7  illustrates a continuation of the previous example used in describing method  200  to show the extended search area for the top  5  source window candidates and the associated target window T.  430  to  434  in  FIG. 4  show the original top  5  source window candidates found by method  200 . Now, by extending the search size by 2λ to each candidate window, the extended search area for these top  5  source window candidates  730  to  734  are shown in  FIG. 7 . For target window T, the search area for candidate source window  1  becomes S 0 , S 1 , S 2 , and S 3 . Note that the source window  1  search area cannot be extended to the left since it is already at the beginning of the file. Similarly, the search area for candidate source window  2  becomes S 0 , S 1 , S 2 , S 3 , and S 4 ; the search area for candidate source window  3  becomes S 2 , S 3 , S 4 , S 5 , and S 6 ; the search area for candidate source window  4  becomes S 6 , S 7 , S 8 , S 9 , and S 10 ; the search area for candidate source window  5  becomes S 8 , S 9 , S 10 , S 11 , and S 12 . 
   In step  630 , once the extended search area for each top source window candidate has been defined, method  500  can be used to find the best match between the extended search area for each of the top k candidates and the associated target window T. For candidate source window  1 , the method uses method  500  to find a sub-segment with length t within the extended search area S 0 , S 1 , S 2 , and S 3  that best matches the target window T. Similarly, for candidate source window  2 , the method uses method  500  to find a sub-segment with length t within the extended search area S 0 , S 1 , S 2 , S 3 , and S 4  that best matches the target window T; for candidate source window  3 , the method uses method  500  to find a sub-segment with length t within the extended search area S 2 , S 3 , S 4 , S 5 , and S 6  that best matches the target window T; for candidate source window  4 , the method uses method  500  to find a sub-segment with length t within the extended search area S 6 , S 7 , S 8 , S 9 , and S 10  that best matches the target window T; for candidate source window  5 , the method uses method  500  to find a sub-segment with length t within the extended search area S 8 , S 9 , S 10 , S 11 , and S 12  that best matches the target window T. 
   In step  640 , the sub-segment with the best distance produced in step  630  among all candidate extended search areas will be used as the best match to T. The method terminates in step  650 . 
     FIG. 8  illustrates the present window matching method(s) implemented using a general purpose computer  800  or any other hardware equivalents. For example, the present window matching methods and data structures can be represented by one or more software applications (or even a combination of software and hardware, e.g., using application specific integrated circuits (ASIC)), where the software is loaded from a storage medium  806 , (e.g., a ROM, a magnetic or optical drive or diskette) and operated by the CPU  802  in the memory  804  of the system. As such, the present window matching methods and data structures of the present invention can be stored on a computer readable medium, e.g., RAM memory, ROM, magnetic or optical drive or diskette and the like. 
   While various embodiments have been described above, it should be understood that they have been presented by way of example only, and not limitation. Thus, the breadth and scope of a preferred embodiment should not be limited by any of the above-described exemplary embodiments, but should be defined only in accordance with the following claims and their equivalents.