IP Library Granted Patent US 8,005,861
Granted Patent B2
US 8,005,861 · App. 11/824,592 · Granted Aug 23, 2011

Cluster storage using subsegmenting for efficient storage

Assignee: EMC 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 8,005,861
App. No.
11/824,592
Filed
Jun 29, 2007
Granted
Aug 23, 2011
Kind
B2
Art Unit
2163
USPC
707/204
Abstract

Cluster storage is disclosed. A data stream or a data block is received. The data stream or the data block is broken into segments. For each segment, a cluster node is selected, and a portion of the segment smaller than the segment is identified that is a duplicate of a portion of a segment already managed by the cluster node.

Claims (70)

1. A method for cluster storage comprising:

receiving a data stream or a data block;

breaking the data stream or the data block into segments, wherein breaking the data stream or the data block into segments is based at least in part on a value of a function calculated for a plurality of windows of bytes within the data stream or the data block; and

for each segment from the data stream or the data block:

selecting a cluster node, wherein the cluster node comprises an index that stores an indication of a set of segments stored on and managed by the cluster node, and wherein a cluster comprises a plurality of nodes, wherein each node comprises a data storage system that stores data by storing segments that are deduplicated; and

determining whether a portion of the segment from the data stream or the data block smaller than the segment is a duplicate of a portion of a segment already managed by the cluster node;

in the event that the portion of the segment from the data stream or the data block smaller than the segment is a duplicate of the portion of the segment already managed by the cluster node, storing a reference to the portion of the segment already managed by the cluster node that is used later to reconstruct the segment; and

in the event that the portion of the segment from the data stream or the data block smaller than the segment is not a duplicate of the portion of the segment already managed by the cluster node, newly storing the portion of the segment and a reference to the newly stored portion of the segment that is used later to reconstruct the segment.

2. A method as in claim 1 , further comprising storing the segment using one or more of the following: a representation of the portion of the segment and segment data that is not a duplicate of previously stored data.

3. A method as in claim 1 , wherein managing a segment includes one or more of the following: enabling finding duplicates for portions of the segment within other segments being managed and storing a deduplicated representation of the segment.

4. A method as in claim 1 , wherein the cluster node manages a portion of the segments stored in the cluster.

5. A method as in claim 1 , wherein identifying whether a portion of the segment smaller than the segment is a duplicate of a portion of a segment already managed by the cluster node includes breaking the segment into a plurality of subsegments and identifying a subsegment that has already been stored.

6. A method as in claim 1 , wherein a subsegment is stored on more than one node so that subsegments can be read sequentially.

7. A method as in claim 1 , wherein a subsegment reference is stored on more than one node so that subsegment references can be read sequentially.

8. A method as in claim 1 , wherein breaking the data stream or the data block into segments is based at least in part on one or more of the following: content of the data stream or the data block and file boundaries within the data stream or the data block.

9. A method as in claim 1 , wherein breaking the data stream or the data block into segments is based at least in part on an anchoring function, wherein the anchoring function includes one or more of the following: determining if the computed hash meets one or more predetermined criteria, using a value of a function calculated for a plurality of windows within a segmentation window, and establishing a boundary in an algorithmic manner in or around a sliding window of bytes.

10. A method as in claim 1 , wherein breaking the data stream or the data block into segments comprises identifying a plurality of subsegments, wherein the plurality of subsegments are contiguous or overlapping, and grouping the plurality of subsegments into segments.

11. A method as in claim 10 , wherein identifying the plurality of subsegments comprises identifying the plurality of subsegments within a window and selecting a boundary based at least in part on a hash value of a predetermined number of bytes of each of the plurality of subsegments.

12. A method as in claim 11 , wherein the boundary is selected based on one or more of the following: a maximum hash value of each of the plurality of subsegments and on a minimum hash value of each of the plurality of subsegments.

13. A method as in claim 10 , wherein identifying the plurality of subsegments is based at least in part on the data stream or the data block content.

14. A method as in claim 10 , wherein identifying the plurality of subsegments includes one or more of the following: calculating a function which meets a predetermined condition to select a boundary, selecting a boundary using anchors, selecting a boundary based at least in part on a minimum value or a maximum value of a function within a window.

15. A method as in claim 1 , wherein selecting the cluster node is based at least in part on one or more of the following: a hash of at least a portion of a content of the segment, a sketch of the segment, a content tag associated with the segment, at least a portion of a content of the segment, and the cluster node's remaining storage capacity.

16. A method as in claim 1 , further comprising storing one or more tags associated with the segment.

17. A method as in claim 15 , wherein the one or more tags include one or more fingerprints.

18. A method as in claim 1 , wherein a plurality of tags associated with a plurality of segments are stored together on a cluster node.

19. A method as in claim 1 , wherein a plurality of tags associated with a plurality of subsegments are stored together on a cluster node.

20. A method as in claim 1 , wherein identifying a portion of the segment smaller than the segment that is a duplicate of a portion of a segment already managed by the cluster node includes identifying one or more previously stored similar segments and determining if an already stored portion of the one or more previously stored similar segments is a duplicate of the portion of the segment.

21. A method as in claim 20 , wherein the one or more previously stored similar segments is identified using a tag of the segment.

22. A method as in claim 1 , wherein the cluster node includes a summary data structure that is used in the process of assigning a segment to a cluster node.

23. A method as in claim 1 , wherein selecting the cluster node is based at least in part on one or more of the following: one or more segments that are already stored on the node, one or more similar segments already managed by the node, and one or more identical subsegments already managed by the node.

24. A system for cluster storage comprising:

a processor configured to:

receive a data stream or a data block;

break the data stream or the data block into segments, wherein breaking the data stream or the data block into segments is based at least in part on a value of a function calculated for a plurality of windows of bytes within the data stream or the data block; and

for each segment from the data stream or the data block:

select a cluster node, wherein the cluster node comprises an index that stores an indication of a set of segments stored on and managed by the cluster node, and wherein a cluster comprises a plurality of nodes, wherein each node comprises a data storage system that stores data by storing segments that are deduplicated; and

determining whether a portion of the segment from the data stream or the data block smaller than the segment is a duplicate of a portion of a segment already managed by the cluster node;

in the event that the portion of the segment from the data stream or the data block smaller than the segment is a duplicate of the portion of the segment already managed by the cluster node, storing a reference to the portion of the segment already managed by the cluster node that is used later to reconstruct the segment; and

in the event that the portion of the segment from the data stream or the data block smaller than the segment is not a duplicate of the portion of the segment already managed by the cluster node, newly storing the portion of the segment and a reference to the newly stored portion of the segment that is used later to reconstruct the segment; and

a memory coupled with the processor, wherein the memory is configured to provide the processor with instructions.

25. A computer program product for cluster storage, the computer program product being embodied in a computer readable medium and comprising computer instructions for:

receiving a data stream or a data block;

breaking the data stream or the data block into segments, wherein breaking the data stream or the data block into segments is based at least in part on a value of a function calculated for a plurality of windows of bytes within the data stream or the data block; and

for each segment from the data stream or the data block:

selecting a cluster node, wherein the cluster node comprises an index that stores an indication of a set of segments stored on and managed by the cluster node, and wherein a cluster comprises a plurality of nodes, wherein each node comprises a data storage system that stores data by storing segments that are deduplicated; and

determining whether a portion of the segment from the data stream or the data block smaller than the segment is a duplicate of a portion of a segment already managed by the cluster node;

in the event that the portion of the segment from the data stream or the data block smaller than the segment is a duplicate of the portion of the segment already managed by the cluster node, storing a reference to the portion of the segment already managed by the cluster node that is used later to reconstruct the segment; and

in the event that the portion of the segment from the data stream or the data block smaller than the segment is not a duplicate of the portion of the segment already managed by the cluster node, newly storing the portion of the segment and a reference to the newly stored portion of the segment that is used later to reconstruct the segment.

26. A system as in claim 24 , wherein the processor is further configured to store the segment using one or more of the following: a representation of the portion of the segment and segment data that is not a duplicate of previously stored data.

27. A system as in claim 24 , wherein managing a segment includes one or more of the following: enabling finding duplicates for portions of the segment within other segments being managed and storing a deduplicated representation of the segment.

28. A system as in claim 24 , wherein the cluster node manages a portion of the segments stored in the cluster.

29. A system as in claim 24 , wherein identifying whether a portion of the segment smaller than the segment is a duplicate of a portion of a segment already managed by the cluster node includes breaking the segment into a plurality of subsegments and identifying a subsegment that has already been stored.

30. A system as in claim 24 , wherein a subsegment is stored on more than one node so that subsegments can be read sequentially.

31. A system as in claim 24 , wherein a subsegment reference is stored on more than one node so that subsegment references can be read sequentially.

32. A system as in claim 24 , wherein breaking the data stream or the data block into segments is based at least in part on one or more of the following: content of the data stream or the data block and file boundaries within the data stream or the data block.

33. A system as in claim 24 , breaking the data stream or the data block into segments is based at least in part on an anchoring function, wherein the anchoring function includes one or more of the following: determining if the computed hash meets one or more predetermined criteria, using a value of a function calculated for a plurality of windows within a segmentation window, and establishing a boundary in an algorithmic manner in or around a sliding window of bytes.

34. A system as in claim 24 , wherein breaking the data stream or the data block into segments comprises identifying a plurality of subsegments, wherein the plurality of subsegments are contiguous or overlapping, and grouping the plurality of subsegments into segments.

35. A system as in claim 34 , wherein identifying the plurality of subsegments comprises identifying the plurality of subsegments within a window and selecting a boundary based at least in part on a hash value of a predetermined number of bytes of each of the plurality of subsegments.

36. A system as in claim 34 , wherein the boundary is selected based on one or more of the following: a maximum hash value of each of the plurality of subsegments and on a minimum hash value of each of the plurality of subsegments.

37. A system as in claim 34 , wherein identifying the plurality of subsegments is based at least in part on the data stream or the data block content.

38. A system as in claim 34 , wherein identifying the plurality of subsegments includes one or more of the following: calculating a function which meets a predetermined condition to select a boundary, selecting a boundary using anchors, selecting a boundary based at least in part on a minimum value or a maximum value of a function within a window.

39. A system as in claim 24 , wherein selecting the cluster node is based at least in part on one or more of the following: a hash of at least a portion of a content of the segment, a sketch of the segment, a content tag associated with the segment, at least a portion of a content of the segment, and the cluster node's remaining storage capacity.

40. A system as in claim 24 , further comprising storing one or more tags associated with the segment.

41. A system as in claim 40 , wherein the one or more tags include one or more fingerprints.

42. A system as in claim 24 , wherein a plurality of tags associated with a plurality of segments are stored together on a cluster node.

43. A system as in claim 24 , wherein a plurality of tags associated with a plurality of subsegments are stored together on a cluster node.

44. A system as in claim 24 , wherein identifying a portion of the segment smaller than the segment that is a duplicate of a portion of a segment already managed by the cluster node includes identifying one or more previously stored similar segments and determining if an already stored portion of the one or more previously stored similar segments is a duplicate of the portion of the segment.

45. A system as in claim 44 , wherein the one or more previously stored similar segments is identified using a tag of the segment.

46. A system as in claim 24 , wherein the cluster node includes a summary data structure that is used in the process of assigning a segment to a cluster node.

47. A system as in claim 24 , wherein selecting the cluster node is based at least in part on one or more of the following: one or more segments that are already stored on the node, one or more similar segments already managed by the node, and one or more identical subsegments already managed by the node.

Assignments (13)
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (053546/0001) Recorded Jun 23, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL MARKETING L.P. (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO CREDANT TECHNOLOGIES, INC.); DELL INTERNATIONAL L.L.C.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; DELL MARKETING CORPORATION (SUCCESSOR-IN-INTEREST TO FORCE10 NETWORKS, INC. AND WYSE TECHNOLOGY L.L.C.); EMC IP HOLDING COMPANY LLC
Reel/Frame 071642/0001 →
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (045455/0001) Recorded May 20, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL MARKETING CORPORATION (SUCCESSOR-IN-INTEREST TO ASAP SOFTWARE EXPRESS, INC.); DELL MARKETING L.P. (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO CREDANT TECHNOLOGIES, INC.); DELL USA L.P.; DELL INTERNATIONAL L.L.C.; DELL PRODUCTS L.P.; DELL MARKETING CORPORATION (SUCCESSOR-IN-INTEREST TO FORCE10 NETWORKS, INC. AND WYSE TECHNOLOGY L.L.C.); EMC CORPORATION (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO MAGINATICS LLC); EMC IP HOLDING COMPANY LLC (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO MOZY, INC.); SCALEIO LLC
Reel/Frame 061753/0001 →
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (040136/0001) Recorded Apr 26, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL MARKETING CORPORATION (SUCCESSOR-IN-INTEREST TO ASAP SOFTWARE EXPRESS, INC.); DELL MARKETING L.P. (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO CREDANT TECHNOLOGIES, INC.); DELL USA L.P.; DELL INTERNATIONAL L.L.C.; DELL PRODUCTS L.P.; DELL MARKETING CORPORATION (SUCCESSOR-IN-INTEREST TO FORCE10 NETWORKS, INC. AND WYSE TECHNOLOGY L.L.C.); EMC CORPORATION (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO MAGINATICS LLC); EMC IP HOLDING COMPANY LLC (ON BEHALF OF ITSELF AND AS SUCCESSOR-IN-INTEREST TO MOZY, INC.); SCALEIO LLC
Reel/Frame 061324/0001 →
RELEASE OF SECURITY INTEREST Recorded Nov 3, 2021
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH
To: ASAP SOFTWARE EXPRESS, INC.; AVENTAIL LLC; CREDANT TECHNOLOGIES, INC.; DELL USA L.P.; DELL INTERNATIONAL, L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL SOFTWARE INC.; DELL SYSTEMS CORPORATION; EMC CORPORATION; EMC IP HOLDING COMPANY LLC; FORCE10 NETWORKS, INC.; MAGINATICS LLC; MOZY, INC.; SCALEIO LLC; WYSE TECHNOLOGY L.L.C.
Reel/Frame 058216/0001 →
SECURITY AGREEMENT Recorded Apr 22, 2020
From: CREDANT TECHNOLOGIES INC.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; FORCE10 NETWORKS, INC.; WYSE TECHNOLOGY L.L.C.; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A.
Reel/Frame 053546/0001 →
SECURITY AGREEMENT Recorded Mar 21, 2019
From: CREDANT TECHNOLOGIES, INC.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL USA L.P.; EMC CORPORATION; FORCE10 NETWORKS, INC.; WYSE TECHNOLOGY L.L.C.; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A.
Reel/Frame 049452/0223 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Sep 29, 2016
From: EMC CORPORATION
To: EMC IP HOLDING COMPANY LLC
Reel/Frame 040203/0001 →
SECURITY AGREEMENT Recorded Sep 21, 2016
From: ASAP SOFTWARE EXPRESS, INC.; AVENTAIL LLC; CREDANT TECHNOLOGIES, INC.; DELL USA L.P.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL SOFTWARE INC.; DELL SYSTEMS CORPORATION; EMC CORPORATION; EMC IP HOLDING COMPANY LLC; FORCE10 NETWORKS, INC.; MAGINATICS LLC; MOZY, INC.; SCALEIO LLC; SPANNING CLOUD APPS LLC; WYSE TECHNOLOGY L.L.C.
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
Reel/Frame 040136/0001 →
SECURITY AGREEMENT Recorded Sep 21, 2016
From: ASAP SOFTWARE EXPRESS, INC.; AVENTAIL LLC; CREDANT TECHNOLOGIES, INC.; DELL USA L.P.; DELL INTERNATIONAL L.L.C.; DELL MARKETING L.P.; DELL PRODUCTS L.P.; DELL SOFTWARE INC.; DELL SYSTEMS CORPORATION; EMC CORPORATION; EMC IP HOLDING COMPANY LLC; FORCE10 NETWORKS, INC.; MAGINATICS LLC; MOZY, INC.; SCALEIO LLC; SPANNING CLOUD APPS LLC; WYSE TECHNOLOGY L.L.C.
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH, AS COLLATERAL AGENT
Reel/Frame 040134/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 9, 2010
From: DATA DOMAIN HOLDING, INC.
To: EMC CORPORATION
Reel/Frame 024062/0079 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 2, 2010
From: DATA DOMAIN LLC
To: DATA DOMAIN HOLDING, INC.
Reel/Frame 024018/0140 →
CONVERSION Recorded Feb 25, 2010
From: DATA DOMAIN, INC.
To: DATA DOMAIN LLC
Reel/Frame 023994/0178 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 12, 2007
From: REDDY, SAZZALA; MAHESHWARI, UMESH; LEE, EDWARD K.; PATTERSON, R. HUGO
To: DATA DOMAIN, INC.
Reel/Frame 019957/0898 →
Continuity (4)
Provisional Application 60925514 · Apr 19, 2007
Provisional Application 60923066 · Apr 11, 2007
Provisional Application 60922996 · Apr 11, 2007
Related Publication 20080256143A1 · Oct 16, 2008