gpt4 book ai didi

ruby-on-rails - Ruby on Rails Postgres/Active Record 搜索优化

转载 作者:行者123 更新时间:2023-11-29 14:34:13 25 4
gpt4 key购买 nike

所以可能没有办法解决这个问题,但我想我会问:

我设置了一个 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 玩家,甚至是与玩家的单个特定重播只需要几秒钟(第一次搜索本身也只需要几秒钟)所以我认为这是一个数量问题。

最佳答案

尝试预先加载你的重播

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

关于ruby-on-rails - Ruby on Rails Postgres/Active Record 搜索优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47475634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com