PK for web,自动增量vs UUID风格,这更好,为什么?

时间:2010-03-04 09:46:40

标签: mysql primary-key uuid

每个人之间的真正差异是什么?

我认为auto inc很容易被黑客攻击

Uuid在有多个记录的查询中比自动增量慢,但它有很大的不同吗?

4 个答案:

答案 0 :(得分:3)

从关系模型

的角度来看,主键非常重要
  • 必须快速检查唯一性
  • 在其他表中用作外键
  • 用于加入

PK越小越好。这就是数字 PK最好的原因。

如果你担心它很容易“破解”,你可以添加一个额外的UUID作为自然键

  • 仅用于“直接访问”行

这就是我在几个项目中看到的,它就像一个魅力。

答案 1 :(得分:1)

一些想法:

  • auto-inc:DB保证uniq ID,但您必须检索它或丢失与刚刚插入的数据记录的“联系”。
  • UUID:必须在“外部”创建(不在数据库服务器中,可以在app-server中)。 ID已知并且插入记录的链接存在,但(非常小,取决于uuid的uuid-ness)插入时的碰撞风险。

答案 2 :(得分:0)

增量ID本身并不“易于破解”,它只是提供了在使用大随机ID时被遮挡(但并非完全隐藏)的入口点。仍然需要严格执行和可利用的软件才能产生真正的危险。正如您在地址栏中的URL中所看到的,此站点使用增量ID而没有任何问题。

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

为什么不同时使用?一种数字自动增量键,用于索引和关系的速度;外部访问的随机UID。

答案 3 :(得分:0)

照顾PK列的LENGTH ... UUID和GUID非常长...字符串。 INT或甚至BIGINT自动上链列可以在更小的空间内确保唯一性。

请注意,自动启动列在表管理方面存在一些问题。如果截断/删除创建表,则很难维护自动增量。 另外,MySQL中只允许一个自动增量列用于单个表。

如果您的数据允许,请使用从数据中派生的某种HASH进行索引和性能。