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. È probabile che questa mappa termica rappresenti un pattern di utilizzo efficace per Firestore.

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 crescenti o decrescenti sul nome di un campo timestamp.

Hotspoting dovuto all'aumento dei nomi dei campi

Mappa termica che mostra l'hotspotting a causa dell'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 rigorosamente crescenti o decrescenti su un campo incrementale, ad esempio 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 visualizzate nello strumento Key Visualizer, scopri di più sugli indici in Firestore.

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.

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

Dove:

  • RACCOLTA: posizione della raccolta nel database. In base all'ambito, può essere un percorso 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 mostrata solo per le definizioni di indice che modificano l'ordine predefinito.
  • VALORI: valore di ogni proprietà.
  • DOCUMENT: ID del documento aggiornato in un'operazione.

Nell'esempio precedente, identifica i campi del valore PROPERTIES per trovare l'indice interessato.

Per trovare l'indice, procedi nel seguente modo:

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

    Vai a Database

  2. Seleziona il database richiesto dall'elenco dei database.

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

  4. Vai alla scheda Composito o Campo singolo.

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

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

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

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

  • Indice composto: 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 da escludere. Per ulteriori informazioni, consulta Aggiunta di un'esenzione a campo singolo.

Esempi di voci chiave dell'indice nella mappa termica

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

Voce di indice dell'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 per l'ambito della raccolta per i campi array Per ogni campo array in un documento, Firestore crea e gestisce un ambito di raccolta array-contiene indice.

Voce di indice per gli indici a campo singolo in modalità array-contiene che verrà creata quando verrà aggiunto un campo Country: [USA, Japan] al documento. Tieni presente che per impostazione predefinita verranno creati anche gli indici ASC eDESC per questo campo. 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 del gruppo di raccolte ASC, DESC, ARRAY Un gruppo di raccolte include tutte le collezioni con lo stesso ID raccolta.
Voce di indice dell'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 del gruppo di raccolte ASC, DESC, ARRAY Voce di indice per il gruppo di raccolte Indice a campo singolo nel 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 e ARRAY Le voci di indice composto con l'elemento padre vengono create quando vengono creati documenti nidificati con la definizione dell'indice dell'ambito di 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 e ASC Voce dell'indice composto nel campo Timestamp, in ordine crescente e nel 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 composito dell'ambito della raccolta con proprietà ASC e __name__ Voce di indice dell'indice composto nel campo Timestamp in ordine crescente e con ordinamento __name__ in ordine decrescente per il documento Users/5000000000000001. Puoi utilizzare __name__ come campo finale in una definizione di indice per modificare l'ordine 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