UUID 生成器 常见问题
Q: 什么是 UUID?
UUID(Universally Unique Identifier,通用唯一标识符)是一个 128 位的数字,用于在计算机系统中唯一标识信息。UUID 通常以 32 个十六进制数字加上连字符的方式展示,例如 550e8400-e29b-41d4-a716-446655440000。这个格式的标准定义在 RFC 9562 中。UUID 的核心特点是:它可以在不需要中央协调机构的情况下,由任何系统独立生成,并且在全球范围内的重复概率低到几乎可以忽略。使用我们的免费 UUID 生成器可以即时生成各种版本的 UUID。
Q: UUID 和 GUID 有什么区别?
从技术角度讲,两者之间没有任何区别。UUID(Universally Unique Identifier)是 IETF 标准中使用的术语,而 GUID(Globally Unique Identifier)是微软对同一事物的命名。它们都是 128 位的值,遵循相同的格式,实现方式也完全一致。在日常开发中,这两个词可以互换使用。使用我们的 UUID 生成器可以同时用于生成 UUID 和 GUID。
Q: 我应该使用哪个版本的 UUID?
版本的选择取决于你的具体使用场景。UUID v4(纯随机 UUID)是最简单、最通用的版本,无需任何协调即可在任何地方生成,适合大多数不需要排序的场景。UUID v7(基于时间排序的 UUID)是 RFC 9562(2024 年发布)中新标准化的版本,使用 48 位 Unix 毫秒级时间戳作为前缀,后面跟随机位。由于值是按照时间大致有序的,v7 在作为数据库主键时对 B-tree 索引非常友好,推荐在数据库主键场景中使用。UUID v1 基于 MAC 地址和时间戳,由于会泄露生成主机的 MAC 地址和生成时间,存在隐私风险,现在已很少使用。
Q: UUID v4 真的会不重复吗?
从数学上讲,UUID v4 的重复概率不是严格为零,但在实践中无限接近零。UUID v4 使用 122 个随机比特和 6 个固定比特,总共有 2 的 122 次方(约 5.3 乘以 10 的 36 次方)种可能的值。根据生日悖论,要使得发生碰撞的概率达到 50%,大约需要生成 2.71 乘以 10 的 18 次方个 UUID。这个数字是如此之大,以至于即使每秒生成 10 亿个 UUID,也需要 85 年才能达到这个碰撞概率。因此,在实际应用中,UUID v4 的重复可以被视为不可能发生的事件。
Q: UUID 适合用作数据库主键吗?
可以,但需要注意版本选择。传统的自增 ID 在分布式系统中存在明显的局限性:多个数据库实例生成的 ID 会冲突,扩容和合库非常困难。UUID 解决了这个分布式唯一性问题,但也带来了新的挑战。UUID v4 由于是完全随机的,用作 B-tree 索引的主键时会导致严重的页面分裂和索引碎片化,对写入性能影响很大。UUID v7 通过在时间戳前缀上大致有序,显著缓解了这一问题,是目前最适合用作数据库主键的 UUID 版本。使用我们的 UUID 生成器可以批量生成任意版本的 UUID 用于数据库测试。