在 Java 项目中使用 UUID 而不是 ID

87 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 24 天,点击查看活动详情

什么是UUID

UUID 只是一种特定类型的 ID。UUID 代表通用唯一标识符,它是一种 128 位格式,用于在近年来流行的代码中创建 ID,尤其是在涉及数据库密钥时。

通过使用 UUID,您可以确保您的 ID 不仅在单个数据库表的上下文中是唯一的,而且在整个宇宙中也是唯一的。世界上没有其他 ID 应该与您的价值相匹配。

为什么要使用 UUID?

益处

  • 它们在每个表、每个数据库和每个服务器中都是唯一的
  • 它们允许轻松合并来自不同数据库的记录
  • 它们允许跨多个服务器轻松分布数据库
  • 您可以在任何地方生成 UUID,包括前端和后端

缺点

  • 调试起来可能很麻烦where userid='{bc2d0f53-5041-46e8-a14c-267875a49f0c}’
  • 它比传统的 4 字节索引值大 4 倍,如果您不小心,这可能会对性能和存储产生严重影响。

UUID格式

UUID 由 32 个十六进制(base-16)数字组成,分为五个部分。如果你看一下这个例子,bc2d0f53-5041-46e8-a14c-267875a49f0c. 这些部分以 8-4-4-4-12 的形式分解。加上四个连字符,一共是 36 个字符。UUID 通常也以小写字母显示。

UUID 与 ID

所有的UUID都是ID,但不是所有的ID都是UUID。UUID 是一种特定类型的 ID,其格式如下bc2d0f53-5041-46e8-a14c-267875a49f0c:常见的 ID 形式包括:

  • 整数 0、1、2、3 等
  • 字符串 - 预定义的字符串,如command_loadingcommand_receivedcommand_validated

image.png

UUID 和 ID 之间的另一个重要区别是可预测性。假设我们有 RestFull 应用程序,由于 ID 的简单性,我们(客户端)可以猜出一些不适合我们的资源的正确性。

例如,如果我们打算使用此 URL 查看 ID 为 15 的产品: https:
//demo.com/api/product/15

由于顺序 ID,我可以通过在我的前面输入一个 ID 来猜测目录中的上一个产品:https:
//demo.com/api/product/14

使用这样的 UUIDbc2d0f53-5041-46e8-a14c-267875a49f0c是不可能猜测我们系统中的上一个和下一个产品或数据的。这是 UUID 提供的非常好的安全性。

结束语

重要的是要注意,虽然 UUID 与另一个 UUID 发生冲突的概率不是零,但 实际上是零。碰撞的可能性如此低,担心它是荒谬的。