स्केलर इंडेक्स (आरोही, अवरोही) के अलावा, MongoDB 'हैशेड' इंडेक्स का भी समर्थन करता है। जब आप किसी फ़ील्ड पर हैशेड इंडेक्स का उपयोग करते हैं, तो MongoDB फ़ील्ड मान के हैश की गणना करता है और हैश को इंडेक्स में संग्रहीत करता है। हैशेड इंडेक्स केवल समानता तुलना का समर्थन करते हैं और श्रेणी प्रश्नों का समर्थन नहीं करते हैं, और आमतौर पर शार्डिंग परिदृश्यों में उपयोग किए जाते हैं।
एक MongoDB हैशेड इंडेक्स बनाना
हैशेड इंडेक्स बनाने के लिए आप निम्न सिंटैक्स का उपयोग कर सकते हैं:
db.collection.ensureIndex({'field':'hashed'});
आप एक ही फ़ील्ड पर स्केलर इंडेक्स और हैशेड इंडेक्स दोनों बना सकते हैं।
MongoDB शेयरिंग
आमतौर पर, MongoDB शार्डिंग को 'रेंज-आधारित' विभाजन का उपयोग करके कार्यान्वित किया जाता है। इस दृष्टिकोण में, प्रत्येक शार्ड को शार्ड कुंजी के मानों की एक श्रेणी सौंपी जाती है। अगर शार्ड की टाइमस्टैम्प या ऑब्जेक्ट आईडी की तरह एकरस रूप से बढ़ रही है, तो इसका परिणाम कभी-कभी 'हॉट' शार्ड में हो सकता है क्योंकि सबसे हाल के मान हमेशा एक ही शार्ड पर रूट किए जाते हैं।
इससे बचने का तरीका 'हैश-आधारित विभाजन' का उपयोग करना है। शार्ड कुंजी के हैश की गणना की जाती है और इस हैश मान का उपयोग वास्तविक मान के बजाय शार्ड को रूट करने के लिए किया जाता है। यह सभी नवीनतम डेटा को एक ही शार्ड में भेजने के बजाय लोड को सभी शार्क में समान रूप से वितरित करने में मदद करता है। हैश-आधारित विभाजन आपके शार्ड कुंजी पर हैशेड इंडेक्स का उपयोग करके कार्यान्वित किया जाता है। अधिक जानकारी के लिए, शार्डिंग दस्तावेज़ देखें।
हैशेड इंडेक्स के फायदे और नुकसान
-
पेशेवरों
हैशेड इंडेक्स स्केलर इंडेक्स से छोटे होते हैं क्योंकि पूरी कुंजी के बजाय केवल कुंजी का हैश संग्रहीत किया जाता है। उदा. 100k दस्तावेज़ों के साथ एक साधारण परीक्षण में, हमने एक स्ट्रिंग फ़ील्ड - 'फ़ील्डनाम' पर हैश और स्केलर इंडेक्स जोड़े। जैसा कि नीचे दिखाया गया है, हैशेड इंडेक्स स्केलर इंडेक्स से काफी छोटा होता है:
"indexSizes" : { "_id_" : 811008, "firstName_1" : 4415488, "firstName_hashed" : 1490944 }
-
विपक्ष
श्रेणी प्रश्नों का समर्थन नहीं करता है। अगर आप हैश किए गए इंडेक्स पर श्रेणी क्वेरी चलाते हैं, तो इसका नतीजा इंडेक्स स्कैन होगा।
हैशेड इंडेक्स बाधाएं
- हैशेड इंडेक्स सरणियों का समर्थन नहीं करते हैं।
- हैशेड इंडेक्स कंपाउंड इंडेक्स नहीं हो सकते।
- आप हैशेड इंडेक्स पर अद्वितीय बाधाएं नहीं जोड़ सकते।