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