Pattern di mappa termica per le chiavi dell'indice

Questa pagina mostra esempi di pattern che potresti visualizzare nella mappa di calore di Visualizzatore di elementi chiave. Questi pattern possono aiutarti a risolvere problemi di prestazioni specifici.

Utilizzo distribuito in modo uniforme

Mappa termica che mostra letture e scritture distribuite in modo uniforme

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

Indici su chiavi sequenziali

Una mappa termica con una singola linea diagonale brillante può indicare un indice su una chiave in aumento o in diminuzione, ad esempio il timestamp. Gli indici su chiavi sequenziali non sono consigliati e possono creare hotspot. Quando attivi l'hotspot, potresti notare latenze elevate corrispondenti.

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

Hotspot a causa dell'aumento del timestamp

Mappa termica che mostra un hotspot a causa dell'aumento del timestamp

In questo esempio, una mappa termica con una singola linea diagonale brillante può indicare un database che utilizza operazioni di scrittura/eliminazione dell'indice in aumento o in diminuzione su un nome di campo timestamp.

Hotspot dovuti all'aumento dei nomi dei campi

Mappa termica che mostra un hotspot a causa dell'aumento del campo

In questo esempio, una mappa termica con una singola linea diagonale brillante può indicare un database che utilizza operazioni di scrittura/eliminazione dell'indice strettamente in aumento o in diminuzione in 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 della chiave dell'indice per determinare quale indice causa il problema ed esentare questi indici con le best practice.

Informazioni sulla struttura della chiave dell'indice

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

Il codice seguente mostra un esempio di formato della chiave dell'indice visualizzato quando passi il mouse sopra l'intervallo di chiavi interessato sulla 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À: i campi utilizzati per creare l'indice. La proprietà di ordinamento __name__ viene mostrata solo per le definizioni di indici che modificano l'ordinamento predefinito.
  • VALUES: il valore di ogni proprietà.
  • DOCUMENT: l'ID del documento aggiornato in un'operazione.

Nell'esempio precedente, identifica i campi dal valore PROPRIETÀ per trovare l'indice interessato.

Per trovare l'indice:

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

Dopo aver 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 di chiavi di indice nella mappa termica

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

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

Voce dell'indice per gli indici a campo singolo in modalità contiene array che verranno creati quando un campo Country: [USA, Japan] viene aggiunto al documento. Tieni presente che per impostazione predefinita verranno creati anche gli indici ASC,DESC 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 raccolte con lo stesso ID raccolta.
Voce dell'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 del gruppo di raccolte ASC, DESC, ARRAY Voce dell'indice per l'indice a campo singolo del gruppo di raccolte 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, ARRAY Le voci dell'indice composto con elemento principale vengono create quando vengono creati documenti nidificati con la definizione dell'indice a livello di raccolta.

Voce dell'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 a livello di gruppo di raccolte con proprietà ASC, ASC Voce dell'indice per l'indice composto sul campo Timestamp, in ordine crescente e 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 dell'indice composto a livello di raccolta con proprietà ASC e __name__ Voce dell'indice per l'indice composto sul campo Timestamp in ordine crescente e con __name__ ordinato in ordine decrescente per il documento Users/5000000000000001. Puoi utilizzare __name__ come campo finale 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