本页介绍了如何使用 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 字段设置为
Timestamp
类型时,Datastore 模式才会对文档应用相应的过期时间。如果将某个文档的此字段留空或设置为null
之类的值,则可停用该文档的过期时间设置。TTL 的设计能够最大限度地减少对其他数据库活动的影响。TTL 驱动的删除操作被视为具有较低优先级。我们还提供了其他策略,用于消除由 TTL 驱动的删除操作导致的流量高峰。
TTL 属性和索引
TTL 属性可以编入索引,也可以不编入索引。但是,由于 TTL 属性是时间戳,因此将该属性编入索引可能会在流量较高时影响性能。将时间戳属性编入索引违反了最佳实践,并且可能会造成热点。热点是指窄键范围的高读取、写入和删除速率。
默认情况下,Datastore 会为所有属性创建内置索引。您可以将某个属性从索引中排除,以停用 TTL 属性上的索引。
权限
配置 TTL 政策的主账号需要项目的以下权限:
- 查看 TTL 政策需要
datastore.indexes.list
和datastore.indexes.get
权限。 - 修改 TTL 政策需要
datastore.indexes.update
权限。 - 检查 TTL 操作的状态需要
datastore.operations.list
和datastore.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
在 Google Cloud 控制台中,转到数据库页面。
从数据库列表中选择所需的数据库。
在导航菜单中,点击存留时间 (TTL)。
点击创建政策。
输入一种类型的名称和一个时间戳属性名称。
点击创建。
控制台会返回到 Time-to-live(存留时间)页面。如果操作成功开始,则页面会在 TTL 政策表中添加一个条目。如果失败,则页面会显示错误消息。
gcloud
-
In the Google Cloud console, 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.
使用
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
在 Google Cloud 控制台中,转到数据库页面。
从数据库列表中选择所需的数据库。
在导航菜单中,点击存留时间 (TTL)。
控制台会列出数据库的 TTL 政策以及每项政策的状态。
gcloud
-
In the Google Cloud console, 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.
使用
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
在 Google Cloud 控制台中,转到数据库页面。
从数据库列表中选择所需的数据库。
在导航菜单中,点击存留时间 (TTL)。
在 TTL 政策表中,找到 TTL 政策所在的行。在此表行中,点击删除(垃圾桶)按钮。
点击删除以确认。
控制台会返回到 Time-to-live(存留时间)页面。如果成功,则 Datastore 会从表中移除 TTL 政策。
gcloud
-
In the Google Cloud console, 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.
使用
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 指标设置信息中心,请参阅管理自定义信息中心和添加信息中心微件。