显示动态数据(如MongoDB中的流行度)的最佳策略

显示动态数据(如MongoDB中的流行度)的最佳策略,mongodb,yii2,Mongodb,Yii2,在我们的应用程序中,我们必须显示最受欢迎的文章,但在趋势、热门、相关等数据的情况下,可能需要相同的策略 我们有两个集合[文章]和[评论],其中文章有多个评论 我们想展示最受欢迎的[文章] 受欢迎程度是基于一些复杂的公式计算的,但我们假设该公式将[文章]视图总数和[评论]总数相加。我们假设,若公式计算了一篇文章的受欢迎程度,那个么它会将所有[文章]考虑在内,从而在其他文章中排名 正如您所见,用户不断增加视图和添加更多评论。每天不同的文章都可能是最受欢迎的 问题如下:如何显示最新数据而不向数据库

在我们的应用程序中,我们必须显示最受欢迎的文章,但在趋势、热门、相关等数据的情况下,可能需要相同的策略

  • 我们有两个集合[文章]和[评论],其中文章有多个评论
  • 我们想展示最受欢迎的[文章]
  • 受欢迎程度是基于一些复杂的公式计算的,但我们假设该公式将[文章]视图总数和[评论]总数相加。我们假设,若公式计算了一篇文章的受欢迎程度,那个么它会将所有[文章]考虑在内,从而在其他文章中排名
  • 正如您所见,用户不断增加视图和添加更多评论。每天不同的文章都可能是最受欢迎的
问题如下:如何显示最新数据而不向数据库发送垃圾查询

  • 我在考虑预定的cron作业(在我们的后端应用程序中),它会每小时更新[文章]的流行度,然后将其保存在文章中。这样,当用户访问页面时,不需要计算任何内容,我们只需处理保存的数据
  • 也有可能构建一个足够快的查询,并根据需求统计受欢迎程度,但我不知道这是否可行

最好的策略是什么?在后台计算数据并使其保持最新,构建高级查询还是其他什么

我不太确定您有什么配置,或者数据集是如何装载的,但是如果您有一个副本集,您可能会向该副本集中添加一个延迟成员,并从中提取统计数据。此外,从一个非常基本的结构(如您的)中提取一些数据似乎对定期运行查询没有问题。实际上,我遇到的问题是,为了按流行程度排序,我必须对每个结果进行计数,然后对其进行排序。我想知道添加流行字段并在cron作业中计算是否比在每次查询执行时计算好。哦,我不使用复制集。实际上,在这里寻找简单的解决方案,因为这不是一个复杂的案例。这听起来也可行,请阅读一些关于MongoDB并发性的内容。