我的代码提取~1000个HTML文件,提取相关信息&然后将该信息存储在MySQL TEXT字段中(因为它通常很长)。我正在寻找一个系统来防止数据库中的重复条目
我的第一个想法是在表格中添加一个HASH字段(可能是MD5),在每次运行开始时拉出哈希列表&在插入数据库之前检查重复项。
第二个想法是存储文件长度(字节或字符或其他),索引,和&检查重复的文件长度,如果找到重复的长度则重新检查内容。
不知道性能方面的最佳解决方案是什么。也许有更好的方法?
如果有一种有效的方法可以检查文件是否与理想的95%相似,但我怀疑是否存在?
感谢您的帮助!
BTW我正在使用PHP5 / Kohana
编辑:
只是想知道检查相似性:我可以计算所有字母数字字符&记录每个
的出现次数例如:17aB ... = 1a,7b,10c,27c,......
潜在的问题是字数的上限(大约61?)
我认为误报仍然很少见。 。
好主意/坏主意?
答案 0 :(得分:2)
哈希想法可能是最好的。你可能会发生碰撞,但它们非常罕见。
使哈希字段成为表的唯一键,并捕获重复的错误代码。或使用insert ignore
或insert replace
。
答案 1 :(得分:0)
这听起来不错,我已经实现了类似的东西。哈希字段应该是一个键,因为不允许重复。
如果每个文本记录很长,您可以计算每个记录的哈希值的常数多个(例如2个)。那么也许只要其中一个是相同的,那就够了。显然,你对每个记录的散列越多,你就越接近比较全文。
MD5是16个字节。随着时间的推移会有多少潜在的哈希?如果这个数字保持合理,你应该可以在内存中进行比较。