我有这样PHP蒙戈司机光标行多久了这么多
$results = $collection->find([
'status' => "pending",
'short_code' => intval($shortCode),
'create_time' => ['$lte' => time()],
])
->limit(self::BATCH_NUMBER)
->sort(["priority" => -1, "create_time" => 1]);
哪里BATCH_SIZE是70
查询和我使用查询的结果如下图所示:
foreach ($results as $mongoId => $result) {
}
或试图将其转换为阵列:
iterator_to_array($results);
蒙戈获取数据和迭代时间旅行是:
FetchTime: 0.003173828125 ms
IteratorTime: 4065.1459960938 ms
正如你所看到的,通过蒙戈获取数据太快,但迭代(使用iterator_to_array或使用的foreach的两个情况)是缓慢的。
这是一个发送消息到另一个服务器的队列。目标服务器每个请求接受少于70个文档。所以我不得不拿取70文件。无论如何。我想从130万个文件中提取70个文件,这里有问题。 查询尝试获取具有查询条件的前70个文档,发送它们并最终从集合中删除它们。
任何人都可以帮忙吗?为什么需要很长时间?或者是否有任何配置加速为PHP或mongo?
另一件事,当数据总数为100,000(不是1,300,000)时,旅行很快。旅行时间将随着文件总数的增加而增加。
实际返回的结果有多少?在4秒钟,我会认为它实际上并不是一个小数目。也许你应该考虑到,而不是返回如此大量的结果,你可能实际上需要一些东西来“减少”服务器本身的结果集。所以你需要给一些背景。作为实际返回结果的数量,以及那里的数量很大(如1000年),那么您应该解释为什么您需要返回1000个结果以及您打算如何处理这些结果。 –
我需要130万个文件中的70个文件。其实我的BATCH_NUMBER是70.正如你所看到的,从mongo获取速度很快。在结果之间旅行是问题。 – hgh
那是你的问题。为什么你可能需要循环130万个文件才能取出70个文件呢?这就是“查询”条件。所以如果有一些其他逻辑决定了'70',那么就需要在服务器上进行。你如何确定你实际需要的'70'?通过编辑并解释**处理游标的代码实际上在做什么,在您的问题中包含详细信息**。 –