आप एक query से list लाते हैं, फिर rows पर loop करके हर row के लिए एक और query दागते हैं, तो 200 posts 201 round trips बन जाते हैं। इसे एक ही पास में जुड़े हुए rows लाकर ठीक करें: एक join, parent id से keyed एक IN query, या ऐसा batching loader जो एक request tick के अंदर ids जमा कर ले। पहचान यह है कि latency नतीजों की गिनती के साथ सीधी रेखा में बढ़ती है जबकि हर अकेली query तेज़ दिखती है।
इंटरव्यूअर यह क्यों पूछते हैं
ORM पर बने एप्लिकेशनों में यह अकेला सबसे आम परफॉर्मेंस bug है, तो इंटरव्यूअर जांच रहा है कि आप इसे सिर्फ परिभाषित ही नहीं करेंगे, जंगल में पहचान भी लेंगे। वे सुनना चाहते हैं कि आप इसे कैसे पकड़ेंगे, क्योंकि queries अकेले अकेले सेहतमंद दिखती हैं और गलत सिर्फ उनकी गिनती होती है। जिस टूलिंग से आप इसे पकड़ेंगे उसका ज़िक्र उन लोगों को अलग करता है जिन्होंने इसे डिबग किया है और जिन्होंने इसके बारे में पढ़ा है।
अपना जवाब कैसे स्ट्रक्चर करें
- pattern को ठोस गिनती के साथ परिभाषित करें।
- बताएं कि चलते हुए ऐप में आप इसे कैसे पकड़ेंगे।
- कम से कम दो इलाज दें और बताएं कि कौन कब लागू होता है।
- सब कुछ eager load करने का ट्रेड-ऑफ बताएं।
उदाहरण जवाब
यह आमतौर पर उसी पल दिखता है जब कोई list render करता है। आप orders लाते हैं, फिर template में order.customer.name छूते हैं, और ORM चुपचाप हर row के लिए एक query दाग देता है। अकेले वे आधे मिलीसेकंड की हैं, तो कुछ टूटा हुआ नहीं दिखता जब तक list बढ़ न जाए और endpoint चार सेकंड न लेने लगे। मैं इसे query की अवधि नहीं, प्रति request query की गिनती देखकर पकड़ता हूं; ज़्यादातर APM टूल यह सीधे दिखाते हैं, और स्थानीय रूप से मैं query logging चालू करके गिनता हूं। इलाज शक्ल पर निर्भर है। सादे belongs to रिश्ते के लिए eager load या join ठीक है। ऐसे one to many के लिए जहां join rows को गुणा कर देगा, मैं IN clause वाली दूसरी query और memory में जोड़ना पसंद करता हूं। GraphQL API में यह dataloader ही होना चाहिए, क्योंकि resolvers को पता ही नहीं होता कि उन्हें एक साथ बुलाया जा रहा है। जिससे मैं बचता हूं वह है डिफ़ॉल्ट रूप से सब कुछ eager load करना, क्योंकि वह एक समस्या के बदले आधा डेटाबेस memory में खींच लेने की समस्या दे देता है।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- शिप होने से पहले CI में इसे कैसे पकड़ेंगे?
- join दो अलग queries से कब बुरा होता है?
- GraphQL के resolver tree में batching कैसे काम करती है?
फुल स्टैक डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें