MongoDB文档中的仪表板计算值与每个网页视图上的重新检索?

时间:2015-03-31 20:56:49

标签: mongodb

如果我在网络应用中有一个页面显示我的数据库中的文档的一些仪表板类型统计信息(计数,每小时,每天创建的文档等),最好是预先计算这些数据并将其存储在单独的文档(并根据需要更新),或假设集合具有适当的索引,是否适合执行查询以在页面的每次加载时检索这些统计信息?

没有必要在每个页面点击/加载时数据必须是最新的,这就是为什么我想要维护我需要在单独的文档中显示的数据可以在页面命中时检索(甚至缓存,每5分钟或类似时间仅重新检索一次)。

1 个答案:

答案 0 :(得分:1)

这是相当广泛的,我觉得你已经确定了关键点。一般来说,您应该考虑以下问题:

  • 您是否需要允许用户应用过滤器?复杂的过滤器通常无法进行预聚合。
  • 相关:是否可能再次查询完全相同的数据?如果不是,则可能需要在不同的粒度级别上进行预聚合(例如,通过创建日/周/月总计并对这些进行求和,而不是单个事件)。
  • 数据的读取与写入的关系是什么?如果写入次数很少,则可以实时保留计数器,而不是使用读取缓存。
  • 您对缓存和未缓存查询的性能要求是什么?快速缓存查询是微不足道的,但却以陈旧数据为代价。使未缓存的查询更快更棘手,并且通常需要类似之前讨论的多级方法 - 如果旧数据超快,但新查询需要几分钟,这通常无济于事。

如果以后(或很少更改)数据无法更改,则缓存效果尤其好,并且查询保持不变,并且有一定的重新发生机会。一个很好的例子是facebook的个人资料,过去几年显然是为每个访客资料组合缓存的。第一次访问很慢,但是......