擅长:python、mysql、java
<p>你的两个解决方案几乎都是在实践中完成的。在</p>
<p>您的第一个解决方案是只增加一个数字就可以给您唯一性,只要您不溢出(对于python bigintegers,这并不是真正的问题)。这种方法的缺点是,如果开始执行并发操作,则必须确保在增量和读取外部值时使用锁定来防止数据争用。在</p>
<p>另一种生成随机数的方法在并发情况下很好地工作。使用的位数越多,发生碰撞的可能性就越小。事实上,如果您使用128位作为标识,您几乎可以保证不会发生冲突</p>
<p>一种可以用来进一步保证不会发生冲突的方法是,使您的唯一id类似于TIMESTAMP_HASHEDMACHINENAME_PROCESSID/THREADID_UNIQUEID。除非在1秒内在同一进程/线程上生成两个相同的UNIQUEID,否则几乎不会发生冲突。MongoDB会这样做,只增加UNIQUEID。我不确定它们在溢出的情况下会做什么(我想在实践中这种情况不会经常发生)。一种解决方案可能是等到下一秒再生成更多的id。在</p>
<p>这可能是你想做的事情的过火,但这确实是一个有点有趣的问题。在</p>