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