Мне нужно выполнить запрос, который может генерировать очень большую строку в ответе (до 1 Гб), которая представляет собой большой большой массив 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
@Matteo, который по-прежнему не решает проблему кодирования этих данных в JSON. – Gerry
@Gerry не нужно кодировать. Postgres возвращает строку, хорошо закодированную. В основном функция, которую я написал, генерирует и возвращает ее – Bertuz