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

Gerenciar índices no Cloud Firestore

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

O Cloud Firestore garante o desempenho da consulta exigindo um índice para cada consulta. Os índices necessários para as consultas mais básicas são criados automaticamente para você. À medida que você usa e testa seu aplicativo, o Cloud Firestore gera mensagens de erro que ajudam você a criar índices adicionais que seu aplicativo exige. Esta página descreve como gerenciar seus índices de campo único e compostos .

Criar um índice ausente por meio de uma mensagem de erro

Se você tentar uma consulta composta com uma cláusula de intervalo que não mapeia para um índice existente, receberá um erro. A mensagem de erro inclui um link direto para criar o índice ausente no console do Firebase.

Siga o link gerado para o console do Firebase, revise as informações preenchidas automaticamente e clique em Criar .

Usar o console do Firebase

Para criar manualmente um novo índice no console do Firebase:

imagem da interface de indexação do Firestore no console do Firebase

  1. Acesse a seção Cloud Firestore do console do Firebase .
  2. Vá para a guia Índices e clique em Adicionar Índice .
  3. Insira o nome da coleção e defina os campos pelos quais deseja ordenar o índice.
  4. Clique em Criar .

Os índices podem levar alguns minutos para serem criados, dependendo do tamanho da consulta. Depois de criá-los, você pode ver seus índices e seus status na seção Índices compostos. Se eles ainda estiverem construindo, o console do Firebase incluirá uma barra de status de construção.

Remover índices

Para excluir um índice:

  1. Acesse a seção Cloud Firestore do console do Firebase .
  2. Clique na guia Índices .
  3. Passe o mouse sobre o índice que deseja excluir e selecione Excluir no menu de contexto.
  4. Confirme que deseja excluí-lo clicando em Excluir no alerta.

Usar a CLI do Firebase

Você também pode implantar índices com a Firebase CLI . Para começar, execute o firebase init firestore no diretório do seu projeto. Durante a configuração, a Firebase CLI gera um arquivo JSON com os índices padrão no formato correto. Edite o arquivo para adicionar mais índices e implante-o com o comando firebase deploy . Se você deseja apenas implantar índices, adicione o --only firestore:indexes . Se você editar os índices usando o console do Firebase, certifique-se de atualizar também o arquivo de índices locais. Consulte a referência de definição de índice JSON .

Tempo de construção do índice

Para criar um índice, o Cloud Firestore precisa configurar o índice e, em seguida, preencher o índice com dados existentes. O tempo de construção do índice é a soma do tempo de configuração e do tempo de preenchimento:

  • A configuração de um índice leva alguns minutos. O tempo mínimo de compilação de um índice é de alguns minutos, mesmo para um banco de dados vazio.

  • O tempo de preenchimento depende de quantos dados existentes pertencem ao novo índice. Quanto mais valores de campo corresponderem à definição do índice, mais tempo levará para preencher o índice.

As compilações de índice são operações de longa duração .

Depois de iniciar uma compilação de índice, o Cloud Firestore atribui um nome exclusivo à operação. Os nomes das operações são prefixados com projects/[PROJECT_ID]/databases/(default)/operations/ , por exemplo:

projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

No entanto, você pode deixar de fora o prefixo ao especificar um nome de operação para o comando describe .

Listando todas as operações de longa duração

Para listar operações de longa duração, use o comando gcloud firestore operations list . Este comando lista as operações em andamento e concluídas recentemente. As operações são listadas por alguns dias após a conclusão:

gcloud firestore operations list

Verifique o status da operação

Em vez de listar todas as operações de longa duração, você pode listar os detalhes de uma única operação:

gcloud firestore operations describe operation-name

Estimando o tempo de conclusão

À medida que sua operação é executada, consulte o valor do campo de state para obter o status geral da operação.

Uma solicitação para o status de uma operação de longa duração também retorna as métricas workEstimated e workCompleted . Essas métricas são retornadas para o número de documentos. workEstimated mostra o número total estimado de documentos que uma operação processará. workCompleted mostra o número de documentos processados ​​até o momento. Após a conclusão da operação, workCompleted reflete o número total de documentos que foram realmente processados, que pode ser diferente do valor de workEstimated .

Divida workCompleted por workEstimated para obter uma estimativa aproximada do progresso. A estimativa pode ser imprecisa porque depende da coleta de estatísticas atrasada.

Por exemplo, aqui está o status de progresso de uma compilação de índice:

{
  "operations": [
    {
      "name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI",
      "metadata": {
        "@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata",
        "common": {
          "operationType": "CREATE_INDEX",
          "startTime": "2020-06-23T16:52:25.697539Z",
          "state": "PROCESSING"
        },
        "progressDocuments": {
          "workCompleted": "219327",
          "workEstimated": "2198182"
        }
       },
    },
    ...

Quando uma operação é concluída, a descrição da operação conterá "done": true . Consulte o valor do campo de state para obter o resultado da operação. Se o campo done não estiver definido na resposta, seu valor será false . Não dependa da existência do valor done para operações em andamento.

Erros de construção de índice

Você pode encontrar erros de criação de índice ao gerenciar índices compostos e isenções de índice de campo único. Uma operação de indexação pode falhar se o Cloud Firestore encontrar um problema com os dados que está indexando. Mais comumente, isso significa que você atingiu um limite de índice . Por exemplo, a operação pode ter atingido o número máximo de entradas de índice por documento.

Se a criação do índice falhar, você verá a mensagem de erro no console. Depois de verificar se você não está atingindo nenhum limite de índice , tente novamente sua operação de índice.