考虑到youtube视频网址(例如):
例如:
http://www.youtube.com/watch?v=-JVkaMqD5mI&feature=related我说的是-JVkaMqD5mI部分。( length=11)
让我们计算以下选项:
a-z = 26 |
A-Z = 26 |_______ > 26+26+10+2 = 64 optional chars in 11 places = 64^11 = 73786976294838206464
0-9 = 10 |
-_ = 2 |我仍然在想,当他们为一个新的视频生成一个新的ID,他们是否仍然检查是否已经存在?
我敢肯定,他们有一些列表( db或缓存)的“已经生成的ID”.(如果他们这样做,他们是否每次提供数据库?还是藏在缓存里?还是.?)
还是他们依赖于几乎是1.355252...e-20的机会(但还是!=0)。
这种情况下的最佳实践解决方案是什么?
发布于 2012-09-22 13:25:42
嗯,仅仅是因为他们在视频中使用了字母数字ID,并不意味着他们只是随机地生成这些字符。就因为这个字符串看起来像随机垃圾,我向你保证,它不是随机的,里面隐藏着很多信息。
所以快速回答:不,产生一个随机的字母序列是不可能的,那么要么是希望没有碰撞,要么是( b)检查可能有数十亿条记录,看看你是否已经有了。
保留一个中央“最后使用的ID”要容易得多,并且有一个从“最后使用的ID”到“下一个使用的ID”的算法,在数学上保证生成以前未使用的ID。最后一次使用的ID是150,下一个将是151。但你可以设计自己的公式来满足你的需要。
发布于 2012-09-22 13:11:04
为此,通常使用名为散列函数的东西。它从其他数据创建一个固定长度的数据或字符串,这些数据可以是任意给定的长度或类型。它使用了一些算法。一个例子是你给的那个,把字母编码成数字。
哈希函数并不像它们看上去那么简单。它们背后可能有一种严肃的数学方法,您可以尝试证明它们是完美的或极小的完美(这对本例来说并不重要)。
完美函数是一个哈希函数,它不能为任何两个不同的输入生成相同的输出。如果您有这种哈希函数,则不需要检查副本。如果你想这样做,你必须证明你的哈希函数是完美的。
https://stackoverflow.com/questions/12544006
复制相似问题