微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将大整数键均匀分布到 N 个桶中

如何解决将大整数键均匀分布到 N 个桶中

我已经构建了一个分布式缓存系统,需要映射一组整数键,这些键的值范围从 0 到大约 800 万,这些键不是均匀分布到更小范围的存储桶 (

enter image description here

截至目前,我正在使用一个简单的模运算来分发密钥。

def hash_fn(key: int,partitions: int) -> int:
    return (key % partitions) + 1

这在分配密钥方面效果相对较好,但仍然存在一些偏差。下面是将键映射到 40 个存储桶的结果。最大和最小的桶相差430!

到目前为止,我已经尝试了 MD5、sha256、Fibonacci 散列、knuth 的乘法方法和其他一些乘法技术,但都无济于事。这些方法似乎都没有比简单的模技术提供更好的分布。

我是否只需要忍受分布中的一点点偏差,还是可以做得更好?

BUCKET 34: 27963
BUCKET 40: 28062
BUCKET 26: 28086
BUCKET 31: 28095
BUCKET 39: 28096
BUCKET 30: 28100
BUCKET 27: 28101
BUCKET 36: 28123
BUCKET 25: 28128
BUCKET 24: 28131
BUCKET 9: 28133
BUCKET 35: 28150
BUCKET 37: 28151
BUCKET 33: 28156
BUCKET 10: 28157
BUCKET 29: 28159
BUCKET 28: 28169
BUCKET 23: 28174
BUCKET 6: 28175
BUCKET 32: 28180
BUCKET 18: 28186
BUCKET 4: 28191
BUCKET 1: 28194
BUCKET 21: 28195
BUCKET 0: 28210
BUCKET 8: 28221
BUCKET 22: 28230
BUCKET 38: 28233
BUCKET 17: 28236
BUCKET 12: 28240
BUCKET 20: 28246
BUCKET 19: 28251
BUCKET 16: 28251
BUCKET 2: 28260
BUCKET 3: 28261
BUCKET 5: 28272
BUCKET 14: 28289
BUCKET 15: 28290
BUCKET 7: 28312
BUCKET 11: 28368
BUCKET 13: 28393

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。