0
我正在使用數學算法來計算'whats hot'排序類型。它基本上會產生一個很長的數字浮點數,它考慮到時間以及給定時間範圍內的投票數。這個數學轉換看起來正確嗎? (ruby - > mysql)
我讓MySQL處理這個問題,以減少我的服務器上的負載,我想確保我不會錯過任何東西。這部分對我的應用程序非常重要。
下面是它應該如何工作的描述:http://amix.dk/blog/post/19588
數量:1134028003僅僅是定義的秒數爲應用程序的發佈DAT任意數,這樣的數字在零開始,隨着時間的推移,他們會慢慢成長,成長壯大。
這就是我現在的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
你應該爲它寫測試。測試一般值和角落案例。 – 2012-07-10 18:57:49