फायरबेस आपको मनमानी चाइल्ड कुंजी का उपयोग करके अपने डेटा पर एड-हॉक क्वेरी करने की अनुमति देता है। यदि आप पहले से जानते हैं कि आपकी अनुक्रमणिका क्या होगी, तो आप क्वेरी प्रदर्शन को बेहतर बनाने के लिए अपने फायरबेस रीयलटाइम डेटाबेस सुरक्षा नियमों में .indexOn
नियम के माध्यम से उन्हें परिभाषित कर सकते हैं।
डेटा इंडेक्स को परिभाषित करना
फायरबेस आपके डेटा को क्रमबद्ध करने और क्वेरी करने के लिए शक्तिशाली उपकरण प्रदान करता है। विशेष रूप से, फायरबेस आपको किसी भी सामान्य चाइल्ड कुंजी का उपयोग करके नोड्स के संग्रह पर एड-हॉक क्वेरी करने की अनुमति देता है। जैसे ही आपका ऐप बढ़ता है, इस क्वेरी का प्रदर्शन कम हो जाता है। हालाँकि, यदि आप फायरबेस को उन कुंजियों के बारे में बताते हैं जिन्हें आप क्वेरी कर रहे हैं, तो फायरबेस उन कुंजियों को सर्वर पर अनुक्रमित करेगा, जिससे आपके प्रश्नों के प्रदर्शन में सुधार होगा।
ऑर्डरबीचाइल्ड के साथ इंडेक्सिंग
इसे समझाने का सबसे आसान तरीका एक उदाहरण के माध्यम से है। फायरबेस में हम सभी सहमत हैं कि डायनासोर बहुत अच्छे हैं। यहाँ डायनासोर तथ्यों के एक नमूना डेटाबेस से एक अंश है। हम इसका उपयोग यह समझाने के लिए करेंगे कि .indexOn
orderByChild()
के साथ कैसे काम करता है।
{ "lambeosaurus": { "height" : 2.1, "length" : 12.5, "weight": 5000 }, "stegosaurus": { "height" : 4, "length" : 9, "weight" : 2500 } }
आइए कल्पना करें कि हमारे ऐप में, हमें अक्सर डायनासोर को नाम, ऊंचाई और लंबाई से ऑर्डर करने की ज़रूरत होती है, लेकिन वजन से कभी नहीं। हम Firebase को यह जानकारी बताकर अपने प्रश्नों के प्रदर्शन में सुधार कर सकते हैं। चूंकि डायनासोर के नाम केवल कुंजी हैं, फायरबेस पहले से ही डायनासोर के नाम से प्रश्नों के लिए अनुकूलित करता है, क्योंकि यह रिकॉर्ड की कुंजी है। हम .indexOn
उपयोग Firebase को ऊंचाई और लंबाई के लिए प्रश्नों को अनुकूलित करने के लिए कहने के लिए कर सकते हैं:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
अन्य नियमों की तरह, आप अपने नियमों में किसी भी स्तर पर .indexOn
नियम निर्दिष्ट कर सकते हैं। हमने इसे ऊपर के उदाहरण के लिए रूट स्तर पर रखा है क्योंकि सभी डायनासोर डेटा डेटाबेस के रूट पर संग्रहीत हैं।
ऑर्डरबायवैल्यू के साथ इंडेक्सिंग
इस उदाहरण में, हम दिखाएंगे कि कैसे .indexOn
orderByValue()
के साथ काम करता है। मान लीजिए कि हम निम्नलिखित डेटा के साथ डिनो स्पोर्ट्स स्कोर का लीडरबोर्ड बना रहे हैं:
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
चूँकि हम लीडरबोर्ड बनाने के लिए orderByValue() का उपयोग कर रहे हैं, इसलिए हम अपने /scores
नोड पर एक .value
नियम जोड़कर अपनी क्वेरी को ऑप्टिमाइज़ कर सकते हैं:
{ "rules": { "scores": { ".indexOn": ".value" } } }