Indicizza i dati

Firebase ti consente di eseguire query ad hoc sui tuoi dati utilizzando una chiave secondaria arbitraria. Se sai in anticipo quali saranno i tuoi indici, puoi definirli tramite la regola .indexOn nelle regole di sicurezza di Firebase Realtime Database per migliorare il rendimento delle query.

Definizione degli indici dei dati

Firebase fornisce strumenti potenti per ordinare ed eseguire query sui tuoi dati. In particolare, 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 comunichi a Firebase le chiavi su cui eseguirai query, Firebase indicizzerà queste chiavi sui server, migliorando il rendimento delle query.

Indicizzazione con orderByChild

Il modo più semplice per spiegarlo è tramite un esempio. Tutti noi di Firebase siamo d'accordo che i dinosauri sono piuttosto interessanti. Ecco uno snippet di un database di esempio di fatti sui dinosauri. Lo utilizzeremo per spiegare come funziona .indexOn con orderByChild().

{
  "lambeosaurus": {
    "height" : 2.1,
    "length" : 12.5,
    "weight": 5000
  },
  "stegosaurus": {
    "height" : 4,
    "length" : 9,
    "weight" : 2500
  }
}

Supponiamo che nella nostra app dobbiamo spesso ordinare i dinosauri per nome, altezza e lunghezza, ma mai per peso. Possiamo migliorare il rendimento delle nostre query comunicando queste informazioni a Firebase. Poiché i nomi dei dinosauri sono solo le chiavi, Firebase ottimizza già le query per nome di dinosauro, poiché questa è la chiave del record. Possiamo utilizzare .indexOn per indicare a Firebase di ottimizzare anche le query per altezza e lunghezza:

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

Come per le altre regole, puoi specificare una regola .indexOn a qualsiasi livello nelle tue regole. L'abbiamo inserita a livello di root per l'esempio precedente perché tutti i dati dei dinosauri sono archiviati nella root del database.

Indicizzazione con orderByValue

In questo esempio, mostreremo come funziona .indexOn con orderByValue(). Supponiamo di creare una classifica dei punteggi 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 la classifica, possiamo ottimizzare le nostre query aggiungendo una regola .value al nodo /scores:

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