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 fornece 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 filha 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.

Indexando 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 banco de dados de amostras de fatos sobre dinossauros. Nós o usaremos 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 as consultas pelo nome do dinossauro, já que essa é a chave do registro. Podemos usar .indexOn para dizer ao Firebase para otimizar as consultas de altura e comprimento também:

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

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

Indexando com orderByValue

Neste exemplo, demonstraremos como .indexOn funciona com orderByValue() . Digamos que estamos fazendo um placar de pontuações esportivas 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"
    }
  }
}
,

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 fornece 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 filha 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.

Indexando 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 banco de dados de amostras de fatos sobre dinossauros. Nós o usaremos 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 as consultas pelo nome do dinossauro, já que essa é a chave do registro. Podemos usar .indexOn para dizer ao Firebase para otimizar as consultas de altura e comprimento também:

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

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

Indexando com orderByValue

Neste exemplo, demonstraremos como .indexOn funciona com orderByValue() . Digamos que estamos fazendo um placar de pontuações esportivas 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"
    }
  }
}