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

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