IP Library Granted Patent US 8,370,309
Granted Patent B1
US 8,370,309 · App. 12/495,432 · Granted Feb 5, 2013

Revision-tolerant data de-duplication

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 8,370,309
App. No.
12/495,432
Granted
Feb 5, 2013
Kind
B1
Abstract

Redundant data is removed from a volume of data by partitioning the volume of data into fixed-length input segments and determining, for each of the input segments, whether a selected portion of the input segment matches a portion of a segment within a de-duplication dictionary. If the portion of the input segment matches a portion of the segment within the dictionary, the segment within the de-duplication dictionary is compared with the input segment and a token representative of the segment within the dictionary is substituted for at least part of the input segment determined to match the segment within the dictionary.

Claims (38)

1. A method of de-duplicating a volume of data, the method comprising:

selecting a plurality of overlapping portions of an input segment within the volume of data;

comparing each of the overlapping portions of the input segment with a plurality of portions of a dictionary segment from a de-duplication dictionary to identify a first portion of the input segment that matches a first portion of the dictionary segment;

after identifying the matching first portions of the input segment and dictionary segment, determining a starting position of selected bytes within the input segment that differs from a starting position of selected bytes within the dictionary segment according to a difference between starting positions of the matching first portions of the input segment and dictionary segment, the selected bytes of the input segment including more bytes than any one of the overlapping portions of the input segment;

comparing the selected bytes of the input segment with the selected bytes of the dictionary segment to identify dictionary-matching bytes within the input segment; and

replacing the dictionary-matching bytes within the input segment with a token representative of the dictionary segment to reduce the size of the volume of data.

2. The method of claim 1 further comprising partitioning the volume of data into a plurality of segments, the input segment being one of the plurality of segments.

3. The method of claim 1 wherein the portions of the input segment have equal lengths.

4. The method of claim 1 wherein selecting the plurality of overlapping portions of the input segment comprises selecting the plurality of portions of the input segment from respective starting positions within the input segment offset from one another in uniform steps.

5. The method of claim 4 wherein selecting the plurality of portions of the input segment from respective starting positions within the input segment offset from one another in uniform steps comprises selecting the plurality of portions of the input segment from byte-staggered starting positions within the input segment.

6. The method of claim 1 further comprising loading a segment dictionary of the de-duplication dictionary with a plurality of segments obtained from one or more previously received volumes of data, and loading a handle dictionary of the de-duplication dictionary with values that correspond to component portions of the plurality of segments loaded into the segment dictionary, and wherein the plurality of segments loaded into the segment dictionary includes the dictionary segment, and wherein comparing each of the plurality of overlapping portions of the input segment with the plurality of portions of the dictionary segment comprises comparing each of the plurality of portions of the input segment with the contents of the handle dictionary.

7. The method of claim 6 wherein the values that correspond to the component portions are hash values determined based at least in part on the corresponding component portions.

8. The method of claim 6 further comprising loading the handle dictionary with a pointer that indicates, for each value loaded into the handle dictionary, which of the plurality of segments loaded into the segment dictionary contains the component value to which the value in the handle dictionary corresponds and an offset within the segment in the segment dictionary at which the component value is located.

9. The method of claim 1 wherein replacing the dictionary-matching bytes with a token representative of the dictionary segment comprises determining a contiguous sequence of bytes within the selected bytes of the input segment that match a corresponding sequence of bytes within the selected bytes of the dictionary segment, and substituting, for the contiguous sequence of bytes, the token representative of the dictionary segment together with information that indicates the number of bytes within the contiguous sequence of bytes.

10. The method of claim 1 wherein replacing the dictionary-matching bytes within the input segment with a token representative of the dictionary segment comprises determining a contiguous sequence of bytes within selected bytes of the input segment that match a corresponding sequence of bytes within the selected bytes of the dictionary segment, and substituting, for the contiguous sequence of bytes, the token representative of the dictionary segment together with information that indicates the number of bytes within the contiguous sequence of bytes determined to match corresponding bytes within the dictionary segment, and information that indicates a starting position of the corresponding bytes within the dictionary segment.

11. The method of claim 1 further comprising determining whether the dictionary-matching bytes within the input segment exceeds a threshold number of bytes, and wherein replacing the dictionary-matching bytes within the input segment with a token representative of the dictionary segment comprises substituting the token representative of the dictionary segment for the dictionary-matching bytes if the number of dictionary-matching bytes exceeds the threshold number of bytes.

12. The method of claim 1 further comprising repeating said acts of comparing each of a plurality of overlapping portions, comparing selected bytes and replacing with a token representative of the dictionary segment with respect to a portion of the input segment that does not include the dictionary-matching bytes.

13. The method of claim 1 further comprising obtaining a further input segment from the volume of data and repeating, with respect to the further input segment, said acts of comparing each of a plurality of overlapping portions, comparing selected bytes and replacing with a token representative of the dictionary segment.

14. The method of claim 13 wherein repeating, with respect to the further input segment, said acts of comparing each a plurality of overlapping portions, comparing selected bytes comprises repeating said acts of comparing each a plurality of overlapping portions and comparing selected bytes using a smaller selected portion of the input segment than in preceding acts of comparing each a plurality of overlapping portions and comparing selected bytes.

15. The method of claim 1 wherein selecting the plurality of overlapping portions and comparing each of the overlapping portions comprises comparing a first one of the overlapping portions with the plurality of portions of the dictionary segment before selecting a second one of the overlapping portions.

16. A method of de-duplicating a volume of data, the method comprising:

partitioning the volume of data into a plurality of segments based on content within the volume of data;

selecting a plurality of overlapping portions of an input segment of the plurality of segments;

comparing each of the overlapping portions of the input segment with a plurality of portions of a dictionary segment from a de-duplication dictionary to identify a first portion of the input segment that matches a first portion of the dictionary segment;

after identifying the matching first portions of the input segment and dictionary segment, determining a starting position of selected bytes within the input segment that differs from a starting position of selected bytes within the dictionary segment according to a difference between starting positions of the matching first portions of the input segment and dictionary segment, the selected bytes of the input segment including more bytes than any one of the overlapping portions of the input segment;

comparing the selected bytes of the input segment with the selected bytes of the dictionary segment to identify dictionary-matching bytes within the input segment; and

replacing the dictionary-matching bytes within the input segment with a token representative of the dictionary segment to reduce the size of the volume of data.

17. The method of claim 16 wherein partitioning the volume of data into segments based on data content within the volume of data comprises:

computing a fingerprint based on the data content within a selected range of locations within the volume of data;

determining whether the fingerprint meets a predetermined criteria; and

selecting a predetermined location relative to the start of the selected range of locations to be a breakpoint if the fingerprint meets the predetermined criteria, wherein the breakpoint defines, along with one other such like-determined breakpoints, the segments of the volume of data.

18. The method of claim 16 wherein partitioning the volume of data into segments based on data content within the volume of data comprises partitioning the volume of data into variable-length segments.

19. The method of claim 16 wherein the portions of the input segment have equal lengths.

20. A non-transitory computer-readable medium having one or more sequences of instructions embodied therein which, when executed by a processing unit, cause the processing unit to:

select a plurality of overlapping portions of an input segment within a volume of data;

compare each of the overlapping portions of the input segment with a plurality of portions of a dictionary segment from a de-duplication dictionary identify a first portion of the input segment that matches a first portion of the dictionary segment;

determine a starting position of selected bytes within the input segment that differs from a starting position of selected bytes within the dictionary segment according to a difference between starting positions of the matching first portions of the input segment and dictionary segment, the selected bytes of the input segment including more bytes than any one of the overlapping portions of the input segment;

compare the selected bytes of the input segment with the selected bytes of the dictionary segment to identify dictionary-matching bytes within the input segment; and replace the dictionary-matching bytes within the input segment with a token representative of the dictionary segment to reduce the size of the volume of data.

Assignments (21)
RELEASE OF SECURITY INTEREST Recorded Aug 11, 2023
From: ALTER DOMUS (US) LLC, AS COLLATERAL AGENT
To: RIVERBED TECHNOLOGY, INC.; ATERNITY LLC; RIVERBED HOLDINGS, INC.
Reel/Frame 064673/0739 →
CHANGE OF NAME Recorded Feb 18, 2022
From: RIVERBED TECHNOLOGY, INC.
To: RIVERBED TECHNOLOGY LLC
Reel/Frame 059232/0551 →
TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENTS Recorded Dec 27, 2021
From: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS U.S. COLLATERAL AGENT
To: RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
Reel/Frame 058593/0169 →
TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENTS Recorded Dec 27, 2021
From: ALTER DOMUS (US) LLC, AS COLLATERAL AGENT
To: RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
Reel/Frame 058593/0108 →
TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENTS Recorded Dec 27, 2021
From: MORGAN STANLEY SENIOR FUNDING, INC., AS COLLATERAL AGENT
To: RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
Reel/Frame 058593/0046 →
SECURITY INTEREST Recorded Dec 10, 2021
From: RIVERBED TECHNOLOGY LLC (FORMERLY RIVERBED TECHNOLOGY, INC.); ATERNITY LLC
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS U.S. COLLATERAL AGENT
Reel/Frame 058486/0216 →
PATENT SECURITY AGREEMENT Recorded Oct 27, 2021
From: RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
To: WILMINGTON TRUST, NATIONAL ASSOCIATION
Reel/Frame 057943/0386 →
PATENT SECURITY AGREEMENT SUPPLEMENT - SECOND LIEN Recorded Oct 14, 2021
From: RIVERBED HOLDINGS, INC.; RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
To: ALTER DOMUS (US) LLC, AS COLLATERAL AGENT
Reel/Frame 057810/0559 →
PATENT SECURITY AGREEMENT SUPPLEMENT - FIRST LIEN Recorded Oct 14, 2021
From: RIVERBED HOLDINGS, INC.; RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
To: MORGAN STANLEY SENIOR FUNDING, INC., AS COLLATERAL AGENT
Reel/Frame 057810/0502 →
RELEASE OF SECURITY INTEREST IN PATENTS RECORED AT REEL 056397, FRAME 0750 Recorded Oct 13, 2021
From: MACQUARIE CAPITAL FUNDING LLC
To: RIVERBED HOLDINGS, INC.; RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
Reel/Frame 057983/0356 →
SECURITY INTEREST Recorded May 26, 2021
From: RIVERBED HOLDINGS, INC.; RIVERBED TECHNOLOGY, INC.; ATERNITY LLC
To: MACQUARIE CAPITAL FUNDING LLC
Reel/Frame 056397/0750 →
PATENT SECURITY AGREEMENT Recorded Mar 5, 2021
From: RIVERBED TECHNOLOGY, INC.
To: ALTER DOMUS (US) LLC, AS COLLATERAL AGENT
Reel/Frame 055514/0249 →
CORRECTIVE ASSIGNMENT TO CORRECT THE CONVEYING PARTY NAME PREVIOUSLY RECORDED ON REEL 035521 FRAME 0069. ASSIGNOR(S) HEREBY CONFIRMS THE RELEASE OF SECURITY INTEREST IN PATENTS. Recorded Jun 2, 2015
From: JPMORGAN CHASE BANK, N.A.
To: RIVERBED TECHNOLOGY, INC.
Reel/Frame 035807/0680 →
SECURITY INTEREST Recorded May 1, 2015
From: RIVERBED TECHNOLOGY, INC.
To: MORGAN STANLEY SENIOR FUNDING, INC., AS COLLATERAL AGENT
Reel/Frame 035561/0363 →
RELEASE OF SECURITY INTEREST IN PATENTS Recorded Apr 28, 2015
From: BARCLAYS BANK PLC
To: RIVERBED TECHNOLOGY, INC.
Reel/Frame 035521/0069 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 10, 2015
From: INFINETA, LLC
To: RIVERBED TECHNOLOGY, INC.
Reel/Frame 035124/0317 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 5, 2015
From: INFINETA SYSTEMS, INC.
To: INFINETA (ASSIGNMENT FOR THE BENEFIT OF CREDITORS), LLC
Reel/Frame 035093/0634 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 5, 2015
From: INFINETA (ASSIGNMENT FOR THE BENEFIT OF CREDITORS), LLC
To: RIVERBED TECHNOLOGY, INC.
Reel/Frame 035093/0888 →
RELEASE OF PATENT SECURITY INTEREST Recorded Dec 26, 2013
From: MORGAN STANLEY & CO. LLC, AS COLLATERAL AGENT
To: RIVERBED TECHNOLOGY, INC.
Reel/Frame 032113/0425 →
PATENT SECURITY AGREEMENT Recorded Sep 13, 2013
From: RIVERBED TECHNOLOGY, INC.
To: MORGAN STANLEY & CO. LLC
Reel/Frame 031216/0968 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 9, 2009
From: RAMARAO, KAREMPUDI V.; KANAYA, RAJ
To: INFINETA SYSTEMS, INC.
Reel/Frame 022937/0033 →