Firebase به شما امکان می دهد با استفاده از یک کلید فرزند دلخواه، پرس و جوهای موقتی را روی داده های خود انجام دهید. اگر از قبل میدانید فهرستهای شما چه خواهند بود، میتوانید آنها را از طریق قانون .indexOn
در قوانین امنیتی پایگاه داده بیدرنگ Firebase تعریف کنید تا عملکرد پرس و جو را بهبود ببخشید.
تعریف شاخص های داده
Firebase ابزارهای قدرتمندی را برای سفارش و جستجوی داده های شما ارائه می دهد. به طور خاص، Firebase به شما این امکان را می دهد که با استفاده از هر کلید فرزند مشترک، پرس و جوهای ad-hoc را روی مجموعه ای از گره ها انجام دهید. با رشد برنامه شما، عملکرد این جستجو کاهش می یابد. با این حال، اگر به 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" } } }