2

考虑 youtube 视频网址(例如):

例如:

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)的机会

这种情况的最佳实践解决方案是什么?

4

2 回答 2

6

好吧,仅仅因为他们在视频上使用字母数字 ID,并不意味着他们只是随机生成这些字符。仅仅因为该字符串对您来说看起来像是随机垃圾,我向您保证它不是随机的,并且其中隐藏了很多信息。

这么快的回答:不,生成一个随机的字母序列是不可行的,然后要么a)希望没有冲突,要么b)检查可能数十亿的记录,看看你是否已经有了。

更容易保持一个中央“使用的最后一个 ID”,并有一个算法从“使用的最后一个 ID”移动到“下一个要使用的 ID”,以数学上保证生成以前未使用的 ID 的方式。对于顺序 ID 编号,公式只是f(n+1) = f(n)+1 (例如,最后使用的 ID 是 150,下一个将是 151.. 保证到目前为止未使用),但您可以设计您的自己的公式,以满足您的需求。

于 2012-09-22T13:25:42.700 回答
0

出于这些目的,通常使用称为散列函数的东西。它从一些其他数据创建固定长度的数据或字符串,这些数据可以是任何给定的长度或类型。它为此使用了一些算法。一个例子是你给出的那个,将字母编码为数字。

散列函数并不像看起来那么简单。它们背后可能有一种严肃的数学方法,您可以尝试证明它们是完美的或最小完美的(这对于这个例子并不重要)。

完美函数是一个散列函数,它不能为任何两个不同的输入生成相同的输出。如果您有这种散列函数,则不必检查重复项。如果你想这样做,你必须证明你的哈希函数是完美的。

于 2012-09-22T13:11:04.840 回答