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

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