Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Indexe seus dados

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

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.

Definindo índices de dados

O Firebase oferece ferramentas poderosas para ordenar e consultar seus dados. Especificamente, o Firebase permite que você faça consultas ad hoc em uma coleção de nós usando qualquer chave filho comum. À medida que seu aplicativo cresce, o desempenho dessa consulta diminui. No entanto, se você informar ao Firebase sobre as chaves que 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 da Firebase concordamos que os dinossauros são muito legais. Aqui está um trecho de um banco de dados de amostra de fatos sobre dinossauros. Vamos 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 o nome dos dinossauros são apenas as chaves, o Firebase já otimiza para consultas por nome de dinossauro, já que essa é a chave do registro. Podemos usar .indexOn para instruir o Firebase a otimizar também as consultas de altura e comprimento:

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

Como outras regras, você pode especificar uma regra .indexOn em qualquer nível em suas regras. Nós o colocamos no nível raiz para o 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 um placar de pontuações de esportes 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 a tabela de classificação, podemos otimizar nossas consultas adicionando uma regra .value em nosso nó /scores :

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