Laravel-excel: Por que as exportações enfileiradas demoram muito?

Criado em 2 jul. 2020  ·  7Comentários  ·  Fonte: Maatwebsite/Laravel-Excel

Pré-requisitos

Versões

  • Versão PHP:7.1.3
  • Versão do Laravel:5,8
  • Versão do pacote:3,1

Descrição

Estou usando este pacote há mais de um ano. Recentemente comecei a ter problemas de memória e desempenho. Os usuários estão tentando baixar muitos dados; algumas vezes dados históricos. Então eu li a documentação e encontrei a seção da fila. No início, foi a solução perfeita. Com as exportações enfileiradas, vários trabalhos são despachados para gerar o arquivo por blocos. Mas eu percebi algo. Cada trabalho (AppendQueryToSheet) despachado demorou mais para ser concluído do que o último. E o trabalho final (CloseSheet) demorou ainda mais para ser concluído.

Minha pergunta é: ¿é assim que funciona a exportação enfileirada? Ou eu estou esquecendo de alguma coisa?

informação adicional

Estou usando Redis e Horizon. Mesmo eu tentei com vários trabalhadores, mas parece que toda vez que um trabalho termina, um novo trabalho é despachado. Então, isso não resolveu meu problema.

Anexei esta imagem para vocês verem os horários registrados.

Selection_007

question

Comentários muito úteis

Cada consulta deve reabrir o arquivo de planilha, o que leva algum tempo para a planilha PhpSpreadsheet, portanto, fica mais longo a cada anexo.

Eu tenho algumas mudanças planejadas para o 3.2 que irão melhorar isso.

Todos 7 comentários

Cada consulta deve reabrir o arquivo de planilha, o que leva algum tempo para a planilha PhpSpreadsheet, portanto, fica mais longo a cada anexo.

Eu tenho algumas mudanças planejadas para o 3.2 que irão melhorar isso.

Estou tendo o mesmo problema aqui. Os tamanhos dos arquivos também não são enormes, apenas 5 a 10 MB. Não estou tendo nenhum pico no uso da CPU ou da memória.

Decidi construir um serviço com python e pandas e melhorou muito, e quero dizer MUITO. Laravel Excel é uma excelente biblioteca, mas eu acho que para este trabalho talvez não seja a ferramenta certa

@ okmkey45 Para ser justo, não é realmente culpa do Laravel Excel, ele depende do PHPSpreadsheet que é uma biblioteca ineficiente para ler / escrever arquivos. É uma pena porque as abstrações em torno de consultas em partes e trabalhos de fila são realmente úteis aqui e me economizam muito tempo escrevendo um serviço em Go / Python e conectando-o à minha fila.

Existem algumas alternativas ao PHPSpreadsheet que são muito mais rápidas em arquivos grandes, talvez eles pudessem ser trocados quando usamos ->queue ou ShouldQueue ?

@aakarim isso é algo que eu considerei, mas atualmente não tenho tempo ou caso de uso para implementar isso. Eu estaria aberto para um PR, contanto que fosse simples e opcional.

Terei uma festa após este prazo. Existe algum pacote que você prefere / recomenda @patrickbrouwers? https://github.com/box/spout parece um bom lugar para começar.

@aakarim sim caixa / bico. Eu até considerei tornar possível usar liga / csv se você quiser apenas csv, que é de longe a opção mais rápida para grandes importações / exportações em massa.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

bahmanyaghoobi picture bahmanyaghoobi  ·  3Comentários

vandolphreyes picture vandolphreyes  ·  3Comentários

kurianic picture kurianic  ·  3Comentários

octoxan picture octoxan  ·  3Comentários

amine8ghandi8amine picture amine8ghandi8amine  ·  3Comentários