Indicizza i dati

Firebase ti consente di eseguire query ad hoc sui 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 le prestazioni delle query.

Definizione degli indici di dati

Firebase fornisce strumenti efficaci per ordinare e eseguire query sui dati. Nello specifico, Firebase consente di eseguire query ad hoc su una raccolta di nodi utilizzando qualsiasi chiave secondaria comune. Man mano che la tua app cresce, le prestazioni di questa query si riducono. Tuttavia, se comunicare a Firebase le chiavi su cui eseguirai query, Firebase indicizza queste chiavi sui server, migliorando il rendimento delle tue query.

Indicizzazione con orderByChild

Il modo più semplice per spiegarlo è attraverso un esempio. Noi di Firebase siamo d'accordo sul fatto che i dinosauri sono bellissimi. Ecco un estratto di un database di esempio di fatti sui dinosauri. Me lo userà 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 ma mai in base al peso. Possiamo migliorare le prestazioni delle query comunicando a Firebase queste informazioni. 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 alla radice del database.

Indicizzazione con orderByValue

In questo esempio, mostreremo come funziona .indexOn con orderByValue(). Supponiamo di dover creare una classifica dei risultati sportivi dinosauro con i seguenti dati:

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

Dal momento che utilizziamo orderByValue() per creare il leaderboard, possiamo ottimizzare le query aggiungendo una regola .value al nostro nodo /scores:

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