2013-02-14 73 views
0

我需要使用Mongoid對Rails應用程序中的帖子進行排名,我正在尋找關於如何有效準確地完成它的輸入。Rails中的排序算法優化

現在,我製作它的方式效率非常低。

基於這樣的方法現在,我整理模式:

def hotness 
    return (self.confidence*(self.popularity+0.3))/Math.sqrt((Time.now - Time.at(self.created_at))) 
end 

於是我根據辣味我對數組排序並打印該頁面。這是一種錯誤的方式,現在只是沒有發生性能問題。

我不太確定怎樣才能更好地實現它。

還有其他函數不需要時間調用,我可以想象不同的方法來做這些,但仍然喜歡輸入。優化對我很重要。

非常感謝提前。如有需要,我可以澄清任何事情。

+0

你到底在找什麼?一種不同類型的排名算法?只改進性能而不改變實際行爲? – 2013-02-14 23:01:53

+0

所以你想要在Mongoid查詢中進行排序? – PinnyM 2013-02-14 23:10:25

+0

我想知道是否有更有效的方法來返回結果。最好的做法是將這個結果放到一個字段中,然後定期更新。這似乎是一個可能的解決方案,那麼我只需要查詢一個可排序的數字,但我正在尋找任何可以幫助我做出正確選擇的輸入。 – spitfire109 2013-02-14 23:20:20

回答

0

繼續上面的評論 - 如果這是可以在字段中緩存的結果,定期更新或保存模型 - 那麼這是最好的方法(就查詢性能而言在MongoDB中)。

所以你最終與東西沿着這些路線:

class Post 
    include Mongoid::Document 

    field :hotness, :type => Float, :default => 0 
    field :confidence, :type => Float, :default => 0 
    field :popularity, :type => Float, :default => 0 

    before_save :refresh_hotness 

    scope :hottest, desc(:hotness) 

    protected 
    def refresh_hotness 
    self.hotness = (self.confidence*(self.popularity+0.3))/Math.sqrt((Time.now - Time.at(self.created_at))) 
    end 
end 

然後,你可以搶下令,「最熱門」的職位與Post.hottest