MongoDB:对于_id使用int64或ObjectID是否更好?

时间:2016-10-23 16:06:56

标签: mongodb mongodb-indexes

由于objectID存储在12个字节上,甚至对于分片键也不好,我问自己,对于_id使用完全随机的int64(8个字节)是不是更好?

我的想法,创建一个完全随机的int64,看看它是否已经存在于集合中(主要不是伪随机生成器工作得很好),如果没有,那么用这个_id创建文档。所以我们只有8个字节的_id,适用于分片键

你怎么看待它?

2 个答案:

答案 0 :(得分:1)

我强烈建议您永远不要将随机生成的数字作为唯一ID。首先,当您插入新记录时,您将始终检查它是否存在,因为您永远无法真正创建唯一的随机数。另一个非常明显的原因是因为int64有一个限制。

对你的_id使用ObjectId,它就是它的用途,或者你有充分的理由不使用它,使用GUID

见这里:

Considerations when selected a shard key

答案 1 :(得分:1)

优秀的解决方案是使用ObjectID()并将前4个字节移动到ObjectID的末尾。这个新的ObjectID绝对是唯一的,它可以用作分片键,因为它不是线性增加类型。