Compartir a través de

Azure Cosmos DB 中的生存时间 (TTL)

适用范围: NoSQL

利用生存时间或 TTL,Azure Cosmos DB 可以在特定一段时间后自动将项从容器中删除。 默认情况下,可以在容器级别设置生存时间,并基于每个项替代该值。 在容器或项级别设置 TTL 后,Azure Cosmos DB 会在一段时间(自上次修改项的时间开始算起)后自动删除这些项。 配置的生存时间值以秒为单位。 配置 TTL 后,系统会基于 TTL 值自动删除已过期的项,不需要客户端应用程序显式发出的删除操作。 TTL 的最大值为 2,147,483,647 秒,大约相当于 24,855 天或 68 年。

过期的项将作为后台任务删除。 即使某个项尚未从容器中永久删除,在 TTL 过期后,它也不会立即出现在查询响应中。 如果容器没有足够的请求单位 (RU) 来执行删除,数据删除将会推迟。 一旦有足够的 RU 来完成删除,数据将被删除。

对于预配的吞吐量帐户,对过期项的删除会使用用户请求未使用的剩余 RU。

对于无服务器帐户,对过期项的删除的 RU 费率与删除项操作相同。

注意

此内容与 Azure Cosmos DB 事务存储 TTL 相关。 如果正在查找通过 Azure Synapse Link 启用 NoETL HTAP 方案的分析存储 TTL,请单击此处

容器和项的生存时间

生存时间值是以秒为单位设置的,解释为自上次修改项的时间的增量。 可以针对容器或容器中的项设置生存时间:

  1. 容器的生存时间(使用 DefaultTimeToLive 设置):

    • 如果缺失(或设置为 null),则项不会自动过期。

    • 如果存在且值设置为“-1”(无限期),则默认情况下,项不会过期。

    • 如果存在且值设置为某个非零数字“n”,项将在上次修改“n”秒后过期。

  2. 项的生存时间(使用 ttl 设置):

    • 仅当父容器的 DefaultTimeToLive 存在且不是设置为 null 时,此属性才适用。

    • 如果存在,它将替代父容器的 DefaultTimeToLive 值。

生存时间配置

  • 如果将某个容器的 TTL 设置为“n”,该容器中的项将在 n 秒后过期。 如果同一容器中的项有自己的生存时间,则将其设置为 -1(表示项不会过期)。 如果某些项使用不同的数字替代生存时间设置,则这些项根据其自己配置的 TTL 值到期。

  • 如果未针对某个容器设置 TTL,则此容器中的项的生存时间不起作用。

  • 如果某个容器的 TTL 设置为 -1,则此容器中生存时间设置为 n 的项将在 n 秒后过期,剩余的项不会过期。

示例

本部分显示分配给容器和项不同生存时间值的一些示例:

注意

不支持将项的 TTL 设置为 null。 项 TTL 值必须是小于或等于 2147483647 的非零正整数或 -1(这意味着该项永远不会过期)。 若要对项使用默认 TTL,请确保 TTL 属性不存在。

示例 1

容器的 TTL 设置为 null (DefaultTimeToLive = null)

项的 TTL Result
缺少 ttl 属性 TTL 已禁用。 该项永不过期(默认值)。
ttl = -1 TTL 已禁用。 该项永不过期。
ttl = 2000 TTL 已禁用。 该项永不过期。

示例 2

容器的 TTL 设置为 -1 (DefaultTimeToLive = -1)

项的 TTL Result
缺少 ttl 属性 TTL 已启用。 该项永不过期(默认值)。
ttl = -1 TTL 已启用。 该项永不过期。
ttl = 2000 TTL 已启用。 该项将在 2,000 秒后过期。

示例 3

容器的 TTL 设置为 1000 (DefaultTimeToLive = 1000)

项的 TTL Result
缺少 ttl 属性 TTL 已启用。 该项将在 1,000 秒后过期(默认值)。
ttl = -1 TTL 已启用。 该项将永不过期。
ttl = 2000 TTL 已启用。 该项将在 2,000 秒后过期。

后续步骤

通过以下文章了解如何配置生存时间: