1

我想生成一个 uuid,它应该用作跨不同系统/数据库的唯一标识符。我阅读了这些示例,但我不明白如何确定生成的 id 在不同的系统和数据库中是唯一的。

我希望你能在这里帮助我。

最好的祝福

4

1 回答 1

2

UUID背后的想法是 - 取决于它们的生成方式 - 有这么多可以用 122 位*表示的值,以至于意外碰撞的可能性 - 再次,取决于它们的生成方式 - 非常非常,非常,非常,非常,非常,非常,非常,很小。

UUID 版本 4(Leach-Salz Random)的 Wikipedia 摘录:

换句话说,仅在接下来的 100 年每秒生成 10 亿个 UUID 之后,仅创建一个副本的概率约为 50%。如果地球上每个人都拥有 6 亿个 UUID,那么出现重复的概率约为 50%。

...但是,这些概率仅在使用足够熵生成 UUID 时才成立。

当然,还有其他的 UUID 生成方案和“众所周知的 GUID”,并非所有这些都适合“全局唯一”使用。(此外,由于插入时出现碎片,非专用 UUID 往往不适用于主键/集群键:SQL Server 有NEWSEQUENTIALID来帮助解决这个问题。)

快乐编码。


* UUID 中最多有 128 位,但是某些 UUID 版本在内部使用了一些位。我不知道 boost 使用什么,但我怀疑它也是 UUIDv4。

于 2011-11-09T09:39:07.557 回答