Indexe seus dados

O Firebase permite que você faça consultas ad hoc em seus dados usando uma chave filha arbitrária. Se você souber com antecedência quais serão seus índices, poderá defini-los por meio da regra .indexOn nas regras de segurança do Firebase Realtime Database para melhorar o desempenho da consulta.

Definição de índices de dados

O Firebase fornece ferramentas poderosas para ordenar e consultar seus dados. Especificamente, o Firebase permite fazer consultas ad hoc em uma coleção de nós usando qualquer chave filha comum. À medida que seu aplicativo cresce, o desempenho dessa consulta diminui. No entanto, se você informar ao Firebase sobre as chaves que irá consultar, o Firebase indexará essas chaves nos servidores, melhorando o desempenho de suas consultas.

Indexação com orderByChild

A maneira mais fácil de explicar isso é através de um exemplo. Todos nós do Firebase concordamos que os dinossauros são muito legais. Aqui está um trecho de um exemplo de banco de dados de fatos sobre dinossauros. Iremos usá-lo para explicar como .indexOn funciona com orderByChild() .

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

Vamos imaginar que em nosso aplicativo muitas vezes precisamos ordenar os dinossauros por nome, altura e comprimento, mas nunca por peso. Podemos melhorar o desempenho de nossas consultas informando essas informações ao Firebase. Como os nomes dos dinossauros são apenas as chaves, o Firebase já otimiza para consultas por nome dos dinossauros, já que esta é a chave do registro. Podemos usar .indexOn para dizer ao Firebase para otimizar consultas de altura e comprimento também:

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

Como outras regras, você pode especificar uma regra .indexOn em qualquer nível das suas regras. Colocamos no nível raiz no exemplo acima porque todos os dados do dinossauro são armazenados na raiz do banco de dados.

Indexação com orderByValue

Neste exemplo, demonstraremos como .indexOn funciona com orderByValue() . Digamos que estamos fazendo uma tabela de classificação de resultados esportivos de dinossauros com os seguintes dados:

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

Como estamos usando orderByValue() para criar o placar, podemos otimizar nossas consultas adicionando uma regra .value em nosso nó /scores :

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