Padrões de mapa de calor para teclas de índice

Esta página mostra exemplos de padrões que pode ver num mapa de calor do Key Visualizer. Estes padrões podem ajudar a resolver problemas de desempenho específicos.

Utilização distribuída uniformemente

Mapa térmico que mostra leituras e escritas distribuídas uniformemente

Se um mapa de calor mostrar uma mistura detalhada de cores escuras e claras, as operações de escrita/eliminação para chaves de índice são distribuídas uniformemente por toda a base de dados. Este mapa de calor representa provavelmente um padrão de utilização eficaz para o Firestore.

Índices em chaves sequenciais

Um mapa térmico com uma única linha diagonal brilhante pode indicar um índice que está numa chave que está a aumentar ou a diminuir rigorosamente, como a data/hora. Os índices em chaves sequenciais não são recomendados e podem criar pontos críticos. Quando usa um hotspot, pode observar latências elevadas correspondentes.

Seguem-se alguns exemplos de pontos de acesso comuns no índice:

Hotspotting devido ao aumento da indicação de tempo

Mapa térmico que mostra a criação de pontos ativos devido ao aumento da indicação de tempo

Neste exemplo, um mapa de calor com uma única linha diagonal brilhante pode indicar uma base de dados que usa operações de escrita/eliminação de índice estritamente crescentes ou decrescentes num nome de campo de data/hora.

Hotspotting devido ao aumento dos nomes dos campos

Mapa térmico que mostra pontos críticos devido ao aumento do campo

Neste exemplo, um mapa de calor com uma única linha diagonal brilhante pode indicar uma base de dados que usa operações de escrita/eliminação de índice estritamente crescentes ou decrescentes num campo incremental, como números de faturas gerados automaticamente.

Para identificar o problema de hotspotting, use a ferramenta Key Visualizer e compreenda a estrutura da chave de índice para determinar que índice causa o problema e isentar esses índices com práticas recomendadas.

Compreenda a estrutura da chave de índice

Antes de compreender a estrutura das chaves de índice que vê na ferramenta Key Visualizer, saiba mais sobre os índices no Firestore.

O código seguinte mostra um exemplo de formato de chave de índice que vê quando passa o cursor do rato sobre o intervalo de chaves afetado no mapa térmico.

COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
  PROPERTIES: (Timestamp: DESC) 
  VALUES: (16500000000000001)
  DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001

Onde:

  • COLLECTION: localização da coleção na sua base de dados. Com base no âmbito, pode ser o caminho da coleção para o âmbito da coleção ou o nome da coleção para o âmbito do grupo de coleções.
  • PROPERTIES: campos usados para criar o índice. A propriedade de ordenação __name__só é apresentada para definições de índice que modificam a ordenação predefinida.
  • VALORES: valor de cada propriedade.
  • DOCUMENT: ID do documento atualizado numa operação.

No exemplo anterior, identifique os campos do valor PROPERTIES para encontrar o índice afetado.

Para encontrar o índice, conclua os seguintes passos:

  1. Na Google Cloud consola, aceda à página Bases de dados.

    Aceda a Bases de dados

  2. Selecione a base de dados necessária na lista de bases de dados.

  3. No menu de navegação, clique em Índices.

  4. Aceda ao separador Composto ou Campo único.

    Pode identificar o tipo de índice analisando o campo PROPERTIES. Consulte exemplos de chaves de índice para mais informações.

  5. Clique em Filtrar, selecione Campos e introduza o nome do campo.

    Use o operador OR para adicionar mais campos no caso de índices compostos.

Depois de identificar o índice que está a causar problemas, pode usar as seguintes soluções:

  • Índice composto: modifique o índice para garantir que o campo cujo valor aumenta ou diminui monotonicamente não é selecionado como o primeiro campo para indexação ou elimine o índice.

  • Índice de campo único: adicione uma isenção para o campo e a ordem de ordenação que quer isentar. Consulte o artigo Adicionar uma isenção de campo único para mais informações.

Exemplos de entradas de chaves de índice no mapa de calor

Tipo Descrição Exemplo
Índices de campo único de âmbito da coleção ASC, DESC O Firestore cria índices com âmbito de recolha por predefinição.

Entrada de índice para o índice de campo único no campo Timestamp, por ordem descendente para o documento Users/5000000000000001.
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: DESC)
VALUES: (16500000000000001)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Índices de campo único de âmbito da coleção para campos de matriz Para cada campo de matriz num documento, o Firestore cria e mantém um índice array-contains de âmbito da coleção.

Entrada de índice para índices de campo único no modo array-contains que são criados quando um campo Country: [USA, Japan] é adicionado ao documento. Tenha em atenção que os índices ASC e DESC também são criados por predefinição para este campo. O exemplo mostra o índice ASC para o campo Country.
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES:(Country: ASC)
VALUES:([USA, Japan]) DOCUMENT:(projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
Índices de campo único do grupo de coleções ASC, DESC, ARRAY Um grupo de coleções inclui todas as coleções com o mesmo ID de coleção.
Entrada de índice para o índice de campo único do grupo de coleções no campo Timestamp, por ordem descendente.
COLLECTION GROUP: Users
PROPERTIES: (Timestamp: DESC)
VALUES: (16500000000000001L)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Índices de campo único do grupo de coleções ASC, DESC, ARRAY Entrada de índice para o índice de campo único do grupo de coleções no campo Country no modo array-contains COLLECTION GROUP: Users PROPERTIES: (Country: ARRAY ASC) VALUES: (USA) DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Entrada de índice composto de recolha com propriedades ASC, ASC e ARRAY As entradas de índice composto com principal são criadas quando são criados documentos aninhados com a definição de índice de âmbito da coleção.

Entrada de índice para índice composto com o campo Timestamp e Name por ordem ascendente e Country no modo array-contains.
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: ASC, Name: ASC,Country: ARRAY)
VALUES: (16500000000000001L, 'Alice', 'USA')
DOCUMENT: (projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
Entrada de índice composto de âmbito de grupo de coleções com propriedades ASC e ASC Entrada de índice para o índice composto no campo Timestamp, por ordem ascendente, e no campo Name, por ordem ascendente COLLECTION GROUP: Users
PROPERTIES: (Timestamp: ASC, Name: ASC)
VALUES: (16500000000000001L, 'Alice')
DOCUMENT: (projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
Entrada de índice composto do âmbito da recolha com propriedades ASC e __name__ Entrada de índice para o índice composto no campo Timestamp por ordem ascendente e com ordenação __name__ por ordem descendente para o documento Users/5000000000000001. Pode usar __name__ como o campo final numa definição de índice para alterar a ordenação predefinida dos resultados. COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: ASC, __name__ DESC)
VALUES: (16500000000000001)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001

O que se segue?