Gestire la conservazione dei dati con le policy TTL

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

Panoramica della durata (TTL)

Utilizza le policy TTL per rimuovere automaticamente i dati inattivi dai tuoi database. Una policy TTL designa un determinato campo come data e ora di scadenza dei documenti in un determinato gruppo di raccolte. Con 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 i prezzi di Cloud Firestore.

Limiti e vincoli

  • Puoi contrassegnare un solo campo per gruppo di raccolte come campo TTL.
  • Puoi avere un massimo di 1000 configurazioni a livello di campo. Una configurazione di campo 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 contemporaneità Ottimistica con gruppi di entità. Valuta la possibilità di passare alla modalità di contemporaneità ottimistica.

Eliminazione TTL

Tieni presente i seguenti comportamenti chiave dell'eliminazione basata su 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. Il 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 di quel documento.

  • L'applicazione di una policy TTL a un gruppo di raccolte esistente comporta l'eliminazione collettiva 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 quel gruppo di raccolte.

  • Se un documento ha una data di scadenza nel passato e aggiungi una nuova policy TTL alla raccolta, il documento verrà eliminato entro 24 ore dal momento in cui la policy TTL completa la configurazione e diventa attiva.

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

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

  • Cloud Firestore rispetterà sempre l'ultimo campo TTL 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.

  • Cloud Firestore fa scadere un documento solo quando il campo TTL è impostato su tipi di valori specifici. Per i database Standard Edition, il campo deve essere impostato su un valore Date and time. Per i database della versione Enterprise, il campo deve essere impostato su un valore Date and time o su un valore Array contenente un valore 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 su altre attività del database. Le eliminazioni basate su TTL vengono trattate con una priorità inferiore. Sono in atto anche altre strategie per attenuare i picchi di traffico dovuti alle eliminazioni basate su TTL.

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

Campi e indici TTL

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

Per impostazione predefinita, Cloud Firestore Standard Edition crea un indice a campo singolo per tutti i campi. Puoi creare un'esenzione dell'indice a campo singolo per disabilitare gli indici su un campo TTL.

Autorizzazioni

L'entità che configura una policy TTL deve disporre della seguente autorizzazione nel progetto:

  • Per visualizzare le policy TTL, sono necessarie le autorizzazioni datastore.indexes.list e datastore.indexes.get.
  • Per modificare le policy TTL è necessaria l'autorizzazione datastore.indexes.update.
  • Per controllare lo stato delle operazioni TTL sono necessarie le autorizzazioni datastore.operations.list e datastore.operations.get.

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

Crea una policy TTL

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

Il TTL utilizza un campo specificato per identificare i documenti idonei per l'eliminazione. Per i database Standard Edition, il campo TTL deve essere impostato su un valore Date and time. Per i database Enterprise Edition, deve essere impostato su un valore Date and time o un valore Array contenente un valore Date and time. Puoi selezionare un campo già esistente o designare un campo che prevedi di aggiungere in un secondo momento.

Prima di impostare il valore del campo TTL, tieni presente quanto segue:

  • Il valore del campo TTL può essere un'ora futura, attuale o passata. Se il valore è un'ora nel passato, il documento è immediatamente idoneo per l'eliminazione. Ad esempio, puoi creare una policy TTL con il campo expireAt, che poi aggiungi ai documenti esistenti.

  • Se utilizzi un altro tipo di dati o non imposti il valore del campo TTL, il TTL verrà disattivato per il singolo documento.

Per creare una policy TTL, segui questi passaggi:

Google Cloud Console

  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 Durata (TTL).

  4. Fai clic su Crea criterio.

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

  6. (Facoltativo) Configura un offset di scadenza. Inserisci un valore e seleziona un'unità (giorni, ore, minuti o secondi). Per impostazione predefinita, l'offset è 0.

  7. 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 policy TTL. In caso di errore, la pagina visualizza un messaggio di errore.

gcloud

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

Per attivare il TTL con un offset di scadenza, aggiungi il flag --expiration-offset:

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

Sostituisci expiration_offset con una durata, ad esempio 7d per 7 giorni o 24h per 24 ore. Se ometti questo flag, l'offset di scadenza viene impostato su 0 per impostazione predefinita.

Durata dell'attivazione della policy TTL

L'abilitazione di una policy TTL può richiedere almeno dieci minuti o più. Una volta avviata un'operazione, la chiusura del terminale non la annulla.

Visualizza le policy TTL

Per visualizzare le policy TTL e i relativi stati, segui questi passaggi:

Google Cloud Console

  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 Durata (TTL).

La console elenca le policy TTL per il tuo database e include lo stato di ogni policy.

gcloud

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

   gcloud firestore fields ttls list
   

Per elencare le policy TTL in un gruppo di raccolte specifico, utilizza quanto segue:

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

Visualizza dettagli operazione

Puoi utilizzare gcloud CLI per visualizzare ulteriori dettagli su una policy TTL nello stato CREATING.

Utilizza il comando operations list per visualizzare tutte le operazioni in esecuzione e quelle completate di recente:

gcloud firestore operations list

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

Disattiva una policy TTL

Per disattivare una policy TTL, segui questi passaggi:

Google Cloud Console

  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 Durata (TTL).

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

  5. Conferma facendo clic su Elimina.

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

gcloud

1. 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 su TTL. Cloud Firestore fornisce le seguenti metriche per il TTL:

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

Numero totale di documenti eliminati dalle policy TTL.

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays Ritardi tra la scadenza e l'eliminazione della durata (TTL)

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

Per configurare una dashboard con le metriche Cloud Firestore, consulta Gestisci la dashboard personalizzata e Aggiungi widget della dashboard.