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 de Firestore.

Í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 un nombre de campo de marca de tiempo.

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

Mapa de calor que muestra generación de hotspots debido al aumento del campo

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 un campo 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 Firestore.

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.

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

Aquí:

  • COLECCIÓN: ubicación de la colección en tu base de datos. Según el alcance, puede ser una ruta de recopilación para el alcance de la colección o el nombre de la colección para el alcance del grupo de colección.
  • PROPERTIES: Son los campos usados para crear el índice. La propiedad de ordenamiento __name__ solo se muestra para las definiciones de índice que modifican el orden predeterminado.
  • VALORES: valor de cada propiedad
  • DOCUMENT: Es el ID del documento actualizado en una operación.

En el ejemplo anterior, identifica los campos del valor PROPERTIES para encontrar el índice afectado.

Para encontrar el índice, completa los siguientes pasos:

  1. En la consola de Google Cloud, ve a la página Bases de datos.

    Ir a Bases de datos

  2. Selecciona la base de datos requerida de la lista.

  3. En el menú de navegación, haz clic en Índices.

  4. Ve a la pestaña Compuestos o De campo único.

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

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

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

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

  • Índice compuesto: modifica el índice para asegurarte de que el campo cuyo valor aumenta o disminuye de forma monótona no esté seleccionado como el primer campo para la indexación, o bien borra el índice.

  • Índice de campo único: Agrega una exención para el campo y el orden de clasificación que deseas excluir. Consulta Cómo agregar una exención de campo único para obtener más información.

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

Tipo Descripción Ejemplo
Índices de campo único de alcance de la colección ASC, DESC Según la configuración predeterminada, Firestore crea índices con alcance de colección.

Entrada del índice del índice de campo único en el campo Timestamp, en orden descendente para el 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 alcance de la colección para campos de array En cada campo de array de un documento, Firestore crea y mantiene un índice de contenido de array con alcance de colección.

Entrada de índice para los índices de campo único del modo de contenido de array que se crearán cuando se agregue un campo Country: [USA, Japan] al documento. Ten en cuenta que los índices ASC,DESC también se crearán de forma predeterminada para este campo. En el ejemplo, se muestra el índice ASC para el 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 del grupo de colecciones ASC, DESC, ARRAY Un grupo de colecciones incluye todas las colecciones con el mismo ID de colección.
Entrada de índice para el índice de campo único del grupo de colecciones en el campo Timestamp, en orden descendente.
COLLECTION GROUP: Users
PROPERTIES: (Timestamp: DESC)
VALUES: (16500000000000001L)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Índices de campo único del grupo de colecciones ASC, DESC, ARRAY Entrada del índice del índice de campo único del grupo de colecciones en el campo Country del modo array-contains COLLECTION GROUP: Users PROPERTIES: (Country: ARRAY ASC) VALUES: (USA) DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Entrada de índice compuesto de la colección con propiedades ASC, ASC y ARRAY Las entradas de índice compuesto con el elemento superior se crean cuando los documentos anidados se crean con la definición del índice del alcance de la colección.

Entrada de índice para el índice compuesto con los campos Timestamp y Name en orden ascendente, y Country en 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 compuesto del alcance del grupo de colecciones con propiedades ASC y ASC Entrada del índice compuesto en el campo Timestamp, en orden ascendente y Name en orden ascendente COLLECTION GROUP: Users
PROPERTIES: (Timestamp: ASC, Name: ASC)
VALUES: (16500000000000001L, 'Alice')
DOCUMENT: (projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
Entrada de índice compuesto del alcance de la colección con propiedades ASC y __name__ Entrada de índice del índice compuesto en el campo Timestamp en orden ascendente y con __name__ de orden descendente para el documento Users/5000000000000001. Puedes usar __name__ como el último campo en una definición de índice para cambiar el orden predeterminado de los 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

¿Qué sigue?