Manual Reference Pages - SET::CONSISTENTHASH (3)
Set::ConsistentHash - library for doing consistent hashing
my $set = Set::ConsistentHash->new;
Description, shamelessly stolen from Wikipedia:
Consistent hashing is a scheme that provides hash table
functionality in a way that the addition or removal of one slot does
not significantly change the mapping of keys to slots. In contrast,
in most traditional hash tables, a change in the number of array
slots causes nearly all keys to be remapped.
Consistent hashing was introduced in 1997 as a way of distributing
requests among a changing population of web servers. More recently,
it and similar techniques have been employed in distributed hash
Youre encouraged to read the original paper, linked below.
Terminology about this stuff seems to vary. For clarity, this module
uses the following:
<B>Consistent HashB> The object you work with. Contains 0 or more
targets, each with a weight.
<B>TargetB> A member of the set. The weight (an arbitrary number),
specifies how often it occurs relative to other targets.
$set = Set::ConsistentHash->new;
Takes no options. Creates a new consistent hashing set with no
targets. Youll need to add them.
Returns (alphabetically sorted) array of all targets in set.
Remove all targets.
$set->set_targets("foo" => 5, "bar" => 10);
Removes all targets, then sets the provided ones with the weightings provided.
Without removing existing targets, modifies the weighting of provided
targets. A weight of undef or 0 removes an item from the set.
$set->set_target($target => $weight);
A wrapper around modify_targets that sounds better for modifying a single item.
Returns sum of all current targets weights.
$weight = $set->percent_weight($target);
$weight = $set->percent_weight("10.0.0.2");
Returns number in range [0,100] representing percentage of weight that provided $target has.
Sets the function with which keys will be hashed before looking up
which target they will be mapped onto.
$selected_target = $set->get_target(your_hash_func($your_key));
- or -
$selected_target = $set->get_target($your_key);
Given a key, select the target in the set to which that key is mapped.
If you find the target (say, a server) to be dead or otherwise
unavailable, remove it from the set, and get the target again.
$selected_target = $set->buckets->[your_hash_func($your_key) % 1024];
Returns an arrayref of 1024 selected items from the set, in a consistent order.
This is what you want to use to actually select items quickly in your
If you find the target (say, a server) to be dead, or otherwise
unavailable, remove it from the set, and look at that index in the
bucket arrayref again.
Computes and returns an array of 1024 selected items from the set,
in a consistent order.
$target = $set->target_of_point($point)
Given a $point, an integer in the range [0,2**32), returns (somewhat
slowly), the next target found, clockwise from that point on the circle.
This is mostly an internal method, used to generated the 1024-element
cached bucket arrayref when needed. You probably dont want to use this.
Instead, use the <B>bucketsB> method, and run your hash function on your key,
generating an integer, modulous 1024, and looking up that bucket indexs target.
Brad Fitzpatrick firstname.lastname@example.org
Bug, performance, doc, feature patch? See
COPYRIGHT & LICENSE
Copyright 2007, Six Apart, Ltd.
Youre granted permission to use this code under the same terms as Perl itself.
This is free software. It comes with no warranty of any kind.
|perl v5.20.3 ||SET::CONSISTENTHASH (3) ||2010-07-12 |
Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.