gpt4 book ai didi

mysql - 在 ruby​​ on Rails 中有效连接 JSON 列类型

转载 作者:行者123 更新时间:2023-11-29 15:27:16 25 4
gpt4 key购买 nike

我的 API 响应的查询可能会返回大约 100,000 个称为 MOF 的模型。每个模型都有一个名为“pregen_json”的 json 列,用于缓存模型的当前状态。这是缓存的,因为实时生成 json 太慢(~40 毫秒/模型 * 100,000 个模型 = 1 小时)。这是架构的相关部分(运行 mySQL)+ 代码:

架构:

  create_table "mofs", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
...
t.json "pregen_json"
end

Controller :

        # some filtering of @mofs to respond to search query omitted
render :json => @mofs.pluck(:pregen_json)

根据@mofs [m:s]的长度下载时间

1,000 --> 0:10

10,000 --> 2:00

100,000 --> 7:00

基本上,用户看到 90% 的等待时间没有数据,然后在服务器准备响应后立即发送所有内容。

寻找有关如何加快速度的建议。

最佳答案

通常,为了避免极长的 API 调用,人们会对结果进行分页。客户端请求某个页面(和/或一定数量的结果),服务器就返回该页面。

有很多分页 ruby​​ gem,例如 Will PaginateKaminari这将帮助您做到这一点。

否则,通过使用 limit 和 offset Model.limit(PAGE_SIZE).offset(PAGE_SIZE * page_number) 自己实现基本分页是相当简单的。

您可能想要添加按钮,以便客户端可以选择他想要加载的页面。如果您希望加载所有内容,那么您可以创建一个循环,不断请求下一页,直到不再返回数据。这样做的优点是数据会随着时间的推移而加载,而不是在很长一段时间后一次性加载。

除此之外,令我惊讶的是获取 100,000 条记录需要 7 分钟。您可能只想将必要的信息放入预先生成的 JSON 中,以限制从数据库提取到客户端的数据量。

我希望这可以帮助您做出决定。祝你好运!

关于mysql - 在 ruby​​ on Rails 中有效连接 JSON 列类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58998882/

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