Cosmos DB 中的生存时间(TTL)功能可帮助你在指定时间段( 以秒为单位)后自动删除项来管理数据的生命周期。 TTL 对于仅与有限时间相关的方案(例如会话数据、指标或日志)尤其有用。 通过启用 TTL,可以保持数据库精简,降低存储成本,并确保仅保留最新的相关数据。
注释
在容器上应用 TTL 策略时。 通过 TTL 过期的项目反映在 OneLake 中镜像的数据中。
TTL 的工作原理
在容器或单个项上启用 TTL 时,Cosmos DB 会跟踪每个项的年龄。 项目期限超过其 TTL 值后,系统会自动将其标记为删除并清除它。 可以在容器级别(适用于所有项)设置 TTL,也可以在项级别覆盖设置,从而实现更精细的控制。
容器级 TTL:除非指定了项级 TTL,否则容器中的所有项都继承默认 TTL。
项级 TTL:可以为单个项设置特定的 TTL,覆盖容器的默认值。
禁用 TTL:将 TTL 设置为 -1 禁用容器或项的自动删除。
TTL 值以秒为单位指定。 倒计时从项目的上次修改时间开始(或创建时间(如果未更新)。 当 TTL 过期时,该项有资格在下一个后台清除周期内自动删除。
使用 TTL 的好处
自动数据清理:无需手动删除脚本或计划作业。
成本节省:通过删除过时或不相关的数据来降低存储成本。
改进了性能:仅保留活动数据,使数据库保持高效。
配置 TTL
TTL 值被解释为自项目上次修改以来的时间间隔(以秒为单位)。 设置 TTL 值时,适用以下规则。
可以在容器和项级别设置生存时间(TTL),从而灵活地按照所需方式管理数据过期时间。
通过此设置,你可以混合和匹配过期策略以满足数据保留需求,无论你希望一切都过期、什么都不过期,还是两者都过期。
以下是在容器和项目级别配置 TTL 的方法:
容器级 TTL
如果未设置 TTL(或将其设置为
null),则容器中的项不会自动过期。如果将容器 TTL 设置为
-1,则表示“永远保留所有内容”。默认情况下,项目不会过期。 从数学上看,此设置等效于将过期时间设置为 无穷大。如果将容器 TTL 设置为正 非零 数
n,容器中的每个项将在上次修改后几秒钟过期n,更新。 如果从未修改该项目,则过期时间基于创建时间。
条目级 TTL
仅当容器级别的 TTL 属性设置且未设置为时,项级 TTL 才会生效。
如果在某个项上设置了 TTL,它将替代容器的默认值。 例如,如果容器 TTL 为 1 小时,但项的 TTL 设置为 10 分钟,则该项将在 10 分钟后过期。
如果项的 TTL 设置为
-1,则即使容器具有 TTL,它也不会过期。如果未设置容器 TTL,则会忽略对项设置的任何 TTL。
如果容器 TTL 为
-1,但项的 TTL 为正数,则该项将在其自身的 TTL 后过期,而容器中的其他项将无限期保留。
小窍门
在各种软件开发工具包(SDK)中,容器级值通常标识为 DefaultTimeToLive 容器的属性。 在项目本身中,使用ttl属性设置项目级值。
示例 TTL 配置
下表显示了在容器或项级别分配不同 TTL 值的示例场景。
| 情景 | 容器 TTL | 条目 TTL | 注释 |
|---|---|---|---|
| TTL 已禁用 | <null> |
此配置是 默认 行为,其中项目永不过期。 | |
| TTL 已禁用 | <null> |
-1 |
项目永不过期 |
| TTL 已禁用 | <null> |
3600 |
项目永不过期 |
| 已启用 TTL | -1 |
TTL 已启用,但项目永不过期 | |
| 已启用 TTL | -1 |
-1 |
TTL 已启用,但项目永不过期 |
| 已启用 TTL | -1 |
3600 |
TTL 已启用,特定项目在 1 小时后过期 |
| 所有项目在七天后过期 | 604800 |
创建或上次更新七天后删除每个项 | |
| 某些项目永远不会过期,而另一些项在七天后过期 | 604800 |
-1 |
具有 TTL -1 的项目永远不会删除,而其他人在 7 天后过期 |
| 项目在 1 小时后过期 | 3600 |
创建或上次更新后 1 小时删除所有项目 | |
| 特定项目在 30 分钟后过期,而其他人在 1 小时后过期 | 3600 |
1800 |
大多数项目在 1 小时后过期,但特定项目会在 30 分钟后过期 |
注释
不支持将项的 TTL 设置为 null。 项 TTL 值必须是小于或等于 2147483647的非零正整数。 或者,可以将 TTL 设置为 -1,这意味着单个项不会过期。 若要对项使用默认 TTL,请确保 ttl 该属性不存在。