Pattern di mappa termica per le chiavi di indice

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

Utilizzo distribuito in modo uniforme

Mappa termica che mostra letture e scritture distribuite in modo uniforme

Se una mappa termica mostra un mix granulare di colori scuri e chiari, le operazioni di scrittura/eliminazione per le chiavi di indice sono distribuite uniformemente nel database. Questa mappa termica probabilmente rappresenta un pattern di utilizzo efficace per Firestore.

Indici sulle chiavi sequenziali

Una mappa termica con una singola linea diagonale luminosa può indicare un indice su una chiave che aumenta o diminuisce rigorosamente, ad esempio il timestamp. Gli indici sulle chiavi sequenziali non sono consigliati e possono creare hotspot. Quando usi l'hotspot, potresti notare latenze elevate corrispondenti.

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

Hotspotting dovuto all'aumento del timestamp

Mappa termica che mostra l'hotspotting dovuto all'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 strettamente crescenti o decrescenti su un nome di campo timestamp.

Hotspotting dovuto all'aumento dei nomi dei campi

Mappa termica che mostra i punti caldi dovuti all'aumento del campo

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

Per identificare il problema di hotspotting, utilizza lo strumento Key Visualizer e comprendi la struttura della chiave di indice per determinare quale indice causa il problema ed esenta questi indici con le best practice.

Comprendere la struttura della chiave di indice

Prima di comprendere la struttura delle chiavi di indice visualizzate nello strumento Key Visualizer, scopri di più sugli indici in Firestore.

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

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

Dove:

  • COLLECTION: posizione della raccolta nel database. In base all'ambito, può essere il percorso della raccolta per l'ambito della raccolta o il nome della raccolta per l'ambito del gruppo di raccolte.
  • PROPRIETÀ: campi utilizzati per creare l'indice. La proprietà di ordinamento __name__ viene visualizzata solo per le definizioni di indice che modificano l'ordinamento predefinito.
  • VALORI: valore di ogni proprietà.
  • DOCUMENT: ID del documento aggiornato in un'operazione.

Dall'esempio precedente, identifica i campi dal valore PROPERTIES per trovare l'indice interessato.

Per trovare l'indice, completa i seguenti passaggi:

  1. Nella console Google Cloud , vai alla pagina Database.

    Vai a Database

  2. Seleziona il database richiesto dall'elenco.

  3. Nel menu di navigazione, fai clic su Indici.

  4. Vai alla scheda Composto o Campo singolo.

    Puoi identificare il tipo di indice analizzando il campo PROPERTIES. Per ulteriori informazioni, consulta gli esempi di chiavi di indice.

  5. Fai clic su Filtro, seleziona Campi e inserisci il nome del campo.

    Utilizza l'operatore OR per aggiungere altri campi in caso di indici composti.

Una volta identificato l'indice che causa problemi, puoi utilizzare le seguenti soluzioni:

  • Indice composito: modifica l'indice 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.

  • Indice a campo singolo: aggiungi un'esenzione per il campo e l'ordine di ordinamento che vuoi esentare. Per saperne di più, consulta la sezione Aggiungere un'esenzione a campo singolo.

Esempi di voci della chiave di indice sulla mappa termica

Tipo Descrizione Esempio
Indici a campo singolo ASC, DESC con ambito della raccolta Per impostazione predefinita, Firestore crea indici con ambito della raccolta.

Voce di indice per l'indice a campo singolo nel campo Timestamp, in ordine decrescente per il 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
Indici a campo singolo con ambito di raccolta per i campi array Per ogni campo array in un documento, Firestore crea e gestisce un indice array-contains con ambito raccolta.

Voce di indice per gli indici a campo singolo in modalità array-contains che verranno creati quando al documento viene aggiunto un campo Country: [USA, Japan]. Tieni presente che per questo campo verranno creati per impostazione predefinita anche gli indici ASC e DESC. L'esempio mostra l'indice ASC per il 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)
Indici a campo singolo ASC, DESC, ARRAY del gruppo di raccolte Un gruppo di raccolte include tutte le raccolte con lo stesso ID raccolta.
Voce di indice per l'indice a campo singolo del gruppo di raccolte nel campo Timestamp, in ordine decrescente.
COLLECTION GROUP: Users
PROPERTIES: (Timestamp: DESC)
VALUES: (16500000000000001L)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Indici a campo singolo ASC, DESC, ARRAY del gruppo di raccolte Voce di indice per l'indice a campo singolo del gruppo di raccolte sul campo Country in modalità array-contains COLLECTION GROUP: Users PROPERTIES: (Country: ARRAY ASC) VALUES: (USA) DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Voce dell'indice composto della raccolta con proprietà ASC, ASC, ARRAY Le voci di indice composto con elemento principale vengono create quando vengono creati documenti nidificati con definizione di indice con ambito raccolta.

Voce di indice per l'indice composto con i campi Timestamp e Name in ordine crescente e Country in modalità 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)
Voce dell'indice composto dell'ambito del gruppo di raccolte con proprietà ASC, ASC Voce di indice per l'indice composto sul campo Timestamp, in ordine crescente, e sul campo Name, in ordine crescente COLLECTION GROUP: Users
PROPERTIES: (Timestamp: ASC, Name: ASC)
VALUES: (16500000000000001L, 'Alice')
DOCUMENT: (projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
Voce di indice composto dell'ambito della raccolta con proprietà ASC e __name__ Voce di indice per l'indice composto sul campo Timestamp in ordine crescente e con ordinamento __name__ in ordine decrescente per il documento Users/5000000000000001. Puoi utilizzare __name__ come ultimo campo in una definizione di indice per modificare l'ordinamento predefinito dei risultati. COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: ASC, __name__ DESC)
VALUES: (16500000000000001)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001

Passaggi successivi