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