Really remarkably trivial node bindings for Google's jump consistent hash.
Tested on nodes 4, 6, and 7. Is probably just fine on node 0.10 too.
npm install --save @ceejbot/jumphash
This module provides one function:
key must be a non-negative integer or a buffer.
bucketCount must be a positive integer (0 is an invalid bucket count).
The return value is a integer in the range
[0, bucketCount) that you can use as you wish. The paper linked above describes the intended data storage use.
var jumphash = require('@ceejbot/jumphash') assert = require('assert'), crypto = require('crypto'); var location = jumphash(23102, 16); assert(location >= 0); assert(location < 16); var buffer = crypto .createHash('md5') .update('my-string-key-for-some-resource') .digest(); var location2 = jumphash(buffer, 16);
Only the first 64 bits of the buffer are considered, with the most significant bit first.