获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

Gestisci gli indici in Cloud Firestore

Cloud Firestore garantisce le prestazioni delle query richiedendo un indice per ogni query. Gli indici richiesti per le query di base vengono creati automaticamente per te. Durante l'utilizzo e il test della tua app, Cloud Firestore genera messaggi di errore che ti aiutano a creare gli indici aggiuntivi richiesti dalla tua app. Questa pagina descrive come gestire i tuoi indici a campo singolo e compositi .

Crea un indice mancante tramite un messaggio di errore

Se tenti di eseguire una query composta con una clausola di intervallo che non esegue il mapping a un indice esistente, ricevi un errore. Il messaggio di errore include un collegamento diretto per creare l'indice mancante nella console Firebase.

Segui il link generato alla console Firebase, esamina le informazioni inserite automaticamente e fai clic su Crea .

Usa la console Firebase

Per creare manualmente un nuovo indice dalla console Firebase:

immagine dell'interfaccia di indicizzazione firestore nella console firebase

  1. Vai alla sezione Cloud Firestore della console Firebase .
  2. Vai alla scheda Indici e fai clic su Aggiungi indice .
  3. Immettere il nome della raccolta e impostare i campi in base ai quali si desidera ordinare l'indice.
  4. Fai clic su Crea .

La creazione degli indici può richiedere alcuni minuti, a seconda delle dimensioni della query. Dopo averli creati, puoi vedere i tuoi indici e il loro stato nella sezione Indici compositi. Se stanno ancora costruendo, la console Firebase include una barra di stato della costruzione.

Rimuovi gli indici

Per eliminare un indice:

  1. Vai alla sezione Cloud Firestore della console Firebase .
  2. Fare clic sulla scheda Indici .
  3. Passa il mouse sopra l'indice che desideri eliminare e seleziona Elimina dal menu contestuale.
  4. Conferma di volerlo eliminare facendo clic su Elimina dall'avviso.

Utilizza l'interfaccia a riga di comando di Firebase

Puoi anche distribuire gli indici con l'interfaccia a riga di comando di Firebase . Per iniziare, esegui firebase init firestore nella directory del tuo progetto. Durante la configurazione, l'interfaccia a riga di comando di Firebase genera un file JSON con gli indici predefiniti nel formato corretto. Modifica il file per aggiungere più indici e distribuiscilo con il comando firebase deploy . Se desideri solo distribuire gli indici, aggiungi il --only firestore:indexes . Se apporti modifiche agli indici utilizzando la console Firebase, assicurati di aggiornare anche il file degli indici locali. Fare riferimento al riferimento alla definizione dell'indice JSON .

Tempo di costruzione dell'indice

Per creare un indice, Cloud Firestore deve configurare l'indice e quindi eseguire il backfill dell'indice con i dati esistenti. Il tempo di creazione dell'indice è la somma del tempo di configurazione e del tempo di riempimento:

  • L'impostazione di un indice richiede alcuni minuti. Il tempo di compilazione minimo per un indice è di pochi minuti, anche per un database vuoto.

  • Il tempo di riempimento dipende dalla quantità di dati esistenti che appartengono al nuovo indice. Maggiore è il numero di valori di campo che corrispondono alla definizione dell'indice, maggiore sarà il tempo necessario per il backfill dell'indice.

Le build dell'indice sono operazioni a esecuzione prolungata .

Dopo aver avviato la creazione di un indice, Cloud Firestore assegna all'operazione un nome univoco. I nomi delle operazioni sono preceduti da projects/[PROJECT_ID]/databases/(default)/operations/ , ad esempio:

projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

Tuttavia, puoi omettere il prefisso quando specifichi un nome di operazione per il comando describe .

Elenca tutte le operazioni di lunga durata

Per elencare le operazioni a esecuzione prolungata, utilizza il comando gcloud firestore operations list . Questo comando elenca le operazioni in corso e quelle completate di recente. Le operazioni sono elencate per alcuni giorni dopo il completamento:

gcloud firestore operations list

Verificare lo stato dell'operazione

Invece di elencare tutte le operazioni di lunga durata, puoi elencare i dettagli di una singola operazione:

gcloud firestore operations describe operation-name

Stima del tempo di completamento

Durante l'esecuzione dell'operazione, vedere il valore del campo state per lo stato generale dell'operazione.

Una richiesta per lo stato di un'operazione a esecuzione prolungata restituisce anche le metriche workEstimated e workCompleted . Queste metriche vengono restituite per il numero di documenti. workEstimated mostra il numero totale stimato di documenti che un'operazione elaborerà. workCompleted mostra il numero di documenti elaborati finora. Al termine dell'operazione, workCompleted riflette il numero totale di documenti che sono stati effettivamente elaborati, che potrebbe essere diverso dal valore di workEstimated .

Dividi workCompleted dal workEstimated per una stima approssimativa dei progressi. La stima potrebbe essere imprecisa perché dipende dalla raccolta ritardata delle statistiche.

Ad esempio, ecco lo stato di avanzamento di una build dell'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 . Vedere il valore del campo state per il risultato dell'operazione. Se il campo done non è impostato nella risposta, il suo valore è false . Non dipendono dall'esistenza del valore done per le operazioni in corso.

Errori di costruzione dell'indice

È possibile che si verifichino errori di creazione dell'indice durante la gestione degli indici compositi e delle esenzioni degli indici a campo singolo. Un'operazione di indicizzazione può non riuscire se Cloud Firestore riscontra un problema con i dati che sta indicizzando. Più comunemente, questo significa che 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 il messaggio di errore nella console. Dopo aver verificato che non stai raggiungendo alcun limite di indice , riprova a eseguire l'operazione sull'indice.