我想通过他们的“外键”(userID)而不是他们的id字段来对一个集合进行分片。我只需要userID和id的组合是唯一的。但是我不确定mongodb是否可以。
警告在任何没有分片的分片集合中 _id字段,您必须确保_id字段的唯一性。确保_id始终唯一的最佳方法是使用ObjectId或其他方法 通用唯一标识符(UUID。)
我必须确保_id是唯一的吗?或者,如果我总是通过userID和_id进行查询,那么它是否足够好?
答案 0 :(得分:5)
除非你手动替换它们,否则自动生成的_id是UUID,根据the documentation,它包含“一个4字节的时间戳(自纪元以来的秒数),一个3字节的机器ID,一个2-字节进程ID和3字节计数器“。
如您所见,唯一的机器ID是UUID的一部分。这确保了分片中没有两台机器独立地创建相同的UUID(除非它们具有相同的机器ID - 可能性为1:16777215,当它发生时它可以很容易地验证)。唯一可以理论上具有重复UUID的情况是单个进程在一秒钟内创建超过2 ^ 24(超过1600万)UUID。
tl; dr:您不必担心重复的UUID - 正如文档所述,它们“设计为在分配时具有相当高的独特概率”。 / p>