Firebase umożliwia wykonywanie doraźnych zapytań na danych za pomocą dowolnego klucza podrzędnego. Jeśli znasz z góry swoje indeksy, możesz je zdefiniować za pomocą reguły .indexOn
w regułach zabezpieczeń Bazy danych czasu rzeczywistego Firebase, aby zwiększyć wydajność zapytań.
Definiowanie indeksów danych
Firebase zapewnia zaawansowane narzędzia zamawianie i wysyłanie zapytań do danych. Firebase umożliwia wykonywanie doraźnych zapytań na zbiorze węzłów za pomocą dowolnego wspólny klucz podrzędny. W miarę rozwoju aplikacji wydajność tego zapytania spada. Jeśli jednak poinformowanie Firebase o kluczach, których będziesz używać w zapytaniach, Firebase zindeksuje je na serwerach, ulepszając wydajność zapytań.
Indeksowanie za pomocą metody orderByChild
Najłatwiej wyjaśnisz to na przykładzie. Wszyscy w Firebase uważamy,
dinozaury są całkiem fajne. Oto fragment z przykładowej bazy danych z informacjami o dinozaurach. Śr
wykorzysta go, aby wyjaśnić, jak .indexOn
działa z narzędziem orderByChild()
.
{ "lambeosaurus": { "height" : 2.1, "length" : 12.5, "weight": 5000 }, "stegosaurus": { "height" : 4, "length" : 9, "weight" : 2500 } }
Załóżmy, że w naszej aplikacji często musimy uporządkować dinozaury według imienia, wzrostu i wzrostu
długości, ale nie wagę. Możemy poprawić wydajność zapytań, przesyłając do Firebase informacje
te informacje. Ponieważ nazwy dinozaurów to tylko klucz, Firebase
optymalizuje pod kątem zapytań według nazwy dinozaura, ponieważ to jest klucz do rekordu.
Za pomocą parametru .indexOn
możemy też wskazać usłudze Firebase optymalizowanie zapytań pod kątem wysokości i długości:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Tak jak w przypadku innych reguł, regułę .indexOn
możesz określić na dowolnym poziomie reguł.
Umieściliśmy go na poziomie głównym przykładu powyżej, ponieważ wszystkie dane o dinozaurze są przechowywane
w katalogu głównym bazy danych.
Indeksowanie za pomocą parametru orderByValue
W tym przykładzie pokażemy, jak działa .indexOn
z parametrem orderByValue()
.
Załóżmy, że tworzymy tabelę wyników dinozaurów z następującymi danymi:
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
Tablicę wyników tworzymy za pomocą metody orderByValue(), więc możemy optymalizować zapytania, dodając regułę .value
do węzła /scores
:
{ "rules": { "scores": { ".indexOn": ".value" } } }