MongoDB पर शेयरिंग और प्रतिकृति के बीच अंतर


77

मैं सिर्फ शेयरिंग और प्रतिकृति के बारे में भ्रमित हूं कि वे कैसे काम करते हैं .. परिभाषा के अनुसार

प्रतिकृति: MongoDB में सेट की गई प्रतिकृति एक ऐसी मूंगोद प्रक्रियाओं का समूह है जो समान डेटा सेट को बनाए रखता है।

शेयरिंग: शेयरिंग कई मशीनों में डेटा संग्रहीत करने के लिए एक विधि है।

मेरी समझ के अनुसार यदि 75 जीबी का डेटा है तो प्रतिकृति (3 सर्वर) द्वारा, यह प्रत्येक सर्वर पर 75GB डेटा का मतलब है, सर्वर -1 पर 75GB, सर्वर -2 पर 75GB और सर्वर -3 पर 75GB .. (मुझे सही करें) अगर मैं गलत हूं) .. और इसे तेज करके इसे सर्वर -1 पर 25 जीबी डेटा, सर्वर -2 पर 25 जीबी डेटा और सर्वर -3 पर 25 जीबी डेटा के रूप में संग्रहित किया जाएगा। (राइट?) ... लेकिन फिर मैंने इस लाइन का सामना किया? ट्यूटोरियल

डेटा संग्रहीत करता है। उच्च उपलब्धता और डेटा संगति प्रदान करने के लिए, एक उत्पादन शार्क क्लस्टर में, प्रत्येक शार्क एक प्रतिकृति सेट है

के रूप में प्रतिकृति सेट 75GB का है, लेकिन शार्क 25GB का है तो वे कैसे समकक्ष हो सकते हैं ... यह मुझे बहुत भ्रमित करता है ... मुझे लगता है कि मैं इसमें कुछ महान याद कर रहा हूं। कृपया इस संबंध में मेरी सहायता करें।

जवाबों:


111

एक प्रतिकृति-सेट का मतलब है कि आपके पास MongoDB के कई उदाहरण हैं जो प्रत्येक एक दूसरे के सभी डेटा को दर्पण करते हैं। एक प्रतिकृति-सेट में एक मास्टर (जिसे "प्राथमिक" भी कहा जाता है) और एक या अधिक दास (उर्फ माध्यमिक) शामिल हैं। रीड-ऑपरेशंस किसी भी गुलाम द्वारा परोसा जा सकता है, इसलिए आप प्रतिकृति-सेट में अधिक दासों को जोड़कर रीड-परफॉर्मेंस बढ़ा सकते हैं (बशर्ते कि आपका क्लाइंट एप्लिकेशन वास्तव में अलग-अलग सेट-सदस्यों का उपयोग करने में सक्षम हो)। लेकिन लिखने-संचालन हमेशा प्रतिकृति-सेट के मास्टर पर होता है और फिर दासों के लिए प्रचारित किया जाता है, इसलिए जब आप अधिक दास जोड़ते हैं तो लेखन तेजी से नहीं मिलेगा।

प्रतिकृति-सेट भी दोष-सहिष्णुता प्रदान करते हैं। जब प्रतिकृति-सेट के सदस्यों में से एक नीचे जाता है, तो अन्य लोग इसे संभाल लेते हैं। जब गुरु नीचे जाएगा, तो दास एक नए गुरु का चुनाव करेंगे। उस कारण से यह माना जाता है कि उत्पादक तैनाती के लिए हमेशा मोंगोबडी का उपयोग कम से कम तीन सर्वरों के प्रतिकृति-सेट के रूप में किया जाता है, उनमें से दो डेटा धारण करते हैं (तीसरा एक डेटा-कम "आर्बिटर" है जो एक नए मास्टर को निर्धारित करने के लिए आवश्यक है जब दासों में से एक नीचे चला जाता है)।

एक साझा क्लस्टर का अर्थ है कि क्लस्टर के प्रत्येक हिस्से (जो एक प्रतिकृति-सेट भी हो सकता है) डेटा के एक हिस्से का ध्यान रखता है। प्रत्येक अनुरोध, दोनों पढ़ता है और लिखता है, क्लस्टर द्वारा परोसा जाता है जहां डेटा रहता है। इसका मतलब यह है कि पढ़ने और लिखने के प्रदर्शन को एक क्लस्टर में अधिक शार्क जोड़कर बढ़ाया जा सकता है। कौन सा दस्तावेज़ उस पर रहता है जिस पर प्रत्येक संग्रह की शार्क कुंजी द्वारा निर्धारित किया जाता है । इसे इस तरह से चुना जाना चाहिए कि डेटा सभी समूहों पर समान रूप से वितरित किया जा सके और ताकि यह सबसे सामान्य प्रश्नों के लिए स्पष्ट हो, जहां शार्क-कुंजी रहती है (उदाहरण: जब आप अक्सर क्वेरी user_nameकरते हैं, तो आपकी शार्क-कुंजी में शामिल होना चाहिए) user_nameप्रत्येक क्वेरी को फ़ील्ड में केवल एक ही शार्प के लिए भेजा जा सकता है, जिसमें वह दस्तावेज़ है)।

दोष यह है कि दोष-सहिष्णुता ग्रस्त है। जब क्लस्टर का एक शार्प नीचे जाता है, तो उस पर मौजूद कोई भी डेटा अप्राप्य होता है। इस कारण से क्लस्टर के प्रत्येक सदस्य की प्रतिकृति भी होनी चाहिए। इसकी आवश्यकता नहीं है। जब आप उच्च उपलब्धता की परवाह नहीं करते हैं, तो एक शार्क प्रतिकृति के बिना भी एक एकल मोंगॉड उदाहरण हो सकता है । लेकिन उत्पादन-उपयोग के लिए आपको हमेशा प्रतिकृति का उपयोग करना चाहिए

तो आपके उदाहरण के लिए इसका क्या मतलब है?

                            Sharded Cluster             
             /                    |                    \
      Shard A                  Shard B                  Shard C
        / \                      / \                      / \
+-------+ +---------+    +-------+ +---------+    +-------+ +---------+
|Primary| |Secondary|    |Primary| |Secondary|    |Primary| |Secondary|
|  25GB |=| 25GB    |    | 25 GB |=| 25 GB   |    | 25GB  |=| 25GB    |   
+-------+ +---------+    +-------+ +---------+    +-------+ +---------+

जब आप 75GB के अपने डेटा को 25GB प्रत्येक के 3 शार्क में विभाजित करना चाहते हैं, तो आपको तीन प्रतिकृति-सेटों में कम से कम 6 डेटाबेस सर्वरों की आवश्यकता होती है। प्रत्येक प्रतिकृति-सेट में दो सर्वर होते हैं जिनके पास समान 25GB डेटा होता है।

आपको तीन प्रतिकृति-सेट के साथ-साथ मोंगो राउटर और क्लस्टर के लिए कॉन्फ़िगरेशन सर्वर के मध्यस्थों के लिए भी सर्वर की आवश्यकता है। मध्यस्थ बहुत हल्के होते हैं और केवल तब आवश्यक होते हैं जब एक प्रतिकृति-सेट सदस्य नीचे जाता है, इसलिए वे आमतौर पर उसी हार्डवेयर को किसी और चीज़ के साथ साझा कर सकते हैं। लेकिन मोंगोस राउटर और कॉन्फिग-सर्वर बेमानी और अपने स्वयं के सर्वर पर होना चाहिए।


2
विस्तार से उत्तर के लिए बहुत बहुत धन्यवाद ... एक और सवाल ... यदि प्राथमिक नीचे है जबकि एक लेखन या रीड ऑपरेशन किया जा रहा है तो। 1) प्राथमिक को दूसरी और 2 से चुनने में देरी क्या है) उस देरी के दौरान अस्थायी रूप से डेटा कहाँ संग्रहीत किया जाएगा?
साद सादी

4
@SaadSaadi प्राथमिक चुनाव प्रक्रिया प्रलेखन में वर्णित है । सेकेंडरी डाउन होने की सूचना सेकेंडरी के लिए 10 से 12 सेकंड के बीच लगती है। प्राथमिक चुनाव में आमतौर पर केवल मिलीसेकंड लगेगा। प्रतिकृति-सेट केवल-पढ़ने के लिए है, जबकि कोई प्राथमिक नहीं है। इस समय के दौरान डेटा लिखने के लिए किए गए किसी भी प्रयास विफल हो जाएंगे।
फिलिप

1
: w विकल्प के अनुरूप होने के लिए w विकल्प प्रतिकृति सेट sth के बराबर होना चाहिए जो व्यवहार्य नहीं है क्योंकि प्रत्येक शार्क के अलग-अलग प्रतिकृति सेट आकार जानबूझकर या नोड विफलताओं के कारण हो सकते हैं)।
माइक Argyriou

@Philipp क्या आप dba.stackexchange.com/questions/208482/… पर आगे के सवालों के जवाब दे सकते हैं ?
user3198603

18
  • Sharding विभाजन डेटा-सेट असतत भागों में।
  • प्रतिकृति डेटा-सेट को डुप्लिकेट करती है।

ये दोनों चीजें अलग हो सकती हैं क्योंकि वे अलग हैं। दोनों का उपयोग करके आप प्रतिकृतियों के कई समूहों में अपने डेटा-सेट को शार्प करेंगे। एक और तरीका रखो, आप शार्क को दोहराते हैं; कोई भी शार्प्स वाला डेटा-सेट एकल 'शार्क' नहीं है।

तीन शार्प और 3 प्रतिकृतियों वाले एक मोंगो क्लस्टर में 9 नोड होंगे।

  • 3-नोड प्रतिकृतियों के 3 सेट।
  • प्रत्येक प्रतिकृति-सेट में एक ही धार होती है।

एक बड़ी फ़ाइल के लिए, क्या इसे एक शार्द या मल्टीपल शर्ड (इस प्रकार नोड्स में) में संग्रहीत किया जाता है?
टोनी

ध्यान दें कि MongoDB 3.4 या उच्चतर में, आपको कॉन्फ़िगरेशन के लिए mongoDB सर्वर और mongo रूटर के रूप में कार्य करने के लिए एक अतिरिक्त सर्वर की भी आवश्यकता होगी। यह आपके उदाहरण में कुल 3x3 क्लस्टर को 13 सर्वरों के लिए लाता है।
दशहरा

9

तेज करके , आप अपने संग्रह को कई भागों में विभाजित करते हैं। अपने डेटाबेस को
दोहराने का मतलब है कि आप अपने डेटा-सेट के दर्पण बनाते हैं।


4

वितरित कार्यक्षमता के संदर्भ में। साझाकरण स्केलेबिलिटी और समानता प्रदान करता है। प्रतिकृति उपलब्धता प्रदान करती है


नहीं, प्रतिकृति केवल मापनीयता और समानता प्रदान करती है जिसे देखते हुए लिखा जाता है कि लिखने की तुलना में बहुत अधिक लगातार हैं
क्रिस्टोफ़ सज़ले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.