Questa sezione descrive l'indicizzazione per Cloud Firestore Enterprise Edition. Cloud Firestore Enterprise Edition non crea indici per impostazione predefinita. Per migliorare le prestazioni del database, crea indici per le query più utilizzate.
Gli indici hanno un impatto significativo sulle prestazioni di un database. Se esiste un indice per una query, il database può restituire in modo efficiente i risultati riducendo la quantità di dati da scansionare e il lavoro necessario per ordinare i risultati. Tuttavia, le voci di indice aumentano i costi di archiviazione e la quantità di lavoro eseguito durante un'operazione di scrittura sui campi indicizzati.
Differenze tra le versioni
La seguente tabella offre una panoramica delle principali differenze di indicizzazione tra Cloud Firestore Standard e Cloud Firestore Enterprise.
| Funzionalità | Cloud Firestore Standard edition | Cloud Firestore Enterprise |
|---|---|---|
| Requisito di indicizzazione | Tutte le query richiedono indici per l'esecuzione. Le query sono generalmente efficienti grazie a questo requisito. | Gli indici non sono obbligatori per le query. Sono possibili letture non indicizzate, il che elimina un ostacolo alla prototipazione. |
| Indicizzazione automatica | Per impostazione predefinita, gli indici a un solo campo vengono creati automaticamente per tutti i campi all'interno dei documenti. | Nessun indice automatico. Devi gestire manualmente tutti gli indici. |
| Densità dell'indice | Sparse per impostazione predefinita. Un documento in un gruppo di raccolte viene indicizzato solo se contiene un valore per ogni campo indicizzato. | Non sparse per impostazione predefinita. Tutti i documenti nel gruppo di raccolte sono indicizzati.
I campi indicizzati senza un valore sono impostati su NULL. Il comportamento
può essere modificato con l'opzione di indice sparso. |
| Opzioni e tipi di indice supportati |
|
|
Definizione e struttura dell'indice
Un indice è costituito da quanto segue:
- un ID raccolta
- un elenco di campi nella raccolta specificata
- un ordine, crescente o decrescente, per ogni campo
Un indice può anche attivare le opzioni sparse o unique.
Ordinamento degli indici
L'ordine e la direzione di ordinamento di ogni campo definiscono in modo univoco l'indice. Ad esempio, i seguenti indici sono due indici distinti e non intercambiabili:
| Raccolta | Campi |
|---|---|
| città | paese (ordine crescente), popolazione (ordine decrescente) |
| città | popolazione (ordine decrescente), paese (ordine crescente) |
Quando crei un indice per supportare una query, includi i campi nello stesso ordine della query.
Densità dell'indice
Per impostazione predefinita, le voci di indice archiviano i dati di tutti i documenti di una raccolta. Questo è noto come indice non sparso. Una voce di indice verrà aggiunta per un documento indipendentemente dal fatto che il documento contenga uno dei campi specificati nell'indice. I campi inesistenti vengono trattati come se avessero un valore NULL durante la generazione delle voci dell'indice. Per modificare questo comportamento, puoi definire l'indice come indice sparso.
Indici sparsi
Un indice sparso indicizza solo i documenti nella raccolta che contengono un valore (incluso null) per almeno uno dei campi indicizzati. Un indice sparso riduce i costi di archiviazione e può migliorare le prestazioni.
Indici unici
Imposta l'opzione di indice unico per applicare valori unici per i campi indicizzati. Per gli indici su più campi, ogni combinazione di valori deve essere univoca nell'indice. Il database rifiuta qualsiasi operazione di aggiornamento e inserimento che tenta di creare voci di indice con valori duplicati. Se i dati dei campi indicizzati contengono valori duplicati e tenti di creare un indice univoco, la creazione dell'indice non va a buon fine e viene visualizzato un messaggio di errore nei dettagli dell'operazione.
Campi assenti in un indice univoco
Se inserisci un documento con campi mancanti per l'indice univoco, l'indice
imposta i valori null per i campi mancanti. La voce di indice risultante deve essere
univoca, altrimenti l'operazione non va a buon fine.
Ad esempio, con questo indice:
| Raccolta | Campi indicizzati | Ambito di query |
|---|---|---|
| città | name (crescente) | Raccolta |
Se aggiungi il documento {"abbreviation": "LA"} alla raccolta, l'indice
univoco crea una voce con name impostato su null. Se poi provi ad aggiungere il
documento {"abbreviation": "NYC"}, l'operazione non va a buon fine perché la voce
risultante per l'indice univoco è la stessa.
Lo stesso comportamento si applica agli indici univoci con più campi.
Quando crei o aggiorni un documento, i campi
indicizzati mancanti vengono impostati su null e la voce di indice risultante deve essere
univoca nell'indice.
Risolvere i problemi relativi agli errori di creazione dell'indice
Potresti riscontrare errori di creazione dell'indice durante la gestione degli indici. Un'operazione di indicizzazione può non riuscire se il database rileva un problema con i dati. Le operazioni di indicizzazione possono non riuscire per i seguenti motivi:
- Hai raggiunto un limite di indice. Ad esempio, l'operazione potrebbe aver raggiunto il numero massimo di voci di indice per documento. Se la creazione dell'indice non riesce, viene visualizzato un messaggio di errore. Se non hai raggiunto un limite di indice, riprova l'operazione di indicizzazione.
- Imposti l'opzione di indice univoco e i dati dei campi indicizzati creano voci di indice duplicate. Per procedere, rimuovi le combinazioni duplicate di valori dai dati.
Passaggi successivi
Scopri come creare e gestire gli indici.