keyset pagination को तरजीह दें, जिसे cursor pagination भी कहते हैं: किसी स्थिर unique key पर order करें, आखिरी row के लिए एक opaque cursor लौटाएं और उसके बाद वाली rows मांगें। offset pagination में डेटाबेस को हर छोड़ी गई row पढ़कर फेंकनी पड़ती है, इसलिए पांच हज़ारवां पेज धीमा होता है, और scroll के बीच में insert या delete हुई rows से duplicates और gaps बनते हैं। keyset हर पेज पर लगभग एक जैसा समय लेता है और writes के बीच भी स्थिर रहता है।
इंटरव्यूअर यह क्यों पूछते हैं
यह एक छोटा डिज़ाइन फैसला है जो scale पर API चला चुके लोगों को बाकियों से अलग कर देता है। इंटरव्यूअर offset की दो खास नाकामियां सुनना चाहते हैं, लागत और अस्थिरता, साथ ही यह समझ कि cursor को एक deterministic sort encode करना होता है। follow up आमतौर पर पेचीदा हिस्सों पर जाते हैं: गैर unique column पर sorting, किसी मनमाने पेज पर छलांग, और total counts, जो महंगे होते हैं और अक्सर ज़रूरी नहीं होते।
अपना जवाब कैसे स्ट्रक्चर करें
- पहले सिफारिश दें, फिर उसे सही ठहराएं।
- offset की दोनों नाकामियां गिनाएं: गहरे पेज की लागत और खिसकते नतीजे।
- समझाएं कि cursor क्या encode करता है और उसे tiebreaker क्यों चाहिए।
- मानें कि आप क्या खोते हैं, जैसे सीधे पचासवें पेज पर कूदना।
उदाहरण जवाब
मेरा डिफ़ॉल्ट keyset है। क्लाइंट एक पेज मांगता है, उसे items के साथ एक opaque cursor मिलता है, और अगली request कहती है कि इस cursor के बाद वाली rows दो। अंदर से यह sort key पर एक where clause है, इसलिए सही index के साथ यह एक index seek है और पहले पेज तथा हज़ारवें पेज की लागत बराबर रहती है। offset ऐसा नहीं कर सकता, क्योंकि डेटाबेस को offset से पहले वाला सब कुछ चलकर फेंकना ही पड़ता है, और इससे भी बुरा यह कि किसी के scroll करते वक्त अगर एक row insert हो जाए तो उसके आगे के सब पेज खिसक जाते हैं और उसे या तो duplicate दिखता है या कोई item छूट जाता है। जो बात लोगों को फंसाती है वह है tiebreaker: अगर मैं created at पर sort करूं और दो rows का timestamp एक ही हो, तो क्रम deterministic नहीं रहता, इसलिए cursor created at के साथ id भी encode करता है और तुलना उस जोड़े पर होती है। मैं जो खोता हूं वह है मनमाने पेज पर छलांग और सस्ते total counts। infinite scroll वाली feed में इनकी कमी किसी को नहीं खलती; जिस admin टेबल को पेज नंबर चाहिए, वहां मैं एक तय अधिकतम सीमा के साथ offset इस्तेमाल कर लूंगा।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- cursor के साथ यूज़र के चुने हुए column पर sorting आप कैसे सपोर्ट करेंगे?
- पूरी टेबल scan किए बिना आप total count कैसे लौटाएंगे?
- cursor में क्या होना चाहिए, और क्या क्लाइंट उसे decode कर पाने चाहिए?
बैकएंड डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें