【发布时间】:2011-12-10 05:21:15
【问题描述】:
我有一个独特的情况,我需要即时生成哈希。这是我的情况。这个问题与here 有关。我需要在需要索引的数据库中存储许多 url。 URL 的长度可以超过 2000 个字符。数据库抱怨无法索引超过 900 字节的字符串。我的解决方案是使用 MD5 或 SHA256 对 URL 进行哈希处理。我不确定要使用哪种散列算法。这是我的要求
- 字符长度最短,冲突最小
- 需要非常快速。我将在每个页面请求上对引荐网址进行哈希处理
- 冲突需要最小化,因为我的数据库中可能有数百万个网址
我不担心安全问题。我担心字符长度、速度和碰撞。有人知道这方面的好算法吗?
【问题讨论】:
-
你对这些 URL 做了什么?
-
Git 使用 SHA1,它比简单的 url 散列更多的数据。我会选择 SHA1,你真的不需要 SHA2。
-
url 将存储在数据库中,没有索引。我将使用 has 值来搜索给定的 url。但该网址将用于在给定网页上生成链接。
-
“最短的字符长度,最小的冲突”——作为一个要求,这并没有什么意义。假设一个“完美”的散列函数,碰撞的概率将与散列长度成反比。您需要将哈希长度和您期望在数据库中拥有多少个 URL 插入生日悖论公式,以获得碰撞概率并判断这是否“足够低”。
-
您说您需要快速,但听起来您正在获取网页。任何网络往返都将比散列短字符串慢几个数量级。