【问题标题】:Using hashes as IDs in key-value stores在键值存储中使用哈希作为 ID
【发布时间】:2015-06-10 16:11:47
【问题描述】:

我想知道在像 Hazelcast 这样的键值存储中使用哈希(CityHash、Murmur 等)作为键是否是个好主意。我预计数据库中有大约 2,000,000,000 条记录 (URL),因此可能会发生冲突。通过哈希冲突丢失一些数据并不是很严重,但当然最好避免它们。

记录包含 URL、时间戳、状态码。主要操作是插入和查找 URL 是否已经存在。

那么,鉴于速度是相关的,你会建议什么:

  • 使用ID generator,或
  • 使用诸如 CityHash 或 Murmur 之类的哈希算法,或者
  • 使用相关字符串,在本例中为 URL 本身?

【问题讨论】:

  • 您需要存储的其余数据是什么?您需要运行什么类型的操作?只需插入并检查重复吗?或者您是否在计算访问次数或报告 URL 历史记录?我见过的许多键值存储将在幕后处理带有散列的字符串键,包括透明地处理不同字符串之间的散列冲突。所以在前面添加自己的哈希码可能会降低性能。
  • 感谢您的评论。我在我的问题中添加了一些细节。

标签: performance hash hazelcast key-value-store murmurhash


【解决方案1】:

Hazelcast 不依赖键对象的 hashCode/equals 方法,而是使用键的二进制表示的 MurMur 哈希。

简而言之,您不应该真正担心哈希冲突。

【讨论】:

  • 一些带有解释的例子会很棒。
  • @Nilambar 我认为我不能在这里给出任何有意义的例子,因为散列发生在幕后。相关代码可以在以下方法中找到:com.hazelcast.map.impl.proxy.MapProxyImpl#put(K, V, long, java.util.concurrent.TimeUnit)
猜你喜欢
  • 2012-02-01
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
相关资源
最近更新 更多