𝗟𝗮𝗿𝗮𝘃𝗲𝗹 𝗝𝗼𝗯 𝗕𝗮𝘁𝗰𝗵𝗶𝗻𝗴 తో 𝗖𝗦𝗩 ఇంపోర్ట్లను స్కేలింగ్ చేయడం
B2B SaaS క్లయింట్లు తరచుగా పెద్ద ఫైళ్లను అప్లోడ్ చేస్తారు. 1,00,000 వరుసలు (rows) ఉన్న ఒక CSV ఫైల్ను ఊహించుకోండి.
చాలా మంది డెవలపర్లు ఒక తప్పు చేస్తారు. వారు 1,00,000 విడివిడి బ్యాక్గ్రౌండ్ జాబ్లను పంపడానికి ఒక లూప్ను ఉపయోగిస్తారు. ఇది సమస్యలను సృష్టిస్తుంది.
ఒకవేళ 45,000వ జాబ్ విఫలమైతే, మీరు వినియోగదారునికి చెప్పడానికి మార్గం ఉండదు. మీరు పురోగతిని (progress) ట్రాక్ చేయలేరు. మొత్తం ఫైల్ పూర్తయిన తర్వాత మీరు ఒకే ఈమెయిల్ పంపలేరు. ఈ జాబ్లు ఒకదానికొకటి సంబంధం లేకుండా ఉంటాయి.
దీనిని పరిష్కరించడానికి మీకు Laravel Job Batching అవసరం.
పరిష్కారం: Bus::batch()
Job batching వేలకొద్దీ జాబ్లను ఒక యూనిట్గా సమూహపరుస్తుంది. Laravel ఈ యూనిట్కు ఒక ప్రత్యేకమైన IDని ఇస్తుంది. మీ ఫ్రంటెండ్ ఈ IDని ఉపయోగించి ప్రోగ్రెస్ బార్ను చూపుతుంది. ఇది విజయం లేదా వైఫల్యాన్ని నిర్వహించడానికి హుక్స్ (hooks) కూడా అందిస్తుంది.
దీనిని ఎలా అమలు చేయాలి:
- మీ CSVని చదవడానికి మెమరీ-సేఫ్ జనరేటర్ను (memory-safe generator) ఉపయోగించండి.
- మీ డేటాను నిర్వహించదగిన ముక్కలుగా (manageable pieces) విభజించండి (chunk).
- జాబ్లను సమూహపరచడానికి
Bus::batch()ఉపయోగించండి. - ఒకే ఒక తప్పు వరుస వల్ల మొత్తం ప్రక్రియ ఆగిపోకుండా ఉండటానికి
allowFailures()ఉపయోగించండి.
లైఫ్సైకిల్ హుక్స్ (lifecycle hooks) ఈ విధంగా పనిచేస్తాయి:
then(): ప్రతి జాబ్ విజయవంతమైతేనే ఇది రన్ అవుతుంది.catch(): మొదటి ఎర్రర్ వచ్చినప్పుడు ఇది రన్ అవుతుంది.finally(): కొన్ని జాబ్లు విఫలమైనప్పటికీ, అన్ని జాబ్లు పూర్తయినప్పుడు ఇది రన్ అవుతుంది.
వినియోగదారులకు కలిగే ప్రయోజనం
మీ React ఫ్రంటెండ్ బ్యాచ్ IDని పోల్ (poll) చేయగలదు. ఇది 0-100% ప్రోగ్రెస్ బార్ను చూపుతుంది. ఇది ఒక అస్పష్టమైన బ్యాక్గ్రౌండ్ టాస్క్ను పారదర్శకమైన అనుభవంగా మారుస్తుంది.
ఇంజనీరింగ్ విలువ
మీరు పంపిణీ చేయబడిన పనులపై (distributed tasks) నియంత్రణను పొందుతారు. మీరు సైలెంట్ ఫెయిల్యూర్స్ను (silent failures) నిరోధిస్తారు. మీరు మీ వినియోగదారులకు రియల్-టైమ్ డేటాను అందిస్తారు. పోస్ట్-ప్రాసెసింగ్ లాజిక్ సరైన సమయంలో రన్ అయ్యేలా మీరు నిర్ధారిస్తారు.
Source: https://dev.to/iprajapatiparesh/scaling-csv-imports-master-laravel-job-batching-iaa