跨不同数据库的Boost::uuid / unique



我想生成一个uid,它应该被用作跨不同系统/数据库的唯一标识符。我读的例子,但我不明白我怎么能确保生成的id是唯一的在不同的系统和数据库。

我希望你能帮我一下。

UUID背后的思想是——取决于它们是如何生成的——有很多可以用122位*表示,因此意外碰撞的机会——同样取决于它们是如何生成的——是非常,非常,非常,非常,非常,非常,非常,非常,非常,非常,非常,非常,非常,非常,非常,非常,非常,非常,非常小。

摘自维基百科UUID版本4 (Leach-Salz Random):

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

…然而,只有在使用足够的熵生成uid时,这些概率才成立。

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

幸福的编码。


* UUID的最大长度是128位,但是一些版本的UUID在内部使用了一些位。我不知道boost使用什么,但我怀疑它也是uidv4。

最新更新