重复执行程序会增加发生唯一ID冲突的机会

问题描述

我知道独特的id生成器(例如UUID和nanoid)的意义在于,冲突不会在很长一段时间内发生。但是随后重新执行程序会增加机会吗?

示例: (我对RNG或UUID不太了解,因此这可能无法完全反映该过程,但是此示例将解释为什么我要问这个问题)

第一次执行:nanoid初始化为0的种子。它将产生的id链为A,B,C,D ...等。而且在这个特定的链中,我们不会再长时间看到A,B,C了,因此在执行该程序期间,无需担心。

随后的执行:以0的种子初始化的nanoid将会是一个明显的问题,但是即使它不相同,我还是认为从种子生成的元素并不是该种子本身唯一的。

  • 种子0-> A,B,C,D ......
  • 种子1-> W,X,Y,Z ..... A ... B,C

因此,即使选择了不同的种子,在某些时候仍然有可能获得相同的ID。

我是否有正确的主意,这值得担心吗?

解决方法

要回答标题中的问题:也许吧,也许不是。

这取决于某些事情:

  • 程序是否检查其生成的ID是否具有唯一性?
  • 程序是否从固定种子开始生成ID?
  • ID中使用哪种数字?它们是伪随机数吗?他们是时间戳吗?它们是序号吗?它们是从加密的RNG生成的吗?
  • 如果数字是伪随机数,程序如何初始化PRNG?有固定的种子吗?有粗略的时间戳记吗?具有高分辨率时间戳?有密码随机数吗?

碰撞是否值得担心?也许,如果您的应用程序不能忍受该程序生成重复ID的风险。