Simulazione di TTL a livello di cella
In Bigtable, i criteri di garbage collection vengono impostati a livello di famiglia di colonne e non puoi specificare un criterio di garbage collection a livello di cella. Tuttavia, puoi simulare un criterio durata (TTL) a livello di cella modificando le impostazioni di garbage collection. Questa pagina illustra alcuni approcci diversi che puoi utilizzare.
Prima di leggere questa pagina, ti consigliamo di leggere la panoramica della raccolta dei rifiuti. Per scoprire come inviare richieste di scrittura, che includono i timestamp, consulta Scritture 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 che risale a almeno un secondo prima. Ad esempio, se impostate il timestamp di una cella su 30 aprile alle 09:00:00, la cella viene eliminata qualche volta dopo le 09:00:01 del 30 aprile. 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: l'ora di scadenza.
Svantaggi della scadenza di un secondo
Ogni applicazione che scrive dati in questa famiglia di colonne Bigtable deve essere configurata per seguire questa regola. Se dimentichi e utilizzi un timestamp del server predefinito durante una scrittura, i dati scadono immediatamente e vengono eliminati durante la successiva compattazione.
Poiché i timestamp non sono "reali", non puoi utilizzarli per altri scenari di utilizzo, ad esempio per determinare quando è stato scritto un valore. Come soluzione alternativa, puoi scrivere il timestamp reale in una colonna separata, ma questo aumenterà la quantità di dati archiviati.
Non puoi implementare questa strategia in 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 successiva compattazione.
Non puoi specificare che più celle per una determinata riga e colonna debbano scadere contemporaneamente. I nuovi dati sovrascriveranno i dati precedenti con lo stesso timestamp.
Poiché garbage collection può richiedere fino a una settimana, devi sempre utilizzare i filtri quando leggi i dati.
Scadenza predefinita
Supponiamo che tu voglia che la maggior parte dei dati abbia un TTL predefinito, ma che tu voglia impostare valori di scadenza diversi per cella per alcuni dati.
Ad esempio, potresti memorizzare gli eventi di clic per dieci clienti in una tabella. La maggior parte degli eventi di clic dovrebbe scadere dopo 2 giorni, ma un cliente ha eventi di clic che dovrebbero scadere dopo un'ora e un altro cliente ha eventi di clic che dovrebbero scadere dopo 3 giorni.
In questo approccio, crea la famiglia di colonne con un limite di età per la raccolta del garbage impostato sul TTL predefinito. Per i dati che vuoi che scadano prima del valore predefinito, imposta il timestamp su un valore precedente all'ora in cui i dati vengono effettivamente scritti. Per i dati di cui vuoi che la scadenza sia successiva, imposta il timestamp in modo che sia successivo all'ora in cui i dati vengono effettivamente scritti.
Vantaggi della scadenza predefinita
Per le scritture che non hanno un TTL personalizzato è impostato un TTL predefinito.
Questo approccio può essere applicato in sicurezza 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 questo aumenterà la quantità di dati archiviati.
Puoi scrivere inavvertitamente un timestamp personalizzato in conflitto con un timestamp reale in una determinata colonna.
Poiché garbage collection è asincrona, devi comunque utilizzare sempre i filtri quando leggi i dati quando utilizzi questa strategia.
Passaggi successivi
- Scopri di più sulla garbage collection con timestamp che sono numeri sequenziali.
- Scopri una strategia per leggere sempre il valore più recente di una colonna.
- Esamina gli esempi di codice che mostrano come configurare la raccolta dei rifiuti.
- Scopri di più sui prezzi dello spazio di archiviazione.