IP Library Granted Patent US 9,819,447
Granted Patent B2
US 9,819,447 · App. 15/017,991 · Granted Nov 14, 2017

Storing a data stream in a set of storage devices

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 9,819,447
App. No.
15/017,991
Granted
Nov 14, 2017
Kind
B2
Abstract

A method includes generating, by execution units, a plurality of sets of a decode threshold number of encoded data slices from data streams. A first execution unit produces a first encoded data slice for each set of the plurality of sets of the decode threshold number of encoded data slices from a first data stream. The method further includes generating, by at least some of the execution units, a plurality of sets of partially encoded data slices from the plurality of a sets of a decode number of encoded data slices. When partially encoded data slices are processed, the processed partially encoded data slices represent redundancy encoded data slices. The decode threshold number of encoded data slices combined with the redundancy encoded data slices forms a full set of encoded data slices. The method further includes sending the partially encoded data slices to other execution units for storage therein.

Claims (72)

1. A method comprises:

generating, by a plurality of execution units of a dispersed storage network (DSN), a plurality of sets of a decode threshold number of encoded data slices from a plurality of data streams, wherein a first execution unit of the plurality of execution units produces a first encoded data slice for each set of the plurality of sets of the decode threshold number of encoded data slices from a first data stream of the plurality of data streams, and wherein, for a set of the plurality of sets of the decode threshold number of encoded data slices, the decode threshold number of encoded data slices is required to recover corresponding data segments of each of the plurality of data streams;

generating, by at least some of the plurality of execution units, a plurality of sets of partially encoded data slices from the plurality of a sets of a decode number of encoded data slices, wherein, when partially encoded data slices of a set of the plurality of sets of partially encoded data slices are processed, the processed partially encoded data slices represent redundancy encoded data slices, wherein the decode threshold number of encoded data slices of the set of the plurality of sets of the decode threshold number of encoded data slices combined with the redundancy encoded data slices forms a full set of encoded data slices for the corresponding data segment; and

sending, by the at least some of the plurality of execution units, the plurality of sets of partially encoded data slices to a set of execution units for storage therein.

2. The method of claim 1 further comprises:

determining, by the plurality of execution units, a common source name for the plurality of sets of the decode threshold number of encoded data slices;

generating, by the plurality of execution units, a plurality of sets of slice names for the plurality of sets of the decode threshold number of encoded data slices to include the common source name; and

generating, by the at least some of the plurality of execution units, another plurality of sets of slices names for the plurality of sets of partially encoded data slices to include the common source name.

3. The method of claim 2 further comprises:

updating a directory to associate data stream identifiers, the common source name, and ranges of slice names of the plurality of sets of slices names and the other plurality of slices names.

4. The method of claim 1 further comprises:

determining, by the plurality of execution units, a first common source name for a first portion of the plurality of sets of the decode threshold number of encoded data slices; and

determining, by the plurality of execution units, a second common source name for a second portion of the plurality of sets of the decode threshold number of encoded data slices.

5. The method of claim 1 further comprises:

receiving the plurality of data streams further by one of:

dividing a large data stream into the plurality of data streams; and

receiving the plurality of data streams from a plurality of related data sources.

6. The method of claim 1 , wherein generating a partial encoded data slice of the plurality of sets of partial encoded data slices comprises:

obtaining, by an execution unit of the at least some of the plurality of execution units, an encoding matrix used in the generating of the plurality of sets of the decode threshold number of encoded data slices;

reducing, by the execution unit, the encoding matrix to a square matrix that includes rows corresponding to the decode threshold number of encoded data slices;

inverting, by the execution unit, the square matrix to produce an inverted matrix;

matrix multiplying, by the execution unit, the inverted matrix by a corresponding one of the decode threshold number of encoded data slices to produce a data vector; and

matrix multiplying, by the execution unit, the data vector with a row of the encoding matrix that corresponds to the corresponding one of the decode threshold number of encoded data slices to produce the partial encoded data slice.

7. The method of claim 1 further comprises:

dividing, by the first execution unit, the first data stream into a plurality of first data segments;

generating, by the first execution unit, a first data matrix to include a row of the plurality of first data segments;

matrix multiplying, by the first execution unit, the first data matrix with an encoding matrix to produce a first encoded matrix, wherein the first encoded data slice for each set of the plurality of sets of the decode threshold number of encoded data slices corresponds to data block of the first encoded matrix; and

storing, by the first execution unit, the first encoded data slice for each set of the plurality of sets of the decode threshold number of encoded data slices.

8. The method of claim 7 further comprises:

dividing, by a second execution unit of the plurality of execution units, a second data stream of the plurality of data streams into a plurality of second data segments;

generating, by the second execution unit, a second data matrix to include a row of the plurality of second data segments;

matrix multiplying, by the second execution unit, the second data matrix with the encoding matrix to produce a second encoded matrix, wherein second encoded data slice for each set of the plurality of sets of the decode threshold number of encoded data slices corresponds to data block of the second encoded matrix; and

storing, by the second execution unit, the second encoded data slice for each set of the plurality of sets of the decode threshold number of encoded data slices.

9. A dispersed storage system comprises:

a first module in execution units of a plurality of execution units, operable to cause the plurality of execution units to:

generate a plurality of sets of a decode threshold number of encoded data slices from a plurality of data streams, wherein a first execution unit of the plurality of execution units produces a first encoded data slice for each set of the plurality of sets of the decode threshold number of encoded data slices from a first data stream of the plurality of data streams, and wherein, for a set of the plurality of sets of the decode threshold number of encoded data slices, the decode threshold number of encoded data slices is required to recover corresponding data segments of each of the plurality of data streams;

a second module that, when operable in at least some of the plurality of execution units, causes the at least some of the plurality of execution units to:

generate a plurality of sets of partially encoded data slices from the plurality of a sets of a decode number of encoded data slices, wherein, when partially encoded data slices of a set of the plurality of sets of partially encoded data slices are processed, the processed partially encoded data slices represent redundancy encoded data slices, wherein the decode threshold number of encoded data slices of the set of the plurality of sets of the decode threshold number of encoded data slices combined with the redundancy encoded data slices forms a full set of encoded data slices for the corresponding data segment; and

a third module that, when operable in the at least some of the plurality of execution units, causes the at least some of the plurality of execution units to:

send the plurality of sets of partially encoded data slices to a set of execution units for storage therein.

10. The dispersed storage system of claim 9 further comprises:

a fourth module that, when operable in the plurality of execution units, causes the plurality of execution units to:

determine a common source name for the plurality of sets of the decode threshold number of encoded data slices;

generate a plurality of sets of slice names for the plurality of sets of the decode threshold number of encoded data slices to include the common source name; and

generate another plurality of sets of slices names for the plurality of sets of partially encoded data slices to include the common source name.

11. The dispersed storage system of claim 10 , wherein the fourth module that, when operable in the plurality of execution units, further causes the plurality of execution units to:

update a directory to associate data stream identifiers, the common source name, and ranges of slice names of the plurality of sets of slices names and the other plurality of slices names.

12. The dispersed storage system of claim 10 , wherein the first module that, when operable in the first execution unit, further causes the first execution unit to:

divide the first data stream into a plurality of first data segments;

generate a first data matrix to include a row of the plurality of first data segments;

matrix multiply the first data matrix with an encoding matrix to produce a first encoded matrix, wherein the first encoded data slice for each set of the plurality of sets of the decode threshold number of encoded data slices corresponds to data block of the first encoded matrix; and

store the first encoded data slice for each set of the plurality of sets of the decode threshold number of encoded data slices.

13. The dispersed storage system of claim 12 , wherein the first module that, when operable in a second execution unit of the plurality of execution units, further causes the second execution unit to:

divide a second data stream of the plurality of data streams into a plurality of second data segments;

generate a second data matrix to include a row of the plurality of second data segments;

matrix multiply the second data matrix with the encoding matrix to produce a second encoded matrix, wherein second encoded data slice for each set of the plurality of sets of the decode threshold number of encoded data slices corresponds to data block of the second encoded matrix; and

store the second encoded data slice for each set of the plurality of sets of the decode threshold number of encoded data slices.

14. The dispersed storage system of claim 9 further comprises:

a fourth module that, when operable in the plurality of execution units, causes the plurality of execution units to:

determine a first common source name for a first portion of the plurality of sets of the decode threshold number of encoded data slices; and

determine a second common source name for a second portion of the plurality of sets of the decode threshold number of encoded data slices.

15. The dispersed storage system of claim 9 further comprises:

a fourth module that, when operable in the plurality of execution units, causes the plurality of execution units to:

receive the plurality of data streams further by one of:

dividing a large data stream into the plurality of data streams; and

receiving the plurality of data streams from a plurality of related data sources.

16. The dispersed storage system of claim 9 , wherein the third module that, when operable in an execution unit of the at least some of the plurality of execution units, further causes the execution unit to generate the partial encoded data slice of the plurality of sets of partial encoded data slices by:

obtaining an encoding matrix used in the generating of the plurality of sets of the decode threshold number of encoded data slices;

reducing the encoding matrix to a square matrix that includes rows corresponding to the decode threshold number of encoded data slices;

inverting the square matrix to produce an inverted matrix;

matrix multiplying the inverted matrix by a corresponding one of the decode threshold number of encoded data slices to produce a data vector; and

matrix multiplying the data vector with a row of the encoding matrix that corresponds to the corresponding one of the decode threshold number of encoded data slices to produce the partial encoded data slice.

Assignments (6)
TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS Recorded Jun 11, 2025
From: BARCLAYS BANK PLC, AS ADMINISTRATIVE AGENT
To: PURE STORAGE, INC.
Reel/Frame 071558/0523 →
SECURITY INTEREST Recorded Aug 26, 2020
From: PURE STORAGE, INC.
To: BARCLAYS BANK PLC AS ADMINISTRATIVE AGENT
Reel/Frame 053867/0581 →
CORRECTIVE ASSIGNMENT TO CORRECT THE 9992063 AND 10334045 LISTED IN ERROR PREVIOUSLY RECORDED ON REEL 049556 FRAME 0012. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNOR HEREBY CONFIRMS THE ASSIGNMENT. Recorded Jan 14, 2020
From: INTERNATIONAL BUSINESS MACHINES CORPORATION
To: PURE STORAGE, INC.
Reel/Frame 052205/0705 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 21, 2019
From: INTERNATIONAL BUSINESS MACHINES CORPORATION
To: PURE STORAGE, INC.
Reel/Frame 049556/0012 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 6, 2016
From: CLEVERSAFE, INC.
To: INTERNATIONAL BUSINESS MACHINES CORPORATION
Reel/Frame 038629/0015 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 25, 2016
From: GLADWIN, S. CHRISTOPHER; MARKISON, TIMOTHY W.; DHUSE, GREG; SHIRLEY, THOMAS FRANKLIN, JR.; LEGGETTE, WESLEY; RESCH, JASON K.; GRUBE, GARY W.
To: CLEVERSAFE, INC.
Reel/Frame 037832/0384 →