您应该使用哪个版本的UUID?我看到了很多解释每个版本需要什么的线程,但我很难弄清楚什么是最适合什么应用程序。
发布于 2014-10-15 23:55:55
如果你想要一个随机数,使用一个随机数库。如果你想要一个唯一的标识符,在这里有效地0.00...many更多的0...001%的机会冲突,你应该使用UUIDv1。请参阅尼克在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)
发布于 2021-06-08 18:57:41
因为还没有提到:如果您希望能够按创建时间对实体进行排序,而不需要单独的显式时间戳,则可以使用uuidv1
。虽然这不是100%精确的,在许多情况下也不是最好的方法(由于缺乏显性),但在某些情况下,例如当您使用Cassanda数据库时,它会很方便。
https://stackoverflow.com/questions/20342058
复制相似问题