Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Informazioni su garbage collection

Questa pagina descrive il funzionamento della garbage collection in Cloud Bigtable e tratta i seguenti argomenti:

  • Tipi di raccolta dei rifiuti
  • Impostazioni predefinite per la garbage collection
  • Quando vengono eliminati i dati
  • Modifiche ai criteri di garbage collection per le tabelle replicate

Panoramica della garbage collection

La raccolta dei dati strutturati è il processo continuo e automatico di rimozione dei dati scaduti e obsoleti dalle tabelle Bigtable. Un criterio di garbage collection è un insieme di regole che viene creato quando i dati in una specifica famiglia di colonne non sono più necessari.

La garbage collection è un processo in background asincrono integrato. Può essere necessaria fino a una settimana prima che i dati idonei per la garbage collection vengano effettivamente eliminati. La garbage collection si svolge secondo una pianificazione fissa che non varia in base alla quantità di dati da eliminare. Finché i dati non vengono eliminati, rimangono visibili nei risultati di lettura. Puoi filtrare le letture per escludere questi dati.

I vantaggi delle norme sulla garbage collection includono quanto segue:

  • Riduci al minimo le dimensioni delle righe: vuoi sempre impedire la crescita permanente delle righe. Le righe di grandi dimensioni influiscono negativamente sul rendimento. Idealmente, non devi mai lasciare una riga di dimensioni superiori a 100 MB e il limite è di 256 MB. Se non hai necessità di conservare i dati precedenti o le versioni precedenti dei tuoi dati attuali, puoi utilizzare la garbage collection per ridurre al minimo le dimensioni di ogni riga.
  • Costi ridotti: la garbage collection garantisce di non pagare per archiviare dati che non sono più obbligatori o utilizzati. Ti viene addebitato lo spazio di archiviazione dei dati scaduti o obsoleti fino a quando viene eseguito il confronto e l'eliminazione dei dati idonei per la garbage collection. In genere questa procedura richiede qualche giorno, ma potrebbe impiegare anche una settimana.

Puoi impostare i criteri di garbage collection in modo programmatico o con lo strumento cbt. I criteri di garbage collection sono impostati a livello di famiglia di colonne.

Ogni famiglia di colonne in una tabella ha i propri criteri di garbage collection. Il processo di garbage collection cerca i criteri correnti della garbage collection per ogni famiglia di colonne, quindi elimina i dati in base alle regole del criterio.

Timestamp

In Bigtable, l'intersezione di una riga e di una colonna può avere più celle, che contengono versioni con timestamp del valore di quell'intersezione. Ogni cella ha un timestamp. Il timestamp è il numero di microsecondi dall'epoca Unix, 1970-01-01 00:00:00 UTC. Puoi utilizzare i timestamp predefiniti o impostarli quando invii richieste di scrittura.

La proprietà timestamp di una cella può essere un timestamp "reale", che riflette l'ora effettiva in cui è stato scritto il valore della cella, oppure può essere un timestamp "artificiale". I timestamp artificiali includono numeri sequenziali, zeri o valori con formattazione timestamp che non corrispondono all'ora effettiva in cui la cella è stata scritta. Prima di utilizzare timestamp artificiali, esamina i casi d'uso per i timestamp artificiali, compresi i rischi del loro utilizzo:

Tipi di raccolta dei rifiuti

Questa sezione descrive i tipi di garbage collection disponibili in Bigtable. Gli esempi di codice per ogni tipo di garbage collection sono disponibili in Configurazione dei garbage collection.

Valori in scadenza (in base all'età)

Puoi impostare una regola di garbage collection basata sul timestamp di ogni cella. Ad esempio, potresti non voler conservare celle con timestamp più di 30 giorni prima della data e dell'ora correnti. Con questo tipo di regola di garbage collection, imposti la durata (TTL) dei dati. Bigtable esamina ogni famiglia di colonne durante la garbage collection ed elimina le eventuali celle scadute.

Numero di versioni

Puoi impostare una regola di garbage collection che indichi esplicitamente il numero massimo di celle da conservare per tutte le colonne di una famiglia di colonne.

Ad esempio, se vuoi conservare solo l'ultimo nome utente e l'indirizzo email di un cliente, puoi creare una famiglia di colonne contenente queste due colonne e impostare il numero massimo di valori su 1 per tale famiglia.

In un altro caso, potresti voler conservare le ultime cinque versioni dell'hash della password di un utente per assicurarti che non la riutilizzano, quindi imposta il numero massimo di versioni per la famiglia di colonne contenenti la colonna della password su 5. Quando Bigtable osserva la famiglia di colonne durante la garbage collection, se nella sessantina è stata scritta una sesta cella, quella meno recente viene eliminata per mantenere il numero di celle a cinque.

Combinazioni di regole relative alla scadenza e al numero di versione

Puoi utilizzare una combinazione di regole di scadenza e numero di versione per la garbage collection. I tipi di combinazioni sono intersezione, unione e nidificato. Per esempi di configurazione, consulta la sezione Raccolta dei rifiuti in base a più criteri.

Intersezione

Un criterio di garbage collection intersezione contrassegna i dati per l'eliminazione quando soddisfa tutti i criteri di un determinato insieme di regole. Ad esempio, potresti voler eliminare profili più vecchi di 30 giorni, ma mantienine almeno uno per ogni utente. In questo caso, il criterio di intersezione per la famiglia di colonne contenente la colonna del profilo consiste in una regola per un valore in scadenza e in una regola per il numero di versioni.

Union

Un criterio di unione di garbage collection contrassegna i dati per l'eliminazione quando soddisfa qualsiasi elemento in un determinato insieme di regole. Ad esempio, potresti assicurarti di conservare un massimo di due record di visualizzazioni di pagina per utente, ma solo se risalgono a meno di 30 giorni fa. In questo caso, il criterio di unione è impostato su un valore in scadenza o su alcune versioni.

Nidificati

Un criterio di raccolta dei rifiuti nidificato include una combinazione di regole di unione e di intersezione.

Impostazioni predefinite per la garbage collection

Non esiste un TTL predefinito per una famiglia di colonne. Il numero di celle conservate per una colonna dipende da come crei la famiglia di colonne in cui si trova, come spiegato nelle sezioni seguenti.

Criterio HBase

Se crei la famiglia di colonne con il client HBase per Java, la shell HBase o un altro strumento che utilizza il client HBase per Java, Bigtable conserva solo la cella più recente in ogni colonna della famiglia di colonne, a meno che non modifichi la regola. Questa impostazione predefinita è coerente con HBase.

Tutti gli altri librerie o strumenti client

Se crei la famiglia di colonne con qualsiasi altra libreria o strumento client, Bigtable conserva un numero infinito di celle in ogni colonna nella famiglia di colonne. Sono incluse le famiglie di colonne create con gcloud e cbt tool. Se vuoi limitare il numero di versioni, devi modificare il criterio di garbage collection per la famiglia di colonne.

Quando vengono eliminati i dati

La garbage collection è un processo continuo in cui Bigtable controlla le regole per ogni famiglia di colonne ed elimina i dati scaduti e di conseguenza. In generale, l'eliminazione effettiva dei dati può richiedere fino a una settimana dal momento in cui vengono soddisfatti i criteri delle regole. Non puoi modificare i tempi di garbage collection.

L'eliminazione dei dati scaduti può richiedere fino a una settimana, pertanto non devi mai fare affidamento esclusivamente sui criteri di garbage collection per assicurarti che le richieste di lettura restituiscano i dati desiderati. Applica sempre un filtro alle richieste di lettura che esclude gli stessi valori delle regole di garbage collection. Puoi filtrare limitando il numero di celle per colonna o specificando un intervallo di timestamp.

Ad esempio, supponiamo che una regola di garbage collection della famiglia di colonne sia impostata per conservare solo le cinque versioni più recenti di un profilo e che cinque versioni siano già archiviate. Dopo aver scritto una nuova versione del profilo, potrebbe essere necessaria fino a una settimana prima che la cella meno recente venga eliminata. Pertanto, per evitare di leggere il sesto valore, devi sempre filtrare tutto tranne le cinque versioni più recenti.

Ti viene addebitato lo spazio di archiviazione dei dati scaduti fino alla compattazione e all'eliminazione dei dati.

La garbage collection è retroattiva: quando viene impostata una nuova norma garbage collection, nei prossimi giorni viene applicata a tutti i dati nella tabella. Se il nuovo criterio è più restrittivo di quello precedente, i dati precedenti vengono eliminati durante l'attività in background, inclusi i dati scritti prima della modifica del criterio.

Se vuoi assicurarti che i dati contrassegnati per la garbage collection vengano eliminati, puoi eseguire query sulla tabella e confrontare i dati con i risultati previsti. Puoi anche monitorare le dimensioni della tabella nella console Google Cloud. Una tabella che non si riduce mai potrebbe riflettere un criterio di garbage collection che non funziona come previsto, ma ricorda che la garbage collection viene eseguita in ritardo.

Replica e raccolta dei rifiuti

La replica può influire sulla garbage collection in diversi modi.

Utilizzo dei CPU e della garbage raccolta basata sulla versione

In un'istanza che utilizza la replica, le eliminazioni della raccolta garbage basata sulla versione vengono replicate in tutti i cluster nell'istanza, proprio come vengono replicate nelle richieste dell'applicazione. Se scrivi rapidamente nuove celle che causano il contrassegno di eliminazione di celle meno recenti, potresti notare un aumento dell'utilizzo della CPU quando Bigtable elimina le celle inattive e replica queste eliminazioni in altri cluster dell'istanza. Preparati a questo aumento dell'utilizzo della CPU se aggiungi un cluster a un'istanza contenente tabelle che utilizzano la garbage collection basata sulla versione.

La raccolta dei rifiuti basata sull'età, invece, non aumenta l'utilizzo della CPU nelle istanze replicate.

Modifiche ai criteri di garbage collection per le tabelle replicate

Se una tabella si trova in un'istanza a cluster singolo, Bigtable consente di modificare o eliminare un criterio per una famiglia di colonne in qualsiasi momento. Nei casi che utilizzano la replica, vengono applicate alcune limitazioni. Queste limitazioni proteggono i tuoi dati.

Puoi modificare il numero massimo di versioni di una famiglia di colonne in una tabella replicata. Tuttavia, se riduci il numero di versioni per una famiglia di colonne, può essere necessaria fino a una settimana prima che tutti i cluster replicati riflettano il nuovo numero inferiore. Per questo motivo, devi sempre utilizzare i filtri durante la lettura dei dati.

Bigtable non ti consente di aumentare il TTL di una famiglia di colonne in una tabella replicata. Per capire il motivo, valuta la possibilità di modificare il TTL di una famiglia di colonne da 30 giorni a 50 giorni. La garbage collection basata sull'età può essere eseguita separatamente in ciascun cluster. Di conseguenza, al momento della modifica del criterio nel cluster A, la garbage collection potrebbe aver eliminato un valore di 31 giorni nel cluster B. Pertanto, il valore di 31 giorni esisterà nel cluster A, ma non nel cluster B finché non verrà eliminato dal nuovo criterio di 50 giorni nel cluster A. In questo caso, la modifica del criterio di garbage collection lasciare le copie non sincronizzate per quasi 20 giorni.

Per lo stesso motivo, Bigtable non consente di eliminare un criterio di garbage collection basato sull'età per una famiglia di colonne in una tabella replicata.

Passaggi successivi