我正在运行一个长 mongoDB 查询,如下所示:
foreach($xyz->find(...)->timeout(24 * 60 * 60 * 1000)->maxTimeMS(24 * 60 * 60 * 1000) as $document) {
...
}
但是,尽管客户端和服务器有 24 小时超时,脚本仍会退出MongoCursorException
几分钟后:
本地主机:27017:找不到集合 xyz 上的光标
我使用的是 PHP 5.4 和 v1.6.10 mongoDB 驱动程序。数据库是mongoDB 3.0.4。 PHP将连接到一个mongos实例,集合xyz
被分片。
知道什么可能导致此异常吗?
我不得不说,我有类似的经历,我有一个收藏,我通过它查看
$items = $col -> find(['data' => 'OK']);
$items->timeout(-1);
$items->maxTimeMS(3600*1000);
但经过via之后
foreach($items as $item)
{
///... processing
}
大约 12 - 15 分钟后,我收到同样的错误
could not find cursor over collection
集合中大约有 150000 条记录,有趣的是,无论第 123480 条记录的内容是什么,也不管处理各个记录所花费的时间(处理记录可能因内容而异)。
由于我找不到任何错误原因,经过多次尝试改进mongo设置,包括升级PHP驱动程序,我现在批量执行整个过程,这可以防止丢失光标。它工作正常,但是,我也想知道更干净的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)