给定一组静态目标,循环散列算法提供一致性。例如:
- 我有一组初始目标,我们称它们
A
为B
和C
。 - 我有钥匙,我们就叫它吧
x
- 我有一个循环哈希函数,我们称之为
hash(key, targets)
- 当我打电话时
hash(x, [A,B,C])
,x
总是哈希到A
似乎足够明显。A
我总是得到的事实x
代表了我在使用循环哈希时所期望的一致性。但是,现在让我们考虑如果我添加一个新节点会发生什么D
:
- 我的目标集重新平衡以包括
A
、B
、C
和D
- 我重新申请我的
x
钥匙hash(x, [A,B,C,D])
- 因为圈子重新平衡了,我不能保证再
A
得到
我错过了什么还是我只是运气不好?当您开始重新排序节点(例如hash(x, [B,A,D,C])
)或在现有节点列表的中间插入新节点(例如 )时,问题会进一步恶化hash(x, [A,AA,B,C,D])
。我对循环散列的学术方面进行了一些研究,这种类型的“缩放一致性”似乎并不是它的主要关注点之一。也许我只是使用了错误类型的哈希算法?