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

问题描述 投票:0回答:2

我在Mongo有很多收藏。大约17亿条记录占据了大约5TB的存储空间。我不再需要无限期地保留这些数据,所以我正在寻找摆脱大部分数据的选项,最好是基于“createdAt”。

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

{
        "v" : 1,
        "key" : {
                "createdAt" : 1
        },
        "name" : "createdAt_1",
        "ns" : "someNS.SomeCollection",
        "background" : true
}

mongo能以多快的速度删除所有数据?根据我的阅读,ttl进程每60秒运行一次。每次删除多少数据?

mongodb ttl
2个回答
0
投票

Timing of the Delete Operation

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

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

删除过期文档的后台任务每60秒运行一次。结果,文档可能在文档到期和后台任务运行之间的期间保留在集合中。

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


0
投票

将TTL索引添加到大型集合中可能会影响性能。如果您需要在创建TTL时继续查询此集合,您可能会考虑在过去创建TTL索引,以便实际上没有文档过期。使用TTL创建索引后,您可以稍后调整文档的保留时间。

创建该索引后,您可以手动运行查询以删除旧数据,直到您接近最新并能够调整TTL,或缓慢提升TTL,这样您就可以控制性能影响。

(来源:mlab关于在1TB集合中添加TTL的建议。如果在删除旧文档时不需要维护数据访问权限,请完全忽略此建议)

© www.soinside.com 2019 - 2024. All rights reserved.