Mit Firebase können Sie Ad-hoc-Abfragen für Ihre Daten mit einem beliebigen untergeordneten Schlüssel ausführen. Wenn Sie im Voraus wissen, welche Indexe Sie benötigen, können Sie sie über die .indexOn
-Regel in Ihren Firebase Realtime Database-Sicherheitsregeln definieren, um die Abfrageleistung zu verbessern.
Datenindexe definieren
Firebase bietet leistungsstarke Tools zum Sortieren und Abfragen Ihrer Daten. Mit Firebase können Sie Ad-hoc-Abfragen für eine Sammlung von Knoten mit einem beliebigen gemeinsamen untergeordneten Schlüssel ausführen. Wenn Ihre App wächst, verschlechtert sich die Leistung dieser Abfrage. Wenn Sie Firebase jedoch über die Schlüssel informieren, die Sie abfragen werden, indexiert Firebase diese Schlüssel auf den Servern, wodurch die Leistung Ihrer Abfragen verbessert wird.
Indexierung mit „orderByChild“
Am einfachsten lässt sich das anhand eines Beispiels erklären. Wir alle bei Firebase sind uns einig, dass Dinosaurier ziemlich cool sind. Hier ist ein Ausschnitt aus einer Beispieldatenbank mit Fakten über Dinosaurier. Wir verwenden es, um zu erklären, wie .indexOn
mit orderByChild()
funktioniert.
{ "lambeosaurus": { "height" : 2.1, "length" : 12.5, "weight": 5000 }, "stegosaurus": { "height" : 4, "length" : 9, "weight" : 2500 } }
Angenommen, in unserer App müssen wir die Dinosaurier häufig nach Name, Höhe und Länge, aber nie nach Gewicht sortieren. Wir können die Leistung unserer Abfragen verbessern, indem wir Firebase diese Informationen mitteilen. Da die Namen der Dinosaurier nur die Schlüssel sind, optimiert Firebase bereits Abfragen nach Dinosauriernamen, da dies der Schlüssel des Datensatzes ist.
Mit .indexOn
können wir Firebase anweisen, Abfragen auch für Höhe und Länge zu optimieren:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Wie bei anderen Regeln können Sie eine .indexOn
-Regel auf jeder Ebene Ihrer Regeln angeben.
Im obigen Beispiel haben wir sie auf der Stammebene platziert, da alle Dinosaurierdaten im Stammverzeichnis der Datenbank gespeichert sind.
Indexierung mit „orderByValue“
In diesem Beispiel wird veranschaulicht, wie .indexOn
mit orderByValue()
funktioniert.
Angenommen, wir erstellen eine Bestenliste mit den Sportpunkten von Dinos mit den folgenden Daten:
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
Da wir orderByValue() verwenden, um die Bestenliste zu erstellen, können wir unsere Abfragen optimieren, indem wir dem Knoten /scores
die Regel .value
hinzufügen:
{ "rules": { "scores": { ".indexOn": ".value" } } }