IP Library Granted Patent US 8,364,892
Granted Patent B2
US 8,364,892 · App. 12/013,363 · Granted Jan 29, 2013

Asynchronous and distributed storage of data

Inventors: Michael G. Hluchyj (Wellesley, MA); Santosh Krishnan (Wellesley, MA); Christopher Lawler (Wellesley, MA); Ganesh Pai (Lexington, MA); Umamaheswar Reddy (Marlborough, MA)
Assignee: Verivue, Inc.
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,364,892
App. No.
12/013,363
Granted
Jan 29, 2013
Kind
B2
Abstract

In one example, multimedia content is requested from a plurality of storage modules. Each storage module retrieves the requested parts, which are typically stored on a plurality of storage devices at each storage module. Each storage module determines independently when to retrieve the requested parts of the data file from storage and transmits those parts from storage to a data queue. Based on a capacity of a delivery module and/or the data rate associated with the request, each storage module transmits the parts of the data file to the delivery module. The delivery module generates a sequenced data segment from the parts of the data file received from the plurality of storage modules and transmits the sequenced data segment to the requester.

Claims (127)

1. A method associated with asynchronous and distributed storage of data, the method comprising:

receiving, at each storage module in a plurality of storage modules each comprising two or more storage devices, a data file request from a delivery module;

determining, at each of the storage modules, a start location for a part of a data file associated with the data file request;

determining independently, at each of the storage modules, a queue location within a scheduling queue associated with the respective storage module to associate with the data file request;

adding independently, at each of the storage modules, the part of the data file to a data queue associated with the respective storage module based on the queue location within the respective scheduling queue, a capacity of the data queue, a transmission rate associated with the data file, or any combination thereof;

determining independently, at each of the storage modules, a second start location for a second part of the data file associated with a second data file request;

determining independently, at each of the storage modules, a second queue location within the scheduling queue associated with the respective storage module;

adding independently, at each of the storage modules, the second part of the data file to the data queue associated with the respective storage module based on the second queue location within the scheduling queue associated with the respective storage module, the capacity of the data queue associated with the respective storage module, the transmission rate associated with the data file, or any combination thereof;

removing, at each of the storage modules, the parts of the data file within the data queue associated with the respective storage module based on the second data file request; and

removing, at the delivery module, a sequenced data stream based on the second data file request.

2. The method of claim 1 , further comprising removing, at a first storage module in the plurality of storage modules, the queue location from within the scheduling queue.

3. The method of claim 2 , further comprising:

determining, at the first storage module, a second queue location within the scheduling queue; and

adding, at the first storage module, the second part of the data file to the data queue based on the second queue location within the scheduling queue, the capacity of the data queue, the transmission rate associated with the data file, or any combination thereof.

4. The method of claim 3 , wherein the determining, at the first storage module, the second queue location within the scheduling queue further comprises determining, at the first storage module, the second queue location within the scheduling queue based on the first queue location.

5. The method of claim 1 , further comprising transmitting, at each of the storage modules, the part of the data file in the data queue based on a capacity of the delivery module, the transmission rate associated with the data file, a request from the delivery module, or any combination thereof.

6. The method of claim 1 , wherein the determining independently, at each of the storage modules, the queue location within the scheduling queue comprises determining independently, at each of the storage modules, the queue location within the scheduling queue based on the start location.

7. The method of claim 1 , further comprising:

receiving, at the delivery module, a plurality of parts of the data file from the plurality of storage modules; and

assembling the plurality of parts of the data file into a sequenced data segment.

8. The method of claim 7 , further comprising:

receiving, at the delivery module, a second plurality of parts of the data file or a second data file from the plurality of storage modules; and

assembling the second plurality of parts of the data file or the second data file into a second sequenced data segment.

9. The method of claim 1 , wherein the scheduling queue is a first scheduling queue, the queue location is a first queue location, and the method further comprising:

determining independently, at each of the storage modules, a second queue location within a second scheduling queue.

10. The method of claim 9 , wherein the first scheduling queue is associated with a different rate than the second scheduling queue.

11. The method of claim 1 , wherein the determining, at each of the storage modules, the start location for the part of the data file associated with the data file request further comprises determining, at each of the storage modules, the start location for the part of the data file associated with the data file request based on index information.

12. The method of claim 1 , further comprising storing, at a first storage device within a first storage module, the part of the data file and a second part of the data file in a same block within the first storage device.

13. The method of claim 1 , further comprising:

storing, at a first storage device within a first storage module, the part of the data file; and

storing, at a second storage device within the first storage module, a second part of the data file.

14. The method of claim 1 , further comprising:

storing, at a first storage device within a first storage module, the part of the data file; and

storing, at a second storage device within a second storage module, a second part of the data file.

15. The method of claim 1 , further comprising storing, at a first storage device within a first storage module, the part of the data file and a second part of a second data file in a same block within the first storage device, the part of the data file being different than and associated with the second part of the second data file.

16. The method of claim 1 , further comprising determining independently, at each of the storage modules, a plurality of queue locations within the scheduling queue for the data file request based on the start location, the capacity of the data queue, the transmission rate associated with the data file, or any combination thereof.

17. A computer program product, tangibly embodied in a non-transitory information carrier, the computer program product including instructions being operable to cause a data processing apparatus to:

receive, at each storage module in a plurality of storage modules each comprising two or more storage devices, a data file request from a delivery module;

determine, at each of the storage modules, a start location for a part of a data file associated with the data file request;

determine independently, at each of the storage modules, a queue location within a scheduling queue associated with the respective storage module to associate with the data file request;

add independently, at each of the storage modules, the part of the data file to a data queue associated with the respective storage module based on the queue location within the respective scheduling queue, a capacity of the data queue, a transmission rate associated with the data file, or any combination thereof;

determine independently, at each of the storage modules, a second start location for a second part of the data file associated with a second data file request;

determine independently, at each of the storage modules, a second queue location within the scheduling queue associated with the respective storage module;

add independently, at each of the storage modules, the second part of the data file to the data queue associated with the respective storage module based on the second queue location within the scheduling queue associated with the respective storage module, the capacity of the data queue associated with the respective storage module, the transmission rate associated with the data file, or any combination thereof;

remove, at each of the storage modules, the parts of the data file within the data queue associated with the respective storage module based on the second data file request; and

remove, at the delivery module, a sequenced data stream based on the second data file request.

18. A system associated with asynchronous and distributed storage of data, the system comprising:

a plurality of storage modules, each storage module comprising:

a delivery module;

a plurality of storage devices, each storage device configured to store a part of a data file; and

a storage controller module connected to each of the plurality of storage devices comprising:

a storage queue controller module configured to determine:

a queue location within a scheduling queue associated with the respective storage module to associate with a data file request from the delivery module, the scheduling queue being configured by each storage module independently, and

a second queue location within the scheduling queue, and

a storage device read controller module configured to:

determine a start location on one of the storage devices for a part of a data file associated with the data file request,

determine a second start location for a second part of the data file associated with a second data file request,

add the part of the data file to a data queue associated with the respective storage module based on a queue location within the scheduling queue associated with the respective storage module, a capacity of the data queue associated with the respective storage module, a transmission rate associated with the data file, or any combination thereof,

add the second part of the data file to the data queue associated with the respective storage module based on the second queue location within the scheduling queue associated with the respective storage module, the capacity of the data queue associated with the respective storage module, the transmission rate associated with the data file, or any combination thereof,

remove the parts of the data file within the data queue associated with the respective storage module based on the second data file request, and

remove, at the delivery module, a sequenced data stream based on the second data file request.

19. The system of claim 18 , wherein the delivery module is configured to receive a plurality of parts of the data file from the plurality of storage modules and assemble the plurality of parts of the data file into a sequenced data segment.

20. The system of claim 18 , further comprising substantially simultaneously reading data from a plurality of storage devices in a first storage module.

21. The system of claim 18 , wherein the storage controller module further comprises:

the storage queue controller further configured to determine a write queue location within the scheduling queue to associate with the data file request; and

a storage device write controller configured to:

receive a second part of the data file from an input data queue, and

store the second part of the data file in a storage device selected from the plurality of storage devices based on the write queue location within the scheduling queue, a capacity of the storage device, a data storage request associated with the data file, or any combination thereof.

22. A method associated with asynchronous and distributed storage of data, the method comprising:

receiving, at each storage module in a plurality of storage modules each comprising two or more storage devices, a data file request from a delivery module;

determining, at each of the storage modules, a start location for a part of a data file associated with the data file request;

determining independently, at each of the storage modules, a queue location within a scheduling queue associated with the respective storage module to associate with the data file request;

adding independently, at each of the storage modules, the part of the data file to a data queue associated with the respective storage module based on the queue location within the respective scheduling queue, a capacity of the data queue, a transmission rate associated with the data file, or any combination thereof;

storing, at a first storage device within a first storage module, the part of the data file and a second part of a second data file in a same block within the first storage device, the part of the data file being different than and associated with the second part of the second data file; and

determining an association between the part of the data file and the second part of the second data file, the association comprising a content program association, a program time association, or both, the part of the data file being associated with a first content program and the second part of the second data file being associated with a second content program.

23. The method of claim 22 , further comprising removing, at a first storage module in the plurality of storage modules, the queue location from within the scheduling queue.

24. The method of claim 23 , further comprising:

determining, at the first storage module, a second queue location within the scheduling queue associated with the respective storage module; and

adding, at the first storage module, the second part of the data file to the data queue based on the second queue location within the scheduling queue, the capacity of the data queue, the transmission rate associated with the data file, or any combination thereof.

25. The method of claim 24 , wherein the determining, at the first storage module, the second queue location within the scheduling queue associated with the respective storage module further comprises determining, at the first storage module, the second queue location within the scheduling queue associated with the respective storage module based on the first queue location.

26. The method of claim 22 , further comprising transmitting, at each of the storage modules, the part of the data file in the data queue based on a capacity of the delivery module, the transmission rate associated with the data file, a request from the delivery module, or any combination thereof.

27. The method of claim 22 , wherein the determining independently, at each of the storage modules, the queue location within the scheduling queue comprises determining independently, at each of the storage modules, the queue location within the scheduling queue based on the start location.

28. The method of claim 22 , further comprising:

receiving, at the delivery module, a plurality of parts of the data file from the plurality of storage modules; and

assembling the plurality of parts of the data file into a sequenced data segment.

29. The method of claim 28 , further comprising:

receiving, at the delivery module, a second plurality of parts of the data file or a second data file from the plurality of storage modules; and

assembling the second plurality of parts of the data file or the second data file into a second sequenced data segment.

30. The method of claim 22 , wherein the scheduling queue is a first scheduling queue, the queue location is a first queue location, and the method further comprising:

determining independently, at each of the storage modules, a second queue location within a second scheduling queue.

31. The method of claim 30 , wherein the first scheduling queue is associated with a different rate than the second scheduling queue.

32. The method of claim 22 , further comprising:

determining independently, at each of the storage modules, a second start location for a second part of the data file associated with a second data file request;

determining independently, at each of the storage modules, a second queue location within the scheduling queue associated with the respective storage module; and

adding independently, at each of the storage modules, the second part of the data file to the data queue associated with the respective storage module based on the second queue location within the scheduling queue associated with the respective storage module, the capacity of the data queue associated with the respective storage module, the transmission rate associated with the data file, or any combination thereof.

33. The method of claim 32 , further comprising:

removing, at each of the storage modules, the parts of the data file within the data queue based on the second data file request; and

removing, at the delivery module, a sequenced data stream based on the second data file request.

34. The method of claim 22 , wherein the determining, at each of the storage modules, the start location for the part of the data file associated with the data file request further comprises determining, at each of the storage modules, the start location for the part of the data file associated with the data file request based on index information.

35. The method of claim 22 , further comprising storing, at a first storage device within a first storage module, the part of the data file and a second part of the data file in a same block within the first storage device.

36. The method of claim 22 , further comprising:

storing, at a first storage device within a first storage module, the part of the data file; and

storing, at a second storage device within the first storage module, a second part of the data file.

37. The method of claim 22 , further comprising:

storing, at a first storage device within a first storage module, the part of the data file; and

storing, at a second storage device within a second storage module, a second part of the data file.

38. The method of claim 22 , further comprising determining independently, at each of the storage modules, a plurality of queue locations within the scheduling queue for the data file request based on the start location, the capacity of the data queue, the transmission rate associated with the data file, or any combination thereof.

39. A computer program product, tangibly embodied in a non-transitory information carrier, the computer program product including instructions being operable to cause a data processing apparatus to:

receive, at each storage module in a plurality of storage modules each comprising two or more storage devices, a data file request from a delivery module;

determine, at each of the storage modules, a start location for a part of a data file associated with the data file request;

determine independently, at each of the storage modules, a queue location within a scheduling queue associated with the respective storage module to associate with the data file request;

add independently, at each of the storage modules, the part of the data file to a data queue associated with the respective storage module based on the queue location within the respective scheduling queue, a capacity of the data queue, a transmission rate associated with the data file, or any combination thereof;

store, at a first storage device within a first storage module, the part of the data file and a second part of a second data file in a same block within the first storage device, the part of the data file being different than and associated with the second part of the second data file; and

determine an association between the part of the data file and the second part of the second data file, the association comprising a content program association, a program time association, or both, the part of the data file being associated with a first content program and the second part of the second data file being associated with a second content program.

40. A system associated with asynchronous and distributed storage of data, the system comprising:

a plurality of storage modules, each storage module comprising:

a delivery module;

a plurality of storage devices, each storage device configured to store a part of a data file; and

a storage controller module connected to each of the plurality of storage devices comprising:

a storage queue controller module configured to determine:

a queue location within a scheduling queue associated with the respective storage module to associate with a data file request from the delivery module, the scheduling queue being configured by each storage module independently, and

a storage device read controller module configured to:

determine a start location on one of the storage devices for a part of a data file associated with the data file request,

add the part of the data file to a data queue associated with the respective storage module based on a queue location within the scheduling queue associated with the respective storage module, a capacity of the data queue, a transmission rate associated with the data file, or any combination thereof, and

a storage device write controller configured to:

store, at a storage device selected from the plurality of storage devices, the part of the data file and a second part of a second data file in a same block within the storage device, the part of the data file being different than and associated with the second part of the second data file, and

determine an association between the part of the data file and the second part of the second data file, the association comprising a content program association, a program time association, or both, the part of the data file being associated with a first content program and the second part of the second data file being associated with a second content program.

Assignments (3)
MERGER Recorded May 8, 2013
From: VERIVUE, INC.
To: AKAMAI TECHNOLOGIES, INC.
Reel/Frame 030370/0798 →
CHANGE OF NAME Recorded Feb 3, 2009
From: VERIVUE, INC.
To: VERIVUE, INC.
Reel/Frame 022194/0321 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 23, 2008
From: HLUCHYJ, MICHAEL G.; KRISHNAN, SANTOSH; LAWLER, CHRISTOPHER; PAI, GANESH; REDDY, UMA
To: VERIVUE, INC.
Reel/Frame 020400/0802 →
Continuity (1)
Related Publication 20090182939A1 · Jul 16, 2009