Simulazione di TTL a livello di cella

In Bigtable, i criteri di garbage collection sono impostati a livello di famiglia di colonne e non è possibile specificare un criterio di garbage collection a livello di cella. Tuttavia, puoi simulare un criterio di durata (TTL) a livello di cella modificando le impostazioni di garbage collection. In questa pagina vengono illustrati alcuni diversi approcci che puoi utilizzare.

Prima di leggere questa pagina, devi leggere la panoramica della garbage collection. Per scoprire come inviare richieste di scrittura, che includono i timestamp, consulta Scritture di Bigtable.

Scadenza di un secondo

In questo approccio, imposta la regola di garbage collection in modo che i dati scadano dopo un secondo. Ogni volta che scrivi dati, imposta il timestamp della cella sull'ora in cui vuoi che il valore scada. Durante la compattazione, Bigtable elimina tutte le celle con un timestamp di almeno un secondo. Ad esempio, se imposti il timestamp di una cella sul 30 aprile alle 09:00, la cella viene eliminata dopo il 30 aprile alle 09:00:01. Questo approccio consente di impostare valori di scadenza diversi per celle diverse nella stessa famiglia di colonne.

Vantaggi della scadenza di un secondo

  • Il timestamp ha un significato reale: la data di scadenza.

Svantaggi della scadenza di un secondo

  • Ogni applicazione che scrive dati in questa famiglia di colonne Bigtable deve essere configurata in modo da seguire questa regola. Se dimentichi e utilizzi un timestamp predefinito del server in una scrittura, i dati scadono subito e vengono eliminati durante la successiva compattazione.

  • Poiché i timestamp non sono "reali ", non puoi utilizzarli per altri casi d'uso, ad esempio per determinare quando è stato scritto un valore. Come soluzione alternativa, puoi scrivere il timestamp reale in una colonna separata, ma in questo modo aumenterà la quantità di dati archiviati.

  • Non puoi implementare questa strategia su una famiglia di colonne che contiene già dati con timestamp reali. Se i dati esistenti hanno timestamp reali o se scrivi accidentalmente nuovi dati con timestamp reali, questi dati vengono eliminati durante la compattazione successiva.

  • Non puoi specificare che più celle per una determinata riga e colonna devono scadere contemporaneamente. I nuovi dati sovrascriveranno quelli vecchi con lo stesso timestamp.

  • Poiché la garbage collection può richiedere fino a una settimana, devi sempre usare i filtri durante la lettura dei dati.

Scadenza predefinita

Supponiamo che tu voglia che la maggior parte dei tuoi dati abbia un TTL predefinito, ma vuoi impostare valori di scadenza per cella diversi per alcuni dei tuoi dati.

Ad esempio, potresti archiviare gli eventi di clic per dieci clienti in un'unica tabella. La maggior parte degli eventi di clic dovrebbe scadere dopo due giorni, ma hai un cliente i cui eventi di clic devono scadere dopo un'ora e un altro cliente i cui eventi di clic devono scadere dopo tre giorni.

Con questo approccio, crea la tua famiglia di colonne con un limite di età per la garbage collection impostato sul TTL predefinito. Se vuoi che i dati scadano prima del valore predefinito, imposta il timestamp in modo che sia antecedente all'ora in cui i dati vengono effettivamente scritti. Per i dati che vuoi che scadano in un secondo momento, imposta il timestamp in modo che sia successivo a quello in cui i dati vengono effettivamente scritti.

Vantaggi della scadenza predefinita

  • Per le scritture che non hanno un TTL personalizzato viene utilizzato un TTL predefinito.

  • Questo approccio può essere applicato senza problemi a una tabella preesistente.

Svantaggi della scadenza predefinita

  • Il timestamp non è semanticamente significativo perché il timestamp di una cella potrebbe essere reale o artificiale. Ciò significa che non puoi utilizzare i timestamp delle celle per altri casi d'uso, ad esempio per determinare quando è stato scritto un valore. Come soluzione alternativa, puoi scrivere il timestamp reale in una colonna separata, ma in questo modo aumenterà la quantità di dati archiviati.

  • Puoi inavvertitamente scrivere un timestamp personalizzato che entra in conflitto con un timestamp reale in una determinata colonna.

  • Poiché la garbage collection è asincrona, devi comunque utilizzare i filtri quando leggi i dati quando utilizzi questa strategia.

Passaggi successivi