𝗦𝗰𝗮𝗹𝗶𝗻𝗴 𝗖𝗦𝗩 𝗜𝗺𝗽𝗼𝗿𝘁𝘀 𝗪𝗶𝘁𝗵 𝗟𝗮𝗿𝗮𝘃𝗲𝗹 𝗝𝗼𝗯 𝗕𝗮𝘁𝗰𝗵𝗶𝗻𝗴
B2B SaaS ಕ್ಲೈಂಟ್ಗಳು ಹೆಚ್ಚಾಗಿ ದೊಡ್ಡ ಫೈಲ್ಗಳನ್ನು ಅಪ್ಲೋಡ್ ಮಾಡುತ್ತಾರೆ. 1,00,000 ಸಾಲುಗಳಿರುವ (rows) ಒಂದು CSV ಫೈಲ್ ಅನ್ನು ಕಲ್ಪಿಸಿಕೊಳ್ಳಿ.
ಹೆಚ್ಚಿನ ડેವಲಪರ್ಗಳು ಒಂದು ತಪ್ಪು ಮಾಡುತ್ತಾರೆ. ಅವರು 1,00,000 ಪ್ರತ್ಯೇಕ ಬ್ಯಾಕ್ಗ್ರೌಂಡ್ ಜಾಬ್ಗಳನ್ನು (background jobs) ಕಳುಹಿಸಲು ಲೂಪ್ ಅನ್ನು ಬಳಸುತ್ತಾರೆ. ಇದು ಸಮಸ್ಯೆಗಳನ್ನು ಉಂಟುಮಾಡುತ್ತದೆ.
ಒಂದು ವೇಳೆ 45,000 ನೇ ಜಾಬ್ ಫೇಲ್ ಆದರೆ, ಅದನ್ನು ಬಳಕೆದಾರರಿಗೆ ತಿಳಿಸಲು ನಿಮ್ಮ ಬಳಿ ಯಾವುದೇ ದಾರಿ ಇರುವುದಿಲ್ಲ. ನೀವು ಪ್ರಗತಿಯನ್ನು (progress) ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ. ಇಡೀ ಫೈಲ್ ಮುಗಿದ ನಂತರ ಒಂದೇ ಇಮೇಲ್ ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಈ ಜಾಬ್ಗಳು ಒಂದಕ್ಕೊಂದು ಸಂಬಂಧವಿಲ್ಲದಂತಿರುತ್ತವೆ.
ಇದನ್ನು ಸರಿಪಡಿಸಲು ನಿಮಗೆ Laravel Job Batching ಅಗತ್ಯವಿದೆ.
ಪರಿಹಾರ: Bus::batch()
Job batching ಸಾವಿರಾರು ಜಾಬ್ಗಳನ್ನು ಒಂದೇ ಘಟಕವಾಗಿ (unit) ಗುಂಪು ಮಾಡುತ್ತದೆ. Laravel ಈ ಘಟಕಕ್ಕೆ ಒಂದು ವಿಶಿಷ್ಟವಾದ ID ಅನ್ನು ನೀಡುತ್ತದೆ. ನಿಮ್ಮ ಫ್ರಂಟ್ಎಂಡ್ (frontend) ಈ ID ಅನ್ನು ಬಳಸಿ ಪ್ರೋಗ್ರೆಸ್ ಬಾರ್ ಅನ್ನು ತೋರಿಸುತ್ತದೆ. ಇದು ಯಶಸ್ಸು ಅಥವಾ ವೈಫಲ್ಯವನ್ನು ನಿರ್ವಹಿಸಲು 'hooks' ಅನ್ನು ಸಹ ಒದಗಿಸುತ್ತದೆ.
ಇದನ್ನು ಹೇಗೆ ಅಳವಡಿಸಿಕೊಳ್ಳುವುದು (implement):
- ನಿಮ್ಮ CSV ಅನ್ನು ಓದಲು ಮೆಮೊರಿ-ಸುರಕ್ಷಿತ ಜನರೇಟರ್ (memory-safe generator) ಬಳಸಿ.
- ನಿಮ್ಮ ಡೇಟಾವನ್ನು ನಿರ್ವಹಿಸಬಹುದಾದ ಸಣ್ಣ ಭಾಗಗಳಾಗಿ (chunks) ವಿಂಗಡಿಸಿ.
- ಜಾಬ್ಗಳನ್ನು ಗುಂಪು ಮಾಡಲು Bus::batch() ಬಳಸಿ.
- ಒಂದು ಕೆಟ್ಟ ಸಾಲು ಇಡೀ ಪ್ರಕ್ರಿಯೆಯನ್ನು ನಿಲ್ಲಿಸದಂತೆ ನೋಡಿಕೊಳ್ಳಲು allowFailures() ಬಳಸಿ.
ಲೈಫ್ಸೈಕಲ್ ಹುಕ್ಸ್ (lifecycle hooks) ಈ ರೀತಿ ಕೆಲಸ ಮಾಡುತ್ತವೆ:
- then(): ಪ್ರತಿಯೊಂದು ಜಾಬ್ ಯಶಸ್ವಿಯಾದರೆ ಮಾತ್ರ ಇದು ಚಲಿಸುತ್ತದೆ.
- catch(): ಮೊದಲ ತಪ್ಪು (error) ಸಂಭವಿಸಿದಾಗ ಇದು ಚಲಿಸುತ್ತದೆ.
- finally(): ಕೆಲವು ಜಾಬ್ಗಳು ಫೇಲ್ ಆಗಿದ್ದರೂ ಸಹ, ಎಲ್ಲಾ ಜಾಬ್ಗಳು ಮುಗಿದ ನಂತರ ಇದು ಚಲಿಸುತ್ತದೆ.
ಬಳಕೆದಾರರಿಗೆ ಆಗುವ ಪ್ರಯೋಜನ
ನಿಮ್ಮ React ಫ್ರಂಟ್ಎಂಡ್ ಬ್ಯಾಚ್ ID ಅನ್ನು ಪೋಲ್ (poll) ಮಾಡಬಹುದು. ಇದು 0-100% ಪ್ರೋಗ್ರೆಸ್ ಬಾರ್ ಅನ್ನು ತೋರಿಸುತ್ತದೆ. ಇದು ನಿಗೂಢವಾದ ಬ್ಯಾಕ್ಗ್ರೌಂಡ್ ಕಾರ್ಯವನ್ನು ಪಾರದರ್ಶಕ ಅನುಭವವನ್ನಾಗಿ ಬದಲಾಯಿಸುತ್ತದೆ.
ಎಂಜಿನಿಯರಿಂಗ್ ಮೌಲ್ಯ
ನೀವು ವಿತರಿಸಿದ ಕಾರ್ಯಗಳ (distributed tasks) ಮೇಲೆ ನಿಯಂತ್ರಣವನ್ನು ಪಡೆಯುತ್ತೀರಿ. ನೀವು ಮೌನ ವೈಫಲ್ಯಗಳನ್ನು (silent failures) ತಡೆಯುತ್ತೀರಿ. ನಿಮ್ಮ ಬಳಕೆದಾರರಿಗೆ ನೈಜ-ಸಮಯದ (real-time) ಡೇಟಾವನ್ನು ಒದಗಿಸುತ್ತೀರಿ. ಪೋಸ್ಟ್-ಪ್ರೊಸೆಸಿಂಗ್ ಲಾಜಿಕ್ ಸರಿಯಾದ ಸಮಯದಲ್ಲಿ ಚಲಿಸುವುದನ್ನು ನೀವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುತ್ತೀರಿ.
ಮೂಲ (Source): https://dev.to/iprajapatiparesh/scaling-csv-imports-master-laravel-job-batching-iaa