你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

适用范围: NoSQL

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

删除过期项是一个后台任务,它使用剩余的请求单位,即用户请求没有使用的请求单位。 即使在 TTL 过期后,如果容器出现请求过载的情况,并且没有足够的 RU 使用,也会延迟数据删除操作。 如果提供了足够的 RU 来执行删除操作,则会删除数据。 虽然数据删除延迟,但任何查询都不会(通过任何 API)在 TTL 已过期后返回数据。

注意

此内容与 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 结果
缺少 ttl 属性 TTL 已禁用。 该项将永不过期(默认值)。
ttl = -1 TTL 已禁用。 该项将永不过期。
ttl = 2000 TTL 已禁用。 该项将永不过期。

示例 2

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

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

示例 3

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

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

后续步骤

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