Firebase ti consente di eseguire query ad hoc sui tuoi dati utilizzando una chiave secondaria arbitraria. Se conosci in anticipo quali saranno gli indici, puoi definirli tramite la regola .indexOn
nelle regole di sicurezza di Firebase Realtime Database per migliorare le prestazioni delle query.
Definizione degli indici di dati
Firebase fornisce strumenti efficaci per ordinare e eseguire query sui dati. Nello specifico, Firebase ti consente di eseguire query ad hoc su una raccolta di nodi utilizzando qualsiasi chiave secondaria comune. Man mano che la tua app cresce, il rendimento di questa query peggiora. Tuttavia, se comunicate a Firebase le chiavi su cui eseguire query, Firebase le indicizzerà sui server, migliorando il rendimento delle query.
Indicizzazione con orderByChild
Il modo più semplice per spiegare questo concetto è tramite un esempio. Noi di Firebase siamo d'accordo sul fatto
che i dinosauri siano fantastici. Ecco un estratto di un database di esempio di fatti sui dinosauri. Lo useremo per spiegare come funziona .indexOn
con orderByChild()
.
{ "lambeosaurus": { "height" : 2.1, "length" : 12.5, "weight": 5000 }, "stegosaurus": { "height" : 4, "length" : 9, "weight" : 2500 } }
Immaginiamo che nella nostra app sia spesso necessario ordinare i dinosauri per nome, altezza e lunghezza, ma mai per peso. Possiamo migliorare le prestazioni delle nostre query fornendo queste informazioni a Firebase. Poiché i nomi dei dinosauri sono solo le chiavi, Firebase è già ottimizzato per le query per nome di dinosauro, poiché questa è la chiave del record.
Possiamo utilizzare .indexOn
per indicare a Firebase di ottimizzare le query anche per altezza e lunghezza:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Come per le altre regole, puoi specificare una regola .indexOn
a qualsiasi livello nelle regole.
L'abbiamo posizionato a livello della directory principale per l'esempio precedente, perché tutti i dati dei dinosauri sono archiviati nella directory principale del database.
Indicizzazione con orderByValue
In questo esempio, dimostreremo come .indexOn
funziona con orderByValue()
.
Supponiamo di creare una classifica dei risultati sportivi dei dinosauri con i seguenti dati:
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
Poiché utilizziamo orderByValue() per creare il leaderboard, possiamo ottimizzare le query aggiungendo una regola .value
al nostro nodo /scores
:
{ "rules": { "scores": { ".indexOn": ".value" } } }