Laravel-excel: Почему экспорт в очередь занимает много времени?

Созданный на 2 июл. 2020  ·  7Комментарии  ·  Источник: Maatwebsite/Laravel-Excel

Предпосылки

Версии

  • Версия PHP:7.1.3
  • Версия Laravel:5,8
  • Версия пакета:3.1

Описание

Пользуюсь этим пакетом уже больше года. Недавно начались проблемы с памятью и производительностью. Пользователи пытаются загрузить много данных; иногда исторические данные. Итак, я прочитал документы и нашел раздел в очереди. Сначала это было идеальное решение. При экспорте в очередь отправляется несколько заданий, чтобы сгенерировать файл по частям. Но я кое-что заметил. Каждое отправленное задание (AppendQueryToSheet) занимало больше времени, чем последнее. И последняя работа (CloseSheet) заняла еще больше времени.

У меня вопрос: ¿Так ли работает экспорт в очередь? ¿Или я что-то упускаю?

Дополнительная информация

Я использую Redis и Horizon. Даже я пробовал с несколькими рабочими, но кажется, что каждый раз, когда задание заканчивается, отправляется новое задание. Итак, это не решило мою проблему.

Я прикрепил это изображение, чтобы вы могли видеть зарегистрированное время.

Selection_007

question

Самый полезный комментарий

Каждый запрос должен повторно открывать файл электронной таблицы, что занимает некоторое время PhpSpreadsheet, поэтому действительно становится длиннее с каждым добавлением.

У меня запланированы некоторые изменения в 3.2, которые улучшат это.

Все 7 Комментарий

Каждый запрос должен повторно открывать файл электронной таблицы, что занимает некоторое время 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, это, безусловно, самый быстрый вариант для большого массового импорта / экспорта.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги