考虑(例如)YouTube视频网址:
例如:
http://www.youtube.com/watch?v=-JVkaMqD5mI&feature=related
我说的是-JVkaMqD5mI
部分。 (长度= 11)
让calc下的选项:
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的 ”的(DB或缓存)...(如果他们这样做,他们做的AQUIRE分贝每一次?或者缓存?还是...?)
还是他们依靠1.355252...e-20
的机会几乎是0
。(但仍然!= 0)
什么是这种情况的最佳实践解决方案?
那么,仅仅是因为他们使用的是在影片上的字母数字ID,并不意味着他们仅仅是随机生成的字符。 正因为这个字符串看起来像随机的垃圾给你我向你保证,这不是随机的,有大量的隐藏在那里的信息。
这么快的回答:不,它不是feasable生成的字母随机序列然后要么一)没有冲突的希望或b)通过可能是数十亿条记录检查,看看是否你已经有了。
更容易保持一个中心“上次使用ID”,并有来自于以数学方式保证产生一个以前未使用的ID的方式“下一个ID用”“上次使用的ID”移动的算法。 在顺序ID号的情况下,式仅仅是F(N + 1)= F(N)+1(用于例如。最后一个ID为150,下一个将是151 ..保证未使用迄今),但是可以设计出的自己的公式,以满足您的需求。
对于这些目的,通常叫做使用的哈希函数。 它创建从某些其他数据,其可以是任何给定的长度或类型的固定长度的数据或字符串。 它使用某种算法为。 一个例子是,你给了一个,编码字母数字。
哈希函数并不像看起来那么简单。 可以有他们背后一个严重的数学方法,你可以试图证明他们是完美的或最小完美(这是不是在这个例子中是重要的)。
一个完美的功能是哈希函数不能生成任何两个不同imputs相同的输出。 如果你有那样的散列函数,你不必重复检查。 如果你想做到这一点,你必须证明你的哈希函数是完美的。