Menskalakan Import CSV Dengan Laravel Job Batching
Pelanggan B2B SaaS sering memuat naik fail yang besar. Bayangkan sebuah CSV dengan 100,000 baris.
Kebanyakan pembangun melakukan kesilapan. Mereka menggunakan gelung (loop) untuk menghantar 100,000 tugasan latar belakang yang berasingan. Ini menimbulkan masalah.
Jika tugasan nombor 45,000 gagal, anda tiada cara untuk memberitahu pengguna. Anda tidak boleh menjejak kemajuan. Anda tidak boleh menghantar satu e-mel sebaik sahaja keseluruhan fail selesai. Tugasan-tugasan tersebut tidak bersambung.
Anda memerlukan Laravel Job Batching untuk menyelesaikan masalah ini.
Penyelesaiannya: Bus::batch()
Job batching mengelompokkan beribu-ribu tugasan ke dalam satu unit. Laravel memberikan unit ini ID yang unik. Frontend anda menggunakan ID ini untuk memaparkan bar kemajuan. Ia juga menyediakan hooks untuk mengendalikan kejayaan atau kegagalan.
Cara melaksanakannya:
- Gunakan generator yang selamat dari segi memori untuk membaca CSV anda.
- Pecahkan (chunk) data anda kepada bahagian yang boleh diuruskan.
- Gunakan Bus::batch() untuk mengelompokkan tugasan.
- Gunakan allowFailures() supaya satu baris yang rosak tidak menghentikan keseluruhan proses.
Lifecycle hooks berfungsi seperti ini:
- then(): Berjalan hanya jika setiap tugasan berjaya.
- catch(): Berjalan apabila ralat pertama berlaku.
- finally(): Berjalan apabila semua tugasan selesai, walaupun ada yang gagal.
Manfaat untuk Pengguna
Frontend React anda boleh melakukan polling pada ID batch tersebut. Ia memaparkan bar kemajuan 0-100%. Ini mengubah tugasan latar belakang yang misteri kepada pengalaman yang telus.
Nilai Kejuruteraan
Anda mendapat kawalan ke atas tugasan teragih. Anda menghentikan kegagalan senyap. Anda menyediakan data masa nyata kepada pengguna anda. Anda memastikan logik pasca-pemprosesan berjalan pada masa yang betul.
Sumber: https://dev.to/iprajapatiparesh/scaling-csv-imports-master-laravel-job-batching-iaa