我有一个数据库,有 6500 个players
,每个玩家平均有 15 场比赛results
。
用例
我想生成一个玩家列表,按他们的奖金总和(结果表中的一个字段)排序。我更喜欢它在某种范围内,所以我还可以过滤玩家所在国家/地区的列表等。
表现
我看过提到cache_counter
性能领域的帖子。就我而言,我有数千条结果记录(75.000+),所以我不希望每次有人访问生成的列表时都进行计算。
问题
解决这个问题的最佳模式是什么?以及如何实现它?
楷模
class Player < ActiveRecord::Base
has_many :results
end
class Result < ActiveRecord::Base
belongs_to :player
end
模式
create_table "players", :force => true do |t|
t.string "name"
t.string "nationality"
end
create_table "results", :force => true do |t|
t.integer "player_id"
t.date "event_date"
t.integer "place"
t.integer "prize"
end
更新
我想要完成的是达到我可以使用的程度:
@players = Player.order_by_prize
和
@players = Player.filter_by_country('USA').order_by_prize('desc')