0

我正在阅读这个 Stack Overflow 问题,想知道在 Ruby on Rails 应用程序中存储数据的流行度值的常见做法是什么?

我的想法是有 2 个模型,一个常规模型和一个流行模型,该模型具有按流行度公式排序的常规模型的数据。cronjob 将在某个特定时间间隔填充后一个模型。

有什么想法吗?

4

4 回答 4

0

这取决于具体情况,但我认为您可以将流行度信息作为列存储在模型中。例如,如果您有想要按受欢迎程度排序的问题,则可以运行迁移AddPopularityToQuestions popularity:float

然后,您可以按设定的时间间隔运行脚本(例如,使用Each)来更新每个问题的流行度值。但是,如果没有那么多活动,那么每当发生会改变它的事情时更新问题的流行度可能更有意义。例如,如果流行度主要由投票决定,您可以在有新投票时更新问题的流行度。

于 2013-07-03T18:40:32.240 回答
0

使用一个 rake 任务来更新流行度并使用heroku scheduler运行它。

于 2013-07-04T13:07:38.287 回答
0

我会使用模型中的流行度评分字段和返回流行项目的范围,例如:

def popular(count = 10)
  order('popularity_score DESC').limit(count)
end

根据评分算法,我可能会添加其他模型来保存统计信息

class model_stats
  attr_accessor :statistic, :value
  belongs_to :model
end

这可以包含视图、up_votes 或共享等统计信息,这些统计信息将使用您首选的流行度算法定期汇总,并将结果保存到流行度评分中。(作为由 cron 或类似任务启动的 rake 任务进行管理)

我会确保popularity_score 是一个索引字段!

于 2013-07-04T22:15:47.367 回答
0

我会想象流行度是统计的。例如,过去 7 天的浏览量等。您可能想要使用的度量可能会发生变化,甚至允许用户选择要使用的公式。

在这种情况下,您需要一个属于常规模型的统计模型,并且您可以加入这些表以获得您感兴趣的流行度测量值。

于 2013-07-04T16:17:10.757 回答