אינדקס את הנתונים שלך

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