Popularity
3.7
Growing
Activity
0.1
-
57
4
12
Programming language: Go
License: BSD 3-clause "New" or "Revised" License
Tags:
Distributed Systems
doublejump alternatives and similar packages
Based on the "Distributed Systems" category.
Alternatively, view doublejump alternatives based on common mentions on social networks and blogs.
-
tendermint
High-performance middleware for transforming a state machine written in any programming language into a Byzantine Fault Tolerant replicated state machine using the Tendermint consensus and blockchain protocols. -
gleam
Fast and scalable distributed map/reduce system written in pure Go and Luajit, combining Go's high concurrency with Luajit's high performance, runs standalone or distributed. -
glow
Easy-to-Use scalable distributed big data processing, Map-Reduce, DAG execution, all in pure Go. -
emitter-io
High performance, distributed, secure and low latency publish-subscribe platform built with MQTT, Websockets and love. -
Olric
Distributed cache and key/value store. It can be used both as an embedded Go library and as a language-independent service. -
go-sundheit
A library built to provide support for defining async service health checks for golang services. -
celeriac
A library for adding support for interacting and monitoring Celery workers, tasks and events in Go
Get performance insights in less than 4 minutes
Scout APM uses tracing logic that ties bottlenecks to source code so you know the exact line of code causing performance issues and can get back to building a great product faster.
Sponsored
scoutapm.com
Do you think we are missing an alternative of doublejump or a related project?
Popular Comparisons
README
Overview
This is a revamped Google's jump consistent hash. It overcomes the shortcoming of the original implementation - not being able to remove nodes. Here is the main idea behind doublejump.
Benchmark
BenchmarkDoubleJumpWithoutLock/10-nodes 50000000 27.6 ns/op
BenchmarkDoubleJumpWithoutLock/100-nodes 30000000 42.7 ns/op
BenchmarkDoubleJumpWithoutLock/1000-nodes 30000000 54.1 ns/op
BenchmarkDoubleJump/10-nodes 20000000 72.9 ns/op
BenchmarkDoubleJump/100-nodes 20000000 86.1 ns/op
BenchmarkDoubleJump/1000-nodes 20000000 97.9 ns/op
BenchmarkStathatConsistent/10-nodes 5000000 301 ns/op
BenchmarkStathatConsistent/100-nodes 5000000 334 ns/op
BenchmarkStathatConsistent/1000-nodes 3000000 444 ns/op
BenchmarkSerialxHashring/10-nodes 5000000 280 ns/op
BenchmarkSerialxHashring/100-nodes 5000000 340 ns/op
BenchmarkSerialxHashring/1000-nodes 3000000 427 ns/op
Example
h := NewHash()
for i := 0; i < 10; i++ {
h.Add(fmt.Sprintf("node%d", i))
}
fmt.Println(h.Len())
fmt.Println(h.LooseLen())
fmt.Println(h.Get(1000))
fmt.Println(h.Get(2000))
fmt.Println(h.Get(3000))
h.Remove("node3")
fmt.Println(h.Len())
fmt.Println(h.LooseLen())
fmt.Println(h.Get(1000))
fmt.Println(h.Get(2000))
fmt.Println(h.Get(3000))
// Output:
// 10
// 10
// node9
// node2
// node3
// 9
// 10
// node9
// node2
// node0
Acknowledgements
The implementation of the original algorithm is credited to dgryski.