Ir para o console

Indexar seus dados

O Firebase permite que você realize consultas ad-hoc usando uma chave filha arbitrária. Se você souber antecipadamente quais serão seus índices, poderá defini-los pela regra .indexOn nas regras do Firebase Realtime Database para melhorar o desempenho das consultas.

Definir índices de dados

O Firebase fornece ferramentas eficientes para classificação e consulta de dados. Especificamente, O Firebase permite que você faça consultas ad-hoc em uma coleção de nodes usando qualquer chave filha comum. Conforme seu aplicativo é expandido, o desempenho dessa consulta é degradado. No entanto, se você informar ao Firebase as chaves para consultar, ele as indexará nos servidores, melhorando o desempenho das suas consultas.

Indexar com orderByChild

A maneira mais fácil de explicar esse processo é com um exemplo. Toda a equipe do Firebase concorda que dinossauros são incríveis. Veja um snippet de uma amostra de banco de dados sobre dinossauros. Usaremos essa amostra para mostrar como o .indexOn funciona com orderByChild().

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

Vamos imaginar que, no nosso app, muitas vezes nós precisamos classificar os dinossauros por nome, altura e comprimento, mas nunca por peso. Podemos melhorar o desempenho das nossas consultas dizendo ao Firebase essas informações. Como os nomes dos dinossauros são apenas as chaves, o Firebase já otimiza as consultas pelo nome do dinossauro, já que o nome é a chave do registro. Podemos usar o .indexOn e dizer ao Firebase para otimizar consultas por altura e comprimento também:

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

Assim como outras regras, você pode especificar uma regra .indexOn em qualquer nível nas suas regras. Nós a posicionamos no nível raiz no exemplo acima, pois todos os dados sobre dinossauros são armazenados na raiz do banco de dados.

Indexar com orderByValue

Neste exemplo, demonstraremos como o .indexOn funciona com o orderByValue(). Vamos imaginar que estamos criando um placar com as pontuações de esportes praticados pelos dinossauros com os dados a seguir:

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

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

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