mongodb分片收集索引信息存储在哪里?

时间:2015-03-31 10:12:22

标签: mongodb indexing sharding

假设带有名为“skey”的分片键的分片集合 还有另一个索引但不是名为“ikey”的分片键

如果查询像这样,

db.collection.find({"ikey": "something"})

它将搜索所有分片中的文档,因为它不是分片键。

此时,mongos如何知道应该在整个分片中搜索?存储的索引信息在哪里? configServer?或者每个分片的mongod服务器?

1 个答案:

答案 0 :(得分:0)

指数存储在各个碎片上。这适用于分片键和所有其他索引。

mongos为每个分片保留了所谓的分片键的键范围的缓存。密钥范围存储在配置服务器中,在某些情况下mongos实例将联系这些服务器以检索这些密钥范围及其关联的分片。键范围基本上是分片键值的字典和分片的名称,其中具有相应分片键的文档位于该分片上。

因此,如果您通过分片键进行查询,mongos可以识别保存数据的分片,并将查询发送到分片,分片保存具有定义的键范围的数据。然后,分片将数据返回到mongos,如有必要,将对返回的数据进行排序。

Mongos知道它必须将查询发送到所有分片,因为查询不包含相应集合的分片键。