在 Ruby on Rails 应用程序中存储数据流行度
Posted
技术标签:
【中文标题】在 Ruby on Rails 应用程序中存储数据流行度【英文标题】:Storing data popularity in a Ruby on Rails app 【发布时间】:2013-06-19 06:28:48 【问题描述】:我正在阅读 this Stack Overflow question 并想知道在 Ruby on Rails 应用程序中存储数据的流行度值的常见做法是什么?
我的想法是有 2 个模型,一个 regular 模型和一个 popular 模型,它的数据来自 regular 模型,按 人气公式。 cronjob 会以某个特定的时间间隔填充后一个模型。
有什么想法吗?
【问题讨论】:
为什么不能在同一模型的列中存储人气? 【参考方案1】:这取决于具体情况,但我认为您可以将流行度信息作为列存储在模型中。例如,如果您有想要按受欢迎程度排序的问题,则可以运行迁移 AddPopularityToQuestions popularity:float
。
然后,您可以按设定的时间间隔运行脚本(例如使用Whenever)来更新每个问题的流行度值。但是,如果没有那么多活动,那么每当发生会改变问题的事情时更新问题的流行度可能更有意义。例如,如果流行度主要由投票决定,那么只要有新投票,您就可以更新问题的流行度。
【讨论】:
【参考方案2】:使用一个 rake 任务来更新流行度并使用 heroku scheduler 运行它。
【讨论】:
【参考方案3】:我认为流行度是统计的。例如,过去 7 天的浏览量等。您可能想要使用的度量可能会发生变化,甚至允许用户选择要使用的公式。
在这种情况下,您需要一个属于常规模型的统计模型,并且您可以加入表格以获得您感兴趣的流行度测量。
【讨论】:
【参考方案4】:我会使用模型中的流行度评分字段和返回流行项目的范围,例如:
def popular(count = 10)
order('popularity_score DESC').limit(count)
end
根据评分算法,我可能会添加额外的模型来保存统计数据
class model_stats
attr_accessor :statistic, :value
belongs_to :model
end
这可能包含视图、up_votes 或共享等统计信息,这些统计信息将使用您首选的流行度算法定期汇总,并将结果保存到流行度_score。 (作为由 cron 或类似任务启动的 rake 任务进行管理)
我会确保 Popularity_score 是一个索引字段!
【讨论】:
以上是关于在 Ruby on Rails 应用程序中存储数据流行度的主要内容,如果未能解决你的问题,请参考以下文章
Ruby on rails 5.2 - 带有活动存储的背景图像