Mit Firebase können Sie Ad-hoc-Abfragen für Ihre Daten mit einem beliebigen untergeordneten Schlüssel ausführen. Wenn Sie Ihre Indexe im Voraus kennen, können Sie sie über die Regel .indexOn
in Ihren Firebase Realtime Database-Sicherheitsregeln definieren, um die Abfrageleistung zu verbessern.
Datenindexe definieren
Firebase bietet leistungsstarke Tools für bestellen und Abfragen durchführen. Insbesondere können Sie mit Firebase Ad-hoc-Abfragen für eine Sammlung von Knoten mit beliebigen gemeinsamen untergeordneten Schlüssel. Wenn Ihre App wächst, verschlechtert sich die Leistung dieser Abfrage. Wenn Sie jedoch Firebase über die Schlüssel informieren, die abgefragt werden sollen, indexiert Firebase diese Schlüssel auf den Servern, um die Leistung Ihrer Abfragen.
Indexierung mit orderByChild
Am besten lässt sich das anhand eines Beispiels erklären. Wir bei Firebase sind sich einig,
Dinosaurier sind ziemlich cool. Hier ist ein Auszug aus einer Beispieldatenbank mit Fakten zu Dinosauriern. Anhand dieses Beispiels erklären wir, 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, wir müssen die Dinosaurier in unserer App
oft nach Name, Größe und
und 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 Abfragen nach dem Namen des Dinosauriers, da dies der Schlüssel des Datensatzes ist.
Mit .indexOn
können wir Firebase anweisen, Abfragen auch nach Größe und Länge zu optimieren:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Wie bei anderen Regeln können Sie eine .indexOn
-Regel auf jeder Ebene in Ihren Regeln angeben.
Für das obige Beispiel haben wir sie auf der Stammebene platziert, da alle Dinosaurierdaten gespeichert werden.
im Stammverzeichnis der Datenbank.
Indexierung mit orderByValue
In diesem Beispiel wird gezeigt, wie .indexOn
mit orderByValue()
funktioniert.
Angenommen, wir erstellen eine Bestenliste mit den folgenden Daten:
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
Da wir die Bestenliste mit orderByValue() erstellen, können wir unsere Abfragen optimieren, indem wir dem Knoten /scores
eine .value
-Regel hinzufügen:
{ "rules": { "scores": { ".indexOn": ".value" } } }