Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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