使用 TTL 政策管理数据保留期限

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

存留时间概览

您可以使用 TTL 政策来自动移除数据库中的过时数据。TTL 政策会将某个字段指定为相应集合组中文档的到期时间。借助 TTL,您可以清除过时的数据,从而降低存储费用。数据通常会在失效日期后的 24 小时内删除。

价格

TTL 删除操作会计入文档删除费用。如需了解删除操作的价格,请参阅 Firestore 价格

限制和约束

  • 每个集合组只能有一个字段标记为 TTL 字段。
  • 系统总共允许 200 个字段级配置。一个字段配置可以包含同一字段的多个配置。例如,单字段索引例外项和针对同一字段的 TTL 政策将被视为一个字段配置计入限制。
  • 对于 Datastore 模式 Firestore 客户,TTL 不能与对实体组乐观并发模式搭配使用。考虑将并发模式更改为乐观并发模式

TTL 删除操作

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

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

  • 通过 TTL 删除文档不会删除该文档下的子集合。

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

  • 如果文档的到期时间是过去的时间,并且您向集合添加了新的 TTL 政策,则该文档将在 TTL 政策完成设置并生效后的 24 小时内删除。

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

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

  • Firestore 将始终根据最新的 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 字段值之前,请注意以下事项:

  • TTL 字段值可以是将来、现在或过去的时间。如果值为过去的时间,则文档直接符合删除条件。例如,您可以使用字段 expireAt 创建 TTL 政策,然后将该字段添加到现有文档中。

  • 若对某个文档使用任何其他数据类型或是不为其设置 TTL 字段值,都会停用该文档的 TTL 功能。

如需创建 TTL 政策,请按以下步骤操作:

Google Cloud 控制台

  1. 在 Google Cloud 控制台中,转到数据库页面。

    前往“数据库”

  2. 从数据库列表中选择所需的数据库。

  3. 在导航菜单中,点击存留时间 (TTL)

  4. 点击创建政策

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

  6. 点击创建

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

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

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

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

TTL 政策启用时长

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

查看 TTL 政策

如需查看 TTL 政策及其状态,请按以下步骤操作:

Google Cloud 控制台

  1. 在 Google Cloud 控制台中,转到数据库页面。

    前往“数据库”

  2. 从数据库列表中选择所需的数据库。

  3. 在导航菜单中,点击存留时间 (TTL)

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

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

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

    gcloud firestore fields ttls list
    

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

    gcloud firestore fields ttls list  --collection-group=collection_group_name
    

View operation details

You can use the gcloud CLI to view more details about a TTL policy that is in the CREATING state.

Use the operations list command to see all running and recently completed operations:

gcloud firestore operations list

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

停用 TTL 政策

如需停用 TTL 政策,请按以下步骤操作:

Google Cloud 控制台

  1. 在 Google Cloud 控制台中,转到数据库页面。

    前往“数据库”

  2. 从数据库列表中选择所需的数据库。

  3. 在导航菜单中,点击存留时间 (TTL)

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

  5. 点击删除以确认。

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

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

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

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

监控 TTL 删除操作

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

指标类型 指标名称 指标说明
firestore.googleapis.com/document/ttl_deletion_count 存留时间删除操作计数

TTL 政策删除的文档总数。

firestore.googleapis.com/document/ttl_expiration_to_deletion_delays 存留时间到期到删除延迟

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

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