Indicizza i tuoi dati

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 Firebase Realtime per migliorare le prestazioni delle query.

Definizione degli indici di dati

Firebase fornisce strumenti potenti per ordinare ed eseguire query sui dati. Nello specifico, 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 diminuiscono. Tuttavia, se comunichi a Firebase le chiavi che interrogherai, Firebase le indicizzerà 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 sono davvero fantastici. Ecco uno snippet da 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 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é i nomi dei dinosauri sono solo le chiavi, Firebase ottimizza già le query in base al nome dei dinosauri, poiché questa è la chiave del record. Possiamo usare .indexOn per dire a Firebase di ottimizzare le query anche per altezza e lunghezza:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

Come altre regole, puoi specificare una regola .indexOn a qualsiasi livello nelle tue regole. Nell'esempio sopra lo abbiamo posizionato al livello root perché tutti i dati sui dinosauri sono archiviati alla radice del database.

Indicizzazione con orderByValue

In questo esempio, dimostreremo come funziona .indexOn con orderByValue() . Diciamo che stiamo creando una classifica dei punteggi sportivi dei dinosauri con i seguenti dati:

{
  "scores": {
    "bruhathkayosaurus" : 55,
    "lambeosaurus" : 21,
    "linhenykus" : 80,
    "pterodactyl" : 93,
    "stegosaurus" : 5,
    "triceratops" : 22
  }
}

Dato che utilizziamo orderByValue() per creare la classifica, possiamo ottimizzare le nostre query aggiungendo una regola .value al nostro nodo /scores :

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