𝗦𝗰𝗮𝗹𝗶𝗻𝗴 𝗖𝗦𝗩 𝗜𝗺𝗽𝗼𝗿𝘁𝘀 𝗪𝗶𝘁𝗵 𝗟𝗮𝗿𝗮𝘃𝗲𝗹 𝗝𝗼𝗯 𝗕𝗮𝘁𝗰𝗵𝗶𝗻𝗴
B2B SaaS ক্লায়েন্টরা প্রায়শই বড় ফাইল আপলোড করেন। কল্পনা করুন একটি CSV ফাইলে ১,০০,০০০টি রো (row) আছে।
বেশিরভাগ ডেভেলপার একটি ভুল করেন। তারা ১,০০,০০০টি আলাদা ব্যাকগ্রাউন্ড জব পাঠানোর জন্য একটি লুপ ব্যবহার করেন। এটি বিভিন্ন সমস্যা তৈরি করে।
যদি ৪৫,০০০ নম্বর জবটি ব্যর্থ হয়, তবে ব্যবহারকারীকে তা জানানোর কোনো উপায় আপনার থাকবে না। আপনি প্রগ্রেস ট্র্যাক করতে পারবেন না। পুরো ফাইলটি শেষ হওয়ার পর আপনি একটি মাত্র ইমেল পাঠাতে পারবেন না। জবগুলো একে অপরের সাথে বিচ্ছিন্ন থাকে।
এটি সমাধান করতে আপনার Laravel Job Batching প্রয়োজন।
সমাধান: Bus::batch()
Job batching হাজার হাজার জবকে একটি ইউনিটে গ্রুপ করে। Laravel এই ইউনিটটিকে একটি ইউনিক ID প্রদান করে। আপনার ফ্রন্টএন্ড এই ID ব্যবহার করে একটি প্রগ্রেস বার দেখায়। এটি সফল বা ব্যর্থতা হ্যান্ডেল করার জন্য হুকস (hooks) প্রদান করে।
এটি কীভাবে ইমপ্লিমেন্ট করবেন:
- আপনার CSV পড়ার জন্য একটি memory-safe generator ব্যবহার করুন।
- আপনার ডেটাকে ম্যানেজেবল (manageable) ছোট ছোট অংশে ভাগ করুন।
- জবগুলোকে গ্রুপ করতে Bus::batch() ব্যবহার করুন।
- allowFailures() ব্যবহার করুন যাতে একটি ভুল রো পুরো প্রসেসটি থামিয়ে না দেয়।
লাইফসাইকেল হুকস (lifecycle hooks) এভাবে কাজ করে:
- then(): শুধুমাত্র তখনই চলে যদি প্রতিটি জব সফল হয়।
- catch(): যখন প্রথম এরর (error) ঘটে তখন চলে।
- finally(): যখন সব জব শেষ হয় তখন চলে, এমনকি কিছু ব্যর্থ হলেও।
ব্যবহারকারীদের জন্য সুবিধা
আপনার React ফ্রন্টএন্ড ব্যাচ ID-টি পোল (poll) করতে পারে। এটি ০-১০০% প্রগ্রেস বার দেখায়। এটি একটি রহস্যময় ব্যাকগ্রাউন্ড টাস্ককে একটি স্বচ্ছ অভিজ্ঞতায় রূপান্তরিত করে।
ইঞ্জিনিয়ারিং ভ্যালু
আপনি ডিস্ট্রিবিউটেড টাস্কগুলোর ওপর নিয়ন্ত্রণ পান। আপনি সাইলেন্ট ফেইলর (silent failures) রোধ করতে পারেন। আপনি আপনার ব্যবহারকারীদের রিয়েল-টাইম ডেটা প্রদান করতে পারেন। আপনি নিশ্চিত করতে পারেন যে পোস্ট-প্রসেসিং লজিক সঠিক সময়ে রান করছে।
উৎস: https://dev.to/iprajapatiparesh/scaling-csv-imports-master-laravel-job-batching-iaa