Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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 getMore减慢查找操作_Mongodb_Ruby On Rails 4_Mongoid - Fatal编程技术网

MongoDB getMore减慢查找操作

MongoDB getMore减慢查找操作,mongodb,ruby-on-rails-4,mongoid,Mongodb,Ruby On Rails 4,Mongoid,在我的mongodb上,“查找查询”需要0.079767814s才能返回匹配的文档。它返回total“nReturned”:numberprint(5709),,并完美地执行索引计划 见下面的日志 MONGODB | localhost:27017 | everything_civic_production.find | STARTED | {"find"=>"users", "filter"=>{"is_deleted"=>false, "user_role"=>{"$

在我的mongodb上,“查找查询”需要0.079767814s才能返回匹配的文档。它返回total
“nReturned”:numberprint(5709),
,并完美地执行索引计划

见下面的日志

MONGODB | localhost:27017 | everything_civic_production.find | STARTED | {"find"=>"users", "filter"=>{"is_deleted"=>false, "user_role"=>{"$in"=>[6]}, "app_master_id"=>BSON::ObjectId('567b757e5659a66e5705b427')}, "sort"=>{"_id"=>-1}}

MONGODB | localhost:27017 | everything_civic_production.find | SUCCEEDED | 0.079767814s
MONGODB | localhost:27017 | everything_civic_production.getMore | STARTED | {"getMore"=>378139582621, "batchSize"=>0, "collection"=>"users"}
MONGODB | localhost:27017 | everything_civic_production.getMore | SUCCEEDED | 4.186633778s
MONGODB | localhost:27017 being removed from the cluster.
MONGODB | Server localhost:27017 elected as primary in rs0.
MONGODB | localhost:27017 | everything_civic_production.getMore | STARTED | {"getMore"=>378139582621, "batchSize"=>0, "collection"=>"users"}
MONGODB | localhost:27017 | everything_civic_production.getMore | SUCCEEDED | 2.669569172s
请参阅上面日志中的
getMore
行。需要
4秒


有人能帮我理解这种奇怪的行为吗?

A
getMore
是对光标的实际“获取”操作。实际检索了多少个结果?另外,
batchSize
似乎被覆盖,这将在光标上的设置选项中的某个位置完成。理想情况下,您需要一个合理的
batchSize
,该值与要获取的结果数量相匹配。@NeilLunn我们必须从中设置
batchSize
?应获取总共5709个结果?在这种情况下,我们如何加快抓取呢?问题是,使用游标时,您很可能不希望同时获取所有文档,因为您要迭代所述游标。使用现在的设置,应用程序将阻塞,直到所有5709从磁盘加载并返回到应用程序。批量大小为10时,应用程序将在加载前10个文档后立即继续。驱动程序负责加载下一批和下一批,直到结果集用尽,或者光标关闭或超时为止。@MarkusWMahlberg如果不使用光标是否有意义?还有其他方法来获取所有5709条记录吗?如果我将批量大小保持在10000以一次加载所有文档,会发生什么情况?不使用光标很少有意义。如果要对所有匹配的文档进行计算,请使用聚合框架。除此之外:做数学题。4.186633778/5709小于一毫秒/doc,用于定位、加载和传输所有文件。这在我的书中并不慢。这取决于你想做什么。也许你应该向我们展示这个问题,并描述你想要实现的目标。