模拟单元级 TTL

在 Bigtable 中,垃圾回收政策是在列族级设置的,您无法指定单元级垃圾回收政策。但是,您可以通过更改垃圾回收设置来模拟单元级的存留时间 (TTL) 政策。本页面介绍了几种可以使用的不同方法。

在查看本页面之前,您应该参阅垃圾回收概览。如需了解如何发送写入请求(包括时间戳),请参阅 Bigtable 写入

一秒到期

使用此方法时,将垃圾回收规则设置为使数据在 1 秒钟后到期。无论您何时写入数据,都要将单元的时间戳设置为您希望该值到期的时间。在压缩期间,Bigtable 会删除时间戳至少在 1 秒钟前的所有单元。例如,如果您将某单元的时间戳设置为 4 月 30 日上午 9:00:00,则系统会在 4 月 30 日上午 9:00:01 之后的某个时间删除该单元。借助此方法,您可以为同一列族中的不同单元设置不同到期时间值。

一秒到期的优点

  • 时间戳具有实际意义:到期时间。

一秒到期的缺点

  • 每个将数据写入此 Bigtable 列族的应用都需要配置为遵循此规则。如果您在写入时忘记进行配置并使用默认服务器时间戳,则该数据将立即到期,并在下一次压缩期间被删除。

  • 由于您的时间戳不是“实际的”时间戳,因此您不能将时间戳用于任何其他用例,例如确定何时写入值。如需解决此问题,您可以将实际时间戳写入单独的列中,但这会增加您存储的数据量。

  • 您无法对已包含具有实际时间戳的数据的列族实施此策略。如果现有数据具有实际时间戳,或者如果您不小心写入具有实际时间戳的新数据,则该数据将在下一次压缩期间被删除。

  • 您不能为给定行指定多个单元,并且列的到期时间应彼此相同。新数据将覆盖具有相同时间戳的旧数据。

  • 由于垃圾回收可能需要长达一周时间,因此在您读取数据时始终需要使用过滤条件。

默认到期时间

假设您希望大多数数据都具有默认 TTL,但想要为部分数据设置不同的按单元的到期时间值。

例如,您可能在一个表中存储十位客户的点击事件。大多数点击事件应在 2 天后到期,但您有一位客户的点击事件应在一小时后到期,有另一位客户的点击事件应在 3 天后到期。

如果使用此方法,您可以创建列族,将垃圾回收的期限设置为默认 TTL。对于您希望在默认 TTL 之前到期的数据,请将时间戳设置为早于实际写入数据的时间。对于您希望在默认 TTL 之后到期的数据,请将时间戳设置为晚于实际写入数据的时间。

默认到期时间的优点

  • 对于没有自定义 TTL 的写入数据,系统会使用默认 TTL 。

  • 此方法可以安全地应用于预先存在的表。

默认到期时间的缺点

  • 时间戳在语义上没有意义,因为单元格的时间戳可能是实际的,也可能是人工的。这意味着您不能将单元格的时间戳用于任何其他用例,例如确定何时写入值。 如需解决此问题,您可以将实际时间戳写入单独的列中,但这会增加您存储的数据量。

  • 您可能会无意中写入与给定列中的实际时间戳冲突的自定义时间戳。

  • 由于垃圾回收是异步进行的,因此您在使用此策略读取数据时仍需要始终使用过滤条件。

后续步骤