Php 为大型查询响应优化内存资源

Php 为大型查询响应优化内存资源,php,symfony,doctrine-orm,symfony-2.8,Php,Symfony,Doctrine Orm,Symfony 2.8,我必须执行一个查询,它可以生成一个非常大的字符串来响应高达1Gb的数据,这基本上是一个非常大的JSON数组。是的,分页是正常的,但我强调的概念,以便让你的想法。 Symfony只是使用条令来获得响应: $stmt = $this->getEntityManager()->getConnection()->prepare(self::Q_GET_NUM_TIMEBOX); $stmt->bindValue('t_end', $tEnd); $stm

我必须执行一个查询,它可以生成一个非常大的字符串来响应高达1Gb的数据,这基本上是一个非常大的JSON数组。是的,分页是正常的,但我强调的概念,以便让你的想法。 Symfony只是使用条令来获得响应:

    $stmt = $this->getEntityManager()->getConnection()->prepare(self::Q_GET_NUM_TIMEBOX);

    $stmt->bindValue('t_end', $tEnd);
    $stmt->bindValue('t_granularity', $tGranularity);
    $stmt->bindValue('t_span', $varSelection->getStart());

    $stmt->execute();

    $resData = $stmt->fetchColumn(0);
然后我通过设置execute返回的内容来创建一个响应

    $res = new Response();
    $res->setStatusCode(200);
    $res->headers->set('Content-Type', 'application/json');
    $res->setContent($resData);
请记住,为了清晰起见,我对代码进行了过度简化:我实际上有一个控制器、一个执行请求的处理程序服务和一个返回查询响应的存储库

回到问题上来:这意味着PHP必须在内存中保存大量数据,我想知道是否有一种更轻松的方式返回响应,以减少PHP引擎的大量数据压力

这意味着PHP必须保存大量数据

PHP不需要在内存中保存整个响应体。通过和Symfony,您可以逐行获取结果集,并按块发送数据。不幸的是,我不知道用PHP进行JSON流编码的成熟解决方案,但您可以手动实现它

更新2017-02-27:

是一个PHP库,它提供了一组类来帮助以流方式编码JSON,即允许您逐位编码JSON文档,而不是一次编码整个文档


将StreamdResponse与iterable查询结合使用result@Matteo这仍然不能直接解决将此数据编码为JSON的问题。@Gerry不需要编码。Postgres返回一个编码良好的字符串。基本上,我编写的函数生成并返回itIc,我从问题中误解了这一点。