在MongoDB中正确实现散列碎片密钥

mot*_*mal 6 mongodb

我有一个目前由内置的"_id"(ObjectId)索引/查询的集合.我不想对此密钥进行分片,因为它是顺序的(以日期为前缀).Mongo 2.4的文档说我可以对这个键的哈希值进行分片,听起来很棒.像这样:

sh.shardCollection("records.active",{_ id:"hashed"})

问题:我是否必须首先在活动集合上创建散列索引:

db.active.ensureIndex({_ id:"hashed"})

或者这不是必要的吗?我不想浪费空间,索引比必要的更多.

相关问题:如果我用ensureIndex创建一个散列索引({_id:"hashed"}),我可以删除默认的" id "索引吗?Mongo会不会知道在_id字段上进行查询,哈希它们并针对哈希索引运行它们?

谢谢...

Jam*_*lin 3

_id索引和散列 _id索引都需要。在 MongoDB 2.4 中,在对集合进行分片之前,您不必显式调用db.active.ensureIndex({ _id: "hashed" }),但如果您不这样做,则sh.shardCollection( "records.active", { _id: " hashed" } )将为您创建哈希索引。

复制需要_id索引。

要在 MongoDB 中对集合进行分片,您必须在分片键上有一个索引。这在 MongoDB 2.4 中没有改变,分片工作需要散列 _id索引。