Daten indexieren

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 zum Sortieren und Abfragen Ihrer Daten. Mit Firebase können Sie Ad-hoc-Abfragen für eine Sammlung von Knoten mit einem beliebigen gemeinsamen untergeordneten Schlüssel ausführen. Wenn Ihre App wächst, verschlechtert sich die Leistung dieser Abfrage. Wenn Sie Firebase jedoch die Schlüssel mitteilen, die Sie abfragen möchten, werden diese Schlüssel von Firebase auf den Servern indexiert, wodurch die Leistung Ihrer Abfragen verbessert wird.

Indexierung mit orderByChild

Am besten lässt sich das anhand eines Beispiels erklären. Wir alle bei Firebase sind der Meinung, dass Dinosaurier ziemlich cool sind. 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
  }
}

Angenommen, in unserer App müssen wir die Dinosaurier häufig nach Name, Größe und Länge sortieren, 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 Abfragen nach dem Namen des Dinosauriers, da dies der Schlüssel des Datensatzes ist. Mit .indexOn können wir Firebase anweisen, Abfragen auch nach 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. Im obigen Beispiel haben wir es auf der Stammebene platziert, da alle Dinosaurierdaten im Stammverzeichnis der Datenbank gespeichert sind.

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 /scores-Knoten eine .value-Regel hinzufügen:

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