ज़्यादातर मामलों में optimistic locking इस्तेमाल करें: row को एक version column या timestamp दें, उसे update के predicate में शामिल करें, और अगर zero rows अपडेट हुईं तो मतलब रिकॉर्ड आपके नीचे से बदल चुका है, तो आप conflict लौटा देते हैं। pessimistic locking, यानी छोटे ट्रांजैक्शन के अंदर select for update, तब लें जब conflicts अक्सर होते हों या ऑपरेशन को सुरक्षित तरीके से retry नहीं किया जा सकता। जो आपको हरगिज़ नहीं करना चाहिए वह है बिना किसी जांच के read, modify और write।
इंटरव्यूअर यह क्यों पूछते हैं
lost updates डेटा करप्शन की वह किस्म है जो चुपचाप होती है और टेस्ट में कभी नहीं पकड़ी जाती। इंटरव्यूअर देखना चाहते हैं कि आपको read modify write का खतरा पता है, आप आदत की जगह contention देखकर रणनीति चुनते हैं, और आप यूज़र एक्सपीरियंस के नतीजे समझते हैं: optimistic locking का मतलब है किसी को error मिलेगा और उसे merge करना पड़ेगा, pessimistic locking का मतलब है किसी को इंतज़ार करना पड़ेगा और अब lock lifetime तथा deadlock का जोखिम आपका है।
अपना जवाब कैसे स्ट्रक्चर करें
- पहले खतरा नाम लेकर बताएं: बिना guard के read modify write।
- optimistic locking को मशीनी तरीके से समझाएं, zero rows वाली जांच सहित।
- बताएं कि contention कब pessimistic locking को जायज़ ठहराती है।
- conflict होने पर यूज़र को क्या दिखता है, यह भी बताएं।
उदाहरण जवाब
गड़बड़ी read modify write है, जहां दोनों requests version एक लोड करती हैं, दोनों पुराने डेटा से हिसाब लगाती हैं और दूसरी write चुपचाप जीत जाती है। मेरा डिफ़ॉल्ट हल optimistic है: हर row पर एक version होता है, update कहता है where id यह हो और version वही हो जो मैंने पढ़ा था, और फिर वह version बढ़ा देता है। अगर update बताता है कि zero rows बदलीं, तो कोई और पहले पहुंच गया और मैं 409 लौटाता हूं, यह दिखावा नहीं करता कि सब ठीक हो गया। जब conflicts कम होते हैं, और आमतौर पर होते ही कम हैं, तब इसकी कोई कीमत नहीं लगती। मैं pessimistic locking पर तब जाता हूं जब contention सच में है या retry मंज़ूर नहीं, जैसे inventory घटाना, जहां मैं उस row पर select for update लेता हूं, एक छोटे ट्रांजैक्शन में जांच और write दोनों कर लेता हूं, और उस ट्रांजैक्शन के अंदर कोई network call नहीं रखता। जिस बात की मुझे सबसे ज़्यादा परवाह है वह यह कि यूज़र को क्या दिखता है। कोरा conflict error बेकार है, इसलिए एक document editor में हम error के साथ मौजूदा version भी लौटाते थे ताकि क्लाइंट काम गंवाने की जगह एक diff दिखा सके।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- अपने HTTP API के ज़रिए आप conflict को कैसे उजागर करेंगे?
- किसी service call के दौरान select for update पकड़े रखने में क्या जोखिम हैं?
- if match वाला ETag optimistic locking से कैसे जुड़ता है?
बैकएंड डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें