仅保留最新值

本页介绍了一种策略,该策略允许您在 Bigtable 表的列中仅保留最新值。

所有 Cloud Bigtable 客户端库都可让您使用过滤条件来读取指定行和列的最新值(也称为“单元”)。不过,在某些情况下,您可能不需要读取旧版数据。您可以使用基于版本的垃圾回收政策,该政策指定在一列中仅保留一个单元,但由于垃圾回收可能需要长达一周的时间才能执行,因此实际上您的表可能包含您从未打算读取的旧数据。

如需仅保留最新值,我们建议您使用“先删除再写入”的方法,将表中的列限制为仅保留一个单元。

先删除,然后写入

如需在一列中仅保留一个值,您可以发送一个删除该列的请求,然后在一项原子操作中使用新值和时间戳重新创建该列。

以下 Java 伪代码示例展示了其工作原理。顺序很重要:删除操作必须在写入操作之前执行。

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

提供以下信息:

  • TABLE:表的 ID
  • COLUMN_FAMILY:包含相应列的列族
  • COLUMN_QUALIFIER:要删除并重新创建的列限定符
  • TIMESTAMP:新时间戳
  • VALUE:列的新值

时间戳为零

以前,我们建议使用的策略是始终发送时间戳为 0 的写入。您仍然可以使用该方法,但由于有效的时间戳很有用,因此我们建议您改用“先删除再写入”的方法。

如果您将单元的时间戳设置为 0 或小于当前时间的任何值(以毫秒为单位),并且还使用基于存在时间的垃圾回收政策,则在下次进行垃圾回收时,您的单元可能会被删除。

后续步骤