Crate rendezvous_hash [] [src]

An implementation of Rendezvous (a.k.a, highest random weight) hashing algorithm.

Reference: Rendezvous hashing (Wikipedia)

Examples

use rendezvous_hash::RendezvousNodes;

// Constructs a node (a.k.a., server, site, etc) set.
let mut nodes = RendezvousNodes::default();
nodes.insert("foo");
nodes.insert("bar");
nodes.insert("baz");
nodes.insert("qux");

// Finds candidate nodes for an item (a.k.a., object).
assert_eq!(nodes.calc_candidates(&1).collect::<Vec<_>>(),
           [&"bar", &"baz", &"foo", &"qux"]);
assert_eq!(nodes.calc_candidates(&"key").collect::<Vec<_>>(),
           [&"qux", &"bar", &"foo", &"baz"]);

// Update the node set.
// (The relative order between existing nodes are preserved)
nodes.remove(&"baz");
assert_eq!(nodes.calc_candidates(&1).collect::<Vec<_>>(),
           [&"bar", &"foo", &"qux"]);
assert_eq!(nodes.calc_candidates(&"key").collect::<Vec<_>>(),
           [&"qux", &"bar", &"foo"]);

Modules

iterators

Iterator trait implementations.

Structs

Capacity

The capacity of a node.

DefaultNodeHasher

The default NodeHasher implementation.

HeterogeneousRendezvousNodes

A heterogeneous candidate node set of a rendezvous for clients that are requiring the same item.

RendezvousNodes

A candidate node set of a rendezvous for clients that are requiring the same item.

Traits

NodeHasher

This trait allows calculating the hash value of a node for a specific item.