我正在阅读这个 Stack Overflow 问题,想知道在 Ruby on Rails 应用程序中存储数据的流行度值的常见做法是什么?
我的想法是有 2 个模型,一个常规模型和一个流行模型,该模型具有按流行度公式排序的常规模型的数据。cronjob 将在某个特定时间间隔填充后一个模型。
有什么想法吗?
我正在阅读这个 Stack Overflow 问题,想知道在 Ruby on Rails 应用程序中存储数据的流行度值的常见做法是什么?
我的想法是有 2 个模型,一个常规模型和一个流行模型,该模型具有按流行度公式排序的常规模型的数据。cronjob 将在某个特定时间间隔填充后一个模型。
有什么想法吗?
这取决于具体情况,但我认为您可以将流行度信息作为列存储在模型中。例如,如果您有想要按受欢迎程度排序的问题,则可以运行迁移AddPopularityToQuestions popularity:float
。
然后,您可以按设定的时间间隔运行脚本(例如,使用Each)来更新每个问题的流行度值。但是,如果没有那么多活动,那么每当发生会改变它的事情时更新问题的流行度可能更有意义。例如,如果流行度主要由投票决定,您可以在有新投票时更新问题的流行度。
使用一个 rake 任务来更新流行度并使用heroku scheduler运行它。
我会使用模型中的流行度评分字段和返回流行项目的范围,例如:
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 是一个索引字段!
我会想象流行度是统计的。例如,过去 7 天的浏览量等。您可能想要使用的度量可能会发生变化,甚至允许用户选择要使用的公式。
在这种情况下,您需要一个属于常规模型的统计模型,并且您可以加入这些表以获得您感兴趣的流行度测量值。