MongoDB Academy · पाठ

शार्डिंग अवधारणाएँ: चंक्स, बैलेंसर और शार्ड कुंजियाँ

शिक्षार्थी चंक्स परिभाषित करेंगे और समझाएँगे कि डेटा का समान वितरण बनाए रखने के लिए बैलेंसर उन्हें शार्डों के बीच कैसे स्थानांतरित करता है।

पाठ 1, कुल 4 में से13 चरण

शार्डिंग अवधारणाएँ: चंक्स, बैलेंसर और शार्ड कुंजियाँ, CoddyKit पर MongoDB Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह MongoDB Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। MongoDB Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

शार्डिंग क्या है

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

शार्ड किए गए क्लस्टर के घटक

शार्ड किए गए क्लस्टर में तीन भूमिकाएँ होती हैं: शार्ड्स — वास्तविक डेटा संग्रहीत करने वाले प्रतिकृति सेट। मोंगोज़ — एक क्वेरी राउटर, जो क्लाइंट कनेक्शन प्राप्त करता है और ऑपरेशनों को सही शार्ड या शार्ड्स तक भेजता है। कॉन्फ़िग सर्वर — एक प्रतिकृति सेट, जो क्लस्टर का मेटाडेटा संग्रहीत करता है, जिसमें शार्ड कुंजी की सीमाएँ और चंक के स्थान शामिल हैं। क्लाइंट हमेशा mongos से कनेक्ट होते हैं, सीधे शार्ड्स से कभी नहीं।

// Connect to the cluster via mongos (same URI format as a standalone)
const client = new MongoClient('mongodb://mongos-host:27017/mydb')

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

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

// Enable sharding on a database
sh.enableSharding('mydb')

// Shard a collection by userId
sh.shardCollection('mydb.events', { userId: 1 })

चंक क्या होता है?

MongoDB शार्ड कुंजी की सीमा को चंक्स में बाँटता है — ये शार्ड कुंजी के मानों की लगातार क्रम में स्थित सीमाएँ होती हैं। प्रत्येक चंक ठीक एक शार्ड पर रहता है। डिफ़ॉल्ट रूप से, MongoDB किसी चंक को दो छोटे चंक्स में बाँटने से पहले उसका आकार 128 MB तक बढ़ने देता है। प्रत्येक चंक किस शार्ड पर रहता है, यह कॉन्फ़िग सर्वर के मेटाडेटा में दर्ज होता है।

// View the chunks for a collection
use config
db.chunks.find(
  { ns: 'mydb.events' },
  { shard: 1, min: 1, max: 1 }
).limit(10)

बैलेंसर: डेटा को संतुलित करना

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

// Check if the balancer is running
sh.getBalancerState()

// Check balancer status
sh.status()

// Pause the balancer during a maintenance window
sh.stopBalancer()

लक्षित बनाम बिखरी-संग्रहित क्वेरियाँ

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

// Targeted: mongos routes to one shard
db.events.find({ userId: 'u123', date: { $gt: ISODate('2025-01-01') } })

// Scatter-gather: mongos fans out to all shards
db.events.find({ eventType: 'click' })

हॉट शार्ड्स: एक गलत पैटर्न

हॉट शार्ड (या हॉट स्पॉट) तब होता है जब पढ़ने या लिखने का असंगत रूप से बड़ा हिस्सा किसी एक शार्ड पर पहुँचता है। इसके सामान्य कारण हैं: लगातार बढ़ने वाली शार्ड कुंजी का उपयोग करना (जैसे createdAt या ObjectId), जिससे सभी नए इन्सर्ट हमेशा सबसे ऊँचे चंक में जाते हैं; या कम-विविधता वाली कुंजी का उपयोग करना (जैसे बूलियन), जो समानांतरता को सीमित करती है। हॉट शार्ड्स शार्डिंग के लाभों को समाप्त कर देते हैं।

// BAD: ObjectId is monotonically increasing
// All new inserts go to the 'max' chunk on one shard
sh.shardCollection('mydb.events', { _id: 1 })  // AVOID

// BETTER: Use hashed sharding to distribute new inserts
sh.shardCollection('mydb.events', { _id: 'hashed' })

जंप कंसिस्टेंट और जंबो चंक्स

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

// Identify jumbo chunks (jumbo: true in chunk metadata)
use config
db.chunks.find({ ns: 'mydb.events', jumbo: true }).count()

sh.status() से शार्ड वितरण देखना

sh.status() आपके शार्ड किए गए क्लस्टर का पूरा विवरण देता है: कौन-से कलेक्शन शार्ड किए गए हैं, प्रत्येक शार्ड पर कितने चंक्स मौजूद हैं, और प्रत्येक शार्ड के स्वामित्व वाली कुंजी सीमाएँ क्या हैं। इसका उपयोग असंतुलित चंक वितरण को जल्दी पहचानने और नया शार्ड जोड़ने के बाद यह पुष्टि करने के लिए कीजिए कि बैलेंसर ने स्थानांतरण पूरे कर लिए हैं।

// Full cluster status
sh.status()

// Targeted collection info
db.runCommand({ collStats: 'events' })
// Look at 'sharded', 'count', 'nchunks', 'shards' fields

नया शार्ड जोड़ना

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

// Add a new shard (replica set format)
sh.addShard('rs1/new-shard-host:27017')

// Monitor migration progress
sh.status()
db.adminCommand({ balancerCollectionStatus: 'mydb.events' })

शार्डिंग कब करें: निर्णय की सीमा

शार्डिंग से संचालन संबंधी जटिलता बढ़ती है। शार्डिंग करने से पहले वर्टिकल स्केलिंग और इंडेक्सिंग के विकल्पों का पूरा उपयोग कर लीजिए। शार्डिंग के सामान्य संकेत हैं: एकल प्रतिकृति सेट पर डेटा वॉल्यूम > 1–2 TB, ऐसा राइट थ्रूपुट जो एकल प्राइमरी को पूरी तरह व्यस्त कर दे, या ऐसा वर्किंग सेट जो अब RAM में समा न सके। शार्डिंग का निर्णय लेने से पहले हमेशा explain() और प्रोफ़ाइलिंग के साथ बेंचमार्क कीजिए।

त्वरित जाँच

इस पाठ में MongoDB और NoSQL डेटाबेस की अवधारणाओं के बारे में अपनी समझ जाँचिए।

पाठ का पुनरावलोकन

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

शुरुआत निःशुल्क

एआई शिक्षक के साथ JavaScript सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
30
पाठ
120

अक्सर पूछे जाने वाले प्रश्न

क्या “शार्डिंग अवधारणाएँ: चंक्स, बैलेंसर और शार्ड कुंजियाँ” पाठ निःशुल्क है?

हाँ—“शार्डिंग अवधारणाएँ: चंक्स, बैलेंसर और शार्ड कुंजियाँ” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और MongoDB Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। MongoDB Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“शार्डिंग अवधारणाएँ: चंक्स, बैलेंसर और शार्ड कुंजियाँ” में मैं क्या सीखूँगा?

शिक्षार्थी चंक्स परिभाषित करेंगे और समझाएँगे कि डेटा का समान वितरण बनाए रखने के लिए बैलेंसर उन्हें शार्डों के बीच कैसे स्थानांतरित करता है। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ MongoDB Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या MongoDB Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर MongoDB Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“शार्डिंग अवधारणाएँ: चंक्स, बैलेंसर और शार्ड कुंजियाँ” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस MongoDB Academy पाठ में कोड लिख और चला सकता हूँ?

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

इस पाठ्यक्रम के सभी पाठ

  1. शार्डिंग अवधारणाएँ: चंक्स, बैलेंसर और शार्ड कुंजियाँ
  2. शार्ड कुंजी चुनना: कार्डिनैलिटी, आवृत्ति, एकदिशता
  3. रेंज्ड और हैश्ड शार्डिंग रणनीतियाँ
  4. ज़ोन शार्डिंग: डेटा को क्षेत्रों से बाँधना
← MongoDB Academy पर वापस जाएँ