MongoDB的 - 当分片必须_id是全球唯一(Mongodb - must _id be glo

2019-09-27 17:29发布

我想通过自己的ID字段分片由他们的“外键”(用户ID)的集合,而不是。 我只需要一个用户ID和ID的组合是唯一的。 但我不知道这是确定的mongodb用。

警告:在任何分片收集,你没有被_id场分片,必须确保_id领域的独特性。 以确保_id的最佳方式是总是唯一的是使用的ObjectId,或另一种通用唯一标识符(UUID)。

这是摘自: http://docs.mongodb.org/manual/tutorial/enforce-unique-keys-for-sharded-collections/#enforce-unique-keys-for-sharded-collections

我必须确保_id独特之处? 或者是它不够好,如果我总是两个用户ID查询和_id?

Answer 1:

除非手动替换它们,自动生成的_id的是UUID的哪个,根据该文档 ,包括“一个4字节的时间戳(自纪元秒),3字节的机器id,一个2字节的进程ID,以及3字节计数”。

正如你所看到的,一个唯一的机器ID是UUID的一部分。 这就确保了在碎片中没有两台机器曾经单独创建相同的UUID(除非它们具有相同的机器ID - 为的机率是1:16777215,并当它发生时它可以很容易地验证)。 唯一的情况下,你可以在理论上有一个重复的UUID是指一个过程在一秒钟超过2 ^ 24(超过1600万)的UUID。

TL;博士:你不必担心重复的UUID -他们,因为文档所说的那样,“设计成具有分配时是唯一合理的高概率”。



文章来源: Mongodb - must _id be globally unique when sharding