【发布时间】:2021-09-30 08:06:44
【问题描述】:
当前算法是:
d = {}
for doc_id in request:
md5 = hashlib.md5()
md5.update(str(doc_id) + "_" + request_id)
digest = md5.hexdigest()
k = int(digest, 16)
a = (k%720)/(720/16)
if a not in d:
d[a]=1
else:
d[a]=d[a]+1
请求大小在 (800, 1000) 范围内
我计算了1000次算法,
max(d[i])-min(d[j]) 是 20+ 的平均值
有没有办法让16个桶的大小尽可能平衡
【问题讨论】:
-
a = (k%720)/(720/16)背后的想法是什么?为什么不简单地a = k % number_of_buckets?如果2**128(一个MD5哈希的最大值,加1)不能被number_of_buckets整除,就会产生一些偏差,但是2**128很大,所以偏差很小。 -
@Thomas a = k % number_of_buckets。没有区别,
-
我知道,但这不是我的问题。 :)
标签: algorithm hash partition data-partitioning