Php 为大型查询响应优化内存资源
我必须执行一个查询,它可以生成一个非常大的字符串来响应高达1Gb的数据,这基本上是一个非常大的JSON数组。是的,分页是正常的,但我强调的概念,以便让你的想法。 Symfony只是使用条令来获得响应: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
$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,我从问题中误解了这一点。