Пользуюсь этим пакетом уже больше года. Недавно начались проблемы с памятью и производительностью. Пользователи пытаются загрузить много данных; иногда исторические данные. Итак, я прочитал документы и нашел раздел в очереди. Сначала это было идеальное решение. При экспорте в очередь отправляется несколько заданий, чтобы сгенерировать файл по частям. Но я кое-что заметил. Каждое отправленное задание (AppendQueryToSheet) занимало больше времени, чем последнее. И последняя работа (CloseSheet) заняла еще больше времени.
У меня вопрос: ¿Так ли работает экспорт в очередь? ¿Или я что-то упускаю?
Я использую Redis и Horizon. Даже я пробовал с несколькими рабочими, но кажется, что каждый раз, когда задание заканчивается, отправляется новое задание. Итак, это не решило мою проблему.
Я прикрепил это изображение, чтобы вы могли видеть зарегистрированное время.
Каждый запрос должен повторно открывать файл электронной таблицы, что занимает некоторое время PhpSpreadsheet, поэтому действительно становится длиннее с каждым добавлением.
У меня запланированы некоторые изменения в 3.2, которые улучшат это.
У меня здесь та же проблема. Размеры файлов тоже небольшие, всего 5-10мб. Я не испытываю скачков в использовании ЦП или памяти.
Я решил создать сервис на Python и pandas, и он сильно улучшился, я имею в виду ОЧЕНЬ. Laravel Excel - отличная библиотека, но я думаю, что для этой работы, возможно, это не тот инструмент.
@ okmkey45 Честно говоря, это не совсем вина Laravel Excel, он полагается на PHPSpreadsheet, который является неэффективной библиотекой для чтения / записи файлов. Это позор, потому что абстракции, связанные с фрагментированием запросов и очередями заданий, здесь действительно удобны, и они сэкономили мне много времени на написание службы на Go / Python и подключение ее к моей очереди.
Существует довольно много альтернатив PHPSpreadsheet, которые намного быстрее работают с большими файлами, возможно, их можно было бы заменить, когда мы используем ->queue
или ShouldQueue
?
@aakarim это то, что я на самом деле обдумывал, но в настоящее время нет времени или
Я устрою баш после этого крайнего срока. Какие пакеты вы предпочитаете / рекомендуете @patrickbrouwers? https://github.com/box/spout кажется хорошим местом для начала.
@aakarim да ящик / носик. Я даже подумал о том, чтобы можно было использовать league / csv, если вам просто нужен csv, это, безусловно, самый быстрый вариант для большого массового импорта / экспорта.
Самый полезный комментарий
Каждый запрос должен повторно открывать файл электронной таблицы, что занимает некоторое время PhpSpreadsheet, поэтому действительно становится длиннее с каждым добавлением.
У меня запланированы некоторые изменения в 3.2, которые улучшат это.