Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分片集群上的MongoDB skip()和limit()_Mongodb_Sql Limit - Fatal编程技术网

分片集群上的MongoDB skip()和limit()

分片集群上的MongoDB skip()和limit(),mongodb,sql-limit,Mongodb,Sql Limit,如果我在分片mongodb集群上运行以下查询,并且查询是分散/聚集类型 find({"product": "laptop"}).sort({"year": 1}).skip(15).limit(5) 和SKIP+限制(组合)是否会应用于mongos或单个碎片(即mongod) 或者mongos向每个碎片发送限制(20),即总和(跳过+限制),以优化查询,然后也应用 跳过(15)。在返回客户之前限制(5)收集的结果。我想我找到了你疑问的答案。您可以阅读整个文档部分,但您感兴趣的部分是: mong

如果我在分片mongodb集群上运行以下查询,并且查询是分散/聚集类型

find({"product": "laptop"}).sort({"year": 1}).skip(15).limit(5)
和SKIP+限制(组合)是否会应用于mongos或单个碎片(即mongod)

或者mongos向每个碎片发送限制(20),即总和(跳过+限制),以优化查询,然后也应用
跳过(15)。在返回客户之前限制(5)收集的结果。我想我找到了你疑问的答案。您可以阅读整个文档部分,但您感兴趣的部分是:

mongos如何处理查询修饰符 分类 如果查询的结果 如果未排序,则
mongos
实例将打开一个结果光标,该结果光标为“round” “robins”是碎片上所有光标的结果

限制 如果查询使用
limit()
cursor方法,mongos实例将该限制传递给 碎片,然后在返回之前对结果重新应用限制 将结果发送给客户端

跳过 如果查询使用
skip(),
而是从碎片中检索未跳过的结果并跳过
组装完整结果时,需要适当数量的文档

limit()
一起使用时,
mongos
将通过 将限制加上
skip()
的值添加到碎片以提高性能 这些行动的效率

如果您担心性能,最好使用
explain
获取查询计划。在同一份单据上,规定:

有关如何将聚合工作划分为多个组的详细信息 切分集群查询的组件,使用
explain:true
作为参数 到
aggregation()
调用。返回将包括三个json对象。 mergeType显示合并阶段发生的位置(“primaryShard”, “anyShard”或“mongos”)拆分管道显示您的 管道在单个碎片上运行碎片显示每个碎片的工作 shard已经完成了


我想我找到了你怀疑的答案。您可以阅读整个文档部分,但您感兴趣的部分是:

mongos如何处理查询修饰符 分类 如果查询的结果 如果未排序,则
mongos
实例将打开一个结果光标,该结果光标为“round” “robins”是碎片上所有光标的结果

限制 如果查询使用
limit()
cursor方法,mongos实例将该限制传递给 碎片,然后在返回之前对结果重新应用限制 将结果发送给客户端

跳过 如果查询使用
skip(),
而是从碎片中检索未跳过的结果并跳过
组装完整结果时,需要适当数量的文档

limit()
一起使用时,
mongos
将通过 将限制加上
skip()
的值添加到碎片以提高性能 这些行动的效率

如果您担心性能,最好使用
explain
获取查询计划。在同一份单据上,规定:

有关如何将聚合工作划分为多个组的详细信息 切分集群查询的组件,使用
explain:true
作为参数 到
aggregation()
调用。返回将包括三个json对象。 mergeType显示合并阶段发生的位置(“primaryShard”, “anyShard”或“mongos”)拆分管道显示您的 管道在单个碎片上运行碎片显示每个碎片的工作 shard已经完成了


问题的重点是什么?您想知道MongoDB是否会“限制”从每个碎片返回的结果,或者“限制”是否实际发生在
mongos
路由器上?究竟是什么问题?您是否认为您的整个收藏都被发送到
mongos
路由器?我真的认为这些都不应该引起你的关注。另一方面,若您认为查询的性能很慢,那个么就直接出来说出来。使用
skip()
limit()
并不是最优的,文档中确实明确指出了这一点。问题的重点是什么?您想知道MongoDB是否会“限制”从每个碎片返回的结果,或者“限制”是否实际发生在
mongos
路由器上?究竟是什么问题?您是否认为您的整个收藏都被发送到
mongos
路由器?我真的认为这些都不应该引起你的关注。另一方面,若您认为查询的性能很慢,那个么就直接出来说出来。使用
skip()
limit()
并不是最佳选择,文档确实明确指出了这一点。