Google网址缩减器如何生成唯一哈希,其中包含五个字符没有冲突。似乎必然存在冲突,其中不同的URL生成相同的哈希值。
stackoverflow.com => http://goo.gl/LQysz
同样有趣的是,相同的URL,每次都会生成完全不同的哈希:
stackoverflow.com => http://goo.gl/Dl7sz
所以,做一些数学运算,使用小写字符,大写字符和数字,组合的总数是62 ^ 5 = 916,132,832
明确的碰撞必然会发生。
Google如何做到这一点?
答案 0 :(得分:8)
他们有一个数据库,可以跟踪所有以前生成的URL以及每个URL映射到的较长URL。很容易确保该表中不存在新生成的URL。扩展有点棘手(它们肯定有多个服务器,因此每个服务器都需要分配一堆值,以便向用户提供)。如果他们达到生成916,132,832个URL的程度,他们就会添加另一个角色。
答案 1 :(得分:0)
他们有一个哈希表,其中要哈希的网址。
计算该表中的行数,并使用流密码对其进行加密,然后使用base62进行编码。
使用流密码而不是哈希将为您提供简短的伪随机输出,该输出不会与任何先前的输出发生冲突,因此您无需检查表。
答案 2 :(得分:-2)
它会跟踪以前使用的长网址。这意味着,当有人去创建一个简短的URL时,如果他们指向的地方已经有一个短URL,它只会给他们预先存在的短URL。
实际上,拥有一个专门用于根据给定数据集创建“哈希”的系统是低效的。相反,短URL只是一组随机字符,已经被识别为十位数字,加上26个小写字母,加上26个大写字母= 916132832个排列(不是组合)。随机短URL是使其工作的最有效方式,这就是为什么它们总是不同的(虽然我认为算法中可能有一些其他组件,如一天中的时间,但我不认为这是值得的。 ......让它变得那么复杂是没有意义的;花费所有处理能力只是为了制作一个愚蠢的5个字符串,任何猴子都可以通过在排列计算器上按正确的方式按钮来完成。