暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

Mongoing中文社区 2023-07-20
385

 点击下方公众号关注并分享获取 MongoDB 最新资讯


本篇将延续时间序列集合的主题,重点讲解如何设置时间序列集合自动删除(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 中文社区成员,现就职于中国联通软件研究院。

【推荐阅读】



社区招募

为了让社区组委会成员和志愿者朋友们灵活参与,同时我们为想要深度参与社区建设的伙伴们开设了“招募通道”,如果您想要在社区里面结交志同道合的技术伙伴,想要通过在社区沉淀有价值的干货内容,想要一个展示自己的舞台,提升自身的技术影响力,即刻加入社区贡献队伍~ 点击提交申请

社区合作

接下来我们会在诸多城市举办技术大会,如果您有优质的议题和 MongoDB 相关经验的嘉宾可以与我们分享,或者有赞助合作意向的小伙伴,包含但不限制于联合主办方、媒体合作等,都可以随时联系我们的社区助手小芒果(微信ID:mongoingcom)沟通具体事宜。

重要资讯

感谢大家一直以来对社区的关注与支持!社区在大家共同的努力下不断发展与壮大,为了给大家营造更便捷的交流环境,QQ 技术交流群将同步在“微信技术交流群”中。扫描下方二维码添加小芒果微信发送“mongo”即可进入技术交流群。




获取更多精彩内容点击社区网站www.mongoing.com


扫描上方二维码添加小芒果微信

(ID:mongoingcom)

进入中文用户组技术交流群


长按二维码加入我们

文章转载自Mongoing中文社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论