使用 TTL 政策管理数据保留

本页面介绍如何使用 Google Cloud Console 和 Google Cloud CLI 配置存留时间 (TTL) 政策。在阅读本页内容之前,您应该了解 Firestore 数据模型

存留时间概览

使用存留时间 (TTL) 政策来自动移除数据库中的过时数据。TTL 政策将给定字段指定为给定集合组中文档的到期时间。借助 TTL,您可以通过清除过时的数据来降低存储费用。

限制和约束

  • 每个集合组只能有一个字段标记为 TTL 字段。
  • 系统总共允许 200 个字段级配置。一个字段配置可以包含同一字段的多个配置。例如,单字段索引例外项和针对同一字段的 TTL 政策将被视为一个字段配置计入限制。

公开预览版限制

TTL 的公开预览版包含以下额外限制:

  • 结算:在公开预览版期间,TTL 删除操作是免费的。对于正式版中的 TTL 删除操作,Google Cloud 保留向客户收费的权利。

  • 不适用于生产工作负载:我们不建议在生产数据库中使用公开预览版功能。

TTL 删除操作

请注意 TTL 驱动的删除操作的以下关键行为:

  • 通过 TTL 执行的删除操作不是即时进程。已到期的文档会继续显示在查询和查找请求中,直到 TTL 进程实际删除它们为止。TTL 以删除操作的及时性为代价来降低删除操作总拥有成本。

  • 对现有集合组应用 TTL 政策会导致系统根据新的 TTL 政策批量删除到期的所有数据。请注意,此批量删除操作也不是即时的。

  • TTL 不一定会按照与文档到期时间戳相同的顺序删除文档。

  • 删除操作不是以事务方式执行的。到期时间相同的文档不一定会同时删除。如果您需要此行为,请使用客户端库执行删除操作。

  • TTL 的设计能够最大限度地减少对其他数据库活动的影响。TTL 驱动的删除操作被视为具有较低优先级。我们还提供了其他策略,用于消除由 TTL 驱动的删除操作导致的流量高峰。

  • 通过 TTL 删除会调用所有活跃快照监听器,并触发 Cloud Functions Firestore 触发器。

TTL 字段和索引

TTL 字段可以编入索引,也可以不编入索引。但是,由于 TTL 字段是时间戳,因此将该字段编入索引可能会在流量较高时影响性能。将时间戳字段编入索引可能会造成热点问题,因此违背了最佳实践。热点是指窄文档范围的高读取、写入和删除速率。

默认情况下,Firestore 会为所有字段创建单字段索引。 您可以创建单字段索引例外项,以停用 TTL 字段上的索引。

权限

配置 TTL 政策的主帐号需要项目的以下权限:

  • 查看 TTL 政策需要 datastore.indexes.listdatastore.indexes.get 权限。
  • 修改 TTL 政策需要 datastore.indexes.update 权限。
  • 检查 TTL 操作的状态需要 datastore.operations.listdatastore.operations.get 权限。

如需了解分配这些权限的角色,请参阅 Firestore Identity and Access Management 角色

准备工作

在使用 gcloud CLI 管理 TTL 政策之前,请使用 gcloud components update 命令将组件更新到最新可用版本:

gcloud components update

创建 TTL 政策

创建 TTL 政策时,您可以将某个文档字段指定为集合组中文档的到期时间。

TTL 使用指定的字段来识别符合删除条件的文档。此 TTL 字段的类型必须为 Date and time。您可以选择现有的字段,也可以指定您打算稍后添加的字段。TTL 字段值可以是将来、现在或过去的时间。如果值为过去的时间,则文档直接符合删除条件。

例如,您可以使用字段 expireAt 创建 TTL 政策,然后将该字段添加到现有文档中。

请按以下步骤来创建 TTL 政策:

Google Cloud 控制台

  1. 转到 Google Cloud Console 中的 Firestore 存留时间页面。

    进入“Time-to-live”(存留时间)页面

  2. 点击创建政策

  3. 输入集合组名称和时间戳字段名称。

  4. 点击创建

控制台会返回到 Time-to-live(存留时间)页面。如果操作成功开始,则页面会在 TTL 政策表中添加一个条目。如果失败,则页面会显示错误消息。

gcloud

使用 firestore fields ttls update 命令配置 TTL 政策。添加 --async 标志可阻止 gcloud CLI 等待操作完成。

gcloud beta firestore fields ttl update ttl_field --collection-group=collection_group_name --enable-ttl

即使对于空数据库,启用 TTL 政策也可能需要十分钟或更长的时间。操作一旦启动就无法通过关闭终端来取消。

查看 TTL 政策

请按以下步骤来查看 TTL 政策及其状态。

Google Cloud 控制台

转到 Google Cloud Console 中的 Firestore 存留时间页面。

进入“Time-to-live”(存留时间)页面

控制台会列出数据库的 TTL 政策以及每项政策的状态。

gcloud

使用 firestore fields ttls list 命令配置 TTL 政策。以下命令可以列出所有 TTL 政策。

gcloud beta firestore fields ttl list

如需列出特定集合组下的 TTL 政策,请使用以下命令:

gcloud beta firestore fields ttl list  --collection-group=collection_group_name

查看操作详细信息

您可以使用 gcloud CLI 查看有关处于 CREATING 状态的 TTL 政策的更多详细信息。

使用 operations list 命令可以查看所有正在运行和最近完成的操作:

gcloud firestore operations list

响应包含操作的进度估计值。

停用 TTL 政策

请按以下步骤来停用 TTL 政策。

Google Cloud 控制台

  1. 转到 Google Cloud Console 中的 Firestore 存留时间页面。

    进入“Time-to-live”(存留时间)页面

  2. 在 TTL 政策表中,找到 TTL 政策所在的行。在此表行中,点击删除(垃圾桶)按钮。

  3. 点击删除以确认。

控制台会返回到 Time-to-live(存留时间)页面。如果成功,Firestore 会从表中移除 TTL 政策。

gcloud

使用 firestore fields ttls update 命令配置 TTL 政策。添加 --async 标志可阻止 gcloud CLI 等待操作完成。

gcloud beta firestore fields ttl update ttl_field --collection-group=collection_group_name --disable-ttl

监控 TTL 删除操作

您可以使用 Cloud Monitoring 查看有关 TTL 驱动的删除操作的指标。Firestore 为 TTL 提供以下指标:

存留时间删除操作计数

根据存留时间 (TTL) 政策删除的文档总数。

存留时间到期到删除延迟

文档根据存留时间 (TTL) 政策到期与实际删除之间的间隔时间。

如需使用 Firestore 指标设置信息中心,请参阅管理自定义信息中心添加信息中心微件