Gestire la conservazione dei dati con le policy TTL

Questa pagina descrive come utilizzare la console Google Cloud e la Google Cloud CLI per configurare le norme durata (TTL). Prima di leggere questa pagina, devi comprendere il modello di dati Firestore.

Panoramica della durata

Utilizza le policy TTL per rimuovere automaticamente i dati inattivi dai tuoi database. Una policy TTL designa un determinato campo come l'ora di scadenza dei documenti in un determinato gruppo di raccolte. Con il TTL, puoi ridurre i costi di archiviazione eliminando i dati obsoleti. In genere i dati vengono eliminati entro 24 ore dalla data di scadenza.

Prezzi

Le operazioni di eliminazione TTL vengono conteggiate ai fini dei costi di eliminazione dei documenti. Per i prezzi delle operazioni di eliminazione, consulta Prezzi di Firestore.

Limiti e vincoli

  • Puoi contrassegnare un solo campo per gruppo di raccolte come campo TTL.
  • Sono consentite un massimo di 500 configurazioni a livello di campo. Una configurazione dei campi può contenere più configurazioni per lo stesso campo. Ad esempio, un'esenzione dell'indicizzazione a campo singolo e una policy TTL sullo stesso campo vengono conteggiate come una configurazione di campo ai fini del limite.
  • Per i clienti di Firestore in modalità Datastore, TTL non può essere utilizzato con una modalità di concorrenza di Ottimistica con gruppi di entità. Valuta la possibilità di modificare la modalità di concorrenza in Modalità di concorrenza ottimistica.

Eliminazione TTL

Tieni presente i seguenti comportamenti chiave dell'eliminazione basata sul TTL:

  • L'eliminazione tramite TTL non è un processo istantaneo. I documenti scaduti continuano a essere visualizzati nelle query e nelle richieste di ricerca finché il processo TTL non li elimina effettivamente. TTL scambia la tempestività dell'eliminazione con il vantaggio di un costo totale di proprietà ridotto per le eliminazioni. In genere i dati vengono eliminati entro 24 ore dalla data di scadenza.

  • L'eliminazione di un documento tramite TTL non comporta l'eliminazione delle sottoraccolte del documento.

  • L'applicazione di una policy TTL a un gruppo di raccolte esistente comporta l'eliminazione in blocco di tutti i dati scaduti in base alla nuova policy TTL. Tieni presente che anche questa eliminazione collettiva non è istantanea e dipende dalla quantità di dati esistenti per quegruppo di raccolteta.

  • Se un documento ha un tempo di scadenza nel passato e aggiungi un nuovo criterio TTL alla raccolta, il documento verrà eliminato entro 24 ore dal completamento della configurazione e dall'attivazione del criterio TTL.

  • Il TTL non elimina necessariamente i documenti nello stesso ordine dei timestamp di scadenza.

  • Le eliminazioni non vengono eseguite in modo transazionale. I documenti con la stessa ora di scadenza non vengono necessariamente eliminati contemporaneamente. Se hai bisogno di questo comportamento, esegui le eliminazioni utilizzando una libreria client.

  • Firestore rispetterà sempre il campo TTL più recente per determinare la scadenza. Ad esempio, se un documento scaduto ma non ancora eliminato ha il campo TTL aggiornato a una data successiva, il documento non scadrà e verrà utilizzata la nuova data.

  • Firestore fa scadere un documento solo quando il campo TTL è impostato su un tipo Date and time. Se il campo non è presente o è impostato su un valore come null, le scadenze possono essere disattivate per ogni documento.

  • Il TTL è progettato per ridurre al minimo l'impatto sulle altre attività del database. Le eliminazioni basate sul TTL vengono trattate con una priorità inferiore. Sono in atto anche altre strategie per attenuare i picchi di traffico dovuti alle eliminazioni basate sul TTL.

  • L'eliminazione tramite TTL chiama tutti i listener snapshot attivi e attiva le funzioni Cloud Run e i trigger Firestore.

Campi e indici TTL

Un campo TTL può essere indicizzato o non indicizzato. Tuttavia, poiché un campo TTL è un timestamp, l'indicizzazione del campo può influire sulle prestazioni a tassi di traffico più elevati. L'indicizzazione di un campo timestamp può creare hotspot, il che non è in linea con le best practice. Gli hotspot sono tassi elevati di lettura, scrittura ed eliminazione in un intervallo di documenti ristretto.

Per impostazione predefinita, Firestore crea un indice a campo singolo per tutti i campi. Puoi creare un'esenzione dell'indice a campo singolo per disattivare gli indici in un campo TTL.

Autorizzazioni

Il principal che configura una policy TTL richiede la seguente autorizzazione nel progetto:

  • Per visualizzare le policy TTL sono necessarie le autorizzazioni datastore.indexes.list e datastore.indexes.get.
  • Per modificare i criteri TTL è necessaria l'autorizzazione datastore.indexes.update.
  • Il controllo dello stato delle operazioni TTL richiede datastore.operations.list e datastore.operations.get.

Per i ruoli che assegnano queste autorizzazioni, vedi Ruoli Identity and Access Management di Firestore.

Prima di iniziare

Prima di utilizzare gcloud CLI per gestire i criteri TTL, utilizza il comando gcloud components update per aggiornare i componenti all'ultima versione disponibile:

gcloud components update

Crea una policy TTL

Quando crei una policy TTL, designi un campo del documento come ora di scadenza per i documenti in un gruppo di raccolte.

TTL utilizza un campo specificato per identificare i documenti idonei all'eliminazione. Questo campo TTL deve essere di tipo Date and time. Puoi selezionare un campo già esistente o designare un campo che prevedi di aggiungere in un secondo momento.

Considera quanto segue prima di impostare il valore del campo TTL:

  • Il valore del campo TTL può essere un orario nel futuro, attuale o nel passato. Se il valore è un orario nel passato, il documento è immediatamente idoneo all'eliminazione. Ad esempio, puoi creare un criterio TTL con il campo expireAt, che poi aggiungi ai documenti esistenti.

  • L'utilizzo di qualsiasi altro tipo di dati o la mancata impostazione del valore del campo TTL disattiverà il TTL per il singolo documento.

Per creare una policy TTL:

Google Cloud Console

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

    Vai a Database

  2. Seleziona il database richiesto dall'elenco.

  3. Nel menu di navigazione, fai clic su Time to live.

  4. Fai clic su Crea criterio.

  5. Inserisci un nome per gruppo di raccolte e un nome per il campo timestamp.

  6. Fai clic su Crea.

La console torna alla pagina Time to live. Se l'operazione viene avviata correttamente, la pagina aggiunge una voce alla tabella delle norme TTL. In caso di errore, la pagina mostra un messaggio di errore.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Utilizza il comando firestore fields ttls update per configurare una policy TTL. Aggiungi il flag --async per impedire a gcloud CLI di attendere il completamento dell'operazione.

     gcloud firestore fields ttls update
    ttl_field --collection-group=collection_group_name
    --enable-ttl 

Durata dell'attivazione della policy TTL

Anche su un database vuoto, l'attivazione di una norma TTL può richiedere dieci minuti o più. Una volta avviata un'operazione, la chiusura del terminale non la annulla.

Visualizzare le policy TTL

Per visualizzare le norme TTL e i relativi stati:

Google Cloud Console

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

    Vai a Database

  2. Seleziona il database richiesto dall'elenco.

  3. Nel menu di navigazione, fai clic su Time to live.

La console elenca le norme TTL per il tuo database e include lo stato di ciascuna norma.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Utilizza il comando firestore fields ttls list per configurare una policy TTL. Il comando seguente elenca tutte le norme TTL.

    gcloud firestore fields ttls list
    

    Per elencare le policy TTL in un gruppo di raccolte specifico, utilizza il seguente comando:

    gcloud firestore fields ttls list  --collection-group=collection_group_name
    

View operation details

You can use the gcloud CLI to view more details about a TTL policy that is in the CREATING state.

Use the operations list command to see all running and recently completed operations:

gcloud firestore operations list

La risposta include una stima dell'avanzamento dell'operazione.

Disattivare una policy TTL

Per disattivare una norma TTL:

Google Cloud Console

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

    Vai a Database

  2. Seleziona il database richiesto dall'elenco.

  3. Nel menu di navigazione, fai clic su Time to live.

  4. Nella tabella delle policy TTL, individua la riga relativa alla policy TTL. In questa riga della tabella, fai clic sul pulsante Elimina (cestino).

  5. Conferma l'operazione facendo clic su Elimina.

La console torna alla pagina Time to live. In caso di esito positivo, Firestore rimuove la norma TTL dalla tabella.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Utilizza il comando firestore fields ttls update per configurare una policy TTL. Aggiungi il flag --async per impedire a gcloud CLI di attendere il completamento dell'operazione.

    gcloud firestore fields ttls update ttl_field --collection-group=collection_group_name --disable-ttl
    

Monitora le eliminazioni TTL

Puoi utilizzare Cloud Monitoring per visualizzare le metriche relative alle eliminazioni basate sul TTL. Firestore fornisce le seguenti metriche per TTL:

Tipo di metrica Nome metrica Descrizione metrica
firestore.googleapis.com/document/ttl_deletion_count Conteggio eliminazioni Durata (TTL)

Il conteggio totale dei documenti eliminati dai criteri TTL.

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays Scadenza del Time to Live per i ritardi di eliminazione

Tempo trascorso tra la scadenza di un documento in base a un criterio TTL e la sua effettiva eliminazione.

Per configurare una dashboard con le metriche di Firestore, consulta Gestisci dashboard personalizzate e Aggiungi widget alla dashboard.