.net 在10亿次迭代中获得相同GUID的几率有多大?
我正在做一个项目,我需要生成大约10亿个guid 我知道guid不一定是唯一的,但几乎所有的时间都是唯一的 如果我生成了十亿个guid,那么匹配的概率是多少? n概率 68719476736=2^36=0.0000000000000004=4×10^−(16) 2199023255552=2^41=0.0000000000004=(4×10^−(十三).net 在10亿次迭代中获得相同GUID的几率有多大?,.net,guid,.net,Guid,我正在做一个项目,我需要生成大约10亿个guid 我知道guid不一定是唯一的,但几乎所有的时间都是唯一的 如果我生成了十亿个guid,那么匹配的概率是多少? n概率 68719476736=2^36=0.0000000000000004=4×10^−(16) 2199023255552=2^41=0.0000000000004=(4×10^−(十三) 70368744177664=2^46=0.0000000004=(4×10^−10) 如果您是从同一台机器创建guid并使用相同的算法,则不会
70368744177664=2^46=0.0000000004=(4×10^−10) 如果您是从同一台机器创建guid并使用相同的算法,则不会发生冲突。 .NET GUID由以下部分组成:
- 60位时间戳
- 48位计算机标识符
- 14位uniquifier,和
- 六位是固定的
所以Oscar引用的UUID概率在这里不起作用。但是,如果你从一台计算机上创建了所有10亿个GUID,那么就没有机会得到一个副本(除非你在玩时钟;-)你将在多长时间内生成GUID的可能副本?这将在一批中完成,因此,无论需要多长时间,您都需要确保在每个GUID生成之间经过足够的时间,以允许时间再次变得唯一。我不知道要多久,那是你唯一关心的。我建议多台计算机并行工作@时间戳值的分辨率为100ns,因此假设它是从具有类似分辨率的计时器获得的,它应该可以,因为在当前常规硬件上,时间戳增量之间不会生成超过2^14个GUID(4GHz的四核需要能够为四分之一的cpu周期创建GUID;因此,一次增量、一次或两次移动可能需要64个核才能开始接近)。他说的是.NET GUID,它们并不像文章中假设的那样完全是随机的。有些部分是由时间和处理器id(?)引起的…但在同一台机器上获得10亿个guid副本的可能性很小,甚至可能是不可能的。