Panoramica della durata (TTL)

La durata (TTL) ti consente di impostare criteri per eliminare periodicamente i dati dalle tabelle di Spanner. Rimozione dei dati non necessari:

  • Riduce i costi di archiviazione e backup.
  • Riduce il numero di righe che il database deve analizzare per alcune query, aumentando potenzialmente le prestazioni delle query.
  • Aiuta a rispettare le normative o le linee guida di settore che limitano il tempo di conservazione di determinati tipi di dati.

Il TTL è ideale per le normali attività di pulizia. Viene eseguita continuamente in background, eliminando periodicamente i dati idonei in batch. I dati vengono in genere eliminati entro 72 ore dalla data di scadenza. Il TTL non invalida immediatamente i dati né li nasconde alle query quando diventano idonei per l'eliminazione. Inoltre, il TTL non controlla i dati mentre vengono inseriti, quindi non ti impedisce di inserire una riga con un timestamp scaduto.

Il TTL è progettato per ridurre al minimo l'impatto su altre attività del database. Esegue in contemporanea il lavoro in modo più efficiente rispetto alle query degli utenti finali e include la logica dei nuovi tentativi per garantire la pulizia end-to-end.

Un altro processo di compattazione in background recupera lo spazio di archiviazione dalle righe eliminate, in genere entro sette giorni.

Come funziona il TTL?

Per impostare il TTL sulle tabelle Spanner, definisci un criterio di eliminazione delle righe nello schema del database, che consente a Spanner di eliminare periodicamente i dati non necessari. Ogni tabella può avere il proprio criterio. È possibile specificare un solo criterio TTL per tabella. Il TTL viene configurato in modo diverso per i database dialetto GoogleSQL e PostgreSQL.

TTL con GoogleSQL

Con GoogleSQL, puoi definire un criterio di eliminazione delle righe specificando un timestamp e un intervallo per determinare quando una riga è idonea per l'eliminazione, ad esempio la data dell'ultimo aggiornamento più 30 giorni.

Un processo in background del sistema verifica ogni giorno le righe idonee. Mette in parallelo le eliminazioni effettive nei batch eseguiti vicino a dove i dati sono archiviati internamente. Ogni batch viene eseguito nella propria transazione a un timestamp coerente. Di conseguenza, viene garantita l'eliminazione atomica delle righe di un determinato batch, insieme a tutti gli indici e gli elementi secondari con interleaving. Tuttavia, le eliminazioni tra batch vengono eseguite in transazioni diverse.

Poiché si tratta di un processo in background asincrono, si verifica un ritardo tra l'idoneità e l'eliminazione. In genere, il ritardo è inferiore a 72 ore. Di conseguenza, le righe potrebbero rimanere nella tabella per un massimo di tre giorni dopo la scadenza del relativo TTL; ad esempio, una tabella con un criterio di eliminazione delle righe che elimina le righe più vecchie di quattro giorni potrebbe includere righe risalenti a massimo sette giorni prima e quelle più vecchie di quattro giorni.

Per istruzioni dettagliate su come creare un criterio di eliminazione delle righe di GoogleSQL, consulta Creare un criterio TTL.

TTL con PostgreSQL

Con PostgreSQL, il proprietario di un database può usare una clausola TTL INTERVAL nell'istruzione CREATE TABLE o ALTER TABLE per definire un criterio di eliminazione delle righe.

Per impostare un criterio di eliminazione delle righe in una tabella PostgreSQL, la tabella deve avere una colonna con il tipo di dati TIMESTAMPTZ. La clausola TTL INTERVAL utilizza questa colonna per impostare una specifica dell'intervallo per il momento in cui una riga è idonea per l'eliminazione.

La clausola deve restituire un valore corrispondente a un numero intero di giorni. Ad esempio, '3 DAYS' è consentito e anche '4 DAYS 2 MINUTES - 2 MINUTES', ma '4 DAYS 3 MINUTES' non è consentito e viene restituito un errore. Non puoi usare numeri negativi.

La garbage collection TTL elimina le righe idonee in modo continuo e in background. Poiché si tratta di un processo in background asincrono, si verifica un ritardo tra l'idoneità e l'eliminazione. La tabella potrebbe contenere righe idonee per l'eliminazione del TTL, ma per le quali il TTL non è ancora stato completato. In genere, il ritardo è inferiore a 72 ore.

Per istruzioni su come creare un criterio di eliminazione delle righe PostgreSQL, consulta Creare un criterio TTL.

Backup e TTL

Ripristino di un backup

Quando ripristini un database da un backup, tutti i criteri di eliminazione delle righe configurati nel database di origine vengono eliminati automaticamente. In questo modo Spanner non può eliminare potenzialmente i dati scaduti non appena il backup viene ripristinato. Pertanto, dovrai riconfigurare il TTL manualmente.

Coerenza dei dati

Un backup è uno snapshot coerente dei dati in un determinato momento (version_time). Il backup può contenere righe che potrebbero essere idonee per l'eliminazione del valore TTL, ma per le quali il valore TTL non è ancora stato completato. Allo stesso modo, i job di esportazione di Dataflow leggono l'intera tabella a un timestamp fisso.

Controllo

TTL supporta il controllo delle eliminazioni tramite stream di modifiche. I record di dati dei flussi di modifiche che monitorano le modifiche del TTL di un database hanno il campo transaction_tag impostato su RowDeletionPolicy e il campo is_system_transaction impostato su true. I lettori di modifiche in tempo reale possono quindi filtrare tutti i record TTL o tutti i record tranne quelli TTL, a seconda del caso d'uso. Guarda un esempio di utilizzo di Beam per filtrare in base ai tag di transazione.