इंडेक्स की खास जानकारी

इस सेक्शन में, Cloud Firestore Enterprise edition के लिए इंडेक्सिंग के बारे में बताया गया है. Cloud Firestore Enterprise वर्शन में, डिफ़ॉल्ट रूप से कोई इंडेक्स नहीं बनाया जाता. डेटाबेस की परफ़ॉर्मेंस को बेहतर बनाने के लिए, अक्सर इस्तेमाल की जाने वाली क्वेरी के लिए इंडेक्स बनाएं.

इंडेक्स का डेटाबेस की परफ़ॉर्मेंस पर काफ़ी असर पड़ता है. अगर किसी क्वेरी के लिए इंडेक्स मौजूद है, तो डेटाबेस, स्कैन किए जाने वाले डेटा की मात्रा को कम करके और नतीजों को क्रम से लगाने के लिए ज़रूरी काम को कम करके, नतीजे आसानी से दिखा सकता है. हालांकि, इंडेक्स की गई एंट्री से स्टोरेज की लागत बढ़ जाती है. साथ ही, इंडेक्स किए गए फ़ील्ड पर लिखने की कार्रवाई के दौरान किए गए काम की मात्रा भी बढ़ जाती है.

अलग-अलग वर्शन में अंतर

यहां दी गई टेबल में, Cloud Firestore Standard edition और Cloud Firestore Enterprise edition के बीच इंडेक्सिंग से जुड़े मुख्य अंतर के बारे में खास जानकारी दी गई है.

सुविधा Cloud Firestore का स्टैंडर्ड एडिशन Cloud Firestore Enterprise edition
इंडेक्स करने की ज़रूरी शर्तें सभी क्वेरी को चलाने के लिए इंडेक्स की ज़रूरत होती है. इस वजह से, क्वेरी आम तौर पर अच्छी परफ़ॉर्म करती हैं. क्वेरी के लिए इंडेक्स की ज़रूरत नहीं होती. इंडेक्स न किए गए डेटा को पढ़ा जा सकता है. इससे प्रोटोटाइपिंग में आने वाली रुकावटें दूर हो जाती हैं.
अपने-आप इंडेक्स होने की सुविधा डिफ़ॉल्ट रूप से, दस्तावेज़ों में मौजूद सभी फ़ील्ड के लिए सिंगल-फ़ील्ड इंडेक्स अपने-आप बन जाते हैं. कोई इंडेक्स अपने-आप नहीं बनता. आपको सभी इंडेक्स को मैन्युअल तरीके से मैनेज करना होगा.
इंडेक्स डेंसिटी डिफ़ॉल्ट रूप से स्पार्स होता है. किसी कलेक्शन ग्रुप में मौजूद दस्तावेज़ को सिर्फ़ तब इंडेक्स किया जाता है, जब दस्तावेज़ में हर इंडेक्स किए गए फ़ील्ड के लिए कोई वैल्यू मौजूद हो. डिफ़ॉल्ट रूप से नॉन-स्पार्स होता है. कलेक्शन ग्रुप में मौजूद सभी दस्तावेज़ इंडेक्स किए जाते हैं. जिन फ़ील्ड को इंडेक्स किया गया है और जिनमें कोई वैल्यू नहीं है उन्हें NULL पर सेट किया जाता है. स्पार्स इंडेक्स विकल्प का इस्तेमाल करके, व्यवहार बदला जा सकता है.
इंडेक्स के साथ काम करने वाले टाइप और विकल्प
  • सिंगल-फ़ील्ड (अपने-आप बनने वाले इंडेक्स)
  • कंपोज़िट इंडेक्स
  • कलेक्शन या कलेक्शन ग्रुप का स्कोप
  • Array-contains
  • वेक्टर
  • कलेक्शन या कलेक्शन ग्रुप का स्कोप
  • नॉन-स्पार्स या स्पार्स इंडेक्स डेंसिटी
  • Array-contains
  • वेक्टर
  • यूनीक इंडेक्स

इंडेक्स की परिभाषा और स्ट्रक्चर

इंडेक्स में ये शामिल होते हैं:

  • कलेक्शन आईडी
  • दिए गए कलेक्शन में मौजूद फ़ील्ड की सूची
  • हर फ़ील्ड के लिए, बढ़ते या घटते क्रम में कोई क्रम

इंडेक्स, स्पार्स या यूनीक विकल्पों को भी चालू कर सकता है.

इंडेक्स का क्रम

हर फ़ील्ड का क्रम और सॉर्ट करने की दिशा, इंडेक्स को खास तौर पर तय करती है. उदाहरण के लिए, यहां दिए गए दोनों इंडेक्स अलग-अलग हैं और इन्हें आपस में बदला नहीं जा सकता:

कलेक्शन फ़ील्ड
शहर देश (बढ़ते क्रम में), जनसंख्या (घटते क्रम में)
शहर जनसंख्या (घटते क्रम में), देश (बढ़ते क्रम में),

क्वेरी के लिए इंडेक्स बनाते समय, फ़ील्ड को उसी क्रम में शामिल करें जिस क्रम में वे आपकी क्वेरी में हैं.

इंडेक्स डेंसिटी

डिफ़ॉल्ट रूप से, इंडेक्स एंट्री में किसी कलेक्शन के सभी दस्तावेज़ों का डेटा सेव होता है. इसे नॉन-स्पार्स इंडेक्स कहा जाता है. किसी दस्तावेज़ के लिए इंडेक्स एंट्री तब भी जोड़ी जाएगी, जब दस्तावेज़ में इंडेक्स में बताए गए फ़ील्ड में से कोई भी फ़ील्ड मौजूद न हो. जब इंडेक्स एंट्री जनरेट की जाती हैं, तब ऐसे फ़ील्ड को NULL वैल्यू के तौर पर माना जाता है जो मौजूद नहीं हैं. इस व्यवहार को बदलने के लिए, इंडेक्स को स्पार्स इंडेक्स के तौर पर तय किया जा सकता है.

स्पार्स इंडेक्स

स्पार्स इंडेक्स, कलेक्शन में मौजूद सिर्फ़ उन दस्तावेज़ों को इंडेक्स करता है जिनमें इंडेक्स किए गए कम से कम एक फ़ील्ड के लिए कोई वैल्यू (इसमें शून्य भी शामिल है) मौजूद होती है. स्पार्स इंडेक्स से स्टोरेज की लागत कम होती है और परफ़ॉर्मेंस बेहतर हो सकती है.

यूनीक इंडेक्स

इंडेक्स किए गए फ़ील्ड के लिए यूनीक वैल्यू लागू करने के लिए, यूनीक इंडेक्स का विकल्प सेट करें. एक से ज़्यादा फ़ील्ड पर इंडेक्स के लिए, वैल्यू का हर कॉम्बिनेशन इंडेक्स में यूनीक होना चाहिए. डेटाबेस, डुप्लीकेट वैल्यू वाली इंडेक्स एंट्री बनाने की कोशिश करने वाले किसी भी अपडेट और इंसर्ट ऑपरेशन को अस्वीकार कर देता है. अगर इंडेक्स किए गए फ़ील्ड के डेटा में डुप्लीकेट वैल्यू मौजूद हैं और यूनीक इंडेक्स बनाने की कोशिश की जाती है, तो इंडेक्स नहीं बन पाएगा. साथ ही, ऑपरेशन की जानकारी में गड़बड़ी का मैसेज दिखेगा.

यूनीक इंडेक्स में फ़ील्ड मौजूद नहीं हैं

अगर यूनीक इंडेक्स के लिए ज़रूरी फ़ील्ड वाला कोई दस्तावेज़ डाला जाता है, तो इंडेक्स, null को उन फ़ील्ड की वैल्यू के तौर पर सेट करता है. इंडेक्स की एंट्री यूनीक होनी चाहिए. ऐसा न होने पर, कार्रवाई पूरी नहीं होगी.

उदाहरण के लिए, इस इंडेक्स के साथ:

कलेक्शन इंडेक्स किए गए फ़ील्ड क्वेरी का स्कोप
शहर नाम (बढ़ते क्रम में) कलेक्शन

अगर आपने दस्तावेज़ {"abbreviation": "LA"} को कलेक्शन में जोड़ा है, तो यूनीक इंडेक्स, name को null पर सेट करके एक एंट्री बनाता है. इसके बाद, अगर आपको दस्तावेज़ {"abbreviation": "NYC"} जोड़ना है, तो ऐसा नहीं किया जा सकता. इसकी वजह यह है कि यूनीक इंडेक्स के लिए, नतीजे के तौर पर मिलने वाली एंट्री एक जैसी है.

एक से ज़्यादा फ़ील्ड वाले यूनीक इंडेक्स पर भी यही तरीका लागू होता है. किसी दस्तावेज़ को बनाते या अपडेट करते समय, इंडेक्स किए गए छूटे हुए फ़ील्ड को null पर सेट किया जाता है. साथ ही, इंडेक्स की गई एंट्री, इंडेक्स में यूनीक होनी चाहिए.

इंडेक्स बनाने में आने वाली गड़बड़ियों को ठीक करना

इंडेक्स मैनेज करते समय, आपको इंडेक्स बनाने से जुड़ी गड़बड़ियां दिख सकती हैं. अगर डेटाबेस में डेटा से जुड़ी कोई समस्या आती है, तो इंडेक्सिंग की प्रोसेस पूरी नहीं हो सकती. इंडेक्स करने की प्रोसेस इन वजहों से पूरी नहीं हो सकती:

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

आगे क्या करना है

इंडेक्स बनाने और उन्हें मैनेज करने का तरीका जानें.