अपना डेटा इंडेक्स करें

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 का इस्तेमाल करके इंडेक्स करना

इस उदाहरण में, हम दिखाएंगे कि orderByValue() के साथ .indexOn कैसे काम करता है. मान लें कि हमें यहाँ दिए गए डेटा के आधार पर, डाइनो के स्पोर्ट्स स्कोर का लीडरबोर्ड बनाना है:

{
  "scores": {
    "bruhathkayosaurus" : 55,
    "lambeosaurus" : 21,
    "linhenykus" : 80,
    "pterodactyl" : 93,
    "stegosaurus" : 5,
    "triceratops" : 22
  }
}

लीडरबोर्ड बनाने के लिए, orderByValue() का इस्तेमाल किया जा रहा है. इसलिए, हम अपनी क्वेरी को ऑप्टिमाइज़ कर सकते हैं. इसके लिए, हमें अपने /scores नोड पर .value नियम जोड़ना होगा:

{
  "rules": {
    "scores": {
      ".indexOn": ".value"
    }
  }
}