如果在已分片的mongodb集群上运行以下查询,则查询是分散/聚集类型。
find({"product": "laptop"}).sort({"year": 1}).skip(15).limit(5)和跳过+限制(组合)是适用于芒果或个人碎片(即单神)?
或者mongos向每个碎片发送限制(20),即sum(skip+limit)以优化查询,然后在返回客户端之前对收集的结果应用跳过(15).limit(5)
发布于 2019-05-04 14:07:05
我想我找到了你怀疑的答案。您可以阅读整个文档部分这里,但您感兴趣的部分是:
mongos如何处理查询修饰符 排序 如果查询的结果没有排序,
mongos实例将打开一个结果游标,即“循环”从碎片上的所有游标中得到。 限制 如果查询使用limit()游标方法限制结果集的大小,则mongos实例将该限制传递给碎片,然后在将结果返回给客户端之前重新应用对结果的限制。 跳绳 如果查询使用skip()游标方法指定要跳过的多条记录,则mongos不能将跳过传递给碎片,而是从碎片中检索未跳过的结果,并在组装完整结果时跳过适当数量的文档。 当与limit()一起使用时,mongos将把限制加上skip()的值传递给碎片,以提高这些操作的效率。
如果您担心性能问题,那么最好的方法就是使用explain获取查询计划。在同一文档中,指定:
有关聚合工作如何在分块集群查询的组件之间分离的更多信息,请使用
explain:true作为aggregation()调用的参数。返回将包括三个json对象。mergeType显示合并的阶段(“primaryShard”、“anyShard”或“mongos”)。splitPipeline显示管道中的哪些操作在单个碎片上运行。shards显示了每个碎片所做的工作。
https://stackoverflow.com/questions/55982314
复制相似问题