我們需要在MySQL表中存儲一個文本字段(比如說2000個字符)及其唯一的散列(比如SHA1)。 爲了測試MySQL表中已存在的文本,我們生成文本的SHA1,並查找它是否存在於唯一字段hash
中。良好的散列算法,接近原始文本輸入,雪崩效應較小?
現在讓我們假設有兩個文本:
- 「這是將存儲在數據庫中的文本,它的散列,將產生」
- 「這是文本,這將是存儲在數據庫中,並且它的哈希將被生成。「
請注意細微差異。
可以說1已經被添加到數據庫中,2的檢查將不起作用,因爲他們的SHA1哈希會有很大的不同。
一個明顯的解決方案是使用Leveinstein距離或difflib遍歷所有已經添加的文本字段,以精確到來自MySQL表的匹配。
但這不是面向性能的。 有一個很好的散列算法,它與文本內容有關聯嗎?即爲非常相似的文本生成的兩個散列本身將非常相似。
這樣,在將它們添加到MySQL表中之前,可能會更容易檢測到可能的重複項。