2012-01-20 30 views
2

我有一個模型在排名列表中有一個位置(或得分,一個浮點數)。例如,我有:Rails:排序列表中模型之前/之後的X對象的高效查詢

對象A,得分27.7

對象B,得分20.3

對象C,得分15.3

其中A將被認爲具有位置#1,B是#2和C是排名列表中的#3。

我試圖根據它們的分數有效地確定任何對象的位置,以及位於該對象上方/下方的X個對象。有沒有一個寶石或查詢我可以做到這一點?我可以加載所有的對象並遍歷它們,但是我想找到一個更有效的方法來做這件事,因爲我有成千上萬的對象。

+0

好點 - PostgreSQL,但如果它的效率/易於實現,我可以接受NoSQL解決方案。 – eDave

回答

3

這是關於權衡(這是世界上的一切)。

  1. 精度超過效率。

    最簡單的解決方案是將所有記錄拉入內存並找出排名。或者你可以寫一個不太複雜的SQL查詢。

  2. 效率超過準確性。

    預先計算等級(將其存儲在列中)並運行常規作業以刷新它。採取這個網站。聯賽等級每天更新一次。它的工作速度非常快。 :-)

  3. 準確性和效率超過內存消耗和管理的簡單性。

    設置Redis的實例。它對有序集合進行快速操作。您將支付更復雜的代碼,更多移動部件在您的項目中,並增加內存消耗。

+0

我很欣賞關於權衡的討論,這是深思熟慮,並提出了很好的觀點。但是,我更關心如何查詢ActiveRecord來執行此操作的具體想法。 – eDave

+0

@eDave:我不認爲你可以在ActiveRecord中實現這一點(而不必使用原始SQL) –

相關問題