Patrones de mapa de calor para claves de índice

En esta página, se muestran ejemplos de patrones que puedes ver en un mapa de calor de Key Visualizer. Estos patrones pueden ayudarte a solucionar problemas de rendimiento específicos.

Uso distribuido uniforme

Mapa de calor que muestra lecturas y escrituras distribuidas de manera uniforme

Si en un mapa de calor se muestra una combinación detallada de colores oscuros y brillantes, las operaciones de escritura y eliminación de las claves de índice se distribuyen de manera uniforme en toda la base de datos. Es probable que este mapa de calor represente un patrón de uso eficaz para el modo Datastore.

Índices en claves secuenciales

Un mapa de calor con una sola línea diagonal brillante puede indicar un índice que se encuentra en una clave que aumenta o disminuye estrictamente, como la marca de tiempo. No se recomiendan los índices en claves secuenciales, ya que pueden crear hotspots. Cuando generes hotspots, es posible que observes las latencias elevadas correspondientes.

Estos son algunos ejemplos de hotspots comunes en el índice:

Generación de hotspots debido al aumento de la marca de tiempo

Mapa de calor que muestra generación de hotspots debido al aumento de la marca de tiempo

En este ejemplo, un mapa de calor con una sola línea diagonal brillante puede indicar una base de datos que usa operaciones de escritura o eliminación de índice que aumentan o disminuyen estrictamente en una propiedad de marca de tiempo.

Generación de hotspots debido al aumento de nombres de propiedades

Mapa de calor que muestra generación de hotspots debido al aumento de la propiedad

En este ejemplo, un mapa de calor con una sola línea diagonal brillante puede indicar una base de datos que usa operaciones de escritura o eliminación de índice que aumentan o disminuyen estrictamente en una propiedad incremental, como los números de facturas generados automáticamente.

Para identificar el problema de generación de hotspots, usa la herramienta Key Visualizer y comprender la estructura de claves de índice para determinar qué índice causa el problema y eximir esos índices con las prácticas recomendadas.

Comprende la estructura de la clave de índice

Antes de comprender la estructura de las claves de índice que ves en la herramienta Key Visualizer, obtén información sobre los índices en modo Datastore.

En el siguiente código, se muestra un ejemplo de formato de clave de índice que ves cuando colocas el cursor sobre el rango de claves afectado en el mapa de calor.

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)

Aquí:

  • NAMESPACE: Es el espacio de nombres de la entidad.
  • KIND: Es un tipo de entidad que las categoriza.
  • PROPIEDADES: Son las propiedades relacionadas con la entidad. La propiedad de ordenamiento __key__ solo se muestra para las definiciones de índice que modifican el orden predeterminado.
  • ANCESTOR: ruta de acceso principal opcional para ubicar la entidad dentro de la jerarquía de la base de datos.
  • VALORES: valor de cada propiedad
  • ENTITY: Es el ID de la entidad actualizada en una operación.

A partir del ejemplo anterior, identifica las propiedades del valor PROPERTIES para encontrar el índice afectado.

Para encontrar el índice, completa los siguientes pasos:

  1. Ve a la página Índices del modo Datastore en la consola de Google Cloud.

    Ir a Índices del modo Datastore

    Puedes identificar el tipo de índice; para ello, analiza el campo PROPERTIES. Consulta ejemplos de claves de índice para obtener más información.

  2. Haz clic en Filtro, selecciona Campos y, luego, ingresa el nombre del campo.

    Usa el operador OR para agregar más propiedades en caso de índices compuestos.

Una vez que hayas identificado el índice que causa problemas, puedes utilizar las siguientes soluciones:

  • Índice integrado: Excluye la propiedad de modo que el índice no mantenga entradas de índice para esa propiedad. Consulta las Propiedades excluidas para obtener más información.
  • Índice compuesto: modifica el índice en el archivo index.yaml para asegurarte de que el campo cuyo valor aumenta o disminuye de forma monotónica no se seleccione como el primer campo para la indexación, o borra el índice. Consulta Acerca de index.yaml para obtener más información.

Ejemplos de entradas de clave de índice en el mapa de calor

Tipo Descripción Ejemplo
Entrada de índice integrado Entrada de índice para el índice de una sola propiedad en la propiedad Timestamp, en orden descendente para el espacio de nombres NS. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),Usuarios, 5000000000000001)
Entrada de índice integrado Entrada de índice para el índice de propiedad único en el espacio de nombres predeterminado. NAMESPACE: ' '
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),Usuarios, 5000000000000001)
Entrada de índice compuesto Entrada de índice para el índice compuesto en las propiedades Timestamp y Name en orden descendente sin la principal habilitada. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Usuarios,5000000000000001)
Entrada de índice compuesto con principal Entrada de índice para el índice compuesto en la propiedad Timestamp en orden descendente y la propiedad Name en orden descendente con la principal habilitada. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: ASC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Lista de usuarios,1,Usuario,5000000000000001
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Lista de usuarios,1,Usuario,5000000000000001)
Entrada de índice compuesto con __key__ Entrada de índice para el índice compuesto en la propiedad Timestamp en orden ascendente y __key__ en orden descendente sin principal habilitada. Puedes usar __key__ como la propiedad final en una definición de índice para cambiar el orden predeterminado de los resultados. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: ASC, __key__ DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Lista de usuarios,1,Usuario,5000000000000001)

¿Qué sigue?