2016-08-31 2 views
0

Я пытаюсь использовать эту библиотеку, потому что PHPExcel способен не использовать 3 ГБ RAM (возможно, больше) при попытке загрузить 143 000+ записей mysql. Пока эта библиотека улучшилась, так как я могу создать файл .xlsx, не исчерпывая лимит памяти php.PHP_XLSXWriter_plus Отсутствующие данные для больших наборов данных Mysql

Однако я столкнулся с проблемой, когда он заполняет большую часть данных, но несколько столбцов имеют только 3 \ 4 ожидаемых значений, а другие столбцы - это хит или промах, если он заполняет значение для определенной клетке.

Например, один столбец называется датой отправки, а его формат - дата и время в базе данных, но строка из запроса php. Из 143 828 рядов данных только первые 19 483 строки имеют значения даты.

Я могу подтвердить, что недостающие значения в столбце даты отправки и других отсутствующих ячейках имеют значение \ данные в базе данных mysql. Кроме того, столбец даты отправки используется в предложении ORDER BY в запросе mysql в случае, если это имеет какое-либо отношение к этой проблеме.

Так что я пытаюсь выяснить, является ли эта проблема (общая?) Этой библиотекой при загрузке большого набора данных? Или проблема больше связана с моим кодом до вызова этой библиотеки для создания файла .xslx.

Спасибо.

+0

Похоже, проблема с данными, а не с библиотекой. Если библиотека работает для первых тысяч строк, я не понимаю, почему она перестанет работать после этого. Чтобы убедиться, что проблема исходит из ваших данных, вы можете попробовать использовать другую библиотеку, такую ​​как [Spout] (https://github.com/box/spout), чтобы увидеть, можете ли вы воспроизвести проблему. Если это так, то ваши данные плохие, в противном случае это проблема с библиотекой. – Adrien

ответ

0

пытаются загрузить не все строки сразу ...

образец: PHP + JS

  1. PHP http://pastebin.com/ZLsNXayd

  2. JS http://pastebin.com/QvPux6Hs

+0

и запись в кэш $ cacheMethod = PHPExcel_CachedObjectStorageFactory :: cache_to_phpTemp; $ cacheSettings = массив ('memoryCacheSize' => '256MB'); PHPExcel_Settings :: setCacheStorageMethod ($ cacheMethod, $ cacheSettings); –

+0

Спасибо, Алекс. Я закончил тем, что пытался опробовать Spout до вашего ответа. Тем не менее, я использовал ваше предложение, изменив свой php-скрипт, чтобы получить 50 000 записей за раз, записать их в поток и освободить память для каждого результата запроса mysql перед выводом файла. Это позволило мне создать файл xlsx для 230 000+ записей, сохраняя при этом 1 ГБ памяти. – Jikininki

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