2016-07-13 5 views
0

У меня есть приложение PHP, которое возвращает значения прогнозов клиенту в формате json. Я держу все данные, так как собираю больше в переменной.Хранение огромных наборов данных в переменных (ошибка памяти exaust)

Если клиент запрашивает только значения за короткий промежуток времени, жизнь хороша, и он получает то, о чем просил. Проблема в том, когда он запрашивает 1 или более лет прогнозов. Ошибки памяти exaust возникают из-за того, что набор данных, хранящийся в переменной, огромен.

Я не хочу расширять память, думая об альтернативных способах ее выполнения.

Я столкнулся с файлом с памятью. Это хорошее решение, или вы можете думать о других? Спасибо!

Im, использующий gearman, и для каждой информации, полученной рабочим, в мою переменную прогноза добавляется новый массив со значениями.

Как только все закончено, я возвращаю его клиенту.

public function requestCompleteApi(\GearmanTask $task) 
{        
    $this->forecast[] = unserialize($task->data()); 
} 
+1

не поможет. если у вас закончилась память, содержащая необработанные данные, у вас наверняка закончится нехватка памяти, а строка json будет построена. json не является «раздутым» как xml и т. п., но ваш средний массив WILL занимает больше места в виде строки json, чем в случае необработанного размера байтов данных. –

+0

Вам нужен клиент для хранения этих данных или просто его отображения? Если это просто отображение, которое вы хотите, я бы попробовал разбиение на страницы, где каждая страница показывает около 50 результатов. – vlatkozelka

+0

Да, клиенту потребуются данные для обработки в другом месте. –

ответ

0

Итак, это очень неопределенный вопрос, но я стараюсь помочь.

У меня есть несколько sugastes:

  1. использования Try PHP 7 - это использовать меньше памяти для хранения переменных.
  2. Если вы используете большие массивы, попробуйте переформатировать приложение. Может быть, вы можете использовать генераторы (в PHP 5.5+) PHP Generators
  3. Может быть, вы можете использовать меньше памяти, если попытаться не JSON, но более компактные форматы, такие как ProtoBuf или Apache Thrift
+0

Im using Gearman, не поддерживается в php 7. На данный момент php 7 не является опцией. Как генераторы PHP и Apache Thrift выглядят многообещающими! Я посмотрю! Благодаря! –

+0

О Gearman - посмотрите также на Net Gearman [link] https://github.com/Publero/net_gearman, он не нуждается в расширении PHP. Возможно, это поможет вам использовать PHP 7. – Lakremon

 Смежные вопросы

  • Нет связанных вопросов^_^