首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongo TTL与上限集合的效率比较

Mongo TTL与上限集合的效率比较
EN

Stack Overflow用户
提问于 2015-12-09 14:38:07
回答 1查看 1.8K关注 0票数 4

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

为了使我的收藏保持最佳效果,我正在考虑两种可能的选择:

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

哪个是更有效的解决方案?也就是说,对芒果盒的要求较低--在I/O、内存使用、CPU等方面(我目前有一个主节点和一个次要节点,有几个隐藏节点。以防万一会产生影响)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-09 14:52:59

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

TTL索引需要为TTL字段维护一个额外的索引,该索引需要使用每次插入更新,这是插入的额外减速(当然,这一点与使用上限集合时还会在时间戳上添加索引时无关)。此外,TTL是由后台作业强制执行的,后台作业定期运行并承担性能。作业是低优先级的,当有更多高优先级的任务要做时,MongoDB可以延迟它。这意味着您无法准确地依赖TTL的强制执行。因此,当时间间隔的精确性很重要时,即使您有TTL集,也必须在查询中包含时间间隔。

封顶系列的最大缺点是很难预测它们到底需要有多大。如果您的应用程序扩展,并且收到的文档比预期的多或大得多,您将开始丢失数据。通常,您应该只在过早丢失旧文档的情况下才使用有上限的集合。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34181516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档