考虑youtube视频网址(例如):
e.g。 :
http://www.youtube.com/watch?v=-JVkaMqD5mI&feature=related
我在谈论-JVkaMqD5mI
部分。 (长度= 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时,他们是否仍会检查是否已存在?
我确定他们有一些“已经生成的ID ”的列表(数据库或缓存)...(如果他们这样做,他们每次都会获取数据库吗?或者在缓存中?或者...?)
或者他们是否依赖1.355252...e-20
几乎0
的机会。(但仍然!= 0)
针对这种情况的最佳实践解决方案是什么?
答案 0 :(得分:6)
嗯,仅仅因为他们在视频上使用字母数字ID,并不意味着他们只是随意生成这些字符。只是因为那个字符串看起来像随机垃圾,我向你保证它不是随机的,那里隐藏着很多信息。
如此快速的答案:不,生成一个随机的字母序列是不可行的,a)希望没有碰撞,或b)检查可能的数十亿条记录,看看你是否已经有了。
更容易保持中心“使用的最后一个ID”并且具有从“使用的最后一个ID”移动到“使用下一个ID”的算法,其方式在数学上保证生成先前未使用的ID。在顺序ID号的情况下,公式只是 f(n + 1)= f(n)+1 (例如,使用的最后一个ID是150,下一个将是151 ..保证未使用所以远)但你可以设计自己的公式来满足你的需求。
答案 1 :(得分:0)
出于这些目的,通常使用称为散列函数的东西。它从一些其他数据创建固定长度的数据或字符串,可以是任何给定的长度或类型。它使用了一些算法。一个例子是你提供的一个例子,将字母编码为数字。
散列函数并不像看起来那么简单。它们背后可能有一种严肃的数学方法,你可以尝试证明它们是完美的或最小的完美(这对于这个例子来说并不重要)。
完美函数是一个哈希函数,它不能为任何两个不同的输入生成相同的输出。如果您有这种哈希函数,则不必检查重复项。如果你想这样做,你必须证明你的哈希函数是完美的。