Firebase की मदद से, किसी भी चाइल्ड की का इस्तेमाल करके, अपने डेटा पर ऐड-हॉक क्वेरी की जा सकती हैं. अगर आपको पहले से पता है कि आपके इंडेक्स क्या होंगे, तो क्वेरी की परफ़ॉर्मेंस बेहतर बनाने के लिए, उन्हें Firebase रीयल टाइम डेटाबेस के सुरक्षा नियमों में .indexOn नियम के ज़रिए तय किया जा सकता है.
डेटा इंडेक्स तय करना
Firebase, आपके डेटा को क्रम में लगाने और क्वेरी करने के लिए, बेहतरीन टूल उपलब्ध कराता है. खास तौर पर, Firebase की मदद से, किसी भी सामान्य चाइल्ड की का इस्तेमाल करके, नोड के कलेक्शन पर ऐड-हॉक क्वेरी की जा सकती हैं. आपके ऐप्लिकेशन के बढ़ने पर, इस क्वेरी की परफ़ॉर्मेंस कम हो जाती है. हालांकि, अगर Firebase को उन की के बारे में बताया जाता है जिनके लिए क्वेरी की जाएगी, तो Firebase उन की को सर्वर पर इंडेक्स करेगा. इससे आपकी क्वेरी की परफ़ॉर्मेंस बेहतर होगी.
orderByChild के साथ इंडेक्स करना
इसे समझाने का सबसे आसान तरीका, उदाहरण देना है. Firebase में हम सभी इस बात से सहमत हैं कि डायनासोर बहुत शानदार होते हैं. यहां डायनासोर के बारे में जानकारी देने वाले सैंपल डेटाबेस का एक स्निपेट दिया गया है. हम इसका इस्तेमाल करके बताएंगे कि orderByChild() के साथ .indexOn कैसे काम करता है.
{
"lambeosaurus": {
"height" : 2.1,
"length" : 12.5,
"weight": 5000
},
"stegosaurus": {
"height" : 4,
"length" : 9,
"weight" : 2500
}
}मान लें कि हमारे ऐप्लिकेशन में, हमें अक्सर डायनासोर को नाम, ऊंचाई, और लंबाई के हिसाब से क्रम में लगाना होता है. हालांकि, हमें उन्हें कभी भी वज़न के हिसाब से क्रम में नहीं लगाना होता. Firebase को यह जानकारी देकर, हम अपनी क्वेरी की परफ़ॉर्मेंस बेहतर बना सकते हैं. डायनासोर के नाम सिर्फ़ की होते हैं. इसलिए, Firebase, डायनासोर के नाम के हिसाब से क्वेरी को पहले से ही ऑप्टिमाइज़ करता है, क्योंकि यह रिकॉर्ड की की होती है.
Firebase को ऊंचाई और लंबाई के हिसाब से क्वेरी को ऑप्टिमाइज़ करने के लिए बताने के लिए, .indexOn का इस्तेमाल किया जा सकता है:
{
"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"
}
}
}