我想生成一个 uuid,它应该用作跨不同系统/数据库的唯一标识符。我阅读了这些示例,但我不明白如何确定生成的 ID 在不同的系统和数据库中是唯一的。
我希望你能帮我解决这个问题。
最好的问候
最佳答案
UUID背后的想法是 -- 取决于它们是如何生成的 -- 有 这么多的值 可以用 122 位*表示,意外 碰撞的可能性 -- 再次,取决于如何它们是生成的——非常、非常、非常、非常、非常、非常、非常、小。
UUID 版本 4(Leach-Salz 随机)的维基百科摘录:
In other words, only after generating 1 billion UUIDs every second for the next 100 years, the probability of creating just one duplicate would be about 50%. The probability of one duplicate would be about 50% if every person on earth owns 600 million UUIDs.
... however, these probabilities only hold when the UUIDs are generated using sufficient entropy.
当然,还有其他的UUID生成方案和“众所周知的GUID”,并不是所有的都适合“全局唯一”的使用。 (此外,由于插入时的碎片,非专用 UUID 往往不能很好地用于主键/集群键:SQL Server 有 NEWSEQUENTIALID 来帮助解决这个问题。)
快乐编码。
*UUID 中最多有 128 位,但是一些 UUID 版本在内部使用了一些位。我不知道 boost 使用什么,但我怀疑它也是 UUIDv4。
关于c++ - boost::uuid/unique 跨不同数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8062866/