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

Firebase की मदद से, किसी भी चाइल्ड की का इस्तेमाल करके अपने डेटा पर ऐड-हॉक क्वेरी की जा सकती हैं. अगर आपको पहले से पता है कि आपके इंडेक्स क्या होंगे, तो क्वेरी की परफ़ॉर्मेंस को बेहतर बनाने के लिए, उन्हें Firebase Realtime Database के सुरक्षा नियमों में .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"
    }
  }
}