Rails:在排名列表中的模型之前/之后对X对象进行高效查询

时间:2012-01-20 20:01:34

标签: ruby-on-rails postgresql

我的模型在排名列表中有一个位置(或得分,一个浮点数)。例如,我有:

对象A,得分27.7

对象B,得分20.3

对象C,得分15.3

其中A被认为是#1的位置,B是#2,C在排名列表中是#3。

我正在尝试根据他们的分数有效地确定任何对象的位置,以及在该对象上方/下方的X对象。我可以构建一个宝石或查询吗?我可以加载所有对象并遍历它们,但是我想找到一种更有效的方法,因为我有数千个对象。

1 个答案:

答案 0 :(得分:3)

所有关于权衡(就像这个世界上的一切)。

  1. 准确性超过效率。

    最简单的解决方案是将所有记录拉入内存并在那里找出排名。或者你可以编写一个不那么复杂的SQL查询。

  2. 效率高于准确性。

    预先计算排名(将其存储在列中)并运行常规作业以刷新它。拿这个网站。联赛排名每天更新一次。它的工作速度非常快。 : - )

  3. 内存消耗的准确性和效率以及管理的简单性。

    设置Redis的实例。它对已排序的集合具有快速操作。您将使用更复杂的代码,项目中更多移动部件以及增加内存消耗来支付费用。