我有 2 个集合:A(3.8M 文档)和 B(1.7M 文档)
我有一个从 shell 运行的 PHP 脚本:
- 循环 A 中的每条记录
- 约 60% 的时间,它在 B 上执行 findOne(使用 _id)
- 做一些基本的数学运算,创建一个 php 数组
一旦 a 中所有文档的循环完成:
4) 循环遍历 php 数组
5) 插入集合 C
在 (1) 期间,我一直得到: PHP 致命错误:未捕获的异常 'MongoCursorException' 和消息 'Cursor not found' 最后处理的项目是 3872494 中的 #8187。
real 1m25.478s
user 0m0.076s
sys 0m0.064s
再次运行它,代码没有变化,异常在项目#19826 / 3872495处被抛出
real 3m19.144s
user 0m0.120s
sys 0m0.072s
再次,#8181 / 387249
real 1m31.110s
user 0m0.036s
sys 0m0.048s
是的,我意识到我可以(并且可能应该)捕获异常......但是......为什么它甚至被抛出?尤其是在数据库中经过如此不同的时间/深度时。
如果有帮助,我的设置是一个 3 节点副本集(2+arb)。我使辅助设备脱机并尝试仅运行主设备。相同的结果(处理的结果数量和次数不同,但总是抛出 Cursor Not Found 异常)。