Conserva solo il valore più recente

In questa pagina viene descritta una strategia che consente di conservare solo il valore più recente in una colonna di una tabella Bigtable.

Tutte le librerie client di Cloud Bigtable consentono di utilizzare i filtri per leggere il valore più recente, o cella, in una determinata riga e colonna. In alcuni casi, tuttavia, potrebbe non essere mai necessario leggere le versioni precedenti dei dati. Puoi utilizzare un criterio di garbage collection basato sulla versione che specifica di mantenere una sola cella in una colonna. Tuttavia, poiché la garbage collection può richiedere fino a una settimana, in pratica la tabella potrebbe contenere dati meno recenti che non prevedi di leggere.

Per mantenere solo il valore più recente, ti consigliamo di utilizzare un approccio delete-then-write per limitare le colonne della tabella a una sola cella.

Elimina, quindi scrivi

Per conservare un solo valore in una colonna, puoi inviare una richiesta che elimini la colonna e poi la ricrea con un nuovo valore e un nuovo timestamp in un'azione atomica.

Il seguente esempio di pseudocodice Java mostra come funziona. L'ordine è importante: l'eliminazione deve avvenire prima della scrittura.

RowMutation mutation = RowMutation.create(TABLE, ROW_KEY)
                .deleteCells(COLUMN_FAMILY, COLUMN_QUALIFIER, Range.TimestampRange.unbounded())
                .setCell((COLUMN_FAMILY, COLUMN_QUALIFIER, TIMESTAMP, VALUE);
dataClient.mutateRow(mutation);

Fornisci quanto segue:

  • TABLE: l'ID della tabella
  • COLUMN_FAMILY: la famiglia di colonne che contiene la colonna
  • COLUMN_QUALIFIER: il qualificatore di colonna da eliminare e ricreare
  • TIMESTAMP: il nuovo timestamp
  • VALUE: il nuovo valore della colonna

Timestamp di zero

In precedenza, consigliavamo di inviare sempre le scritture con un timestamp pari a 0. Puoi comunque utilizzare questo approccio, ma poiché i timestamp validi sono utili, ti consigliamo di adottare invece l'approccio delete-then-write.

Se imposti il timestamp di una cella su 0 o su qualsiasi valore inferiore al tempo attuale in millisecondi e utilizzi anche un criterio di garbage collection basato sull'età, la cella potrebbe essere eliminata alla successiva garbage collection.

Passaggi successivi