𝗠𝗲𝗻𝘀𝗸𝗮𝗹𝗮𝗸𝗮𝗻 𝗜𝗺𝗽𝗼𝗿 𝗖𝗦𝗩 𝗱𝗲𝗻𝗴𝗮𝗻 𝗟𝗮𝗿𝗮𝘃𝗲𝗹 𝗝𝗼𝗯 𝗕𝗮𝘁𝗰𝗵𝗶𝗻𝗴

Klien B2B SaaS sering kali mengunggah file berukuran besar. Bayangkan sebuah file CSV dengan 100.000 baris.

Kebanyakan pengembang melakukan kesalahan. Mereka menggunakan loop untuk mengirim 100.000 job background secara terpisah. Hal ini menimbulkan masalah.

Jika job nomor 45.000 gagal, Anda tidak punya cara untuk memberitahu pengguna. Anda tidak dapat melacak progres. Anda tidak dapat mengirim satu email tunggal setelah seluruh file selesai diproses. Job-job tersebut tidak saling terhubung.

Anda membutuhkan Laravel Job Batching untuk mengatasi hal ini.

Solusinya: Bus::batch()

Job batching mengelompokkan ribuan job ke dalam satu unit. Laravel memberikan ID unik pada unit ini. Frontend Anda dapat menggunakan ID ini untuk menampilkan progress bar. Fitur ini juga menyediakan hook untuk menangani keberhasilan atau kegagalan.

Cara mengimplementasikannya:

  • Gunakan generator yang aman secara memori (memory-safe) untuk membaca CSV Anda.
  • Bagi data Anda menjadi potongan-potongan (chunk) yang mudah dikelola.
  • Gunakan Bus::batch() untuk mengelompokkan job.
  • Gunakan allowFailures() agar satu baris yang bermasalah tidak menghentikan seluruh proses.

Lifecycle hook bekerja seperti ini:

  • then(): Berjalan hanya jika setiap job berhasil.
  • catch(): Berjalan saat error pertama terjadi.
  • finally(): Berjalan saat semua job selesai, meskipun ada yang gagal.

Manfaat bagi Pengguna

Frontend React Anda dapat melakukan polling pada batch ID. Ini akan menampilkan progress bar 0-100%. Hal ini mengubah tugas background yang misterius menjadi pengalaman yang transparan.

Nilai Engineering

Anda mendapatkan kendali atas tugas-tugas terdistribusi. Anda menghentikan kegagalan yang tidak terdeteksi (silent failures). Anda menyediakan data real-time kepada pengguna Anda. Anda memastikan logika post-processing berjalan pada waktu yang tepat.

Sumber: https://dev.to/iprajapatiparesh/scaling-csv-imports-master-laravel-job-batching-iaa