【发布时间】:2012-08-16 03:23:20
【问题描述】:
我正在阅读 2.2 的 Mongo Shard 密钥的文档,发现它有点混乱。
所有分片集合必须有一个以分片开头的索引 键。 如果您对尚未包含文档的集合进行分片,并且 如果没有这样的索引,shardCollection 将在 分片键。如果集合已包含文档,则必须 在使用 shardCollection 之前创建一个适当的索引。
2.2 版更改:shard key 上的索引不再需要 与分片键相同。该索引可以是分片的索引 像以前一样键本身,或一个复合索引,其中分片键是 索引的前缀。此索引不能是多键索引。
如果你有一个名为 people 的集合,使用字段 { zipcode: 1 },并且您想用字段上的索引替换它 { 邮编:1,用户名:1 },然后:
在 { zipcode: 1, username: 1 } 上创建索引:db.people.ensureIndex( { 邮编:1,用户名:1 } );当 MongoDB 完成构建 索引,您可以安全地删除 { zipcode: 1 } 上的现有索引: db.people.dropIndex({ 邮编:1 }); 警告分片上的索引 key 不能是多键索引。 如上,{ zipcode: 1 上的索引, username: 1 } 只能替换 zipcode 上的索引,如果没有 用户名字段的数组值。
如果您删除了分片键的最后一个适当索引,请通过以下方式恢复 仅在分片键上重新创建索引。
我有几个关于分片键和索引的问题。
i) 从文档来看,2.2 之前似乎支持多键索引。如果是这种情况,复合索引与多键索引有何不同?
ii) 和有什么区别 [a] 以分片键开头的索引和 [b] 以分片键为前缀的索引?
iii) 关于分片键上的索引不应该是多键索引的警告说明是什么? db.people.ensureIndex( { zipcode: 1, username: 1 } 不是多键索引吗?
【问题讨论】:
标签: mongodb indexing sharding mongodb-indexes