首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rails中高效地连接JSON列类型

在rails中高效地连接JSON列类型
EN

Stack Overflow用户
提问于 2019-11-22 17:13:33
回答 1查看 34关注 0票数 0

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

模式:

代码语言:javascript
复制
  create_table "mofs", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
    ...
    t.json "pregen_json"
  end

主计长:

代码语言:javascript
复制
        # 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%的等待时间,然后在服务器准备响应后立即发送所有内容。

寻找如何加快这一进程的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-22 19:04:40

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

有许多分页红宝石,如威尔·帕格纳卡米纳里,将帮助您这样做。

否则,使用限制和偏移Model.limit(PAGE_SIZE).offset(PAGE_SIZE * page_number)实现基本分页是相当简单的。

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

除此之外,我感到惊讶的是,创造10万记录需要7分钟。您可能只想在预先生成的JSON中添加必要的信息,以限制从数据库中提取到客户端的数据量。

希望这能帮你做决定。祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58998882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档