Indeksuj swoje dane

Firebase umożliwia wykonywanie zapytań ad hoc na Twoich danych przy użyciu dowolnego klucza podrzędnego. Jeśli wiesz z góry, co indeksów będzie można je zdefiniować poprzez .indexOn reguły w swojej Firebase Realtime Database zasad bezpieczeństwa, aby poprawić wydajność kwerendy.

Definiowanie indeksów danych

Firebase zapewnia wydajne narzędzia do porządkowania i odpytywanie danych. W szczególności Firebase umożliwia wykonywanie zapytań ad hoc w zbiorze węzłów przy użyciu dowolnego wspólnego klucza podrzędnego. Wraz z rozwojem aplikacji spada wydajność tego zapytania. Jeśli jednak poinformujesz Firebase o kluczach, których będziesz szukać, Firebase zindeksuje te klucze na serwerach, poprawiając wydajność zapytań.

Indeksowanie za pomocą orderByChild

Najłatwiej to wyjaśnić na przykładzie. Wszyscy w Firebase zgadzamy się, że dinozaury są całkiem fajne. Oto fragment z przykładowej bazy danych faktów o dinozaurach. Będziemy go używać do wyjaśnienia, jak .indexOn współpracuje z orderByChild() .

{
  "lambeosaurus": {
    "height" : 2.1,
    "length" : 12.5,
    "weight": 5000
  },
  "stegosaurus": {
    "height" : 4,
    "length" : 9,
    "weight" : 2500
  }
}

Wyobraźmy sobie, że w naszej aplikacji często musimy zamawiać dinozaury według nazwy, wzrostu i długości, ale nigdy według wagi. Możemy poprawić wydajność naszych zapytań, przekazując Firebase te informacje. Ponieważ nazwy dinozaurów to tylko klucze, Firebase już optymalizuje zapytania według nazwy dinozaura, ponieważ jest to klucz rekordu. Możemy użyć .indexOn powiedzieć Firebase zapytań do optymalizacji dla wysokości i długości, a także:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

Podobnie jak w innych przepisach, można określić .indexOn regułę na dowolnym poziomie w swoich zasadach. W powyższym przykładzie umieściliśmy go na poziomie głównym, ponieważ wszystkie dane dinozaurów są przechowywane w katalogu głównym bazy danych.

Indeksowanie za pomocą orderByValue

W tym przykładzie będziemy demonstrować jak .indexOn współpracuje z orderByValue() . Załóżmy, że tworzymy tabelę wyników sportowych dinozaurów z następującymi danymi:

{
  "scores": {
    "bruhathkayosaurus" : 55,
    "lambeosaurus" : 21,
    "linhenykus" : 80,
    "pterodactyl" : 93,
    "stegosaurus" : 5,
    "triceratops" : 22
  }
}

Ponieważ używamy orderByValue (), aby utworzyć tabelę wyników, możemy zoptymalizować nasze pytania dodając .value regułę w naszym /scores węźle:

{
  "rules": {
    "scores": {
      ".indexOn": ".value"
    }
  }
}