将 Mongo TTL 索引添加到大集合中

use*_*122 5 ttl mongodb

我在 Mongo 有大量收藏。约 17 亿条记录占用约 5TB 的存储空间。我不再需要无限期地保留这些数据,因此我正在寻找删除大部分数据的选项,最好基于“createdAt”。

我想知道如果我添加一个 ttl 索引最多只保留一个月的记录会发生什么。我目前有以下索引:

{
        "v" : 1,
        "key" : {
                "createdAt" : 1
        },
        "name" : "createdAt_1",
        "ns" : "someNS.SomeCollection",
        "background" : true
}
Run Code Online (Sandbox Code Playgroud)

mongo 能够多快删除所有数据?据我所知,ttl 进程每 60 秒运行一次。它每次删除多少数据?

Man*_*ani 0

删除操作的时机

当您在后台构建 TTL 索引时,TTL 线程可以在构建索引时开始删除文档。如果您在前台构建 TTL 索引,一旦索引构建完成,MongoDB 就会开始删除过期文档。

TTL索引并不保证过期数据会在过期后立即删除。文档过期时间和 MongoDB 从数据库中删除文档的时间之间可能存在延迟。

删除过期文档的后台任务每 60 秒运行一次。因此,在文档过期和后台任务运行之间的时间段内,文档可能会保留在集合中。

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