给定一组静态目标,循环散列算法提供一致性。例如:
- 我有一组初始目标,我们称它们
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])。我对循环散列的学术方面进行了一些研究,这种类型的“缩放一致性”似乎并不是它的主要关注点之一。也许我只是使用了错误类型的哈希算法?