Gestisci indici
Questa pagina descrive come gestire gli indici. Per scoprire di più sugli indici, consulta la panoramica degli indici.
Prima di iniziare
Prima di poter creare un indice in Firestore con compatibilità MongoDB, assicurati di avere uno dei seguenti ruoli:
roles/datastore.owner
roles/datastore.indexAdmin
roles/editor
roles/owner
Per concedere un ruolo, consulta Concedere un singolo ruolo. Per ulteriori informazioni sui ruoli di Firestore e sulle autorizzazioni associate, consulta la sezione Ruoli predefiniti.
Se hai definito ruoli personalizzati, assegna tutte le seguenti autorizzazioni per creare gli indici:
datastore.indexes.create
datastore.indexes.delete
datastore.indexes.get
datastore.indexes.list
datastore.indexes.update
Crea un indice
Per creare un indice:
Google Cloud console
-
Nella Google Cloud console, vai alla pagina Database.
- Seleziona un database dall'elenco dei database.
- Nel menu di navigazione, fai clic su Indici.
- Fai clic su Crea indice.
- Inserisci un ID raccolta.
- Aggiungi uno o più percorsi dei campi e seleziona un'opzione di indice per ciascuno.
- Seleziona un'opzione di presenza del campo, non sparsa o sparsa.
- Se vuoi, imposta l'opzione Indice multichiave.
- Fai clic su Crea.
- Il nuovo indice viene visualizzato nell'elenco degli indici e Firestore con compatibilità MongoDB inizia a crearlo. Quando l'indice viene creato, accanto all'indice viene visualizzato un segno di spunta verde. Se l'indice non viene creato, consulta Errori di creazione dell'indice per conoscere le possibili cause.
Interfaccia a riga di comando gcloud
Per creare un indice, utilizza il comando
gcloud firestore indexes composite create
. Imposta api-scope
su mongodb-compatible-api
.
gcloud firestore indexes composite create \ --database='DATABASE_ID' \ --collection-group=COLLECTION \ --field-config=FIELD_CONFIGURATION \ --query-scope=collection-group \ --density=dense \ --api-scope=mongodb-compatible-api
Sostituisci quanto segue:
- DATABASE_ID: un ID database.
- COLLECTION: un nome di raccolta.
- FIELD_CONFIGURATION: una configurazione di campo. Per ogni campo,
aggiungi
--field-config=field-path=
. Ad esempio:--field-config=field-path=user-id,order=descending \ --field-config=field-path=score,order=descending
Per ulteriori informazioni sulla configurazione di questi campi, consulta
--field-config
.
Per creare un indice sparso, imposta --density=sparse-any
.
Per creare un indice multichiave, aggiungi il flag --multikey
.
Terraform
Utilizza la risorsa
google_firestore_index
e imposta api_scope
su MONGODB_COMPATIBLE_API
e query_scope
su COLLECTION_GROUP
.
resource "google_firestore_index" "index" { database = "DATABASE_ID" collection = "COLLECTION" api_scope = "MONGODB_COMPATIBLE_API" query_scope = "COLLECTION_GROUP" // You can include multiple field blocks fields { field_path = "FIELD_PATH" order = "ORDER" } // Optional multikey = true density = "DENSITY" }
Sostituisci quanto segue:
- DATABASE_ID: l'ID del database scelto
- COLLECTION: il nome della raccolta da indicizzare
- FIELD_PATH: il nome del campo da indicizzare
- ORDER: uno di
ASCENDING
oDESCENDING
- DENSITY: uno di
SPARSE_ALL
odense
Eliminare un indice
Per eliminare un indice:
Google Cloud console
-
Nella Google Cloud console, vai alla pagina Database.
- Seleziona un database dall'elenco dei database.
- Nel menu di navigazione, fai clic su Indici.
- Nell'elenco degli indici, scegli Elimina dal pulsante Altro per l'indice da eliminare.
- Fai clic su Elimina indice.
Interfaccia a riga di comando gcloud
Per trovare il nome dell'indice, utilizza il comando
gcloud firestore indexes composite list
.gcloud firestore indexes composite list \ --database='DATABASE_ID'
Sostituisci DATABASE_ID con l'ID del database.
-
Per eliminare l'indice, utilizza il comando
gcloud firestore indexes composite delete
.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
Sostituisci quanto segue:
- INDEX_NAME: il nome di un indice
- DATABASE_ID: un ID database
Tempo di compilazione dell'indice
Per creare un indice, Firestore con compatibilità MongoDB deve creare l'indice e poi eseguire il backfill delle voci dell'indice con i dati esistenti. Il tempo necessario per creare un indice è determinato da quanto segue:
Il tempo di compilazione minimo per un indice è di pochi minuti, anche per un database vuoto.
Il tempo necessario per eseguire il backfill delle voci dell'indice dipende dalla quantità di dati esistenti che appartengono al nuovo indice. Più sono i valori di campo che corrispondono alla definizione dell'indice, più tempo occorre per eseguire il backfill delle voci dell'indice.
Gestione delle operazioni a lunga esecuzione
Le build degli indici sono operazioni a lunga esecuzione. Le sezioni seguenti descrivono come gestire le operazioni di lunga durata per gli indici.
Dopo aver iniziato a creare un indice, Firestore con compatibilità MongoDB assegna all'operazione un nome univoco. I nomi delle operazioni sono preceduti da projects/PROJECT_ID/databases/DATABASE_ID/operations/
,
ad esempio:
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Puoi omettere il prefisso quando specifichi un nome dell'operazione per il comando describe
.
Elenca tutte le operazioni a lunga esecuzione
Per elencare le operazioni a lunga esecuzione, utilizza il comando
gcloud firestore operations list
. Questo comando elenca le operazioni in corso e completate di recente.
Le operazioni vengono elencate per alcuni giorni dopo il completamento:
gcloud firestore operations list
Controllare lo stato dell'operazione
Anziché elencare tutte le operazioni a lunga esecuzione, puoi elencare i dettagli di una singola operazione:
gcloud firestore operations describe operation-name
Stima del tempo di completamento
Durante l'esecuzione dell'operazione, controlla il valore del campo state
per lo stato complessivo dell'operazione.
Una richiesta relativa allo stato di un'operazione a lunga esecuzione restituisce anche le metriche workEstimated
e workCompleted
. workEstimated
mostra il numero totale stimato di documenti che verrà elaborato da un'operazione. workCompleted
mostra il numero di documenti elaborati finora. Al termine dell'operazione,
workCompleted
riflette il numero totale di documenti effettivamente elaborati, che potrebbe essere diverso dal valore di workEstimated
.
Per stimare l'avanzamento di un'operazione, dividi workCompleted
per workEstimated
.
Di seguito è riportato un esempio dell'avanzamento della creazione di un indice:
{ "operations": [ { "name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI", "metadata": { "@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata", "common": { "operationType": "CREATE_INDEX", "startTime": "2020-06-23T16:52:25.697539Z", "state": "PROCESSING" }, "progressDocuments": { "workCompleted": "219327", "workEstimated": "2198182" } }, }, ...
Al termine di un'operazione, la descrizione dell'operazione conterrà
"done": true
. Controlla il valore del campo state
per il risultato dell'operazione. Se il campo done
non è impostato nella risposta,
l'operazione non è stata completata.