Firebase ti consente di eseguire query ad hoc sui tuoi dati utilizzando una chiave figlio arbitraria. Se sai in anticipo quali saranno i tuoi indici, puoi definirli tramite la regola .indexOn
nelle regole di sicurezza del database in tempo reale di Firebase per migliorare le prestazioni delle query.
Definizione di indici di dati
Firebase fornisce potenti strumenti per ordinare e interrogare i tuoi dati. In particolare, Firebase ti consente di eseguire query ad hoc su una raccolta di nodi utilizzando qualsiasi chiave figlio comune. Man mano che la tua app cresce, le prestazioni di questa query peggiorano. Tuttavia, se comunichi a Firebase le chiavi che interrogherai, Firebase indicizzerà tali chiavi sui server, migliorando le prestazioni delle tue query.
Indicizzazione con orderByChild
Il modo più semplice per spiegarlo è attraverso un esempio. Tutti noi di Firebase siamo d'accordo sul fatto che i dinosauri siano piuttosto interessanti. Ecco uno snippet da un database campione 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 spesso dobbiamo ordinare i dinosauri per nome, altezza e lunghezza, ma mai per peso. Possiamo migliorare le prestazioni delle nostre query comunicando a Firebase queste informazioni. Poiché il nome dei dinosauri è solo la chiave, Firebase ottimizza già le query in base al nome del dinosauro, poiché questa è la chiave del record. Possiamo usare .indexOn
per dire a Firebase di ottimizzare anche le query per altezza e lunghezza:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Come altre regole, puoi specificare una regola .indexOn
a qualsiasi livello nelle tue regole. L'abbiamo posizionato a livello di root per l'esempio precedente perché tutti i dati sui dinosauri sono archiviati nella root del database.
Indicizzazione con orderByValue
In questo esempio, dimostreremo come funziona .indexOn
con orderByValue()
. Diciamo che stiamo creando una classifica dei punteggi di Dino Sports con i seguenti dati:
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
Poiché utilizziamo orderByValue() per creare la classifica, possiamo ottimizzare le nostre query aggiungendo una regola .value
al nostro nodo /scores
:
{ "rules": { "scores": { ".indexOn": ".value" } } }