【问题标题】:boost::uuid / unique across different databasesboost::uuid / 在不同数据库中唯一
【发布时间】:2011-12-25 03:50:24
【问题描述】:

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

希望你能帮帮我。

最好的问候

【问题讨论】:

    标签: c++ database boost uuid boost-uuid


    【解决方案1】:

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-29
      • 2014-08-13
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 2021-10-26
      相关资源
      最近更新 更多