पूरा उठाने की जगह stream करें: scrollable cursor या keyset paging से पढ़ें, fetch size सेट करें ताकि driver सब कुछ buffer न कर ले, और chunks में process करते हुए हर chunk पर commit करें। JPA इस्तेमाल कर रहे हैं तो हर chunk के बीच persistence context clear करें या stateless session लें, वरना हर entity first level cache में पड़ी रहती है। writes को JDBC batching से batch करें, और job को आखिरी commit हुए chunk से दोबारा चालू होने लायक बनाएं।
इंटरव्यूअर यह क्यों पूछते हैं
Batch काम वहीं है जहां JVM की मेमोरी और persistence context का बर्ताव खुलकर सामने आता है, तो यह थ्योरी नहीं, असली तजुर्बा जांचता है। इंटरव्यूअर streaming, chunked commits, persistence context clear करना और restartability चाहते हैं। यह जानना कि सही fetch size और transaction settings के बिना JDBC driver आपके कोड के बावजूद पूरा result set buffer कर सकता है, मजबूत संकेत है।
अपना जवाब कैसे स्ट्रक्चर करें
- सब कुछ लोड करने का रास्ता बंद करें: पढ़ाई stream या page करें।
- fetch size और driver के buffering बर्ताव को समझाएं।
- persistence context संभालें ताकि entities जमा न हों।
- chunked commits, batched writes और restartability जोड़ें।
उदाहरण जवाब
मूल नियम यह है कि कोई भी कदम दो करोड़ चीजें एक साथ न पकड़े। मैं primary key पर keyset paging से पढ़ता हूं, या साफ fetch size वाले scrollable cursor से, और यह जानना जरूरी है कि कुछ drivers उसे अनदेखा करके पूरा result set buffer कर लेते हैं जब तक आप autocommit बंद करके transaction के भीतर न चलें, जो लोगों को तब पता चलता है जब process शुरू होने से पहले ही heap भर जाता है। फिर मैं कुछ हजार के chunks में process करता हूं, JDBC batching से लिखता हूं ताकि हर row की जगह हर chunk पर एक round trip हो, और हर chunk पर commit करता हूं। JPA के साथ एक अतिरिक्त जाल persistence context है: पढ़ी गई हर entity managed रहती है, तो मेमोरी बढ़ती है और dirty checking ज्यादा ऑब्जेक्ट्स पर घूमने लगती है जिससे flushes धीमे हो जाते हैं। मैं हर chunk पर उसे clear करता हूं या stateless session लेता हूं। Restartability मेमोरी जितनी ही जरूरी है, तो job आखिरी commit हुई key दर्ज करता है, यानी एक करोड़ अस्सी लाखवीं row पर नाकामी दोबारा शुरू करने की जगह वहीं से चलती है। और मैं इसे थ्रॉटल करता हूं, क्योंकि रात दो बजे डेटाबेस भर देने वाला batch job उन लोगों पर भी असर डालता है जो जागे हुए हैं।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- persistence context बढ़ने के साथ धीमा क्यों होता जाता है?
- इसे partitions में सुरक्षित तरीके से parallel कैसे करेंगे?
- restart के लिए आप transformation को idempotent कैसे बनाएंगे?
Java डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें