Indizieren Sie Ihre Daten

Mit Firebase können Sie mit einem beliebigen untergeordneten Schlüssel 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 Realtime Database Security Rules definieren, um die Abfrageleistung zu verbessern.

Datenindizes definieren

Firebase bietet leistungsstarke Tools zum Ordnen und Abfragen Ihrer Daten. Insbesondere ermöglicht Ihnen Firebase, Ad-hoc-Abfragen für eine Sammlung von Knoten mit einem beliebigen gemeinsamen untergeordneten Schlüssel durchzuführen. Wenn Ihre App wächst, nimmt die Leistung dieser Abfrage ab. Wenn Sie Firebase jedoch mitteilen, welche Schlüssel Sie abfragen werden, indiziert Firebase diese Schlüssel auf den Servern, wodurch die Leistung Ihrer Abfragen verbessert wird.

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 Dinosaurier-Fakten. 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 Name, Größe und Länge ordnen 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 für 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 demonstrieren wir, wie .indexOn mit orderByValue() funktioniert. Nehmen wir an, wir erstellen eine Rangliste von Dino-Sportergebnissen mit den folgenden Daten:

{
  "scores": {
    "bruhathkayosaurus" : 55,
    "lambeosaurus" : 21,
    "linhenykus" : 80,
    "pterodactyl" : 93,
    "stegosaurus" : 5,
    "triceratops" : 22
  }
}

Da wir orderByValue() verwenden, um die Rangliste zu erstellen, können wir unsere Abfragen optimieren, indem wir eine .value Regel an unserem /scores Knoten hinzufügen:

{
  "rules": {
    "scores": {
      ".indexOn": ".value"
    }
  }
}