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 modo Datastore.

Í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 o 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 numa propriedade de data/hora.

Hotspotting devido ao aumento dos nomes das propriedades

Mapa térmico que mostra a identificação de pontos críticos devido ao aumento da propriedade

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 numa propriedade 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 modo Datastore.

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.

NAMESPACE: NS KIND: Users 
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),`UserList`,1)
VALUES: (16500000000000001,'Alice')
ENTITY:KEY(PROJECT('PROJECT_ID'),NAMESPACE(''),`UserList`,1,`User`,5000000000000001)

Onde:

  • NAMESPACE: namespace da entidade.
  • KIND: tipo de entidade que categoriza as entidades.
  • PROPERTIES: propriedades relacionadas com a entidade. A propriedade de ordenação __key__ só é apresentada para definições de índice que modificam a ordenação predefinida.
  • ANCESTOR: caminho do elemento principal opcional para localizar a entidade na hierarquia da base de dados.
  • VALORES: valor de cada propriedade.
  • ENTITY: ID da entidade atualizada numa operação.

No exemplo anterior, identifique as propriedades do valor PROPERTIES para encontrar o índice afetado.

Para encontrar o índice, conclua os seguintes passos:

  1. Aceda à página Índices do modo Datastore na Google Cloud consola.

    Aceda aos índices do modo Datastore

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

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

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

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

  • Índice incorporado: exclua a propriedade para que o índice não mantenha entradas de índice para essa propriedade. Consulte o artigo Propriedades excluídas para mais informações.
  • Índice composto: modifique o índice no ficheiro index.yaml 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. Consulte o artigo Acerca do index.yaml para mais informações.

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

Tipo Descrição Exemplo
Entrada de índice incorporada Entrada de índice para o índice de propriedade único na propriedade Timestamp, por ordem descendente para o espaço de nomes NS. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),Utilizadores, 5000000000000001)
Entrada de índice incorporada Entrada de índice para o índice de propriedade único no espaço de nomes predefinido. NAMESPACE: ' '
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),Utilizadores, 5000000000000001)
Entrada de índice composto Entrada de índice para o índice composto na propriedade Timestamp e na propriedade Name por ordem descendente sem o antepassado ativado. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Utilizadores,5000000000000001)
Entrada de índice composto com antepassado Entrada de índice para o índice composto na propriedade Timestamp por ordem descendente e na propriedade Name por ordem descendente com o antepassado ativado. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: ASC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),UserList,1,User,5000000000000001
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),UserList,1,User,5000000000000001)
Entrada de índice composto com __key__ Entrada de índice para o índice composto na propriedade Timestamp por ordem ascendente e na propriedade __key__ por ordem descendente sem o antepassado ativado. Pode usar __key__ como a propriedade final numa definição de índice para alterar a ordenação predefinida dos resultados. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: ASC, __key__ DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),UserList,1,User,5000000000000001)

O que se segue?