Expand description
A consistent hashing algorithm that outperforms state-of-the-art algorithms.
This crate provides an implementation of the algorithm described in AnchorHash: A Scalable Consistent Hash.
AnchorHash consistently hashes keys onto resources under arbitrary
working set changes. It does this with a low memory footprint, fast key
lookups (10s to 100s of millions of lookups per second), optimal disruption
and uniform balancing of load across resources.
This implementation also makes use of Daniel Lemire’s fast range mapping algorithm presented in Fast Random Integer Generation in an Interval.
§Example
// Initialise a AnchorHash with the capacity for 20 backend cache servers,
// and 3 active servers.
let anchor = anchorhash::Builder::default()
.with_resources(vec![
"cache1.itsallbroken.com",
"cache2.itsallbroken.com",
"cache3.itsallbroken.com",
])
.build(20);
// Map an input key to one of the backends
let backend = anchor.get_resource("user-A").unwrap();
println!("user mapped to: {}", backend);§Features
This crate has several compile-time features:
simd: use SIMD operations to hash data internally (enabled by default onx86_64platforms with support for SSE4.2)fastmod: efficient range mapping from Fast Random Integer Generation in an Interval (enabled by default on 64-bit platforms)
Structs§
- Anchor
Hash - An
AnchorHashinstance consistently maps keys of typeKto resources of typeRusing the algorithm described inAnchorHash: A Scalable Consistent Hash. - Builder
- Initialise a new
AnchorHashinstance. - Resource
Iterator - An iterator yielding resources assigned to an
AnchorHashinstance in an arbitrary order. - Resource
MutIterator - An iterator yielding mutable references to the resources assigned to an
AnchorHashinstance in an arbitrary order.
Enums§
- Error
- Errors returned when operating on an
AnchorHashinstance.