假设集合"coll“有一个索引
{ts : 1, X : 1 , Y : 1}其中,T、X和Y是NumberLong类型。
该集合被配置为在ts,X上进行分片
您能帮助我了解以下查询将如何执行吗?
1)无界范围:以下查询是否只针对托管范围ts > 100000000的分片,还是全局查询?
db.coll.find({ts : {$gt : 100000000}}) 2)有界范围:如果是这样的话,这个呢-这是有针对性的还是全局的?mongos是否足够聪明,能够解析出查询?
db.coll.find({$and : [{ts : {$gt : 100000000}}, {ts : {$lte : 110000000}}]})3)最后--多个有界范围会发生什么:
db.coll.find({$or : [[{$and : [{ts : {$gt : 100000000}}, {ts : {$lte : 110000000}}]}, {$and : [{ts : {$gt : 500000000}}, {ts : {$lte : 510000000}}]}]]})我在http://www.mongodb.org/display/DOCS/Sharding+Introduction上找不到任何范围查询的引用...!
提前感谢!
发布于 2011-11-25 19:03:09
这是理论上的,但mongos查询计划往往有一点不一致。例如,如果有一个"ts“分片键,并且两个分片中的一个分片分别包含范围minkey-50和另一个51-maxkey,则此查询
{$or:[{$and:[{ts:{$gt:90}}, {ts:{$lt:100}}]}, {$and:[{ts:{$gt:91}}, {ts:{$lt:100}}]}]}将正确地解析为对第二个块的单个查询。但这一条(注意第二个子句中的90而不是91 )
{$or:[{$and:[{ts:{$gt:90}}, {ts:{$lt:100}}]}, {$and:[{ts:{$gt:90}}, {ts:{$lt:100}}]}]}实际上会导致对两个分片的查询,这没有什么意义,因为您基本上是要求它对两个完全相同的子句执行$or操作。基本上,尝试使用explain()和其他监视工具来查看查询在分片环境中的行为,以确保它按预期工作。
https://stackoverflow.com/questions/8260843
复制相似问题