यदि सभी उदाहरण एकल लोड-संतुलित Input
. के पीछे बैठे हैं एंडपॉइंट (जैसे 27017), फिर हर बार जब आपकी क्लाइंट मशीन एंडपॉइंट से जुड़ती है, तो यह रेप्लिकासेट क्लस्टर में संभावित रूप से अलग-अलग नोड्स से जुड़ी होगी (और आपके पास इस पर कोई नियंत्रण नहीं होगा कि आप किस इंस्टेंस पर गए थे)। यह समझा सकता है कि आप कभी-कभी गैर-मास्टर को लिखने का प्रयास क्यों करते हैं और एक त्रुटि प्राप्त करते हैं, फिर भी आपके सभी पठन काम करते हैं (चूंकि आपने शायद माध्यमिक नोड्स पर पढ़ने की अनुमति देने के लिए MongoDB क्लस्टर सेट किया है)।
कार्यकर्ता भूमिकाएं InstanceInput
का भी समर्थन करती हैं एंडपॉइंट्स, जो आपको बाहरी रूप से सामना करने वाली पोर्ट रेंज (जैसे, 27017-27019) सेट करने की अनुमति देता है, वर्कर इंस्टेंस पर एक ही पोर्ट पर मैपिंग करता है (उदाहरण के लिए 27017)। यदि आप ऐसा करते हैं, तो आपका क्लाइंट ऐप अब तीनों इंस्टेंस से सीधे कनेक्ट हो सकता है (27017, 27018, 27019)। कई ड्राइवर रेप्लिकासेट कनेक्शन का समर्थन करते हैं, इसलिए यह पता लगाने में सक्षम होगा कि कौन सा नोड मास्टर है, सभी को इसे लिखने का निर्देश देता है। मुझे नहीं पता कि जिस ड्राइवर का आप Android पर उपयोग कर रहे हैं, वह रेप्लिकासेट का समर्थन करता है या नहीं। यदि ड्राइवर प्रतिकृतियों का समर्थन नहीं करता है, तो आप शायद एक एपीआई स्तरीय डालने पर विचार करना चाहेंगे जो तब डेटाबेस के लिए सभी संचार करता है (वैसे भी, सामान्य रूप से पालन करने के लिए एक अच्छा अभ्यास, और आप इसके लिए Azure की मोबाइल सेवाओं को देख सकते हैं इसे लागू करने का एक त्वरित तरीका)।
इसलिए... यदि आपके रेप्लिकासेट क्लस्टर का समापन बिंदु Input
. के रूप में कॉन्फ़िगर किया गया है , यह संभावित रूप से आपके द्वारा देखी जा रही समस्या की व्याख्या करता है, जिसे एंडपॉइंट प्रकार को InstanceInput
पर स्विच करके हल किया जा सकता है ।