An open API service indexing awesome lists of open source software.

https://github.com/flier/rust-maglev

Google's consistent hashing algorithm
https://github.com/flier/rust-maglev

Last synced: over 1 year ago
JSON representation

Google's consistent hashing algorithm

Awesome Lists containing this project

README

          

# rust-maglev [![travis build](https://api.travis-ci.org/flier/rust-maglev.svg)](https://travis-ci.org/flier/rust-maglev) [![crate](https://img.shields.io/crates/v/maglev.svg)](https://crates.io/crates/maglev) [![docs](https://docs.rs/maglev/badge.svg)](https://docs.rs/maglev/)
Google's consistent hashing algorithm

## Usage

To use `maglev`, first add this to your `Cargo.toml`:

```toml
[dependencies]
maglev = "0.2"
```

And then, use `Maglev` with `ConsistentHasher` trait

```rust
use maglev::{ConsistentHasher, Maglev};

fn main() {
let m = Maglev::new(vec!["Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"]);

assert_eq!(m["alice"], "Friday");
assert_eq!(m["bob"], "Wednesday");

// When the node list changed, ensure to use same `capacity` to rebuild

let m = Maglev::with_capacity(vec!["Monday",
// "Tuesday",
"Wednesday",
// "Thursday",
"Friday",
"Saturday",
"Sunday"],
m.capacity());

assert_eq!(m["alice"], "Friday");
assert_eq!(m["bob"], "Wednesday");
}
```

Maglev use `std::collections::hash_map::DefaultHasher` by default, we could use the given hash builder to hash keys.

```rust
use fasthash::spooky::Hash128;
use maglev::Maglev;

fn main() {
let m = Maglev::with_hasher(vec!["Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"],
Hash128 {});

assert_eq!(m["alice"], "Monday");
assert_eq!(m["bob"], "Wednesday");
}
```