Laravel-excel: ¿Por qué las exportaciones en cola toman mucho tiempo?

Creado en 2 jul. 2020  ·  7Comentarios  ·  Fuente: Maatwebsite/Laravel-Excel

Prerrequisitos

Versiones

  • Versión de PHP:7.1.3
  • Versión de Laravel:5.8
  • Versión del paquete:3.1

Descripción

He estado usando este paquete más de un año. Recientemente comencé a tener problemas con la memoria y el rendimiento. Los usuarios están intentando descargar una gran cantidad de datos; algunas veces datos históricos. Entonces leí los documentos y encontré la sección en cola. Al principio, fue la solución perfecta. Con las exportaciones en cola, se envían varios trabajos para generar el archivo por fragmentos. Pero noté algo. Cada trabajo (AppendQueryToSheet) que se envió tardó más tiempo en finalizar que el último. Y el trabajo final (CloseSheet) tardó aún más en terminar.

Mi pregunta es: ¿es así como funciona la exportación en cola? ¿O me estoy perdiendo algo?

Información Adicional

Estoy usando Redis y Horizon. Incluso lo intenté con varios trabajadores, pero parece que cada vez que termina un trabajo, se envía un nuevo trabajo. Entonces, no resolvió mi problema.

Adjunto esta imagen para que pueda ver los tiempos registrados.

Selection_007

question

Comentario más útil

Cada consulta tiene que volver a abrir el archivo de la hoja de cálculo, lo que lleva algo de tiempo a PhpSpreadsheet, por lo que se alarga cada vez que se agrega.

Tengo algunos cambios planeados para 3.2 que mejorarán esto.

Todos 7 comentarios

Cada consulta tiene que volver a abrir el archivo de la hoja de cálculo, lo que lleva algo de tiempo a PhpSpreadsheet, por lo que se alarga cada vez que se agrega.

Tengo algunos cambios planeados para 3.2 que mejorarán esto.

Estoy experimentando el mismo problema aquí. Los tamaños de archivo tampoco son enormes, solo 5-10 MB. No estoy experimentando picos en el uso de la CPU o la memoria.

Decidí construir un servicio con python y pandas y mejoró mucho, y me refiero a MUCHO. Laravel Excel es una biblioteca excelente, pero supongo que para este trabajo tal vez no sea la herramienta adecuada

@ okmkey45 Para ser justos, no es realmente culpa de Laravel Excel, se basa en PHPSpreadsheet, que es una biblioteca ineficiente para leer / escribir archivos. Es una pena porque las abstracciones en torno a la fragmentación de consultas y los trabajos de cola son realmente útiles aquí, y me ahorran mucho tiempo escribiendo un servicio en Go / Python y conectándolo con mi cola.

Hay bastantes alternativas a PHPSpreadsheet que son mucho más rápidas en archivos grandes, tal vez podrían intercambiarse cuando usamos ->queue o ShouldQueue ?

@aakarim eso es en realidad algo que he considerado, pero actualmente no tengo el tiempo o el caso de uso para implementar esto. Estaría abierto a un PR siempre y cuando se mantuviera simple y opt-in.

Tendré una fiesta después de esta fecha límite. ¿Hay algún paquete que prefiera / recomiende @patrickbrouwers? https://github.com/box/spout parece un buen lugar para comenzar.

@aakarim sí caja / pico. Incluso he considerado hacer posible el uso de league / csv si solo desea csv, que es, con mucho, la opción más rápida para grandes importaciones / exportaciones a granel.

¿Fue útil esta página
0 / 5 - 0 calificaciones