Mit Firebase können Sie mithilfe eines beliebigen untergeordneten Schlüssels Ad-hoc-Abfragen zu Ihren Daten durchführen. Wenn Sie im Voraus wissen, wie Ihre Indizes aussehen werden, können Sie sie über die .indexOn
Regel in Ihren Firebase-Echtzeitdatenbank-Sicherheitsregeln definieren, um die Abfrageleistung zu verbessern.
Datenindizes definieren
Firebase bietet leistungsstarke Tools zum Ordnen und Abfragen Ihrer Daten. Mit Firebase können Sie insbesondere Ad-hoc-Abfragen für eine Sammlung von Knoten mithilfe eines beliebigen gemeinsamen untergeordneten Schlüssels durchführen. Wenn Ihre App wächst, nimmt die Leistung dieser Abfrage ab. Wenn Sie Firebase jedoch mitteilen, welche Schlüssel Sie abfragen, indiziert Firebase diese Schlüssel auf den Servern und verbessert so die Leistung Ihrer Abfragen.
Indizierung mit orderByChild
Am einfachsten lässt sich dies 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 werden es verwenden, 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 } }
Stellen wir uns vor, dass wir in unserer App die Dinosaurier oft nach Namen, Größe und Länge sortieren müssen, aber niemals nach Gewicht. 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 für Abfragen nach Dinosauriernamen, da dies der Schlüssel des Datensatzes ist. Wir können .indexOn
verwenden, um Firebase anzuweisen, Abfragen auch hinsichtlich Höhe und Länge zu optimieren:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Wie andere Regeln können Sie eine .indexOn
Regel auf jeder Ebene Ihrer Regeln angeben. Wir haben es für das obige Beispiel auf der Stammebene platziert, da alle Dinosaurierdaten im Stammverzeichnis der Datenbank gespeichert sind.
Indizierung mit orderByValue
In diesem Beispiel zeigen wir, wie .indexOn
mit orderByValue()
funktioniert. Nehmen wir an, wir erstellen eine Rangliste der Dino-Sportergebnisse mit den folgenden Daten:
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
Da wir orderByValue() zum Erstellen der Bestenliste verwenden, können wir unsere Abfragen optimieren, indem wir eine .value
Regel an unserem /scores
Knoten hinzufügen:
{ "rules": { "scores": { ".indexOn": ".value" } } }