Laravel Job Batching மூலம் CSV இறக்குமதியை அளவிடுதல் (Scaling CSV Imports)
B2B SaaS வாடிக்கையாளர்கள் பெரும்பாலும் பெரிய கோப்புகளைப் பதிவேற்றுகிறார்கள். 100,000 வரிசைகளைக் கொண்ட ஒரு CSV கோப்பை கற்பனை செய்து பாருங்கள்.
பெரும்பாலான டெவலப்பர்கள் ஒரு தவறு செய்கிறார்கள். அவர்கள் 100,000 தனித்தனி பின்னணி வேலைகளை (background jobs) அனுப்ப ஒரு லூப்பை (loop) பயன்படுத்துகிறார்கள். இது சிக்கல்களை உருவாக்குகிறது.
வேலை எண் 45,000 தோல்வியடைந்தால், அதை பயனருக்குத் தெரிவிக்க உங்களிடம் வழி இல்லை. உங்களால் முன்னேற்றத்தைக் (progress) கண்காணிக்க முடியாது. முழு கோப்பும் முடிந்ததும் ஒரே ஒரு மின்னஞ்சலை அனுப்ப முடியாது. இந்த வேலைகள் ஒன்றோடொன்று இணைக்கப்படவில்லை.
இதைச் சரிசெய்ய உங்களுக்கு Laravel Job Batching தேவைப்படுகிறது.
தீர்வு: Bus::batch()
Job batching என்பது ஆயிரக்கணக்கான வேலைகளை ஒரே அலகாக (unit) குழுவாக்குகிறது. Laravel இந்த அலகிற்கு ஒரு தனித்துவமான ID-யை வழங்குகிறது. உங்கள் frontend இந்த ID-யைப் பயன்படுத்தி ஒரு progress bar-ஐக் காட்டுகிறது. இது வெற்றி அல்லது தோல்வியைக் கையாள hooks-களையும் வழங்குகிறது.
இதை எவ்வாறு செயல்படுத்துவது:
- உங்கள் CSV-ஐப் படிக்க memory-safe generator-ஐப் பயன்படுத்தவும்.
- உங்கள் தரவை கையாளக்கூடிய துண்டுகளாக (chunks) பிரிக்கவும்.
- வேலைகளைக் குழுவாக்க
Bus::batch()பயன்படுத்தவும். - ஒரு தவறான வரி முழு செயல்முறையையும் நிறுத்தாமல் இருக்க
allowFailures()பயன்படுத்தவும்.
Lifecycle hooks இவ்வாறு செயல்படுகின்றன:
then(): ஒவ்வொரு வேலையும் வெற்றியடைந்தால் மட்டுமே இது இயங்கும்.catch(): முதல் பிழை ஏற்படும் போது இது இயங்கும்.finally(): சில வேலைகள் தோல்வியடைந்தாலும், அனைத்து வேலைகளும் முடிந்ததும் இது இயங்கும்.
பயனர்களுக்கான பயன்
உங்கள் React frontend batch ID-யை தொடர்ந்து சரிபார்க்கும் (poll). இது 0-100% progress bar-ஐக் காட்டும். இது ஒரு மர்மமான பின்னணிப் பணியை (background task) வெளிப்படையான அனுபவமாக மாற்றுகிறது.
பொறியியல் மதிப்பு (Engineering Value)
விநியோகிக்கப்பட்ட பணிகளின் (distributed tasks) மீது நீங்கள் கட்டுப்பாட்டைப் பெறுகிறீர்கள். அமைதியான தோல்விகளை (silent failures) நீங்கள் தடுக்கிறீர்கள். உங்கள் பயனர்களுக்கு நிகழ்நேரத் தரவை (real-time data) வழங்குகிறீர்கள். post-processing logic சரியான நேரத்தில் இயங்குவதை உறுதி செய்கிறீர்கள்.
ஆதாரம்: https://dev.to/iprajapatiparesh/scaling-csv-imports-master-laravel-job-batching-iaa