2015-11-16 6 views
8

प्रतिकृति मोड में प्रत्येक लेखन ऑपरेशन किसी भी डीबी में किसी भी संग्रह में, ओप्लॉग संग्रह को भी लिखता है।मोंगोडीबी 3.0 प्रतिकृति मोड में ओप्लॉग संग्रह पर लॉक लिखें

अब, समानांतर में एकाधिक डीबी को लिखते समय, ये सभी लेखन ऑपरेशन ओप्लोग को भी लिखते हैं। मेरा प्रश्न: क्या इन लेखन कार्यों को ओप्लॉग लॉक करने की आवश्यकता है? (मैं डब्ल्यू का उपयोग कर रहा हूँ: 1 लिखें चिंता)। यदि वे करते हैं, तो यह सभी अलग-अलग डीबी में सभी लेखन कार्यों के बीच वैश्विक लॉक होने जैसा है, है ना?

मुझे इस पर कोई संकेत मिलने में खुशी होगी।

उत्तर

4

documentation के अनुसार, प्रतिकृति में, जब मोंगोडीबी प्राथमिक पर संग्रह में लिखता है, तो मोंगोडीबी प्राथमिक के ओप्लोग को भी लिखता है, जो स्थानीय डेटाबेस में एक विशेष संग्रह है। इसलिए, MongoDB को संग्रह के डेटाबेस और स्थानीय डेटाबेस दोनों को लॉक करना होगा। डेटाबेस को लगातार बनाए रखने के लिए मोंगोड को एक ही समय में दोनों डेटाबेस लॉक करना होगा और यह सुनिश्चित करना होगा कि प्रतिकृति के साथ भी लेखन कार्य "सभी या कुछ भी नहीं" ऑपरेशन हैं।

इसका मतलब है कि प्राथमिक पर समानांतर में एकाधिक डेटाबेस में समवर्ती लेखन के परिणामस्वरूप सभी लेखन कार्यों के बीच वैश्विक ताले हो सकते हैं। यह माध्यमिक पर लागू नहीं है, क्योंकि मोंगोडीबी लागू नहीं होता है, जो क्रमशः सेकेंडरी में लिखता है, लेकिन इसके बजाय बैचों में ओप्लॉग प्रविष्टियां एकत्र करता है और फिर उन बैचों को समानांतर में लागू करता है।

+0

एचएम, मैंने दस्तावेज़ पढ़े, लेकिन मैं अभी भी इसे विश्वास नहीं कर सकता। चूंकि ओप्लॉग प्रविष्टियां बेवकूफ हैं और डेटाबेस को एप्लिकेशन पर बंद कर दिया गया है, वास्तव में इसकी आवश्यकता नहीं होगी ... मुझे वास्तव में यह नहीं मिलता है। –

+1

यह ब्लॉग पोस्ट भी पढ़ने के लायक है। रीयल-टाइम मीट्रिक सिस्टम विकसित करते समय लेखक को 'ग्लोबल लॉक' का सामना करना पड़ा। – Jaco

+1

लिंक जोड़ने के लिए भूल गए: लिंक: http: //daprlabs.com/blog/blog/2014/04/19/mongodb/। कृपया ध्यान दें कि ब्लॉगर माइक्रोसॉफ्ट के लिए काम करता है और उसके कुछ निष्कर्ष कुछ पक्षपातपूर्ण प्रतीत होते हैं। – Jaco

3

अस्वीकरण यह मेरे सिर ऊपर से सभी को है, इसलिए मुझे कष्ट नहीं करते कृपया अगर मैं एक गलती की है। हालांकि, कृपया मुझे सही करें।

उन्हें क्यों चाहिए?

  1. परिसर: डेटाबेस परिभाषा के अनुसार परस्पर नहीं कर रहे हैं
  2. oplog entries are always idempotent
  3. Oplog एक capped collection, with a guarantee of preserving the insert order

के प्रश्नों का सही समानांतरवाद मान लेते हैं लागू किया जा रहा है। तो, हमारे पास एक ही समय में दो प्रश्न आ रहे हैं और हमें यह तय करना होगा कि पहले कौन सा ओप्लॉग डालना है। लॉक लेने वाला पहला व्यक्ति पहले लिख देगा, है ना? इसके अलावा, एक समस्या है। आइए मान लें कि पहली क्वेरी एक साधारण db.collection.update({_id:"foo"},{$set:{"bar":"baz"}}) है जबकि दूसरी क्वेरी अधिक जटिल है और इसमें शुद्धता के मूल्यांकन के लिए अधिक समय लगता है। इसलिए इसे रोकने के लिए, आगमन पर पर लॉक लेना पड़ा और idempotent oplog प्रविष्टि के बाद जारी किया गया था।

यहाँ जहां मैं अपने स्मृति

हालांकि, प्रश्नों समानांतर में लागू नहीं होती हैं का सहारा लेना पड़ रहा है। प्रश्न कतार हैं और आगमन के क्रम में मूल्यांकन किया गया है। क्वेरी ऑप्टिमाइज़र के माध्यम से चलने के बाद डेटाबेस क्वेरी के आवेदन पर लॉक हो जाता है। उस लॉक के दौरान idplpotent oplog प्रश्न oplog को लिखा जाता है। चूंकि डेटाबेस इंटरकनेक्टेड नहीं हैं और किसी भी समय किसी डेटाबेस पर केवल एक क्वेरी लागू की जा सकती है, डेटाबेस पर लॉक पर्याप्त है। वैसे भी एक ही डेटाबेस में दो डेटा बदलते प्रश्नों को लागू किया जा सकता है, तो ओप्लॉग पर लॉक क्यों सेट किया जाना चाहिए? जाहिर है, स्थानीय डेटाबेस पर एक ताला लगाया जाता है। हालांकि, चूंकि डेटा पर लॉक पहले ही लिया जा चुका है, इसलिए मुझे कारण नहीं दिख रहा है।* स्क्रैचिंग MyHead *

+2

यह ब्लॉग पोस्ट भी पढ़ने योग्य है, यह 'प्रभावी रूप से वैश्विक लॉक' का वर्णन करता है जो प्रतिकृति सेट में अधिक तकनीकी विवरण में हो सकता है: http://daprlabs.com/blog/blog/2014/04/19/mongodb/ – Jaco

+0

@ जैको दिलचस्प पढ़ा, हालांकि मैं अपने निष्कर्ष दूसरे नहीं कर सकता। हालांकि, डबल लॉक मुद्दा जांच के लायक हो सकता है। –

संबंधित मुद्दे