2015-03-31 38 views
0

让我们假设一个分片收集与片键名为“SKEY” 还有另外一个索引,但没有片键名为“艾奇”mongodb分片收集索引信息存储在哪里?

如果这样的查询,

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

它将搜索docs跨所有碎片,因为它不是分片键。

在这一点上,mongos如何知道它应该搜索整个碎片?该索引信息存储在哪里? configServer?或每个分片mongod服务器?

回答

0

指数存储在单独的分片上。这适用于分片键和所有其他索引。

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

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

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

+0

谢谢,你能给我一些文件链接相关的这个问题吗? – 2015-04-01 02:29:23

+0

阅读您的答案后,我有一个详细的问题。让我们考虑计数,如果计数索引,并且存储在shard1的1,3值和存储在shard2的值2,4。如果计数键不是分片键,可能会发生这种情况。那么,每个碎片存储的范围是什么? – 2015-04-01 02:43:35

+0

分片1上的1和3以及分片2上的2和4。有关详细信息,请参见[有关分片群集查询路由的文档](http://docs.mongodb.org/manual/core/sharded-cluster-query-router /) – 2015-04-01 08:33:03