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

B2B SaaS کلائنٹس اکثر بڑی فائلیں اپ لوڈ کرتے ہیں۔ تصور کریں کہ ایک CSV فائل میں 100,000 روز (rows) ہیں۔

زیادہ تر ڈویلپرز ایک غلطی کرتے ہیں۔ وہ 100,000 الگ الگ بیک گراؤنڈ جابز (background jobs) بھیجنے کے لیے ایک لوپ (loop) کا استعمال کرتے ہیں۔ اس سے مسائل پیدا ہوتے ہیں۔

اگر جاب نمبر 45,000 فیل ہو جائے، تو آپ کے پاس صارف کو بتانے کا کوئی طریقہ نہیں ہوتا۔ آپ پیش رفت (progress) کو ٹریک نہیں کر سکتے۔ پوری فائل مکمل ہونے پر آپ ایک ہی ای میل بھی نہیں بھیج سکتے۔ یہ جابز ایک دوسرے سے الگ تھلگ ہوتے ہیں۔

اس مسئلے کو حل کرنے کے لیے آپ کو Laravel Job Batching کی ضرورت ہے۔

حل: Bus::batch()

Job batching ہزاروں جابز کو ایک یونٹ میں گروپ کر دیتی ہے۔ Laravel اس یونٹ کو ایک منفرد (unique) ID دیتا ہے۔ آپ کا فرنٹ اینڈ (frontend) اس ID کو پروگریس بار دکھانے کے لیے استعمال کرتا ہے۔ یہ کامیابی یا ناکامی کو سنبھالنے کے لیے ہکس (hooks) بھی فراہم کرتا ہے۔

اسے کیسے نافذ (implement) کریں:

  • اپنی CSV پڑھنے کے لیے میموری سیف جنریٹر (memory-safe generator) کا استعمال کریں۔
  • اپنے ڈیٹا کو قابل انتظام حصوں (manageable pieces) میں تقسیم (chunk) کریں۔
  • جابز کو گروپ کرنے کے لیے Bus::batch() کا استعمال کریں۔
  • allowFailures() کا استعمال کریں تاکہ ایک غلط رو (row) پورے عمل کو نہ روک دے۔

لائف سائیکل ہکس (lifecycle hooks) اس طرح کام کرتے ہیں:

  • then(): صرف تب چلتا ہے جب ہر جاب کامیاب ہو جائے۔
  • catch(): جب پہلا ایرر (error) آئے تو چلتا ہے۔
  • finally(): جب تمام جابز مکمل ہو جائیں، چاہے کچھ فیل ہی کیوں نہ ہوئی ہوں، تب چلتا ہے۔

صارفین کے لیے فائدہ

آپ کا React فرنٹ اینڈ بیچ آئی ڈی (batch ID) کو پول (poll) کر سکتا ہے۔ یہ 0-100% پروگریس بار دکھاتا ہے۔ یہ ایک پراسرار بیک گراؤنڈ ٹاسک کو ایک شفاف تجربے میں بدل دیتا ہے۔

انجینئرنگ کی اہمیت

آپ تقسیم شدہ ٹاسکس (distributed tasks) پر کنٹرول حاصل کر لیتے ہیں۔ آپ خاموش ناکامیوں (silent failures) کو روکتے ہیں۔ آپ اپنے صارفین کو ریئل ٹائم ڈیٹا فراہم کرتے ہیں۔ آپ اس بات کو یقینی بناتے ہیں کہ پوسٹ پروسیسنگ لاجک (post-processing logic) صحیح وقت پر چلے۔

ماخذ: https://dev.to/iprajapatiparesh/scaling-csv-imports-master-laravel-job-batching-iaa