【发布时间】:2011-12-25 03:50:24
【问题描述】:
我想生成一个 uuid,它应该用作跨不同系统/数据库的唯一标识符。我阅读了这些示例,但我不明白如何确定生成的 id 在不同的系统和数据库中是唯一的。
希望你能帮帮我。
最好的问候
【问题讨论】:
标签: c++ database boost uuid boost-uuid
我想生成一个 uuid,它应该用作跨不同系统/数据库的唯一标识符。我阅读了这些示例,但我不明白如何确定生成的 id 在不同的系统和数据库中是唯一的。
希望你能帮帮我。
最好的问候
【问题讨论】:
标签: c++ database boost uuid boost-uuid
UUID 背后的想法是 - 取决于它们的生成方式 - 有 如此多的值 可以用 122 位* 表示,意外 em> 碰撞——同样,取决于它们是如何产生的——非常、非常、非常、非常、非常、非常、非常、非常、很小。
UUID 版本 4(Leach-Salz 随机)的维基百科摘录:
换句话说,仅在接下来的 100 年每秒生成 10 亿个 UUID 之后,仅创建一个副本的概率约为 50%。如果地球上每个人都拥有 6 亿个 UUID,那么出现重复的概率约为 50%。
...但是,这些概率仅在使用足够熵生成 UUID 时才成立。
当然,还有其他 UUID 生成方案和“众所周知的 GUID”,并非所有这些都适合“全局唯一”使用。 (此外,由于插入时出现碎片,非专用 UUID 往往不适用于主键/集群键:SQL Server 有 NEWSEQUENTIALID 来帮助解决这个问题。)
编码愉快。
*UUID 中最多有 128 位,但是某些 UUID 版本在内部使用一些位。我不知道 boost 使用什么,但我怀疑它也是 UUIDv4。
【讨论】: