A Go implementation of Google's jump consistent hash algorithm for minimal disruption when resizing hash tables.
dgryski/go-jump is a Go implementation of Google's jump consistent hash algorithm, designed to distribute keys across buckets efficiently. It solves the problem of minimizing key reassignments when the number of buckets changes, which is crucial for maintaining stability in distributed systems. This makes it ideal for scenarios like load balancing, sharding, and distributed caching where consistent hashing is required.
Developers building or maintaining distributed systems in Go that require consistent hashing for load balancing, sharding, or caching, such as those working on database sharding, distributed caches, or microservice architectures.
Developers choose this library for its faithful, efficient port of Google's algorithm with O(log n) time complexity, zero dependencies, and a minimal API that reduces disruption during bucket resizing compared to traditional consistent hashing methods.
go-jump: Jump consistent hashing
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Implements Google's jump consistent hash with O(log n) time complexity, ensuring fast key distribution even with large bucket counts.
Has no additional memory requirements beyond the function call, making it lightweight and suitable for resource-constrained environments.
Produces consistent bucket assignments and minimizes key reassignments during resizing, as highlighted in the key features for improved system stability.
Offers a clean, single-function interface that is easy to integrate into existing Go systems, reducing boilerplate code.
Only provides the core jump hash algorithm without support for advanced features like virtual nodes or weighted buckets, which are common in other consistent hashing solutions.
The README is minimal, with just a link to Godoc, lacking practical examples or guidance that could help developers implement it effectively.
Assumes buckets are numbered sequentially from 0 to N-1, which may not align with systems using arbitrary or dynamic bucket naming schemes.