Mysql 网络PK,自动增量vs UUID风格,哪一种更好,为什么?

Mysql 网络PK,自动增量vs UUID风格,哪一种更好,为什么?,mysql,primary-key,uuid,Mysql,Primary Key,Uuid,autoincrement和UUID样式之间的真正区别是什么 我认为汽车公司和uuid很容易被破解 Uuid在一个有太多记录的查询中比autoincrement慢,但有很大的区别吗?增量ID本身并不“容易破解”,它只提供了模糊(但不完全隐藏)的入口点当你使用一个大的随机ID时,仍然需要一个糟糕的实现和可利用的软件,这才是真正的危险。正如您在地址栏的URL中所看到的,这个站点使用增量ID没有任何问题 不过,除了安全考虑之外,当您不希望用户轻易猜测其他(尽管是公共)内容的URL时,随机唯一ID有时也

autoincrement和UUID样式之间的真正区别是什么

我认为汽车公司和uuid很容易被破解

Uuid在一个有太多记录的查询中比autoincrement慢,但有很大的区别吗?

增量ID本身并不“容易破解”,它只提供了模糊(但不完全隐藏)的入口点当你使用一个大的随机ID时,仍然需要一个糟糕的实现和可利用的软件,这才是真正的危险。正如您在地址栏的URL中所看到的,这个站点使用增量ID没有任何问题

不过,除了安全考虑之外,当您不希望用户轻易猜测其他(尽管是公共)内容的URL时,随机唯一ID有时也很有用。例如,在房地产网站上,您可能不想提供在ID中“上下”查看竞争对手条目的可能性,即使他们可以通过搜索找到所有条目。一点阻碍可能是一件好事

为什么不两者都用呢?一个数字自动递增键,用于索引和关系中的速度;用于外部访问的随机UID。

一些想法:

  • auto inc:DB确保uniq ID,但您必须检索它,否则将失去与刚才插入的数据记录的“联系”
  • UUID:必须在“外部”创建(不在db server中,可以在app server中)。ID是已知的,并且存在指向插入记录的链接,但(非常小,取决于uuid的uuid属性)在插入时存在冲突风险

从关系模型的角度来看,主键非常重要

  • 必须快速检查唯一性
  • 在其他表中用作外键
  • 过去加入
PK越小越好。这就是为什么数值PK是最好的

如果您担心很容易“破解”,那么可以添加一个额外的UUID作为自然密钥

  • 仅用于“直接访问”行

这就是我在几个项目中所看到的,它非常有魅力。

注意你的PK专栏的长度。。。UUID和GUI非常长。。。串。 INT或甚至BIGINT自动激励列可以在更小的空间中确保唯一性

请注意,autoincement列在表管理方面也有一些问题。如果截断/删除create tables,则很难维护自动增量。 而且,在MySQL中,单个表只允许有一个自动增量列


如果您的数据允许,请使用从数据派生的某种散列来编制索引和提高性能。

是的,我想这就是我要寻找的答案,因此,解决方案是在DB上下文中使用auto inc PK,并在外部上下文中使用UUID密钥。我有这样的困境,因为如果我有一个像domain.com/tickets?id=1这样的链接来显示某事物的票证,任何人都可以尝试更改id以访问所有内容,因为这是可预测的是。但是请注意,最终的解决方案是使用身份验证并禁止访问基于某些权限方案不允许的票证。UUID也不是真正用于安全的。但是IMHO,一个UUID来识别现实世界中的票证,一个数据库的数字PK无论如何都是有用的。是的,我想我会这样做,使用两者,实际上我会像往常一样使用auto inc,但对于用户,我们将使用base36散列id,正如我之前所说,我的问题是,我们需要给用户一个链接来访问他们的票证,因此,如果我使用domain.com/tickets?id=1是非常可预测的: