𝗦𝗸𝗮𝗹𝗶𝗲𝗿𝘂𝗻𝗴 𝘃𝗼𝗻 𝗖𝗦𝗩-𝗜𝗺𝗽𝗼𝗿𝘁𝗲𝗻 𝗺𝗶𝘁 𝗟𝗮𝗿𝗮𝘃𝗲𝗹 𝗝𝗼𝗯 𝗕𝗮𝘁𝗰𝗵𝗶𝗻𝗴
B2B-SaaS-Kunden laden oft große Dateien hoch. Stellen Sie sich eine CSV-Datei mit 100.000 Zeilen vor.
Die meisten Entwickler machen einen Fehler. Sie verwenden eine Schleife, um 100.000 einzelne Hintergrund-Jobs zu senden. Dies führt zu Problemen.
Wenn Job Nummer 45.000 fehlschlägt, haben Sie keine Möglichkeit, dies dem Benutzer mitzuteilen. Sie können den Fortschritt nicht verfolgen. Sie können keine einzelne E-Mail senden, sobald die gesamte Datei verarbeitet wurde. Die Jobs sind voneinander entkoppelt.
Sie benötigen Laravel Job Batching, um dies zu lösen.
Die Lösung: Bus::batch()
Job Batching gruppiert Tausende von Jobs in einer Einheit. Laravel weist dieser Einheit eine eindeutige ID zu. Ihr Frontend nutzt diese ID, um einen Fortschrittsbalken anzuzeigen. Zudem bietet es Hooks, um Erfolg oder Fehler zu verarbeiten.
So implementieren Sie es:
- Verwenden Sie einen speicherschonenden Generator, um Ihre CSV zu lesen.
- Teilen Sie Ihre Daten in handhabbare Stücke auf.
- Verwenden Sie Bus::batch(), um die Jobs zu gruppieren.
- Verwenden Sie allowFailures(), damit eine fehlerhafte Zeile nicht den gesamten Prozess stoppt.
Die Lifecycle-Hooks funktionieren wie folgt:
- then(): Wird nur ausgeführt, wenn jeder Job erfolgreich war.
- catch(): Wird ausgeführt, wenn der erste Fehler auftritt.
- finally(): Wird ausgeführt, wenn alle Jobs abgeschlossen sind, selbst wenn einige fehlgeschlagen sind.
Der Nutzen für die Anwender
Ihr React-Frontend kann die Batch-ID abfragen (polling). Es zeigt einen Fortschrittsbalken von 0–100 % an. Dies verwandelt eine mysteriöse Hintergrundaufgabe in ein transparentes Erlebnis.
Der technische Mehrwert
Sie gewinnen die Kontrolle über verteilte Aufgaben. Sie verhindern stille Fehler. Sie liefern Echtzeitdaten an Ihre Benutzer. Sie stellen sicher, dass die Post-Processing-Logik zum richtigen Zeitpunkt ausgeführt wird.
Quelle: https://dev.to/iprajapatiparesh/scaling-csv-imports-master-laravel-job-batching-iaa