Panoramica della durata (TTL)

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

  • Riduci i costi di archiviazione e di backup.
  • Riduce il numero di righe che il database deve scansionare per alcune query, potenzalmente aumentandone le prestazioni.
  • Aiuta a rispettare le normative o le linee guida del settore che limitano il tempo di conservazione di determinati tipi di dati.

Il TTL è ideale per le attività di pulizia regolari. Viene eseguito continuamente in background, eliminando periodicamente i dati idonei in batch. In genere i dati vengono eliminati entro 72 ore dalla data di scadenza. Ogni eliminazione richiede una replica della chiave primaria nelle repliche del database, il che comporta costi di replica. Per ulteriori informazioni, consulta Prezzi della replica dei dati. Il TTL non invalida immediatamente i dati né li nasconde alle query quando diventano idonei per l'eliminazione. Inoltre, TTL non controlla i dati durante l'inserimento, quindi non impedisce di inserire una riga con un timestamp scaduto.

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

Un'altra procedura di compattazione in background recupera lo spazio di archiviazione dalle righe eliminate, solitamente entro sette giorni.

Come funziona il TTL?

Puoi impostare il TTL nelle tabelle Spanner definendo 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. Imposti il TTL in modo diverso per i database in dialetto Google SQL e per i database in dialetto 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 di sistema in background controlla quotidianamente la presenza di righe idonee. Esegue in parallelo le eliminate effettive in batch che vengono eseguite vicino alla posizione in cui i dati vengono archiviati internamente. Ogni batch viene eseguito nella propria transazione con un timestamp coerente. Pertanto, è garantito che le righe di un determinato batch, insieme a eventuali indici ed elementi secondari con interfoliazione, verranno eliminate in modo atomico. Tuttavia, le eliminazioni tra batch vengono eseguite in transazioni diverse.

Poiché si tratta di un processo in background asincrono, esiste un ritardo tra la verifica dell'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 TTL. Ad esempio, una tabella con un criterio di eliminazione delle righe che elimina le righe più vecchie di quattro giorni potrebbe includere righe fino a sette giorni fa, nonché righe più vecchie e non eliminabili.

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

TTL con PostgreSQL

Con PostgreSQL, il proprietario di un database può utilizzare 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 stabilire quando una riga è idonea all'eliminazione.

La clausola deve restituire un numero intero di giorni. Ad esempio, '3 DAYS' è consentito, così come '4 DAYS 2 MINUTES - 2 MINUTES', ma '4 DAYS 3 MINUTES' non è consentito e viene restituito un errore. Non puoi utilizzare numeri negativi.

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

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

Backup e TTL

Ripristina un backup

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

Coerenza dei dati

Un backup è un'istantanea coerente dei dati in un determinato momento (version_time). Il backup può contenere righe che potrebbero essere idonee per l'eliminazione TTL, ma per le quali il TTL non è ancora stato completato. Analogamente, i job di esportazione di Dataflow leggono l'intera tabella in un momento specifico.

Controllo

TTL supporta il controllo delle eliminazioni tramite i flussi di modifiche. I record dei dati dei flussi di variazioni che monitorano le modifiche TTL a un database hanno il transaction_tag campo impostato su RowDeletionPolicy e il is_system_transaction campo impostato su true. I lettori degli stream di variazioni possono quindi eliminare 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 transazioni.

Passaggi successivi