我使用下面的代码从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方法中。在这种情况下我该怎么办?
答案 0 :(得分:0)
我们假设每行的大小为400字节。可能更多(可能是),可能会更少。
400字节x 50k行= 20MB
可能超出memory_limit
设置允许的范围,导致错误并终止您的脚本。
我们有发电机的原因。它们允许逐个处理数据以避免此类内存问题。
你可以"解决问题"通过禁用内存限制来解决此问题,但请记住,每行400字节的估计值相当低。实际数量可以快速滚雪球。如果每行的大小为1k,则整个行的大小为50MB。 2k => 100MB等等。你很快就会冒着在服务器本身耗尽内存的风险,那很糟糕。