IP Library Granted Patent US 7,460,032
Granted Patent B2
US 7,460,032 · App. 11/542,892 · Granted Dec 2, 2008

Methods and apparatus for performing adaptive compression

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,460,032
App. No.
11/542,892
Granted
Dec 2, 2008
Kind
B2
Abstract

Methods and apparatus for performing adaptive compression are disclosed. A data stream is divided into a plurality of data segments. When one of the plurality of data segments is compressed, it is determined whether the compression has been successful. When the compression has been successful, a data segment in proximity to the compressed segment (e.g., the next data segment in the plurality of data segments) is compressed. However, when the compression has been unsuccessful, one or more of the plurality of data segments are skipped (i.e., not compressed) before compression is attempted on another one of the plurality of data segments. When a data segment is compressed, the compression algorithm (and any associated parameter(s)) that is applied is selected based upon a variety of factors, such as the length of the data segment, CPU speed, CPU availability, and/or data throughput such as the network bandwidth or network availability (e.g., where data is to be transmitted via a network interface). The compression algorithm (and any associated parameter(s)) may also be selected, at least in part, based upon a set of user preferences that indicate a preference between the speed with which compression is performed and the amount that a data segment is compressed.

Claims (119)

1. A method of compressing a file including a plurality of data segments, comprising:

dividing the file into a plurality of segments of data;

compressing one of the plurality of segments of data;

determining whether compression of the one of the plurality of segments of data was successful; and

when the compression of the one of the plurality of segments of data was not successful, skipping one or more of the plurality of segments of data in proximity to the one of the plurality of segments of data that has been unsuccessfully compressed before applying the compressing step to another one of the plurality of segments of data.

2. The method as recited in claim 1 , wherein the one or more of the plurality of segments of data are in proximity to the one of the plurality of segments of data that has been unsuccessfully compressed when the one or more of the plurality of segments of data are within a specified number of data segments of the segment of data that has been unsuccessfully compressed.

3. A method of compressing a data stream, comprising:

dividing the data stream into a plurality of segments of data;

compressing one of the plurality of segments of data;

determining whether compression of the one of the plurality of segments of data was successful; and

when the compression of the one of the plurality of segments of data was not successful, skipping one or more of the plurality of segments of data following the one of the plurality of segments of data that has been unsuccessfully compressed before applying the compressing step to another one of the plurality of segments of data.

4. The method as recited in claim 3 , wherein the plurality of segments of data are variable length data segments.

5. The method as recited in claim 3 , further comprising:

when the compression of the one of the plurality of segments of data was successful, compressing a next one of the plurality of segments of data following the one of the plurality of segments of data that has been compressed.

6. The method as recited in claim 5 , further comprising:

identifying a type of compression to apply;

wherein compressing a next one of the plurality of segments of data following the one of the plurality of segments of data that has been compressed includes applying the identified type of compression to the next one of the plurality of segments of data following the one of the plurality of segments of data that has been compressed.

7. The method as recited in claim 6 , wherein identifying the type of compression to apply comprises:

applying a plurality of types of compression to one or more of the plurality of data segments;

determining a result of the applying the plurality of types of compression to the one or more of the plurality of data segments; and

selecting one of the plurality of types of compression based upon the result of the applying the plurality of types of compression to the one or ore of the plurality of data segments.

8. The method as recited in claim 6 , wherein the type of compression is associated with a set of user preferences.

9. The method as recited in claim 8 , wherein the set of user preferences indicates at least one of a desired speed of compression, a desired compression amount, and an indication of the importance of the speed of compression with respect to the importance of the amount of compression.

10. The method as recited in claim 6 , wherein the type of compression is an identified compression algorithm or indicates that no compression is to be performed.

11. The method as recited in claim 10 , wherein the type of compression further includes one or more parameters associated with the identified compression algorithm.

12. The method as recited in claim 6 , further comprising:

determining at least one of a length of the data segment that has been compressed, data throughput, network bandwidth, network availability, CPU availability, and CPU speed;

wherein identifying a type of compression to apply is performed based upon at least one of the length of the data segment that has been compressed, data throughput, network bandwidth, network availability, CPU availability, and CPU speed.

13. The method as recited in claim 12 , wherein determining the network availability is performed when the data is to be transmitted via a network interface for storage at a remotely located storage medium.

14. The method as recited in claim 12 , wherein the type of compression is an identified compression algorithm or indicates that no compression is to be performed.

15. The method as recited in claim 14 , wherein the type of compression further includes one or more parameters associated with the identified compression algorithm.

16. The method as recited in claim 12 , wherein the type of compression is further associated with a set of user preferences.

17. The method as recited in claim 16 , wherein the set of user preferences indicates at least one of a desired speed of compression, a desired compression amount, and an indication of the importance of the speed of compression with respect to the importance of the amount of compression.

18. The method as recited in claim 17 , wherein identifying a type of compression to apply comprises:

obtaining a set of information associated with the set of user preferences; and

identifying the type of compression associated with the at least one of the length of the data segment that has been compressed, data throughput, network bandwidth, network availability, CPU availability, and CPU speed from the set of information.

19. The method as recited in claim 16 , wherein identifying a type of compression to apply comprises:

obtaining a set of information associated with the set of user preferences; and

identifying the type of compression associated with the at least one of the length of the data segment that has been compressed, data throughput, network bandwidth, network availability, CPU availability, and CPU speed from the set of information.

20. The method as recited in claim 19 , further comprising:

identifying a desired compression amount from the set of information;

determining an amount that the data segment has been compressed;

wherein determining whether compression of the one of the plurality of data segments was successful includes comparing the desired compression amount with the amount that the data segment has been compressed.

21. The method as recited in claim 12 , wherein determining the network availability comprises:

identifying a queue of data buffers to be written to the remotely located storage medium; and

ascertaining an availability of the data buffers.

22. The method as recited in claim 21 , further comprising:

comparing the availability of the data buffers with a desired availability.

23. The method as recited in claim 12 , wherein determining the network availability comprises:

identifying a queue of data buffers to be written to the remotely located storage medium;

determining a processing time associated with applying the type of compression to one or more data segments; and

ascertaining a total amount of time waiting for the queue to store the one or more data segments in the queue.

24. The method as recited in claim 23 , further comprising:

calculating an efficiency of compression equal to the processing time divided by the total amount of time waiting for the queue.

25. The method as recited in claim 3 , further comprising:

tracking a number of the plurality of segments of data (n) that have not compressed successfully;

wherein skipping one or more of the plurality of segments of data includes skipping (n*2) of the plurality of segments of data before compressing another one of the plurality of segments of data.

26. The method as recited in claim 25 , wherein the number of the plurality of segments of data (n) that have not compressed successfully is a number of consecutive segments of data that have not compressed successfully.

27. The method as recited in claim 3 , further comprising:

tracking a number of the plurality of segments of data (n) that have not compressed successfully;

wherein skipping one or more of the plurality of segments of data includes skipping one of the plurality of segments of data when n is equal to one and skipping 2(n−1) of the plurality of segments of data when n is greater than one.

28. The method as recited in claim 27 , wherein the number of the plurality of segments of data (n) that have not compressed successfully is a number of consecutive segments of data that have not compressed successfully.

29. The method as recited in claim 3 , further comprising:

identifying a desired compression amount; and

determining an amount that the data segment has been compressed;

wherein determining whether compression of the one of the plurality of data segments was successful includes comparing the desired compression amount with the amount that the data segment has been compressed.

30. The method as recited in claim 29 , wherein compression of the one of the plurality of data segments was successful when the amount that the one or more data segments has been compressed is greater than or equal to the desired compression amount.

31. The method as recited in claim 29 , wherein identifying a desired compression amount comprises:

identifying a desired compression amount based upon at least one of data throughput, network bandwidth, network availability, CPU availability, and CPU speed.

32. The method as recited in claim 29 , wherein identifying a desired compression amount comprises:

identifying a desired compression amount based upon a set of user specified preferences.

33. The method as recited in claim 32 , wherein the desired compression amount is associated with at least one of data throughput, network bandwidth, network availability, CPU availability, and CPU speed.

34. A method of identifying a type of compression to apply to one or more data segments of a data stream, comprising:

determining at least one of data throughput, network bandwidth, network availability, CPU availability, and CPU speed;

identifying a type of compression to apply to one or more data segments of the data stream based upon at least one of the following factors: data throughput, network bandwidth, network availability, CPU availability, and CPU speed;

applying the type of compression to one or more data segments of the data stream;

ascertaining a desired compression amount;

determining an amount that the one or more data segments has been compressed;

comparing the desired compression amount with the amount that the one or more data segments has been compressed; and

determining whether to compress one or more data segments following the one or more data segments that have been compressed based upon the comparison.

35. The method as recited in claim 34 , further comprising:

when the amount that the one or more data segments has been compressed is greater than the desired compression amount, compressing one or more data segments following the one or more data segments that have been compressed; and

when the amount that the one or more data segments has been compressed is not greater than the desired compression amount, skipping compression of one or more data segments following the one or more data segments that have been compressed.

36. The method as recited in claim 34 , wherein ascertaining a desired compression amount comprises:

identifying a desired compression amount based upon at least one of the data throughput, network bandwidth, network availability, CPU availability, and CPU speed.

37. The method as recited in claim 34 , wherein ascertaining a desired compression amount comprises:

identifying a desired compression amount based upon a set of user specified preferences.

38. An apparatus for compressing a file including a plurality of data segments, comprising:

a processor; and

a memory, at least one of the processor or the memory being adapted for:

dividing the file into a plurality of segments of data;

compressing one of the plurality of segments of data;

determining whether compression of the one of the plurality of segments of data was successful; and

when the compression of the one of the plurality of segments of data was not successful, skipping one or more of the plurality of segments of data in proximity to the one of the plurality of segments of data that has been unsuccessfully compressed before applying the compressing step to another one of the plurality of segments of data.

39. A computer-readable medium storing thereon computer-readable instructions for compressing a file including a plurality of data segments, comprising:

instructions for dividing the file into a plurality of segments of data;

instructions for compressing one of the plurality of segments of data;

instructions for determining whether compression of the one of the plurality of segments of data was successful; and

instructions for skipping one or more of the plurality of segments of data in proximity to the one of the plurality of segments of data that has been unsuccessfully compressed before applying the compressing step to another one of the plurality of segments of data when the compression of the one of the plurality of segments of data was not successful.

40. An apparatus for compressing a file including a plurality of data segments, comprising:

means for dividing the file into a plurality of segments of data;

means for compressing one of the plurality of segments of data;

means for determining whether compression of the one of the plurality of segments of data was successful; and

means for skipping one or more of the plurality of segments of data in proximity to the one of the plurality of segments of data that has been unsuccessfully compressed before applying the compressing step to another one of the plurality of segments of data when the compression of the one of the plurality of segments of data was not successful.

41. An apparatus for compressing a data stream, comprising:

a processor; and

a memory, at least one of the processor or the memory being adapted for:

dividing the data stream into a plurality of segments of data;

compressing one of the plurality of segments of data;

determining whether compression of the one of the plurality of segments of data was successful; and

when the compression of the one of the plurality of segments of data was not successful, skipping one or more of the plurality of segments of data following the one of the plurality of segments of data that has been unsuccessfully compressed before applying the compressing step to another one of the plurality of segments of data.

42. The apparatus as recited in claim 41 , wherein the plurality of segments of data are variable length data segments.

43. The apparatus as recited in claim 41 , at least one of the processor or the memory being further adapted for:

when the compression of the one of the plurality of segments of data was successful, compressing a next one of the plurality of segments of data following the one of the plurality of segments of data that has been compressed.

44. An apparatus for compressing a data stream, comprising:

means for dividing the data stream into a plurality of segments of data;

means for compressing one of the plurality of segments of data;

means for determining whether compression of the one of the plurality of segments of data was successful; and

means for skipping one or more of the plurality of segments of data following the one of the plurality of segments of data that has been unsuccessfully compressed before applying the compressing step to another one of the plurality of segments of data when the compression of the one of the plurality of segments of data was not successful.

Assignments (8)
ASSIGNMENT AND ASSUMPTION AGREEMENT Recorded Oct 12, 2023
From: CARBONITE, LLC
To: OPEN TEXT INC.
Reel/Frame 065222/0310 →
CERTIFICATE OF CONVERSION Recorded Oct 12, 2023
From: CARBONITE, INC.
To: CARBONITE, LLC
Reel/Frame 065222/0303 →
TERMINATION OF PATENT SECURITY AGREEMENT FILED AT R/F 045640/0335 Recorded Mar 26, 2019
From: SILICON VALLEY BANK, AS ADMINISTRATIVE AGENT
To: CARBONITE, INC.
Reel/Frame 048702/0929 →
SECURITY INTEREST Recorded Mar 19, 2018
From: CARBONITE, INC.
To: SILICON VALLEY BANK
Reel/Frame 045640/0335 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 29, 2016
From: EVAULT, INC.
To: CARBONITE GMBH
Reel/Frame 037617/0911 →
CHANGE OF NAME Recorded Jan 10, 2012
From: I365 INC.
To: EVAULT, INC.
Reel/Frame 027508/0769 →
CHANGE OF NAME Recorded May 4, 2009
From: EVAULT, INC.
To: I365 INC.
Reel/Frame 022634/0047 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 3, 2006
From: BOLDT, TIMOTHY J.; LEWITZKY, ANDRE G.
To: EVAULT, INC.
Reel/Frame 018387/0281 →