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

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

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