A consistent hashing library in Erlang.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
test
.gitignore
LICENSE
README.md
rebar.config
rebar.lock

README.md

concha

A consistent hashing library in Erlang.

concha allows creating rings with and without virtual nodes, lookup of nodes based on the given keys, and also viewing and changing the ring structure.

To learn more about consistent hashing read the blog post: http://blog.carlosgaldino.com/consistent-hashing.html

Build

$ rebar3 compile

Usage

1> Nodes = ["10.1.2.3", "10.9.5.1", "10.7.5.1", "10.5.5.2"].
["10.1.2.3","10.9.5.1","10.7.5.1","10.5.5.2"]

2> Ring = concha:new(5, Nodes).
%% suppressed output

3> concha:lookup("Venus", Ring).
"10.7.5.1"

4> concha:lookup("Mars", Ring).
"10.1.2.3"

5> concha:members(Ring).
["10.1.2.3","10.5.5.2","10.7.5.1","10.9.5.1"]

6> concha:size(Ring).
20

7> R2 = concha:remove("10.7.5.1", Ring).
%% suppressed output

8> concha:lookup("Venus", R2).
"10.5.5.2"

9> concha:lookup("Mars", R2).
"10.1.2.3"

10> concha:size(R2).
15

11> concha:contains("10.7.5.1", Ring).
true

12> concha:lookup("Pluto", Ring).
"10.7.5.1"

13> R3 = concha:add("10.6.3.1", Ring).
%% suppressed output

14> concha:lookup("Pluto", R3).
"10.6.3.1"

15> concha:size(R3).
25

Although the examples use strings for both nodes and keys, the library does not require them to be of a specific type. They can be any term.

For more information about usage take a look at the docs.