数学アルゴリズムを使用して、「ホットな」並べ替えタイプを計算しています。基本的に、時間を考慮した長い多桁の浮動小数点数と、特定の期間内の投票数を生成します。
サーバーの負荷を軽減するために mysql にこれを処理させています。この部分は、私のアプリでは非常に重要です。
これがどのように機能するかについての説明は次のとおりです。http://amix.dk/blog/post/19588
数値: 1134028003 は、アプリのリリース データの秒数を定義する任意の数値です。このように、数値はゼロから始まり、時間が経つにつれてゆっくりと成長し、成長します。
これが私がmysqlのために今持っているものです:
def self.with_hot_ranking
select("resources.*, (
round(
log10(greatest(abs(resources.score),1)) +
if(resources.score > 0, 1, if(resources.score < 0, -1, 0)) *
(UNIX_TIMESTAMP(resources.created_at)-1134028003) /
45000.0
, 7)
) hot_ranking")
end
これは私のインスタンス メソッドであり、テスト目的でのみ使用されます。これも正しいことを確認したいと思います。丸めが早すぎるようで、理由がわかりません
def hot_ranking
# to sort by hot_ranking use the class method with_hot_ranking instead i.e.
# Resource.with_hot_ranking.order('hot_ranking DESC')
s = self.score
order = Math.log10([s.abs, 1].max)
sign = s <=> 0
seconds = epoch_seconds(self.created_at).to_i - 1134028003
(order + sign * seconds / 45000).round_to(7).to_f
end