我们需要在 MySQL 表中存储一个文本字段(比如 2000 个字符)及其唯一的哈希值(比如 SHA1)。为了测试该文本是否已经存在于 MySQL 表中,我们生成该文本的 SHA1,并查找它是否存在于唯一字段中hash
。
现在让我们假设有两个文本:
- “这是将存储在数据库中的文本,并将生成其哈希”
- “这是文本,将存储在数据库中,并将生成其哈希值。”
注意细微的差别。
假设 1 已添加到数据库中,则检查 2 将不起作用,因为它们的 SHA1 哈希值将大不相同。
一种明显的解决方案是使用 Leveinstein 距离或 difflib 遍历所有已添加的文本字段,以从 MySQL 表中精确匹配。
但这不是以性能为导向的。是否有与文本内容相关的良好散列算法?即为非常相似的文本生成的两个散列本身将非常相似。
这样,在将它们添加到 MySQL 表中之前,检测可能的重复项会更容易。