この Stack Overflow の質問を読んでいて、Ruby on Rails アプリケーションでデータの人気値を保存する一般的な方法は何だろうと考えていました。
私の考えでは、レギュラーモデルと、レギュラーモデルのデータを人気の式でソートした人気モデルの2つのモデルを用意することを考えています。cronjob は、特定の間隔で後者のモデルにデータを取り込みます。
何かご意見は?
この Stack Overflow の質問を読んでいて、Ruby on Rails アプリケーションでデータの人気値を保存する一般的な方法は何だろうと考えていました。
私の考えでは、レギュラーモデルと、レギュラーモデルのデータを人気の式でソートした人気モデルの2つのモデルを用意することを考えています。cronjob は、特定の間隔で後者のモデルにデータを取り込みます。
何かご意見は?
1 つの rake タスクを使用して人気を更新し、heroku スケジューラーで実行します。
内容にもよるでしょうが、人気情報をカラムとしてモデルに格納できると思います。たとえば、人気順に並べ替えたい質問がある場合は、移行を実行できますAddPopularityToQuestions popularity:float
。
次に、設定した間隔でスクリプトを実行して (例: Whenを使用)、各質問の人気値を更新できます。ただし、それほど多くのアクティビティがない場合は、質問の人気度を変更する何かが発生するたびに、質問の人気度を更新する方が理にかなっている場合があります。たとえば、人気度が主に投票によって決まる場合、新しい投票があるたびに質問の人気度を更新できます。
モデルに Popular_Score フィールドを使用し、人気のあるアイテムを返すスコープを使用します。たとえば、次のようになります。
def popular(count = 10)
order('popularity_score DESC').limit(count)
end
スコアリング アルゴリズムによっては、統計を保持するために追加のモデルを追加する場合があります
class model_stats
attr_accessor :statistic, :value
belongs_to :model
end
これは、好みの人気アルゴリズムを使用して定期的に集計され、その結果がpopular_scoreに保存される、ビュー、up_votes、共有などの統計を保持できます。(cron などで開始される rake タスクとして管理)
私なら、popular_score がインデックス付きフィールドであることを確認します!
人気は統計的なものだと思います。たとえば、過去 7 日間のビューなどです。使用する測定値は変更される可能性があり、使用する数式をユーザーが選択できるようになる場合もあります。
この場合、通常のモデルに属している統計モデルが必要であり、テーブルを結合して、関心のある人気測定値を取得できます。