Twitt
@Twitt

Как выгрузить в Excel документ 200 000 записей из бд?

Работаю с PHPExcel библиотекой, стоит задача выгрузить из таблицы в БД 200к записей в xlsx файл. Как сделать это лучше всего? Потому что если за раз, то выдается ошибка, мол беда с памятью. Я думал может выгружать лимитами (по 30к допустим), тогда еще рождается пара вопросов: как это сделать? (сначала 30 000 записей, потом с 30 001 по 60 000 и т.д.)? И второй вопрос, там они делятся на категории, то есть в этот лимит 30к может попасть еще другая категория какая должна быть в другом лимите, как этого избежать? Проще говоря, как в лимит брать только то, что находится в нужной категории допустим, а как оно выгрузит с той категории, перейти на другую чтоб сначала полностью ее выгрузило, а потом опять же начало выгружать третью категорию и тд.
  • Вопрос задан
  • 273 просмотра
Пригласить эксперта
Ответы на вопрос 3
alex-1917
@alex-1917
Если ответ помог, отметь решением
После тестирования порядка 12 разных программулин я нашел для себя единственный вариант - MySQL-Front
И все эти лимиты не нужны будут, он сам пакеты формирует, главное не паниковать и сидеть молча ждать, иной раз у меня минут по 10 крутилось колесико и в итоге все пучком.
Беда с памятью тогда может быть только у вашего компьютера, если есть хотя бы 8Гб, то все ок
А вы пытаетесь выгружать силами хостинга? Тогда переведите на самый мощный тариф и пробуйте, но думаю не вариант.

Что такое 200к записей?
  • Запись - это одно слово?
  • Или это текстовые блоки по 5000 символов?
  • Или это куски html кода?
  • Сколько колонок в каждой записи?
  • Размер в кБ какой у таблицы???


Да, кстати, вытаскивал по 45-65 млн записей, каждая запись - это 12 колонок, в трех текста, в остальных числовые значения

Ну и конечно должна быть возможность подключения к БД с внешнего ip, если не совсем захудалый хостинг, то должна быть такая галка.
Ответ написан
kawabanga
@kawabanga
Сочувствую вам. Задача в целом не сложная. Но будете спотыкаться о мелочь, по типу памяти.
Из своего опыта, мне удавалось выгружать 80К строк товаров в ИМ.

1) Используйте кэширование отличное от стандартного в памяти.
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);


2) Используйте offset в БД чтобы не загружать в память сразу все строчки.
3) пробуйте выгружать по большим категориям небольшими порциями.
Ответ написан
@egormmm
Борітеся — поборете!
А если сохранить Excel в csv файл, и выгрузить через запрос LOAD DATA INFILE ?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы