הוספת הנתונים לאינדקס

Firebase מאפשר לבצע שאילתות חד-פעמיות על הנתונים באמצעות מפתח צאצא שרירותי. אם אתם יודעים מראש מה יהיו האינדקסים שלכם, תוכלו להגדיר אותם באמצעות הכלל .indexOn בכללי האבטחה של מסדי נתונים בזמן אמת ב-Firebase כדי לשפר את ביצועי השאילתות.

הגדרת מדדי נתונים

ב-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() כדי ליצור את הלידרבורד, ולכן אנחנו יכולים לבצע אופטימיזציה לשאילתות שלנו על ידי הוספת כלל .value בצומת /scores שלנו:

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