MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB शेयरिंग के लिए एक डेवलपर गाइड

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

MongoDB में शेयरिंग क्या है

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

MongoDB Shards

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

क्लाइंट एप्लिकेशन से भेजे गए डेटा को सर्वर ड्राइवरों द्वारा इंटरसेप्ट किया जाता है और फिर राउटर को फीड किया जाता है। राउटर तब सर्वर कॉन्फ़िगरेशन से परामर्श करेगा, यह निर्धारित करने के लिए कि शार्प सर्वर पर रीड या राइट ऑपरेशन को कहां लागू किया जाए। संक्षेप में, लिखने जैसे ऑपरेशन के लिए, इसमें कुछ अनुक्रमणिका होती है जो यह तय करेगी कि मेजबान होने का रिकॉर्ड कौन सा शार्ड है। मान लें कि एक डेटाबेस में 1TB डेटा क्षमता है जो 4 शार्क में वितरित की जाती है, प्रत्येक शार्ड में 256GB डेटा होगा। कम मात्रा में डेटा के साथ एक शार्क संभाल सकता है, संचालन काफी तेजी से किया जा सकता है। आपको अपने डेटाबेस में शार्प किए गए क्लस्टर का उपयोग करने पर विचार करना चाहिए जब:

  1. आप उम्मीद करते हैं कि भविष्य में डेटा की मात्रा आपकी एकल आवृत्ति संग्रहण क्षमता से अधिक हो जाएगी।
  2. यदि लेखन कार्य एकल MongodB उदाहरण द्वारा निष्पादित करने में विफल रहता है
  3. सक्रिय कार्य सेट के बढ़े हुए आकार की कीमत पर आपके पास रैंडम एक्सेस मेमोरी रैम समाप्त हो जाती है।

साझाकरण अतिरिक्त संसाधनों के अलावा वास्तुकला में बढ़ी हुई जटिलता के साथ आता है। हालांकि, यह सलाह दी जाती है कि आपके डेटा के बढ़ने से पहले शुरुआती चरणों में शार्पिंग करें क्योंकि जब आपका डेटा क्षमता से परे होता है तो ऐसा करना काफी कठिन होता है।

MongoDB Shard Key

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

एक शार्ड कुंजी चुनना

शार्डिंग रणनीति की बेहतर कार्यक्षमता, क्षमता और प्रदर्शन के लिए, आपको उपयुक्त शार्ड की का चयन करना होगा। चयन मानदंड 2 कारकों पर निर्भर हैं:

  1. आपके डेटा की स्कीमा संरचना. उदाहरण के लिए हम एक ऐसे क्षेत्र पर विचार कर सकते हैं जिसका मूल्य बढ़ या घट सकता है (नीरस रूप से बदल रहा है)। यह सबसे अधिक संभावना है कि एक क्लस्टर के भीतर एक शार्प में इन्सर्ट के वितरण पर प्रभाव पड़ेगा।
  2. आपके क्वेरी कॉन्फ़िगरेशन को लेखन कार्य करने के लिए कैसे चित्रित किया जाता है।

हैशेड शार्ड की क्या है

यह शार्प कुंजी के रूप में एकल फ़ील्ड के हैशेड इंडेक्स का उपयोग करता है। एक हैशेड इंडेक्स एक इंडेक्स है जो इंडेक्स किए गए फ़ील्ड के मानों के हैश के साथ प्रविष्टियों को बनाए रखता है। यानी

{
    "_id" :"5b85117af532da651cc912cd"
}

हैशेड इंडेक्स बनाने के लिए आप इस कमांड का उपयोग मोंगो शेल में कर सकते हैं।

db.collection.createIndex( { _id: hashedValue } )

जहां hashedValue चर आपके निर्दिष्ट हैश मान की एक स्ट्रिंग का प्रतिनिधित्व करता है। हैशेड शार्डिंग एक शार्प्ड क्लस्टर में डेटा वितरण को बढ़ावा देता है जिससे लक्ष्य संचालन कम हो जाता है। हालांकि, लगभग समान शार्प कुंजियों वाले दस्तावेज़ एक ही शार्ड पर होने की संभावना नहीं है, इसलिए किसी दिए गए क्वेरी मानदंड को पूरा करने के लिए ब्रॉडकास्ट ऑपरेशन करने के लिए एक मोंगो इंस्टेंस की आवश्यकता होती है।

श्रेणी-आधारित शार्ड कुंजी

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

इष्टतम शार्ड कुंजी की विशेषताएं

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

उत्पादन क्लस्टर परिनियोजन के घटक

ऊपर दिखाए गए आर्किटेक्चर के संबंध में, उत्पादन शार्ड क्लस्टर में होना चाहिए:

  • मोंगोस/क्वेरी राउटर। ये मोंगो इंस्टेंस हैं जो एप्लिकेशन ड्राइवरों और डेटाबेस के बीच सर्वर के रूप में कार्य करते हैं। परिनियोजन में, लोड बैलेंसर को कॉन्फ़िगर किया जाता है ताकि एक ही क्लाइंट से एक ही मोंगो तक पहुंचने के लिए कनेक्शन को सक्षम किया जा सके।
  • शार्ड्स। ये वे विभाजन हैं जिनमें समान शार्प कुंजी परिभाषा साझा करने वाले दस्तावेज़ होस्ट किए जाते हैं। डेटा की उपलब्धता बढ़ाने के लिए आपके पास कम से कम 2 होने चाहिए।
  • कॉन्फ़िगर सर्वर:यदि आपके पास एकाधिक शार्प क्लस्टर होंगे तो आपके पास अलग-अलग मशीनों में 3 अलग-अलग कॉन्फ़िगरेशन सर्वर हो सकते हैं या उनमें से एक समूह हो सकता है।

साझा क्लस्टर का परिनियोजन

निम्नलिखित चरण आपको अपने शार्प किए गए क्लस्टर को परिनियोजित करने की दिशा में एक स्पष्ट दिशा देंगे।

  1. कॉन्फ़िगरेशन सर्वर के लिए होस्ट बनाना। डिफ़ॉल्ट रूप से, सर्वर फ़ाइलें /data/configdb निर्देशिका में उपलब्ध होती हैं लेकिन आप इसे हमेशा अपनी पसंदीदा निर्देशिका में सेट कर सकते हैं। डेटा निर्देशिका बनाने का आदेश है:

    $ mkdir /data/configdb
  2. कमांड का उपयोग करके प्रत्येक के लिए पोर्ट और फ़ाइल पथ को परिभाषित करके कॉन्फ़िगरेशन सर्वर प्रारंभ करें

    $ mongod --configsvr --dbpath /data/config --port 27018

    यह आदेश डेटा निर्देशिका में कॉन्फ़िगरेशन फ़ाइल को पोर्ट 27018 पर कॉन्फ़िगरेशन नाम के साथ प्रारंभ करेगा। डिफ़ॉल्ट रूप से सभी MongoDB सर्वर पोर्ट 27017 पर चलते हैं।

  3. सिंटैक्स का उपयोग करके एक मोंगोस इंस्टेंस शुरू करें:

    $ mongo --host hostAddress --port 27018.

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

  4. शार्ड सर्वर पर मोंगोड शुरू करें और कमांड का उपयोग करके इसे शुरू करें:

    mongod --shardsvr --replSet
    rs.initiate()
  5. राउटर पर अपने मोंगो को कमांड के साथ शुरू करें:

    mongos --configdb rs/mongoconfig:27018
  6. अपने क्लस्टर में शार्क जोड़ना। मान लें कि हमारे पास क्लस्टर के रूप में 27017 का डिफ़ॉल्ट पोर्ट है, हम पोर्ट 27018 पर इस तरह एक शार्ड जोड़ सकते हैं:

    mongo --host mongomaster --port 27017
    sh.addShard( "rs/mongoshard:27018")
    { "shardAdded" : "rs", "ok" : 1 }
  7. कमांड के साथ शार्ड नाम का उपयोग करके डेटाबेस के लिए शार्डिंग सक्षम करें:

    sh.enableSharding(shardname)
    { "ok" : 1 }

    आप कमांड से शार्ड की स्थिति की जांच कर सकते हैं:

    sh.status()

    आपको यह जानकारी दी जाएगी

    sharding version: {
    "_id" : 1,
    "minCompatibleVersion" : 5,
    "currentVersion" : 6,
    "clusterId" : ObjectId("59f425f12fdbabb0daflfa82")
    }
    shards:
    { "_id" : "rs", "host" : "rs/mongoshard:27018", "state" : 1 }
    active mongoses:
    "3.4.10" : 1
    autosplit:
    Currently enabled: yes
    balancer:
    Currently enabled: yes
    Currently running: no
    NaN
    Failed balancer rounds in last 5 attempts: 0
    Migration Results for the last 24 hours:
    No recent migrations
    databases:
    { "_id" : shardname, "primary" : "rs", "partitioned" : true }

शार्ड बैलेंसिंग

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

बैलेंसिंग प्रक्रिया में वर्कलोड ओवरहेड्स के अलावा बहुत सारे बैंडविड्थ की खपत होती है और यह आपके डेटाबेस के संचालन को प्रभावित करेगा। एक बेहतर संतुलन प्रक्रिया में शामिल है:

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

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. CouchDB बनाम MongoDB:10 बातें जो आपको जाननी चाहिए

  2. मोंगोडीबी के लिए सी # ड्राइवर:सीमा + गिनती का उपयोग कैसे करें?

  3. जाँच कर रहा है कि क्या किसी फ़ील्ड में एक स्ट्रिंग है

  4. नेवला में एक विदेशी कुंजी संबंध बनाना

  5. नेवला आबादी एम्बेडेड