Indizieren Sie Ihre Daten

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"
    }
  }
}