首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成唯一的ID(检查与否)?

生成唯一的ID(检查与否)?
EN

Stack Overflow用户
提问于 2012-09-22 13:03:31
回答 2查看 535关注 0票数 2

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

例如:

代码语言:javascript
复制
http://www.youtube.com/watch?v=-JVkaMqD5mI&feature=related

我说的是-JVkaMqD5mI部分。( length=11)

让我们计算以下选项:

代码语言:javascript
复制
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)。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-22 13:25:42

嗯,仅仅是因为他们在视频中使用了字母数字ID,并不意味着他们只是随机地生成这些字符。就因为这个字符串看起来像随机垃圾,我向你保证,它不是随机的,里面隐藏着很多信息。

所以快速回答:不,产生一个随机的字母序列是不可能的,那么要么是希望没有碰撞,要么是( b)检查可能有数十亿条记录,看看你是否已经有了。

保留一个中央“最后使用的ID”要容易得多,并且有一个从“最后使用的ID”到“下一个使用的ID”的算法,在数学上保证生成以前未使用的ID。最后一次使用的ID是150,下一个将是151。但你可以设计自己的公式来满足你的需要。

票数 6
EN

Stack Overflow用户

发布于 2012-09-22 13:11:04

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

哈希函数并不像它们看上去那么简单。它们背后可能有一种严肃的数学方法,您可以尝试证明它们是完美的或极小的完美(这对本例来说并不重要)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12544006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档