Ruby on rails Rails中的排序算法优化

Ruby on rails Rails中的排序算法优化,ruby-on-rails,ruby,ruby-on-rails-3,mongodb,mongoid,Ruby On Rails,Ruby,Ruby On Rails 3,Mongodb,Mongoid,我需要使用Mongoid对Rails应用程序中的帖子进行排名,我正在寻找有关如何高效准确地进行排名的信息 现在,我编造的方式效率很低 现在,我正在基于以下方法对模型进行排序: def hotness return (self.confidence*(self.popularity+0.3))/Math.sqrt((Time.now - Time.at(self.created_at))) end 然后我根据热度对数组进行排序,并将其打印到页面上。这是一种错误的做法,而现在的表现根本就没有发

我需要使用Mongoid对Rails应用程序中的帖子进行排名,我正在寻找有关如何高效准确地进行排名的信息

现在,我编造的方式效率很低

现在,我正在基于以下方法对模型进行排序:

def hotness
  return (self.confidence*(self.popularity+0.3))/Math.sqrt((Time.now - Time.at(self.created_at)))
end
然后我根据热度对数组进行排序,并将其打印到页面上。这是一种错误的做法,而现在的表现根本就没有发生

不过,我真的不确定有什么更好的方法来解决这个问题

还有其他不需要调用时间的函数,我可以想象不同的方法来实现这些功能,但仍然需要输入。优化对我来说很重要


先谢谢你。如果需要的话,我可以澄清任何事情。

根据您上面的评论,如果这是一种可以缓存在字段中的结果,并且可以定期更新,或者在保存模型时缓存,那么这是最好的方法(就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.horst

抓取订购的“热门”帖子。你到底在找什么?一种完全不同的排序算法?只是在不改变实际行为的情况下提高性能?那么您想在Mongoid查询中进行排序吗?我想知道是否有比这更有效的方法返回结果。最好的做法是将此结果放入一个字段,然后定期更新该字段吗?这似乎是一个可能的解决方案,那么我只需要查询一个可排序的数字,但我正在寻找任何可以帮助我做出正确选择的输入。