数据库中的唯一ID

时间:2011-07-31 20:41:08

标签: mysql database nosql

我经常看到网站中的网址ID如下所示: http://battlelog.battlefield.com/bf3/forum/view/2811510711334022807/ 他们是如何做到这一点的?这不是常规的自动增量场。所有ID似乎都是随机的,但是固定宽度。有什么好处?

2 个答案:

答案 0 :(得分:3)

一种方法是将一个真实的id(即auto_increment)隐藏在一个随机的大数字中。例如:

  • 第一个数字显示真实身份证开始的位置
  • 第二个数字显示长度
  • 真实身份证位于前两点确定
  • 其他一切都是预定长度的随机数

其他选项包括:

  • UUID - 您的示例似乎没有使用,但它是通用的唯一标识符,有时也会使用。
  • snowflake - twitter的新id生成方法(或类似的东西)

请注意,这里有两个重要方面:

  • 不要让用户轻易猜出ID - 这是由我的例子处理的。但是,如果存在受保护的资源,除了不可识别的ID
  • 之外,还要使用安全检查来保护它们
  • 提供群集范围内的唯一ID(UUID,雪花等),以确保ID在整个计算机群集中是唯一的。

答案 1 :(得分:0)

诸如此类的GUID / UUID使得更难以猜测什么是有效的ID号而不是有效的ID号。除非您有10 ^ 18个用户,否则与无效ID相比,有效ID将非常稀疏。