仅保留最新值
本页介绍了一种策略,该策略允许您在 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
:表的 IDCOLUMN_FAMILY
:包含该列的列族COLUMN_QUALIFIER
:要删除并重新创建的列限定符TIMESTAMP
:新时间戳VALUE
:列的新值
时间戳为零
以前,我们建议使用的策略是始终发送时间戳为 0 的写入。您仍然可以使用该方法,但由于有效的时间戳很有用,因此我们建议您改用“先删除再写入”的方法。
如果您将单元的时间戳设置为 0 或小于当前时间的任何值(以毫秒为单位),并且还使用基于存在时间的垃圾回收政策,则在下次进行垃圾回收时,您的单元可能会被删除。