Check out what’s new from Firebase at Google I/O 2022. Learn more

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

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

הגדרת אינדקסי נתונים

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