𝗘𝘀𝗰𝗮𝗹𝗮𝗿 𝗶𝗺𝗽𝗼𝗿𝘁𝗮𝗰𝗶𝗼𝗻𝗲𝘀 𝗱𝗲 𝗖𝗦𝗩 𝗰𝗼𝗻 𝗟𝗮𝗿𝗮𝘃𝗲𝗹 𝗝𝗼𝗯 𝗕𝗮𝘁𝗰𝗵𝗶𝗻𝗴
Los clientes de SaaS B2B suelen subir archivos grandes. Imagina un CSV con 100.000 filas.
La mayoría de los desarrolladores cometen un error. Utilizan un bucle para enviar 100.000 trabajos en segundo plano por separado. Esto crea problemas.
Si el trabajo número 45.000 falla, no tienes forma de avisar al usuario. No puedes realizar un seguimiento del progreso. No puedes enviar un único correo electrónico una vez que todo el archivo haya terminado. Los trabajos están desconectados.
Necesitas Laravel Job Batching para solucionar esto.
La solución: Bus::batch()
El job batching agrupa miles de trabajos en una sola unidad. Laravel asigna a esta unidad un ID único. Tu frontend utiliza este ID para mostrar una barra de progreso. También proporciona hooks para gestionar el éxito o el fallo.
Cómo implementarlo:
- Utiliza un generador que sea seguro para la memoria para leer tu CSV.
- Divide tus datos en fragmentos (chunks) manejables.
- Utiliza Bus::batch() para agrupar los trabajos.
- Utiliza allowFailures() para que una fila errónea no detenga todo el proceso.
Los hooks del ciclo de vida funcionan así:
- then(): Se ejecuta solo si todos los trabajos tienen éxito.
- catch(): Se ejecuta cuando ocurre el primer error.
- finally(): Se ejecuta cuando todos los trabajos terminan, incluso si algunos fallaron.
El beneficio para los usuarios
Tu frontend en React puede consultar (poll) el ID del lote. Muestra una barra de progreso del 0 al 100%. Esto convierte una misteriosa tarea en segundo plano en una experiencia transparente.
El valor de ingeniería
Obtienes control sobre las tareas distribuidas. Evitas fallos silenciosos. Proporcionas datos en tiempo real a tus usuarios. Te aseguras de que la lógica de post-procesamiento se ejecute en el momento correcto.
Fuente: https://dev.to/iprajapatiparesh/scaling-csv-imports-master-laravel-job-batching-iaa