चार लेवल हैं: read uncommitted, read committed, repeatable read और serializable, और ये कनकरेंसी के बदले में कुछ anomalies की छूट देते हैं: dirty reads, non repeatable reads, phantom reads और write skew। PostgreSQL का डिफ़ॉल्ट read committed है, जहां हर statement को एक ताज़ा snapshot मिलता है; InnoDB वाला MySQL डिफ़ॉल्ट रूप से repeatable read पर होता है, जहां पूरे ट्रांजैक्शन को एक ही snapshot दिखता है। serializable अकेला ऐसा लेवल है जो गारंटी देता है कि नतीजा किसी न किसी serial क्रम जैसा ही होगा।
इंटरव्यूअर यह क्यों पूछते हैं
बैकएंड सिस्टम्स में कनकरेंसी के बग असल में आइसोलेशन के बग होते हैं, और ये सिर्फ लोड पड़ने पर दिखते हैं, इसीलिए महंगे पड़ते हैं। इंटरव्यूअर जानना चाहते हैं कि आपको पता है आपका डेटाबेस असल में क्या गारंटी देता है, या आप बस यह मान लेते हैं कि ट्रांजैक्शन लगा दिया तो सब सुरक्षित है। अपने इंजन का डिफ़ॉल्ट बता देना और कोई असली anomaly बयान कर देना, जैसे एक balance check जो दो बार पास हो जाए, यह दिखाता है कि आपने इसे डिबग किया है, कोई टेबल रट कर नहीं आए।
अपना जवाब कैसे स्ट्रक्चर करें
- हर लेवल के साथ वह anomaly गिनाएं जो वह हटाता है।
- जिस डेटाबेस पर आप सच में काम करते हैं, उसका डिफ़ॉल्ट बताएं।
- एक ठोस anomaly बताएं जो आपने खुद झेली हो।
- बताएं कि आप उसे कैसे ठीक करेंगे: ऊंचा आइसोलेशन या explicit locking।
उदाहरण जवाब
ये read uncommitted से शुरू होकर serializable तक जाते हैं, और हर कदम पर एक anomaly हटती है, बदले में कनकरेंसी की कुछ कीमत लगती है। read committed dirty reads रोक देता है, लेकिन हर statement को अपना snapshot मिलता है, इसलिए एक ही ट्रांजैक्शन में वही query दो बार चलाने पर अलग rows आ सकती हैं। repeatable read पूरे ट्रांजैक्शन के लिए एक snapshot पिन कर देता है। serializable इसके ऊपर यह भी गारंटी देता है कि नतीजा वैसा ही होगा जैसा ट्रांजैक्शन एक के बाद एक चलाने पर होता, और Postgres में यह predicate tracking से होता है, इसलिए ब्लॉक करने की जगह वह ट्रांजैक्शन abort भी कर सकता है और आपको retry के लिए तैयार रहना पड़ता है। डिफ़ॉल्ट मायने रखते हैं: Postgres पर read committed है, InnoDB पर repeatable read, और एक से दूसरे पर जाने वाले लोग इससे चौंक जाते हैं। मैंने असल में जो बग झेला वह एक booking टेबल पर write skew था, जहां दो requests ने अलग अलग जांचा कि कोई overlapping reservation नहीं है, दोनों को साफ snapshot दिखा, और दोनों ने insert कर दिया। repeatable read से कुछ नहीं हुआ क्योंकि दोनों ने अलग rows लिखी थीं। हमने इसे serializable और retry से ठीक किया, और बाद में exclusion constraint से, जो सस्ता पड़ता है।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- write skew क्या है, और repeatable read इसे क्यों होने देता है?
- एप्लिकेशन कोड में आप serialization failures कैसे संभालते हैं?
- आइसोलेशन लेवल बढ़ाने की जगह आप select for update कब इस्तेमाल करेंगे?
बैकएंड डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें