【问题标题】:Add Mongo TTL Index to Large Collection将 Mongo TTL 索引添加到大型集合
【发布时间】:2019-07-23 00:04:53
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: mongodb ttl


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      Timing of the Delete Operation

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

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

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

      因为移除操作的持续时间取决于工作量 在您的 mongod 实例中,过期数据可能会存在一段时间 后台任务运行之间的 60 秒间隔。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-03
        • 1970-01-01
        • 2016-03-16
        • 1970-01-01
        • 1970-01-01
        • 2013-11-30
        • 2023-04-05
        • 1970-01-01
        相关资源
        最近更新 更多