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

B2B SaaS क्लायंट्स अनेकदा मोठ्या फाईल्स अपलोड करतात. समजा, १,००,००० ओळी असलेली एक CSV फाईल आहे.

बहुतेक डेव्हलपर्स एक चूक करतात. ते १,००,००० वेगळे बॅकग्राउंड जॉब्स पाठवण्यासाठी लूपचा (loop) वापर करतात. यामुळे समस्या निर्माण होतात.

जर ४५,००० क्रमांकाचा जॉब फेल झाला, तर वापरकर्त्याला (user) सांगण्याचा तुमच्याकडे कोणताही मार्ग नसतो. तुम्ही प्रगती (progress) ट्रॅक करू शकत नाही. संपूर्ण फाईल प्रक्रिया पूर्ण झाल्यावर तुम्ही एक ईमेल देखील पाठवू शकत नाही. हे जॉब्स एकमेकांपासून विलग (disconnected) असतात.

हे सोडवण्यासाठी तुम्हाला Laravel Job Batching ची गरज आहे.

उपाय: Bus::batch()

Job batching हजारो जॉब्सना एका युनिटमध्ये एकत्रित करते. Laravel या युनिटला एक युनिक ID देते. तुमचे फ्रंटएंड (frontend) प्रोग्रेस बार दाखवण्यासाठी या ID चा वापर करते. तसेच, यश (success) किंवा अपयश (failure) हाताळण्यासाठी हे हुक्स (hooks) देखील प्रदान करते.

याची अंमलबजावणी कशी करावी:

  • तुमची CSV वाचण्यासाठी मेमरी-सेफ जनरेटरचा (memory-safe generator) वापर करा.
  • तुमचा डेटा व्यवस्थापित करण्यायोग्य तुकड्यांमध्ये (chunks) विभाजित करा.
  • जॉब्स एकत्रित करण्यासाठी Bus::batch() वापरा.
  • allowFailures() वापरा जेणेकरून एक चुकीची ओळ संपूर्ण प्रक्रिया थांबवणार नाही.

लाइफसायकल हुक्स (lifecycle hooks) खालीलप्रमाणे काम करतात:

  • then(): फक्त सर्व जॉब्स यशस्वी झाल्यास चालते.
  • catch(): जेव्हा पहिली त्रुटी (error) येते तेव्हा चालते.
  • finally(): काही जॉब्स फेल झाले असले तरी, सर्व जॉब्स पूर्ण झाल्यावर चालते.

वापरकर्त्यांसाठी फायदा

तुमचे React फ्रंटएंड बॅच ID साठी पोलिंग (polling) करू शकते. हे ०-१००% प्रोग्रेस बार दाखवते. यामुळे एक गूढ बॅकग्राउंड टास्क एका पारदर्शक अनुभवात रूपांतरित होतो.

इंजिनिअरिंग व्हॅल्यू (Engineering Value)

तुम्हाला वितरित कामांवर (distributed tasks) नियंत्रण मिळते. तुम्ही 'सायलेंट फेलियर्स' (silent failures) थांबवू शकता. तुम्ही तुमच्या वापरकर्त्यांना रिअल-टाइम डेटा प्रदान करता. पोस्ट-प्रोसेसिंग लॉजिक योग्य वेळी चालते याची तुम्ही खात्री करता.

स्त्रोत: https://dev.to/iprajapatiparesh/scaling-csv-imports-master-laravel-job-batching-iaa