shortid唯一性的保证是什么?

时间:2017-03-16 20:26:08

标签: javascript node.js mongodb

我正在尝试在名为myId的Mongodb文档中包含一个字段。我正在使用shortid。我想知道,如果是大数据,就像集合中的数百万个文档一样:

  1. 保证shortid始终是唯一的,永远不会重复任何其他文件的保证是什么?
  2. 什么跟踪生成的ID?
  3. id被重复的几率是多少?

2 个答案:

答案 0 :(得分:2)

  

What's the guarantee that the shortid will be always unique and never ever be repeated for any other document

长话短说:这些短片几乎就是"哈希"时间戳。不是unix时间戳,他们自己的品种,但不比时间戳少得多。

所有与随意相关的东西都是那样,只是bling。

只要在具有相同种子的同一台计算机(单个线程)上生成所有这些短路,就不可能发生冲突。

  

什么能够跟踪生成的ID?

当你请求id为fast时,计数器会递增,以便命中相同的时间戳。一旦达到新的时间戳,该计数器就会重置为0.

没有什么重要的,那里真的是随机的。

  

id被重复的几率是多少?

在使用过程中,很少到不存在。

据我所知,可能导致碰撞的唯一两件事是

  • 更改prng的种子(导致新的字母表,以便可以将较新的日期编码为已使用不同种子生成的ID;尽管不太可能,但可能)

  • 在多个线程/机器上生成ID,因为计数器未同步。

摘要:我对该代码中的所有内容都很唠叨,但即便如此,它仍然可靠,可靠。而且我告诉过你这些限制。

答案 1 :(得分:0)

Shortid生成一个随机的64位id。这是在多个步骤中完成的,但它的基础是这个伪随机函数:

function getNextValue() {
    seed = (seed * 9301 + 49297) % 233280;
    return seed/(233280.0);
}

要生成相同的ID两次,此函数必须以相同的确切顺序在相同的第二个中返回相同的确切值。这种情况非常罕见,但如果他们重置计时器会发生这种情况(基于评论,他们会这样做,但它仍然很少见。)