Indexieren Sie Ihre Daten

Firebase ermöglicht es Ihnen, Ad-hoc-Abfragen Ihrer Daten mit einem beliebigen untergeordneten Schlüssel durchzuführen. Wenn Sie im Voraus wissen, wie Ihre Indizes .indexOn werden, können Sie diese über die Regel .indexOn in Ihren Firebase Realtime Database Security Rules definieren, um die Abfrageleistung zu verbessern.

Definieren von Datenindizes

Firebase bietet leistungsstarke Tools zum Bestellen und Abfragen Ihrer Daten. Firebase ermöglicht es Ihnen insbesondere, 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 die abzufragenden Schlüssel mitteilen, indiziert Firebase diese Schlüssel auf den Servern und verbessert so die Leistung Ihrer Abfragen.

Indizierung mit orderByChild

Dies lässt sich am einfachsten 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() .

{
  "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 bestellen müssen, aber nie 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 , um Firebase .indexOn , auch Abfragen 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 in Ihren Regeln angeben. Wir haben es für das obige Beispiel auf 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 der Dino-Sportergebnisse 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 eine .value Regel an unserem /scores Knoten hinzufügen:

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