Padrões de mapa de calor para chaves de índice
Nesta página, mostramos exemplos de padrões que podem ser vistos em um mapa de calor do Key Visualizer. Esses padrões podem ajudar você a resolver problemas de desempenho específicos.
Uso distribuído de modo uniforme
Se um mapa de calor mostrar uma mistura refinada de cores escuras e brilhantes, as operações de gravação/exclusão das chaves de índice serão distribuídas uniformemente por todo o banco de dados. Esse mapa de calor provavelmente representa um padrão de uso eficaz do Firestore.
Índices em chaves sequenciais
Um mapa de calor com uma única linha diagonal brilhante pode indicar um índice que está em uma chave que está estritamente crescente ou decrescente, como o carimbo de data/hora. Os índices em chaves sequenciais não são recomendados e podem criar pontos de acesso. Ao criar um ponto de acesso, é possível observar latências elevadas correspondentes.
Veja alguns exemplos de pontos de acesso comuns no índice:
Ponto de acesso devido ao aumento do carimbo de data/hora
Neste exemplo, um mapa de calor com uma única linha diagonal brilhante pode indicar um banco de dados que usa operações de gravação/exclusão de índice estritamente crescentes ou decrescentes em um nome de campo de carimbo de data/hora.
Ponto de acesso devido ao aumento dos nomes dos campos
Neste exemplo, um mapa de calor com uma única linha diagonal clara pode indicar um banco de dados que usa operações de gravação/exclusão de índice estritamente crescentes ou decrescentes em um campo incremental, como números de faturas gerados automaticamente.
Para identificar o problema de uso excessivo do ponto de acesso, use a ferramenta Key Visualizer e entenda a estrutura da chave de índice para determinar qual índice causa o problema e isentar esses índices com as práticas recomendadas.
Compreender a estrutura da chave do índice
Antes de entender a estrutura das chaves de índice que você vê na ferramenta Key Visualizer, saiba mais sobre índices no Firestore.
O código a seguir mostra um exemplo de formato de chave de índice que você vê ao passar o cursor sobre o intervalo de chaves afetado no mapa de calor.
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: DESC)
VALUES: (16500000000000001)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Em que:
- COLEÇÃO: local da coleção em seu banco de dados. Com base no escopo, pode ser o caminho da coleção para o escopo ou o nome da coleção para o escopo do grupo de coleções.
- PROPERTIES: campos usados para criar o índice. A propriedade de ordenação
__name__
(link em inglês) só é mostrada para definições de índice que modificam a ordem padrão. - VALORES: valor de cada propriedade.
- DOCUMENT: ID do documento atualizado em uma operação.
No exemplo anterior, identifique os campos do valor PROPERTIES para encontrar o índice afetado.
Para encontrar o índice, siga estas etapas:
No Console do Google Cloud, acesse a página Bancos de Dados.
Selecione o banco de dados necessário na lista de bancos de dados.
No menu de navegação, clique em Índices.
Acesse a guia Composto ou Campo único.
É possível identificar o tipo de índice analisando o campo PROPRIEDADES. Consulte exemplos de chaves de índice para mais informações.
Clique em Filtro, selecione Campos e insira o nome do campo.
Use o operador OR para adicionar mais campos no caso de índices compostos.
Depois de identificar o índice que está causando problemas, você pode usar as seguintes soluções:
Índice composto: modifique o índice para garantir que o campo cujo valor aumenta ou diminui monotonicamente não seja selecionado como o primeiro campo para indexação ou exclua o índice.
Índice de campo único: adicione uma isenção para o campo e a ordem de classificação que você quer isentar. Para mais informações, consulte Como adicionar uma isenção de campo único.
Exemplos de entradas de chave de índice no mapa de calor
Tipo | Descrição | Exemplo |
---|---|---|
Índices de campo único do escopo da coleção ASC, DESC | O Firestore cria índices com um escopo de coleção por padrão. Entrada de índice do índice de campo único no campo Timestamp , em ordem decrescente 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 do escopo da coleção para campos de matriz | Para cada campo de matriz em um documento, o Firestore cria e mantém um índice "array-contains" do escopo da coleção. Entrada de índice para índices de campo único no modo "array-contains" que serão criados quando um campo Country: [USA, Japan] for adicionado ao documento. Observe que os índices ASC,DESC também serão criados por padrão para esse campo. O exemplo mostra o índice ASC do 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. Entrada de índice do índice de campo único do grupo de coleções no campo Timestamp , em ordem decrescente. |
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 do grupo de coleções Índice de campo único 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 coleção com propriedades ASC, ASC, ARRAY | As entradas de índice composto com pai são criadas quando documentos aninhados são criados com a definição de índice do escopo da coleção. Entrada do índice para o índice composto com os campos Timestamp e Name em ordem crescente 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 do escopo do grupo de coleções com propriedades ASC e ASC | Entrada de índice do índice composto no campo Timestamp , em ordem crescente, e no campo Name em ordem crescente |
COLLECTION GROUP: Users PROPERTIES: (Timestamp: ASC, Name: ASC) VALUES: (16500000000000001L, 'Alice') DOCUMENT: (projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001) |
Entrada de índice composta do escopo da coleção com propriedades ASC e __name__ |
Entrada de índice composto no campo Timestamp em ordem crescente e com classificação __name__ em ordem decrescente para o documento Users/5000000000000001 . É possível usar __name__ como o campo final em uma definição de índice para mudar a ordem padrão 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 |
A seguir
- Veja os primeiros passos do Key Visualizer.
- Descubra como explorar um mapa de calor em detalhes.
- Leia sobre as métricas exibidas em um mapa de calor.