Экспорт в файл, большого объема данных

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
darlov
Сообщения: 204
Зарегистрирован: 2012.01.31, 16:09

Экспорт в файл, большого объема данных

Сообщение darlov »

Здравствуйте, проблема такая, нужно экспортировать большое количество данных в Excel. Данные подгружаю с помощью Active Records и соответсвенно вылетает фатальная ошибка по переполнению памяти. Можно ли частями вызывать данные и после освобождать память и потом еще часть и так далее.
Перепробовал разные методы к примеру в foreache забираю часть данных, записываю и в конце делаю unset() и все равно память растет, запускал принудительно чистильщик мусора, бесполезно. Может есть какие то методики которые я упускаю?
Не охота все переписывать на DAO, слишком большая архитектура объектов.
Restlin
Сообщения: 139
Зарегистрирован: 2011.09.09, 18:12

Re: Экспорт в файл, большого объема данных

Сообщение Restlin »

Посмотрите на эти функции, так пробовали?
Пакетное получение данных
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Экспорт в файл, большого объема данных

Сообщение kawabanga »

PhpExcel библиотека?
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Экспорт в файл, большого объема данных

Сообщение kawabanga »

Пока не ответили, думаю что phpexcel вероятнее всего.

Советы -
1) используйте sql запросы без activerecord. используйте limit и offset. В моей задаче надо было использовать фильтр с gridview. Я в модели Search дописал функцию для отдачи массива данных, используя limit и offset. Это позволило увеличить экспорт с 8 тыс строк до 50тыс строк.

2) используйте файловое кэшировать в phpexcel. Если используете общие библиотеки, переписывайте функционал напрямую с phpexcel.

Код: Выделить всё

 $cacheMethod = \PHPExcel_CachedObjectStorageFactory::cache_to_sqlite3;
            $cacheSettings = array( 'memoryCacheSize ' => '500MB');


            \PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
            $objPHPExcel = new PHPExcel();
 
Аватара пользователя
darlov
Сообщения: 204
Зарегистрирован: 2012.01.31, 16:09

Re: Экспорт в файл, большого объема данных

Сообщение darlov »

Был вне интернета.
Restlin писал(а):Посмотрите на эти функции, так пробовали?
Пакетное получение данных
Спасибо, каким то образом эту фичу просмотрел, Попробую.
Аватара пользователя
darlov
Сообщения: 204
Зарегистрирован: 2012.01.31, 16:09

Re: Экспорт в файл, большого объема данных

Сообщение darlov »

kawabanga писал(а):Пока не ответили, думаю что phpexcel вероятнее всего.

Советы -
1) используйте sql запросы без activerecord. используйте limit и offset. В моей задаче надо было использовать фильтр с gridview. Я в модели Search дописал функцию для отдачи массива данных, используя limit и offset. Это позволило увеличить экспорт с 8 тыс строк до 50тыс строк.

2) используйте файловое кэшировать в phpexcel. Если используете общие библиотеки, переписывайте функционал напрямую с phpexcel.

Код: Выделить всё

 $cacheMethod = \PHPExcel_CachedObjectStorageFactory::cache_to_sqlite3;
            $cacheSettings = array( 'memoryCacheSize ' => '500MB');


            \PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
            $objPHPExcel = new PHPExcel();
Да, phpExcel. За кеширование спасибо. Попробую, отпишусь
Ответить