【发布时间】:2016-12-25 15:27:33
【问题描述】:
我有一个大的 Mongo 集合,我想迭代,所以我做了这样的事情:
$cursor = $mongo->my_big_collection->find([]);
foreach ($cursor as $doc)
do_something();
但我最终内存不足。我希望光标在处理完每个文档后释放内存。为什么不是这样?
我尝试在循环结束时调用unset($doc),但这没有帮助。
现在我必须做这样的事情来解决这个问题(批量处理文档并在每批之后在光标上调用unset()):
for ($skip = 0; true; $skip += 1000)
{
$cursor = $mongo->my_big_collection->find()->skip($skip)->limit(1000);
if (!$cursor->hasNext())
break;
foreach ($cursor as $doc)
do_something();
unset($cursor);
}
这看起来很尴尬。迭代器的全部意义在于不必这样做。有没有更好的办法?
我正在使用带有mongofill 的 hhvm 3.12。
感谢您的帮助。
【问题讨论】: