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