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 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 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 verranno interrogate, 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 fantastici. Ecco un frammento 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 abbiamo spesso bisogno di 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 sono solo le chiavi, 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 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. L'abbiamo posizionato a livello di radice per l'esempio sopra perché tutti i dati sui dinosauri sono archiviati nella radice del database.

Indicizzazione con orderByValue

In questo esempio, dimostreremo come funziona .indexOn con orderByValue() . Diciamo che stiamo creando una classifica dei risultati di Dino Sports con i seguenti dati:

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

Poiché stiamo usando orderByValue() per creare la classifica, possiamo ottimizzare le nostre query aggiungendo una regola .value al nostro nodo /scores :

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