通过存留时间 (TTL),您可以设置政策来定期从以下位置删除数据: Spanner 表。移除不需要的数据:
- 降低存储空间和备份费用。
- 减少数据库扫描某些查询的行数,从而可能提高查询性能。
- 有助于遵守旨在限制某些类型的数据保留期限的法规或行业准则。
TTL 是常规清理活动的理想选择。它在后台持续运行,定期批量删除符合条件的数据。数据通常会在失效日期后的 72 小时内删除。TTL 不会立即 在数据符合删除条件时,使数据失效或被查询隐藏。 TTL 在插入时也不会检查数据,因此不会阻止您进行 插入带有过期时间戳的行。
TTL 的设计能够最大限度地减少对其他数据库活动的影响。它比最终用户查询更有效地并行工作,并且包括重试逻辑,以确保进行端到端清理。
另一个后台压缩过程会从已删除的行回收存储空间, 通常会在 7 天内完成。
TTL 的工作原理是什么?
您可以通过定义行删除操作,在 Spanner 表上设置 TTL 政策,这让 Spanner 能够 定期删除不需要的数据每个表都可以有自己的政策。仅一个 可以按表指定 TTL 政策。您为 TTL 设置的方式有所不同 GoogleSQL 方言数据库和 PostgreSQL 方言数据库。
通过 GoogleSQL 使用 TTL
使用 GoogleSQL,您可以通过指定 一个时间戳和时间间隔,用于确定某行何时可以删除; 例如,上次更新时间加上 30 天
后台系统进程每天都会检查符合条件的行。它将并行执行的实际删除并行执行,这些删除接近数据存储位置。每个批次都会以一致的时间戳在自己的事务中运行。因此,给定批次中的行以及所有索引和交错子项一定会以原子方式删除。但是,跨批次删除 会涉及不同的事务
由于这是一个异步后台过程,因此从延迟到等待符合标准为止。延迟时间通常少于 72 小时。作为 因此,行的 TTL 达到 5000 之后,可能会在表中保留最多三天。 已过期;例如,一个表使用行删除政策来删除旧行 “超过 4 天的数据”可能会包含最多存在 7 天的行 行。
有关如何创建 GoogleSQL 行的分步说明 删除政策,请参阅创建 TTL 政策。
TTL 与 PostgreSQL
使用 PostgreSQL,数据库所有者可以在TTL INTERVAL
CREATE TABLE
或 ALTER TABLE
语句来定义行删除政策。
如需针对 PostgreSQL 表设置行删除政策,该表必须
有一个数据类型为 TIMESTAMPTZ
的列。TTL INTERVAL
子句使用
此列用于为某一行何时符合
删除。
子句的计算结果必须为整数天数。例如,允许使用 '3
DAYS'
,'4 DAYS 2 MINUTES - 2 MINUTES'
也是如此,但不允许使用 '4 DAYS 3
MINUTES'
,并且系统会返回错误。您不能使用负数。
TTL 垃圾回收机制会在后台不断删除符合条件的行。由于这是一个异步后台进程,因此在 资格和删除。该表可能包含符合 TTL 条件的行 但 TTL 尚未完成。延迟时间通常较短 超过 72 小时。
如需了解如何创建 PostgreSQL 行删除政策, 请参阅创建 TTL 政策。
备份和 TTL
恢复备份
从备份恢复数据库时,系统会自动删除源数据库上配置的所有行删除政策。这可防止 Spanner 在可能删除过期数据后, 备份已恢复。因此,您需要手动重新配置 TTL。
数据一致性
备份是指您的数据的快照,
特定时间点 (version_time
)。备份可以包含
可能符合 TTL 删除条件,但 TTL 尚未完成。
同样,Dataflow 导出作业会按
固定时间戳。
审计
TTL 支持通过变更数据流审核其删除操作。跟踪数据库 TTL 更改的变更数据流数据记录具有
transaction_tag
字段设置为 RowDeletionPolicy
,并将
“is_system_transaction
”字段已设置为“true
”。变更数据流读者
能够过滤掉所有 TTL 记录或除 TTL 以外的所有记录
具体取决于其使用场景查看使用 Beam 进行过滤的示例
交易代码。