我不是在谈论分布式键/值系统,例如通常与 memcached 一起使用的系统,它使用一致的散列使添加/删除节点成为一个相对便宜的过程。
我在谈论你的标准内存哈希表,比如 python 的 dict 或 perl 的哈希。
通过降低调整哈希表大小的成本,使用一致哈希的好处似乎也适用于这些标准数据结构。实时系统(和其他对延迟敏感的系统)将受益于/需要针对低成本增长进行优化的哈希表,即使整体吞吐量略有下降。
维基百科暗指“增量调整大小”,但基本上谈论调整大小的热/冷替换方法;有一篇关于“可扩展散列”的单独文章,它使用树进行桶查找来完成廉价的重新散列。
只是好奇是否有人听说过使用一致散列来降低增长成本的核内单节点散列表。或者使用其他方法(ala上面列出的两个维基百科位)更好地满足这个要求?
或者……我的整个问题都被误导了吗?内存分页考虑是否使复杂性不值得?也就是说,一致性散列的额外间接性让您只对总键的一小部分进行重新散列,但这可能无关紧要,因为您可能必须从每个现有页面读取,因此内存延迟是您的主要因素,以及与内存访问的成本相比,您重新哈希部分或全部键并不重要....与您的键重新映射到任何现有页面相比,内存抖动更少。
编辑:添加了“数据结构”标签,澄清了最后一句说“页面”而不是“桶”。