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

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

存留时间概览

使用 TTL 政策来自动移除数据库中的过时数据。TTL 政策会指定给定属性 作为给定种类中实体的到期时间。借助 TTL,您可以清除过时的数据,从而降低存储费用。数据通常会在失效日期后的 24 小时内删除。

价格

TTL 删除操作会计入实体删除费用。价格 请参阅 Datastore 模式 Firestore 价格

限制和约束

  • 每种类型只能有一个媒体资源标记为 TTL 媒体资源。
  • 系统总共允许 200 项 TTL 政策。

TTL 删除操作

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

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

  • 通过 TTL 删除实体不会删除该实体的后代实体。

  • 对现有种类应用 TTL 政策会导致批量添加 根据新的 TTL 政策删除所有到期的数据。请注意, 这种批量删除操作也不会即时完成,具体取决于 它的存在。

  • 如果实体具有过去的到期时间,并且您向相应类型添加了新的 TTL 政策,则该实体将在 TTL 政策完成设置并变为活跃状态后的 24 小时内删除。

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

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

  • Datastore 模式将始终根据最新的 TTL 字段来确定 到期。例如,如果某个已过期但尚未删除的实体的 TTL 字段更新为较晚的日期,则该实体将恢复为未过期状态,并且系统将使用新的日期。

  • 只有在设置了 TTL 字段后,Datastore 模式才会让文档过期 转换为 Timestamp 类型。如果将某个文档的此字段留空或设置为 null 之类的值,则可停用该文档的过期时间设置。

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

TTL 属性和索引

TTL 属性可以编入索引,也可以不编入索引。不过,由于 TTL 属性是 时间戳,则将属性编入索引可能会影响在较高流量时的效果 。将时间戳属性编入索引有违最佳实践,可能会导致 热点。热点是指窄键的高读取、写入和删除速率 范围。

默认情况下,Datastore 会为所有属性创建内置索引。您可以 从索引中排除属性 来停用 TTL 属性的索引。

权限

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

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

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

准备工作

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

gcloud components update

创建 TTL 政策

创建 TTL 政策时,您可以将实体属性指定为到期时间 某个种类中的实体的时间TTL 政策适用于 所有命名空间。

TTL 使用指定的属性来识别符合删除条件的实体。这个 TTL 属性必须为 Date and time 类型。您可以选择已经 也可以指定您打算以后添加的资源

在设置 TTL 属性值之前,请注意以下事项:

  • TTL 属性值可以是将来、现在或过去的时间。如果值为过去的时间,则实体直接符合删除条件。例如,您 可能会创建一项具有属性 expireAt 的 TTL 政策,然后将该属性添加到 现有实体

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

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

Google Cloud Console

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

    前往“数据库”

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

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

  4. 点击创建政策

  5. 输入种类名称和时间戳属性名称。

  6. 点击创建

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

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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 政策及其状态。

Google Cloud Console

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

    前往“数据库”

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

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

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

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

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

    gcloud firestore fields ttls list
    

    如需列出特定类型下的 TTL 政策,请使用以下命令:

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

查看操作详细信息

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

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

gcloud firestore operations list

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

停用 TTL 政策

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

Google Cloud Console

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

    前往“数据库”

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

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

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

  5. 点击删除以确认。

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

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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 驱动的删除操作的指标。Datastore 提供以下 TTL 指标:

datastore.googleapis.com/entity/ttl_deletion_count TTL 删除次数

TTL 政策删除的实体总数。

datastore.googleapis.com/entity/ttl_expiration_to_deletion_delays TTL 到期到删除延迟

根据 TTL 规定实体到期之前经过的时间 政策以及实际删除时间

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