将Mongo TTL索引添加到大型收藏中



我在Mongo中有一个大型收藏。大约有17亿张记录,占据了5TB的存储空间。我不再需要无限期地保留这些数据,因此我正在寻找摆脱大多数数据的选项,最好是基于"创建"。

我想知道,如果我添加TTL索引以最多只能保留一个月的记录,该期望如何。我目前有以下索引:

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

Mongo能够多快删除所有数据?根据我阅读的内容,TTL过程每60秒运行一次。它每次都会删除多少数据?

将TTL索引添加到大型集合中确实会影响性能。如果您需要在创建TTL时继续查询此集合,则可以考虑最初创建TTL索引,以便实际上不会过期文档。一旦使用TTL创建了索引,您稍后可以调整要待在周围的文档的时间。

创建了该索引后,您可以手动运行查询以删除旧数据,直到您最新到最新,并且能够调整TTL,或者慢慢撞击TTL,以便您'能够控制性能影响。

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

删除操作的时间

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

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

删除过期文档的背景任务每60秒运行一次。结果,文档可能保留在文档到期与背景任务运行之间的期间。

因为拆卸操作的持续时间取决于工作量 在您的Mongod实例中,可能存在过期数据超出一段时间 背景任务之间的60个第二阶段。

最新更新