Skip to content

Repository files navigation

_Consistent_Hash🪐

GitHub Workflow StatusAzure DevOps coverageNuget

A high performance, immutable, light-weight, dependency-free, ring consistent hash library.

💻 Usage

Construction

varnodeToWeight=newDictionary<string,int>(){{"NodeA",100},{"NodeB",150},};varhasher=ConsistentHash.Create(nodeToWeight);

Hashing

varnode=hasher.Hash(Guid.NewGuid());// node = "NodeB"

AddOrSet / AddOrSetRange

// {NodeA: 100, NodeB: 150}hasher=hasher.AddOrSet(node:"NodeA",weight:200);// {NodeA: 200, NodeB: 150}hasher=hasher.AddOrSetRange(newDictionary<string,int>(){{"NodeC",500},{"NodeD",35}});// {NodeA: 200, NodeB: 150, NodeC: 500, NodeD: 35}hasher=hasher.AddOrSet(node:"NodeC",weight:0);// {NodeA: 200, NodeB: 150, NodeD: 35}hasher=hasher.AddOrSet(node:"NodeD",weight:-100);// {NodeA: 200, NodeB: 150}

Remove / RemoveRange

// {NodeA: 200, NodeB: 150, NodeC: 500, NodeD: 35}hasher=hasher.Remove("NodeA");// {NodeB: 150, NodeC: 500, NodeD: 35}hasher=hasher.Remove("NonExistingNode");// {NodeB: 150, NodeC: 500, NodeD: 35}hasher=hasher.RemoveRange(new[]{"NodeC","NodeD"});// {NodeB: 150}

🌟 Features

  • High performance - Internally uses GetHashCode and XxHash for mapping nodes to values, and RadixSort for sorting
  • Deterministic - Given particular node/weight pairs, and hash key, the hash result will be identical.
  • Immutable
  • Handles collisions in a deterministic manner (WIP)
  • Thoroughly tested
  • Zero dependencies
  • Super light weight

⚡️ Performance

📉 API runtime and memory

OperationRuntimeMemory usageDetails
HashO(log(N))n/aN = Number of nodes
ConstructionO(∑ni=0Ni)O(∑ni=0Ni)Ni = Weight defined for node i
AddOrSetRangeO(∑ni=0Ni)O(∑ni=0Ni)Ni = Weight defined for node i
RemoveRangeO(∑ni=0Ni)O(∑ni=0Ni)Ni = Weight defined for node i
UpdateO(∑ni=0Ni)O(∑ni=0Ni)Ni = Weight defined for node i
ContainsO(1)n/a
TryGetWeightO(1)n/a
EqualsO(N)n/aN = Number of nodes

NOTE: Any altering call creates a new instance, so costing sum of all weights.

📊 Distribution Benchmarks (WIP)

📃 License

ConsistentHash🪐 is free and open-source software licensed under the GNU General Public License

About

High performance Ring Consistent Hash implementation

Topics

Resources

Stars

10 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages