遇到问题:
写了一个PHP脚本对mongo数据进行批量处理,发现运行一段时间报错
cursor id 14510357100220 not found
网络上查找了一下解决方案
https://blog.csdn.net/zh0u_f/article/details/72897628
https://www.cnblogs.com/CHWLearningNotes/p/10333479.html
主要原因:
默认 mongo server维护连接的时间窗口是十分钟
默认 单次从 server获取数据是101条或者 大于1M小于16M的数据
所以默认情况下,如果10分钟内未能处理完数据,则抛出该异常
解决方案:
1. 设置batchSize值,考虑10分钟内能处理完成
$cursor = $collection->find(
[condition],
[
'batchSize' => 5,
]
);
$iterator = new \IteratorIterator($cursor);
$iterator->rewind();
while ($iterator->valid()) {
$data = $iterator->current();
//相关业务逻辑
$iterator->next();
}
2. 设置noCursorTimeout=true
$cursor = $collection->find(
[condition],
[
'noCursorTimeout' => true,
]
);
$iterator = new \IteratorIterator($cursor);
$iterator->rewind();
while ($iterator->valid()) {
$data = $iterator->current();
//相关业务逻辑
$iterator->next();
}
后记
原本以为使用noCursorTimeout=true就能解决问题的,没想到最后还是爆出一样的问题,然后我加上batchSize参数后现在问题解决了