Pattern della mappa termica per le chiavi di indice

Questa pagina mostra esempi di pattern che potresti vedere in una mappa termica Key Visualizer. Questi pattern possono aiutarti a risolvere problemi specifici di prestazioni.

Utilizzo distribuito uniformemente

Mappa termica che mostra letture e scritture distribuite in modo uniforme

Se una mappa termica mostra una combinazione granulare di colori scuri e chiari, le operazioni di scrittura/eliminazione per le chiavi di indice vengono distribuite uniformemente nel database. Questa mappa termica probabilmente rappresenta un pattern di utilizzo efficace per la modalità Datastore.

Indici sulle chiavi sequenziali

Una mappa termica con una singola linea diagonale luminosa può indicare un indice che si trova su una chiave rigorosamente in aumento o in diminuzione, ad esempio un timestamp. Gli indici su chiavi sequenziali non sono consigliati e possono creare hotspot. Durante l'hotspotting, potresti notare latenze elevate corrispondenti.

Di seguito sono riportati alcuni esempi di hotspot comuni sull'indice:

Hotspoting dovuto all'aumento del timestamp

Mappa termica che mostra l'hotspotting a causa dell'aumento del timestamp

In questo esempio, una mappa termica con una singola linea diagonale luminosa può indicare un database che utilizza operazioni di scrittura/eliminazione dell'indice rigorosamente aumentate o decrescente su una proprietà timestamp.

Hotspoting dovuto all'aumento dei nomi delle proprietà

Mappa termica che mostra l'hotspotting a causa dell'aumento della proprietà

In questo esempio, una mappa termica con una singola linea diagonale luminosa può indicare un database che utilizza operazioni di scrittura/eliminazione dell'indice rigorosamente crescenti o decrescenti su una proprietà incrementale, come i numeri di fattura generati automaticamente.

Per identificare il problema di hotspot, utilizza lo strumento Key Visualizer e comprendi la struttura delle chiavi di indice per determinare quale indice causa il problema ed escludere gli indici mediante le best practice.

Comprendere la struttura delle chiavi di indice

Prima di comprendere la struttura delle chiavi di indice visualizzata nello strumento Key Visualizer, scopri di più sugli indici in modalità Datastore.

Il codice seguente mostra un esempio di formato di chiave di indice che viene visualizzato quando passi il mouse sopra l'intervallo di chiavi interessato nella mappa termica.

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)

Dove:

  • NAMESPACE: lo spazio dei nomi dell'entità.
  • TIPO: tipo di entità che classifica le entità.
  • PROPRIETÀ: le proprietà correlate all'entità. La proprietà di ordinamento __key__ viene mostrata solo per le definizioni di indice che modificano l'ordine predefinito.
  • ANCESTOR: facoltativo percorso predecessore per individuare l'entità all'interno della gerarchia del database.
  • VALORI: valore di ogni proprietà.
  • ENTITY: ID dell'entità aggiornata in un'operazione.

Dall'esempio precedente, identifica le proprietà del valore PROPERTIES per trovare l'indice interessato.

Per trovare l'indice, procedi nel seguente modo:

  1. Vai alla pagina Indici in modalità Datastore nella console Google Cloud.

    Vai a Indici in modalità Datastore

    Puoi identificare il tipo di indice analizzando il campo PROPRIETÀ. Consulta esempi di chiavi di indice per ulteriori informazioni.

  2. Fai clic su Filtra, seleziona Campi e inserisci il nome del campo.

    Utilizza l'operatore OR per aggiungere altre proprietà in caso di indici composti.

Dopo aver identificato l'indice che causa i problemi, puoi utilizzare le seguenti soluzioni:

  • Indice integrato: escludi la proprietà in modo che l'indice non mantenga le relative voci. Per ulteriori informazioni, consulta Proprietà escluse.
  • Indice composto: modifica l'indice nel file index.yaml per assicurarti che il campo il cui valore aumenta o diminuisce monotonicamente non sia selezionato come primo campo per l'indicizzazione oppure elimina l'indice. Per ulteriori informazioni, consulta Informazioni su index.yaml.

Esempi di voci chiave dell'indice nella mappa termica

Tipo Descrizione Esempio
Voce di indice integrata Voce di indice per l'indice di singola proprietà nella proprietà Timestamp, in ordine decrescente per lo spazio dei nomi NS. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),Utenti, 5000000000000001)
Voce di indice integrata Voce di indice per l'indice di singola proprietà nello spazio dei nomi predefinito. NAMESPACE: ' '
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),Utenti, 5000000000000001)
Voce dell'indice composto Voce di indice dell'indice composto nella proprietà Timestamp e nella proprietà Name in ordine decrescente senza predecessore abilitato. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Utenti,5000000000000001)
Voce dell'indice composto con predecessore Voce di indice dell'indice composto nella proprietà Timestamp in ordine decrescente e nella proprietà Name in ordine decrescente con il predecessore abilitato. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: ASC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Elenco utenti,1,Utente,5000000000000001
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Elenco utenti,1,Utente,5000000000000001)
Voce dell'indice composto con __key__ Voce dell'indice composto nella proprietà Timestamp in ordine crescente e per __key__ in ordine decrescente senza predecessore abilitato. Puoi utilizzare __key__ come proprietà finale in una definizione di indice per modificare l'ordine predefinito dei risultati. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: ASC, __key__ DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Elenco utenti,1,Utente,5000000000000001)

Passaggi successivi