Mit Firebase können Sie Ad-hoc-Abfragen für Ihre Daten mit einem beliebigen untergeordneten Schlüssel ausführen. Wenn Sie im Voraus wissen, wie Ihre Indexe aussehen werden, 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. Mit zunehmender Größe Ihrer App nimmt die Leistung dieser Abfrage ab. Wenn Sie Firebase jedoch über die Schlüssel informieren, die Sie abfragen möchten, indexiert Firebase diese Schlüssel auf den Servern, wodurch die Leistung Ihrer Abfragen verbessert wird.
Indexierung mit orderByChild
Am einfachsten lässt sich das anhand eines Beispiels erklären. Wir alle bei Firebase sind uns einig, dass Dinosaurier ziemlich cool sind. Hier sehen Sie einen Ausschnitt aus einer Beispieldatenbank mit Dinosaurierfakten. Wir verwenden sie, 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
}
}Nehmen wir an, 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 Dinosauriernamen, da dies der Schlüssel des Datensatzes ist.
Mit .indexOn können wir Firebase anweisen, auch Abfragen nach Größe und Länge zu optimieren:
{
"rules": {
"dinosaurs": {
".indexOn": ["height", "length"]
}
}
}Wie andere Regeln können Sie eine .indexOn-Regel auf jeder Ebene in Ihren Regeln angeben.
Im obigen Beispiel haben wir sie auf Stammebene platziert, da alle Dinosaurierdaten im Stammverzeichnis der Datenbank gespeichert sind.
Indexierung mit orderByValue
In diesem Beispiel zeigen wir, wie .indexOn mit orderByValue() funktioniert.
Nehmen wir an, wir erstellen eine Bestenliste mit den Ergebnissen von Dinosauriersportarten 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 zu unserem Knoten /scores hinzufügen:
{
"rules": {
"scores": {
".indexOn": ".value"
}
}
}