IP Library Granted Patent US 8,219,562
Granted Patent B1
US 8,219,562 · App. 12/620,359 · Granted Jul 10, 2012

Efficient storage and retrieval for large number of data objects

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,219,562
App. No.
12/620,359
Granted
Jul 10, 2012
Kind
B1
Abstract

A data object management scheme for storing a large plurality of small data objects (e.g., image files) in small number of large object stack file for storage in secondary storage (e.g., hard disks). By storing many individual data objects in a single object stack file, the number of files stored in the secondary storage is reduced by several orders of magnitude, from the billions or millions to the hundreds or so. Index data for each object stack file is generated and stored in primary storage to allow efficient and prompt access to the data objects. Requests to store or retrieve the data objects are made using HTTP messages including file identifiers that identify the files storing the data objects and keys identifying the data objects. A file server stores or retrieves the data object from secondary storage of a file server without converting the requests to NSF or POSIX commands.

Claims (57)

1. A computer-implemented method for storing data, the method comprising:

receiving requests to store a plurality of data objects in a storage system, the storage system having a primary storage and a secondary storage;

adding a data object to one of a plurality of files in the secondary storage, the file storing the plurality of data objects;

generating index data including an offset location of each data object and a size of each data object that is stored in the file in the secondary storage;

storing the index data in the primary storage for locating data objects in the file in the secondary storage;

generating, for each data object, a plurality of versions of a data object, each version of the data object having a different size; and

assigning a same first key to each version of the same data object and assigning a different second key to each version of the data object, the first key and the second key stored in the index data to locate the offset location and the size of the data object.

2. The method of claim 1 , wherein each request to store comprises a file identifier indicating the file in which to store the data object, and a data object to be stored.

3. The method of claim 2 , wherein each request to store further comprises a key identifying the data object, wherein the index data indexes the offset location and the size of each data object based on the key.

4. The method of claim 1 , further comprising:

receiving a request to retrieve the stored data object in the secondary storage, the request to retrieve including a file identifier indicating the file storing the data object and a key identifying the requested data object;

determining a file storing the requested data object based on the file identifier;

searching the index data for an offset location and a size of the data object based on the key; and

retrieving the data object from the file based on the offset location and the size of the data object from the index data.

5. The method of claim 1 , further comprising:

assigning values in flag fields associated with the plurality of data objects;

deleting a data object by modifying a flag field associated with the data object being deleted; and

compacting the file including the deleted data object by copying data objects that are not deleted into an updated file.

6. The method of claim 1 , wherein each of the plurality of data objects is included in a data container for storing in one of the plurality of files, each data container further comprising metadata associated with each of the plurality of data objects.

7. A file server for storing data, the storage system including primary storage and secondary storage, comprising:

a communication module configured to receive requests to store a plurality of data objects for storage in a storage system, the storage system having a primary storage and a secondary storage;

a content manager configured to generate, for each data object, a plurality of versions of a data object, each version of the data object having a different size;

an object stack manager configured to:

add a data object to one of a plurality of files in the secondary storage, the file storing the plurality of data objects;

generate index data representing an offset location of each of the plurality of data objects and a size of each data object that is stored in the file in the secondary storage; and

assign a same first key to each version of the same data object and assign a different second key to each version of the data object, the first key and the second key stored in the index data to locate the offset location and the size of a data container storing versions of the data object; and

primary storage configured to store the index data for locating data objects in the file in the secondary storage.

8. The file server of claim 7 , wherein each request to store comprises a file identifier indicating the file in which to store the data object, and a data object to be stored.

9. The file server of claim 8 , wherein each request to store further comprises a key identifying the data object, wherein the index data indexes the offset location and the size of each data object based on the key.

10. The file server of claim 7 , wherein:

the communication module is further configure to receive a request to retrieve the stored data object in the secondary storage, the request to retrieve including a file identifier indicating the file storing the data object and a key identifying the requested data object; and

the object stack manager is further configured to:

determine a file storing the requested data object based on the file identifier;

search the index data for an offset location and a size of the data object associated with the requested data object based on the key; and

retrieve the data object from the file based on the offset location and the size of the data object from the index data.

11. The file server of claim 7 , wherein the object stack manager is further configured to:

assign values in flag fields associated with the plurality of data objects;

delete a data object by setting a flag field associated with the data object being deleted; and

compact the file including the deleted data object by copying data objects that are not deleted into an updated file.

12. The file server of claim 7 , wherein each of the plurality of data objects is included in a data container for storing in one of the plurality of files, each data container further comprising metadata associated with each of the plurality of data objects.

13. A non-transitory computer-readable storage medium storing instructions for storing data, the instructions when executed by a processor, cause the processor to:

receive requests to store a plurality of data objects for storage in a storage system, the storage system having a primary storage and a secondary storage;

add a data object to one of a plurality of files in secondary storage, the file storing the plurality of data objects;

generate index data including an offset location of each data object and a size of each data object that is stored in the file in the secondary storage;

store the index data in primary storage for locating data objects in the file in the secondary storage;

generate, for each data object, a plurality of versions of a data object, each version of the data object having a different size; and

assign a same first key to each version of the same data object and assign a different second key to each version of the data object, the first key and the second key stored in the index data to locate the offset location and the size of the data object.

14. The computer-readable storage medium of claim 13 , wherein each request to store further comprises a key identifying the data object, wherein the index data indexes the offset location and the size of each data object based on the key.

15. The computer-readable storage medium of claim 13 , further comprising instructions to:

receive a request to retrieve the stored data object in the secondary storage, the request to retrieve including a file identifier indicating the file storing the data object and a key identifying the requested data object;

determine a file storing the requested data object based on the file identifier;

search the index data for an offset location and a size of the data object associated with the requested data object based on the key; and

retrieve the data object from the file based on the offset location and the size of the data object from the index data.

16. The computer-readable storage medium of claim 13 , further comprising instructions to:

assign values in flag fields associated with the plurality of data objects;

delete a data object by setting a flag field associated with the data object being deleted; and

compact the file including the deleted data object by copying data objects that are not deleted into an updated file.

Assignments (2)
CHANGE OF NAME Recorded Nov 18, 2021
From: FACEBOOK, INC.
To: META PLATFORMS, INC.
Reel/Frame 058897/0824 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 22, 2009
From: ROTHSCHILD, JEFFREY; VAJGEL, PETER; SOBEL, JASON S.; JOHNSON, ROBERT C.
To: FACEBOOK, INC.
Reel/Frame 023687/0802 →