• UUID会出现重复的情况吗?
  • 发布于 2个月前
  • 385 热度
    0 评论
  • 冰魄
  • 0 粉丝 39 篇博客
  •   
认识 UUID
UUID 是 16 字节 128 位长的数字,通常以 36 字节的字符串表示,示例如下:
3F2504E0-4F89-11D3-9A0C-0305E82C3301(其中的字母是 16 进制表示,大小写不敏感)
1.时间戳+UUID 版本号,分三段占前 16 个字符 (60bit+4bit),
2.Clock Sequence 号与保留字段,占 4 个字符 (13bit+3bit),
3.节点标识占后 12 个字符 (48bit)。


UUID 会耗尽吗

UUID 是一个 128 比特的数字,意味着 UUID 的总数量为 $2^{128}$ 个,如果每纳秒产生 1 兆个不相同的 UUID,需要花费超过 100 亿年才会用完所有的 UUID。


UUID 性能如何

UUID 不需要集中式管理,单机即可生成 UUID 不需要其他依赖,并且每台机器每秒钟可以生成超过 1000 万个 UUID。


UUID 会重复吗
UUID 的总量虽然巨大,但是如果不停地使用,假设每纳秒生成超过 1 兆个 UUID 并且人类有幸能够繁衍到 100 亿年以后,总会有可能产生重复的 UUID。
那么,怎么计算 UUID 的碰撞几率呢?这是一个数学问题,可以使用比较著名的生日悖论解决,感兴趣的可以看下图的证明过程,这里直接放结论了:
1.103 万亿个 UUID 中找到重复项的概率是十亿分之一
2.要生成一个冲突率达到 50% 的 UUID 至少需要生成 $2.71 * 1000000^3$ 个 UUID

UUID 的应用场景

UUID 的数据类型是字符串,凭借其高性能、本地生成的特性,非常适合做 request_id、trace_id。


Go 项目使用 UUID

Go 项目可以使用 github.com/google/uuid 库来生成 UUID。


Mac 终端生成 UUID
在终端输入 uuidgen 命令即可。
用户评论