假设带有名为“skey”的分片键的分片集合 还有另一个索引但不是名为“ikey”的分片键
如果查询像这样,
db.collection.find({"ikey": "something"})
它将搜索所有分片中的文档,因为它不是分片键。
此时,mongos如何知道应该在整个分片中搜索?存储的索引信息在哪里? configServer?或者每个分片的mongod服务器?
答案 0 :(得分:0)
指数存储在各个碎片上。这适用于分片键和所有其他索引。
mongos
为每个分片保留了所谓的分片键的键范围的缓存。密钥范围存储在配置服务器中,在某些情况下mongos
实例将联系这些服务器以检索这些密钥范围及其关联的分片。键范围基本上是分片键值的字典和分片的名称,其中具有相应分片键的文档位于该分片上。
因此,如果您通过分片键进行查询,mongos
可以识别保存数据的分片,并将查询发送到分片,分片保存具有定义的键范围的数据。然后,分片将数据返回到mongos
,如有必要,将对返回的数据进行排序。
Mongos知道它必须将查询发送到所有分片,因为查询不包含相应集合的分片键。