所以可能没有办法解决这个问题,但我想我会问:
我设置了Postgresql数据库。第一个表包含重放,每个重播有10个独特的玩家(有很多关系)。我想根据我的搜索呈现一个JSON,其中包含与玩家的重放。然而,我正在进行大量的重播(2000年) - 这些重播都有10名玩家,这意味着要搜索20,000名玩家。
这是索引搜索目前的样子:
def index
@replays = Replay.where(map_id: params['map_id'].to_i)
@replays = @replays.reverse
render json: @replays[0..2000].to_json(include: [:players])
end
搜索需要很长时间:
Completed 200 OK in 639596ms (Views: 42.1ms | ActiveRecord: 329252.3ms)
有没有更好的方法可以搜索和呈现不会花费这么久的JSON?值得注意的是,只需要搜索2k重放,20k播放器,甚至是玩家的单个特定重播只需要几秒钟(第一次搜索本身也只需要几秒钟),所以我认为这样做了。卷量问题。
答案 0 :(得分:2)
尝试加载重播
replays = Replay.last_two_thousands_by_map_id(params[:map_id])
render json: replays.to_json(include: [:players])
# replay.rb model
def self.last_two_thousands_by_map_id(map_id)
includes(:players).where(map_id: map_id).order(id: :desc).limit(2000)
end