Patent Description:
For example, some current distributed computing systems include data storage systems. In such systems, data is stored on a plurality of different physical storage devices (or physical resources, also referred to herein as nodes). When a request to store a data item is received by the computing system, the computing system stores the data on one or more of the different physical data stores.

Another example of a distributed computing system is a hosted service in which a plurality of different service instances are deployed on different physical machines. Requests from computing systems that are accessing the hosted service are received and routed to one or more of the different service instances on the different physical machines.

These are just two examples of distributed computing systems. There are a wide variety of other distributed computing systems in which requests are serviced or otherwise executed by components disposed on one of a plurality of different physical machines.

Therefore, these types of distributed systems often map items to a set of physical resources. Those resources can be components (such as service instances) deployed on different physical machines, different physical databases, etc. In such systems, resizing is often performed, in which nodes of the distributed computing system are added or removed. Thus, current distributed computing systems attempt to use an approach for mapping items to the different nodes, in a way that reduces the number of items that need to be moved when the system adds or removes a node.

<CIT> describes a technique for distributing data and associated metadata within a distributed storage architecture. A set of hash tables that embody mappings of cluster-wide identifiers associated with storage locations are stored for write data of write requests organized into extents. A hash value is generated from a hash function applied to each extent. The hash value is overloaded and used for multiple purposes within the distributed storage architecture, including (i) a remainder computation on the hash value to select a bucket of a plurality of buckets representative of the extents, (ii) a hash table selector of the hash value to select a hash table from the set of hash tables, and (iii) a hash table index computed from the hash value to select an entry from a plurality of entries of the selected hash table having a cluster-wide identifier identifying a storage location for the extent.

The object of the invention is solved by the features of the independent claims.

As discussed above, distributed computing systems often map items to a set of physical resources, or nodes. Consistent hashing is an approach for performing such mapping in a way that minimizes the number of items that need to be moved among nodes, when the system is resizing, such as adding or removing a node. Some current systems use one of a plurality of different approaches to consistent hashing. These approaches can include variations on consistent hashing, such as rendezvous hashing and jump consistent hashing.

These types of approaches often require a large memory footprint to maintain the map that maps the items to the nodes. The memory footprint grows drastically as nodes are added to the distributed computing system and thus managing the memory footprint can be prohibitive for some systems. Other approaches do not provide uniform distribution. Therefore, incoming items may be preferentially mapped to certain resources, over other resources, thus resulting in a non-uniform or imbalanced mapping of items to the resources. Still other approaches make it virtually impossible to identify a node (or physical resource) where an item resides, without rehashing item identifiers every time a system is resized.

The present description thus proceeds with respect to a system that quickly identifies the placement of an item onto a node of a distributed computing system, based upon the item identifier, without the need to maintain a large map in memory and while ensuring uniform distribution. The present description also proceeds with respect to a system that, whenever the distributed computing system resizes (e.g., grows or shrinks), can quickly generate a range query against a data store to identify an exact range of item identifiers that must be relocated, without scanning the entire data corpus or recomputing hash values for each item on the data corpus.

Briefly, the present system receives an item identifier that identifies the item that is to be allocated to a node in the distributed computing system. The item identifier is hashed to obtain a numeric hash value. The numeric hash value is then deterministically downscaled into a smaller space defined by a defined number of buckets. The bucket where the numeric hash value resides is then deterministically mapped to a node. A bucket that is to be moved (such as during resizing) is first identified and then a range query, corresponding to the range of numeric hash values in that bucket, is executed against the node from which the bucket is to be retrieved. The items in the retrieved bucket can then be moved based upon resizing criteria. The present description thus proceeds with respect to a system that obtains uniform distribution of items across nodes where only an array of physical resources in memory is used to retrieve those items, by performing range queries, so that they can be relocated during resizing. When the present system grows, only a small number of items, on average, from each node need to be reallocated to a newly added node.

<FIG> is a block diagram of one example of a computing system architecture <NUM>. Architecture <NUM> includes computing system <NUM> that may be accessed by a plurality of different client computing systems <NUM>-<NUM> over network <NUM>. Network <NUM> can thus be any of a variety of different types of networks, such as a wide area network, a local area network, a near field communication network, a cellular communication network, or any of a wide variety of other networks or combinations of networks.

In the example shown in <FIG>, computing system <NUM> can include one or more processors or servers <NUM>, a plurality of different physical data stores <NUM>, <NUM> and <NUM>, a plurality of different server instances <NUM>, <NUM> and <NUM>, a front-end system <NUM>, a back-end system <NUM> and a resource mapping control system <NUM>. Computing system <NUM> can also have a resource management (provisioning/removal) system <NUM>. In one example, resource mapping control system <NUM> can include hashing system <NUM>, downscaling system <NUM>, deterministic mapping system <NUM>, resizing system <NUM>, and it can include other items <NUM>. Downscaling system <NUM> can include deterministic bucket identifier component <NUM>, identifier output component <NUM>, and other items <NUM>.

Resizing system <NUM> can include resizing detector <NUM>, bucket identifier component <NUM>, range query execution component <NUM>, move component <NUM>, and other items <NUM>. Before describing the operation of computing system architecture <NUM> in more detail, a brief description of some of the items in architecture <NUM>, and their operation, will first be provided.

In the example shown in <FIG>, in which computing system <NUM> is a data storage system, physical data stores <NUM>, <NUM>, and <NUM> can be data stores deployed on different physical machines. In such an example, system <NUM> can expose an application programming interface (API) that can be accessed by client computing systems <NUM>-<NUM> in order to provide data items to be stored on physical data stores <NUM>-<NUM>, and in order to retrieve or otherwise operate on those data items. Such a request is passed from front-end system <NUM> to back-end system <NUM> which interacts with the physical data stores <NUM>-<NUM>.

In another example, server instances <NUM>-<NUM> are instances of a server that host a service. Client computing systems <NUM>-<NUM> can make calls to (or requests to) the service through front-end system <NUM>. The requests are passed to back-end system <NUM> which routes the calls or requests to different ones of the server instances <NUM>-<NUM>, based upon workload and other criteria.

In both of these examples (where computing system <NUM> is a data storage system or a service) the requests or data items that are received are mapped to the physical resources (data stores <NUM>-<NUM> and/or server instances <NUM>-<NUM>) by resource mapping control system <NUM>. In one example, resource mapping control system <NUM> maps the data items or requests to the physical nodes (data stores <NUM>-<NUM> and/or server instances <NUM>-<NUM>) in a way that achieves relatively uniform distribution of those data items or requests among the physical nodes, while only needing a relatively small memory footprint (such as an array of physical node identifiers). Also, system <NUM> deterministically maps the incoming data items or requests against the physical nodes in a way so that the hash values of the item identifiers need not be recomputed when resizing the number of physical nodes and in which range queries on the physical nodes can be executed to extract items that need to be relocated during resizing. Similarly, when a new physical node is added, a minimum, on average, number of items from each node need to be retrieved and relocated to the new node.

Briefly, in operation, hashing system <NUM> receives an identifier that identifies the incoming item (data item or request). For purposes of the present description, it will be assumed that computing system <NUM> is a data storage system, and thus the items being received and mapped to the nodes are data items that are to be stored on the physical data stores <NUM>-<NUM>. Thus, consistent hashing system <NUM> receives the data item identifier which may be in the form of a string, and applies a consistent hash function h(x) to that string to obtain a numeric hash value "hash". The consistent hash function h(x) provides a uniform distribution over a wide hash space. For instance, where a <NUM> bit implementation of the consistent hash function is used, then the consistent hash function provides a uniform distribution of numeric hash values over a hash space S of <NUM><NUM> values.

Downscaling system <NUM> scales the numeric hash value from the hash space (S) down to a smaller space defined by a number B of buckets. This can be done by applying a deterministic arithmetic function such as:.

In one example, the number of buckets B is much larger (such as at least one or two orders of magnitude) than the number of physical nodes in the distributed computing system in order to preserve uniform distribution. However, the number of buckets B is small enough such that the number of buckets that need to be relocated during resizing (such as adding nodes to or removing nodes from the distributed computing system) is manageable. Identifier output component <NUM> outputs the bucket identifier generated by deterministic bucket identifier component <NUM>.

At this point, the uniform distribution of the hashing function h(x) and the downscale function d(x) guarantee that, on average, the same number of item identifiers are assigned to each bucket. Therefore, in order to maintain uniform distribution among the nodes, deterministic mapping system <NUM> applies a mapping function m(x) that assigns roughly an equal number of buckets to each physical node.

When resizing is occurring (such as when one of the nodes is being removed or another node is being added to the system) resizing detector <NUM> detects the resizing operation. Bucket identifier component <NUM> identifies buckets that need to be removed from a node and relocated to another node in order to accommodate the resizing operation. Range query execution component <NUM> generates and executes a range query against the node from which the bucket is to be removed to retrieve the specific data items that are to be removed from that node. Move component <NUM> then relocates (e.g., stores) the retrieved data items on the new node, once they are retrieved by range query execution component <NUM>. Assuming that the number of nodes in the distributed computing system is represented by N, then, when a new node is provisioned, B/N buckets are assigned to the new node.

<FIG> is a flow diagram illustrating one example of the operation of resource mapping control system <NUM> in mapping a data item to a physical data store (or node) <NUM>-<NUM>. Resource mapping control system <NUM> first receives a string identifying the item to be assigned to one of the physical nodes. This is indicated by block <NUM> in the flow diagram of <FIG>. Again, while the present discussion proceeds with respect to an example in which the received item is a data item that is to be stored on a data store, the present discussion could just as easily be made with respect to the received item being a request with a request identifier (a string) that identifies a request that is to be serviced by one of the service instances <NUM>-<NUM>. The present discussion is provided for the sake of example only.

Consistent hashing system <NUM> then hashes the string to obtain a numeric hash value. This is indicated by block <NUM> in the flow diagram of <FIG>. In one example, consistent hashing system <NUM> applies a hash function h(x) that generates outputs according to a uniform distribution. This is indicated by block <NUM>. Also, consistent hashing system <NUM> illustratively provides the outputs over a defined range of S values, as indicated by block <NUM>. Consistent hashing system <NUM> can apply a hashing function in other ways as well, and this is indicated by block <NUM>.

Downscaling system <NUM> then downscales the numeric hash value from the hash space S to a bucket space B. In doing so, deterministic bucket identifier component <NUM> applies a downscaling function d(x) to the numeric hash value to obtain a bucket identifier that identifies a bucket corresponding to the numeric hash value (e.g., a bucket that will contain hash values in a range within which the numeric hash value falls). This is indicated by block <NUM>. In one example, the downscaling is that identified above in Equation <NUM>. This is indicated by block <NUM> in the flow diagram of <FIG>. The downscaling function is also performed in order to preserve uniform distribution among the buckets. This is indicated by block <NUM>. Thus, as discussed above, the number of buckets is much larger than the number of nodes (such as one or more orders of magnitude larger). This is indicated by block <NUM> in the flow diagram of <FIG>. The downscaling function can be applied in other ways as well, as indicated by block <NUM>.

Identifier output component <NUM> then outputs the bucket identifier to deterministic mapping system <NUM> which maps the bucket to one of the nodes <NUM>-<NUM>. Mapping the bucket to a physical resource (or node) <NUM>-<NUM> is indicated by block <NUM> in the flow diagram of <FIG>. Again, deterministic mapping system <NUM> applies a deterministic mapping function m(x) that uniformly assigns the buckets to the number N of physical nodes. This is indicated by block <NUM>. The deterministic mapping system <NUM> can map the buckets in other ways as well, and this is indicated by block <NUM>.

<FIG> is a flow diagram illustrating the operation of resizing system <NUM> in relocating nodes when the distributed computing system is resized. For the sake of example, it will be assumed that the distributed computing system is being resized by adding a node to the distributed computing system. It will be appreciated, though, that a similar discussion applies when the distributed computing system is reduced in size so that a node is removed. It is first assumed that there are a known number B of buckets in an array of buckets, and there is a single node (N=<NUM>). This is indicated by block <NUM> in the flow diagram of <FIG>. It is next assumed that deterministic mapping system <NUM> has assigned all of the buckets to the single node (N<NUM>). Assigning all the buckets to the single node is indicated by block <NUM> in the flow diagram of <FIG>.

At some point, resizing detector <NUM> detects that a new node has been provisioned in provisioning system <NUM>. In one example, resource management system <NUM> generates an output indicating when resources are provisioned or eliminated, and provides that output to resizing system <NUM>. Detecting provisioning of a new node is indicated by block <NUM> in the flow diagram of <FIG>.

Bucket identifier component <NUM> then divides the array of all B buckets into groups of N buckets each, with the position of each group in the array being identified by a group index value. Thus, the second group of N buckets in the array has a group index value of <NUM>. The third group of N buckets in the array has a group index value of <NUM>. The fourth group of N buckets in the array has a group index value of <NUM>, etc. This is indicated by block <NUM> in the flow diagram of <FIG>.

Bucket identifier component <NUM> traverses the bucket groups in the array, as indicated by block <NUM>, and assigns equal numbers of buckets from the existing node to the new node. This is indicated by block <NUM>. In addition, where there are multiple existing nodes, bucket identifier component <NUM> avoids identifying buckets which must be moved from one existing node to another existing node, so that buckets are only moved from existing nodes to the new nodes.

Thus, in one example, bucket identifier component <NUM> identifies a particular bucket in the current group of buckets under analysis that is to be assigned to the newly provisioned node as follows:.

Thus, assuming there are <NUM> groups of buckets, then, in Group <NUM>, bucket <NUM> would be assigned to the new node. In Group <NUM>, bucket <NUM> would be assigned to the new node. In Group <NUM>, bucket <NUM> would be assigned to the new node. In Group <NUM>, bucket <NUM> would be assigned to the new node. In Group <NUM>, bucket <NUM> would be assigned to the new node, and in Group <NUM>, bucket <NUM> would be assigned to the new node. It will be noted that this mechanism for reallocating buckets can be computed in order to assign buckets to the new node in a time that is proportional to N, without an in-memory map.

In another example, a fast, minimal memory consistent hash algorithm (sometimes referred to as jump consistent hash) can be used to provide a similar distribution of buckets to the new node. The jump consistent hash can be computed in log(N) time and without an in-memory map.

<FIG> is a flow diagram illustrating one example of the operation of resizing system <NUM> (and specifically range query execution component <NUM> and move component <NUM>) in retrieving items from one node and moving them to another node, during resizing. It will be noted that in this way, once the buckets are identified, they can be obtained and moved without accessing an in-memory map and without recomputing or rehashing any values in the various buckets.

It is first assumed that resizing system <NUM> has detected that items are to be removed from a physical resource or node and moved to another node. This is indicated by block <NUM> in the flow diagram of <FIG>. This can be done, as discussed above, by resizing detector <NUM> detecting that a new node has been provisioned by system <NUM>. Detecting that items need to be removed can be done in other ways as well.

It is also assumed that a bucket that is to be removed from a node has been identified. This is indicated by block <NUM>. Again, this may be done as discussed above with respect <FIG>, or in other ways. Range query execution component <NUM> then identifies a range of numeric hash values that reside in the bucket to be removed. This is indicated by block <NUM>. For example, it is assumed that the buckets have a known bucket size, "Bucket Size". It is also assumed that each bucket in the array of buckets is represented by a bucket identifier, "Bucket_id". In that case, the start of the range of values of items that are to be removed can be represented as:.

Similarly, the end of the range of items in the bucket can be identified as follows:.

Identifying the start of the range of items based on the bucket identifier and the bucket size is indicated by block <NUM>, and identifying the end of the range of items based on the bucket identifier and bucket size is indicated by block <NUM>. The range of numeric hash values in the bucket to be removed can be identified in other ways as well, and this is indicated by block <NUM>.

Once the range of items to be removed from the node is known, then range query execution component <NUM> executes a range query against the physical node to obtain the items in the bucket to be removed. This is indicated by block <NUM>. When those items are retrieved, then move component <NUM> moves them to the new node, that was just provisioned. This is indicated by block <NUM>. The ability to query items that need to be removed by running a series of range queries allows the computing system <NUM> to resize without the need to rescan the entire corpus of data, and without rehashing all of the identifiers or items in the corpus.

As discussed above, in order to maintain an acceptable uniform distribution of items among the physical nodes, the number of buckets B should be much larger than the number of physical nodes N.

Table <NUM> below shows the result of using the systems described above in a resizing operation. The first column in Table <NUM> shows the initial number of nodes and the second column shows the number of nodes that the system is being resized to. In the example shown, a single node is being provisioned and added to the initial number of nodes. The first row in the following four columns (labeled "Number of Buckets") represents the number of buckets in the distributed computing system. Four different examples are shown in Table <NUM> - examples in which the distributed computing system has <NUM> buckets, <NUM>,<NUM> buckets, <NUM>,<NUM> buckets, and <NUM>,<NUM> buckets.

The values in the cells in Table <NUM> show the number of buckets that need to be moved to the new node from the initial set of nodes. For instance, Table <NUM> shows that where there is one initial node and the system is being resized to have two nodes, then <NUM> of the <NUM> buckets are moved using the resizing algorithms discussed above. In an ideal system, this would be exactly half of the <NUM> buckets (or <NUM> buckets). Table <NUM> also shows that where the system has <NUM>,<NUM> buckets, <NUM> will be moved. Where the system has <NUM>,<NUM> buckets, <NUM>,<NUM> will be moved, and where the system has <NUM>,<NUM> buckets, <NUM>,<NUM> will be moved. Thus, the present system provides exceptionally good performance in relocating buckets during a resizing operation.

It can thus be seen that the entire hashing, downscaling and mapping process is deterministic and can thus be computed without an in-memory map. The hashing process h(x) can be achieved with a time complexity O(S), where S is the length of the item identifier that is being mapped, and with constant memory footprint. The downscale operation d(x) can be computed in constant time. Note that the sizes of B (the number of buckets) and S (the hash space) do not contribute to the time complexity, nor do they contribute to a memory footprint used by the algorithm. This provides a significant advantage in comparison to consistent hashing approaches where the in-memory map grows with the number of nodes and buckets. Similarly, where a jump consistent hash approach is used for mapping m(x), then the mapping can be computed in log(N) time. Similarly, uniform distribution of elements, across the physical resources, is maintained and the hash values of the items associated with the buckets need not be recomputed when resizing. Further, the system enables performing range queries on individual physical resources to retrieve the precise items that need to be located during a resizing operation. For example, when a system grows from N-<NUM> to N nodes, only a minimum of items need to be relocated, on average, and each existing node contributes approximately the same number of items to populate the new node, on average.

The present discussion has mentioned processors and servers. In one embodiment, the processors and servers include computer processors with associated memory and timing circuitry, not separately shown. They are functional parts of the systems or devices to which they belong and are activated by, and facilitate the functionality of the other components or items in those systems.

<FIG> is a block diagram of architecture <NUM>, shown in <FIG>, except that its elements are disposed in a cloud computing architecture <NUM>. Cloud computing provides computation, software, data access, and storage services that do not require end-user knowledge of the physical location or configuration of the system that delivers the services. In various embodiments, cloud computing delivers the services over a wide area network, such as the internet, using appropriate protocols. For instance, cloud computing providers deliver applications over a wide area network and they can be accessed through a web browser or any other computing component. Software or components of architecture <NUM> as well as the corresponding data, can be stored on servers at a remote location. The computing resources in a cloud computing environment can be consolidated at a remote data center location or they can be dispersed. Cloud computing infrastructures can deliver services through shared data centers, even though they appear as a single point of access for the user. Thus, the components and functions described herein can be provided from a service provider at a remote location using a cloud computing architecture. Alternatively, they can be provided from a conventional server, or they can be installed on client devices directly, or in other ways.

The description is intended to include both public cloud computing and private cloud computing. Cloud computing (both public and private) provides substantially seamless pooling of resources, as well as a reduced need to manage and configure underlying hardware infrastructure.

A public cloud is managed by a vendor and typically supports multiple consumers using the same infrastructure. Also, a public cloud, as opposed to a private cloud, can free up the end users from managing the hardware. A private cloud may be managed by the organization itself and the infrastructure is typically not shared with other organizations. The organization still maintains the hardware to some extent, such as installations and repairs, etc..

In the example shown in <FIG>, some items are similar to those shown in <FIG> and they are similarly numbered. <FIG> specifically shows that computing system <NUM> can be located in cloud <NUM> (which can be public, private, or a combination where portions are public while others are private). Therefore, user <NUM> uses a user device <NUM> to access those systems through cloud <NUM>. User <NUM> can use a user device <NUM> to access system <NUM> as well.

<FIG> also depicts another example of a cloud architecture. <FIG> shows that it is also contemplated that some elements of computing system <NUM> can be disposed in cloud <NUM> while others are not. By way of example, data stores <NUM>, <NUM>, <NUM> can be disposed outside of cloud <NUM>, and accessed through cloud <NUM>. Regardless of where they are located, they can be accessed directly by device <NUM>, through a network (either a wide area network or a local area network), they can be hosted at a remote site by a service, or they can be provided as a service through a cloud or accessed by a connection service that resides in the cloud. All of these architectures are contemplated herein.

It will also be noted that architecture <NUM>, or portions of it, can be disposed on a wide variety of different devices. Some of those devices include servers, desktop computers, laptop computers, tablet computers, or other mobile devices, such as palm top computers, cell phones, smart phones, multimedia players, personal digital assistants, etc..

<FIG> is one example of a computing environment in which architecture <NUM>, or parts of it, (for example) can be deployed. With reference to <FIG>, an example system for implementing some embodiments includes a computing device in the form of a computer <NUM> programmed to operate as described above. Components of computer <NUM> may include, but are not limited to, a processing unit <NUM> (which can comprise processors or servers from previous FIGS. ), a system memory <NUM>, and a system bus <NUM> that couples various system components including the system memory to the processing unit <NUM>. The system bus <NUM> may be any of several types of bus structures including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of bus architectures. By way of example, and not limitation, such architectures include Industry Standard Architecture (ISA) bus, Micro Channel Architecture (MCA) bus, Enhanced ISA (EISA) bus, Video Electronics Standards Association (VESA) local bus, and Peripheral Component Interconnect (PCI) bus also known as Mezzanine bus. Memory and programs described with respect to <FIG> can be deployed in corresponding portions of <FIG>.

Communication media typically embodies computer readable instructions, data structures, program modules or other data in a transport mechanism and includes any information delivery media. By way of example, and not limitation, communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared and other wireless media. Combinations of any of the above should also be included within the scope of computer readable media.

By way of example only, <FIG> illustrates a hard disk drive <NUM> that reads from or writes to non-removable, nonvolatile magnetic media, and an optical disk drive <NUM> that reads from or writes to a removable, nonvolatile optical disk <NUM> such as a CD ROM or other optical media. Other removable/non-removable, volatile/nonvolatile computer storage media that can be used in the exemplary operating environment include, but are not limited to, magnetic tape cassettes, flash memory cards, digital versatile disks, digital video tape, solid state RAM, solid state ROM, and the like.

Operating system <NUM>, application programs <NUM>, other program modules <NUM>, and program data <NUM> are given different numbers here to illustrate that, at a minimum, they are different copies.

These and other input devices are often connected to the processing unit <NUM> through a user input interface <NUM> that is coupled to the system bus, but may be connected by other interface and bus structures, such as a parallel port, game port or a universal serial bus (USB).

The computer <NUM> is operated in a networked environment using logical connections to one or more remote computers, such as a remote computer <NUM>. The remote computer <NUM> may be a personal computer, a hand-held device, a server, a router, a network PC, a peer device or other common network node, and typically includes many or all of the elements described above relative to the computer <NUM>. The logical connections depicted in <FIG> include a local area network (LAN) <NUM> and a wide area network (WAN) <NUM>, but may also include other networks. Such networking environments are commonplace in offices, enterprise-wide computer networks, intranets and the Internet.

The modem <NUM>, which may be internal or external, may be connected to the system bus <NUM> via the user input interface <NUM>, or other appropriate mechanism. In a networked environment, program modules depicted relative to the computer <NUM>, or portions thereof, may be stored in the remote memory storage device. By way of example, and not limitation, <FIG> illustrates remote application programs <NUM> as residing on remote computer <NUM>. It will be appreciated that the network connections shown are example and other means of establishing a communications link between the computers may be used.

It should also be noted that the different examples described herein can be combined in different ways. That is, parts of one or more examples can be combined with parts of one or more other examples. All of this is contemplated herein.

Example <NUM> is a computer system, comprising:.

Example <NUM> is the computer system of any or all previous examples wherein the deterministic mapping system is configured to uniformly, on average, assign bucket identifiers to the plurality of physical resources.

Example <NUM> is the computer system of any or all previous examples wherein the downscaling system comprises:
a deterministic bucket identifier component configured to deterministically assign the numeric hash value to the selected bucket identifier in the reduced value space.

Example <NUM> is the computer system of any or all previous examples wherein the deterministic bucket identifier is configured to uniformly, on average, assign numeric hash values to the bucket identifiers in the reduced value space of bucket identifiers.

Example <NUM> is the computer system of any or all previous examples and further comprising:.

Example <NUM> is the computer system of any or all previous examples wherein the bucket identifier is configured to uniformly, on average, re-assign bucket identifiers from the current number of physical resources to the changed number of physical resources.

Example <NUM> is the computer system of any or all previous examples wherein the resizing detector detects resizing input by detecting an added physical resource to the plurality of physical resources and wherein the bucket identifier is configured to re-assign bucket identifiers by dividing the bucket identifiers into a number of groups, each group being identified by a group index value and each group having N buckets where N corresponds to the changed number of physical resources, and re-assigning an equal number of bucket identifiers from each group to the added physical resource.

Example <NUM> is the computer system of any or all previous examples and further comprising:
a range query execution component that identifies a range of numeric hash values corresponding to the re-assigned bucket identifier, generates a range query based on the identified range of numeric hash values, and executes the range query against the physical resource in the current number of physical resources to retrieve items having numeric hash values in the identified range of numeric hash values, wherein the move component moves the retrieved items to the different physical resource.

Example <NUM> is the computer system of any or all previous examples wherein each bucket has a bucket size, and wherein the range query execution component is configured to identify a start of the range based on the bucket index value and bucket size and identify an end of the range based on the start of the range and the bucket size.

Example <NUM> is a computer implemented method, comprising:.

Example <NUM> is the computer implemented method of any or all previous examples wherein deterministically mapping the selected bucket identifier to one of the physical resources, comprises:
uniformly, on average, assigning bucket identifiers to the plurality of physical resources.

Example <NUM> is the computer implemented method of any or all previous examples wherein downscaling comprises:
deterministically assigning the numeric hash value to the selected bucket identifier in the reduced value space.

Example <NUM> is the computer implemented method of any or all previous examples wherein deterministically assigning comprises:
uniformly, on average, assigning numeric hash values to the bucket identifiers in the reduced value space of bucket identifiers.

Example <NUM> is the computer implemented method of any or all previous examples and further comprising:.

Example <NUM> is the computer implemented method of any or all previous examples wherein re-assigning a bucket identifier comprises:
uniformly, on average, re-assigning bucket identifiers from the current number of physical resources to the changed number of physical resources.

Example <NUM> is the computer implemented method of any or all previous examples wherein detecting a re-sizing comprises detecting an added physical resource to the plurality of physical resources and wherein re-assigning bucket identifiers comprises:.

Example <NUM> is the computer implemented method of any or all previous examples wherein moving items comprises:.

Example <NUM> the computer implemented method of any or all previous examples wherein each bucket has a bucket size, and wherein identifying a range comprises:.

Claim 1:
A computer system (<NUM>), comprising:
at least one processor (<NUM>); and
memory storing instructions executable by the at least one processor, wherein the instructions, when executed, cause the computer system to:
receive a string identifier, identifying an item to be assigned to one of a plurality of physical resources;
obtain a numeric hash value based on applying a hashing function to the string identifier, the hashing function configured to generate numeric hash values that are distributed over a hash value space comprising a defined range of values;
downscale the numeric hash value into a reduced value space of bucket identifiers to obtain a downscaled value corresponding to a selected bucket identifier, the reduced value space of bucket identifiers having fewer values than the hash value space;
deterministically map the selected bucket identifier to one of the physical resources;
detect a change in the plurality of physical resources from a first number of physical resources to a second number of physical resources;
re-assign a bucket identifier from a physical resource in the first number of physical resources to a different physical resource in the second number of physical resources;
identify a start of a range of numeric hash values corresponding to the re-assigned bucket identifier based on a group index value and a bucket size;
identify an end of the range of numeric hash values based on the start of the range of numeric hash values and the bucket size;
retrieve items having numeric hash values in the range of numeric hash values; and
move the retrieved items to the different physical resource.