GUID是否100%独一无二?
在多个线程上,它是否仍然保持独一无二?
GUID是否100%独一无二?
在多个线程上,它是否仍然保持独一无二?
来自http://www.guidgenerator.com/online-guid-generator.aspx
什么是GUID?
GUID(或UUID)是“全局唯一标识符”(或“通用唯一标识符”的缩写)。它是一个128位的整数,用于标识资源。该术语通常由使用Microsoft技术的开发人员使用,而UUID则在其他地方使用。
GUID有多独特?
128位足够大,生成算法足够独特,如果每秒生成1,000,000,000个GUID并持续1年,则重复的概率仅为50%。或者,如果地球上的每个人都生成600,000,000个GUID,则只有50%的概率会出现重复。
GUID是否总是唯一的?
不能保证,因为有几种生成方式。但是,您可以尝试计算创建两个相同的GUID的机会,并且您会得到一个概念:GUID具有128位,因此有2128个不同的GUID——比已知宇宙中的星星数量还要多得多。阅读wikipedia article以获取更多详细信息。
我遇到了一个重复的GUID。
我使用Neat Receipts桌面扫描仪,并附带专有的数据库软件。该软件有一个云同步功能,但在同步时我一直收到错误提示。查看日志后,我发现了这个惊人的错误信息:
"errors":[{"code":1,"message":"creator_guid: is already taken","guid":"C83E5734-D77A-4B09-B8C1-9623CAC7B167"}]}
我有点难以置信,但当我找到进入我的本地neatworks数据库并删除包含该GUID的记录时,错误就不再出现了。
所以根据我的经验来回答你的问题,是的,重复的GUID是可能存在的。但很可能之所以发生这种情况,是因为某些标准实践没有得到遵守。 (我只是没有那么幸运)然而,我不能确定。这不是我的软件。
他们的客户支持非常有礼貌和乐于助人,但他们似乎从未遇到过这个问题,因为在与他们通电话3个多小时后,他们没有找到解决方案。(顺便说一下,我对Neat印象非常好,这个故障虽然令人沮丧,但并没有改变我对他们产品的看法。)
我认为当人们将他们的想法和恐惧埋在统计数据中时,他们往往会忘记显而易见的事情。如果一个系统是真正随机的,那么你最不可能预期到的结果(比如全是1)与任何其他意外值(比如全是0)一样可能发生。这两个事实都不能阻止它们相继发生,甚至在前两个样本之内(尽管在统计上这将是“真正令人震惊”的)。这就是测量概率的问题所在:它完全忽略了关键性(和糟糕的运气)。
如果真的发生了什么,后果会是什么?你的软件会停止工作吗?有人会受伤吗?有人会死亡吗?世界会爆炸吗?
关键性越极端,"概率"这个词就越难以启齿。最后,当您认为(主观上)您的特定关键性(和您的“幸运感”)是不可接受时,链接GUID(或对它们进行XOR操作,或其他操作)就是您所做的事情。如果它可能导致世界末日,那么请代表我们所有不参与大型强子对撞机核实验的人,不要使用GUID或任何其他不确定的东西!
我遇到过在多线程/多进程单元测试中GUID不唯一的情况(也许是因为伪随机生成器的种子相同,或者没有种子)。我当时用它来生成唯一的文件名,但后来发现操作系统做得更好:)
你问GUID是否100%唯一。这取决于GUID需要在多少个GUID中保持唯一。当GUID数量趋近无限时,重复GUID的概率趋近100%。
"GUID是否100%唯一?"的答案很简单:"不是"。
如果您想获得100%唯一的GUID,请执行以下操作: