【发布时间】:2016-11-22 11:07:48
【问题描述】:
我必须执行一个查询,该查询可以生成一个非常大的字符串作为响应(最大 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);
然后我通过设置执行返回的内容来创建Response。
$res = new Response();
$res->setStatusCode(200);
$res->headers->set('Content-Type', 'application/json');
$res->setContent($resData);
请记住,为了清楚起见,我过度简化了代码:我实际上有一个 controller、一个 handler 服务执行请求和一个 Repository 返回查询响应。
直接回到问题:这意味着 PHP 必须在内存中保存大量数据,我想知道是否有更轻松的方式来返回响应,以便使用大量数据减轻 PHP 引擎的压力。
【问题讨论】:
-
将 StreamedResponse 与可迭代查询结果结合使用
-
@Matteo 仍然没有直接解决将此数据编码为 JSON 的问题。
-
@Gerry 不需要编码。 Postgres 返回一个编码良好的字符串。基本上我写的一个函数会生成并返回它
-
Ic,我从问题中误解了这一点。
标签: php symfony doctrine-orm symfony-2.8