2013-02-14 34 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