【问题标题】:Mongo TTL vs Capped collections for efficiencyMongo TTL 与 Capped 集合以提高效率
【发布时间】:2015-12-09 23:13:24
【问题描述】:

我正在向集合中插入数据以存储用户历史记录(大约 100 条/秒),并使用聚合框架查询最后一小时的数据(每分钟一次)

为了让我的收藏保持最佳状态,我正在考虑两种可能的选择:

  1. 在创建日期创建一个带有 TTL 索引的标准集合
  2. 制作一个有上限的集合并查询最后一小时的数据。

哪种解决方案更有效?即对 mongo 盒的要求较低 - 在 I/O、内存使用、CPU 等方面(我目前有 1 个主节点和 1 个辅助节点,还有一些隐藏节点。以防万一有所不同)

(我可以在我的上限集合中添加一点缓冲区以平均存储 3-4 小时的数据,如果用户在某些时候变得非常忙碌而无法获得完整小时的数据)

【问题讨论】:

  • 在你尝试之前你不会知道。有太多因素在起作用。

标签: mongodb


【解决方案1】:

使用有上限的集合会更有效。 Capped 集合通过不允许删除文档或以增加其大小的方式更新它们来保留记录的顺序,因此它始终可以附加到集合的当前末尾。这使得插入比使用标准集合更简单、更有效。

一个 TTL 索引需要为 TTL 字段维护一个额外的索引,该索引需要在每次插入时更新,这会额外降低插入速度(当您还要在使用上限集合时的时间戳)。此外,TTL 由后台作业强制执行,该作业定期运行并占用性能。该作业是低优先级的,当有更多高优先级任务要做时,允许 MongoDB 延迟它。这意味着您不能依赖准确执行的 TTL。因此,当时间间隔的准确度很重要时,即使您设置了 TTL,您也必须在查询中包含时间间隔。

上限集合的最大缺点是很难预测它们真正需要多大。如果您的应用程序扩展并且您收到比预期更多或更大的文档,您将开始丢失数据。通常,您应该只在过早丢失旧文档没什么大不了的情况下使用上限集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2018-01-31
    相关资源
    最近更新 更多