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

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"
    }
  }
}