Mantén solo el valor más reciente

En esta página, se describe una estrategia que te permite mantener solo el valor más reciente de una columna en una tabla de Bigtable.

Todas las bibliotecas cliente de Cloud Bigtable te permiten usar filtros para leer el valor más reciente en una fila, o celda y columna determinadas. Sin embargo, en algunos casos, es posible que nunca necesites leer versiones anteriores de tus datos. Puedes usar una política de recolección de elementos no utilizados basada en la versión que especifique que solo se mantenga una celda en una columna. Sin embargo, dado que la recolección de elementos no utilizados puede tardar hasta una semana en ocurrir, en la práctica, tu tabla puede contener datos más antiguos que nunca planeas leer.

Para mantener solo el valor más reciente, te recomendamos que uses un enfoque de borrar y luego escribir con el fin de limitar las columnas de tu tabla a una sola celda.

Borra y, luego, escribe

Para retener un solo valor en una columna, puedes enviar una solicitud que borre la columna y, luego, la vuelva a crear con un valor y una marca de tiempo nuevos en una acción atómica.

En el siguiente ejemplo de seudocódigo de Java, se muestra cómo funcionaría. El orden es importante: la eliminación debe ocurrir antes que la escritura.

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);

Proporcione lo siguiente:

  • TABLE: Es el ID de la tabla.
  • COLUMN_FAMILY: Es la familia de columnas que contiene la columna.
  • COLUMN_QUALIFIER: Es el calificador de columna que se borrará y volverá a crear.
  • TIMESTAMP: Es la marca de tiempo nueva.
  • VALUE: Es el valor nuevo de la columna.

Marca de tiempo de cero

Anteriormente, recomendábamos una estrategia de enviar siempre las operaciones de escritura con una marca de tiempo de 0. Puedes seguir usando ese enfoque, pero, dado que las marcas de tiempo válidas son útiles, recomendamos el enfoque de borrar y luego escribir en su lugar.

Si configuras la marca de tiempo de una celda en 0 o cualquier valor menor que la hora actual en milisegundos y también usas una política de recolección de elementos no utilizados basada en la antigüedad, es posible que tu celda se borre la próxima vez que se realice la recolección de elementos no utilizados.

¿Qué sigue?