技术干货 | MongoDB 如何设置时间序列集合的自动删除(TTL)?

golcm
发布于 2023-9-7 11:55
浏览
0收藏

本篇将延续时间序列集合的主题,重点讲解如何设置时间序列集合自动删除(TTL)的相关内容。

当你创建一个时间序列集合时,可以通过设置 expireAfterSeconds 参数来自动删除超过指定秒数的文档:

db.createCollection(
    "weather24h",
    {
       timeseries: {
          timeField: "timestamp",
          metaField: "metadata",
          granularity: "hours"
       },
       expireAfterSeconds: 86400
    }
)

过期阈值是 timeField 字段值加上指定的秒数。考虑 weather24h 集合中的以下文档:

{
   "metadata": {"sensorId": 5578, "type": "temperature"},
   "timestamp": ISODate("2021-05-18T10:00:00.000Z"),
   "temp": 12
}

该文档将会在 "2021-05-19T10:00:00.000Z" 过期。一旦某个桶中的所有文档都过期了,删除过期桶的后台任务将在下次运行时删除该桶。可参阅删除操作时机(Timing of Delete Operations)获取更多信息。


在集合上启用自动删除功能


要对已经存在的时间序列集合启用自动删除文档功能,执行如下 collMod 命令:

db.runCommand({
   collMod: "weather24h",
   expireAfterSeconds: 604801
})


修改 expireAfterSeconds 参数


要修改 expireAfterSeconds 参数的值,执行如下 collMod 命令:

db.runCommand({
   collMod: "weather24h",
   expireAfterSeconds: 604801
})


获取 expireAfterSeconds 当前值


要获取 expireAfterSeconds 当前值,使用 listCollections 命令:

db.runCommand( { listCollections: 1 } )

该命令查询结果为时间序列集合中一个包含 options.expireAfterSeconds 字段的文档。

{
    cursor: {
       id: <number>,
       ns: 'test.$cmd.listCollections',
       firstBatch: [
         {
            name: <string>,
            type: 'timeseries',
            options: {
               expireAfterSeconds: <number>,
               timeseries: { ... }
            },
            ...
         },
         ...
       ]
    }
 }


禁用自动删除


要禁用自动删除,使用 collMod 将 expireAfterSeconds 设置为 off

db.runCommand({
    collMod: "weather24h",
    expireAfterSeconds: "off"
})


行为


删除操作时机

MongoDB 不保证过期数据在过期时刻立即被删除。一旦某个桶中的所有文档都过期了,删除过期桶的后台任务将在下次运行时删除该桶。单个桶允许覆盖的最大时间跨度由时间序列集合的 granularity 控制:





granularity







覆盖的时间跨度












"seconds"(默认)













1小时














"minutes"









24小时








"hours"







30天



删除过期桶的任务每60秒执行一次。因此,在文档过期、桶中所有其他文档过期和后台任务运行之间的这段时间内,文档可能仍然保留在集合中。

由于删除操作的持续时间取决于 mongod 实例的工作负载,因此在后台任务运行之间的60秒周期之外,过期数据可能还会存在一段时间。

原文:Set up Automatic Removal for Time Series Collections (TTL)

关于译者:

张清荣,MongoDB 中文社区成员,现就职于中国联通软件研究院。

【推荐阅读】


文章转载自公众号:Mongoing中文社区

分类
标签
已于2023-9-7 11:55:05修改
收藏
回复
举报
回复
    相关推荐