【问题标题】:Rails: Efficient query for X objects before/after model in ranked listRails:在排名列表中模型之前/之后的 X 对象的有效查询
【发布时间】:2012-01-20 20:01:34
【问题描述】:

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

对象 A,得分 27.7

对象 B,得分 20.3

对象 C,得分 15.3

其中 A 将被视为排名第 1 位,B 为第 2 位,C 为排名列表中的第 3 位。

我正在尝试根据其分数有效地确定任何对象的位置,以及高于/低于该对象的 X 个对象。有没有我可以构建的宝石或查询来做到这一点?我可以加载所有对象并遍历它们,但我想找到一种更有效的方法来执行此操作,因为我有数千个对象。

【问题讨论】:

  • 好点 - PostgreSQL,但如果 NoSQL 解决方案高效/易于实施,我愿意接受。

标签: ruby-on-rails postgresql


【解决方案1】:

这都是关于权衡的(就像这个世界上的一切一样)。

  1. 准确性高于效率。

    最简单的解决方案是将所有记录拉入内存并计算其中的排名。或者您可以编写一个不太复杂的 SQL 查询。

  2. 效率高于准确性。

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

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

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

【讨论】:

  • 我很欣赏关于权衡的讨论,它经过深思熟虑并且提出了很好的观点。但是,我对查询 ActiveRecord 的具体想法更感兴趣。
  • @eDave:我认为您无法在 ActiveRecord 中实现这一点(无需深入到原始 SQL)
猜你喜欢
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多