我正在尝试在名为myId的Mongodb文档中包含一个字段。我正在使用shortid。我想知道,如果是大数据,就像集合中的数百万个文档一样:
shortid
始终是唯一的,永远不会重复任何其他文件的保证是什么? 答案 0 :(得分:2)
长话短说:这些短片几乎就是"哈希"时间戳。不是unix时间戳,他们自己的品种,但不比时间戳少得多。
What's the guarantee that the shortid will be always unique and never ever be repeated for any other document
所有与随意相关的东西都是那样,只是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两次,此函数必须以相同的确切顺序在相同的第二个中返回相同的确切值。这种情况非常罕见,但如果他们重置计时器会发生这种情况(基于评论,他们会这样做,但它仍然很少见。)