【发布时间】:2015-10-27 07:14:27
【问题描述】:
为了简单起见,我的问题是:如何尽快散列一个字符串(大约 200 个字符)。安全性不重要,但碰撞很重要。
注意:经过快速调查,似乎MurmurHash3 可能是最佳选择。我愿意接受任何评论,否则'
首先,我知道还有很多其他类似的问题,但我还没有找到令人信服的答案。
我有一个对象列表,每个对象都包含一个保存到数据库的大约 3k 段落的列表。每隔 X 小时,这些段落就会重新生成,我需要查找是否有任何段落发生了变化,如果是,则只推送那些新段落。
我发现找到差异的最快方法(知道大部分时间内容是相同的)是创建一个MerkleTree,将其保存到数据库,然后遍历 MerkleTree 以查找差异,而不是比较段落本身。
这意味着,就我而言,我将每秒创建一万个哈希值来与数据库中的哈希值进行比较。因此,我需要一种非常有效的方法来创建这些哈希。我不关心安全性,我只需要确保碰撞次数保持非常非常低。
Java 中最好的算法是什么?
在我的例子中,主要对象由 Sections 组成,Sections 由 Languages 组成,Languages 由 Paragraph 组成。比较策略是:
1)如果对象hash相同则停止,否则转2)
2) 循环所有Section,只保留具有不同哈希的Section
3) 循环这些部分的所有语言,只保留具有不同哈希的语言
4) 循环所有这些语言的所有段落,如果哈希不同,则推送新内容。
【问题讨论】:
-
我觉得这个问题不太清楚,您是否只需要确定一个 specific 对象段落是否已更改或者是 find 哪个对象的想法一个段落属于(即主键是什么?)。
-
@slartidan 不幸的是,该链接仅推荐了一些基本的哈希算法,对于像 OP 似乎存在严重性能问题的人来说,这还不够。
标签: java hash merkle-tree