Check out what’s new from Firebase at Google I/O 2022. Learn more

داده های خود را فهرست کنید

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