我将数据插入到集合中以存储用户历史记录(大约100项/秒),并使用聚合框架查询最后一小时的数据(每分钟一次)
为了使我的收藏保持最佳效果,我正在考虑两种可能的选择:
哪个是更有效的解决方案?也就是说,对芒果盒的要求较低--在I/O、内存使用、CPU等方面(我目前有一个主节点和一个次要节点,有几个隐藏节点。以防万一会产生影响)
(我可以在我的上限集合中添加一点缓冲区来存储平均3-4个小时的数据,而且如果用户在某些时候非常忙,无法获得完整的数据)
发布于 2015-12-09 14:52:59
使用有上限的集合将更有效。有上限的集合保留记录的顺序,不允许删除文档或以增加其大小的方式更新它们,因此可以始终将其追加到集合的当前端。这使得插入比使用标准集合更简单、更有效。
TTL索引需要为TTL字段维护一个额外的索引,该索引需要使用每次插入更新,这是插入的额外减速(当然,这一点与使用上限集合时还会在时间戳上添加索引时无关)。此外,TTL是由后台作业强制执行的,后台作业定期运行并承担性能。作业是低优先级的,当有更多高优先级的任务要做时,MongoDB可以延迟它。这意味着您无法准确地依赖TTL的强制执行。因此,当时间间隔的精确性很重要时,即使您有TTL集,也必须在查询中包含时间间隔。
封顶系列的最大缺点是很难预测它们到底需要有多大。如果您的应用程序扩展,并且收到的文档比预期的多或大得多,您将开始丢失数据。通常,您应该只在过早丢失旧文档的情况下才使用有上限的集合。
https://stackoverflow.com/questions/34181516
复制相似问题