IP Library › Granted Patent US 11,604,781
Granted Patent B2
US 11,604,781 · App. 17/478,671 · Granted Mar 14, 2023

System and method for clustering distributed hash table entries

Inventors: Jason G. McHugh (Seattle, WA); Praveen Kumar Gattu (Redmond, WA); Michael A. Ten-Pow (Seattle, WA); Derek Ernest Denny-Brown, II (Seattle, WA)
Assignee: Amazon Technologies, Inc.
G06F16/2255G06F16/1873
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 11,604,781
App. No.
17/478,671
Granted
Mar 14, 2023
Kind
B2
Abstract

A distributed storage system may store data object instances in persistent storage and may store keymap information for those data object instances in a distributed hash table on multiple computing nodes. Each data object instance may include a composite key containing a user key. The keymap information for each data object instance may map the user key to a locator and the locator to the data object instance. A request to store or retrieve keymap information for a data object instance may be routed to a particular computing node based on a consistent hashing scheme in which a hash function is applied to a portion of the composite key of the data object instance. Thus, related entries may be clustered on the same computing nodes. The portion of the key to which the hash function is applied may include a pre-determined number of bits or be identified using a delimiter.

Claims (72)

1. A method, comprising:

performing, by a computer system that stores a plurality of versioned and non-versioned data objects in a distributed storage system:

receiving, for a bucket configured to store versioned data objects, a request for a mutating operation for one or more of the versioned data objects stored in the bucket;

in response to the request, creating a new version of the one or more versioned data objects in accordance with the mutating operation;

receiving, for the bucket configured to store versioned data objects, a request to turn off object versioning for the data objects stored in the bucket; and

responsive to a request for another mutating operation for the one or more of the versioned data objects stored in the bucket with object versioning turned off, performing the mutating operation without creating a new version of the one or more versioned data objects.

2. The method of claim 1 , further comprising:

receiving, via an API, a getnearest request for a given one of the versioned objects in the bucket, wherein the getnearest request does not specify a version-id for the given versioned object; and

responding to the getnearest request with a latest version of the given versioned object.

3. The method of claim 1 , wherein:

to store the plurality of versioned data objects in the distributed storage system the computer system is configured to perform storing the versioned objects such that the objects include a series of version-ids that has a total ordering across all sequencers; and

the method further comprises:

receiving, via an API, a getnearest operation, specifying a given user key, for a given one of the versioned objects in the bucket, wherein the getnearest operation does not specify a version-id for the given versioned object; and

responding to the getnearest operation, via the API, with either:

a first key-value pair in the total ordering of key-value pairs that includes the given user key, or

a next key-value pair in the total ordering of key-value pairs.

4. The method of claim 1 , wherein versioned objects are identified by version-ids comprising sequencers with the most significant bytes of the version-ids encoding times at which the version-ids are generated.

5. The method of claim 1 , wherein at least some of the objects stored in the bucket prior to object versioning being turned on for objects in the bucket are implicit object versions that have version-ids with a sentinel value identifying them as implicit object versions.

6. The method of claim 1 , wherein:

the mutating operation comprises one of a put or a delete operation; and

the other mutating operation comprises one of a put or a delete operation.

7. The method of claim 1 , further comprising:

when object versioning is turned on for the data objects in the bucket:

preventing overwrite of objects that are PUT into the bucket; and

preventing overwrite of existing objects in the bucket.

8. A system, comprising:

one or more processors; and

memory coupled to the one or more processors and storing program instructions that when executed by the one or more processors cause the one or more processors to perform, for a system that stores a plurality of versioned and non-versioned data objects in a distributed storage system:

receiving, for a bucket configured to store versioned data objects, a request for a mutating operation for one or more of the versioned data objects stored in the bucket;

in response to the request, creating a new version of the one or more versioned data objects in accordance with the mutating operation;

receiving, for the bucket configured to store versioned data objects, a request to turn off object versioning for the data objects stored in the bucket; and

responsive to a request for another mutating operation for the one or more of the versioned data objects stored in the bucket with object versioning turned off, performing the mutating operation without creating a new version of the one or more versioned data objects.

9. The system of claim 8 , wherein when executed by the one or more processors, the program instructions further cause the one or more processors to perform:

when object versioning is turned on for the data objects in the bucket:

preventing overwrite of objects that are PUT into the bucket; and

preventing overwrite of existing objects in the bucket.

10. The system of claim 8 , wherein:

the mutating operation comprises one of a put or a delete operation; and

the other mutating operation comprises one of a put or a delete operation.

11. The system of claim 8 , wherein one or more of the objects stored in the bucket prior to object versioning being turned on for objects in the bucket are implicit object versions that have version-ids with a sentinel value identifying them as implicit object versions.

12. The system of claim 8 , wherein when executed by the one or more processors, the program instructions further cause the one or more processors to perform:

receiving, via an API, a getnearest request for a given one of the versioned objects in the bucket, wherein the getnearest request does not specify a version-id for the given versioned object; and

responding to the getnearest request with a latest version of the given versioned object.

13. The system of claim 8 , wherein versioned objects are identified by version-ids comprising sequencers with the most significant bytes of the version-ids encoding times at which the version-ids are generated.

14. The system of claim 8 , wherein each stored object includes two identifying components that together uniquely identify an object in a bucket, the two identifying components comprising:

a user key, and

a version identifier.

15. One or more non-transitory, computer-readable storage media storing program instructions that when executed on or across one or more processors cause the one or more processors to perform, for a system that stores a plurality of versioned and non-versioned data objects in a distributed storage system:

receiving, for a bucket configured to store versioned data objects, a request for a mutating operation for one or more of the versioned data objects stored in the bucket;

in response to the request, creating a new version of the one or more versioned data objects in accordance with the mutating operation;

receiving, for the bucket configured to store versioned data objects, a request to turn off object versioning for the data objects stored in the bucket; and

responsive to a request for another mutating operation for the one or more of the versioned data objects stored in the bucket with object versioning turned off, performing the mutating operation without creating a new version of the one or more versioned data objects.

16. The one or more non-transitory computer-readable storage media of claim 15 , wherein:

the mutating operation comprises one of a put or a delete operation; and

the other mutating operation comprises one of a put or a delete operation.

17. The one or more non-transitory computer-readable storage media of claim 15 , wherein when executed by the one or more processors, the program instructions further cause the one or more processors to perform:

when object versioning is turned on for the data objects in the bucket:

preventing overwrite of objects that are PUT into the bucket; and

preventing overwrite of existing objects in the bucket.

18. The one or more non-transitory computer-readable storage media of claim 15 , wherein when executed by the one or more processors, the program instructions further cause the one or more processors to perform:

receiving, via an API, a getnearest request for a given one of the versioned objects in the bucket, wherein the getnearest request does not specify a version-id for the given versioned object; and

responding to the getnearest request with a latest version of the given versioned object.

19. The one or more non-transitory computer-readable storage media of claim 15 , wherein:

the system stores the versioned objects such that the objects include a series of version-ids that has a total ordering across all sequencers; and

when executed by the one or more processors, the program instructions further cause the one or more processors to perform:

receiving, via an API, a getnearest operation, specifying a given user key, for a given one of the versioned objects in the bucket, wherein the getnearest operation does not specify a version-id for the given versioned object; and

responding to the getnearest operation, via the API, with either:

a first key-value pair in the total ordering of key-value pairs that includes the given user key, or

a next key-value pair in the total ordering of key-value pairs.

20. The one or more non-transitory computer-readable storage media of claim 15 , wherein when executed by the one or more processors, the program instructions further cause the one or more processors to perform:

for one or more objects stored in the bucket prior to object versioning being turned on for objects in the bucket,

storing, the one or more objects as implicit object versions that have version-ids with a sentinel value identifying them as implicit object versions.

Continuity (4)
Continuation 16355557 · Mar 15, 2019
Continuation 14500404 · Sep 29, 2014
Continuation 12978253 · Dec 23, 2010
Related Publication 20220075767A1 · Mar 10, 2022
Cited By (2)
US 12,362,929 US 12,363,527