首页 > 解决方案 > 外键的 UUID

问题描述

为什么将 UUID 用作主键?它们需要大量内存来存储。据我了解,它们被用作主键,因为每个生成的值都是唯一的,这在合并 2 个数据库时很有帮助,因为不会发生冲突。

如果 UUID 用于 API 端点猜测的隐私,为什么不使用 ID、数据库编号。然后使用它作为主键对它们进行散列?然后ID可以用于关系,很方便。ID 和数据库编号的哈希值。可以用于primary_key,使用ID查找数据条目也比UUID快。

标签: mysqlsqldatabase

解决方案


通用唯一 ID (UUID) 主要用于:

  • 在各种系统中生成标识符而不需要与中央机构协调(例如数据库服务器中的序列号生成器)。
  • 在系统之间共享数据记录,例如联合数据库,没有冲突的风险。

据我所知,您关于 API 端点猜测隐私的观点最初并不是设计目标。但考虑到当代基于 URL 的访问方法,它可能是另一个特性。

UUID 实际上是一个128 位的值。不要将其与通常用于向人类显示的 36 个字符的十六进制字符串混为一谈。

对于支持 UUID 作为数据类型的数据库,例如 Postgres,使用 UUID 数据类型的键使用的内存和存储空间是 64 位整数序列号的两倍,或者是 32 位整数(40 亿范围)的四倍),这是代理键的通常其他选择。这是否是“很多”是每个数据库设计人员需要做出的判断。鉴于现代计算硬件中内存和存储空间的价格低廉且易于使用,我通常认为 UUIDS 的好处非常值得额外的内存/存储。

如果您需要通用唯一 ID,请使用通用唯一 ID (UUID)。无需自己发明。


推荐阅读