यह सिर्फ़ Cloud Firestore Enterprise वर्शन के लिए काम का है. |
इस पेज पर, MongoDB के साथ काम करने वाले Cloud Firestore के लिए इंडेक्सिंग के बारे में बताया गया है. MongoDB के साथ काम करने वाला Cloud Firestore, डिफ़ॉल्ट रूप से कोई इंडेक्स नहीं बनाता है. डेटाबेस की परफ़ॉर्मेंस को बेहतर बनाने के लिए, अक्सर इस्तेमाल की जाने वाली क्वेरी के लिए इंडेक्स बनाएं.
इंडेक्स का डेटाबेस की परफ़ॉर्मेंस पर काफ़ी असर पड़ता है. अगर किसी क्वेरी के लिए इंडेक्स मौजूद है, तो डेटाबेस, स्कैन किए जाने वाले डेटा की मात्रा को कम करके और नतीजों को क्रम से लगाने के लिए ज़रूरी काम को कम करके, नतीजे आसानी से दिखा सकता है. हालांकि, इंडेक्स की गई एंट्री से स्टोरेज की लागत बढ़ जाती है. साथ ही, इंडेक्स किए गए फ़ील्ड पर लिखने की कार्रवाई के दौरान किए गए काम की मात्रा भी बढ़ जाती है.
इंडेक्स की परिभाषा और स्ट्रक्चर
इंडेक्स में ये शामिल होते हैं:
- कलेक्शन आईडी
- दिए गए कलेक्शन में मौजूद फ़ील्ड की सूची
- हर फ़ील्ड के लिए, बढ़ते या घटते क्रम में कोई क्रम
इंडेक्स में स्पार्स, मल्टीकी या यूनीक विकल्प भी चालू किए जा सकते हैं.
इंडेक्स का क्रम
हर फ़ील्ड के क्रम और सॉर्ट करने की दिशा से, इंडेक्स के बारे में खास तौर पर पता चलता है. उदाहरण के लिए, यहां दिए गए दोनों इंडेक्स अलग-अलग हैं और इन्हें आपस में बदला नहीं जा सकता:
कलेक्शन | फ़ील्ड |
---|---|
शहर | देश (बढ़ते क्रम में), जनसंख्या (घटते क्रम में) |
शहर | जनसंख्या (घटते क्रम में), देश (बढ़ते क्रम में), |
क्वेरी के लिए इंडेक्स बनाते समय, फ़ील्ड को उसी क्रम में शामिल करें जिस क्रम में वे आपकी क्वेरी में हैं.
इंडेक्स डेंसिटी
डिफ़ॉल्ट रूप से, इंडेक्स एंट्री में किसी कलेक्शन के सभी दस्तावेज़ों का डेटा सेव होता है. इसे नॉन-स्पार्स इंडेक्स कहा जाता है. किसी दस्तावेज़ के लिए इंडेक्स एंट्री तब भी जोड़ी जाएगी, जब दस्तावेज़ में इंडेक्स में बताए गए फ़ील्ड में से कोई भी फ़ील्ड मौजूद न हो. जब इंडेक्स एंट्री जनरेट की जाती हैं, तब ऐसे फ़ील्ड को NULL वैल्यू के तौर पर माना जाता है जो मौजूद नहीं हैं. इस व्यवहार को बदलने के लिए, इंडेक्स को स्पार्स इंडेक्स के तौर पर तय किया जा सकता है.
स्पार्स इंडेक्स
स्पार्स इंडेक्स, कलेक्शन में मौजूद सिर्फ़ उन दस्तावेज़ों को इंडेक्स करता है जिनमें इंडेक्स किए गए कम से कम एक फ़ील्ड के लिए कोई वैल्यू (इसमें शून्य भी शामिल है) मौजूद होती है. स्पार्स इंडेक्स से स्टोरेज की लागत कम होती है और परफ़ॉर्मेंस बेहतर हो सकती है.
ऐरे वैल्यू के लिए मल्टीकी इंडेक्स
अगर आपको ऐसे फ़ील्ड पर इंडेक्स बनाना है जिसमें ऐरे वैल्यू शामिल हैं, तो आपको मल्टीकी इंडेक्स बनाना होगा. रेगुलर इंडेक्स, ऐरे वैल्यू को इंडेक्स नहीं कर सकता. मल्टीकी इंडेक्स, इंडेक्स की परिभाषा में ज़्यादा से ज़्यादा एक ऐरे फ़ील्ड के साथ काम करता है. इसका इस्तेमाल उन कार्रवाइयों के लिए किया जा सकता है जो ऐरे वैल्यू को ट्रैवर्स करती हैं.
मल्टीकी इंडेक्स का इस्तेमाल सिर्फ़ तब करें, जब आपको अरे वैल्यू को इंडेक्स करना हो. क्वेरी प्रोसेस करते समय, रेगुलर इंडेक्स के फ़ायदे मिलते हैं. उदाहरण के लिए, सामान्य इंडेक्स, किसी रेंज में मौजूद वैल्यू को ज़्यादा असरदार तरीके से फ़िल्टर कर सकते हैं.
ऐरे की वैल्यू और एक से ज़्यादा कुंजियों वाले इंडेक्स के साथ काम करते समय, इन स्थितियों में गड़बड़ियां होती हैं:
- किसी ऑपरेशन में, रेगुलर इंडेक्स वाले फ़ील्ड में ऐरे वैल्यू जोड़ने की कोशिश की गई है. ऐरे वैल्यू जोड़ने के लिए, आपको उस फ़ील्ड पर मौजूद सामान्य इंडेक्स मिटाने होंगे. इसके बाद, उन्हें मल्टीकी इंडेक्स के तौर पर फिर से बनाना होगा.
- आपने ऐसे फ़ील्ड पर सामान्य इंडेक्स बनाने की कोशिश की है जिसमें ऐरे वैल्यू शामिल है. आपको मल्टीकी इंडेक्स बनाना होगा या ऐरे की वैल्यू मिटानी होंगी.
- इस ऑपरेशन में, ऐरे वैल्यू वाले कई फ़ील्ड को इंडेक्स करने की कोशिश की जाती है. मल्टीकी इंडेक्स में, अरे वैल्यू वाले एक से ज़्यादा फ़ील्ड नहीं हो सकते. आगे बढ़ने के लिए, अपने डेटा मॉडल या इंडेक्स की परिभाषाओं में बदलाव करें.
- आपने एक ऐसा मल्टीकी इंडेक्स बनाने की कोशिश की है जिसमें दो फ़ील्ड पाथ,
users.posts
औरusers.zip
जैसे एक ही प्रीफ़िक्स को शेयर करते हैं.
यूनीक इंडेक्स
इंडेक्स किए गए फ़ील्ड के लिए यूनीक वैल्यू लागू करने के लिए, यूनीक इंडेक्स का विकल्प सेट करें. एक से ज़्यादा फ़ील्ड के इंडेक्स के लिए, वैल्यू का हर कॉम्बिनेशन इंडेक्स में यूनीक होना चाहिए. डेटाबेस, डुप्लीकेट वैल्यू वाली इंडेक्स एंट्री बनाने की कोशिश करने वाले किसी भी अपडेट और इंसर्ट ऑपरेशन को अस्वीकार कर देता है. अगर इंडेक्स किए गए फ़ील्ड के डेटा में डुप्लीकेट वैल्यू मौजूद हैं और आपको यूनीक इंडेक्स बनाना है, तो इंडेक्स नहीं बन पाएगा. साथ ही, आपको ऑपरेशन की जानकारी में गड़बड़ी का मैसेज दिखेगा.
यूनीक इंडेक्स में फ़ील्ड मौजूद नहीं हैं
अगर यूनीक इंडेक्स के लिए ज़रूरी फ़ील्ड वाला कोई दस्तावेज़ डाला जाता है, तो इंडेक्स, null
को उन फ़ील्ड की वैल्यू के तौर पर सेट करता है. इंडेक्स की एंट्री यूनीक होनी चाहिए. ऐसा न होने पर, ऑपरेशन पूरा नहीं होगा.
उदाहरण के लिए, इस इंडेक्स के साथ:
db.cities.createIndex( { "name": 1 }, { unique: true } )
अगर आपने दस्तावेज़ {"abbreviation": "LA"}
को कलेक्शन में जोड़ा है, तो यूनीक इंडेक्स, name
को null
पर सेट करके एक एंट्री बनाता है. इसके बाद, अगर आपको दस्तावेज़ {"abbreviation": "NYC"}
जोड़ना है, तो यह कार्रवाई पूरी नहीं होगी. ऐसा इसलिए, क्योंकि यूनीक इंडेक्स के लिए बनने वाली एंट्री एक जैसी है.
एक से ज़्यादा फ़ील्ड वाले यूनीक इंडेक्स पर भी यही तरीका लागू होता है.
किसी दस्तावेज़ को बनाते या अपडेट करते समय, इंडेक्स किए गए छूटे हुए फ़ील्ड को null
पर सेट किया जाता है. साथ ही, इंडेक्स की गई एंट्री, इंडेक्स में यूनीक होनी चाहिए.
इंडेक्स बनाने से जुड़ी गड़बड़ियों को ठीक करना
इंडेक्स मैनेज करते समय, आपको इंडेक्स बनाने से जुड़ी गड़बड़ियां दिख सकती हैं. अगर डेटाबेस में डेटा से जुड़ी कोई समस्या आती है, तो इंडेक्सिंग की प्रोसेस पूरी नहीं हो सकती. इंडेक्स करने की कार्रवाइयां इन वजहों से पूरी नहीं हो सकती हैं:
- आपने इंडेक्स करने की सीमा पूरी कर ली है. उदाहरण के लिए, ऐसा हो सकता है कि किसी दस्तावेज़ के लिए इंडेक्स की ज़्यादा से ज़्यादा एंट्री की सीमा पूरी हो गई हो. अगर इंडेक्स नहीं बन पाता है, तो आपको गड़बड़ी का मैसेज दिखेगा. अगर आपने इंडेक्स करने की सीमा पूरी नहीं की है, तो इंडेक्स करने की कार्रवाई को फिर से करें.
- मल्टीकी इंडेक्स ज़रूरी है. इंडेक्स किए गए फ़ील्ड में से कम से कम एक में ऐरे वैल्यू मौजूद है. आगे बढ़ने के लिए, आपको मल्टीकी इंडेक्स का इस्तेमाल करना होगा या ऐरे की वैल्यू मिटानी होंगी.
- इस ऑपरेशन में, ऐरे वैल्यू वाले कई फ़ील्ड को इंडेक्स करने की कोशिश की जाती है. मल्टीकी इंडेक्स में, अरे वैल्यू वाले एक से ज़्यादा फ़ील्ड नहीं हो सकते. आगे बढ़ने के लिए, अपने डेटा मॉडल या इंडेक्स की परिभाषाओं में बदलाव करें.
- आपने यूनीक इंडेक्स का विकल्प सेट किया है. साथ ही, इंडेक्स किए गए फ़ील्ड का डेटा, डुप्लीकेट इंडेक्स एंट्री बनाता है. आगे बढ़ने के लिए, डेटा से वैल्यू के डुप्लीकेट कॉम्बिनेशन हटाएं.