1

我将 URL 保存在数据库中,当我插入一个新 URL 时,我想检查该 url 是否已存在于数据库中。

一种常见的做法(如果我没记错的话)是使用 md5 或 sha-1 等对 url 进行哈希处理......并在插入新字段之前检查数据库中的该字段是否重复。

我知道 md5 会产生碰撞,sha-1 也...

你对我有什么建议?我的需求是:

  • 数据库大小:数据库上最终有 10 到 20 百万条记录

  • 性能/速度:小哈希大小,因此数据库不会对重复项进行繁重的负载检查(该字段当然会有索引)

  • 容忍度:我不在乎每 100,000 条记录是否有 1 次碰撞。我的需求更多的是性能(小哈希)而不是 0% 冲突(大哈希)。

  • 恶意 URL 攻击以故意产生冲突的可能性:极低

  • 在这种成功攻击的情况下可能造成的最大伤害:极低

问题:

  • 你相信 md5 就足够了吗(有更好的建议)?

  • 也许 md5 对我来说甚至是矫枉过正,我真的可以通过使用更简单的东西来获得性能优势?

提前谢谢你们!

4

1 回答 1

0

使用 md5 或一些类似的相对便宜的哈希(可能是Quark?),以及在极少数情况下冲突检查匹配条目的完整 URL 怎么样?这样,大多数时候您只需进行廉价的哈希检查,但您也从未实际插入重复的 URL。

于 2011-09-13T00:27:46.173 回答