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