itterator_to_array()不解析50k行

时间:2016-05-19 17:40:30

标签: php mongodb

我使用下面的代码从mongodb获取数据 -

$collection = $this->db->xyz ;
$res = $collection->find($where);
$res = iterator_to_array($res,false);
print_r($res);die;

我可以从上面的代码中获得10 000行。但是当我收到5万行时,没有打印出来。我没有收到任何错误。

我可以在iterator_to_array之前死掉()但之后我什么都没得到。所以我认为问题出在iterator_to_array方法中。在这种情况下我该怎么办?

1 个答案:

答案 0 :(得分:0)

我们假设每行的大小为400字节。可能更多(可能是),可能会更少。

400字节x 50k行= 20MB

可能超出memory_limit设置允许的范围,导致错误并终止您的脚本。

我们有发电机的原因。它们允许逐个处理数据以避免此类内存问题。

你可以"解决问题"通过禁用内存限制来解决此问题,但请记住,每行400字节的估计值相当低。实际数量可以快速滚雪球。如果每行的大小为1k,则整个行的大小为50MB。 2k => 100MB等等。你很快就会冒着在服务器本身耗尽内存的风险,那很糟糕。