IP Library Granted Patent US 7,293,035
Granted Patent B2
US 7,293,035 · App. 10/880,843 · Granted Nov 6, 2007

System and method for performing compression/encryption on data such that the number of duplicate blocks in the transformed data is increased

Assignee: International Business Machines Corporation
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 7,293,035
App. No.
10/880,843
Granted
Nov 6, 2007
Kind
B2
Abstract

Desired transformations such as compression, encryption and/or encoding are applied to data such that the number of duplicate chunks in the transformed data is increased and the chunks are predominantly of a predetermined size. Additionally, the unique and duplicate chunks of transformed data are identified. A variable-sized window is passed over the set of data to generate a working chunk of transformed data that is of the predetermined size. When the working chunk is a duplicate chunk of data, a next group of untransformed data is selected from the set of data, transformed and then evaluated. When the working chunk is not a duplicate chunk of data, a next group of data is selected by sliding the window over the set of data to generate another working chunk that is evaluated.

Claims (61)

1. A method for applying desired transformations to data such that the number of duplicate chunks in the transformed data is increased and the chunks are predominantly of a fixed size, the method comprising:

(a) selecting a group of data from a set of data, the selected group of data comprising a beginning and an end and being continuous between the beginning and the end of the selected group of data and such that a working chunk of data generated from the selected group of data is of size equal to a predetermined size;

(b) generating the working chunk of data from the selected group of data by performing at least one of a compression, an encryption and an encoding of the selected group of data;

(c) determining whether the working chunk comprises a duplicate chunk of data;

(d) when the working chunk does not comprise a duplicate chunk of data, selecting a next group of data from the set of data, the next selected group of data comprising a beginning and an end and being continuous between the beginning and the end of the next selected group of data, the beginning of the next group of data being a predetermined number of data units after the beginning of the current selected group of data, and returning to (b); and

(e) when the working chunk comprises a duplicate chunk of data, dividing the data of the data set between the end of the last selected group of data that generated a working chunk that was a duplicate chunk of data and the beginning of the current selected group of data into one or more unique chunks.

2. The method according to claim 1 , wherein the data units comprise one of a bit, a byte and a word.

3. The method according to claim 1 , wherein the working chunk of data is considered a duplicate chunk of data if it is likely to be identical to a chunk of data that has already been processed and classified.

4. The method according to claim 1 , wherein determining whether the working chunk of data comprises a duplicate chunk of data comprises:

computing a mathematical value based on the working chunk of data; and

comparing the mathematical value to contents of a data structure.

5. The method according to claim 4 , wherein the data structure comprises a hash table.

6. The method according to claim 1 , wherein determining whether the working chunk of data comprises a duplicate chunk of data is based on a checksum generated from the working chunk of data.

7. The method according to claim 1 , wherein determining whether the working chunk of data comprises a duplicate chunk of data is based on a cryptographic hash of the working chunk of data.

8. The method according to claim 1 , wherein determining whether the working chunk of data comprises a duplicate chunk of data is based on a comparison of the working chunk of data to previously processed and classified chunks of data.

9. The method according to claim 1 , further comprising storing each unique chunk of data.

10. The method according to claim 1 , wherein selecting a next group of data in step (d) comprises:

locating a marker in a working chunk of data generated from the next group of data;

determining whether the marker has been seen before;

retrieving a remembered offset for the marker;

shifting the location of the beginning of the next group of data by an amount based on the remembered offset for the marker and its current offset from an edge of the working chunk of data; and

returning to (b).

11. The method according to claim 10 , wherein determining whether the marker has been seen before comprises:

computing a mathematical value of the data around the marker; and

comparing the mathematical value to contents of a data structure.

12. The method according to claim 11 , wherein the data structure comprises a maximum predetermined size, and

the method further comprising removing an oldest value from the data structure when storing a new mathematical value in the data structure causes the data structure to exceed the maximum predetermined size.

13. The method according to claim 10 , further comprising storing the mathematical value for a marker in the data structure when the marker has not been seen before.

14. The method according to claim 13 , wherein storing the mathematical value stores the mathematical value for a predetermined period of time.

15. The method according to claim 1 , wherein selecting a next group of data in step (d) comprises:

locating a marker in the next group of data;

determining whether the marker has been seen before;

retrieving a remembered offset for the marker;

shifting the location of the beginning of the next group of data by an amount based on the remembered offset for the marker and its current offset from an edge of the next group of data; and

returning to (b).

16. The method according to claim 1 , wherein selecting a next group of data in step (d) comprises:

locating a marker in a working chunk of data generated from the next group of data;

computing a mathematical function of data around the marker;

determining whether a remembered offset is greater than or equal to a current offset of the marker from an edge of the working chunk of data when the computed mathematical function of data around the marker has been previously seen;

setting a number y to be equal to the predetermined size minus a quantity of a remembered offset minus the current offset of the marker in the working block of data when the remembered offset is greater than or equal to the current offset of the marker, the number y being greater than or equal to zero;

setting the number y to be equal to the remembered offset minus the current offset of the marker in the working block of data when the remembered offset is less than the current offset of the marker;

setting the number y to be equal to the offset of the marker when the computed mathematical function of data around the marker has not been previously seen;

setting the number y to be equal to the predetermined size when the working chunk does not contain the marker;

setting a number x equal to an offset in the untransformed set of data corresponding to the offset of the number y in the working chunk of data, the number x being greater than or equal to zero;

shifting the location of the beginning of the next group of data by x data units; and

returning to (b).

17. The method according to claim 1 , wherein selecting a next group of data in step (d) comprises:

locating a marker in the next group of data;

computing a mathematical function of data around the marker;

determining whether a remembered offset is greater than or equal to a current offset of the marker when the computed mathematical function of data around the marker has been previously seen;

setting a number x to be equal to the predetermined size minus a quantity of a remembered offset minus the current offset of the marker in the next group of data when the remembered offset is greater than or equal to the current offset of the marker from an edge of the next group of data, the number x being greater than or equal to zero;

setting the number x to be equal to the remembered offset minus the current offset of the marker in the next group of data when the remembered offset is less than the current offset of the marker;

setting the number x to be equal to the offset of the marker when the computed mathematical function of data around the marker has not been previously seen;

setting the number x to be equal to the predetermined size when the next group of data does not contain the marker; shifting the location of the beginning of the next group of data by x data units; and returning to (b).

18. A program storage device, comprising:

a storage area; and information stored in the storage area, the information being readable by a machine and tangibly embodying a program of instructions executable by the machine for performing method steps for applying desired transformations to data such that the number of duplicate chunks in the transformed data is increased and the chunks are predominantly of a fixed size, the method comprising:

(a) selecting a group of data from the set of data, the selected group of data comprising a beginning and an end and being continuous between the beginning and the end of the selected group of data and such that a working chunk of data generated from the selected group of data is of size equal to a predetermined size;

(b) generating the working chunk of data from the selected group of data; by performing at least one of compression, an encoding of the selected group of data;

(c) determining whether the working chunk is a duplicate chunk of data;

(d) when the working chunk is not a duplicate chunk of data, selecting a next group of data from the set of data, the next selected group of data comprising a beginning and an end and being continuous between the beginning and the end of the next selected group of data, the beginning of the next group of data being a predetermined number of data units after the beginning of the current selected group of data, and returning to (b);

(e) when the working chunk comprises a duplicate chunk of data, dividing the data of the data set between the end of the last selected group of data that generated a working chunk that was a duplicate chunk of data and the beginning of the current selected group of data into one or more unique chunks.

Assignments (3)
CHANGE OF NAME Recorded Oct 6, 2017
From: GOOGLE INC.
To: GOOGLE LLC
Reel/Frame 044142/0357 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 12, 2011
From: INTERNATIONAL BUSINESS MACHINES CORPORATION
To: GOOGLE INC.
Reel/Frame 026664/0866 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 30, 2004
From: HSU, WINDSOR WEE SUN; ONG, SHAUCHI
To: INTERNATIONAL BUSINESS MACHINES CORPORATION
Reel/Frame 015538/0800 →
Continuity (1)
Related Publication 20060004808A1 · Jan 5, 2006