我将数据插入到集合中以存储用户历史记录(大约 100 项/秒),并使用聚合框架查询最后一小时的数据(每分钟一次)
为了使我的收藏保持最佳状态,我正在考虑两种可能的选择:
哪个是更有效的解决方案?即对 mongo 盒的要求较低 - 在 I/O、内存使用、CPU 等方面(我目前有 1 个主节点和 1 个辅助节点,还有一些隐藏节点。以防万一)
(我可以在我的上限集合中添加一些缓冲区来平均存储 3-4 小时的数据,如果用户在某些时候变得非常忙而无法获取完整小时的数据)
最佳答案
使用有上限的集合会更有效率。上限集合通过不允许删除文档或以增加其大小的方式更新它们来保留记录的顺序,因此它始终可以附加到集合的当前末尾。这使得插入比标准集合更简单、更有效。
TTL-index 需要为 TTL-field 维护一个额外的索引,该索引需要随每次插入更新,这是对插入的额外减慢(这点当然无关,当您在使用时还要在时间戳上添加索引时一个上限集合)。此外,TTL 由后台作业强制执行,该作业定期运行并占用性能。该作业是低优先级的,当有更多高优先级任务要做时,允许 MongoDB 延迟它。这意味着您不能依赖于准确执行的 TTL。因此,当时间间隔的准确准确性很重要时,即使您设置了 TTL,您也必须在查询中包含时间间隔。
上限集合的最大缺点是很难预测它们真正需要多大。如果您的应用程序扩展并且您收到比预期更多或更大的文档,您将开始丢失数据。您通常应该只在过早丢失旧文档不是什么大问题的情况下才使用上限集合。
关于mongodb - Mongodb TTL 与 Capped 集合以提高效率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34181516/