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