使用哪个UUID版本?

 回__复卷轴 发布于 2023-02-13 12:26

你应该使用哪个版本的UUID?我看到很多线程解释了每个版本的含义,但是我无法弄清楚哪些应用程序最适合.

3 个回答
  • 这是一个非常普遍的问题.一个答案是:"这取决于您希望生成什么样的UUID".但更好的是:"好吧,在我回答之前,你能否告诉我们为什么你需要编写自己的UUID生成算法,而不是调用大多数现代操作系统提供的UUID生成功能?"

    这样做更容易,更安全,因为你可能并不需要生成自己,何苦编码了一个实现?在这种情况下,无论您的O/S,编程语言或框架提供什么,答案都会变得有用.例如,在Windows中,有CoCreateGuid或UuidCreate或者正在使用的众多框架中提供的各种包装器之一.在Linux中有uuid_generate.

    如果您出于某种原因,绝对需要生成自己的,那么至少要有远离生成v1和v2 UUID 的良好意识.让这些正确,这很棘手.相反,坚持使用v3,v4或v5 UUID.

    更新:在评论中,您提到您正在使用Python并链接到此.通过提供的界面查看,最简单的选择是通过调用生成v4 UUID(即从随机数据创建的UUID)uuid.uuid4().

    如果您有一些数据需要(或可以)散列以生成UUID,那么您可以使用v3(依赖于MD5)或v5(依赖于SHA1).生成v3或v5 UUID很简单:首先选择要生成的UUID类型(您应该选择v5),然后选择适当的命名空间并使用您要用于生成UUID的数据调用该函数.例如,如果要哈希一个URL,您将使用NAMESPACE_URL:

    uuid.uuid3(uuid.NAMESPACE_URL, 'https://ripple.com')

    请注意,此UUID将与同一URL的v5 UUID不同,后者生成如下:

    uuid.uuid5(uuid.NAMESPACE_URL, 'https://ripple.com')

    v3和v5 URL的一个很好的属性是它们应该在实现之间可以互操作.换句话说,如果两个不同的系统正在使用符合RFC4122的实现,如果所有其他事物都相同,它们将(或至少应该)生成相同的UUID(即生成相同的版本UUID,具有相同的命名空间和相同的数据).在某些情况下(特别是在内容可寻址的存储方案中),此属性非常有用,但可能不在您的特定情况下.

    2023-02-13 12:28 回答
  • 有两种不同的生成UUID的方法.

    如果您只需要一个唯一的ID,则需要版本1或版本4.

    版本1:这将根据网卡MAC地址和计时器生成唯一ID.这些ID很容易预测(给定一个,我可以猜测另一个)并且可以追溯到您的网卡.不建议创建这些.

    版本4:这些是从随机(或伪随机)数字生成的.如果您只需要生成UUID,这可能就是您想要的.

    如果您需要始终从给定名称生成相同的UUID,则需要版本3或版本5.

    版本3:这将从命名空间和名称的MD5哈希生成唯一ID.如果您需要向后兼容性(使用另一个从名称生成UUID的系统),请使用此选项.

    版本5:这将从命名空间和名称的SHA-1哈希生成唯一ID.这是首选版本.

    2023-02-13 12:28 回答
  • 如果需要随机数,请使用随机数库.如果你想要一个有效0.00的唯一标识符...这里有更多的0 ...碰撞的概率为001%,你应该使用UUIDv1.请参阅Nick的UUIDv3和v5的帖子.

    UUIDv1不安全.它并不意味着.它意味着独特,不可猜测.UUIDv1使用当前时间戳,加上一个机器标识符,再加上一些随机的东西来制作一个永远不会再被该算法生成的数字.这适用于交易ID(即使每个人都在进行数百万次交易).

    说实话,我不明白为什么UUIDv4存在...从阅读RFC4122,看起来该版本不会消除碰撞的可能性.它只是一个随机数发生器.如果这是真的,那么世界上两台机器的机会很大,最终会创建相同的"UUID"v4(引用因为没有保证U.niversal U.niqueness的机制).在那种情况下,我不认为该算法属于描述生成唯一值的方法的RFC.它属于关于生成随机性的RFC.对于一组随机数:

    chance_of_collision = 1 - (set_size! / (set_size - tries)!) / (set_size ^ tries)
    

    2023-02-13 12:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有