在 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 - 存储应用程序配置

Ruby on Rails 中的会话如何工作?

Ruby on rails - 2 种用户类型

Ruby on rails 5.2 - 带有活动存储的背景图像

Windows 中的 Jenkins 和 Ruby On Rails 4

Rails Guides - Ruby on Rails 安全指南