У меня есть таблица с ~ 70 тыс. Записей и размером ~ 12 Мбайт (МБ).Почему PHP выделяет гораздо больше памяти, чем нужно?
require_once('connection.php');
$sql = "SELECT * FROM BlahBlah";
$result = $con->query($sql);
$data = array();
while($row = $result->fetch_assoc()) {
$data[] = $row;
}
echo json_encode($data);
Когда я некоторое время FETCH_ASSOC() цикл в PHP для хранения результата и эхо возвращает все строки в таблице в формате Json на JavaScript, я получаю Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)
.
Я понимаю, что требуется более 12 Мбайт памяти, но выделение в 10 раз больше памяти по мере необходимости отбрасывает меня. У меня есть еще один запрос до этого, и он захватывает только 151 КБ таблицы.
EDIT: Я прочитал сообщение в блоге ниже, чтобы понять, почему PHP требует столько накладных расходов.
Одно из решений заключается в том, чтобы установить ограничение на неограниченную память, но это похоже на ужасный подход, так как моя база данных растет на ~ 10 тыс. Записей в день. Есть ли другой способ вывода всех строк таблицы из MySQL в Json-формате клиенту? Я создаю маркеры карты google на стороне клиента из полученных строк
Возможный дубликат http://stackoverflow.com/questions/415801/allowed-memory-size-of-33554432-bytes-exhausted-tried-to-allocate-43148176-byte –
его принципиально невозможно определить, какое использование памяти php будет использовать, просто просматривая код –
Попробуйте прочитать [это сообщение в блоге] (https://nikic.github.io/2011/12/12/How-big-are-PHP-arrays-really-Hint-BIG .html), который точно определяет, какая память используется для построения массивов в PHP –