2012-07-20 11 views
42

प्रतिलिपि शेर्डिंग की तुलना में बहुत आसान प्रतीत होता है, जब तक कि मैं वास्तव में प्राप्त करने की कोशिश कर रहा हूं कि क्या लाभ का लाभ नहीं है। क्या वे दोनों क्षैतिज स्केलिंग प्रदान नहीं करते हैं?मोंगो में शेर्डिंग और प्रतिकृति के बीच क्या अंतर है?

उत्तर

59

स्केलिंग MongoDB के संदर्भ में:

  • replication डेटा की अतिरिक्त प्रतियां बनाता है और एक अन्य नोड के लिए स्वत: विफलता के लिए अनुमति देता है। यदि आप डेटा को पढ़ने के लिए ठीक हैं तो संभावित रूप से नवीनतम नहीं है, तो प्रतिकृति क्षैतिज स्केलिंग के साथ पढ़ने में मदद कर सकती है।

  • sharding एक ठीकरा कुंजी का उपयोग कर कई सर्वरों भर में डेटा विभाजन से लिखते हैं डेटा की क्षैतिज स्केलिंग के लिए अनुमति देता है। choose a good shard key के लिए यह महत्वपूर्ण है। उदाहरण के लिए, शार्ड कुंजी की खराब पसंद से डेटा के "हॉट स्पॉट" हो सकते हैं जो केवल एक ही शेड पर लिखा जा रहा है।

एक sharded पर्यावरण more complexity जोड़ता है क्योंकि MongoDB अब टुकड़ों के बीच डाटा और अनुरोधों के वितरण का प्रबंधन करने के है - अतिरिक्त विन्यास और रूटिंग प्रक्रियाओं उन पहलुओं का प्रबंधन करने के लिए जोड़ रहे हैं।

प्रतिकृति और शेर्डिंग आमतौर पर sharded cluster बनाने के लिए संयुक्त होते हैं जहां प्रत्येक शार्ड को प्रतिकृति सेट द्वारा समर्थित किया जाता है।

देखने के एक क्लाइंट अनुप्रयोग बिंदु से आप भी प्रतिकृति/sharding बातचीत के संबंध में कुछ नियंत्रण, विशेष रूप से:

+2

"मोंगोडब में प्रत्येक शार्ड एक प्रतिकृति सेट है" - यह सच नहीं है। आप अलग-अलग सर्वर को शर्ड्स के रूप में जोड़ सकते हैं। –

+2

@ सर्वियो टुएंटेसेव: धन्यवाद, स्पष्ट "है" जैसा "हो सकता है"। आदर्श रूप से आपका शर्ड * एक प्रतिलिपि सेट होना चाहिए ताकि कुछ रिडंडेंसी/फेलओवर हो। इसी तरह, एक प्रतिकृति सेट * एकाधिक सर्वरों पर * चलाना चाहिए (लेकिन तकनीकी रूप से, यह नहीं है)। – Stennie

+1

मैं "प्रतिकृति पर बनाता है" खंड को हटाने का सुझाव देता हूं। यह इस पर निर्माण नहीं करता है। दो चीजें पूरी तरह से ऑर्थोगोनल हैं। :) –

20

प्रतिकृति एक पारंपरिक मास्टर/गुलाम सेटअप है, डेटा बैकअप सदस्यों को सिंक किया जाता है और यदि प्राथमिक विफल रहता है तो उनमें से कोई भी अपना स्थान ले सकता है। यह एक उचित सरल उपकरण है। यह मुख्य रूप से अनावश्यकता के लिए है, हालांकि आप प्रतिकृति सेट सदस्यों को जोड़कर पढ़ सकते हैं। यह थोड़ा जटिल है, लेकिन कुछ ऐप्स के लिए बहुत अच्छा काम करता है।

शेर्डिंग प्रतिकृति के शीर्ष पर आमतौर पर बैठता है। मोंगोडीबी में "शर्ड्स" सिर्फ उनके सामने "राउटर" नामक चीज़ के साथ प्रतिकृति सेट हैं। आपका आवेदन राउटर से कनेक्ट होगा, समस्याएं जारी करेगा, और यह तय करेगा कि कौन सी प्रतिकृति सेट (शार्ड) चीजों को आगे बढ़ाने के लिए है। यह एक प्रतिकृति सेट की तुलना में काफी जटिल है क्योंकि आपके पास राउटर और कॉन्फ़िगर सर्वर से निपटने के लिए सर्वर हैं (ये ट्रैक रखें कि डेटा कहां संग्रहीत किया जाता है)।

यदि आप क्षैतिज रूप से मोंगो को स्केल करना चाहते हैं, तो आप shard करेंगे। 10gen राउटर/कॉन्फ़िगर सर्वर सेटअप ऑटो-शेर्डिंग को कॉल करना पसंद करता है। शेडिंग का एक और यहूदी रूप बनाना संभव है जहां आपके पास ऐप है कि डीबी को भी लिखना है।

+12

प्यार करता हूँ "अधिक यहूदी बस्ती फार्म" वाक्यांश की जरूरत है – scarpacci

4

जब भी आप सोच रहे हैं sharding या प्रतिकृति के बारे में, आपको लेखकों/अद्यतन संचालन के संदर्भ में सोचने की जरूरत है। यदि आपको लिखने की आवश्यकता नहीं है तो प्रतिकृतियां, क्योंकि यह काफी सरल है, आपके लिए एक अच्छी पसंद है।

दूसरी तरफ, यदि आप अधिकतर अपडेट/लिखते हैं तो कुछ समय पर आप एक लिखने की बाधा डाल देंगे। यदि लिखने का अनुरोध आता है तो मोंगो अन्य लिखने के अनुरोध को अवरुद्ध करता है।वे अनुरोध अनुरोध ब्लॉक तब तक लिखेंगे जब तक पहला अनुरोध नहीं किया जाएगा। यदि आप इस लेखन को स्केल करना चाहते हैं और इसे समानांतर बनाना चाहते हैं तो आपको शेर्डिंग को लागू करने की आवश्यकता है।

14

मान लें कि आपके हार्ड डिस्क पर एक अच्छा संगीत संग्रह है, आप अलग-अलग फ़ोल्डरों में रिलीज के वर्ष के आधार पर संगीत को तार्किक क्रम में संग्रहीत करते हैं। आप चिंतित हैं कि ड्राइव विफल होने पर आपका संग्रह खो जाएगा। तो आपको एक नई डिस्क मिलती है और कभी-कभी एक ही फ़ोल्डर संरचना को रखने वाले पूरे संग्रह की प्रतिलिपि बनाते हैं।

Sharding >>

प्रतिकृति >> भिन्न फ़ोल्डर में अपने संगीत फ़ाइलों को ध्यान में रखते हुए अन्य ड्राइव

+0

बहुत अच्छी तरह से समझाया गया। – mhndev

+0

स्टैक ओवरफ्लो को ऐसी शैली में अधिक उत्तरों की आवश्यकता है। – dgg32

12

Sharding

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

MongoDB sharding

मान लें, student संग्रह के लिए हम stdt_id ठीकरा कुंजी के रूप में है या यह एक यौगिक कुंजी हो सकता है। और mongos सर्वर, यह एक श्रेणी आधारित प्रणाली है। तो stdt_id पर आधारित है जिसे हम शार्ड कुंजी के रूप में भेजते हैं, यह अनुरोध mongod उदाहरण के लिए अनुरोध भेज देगा।

तो, हमें वास्तव में डेवलपर के रूप में क्या जानने की आवश्यकता है?

  • insert एक ठीकरा कुंजी को शामिल करना चाहिए, इसलिए यदि यह एक बहु जुदा ठीकरा कुंजी है, हम पूरी ठीकरा कुंजी
  • हम समझने के लिए ठीकरा कुंजी ही संग्रह
  • पर है है को शामिल करना चाहिए update, remove, find - यदि mongos को शर्ड कुंजी नहीं दी गई है - तो संग्रह को कवर करने वाले सभी अलग-अलग shards को अनुरोध प्रसारित करना होगा।
  • एक update के लिए - अगर हम पूरे ठीकरा कुंजी निर्दिष्ट नहीं करते हैं, हम इसे एक बहु अद्यतन बनाने के लिए इतना है कि यह जानता है कि यह प्रसारित करने के लिए यह
संबंधित मुद्दे