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

标签 mysql ruby-on-rails json database

我的 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/

相关文章:

mysql - Insert into with select(准备好的语句)

php - Ajax 搜索返回问题

android - Android将位置模型转换为JSON字符串

java - 初始化错误 - 行应为 ":"

mysql - RODBC sqlSave 的问题

php - 如何在cakephp中进行级联

ruby-on-rails - 如何让 puma 将日志发送到标准输出

sql - 将 SQL 用于 rails 参数/值

ruby-on-rails - 使用 Sprockets 生成 javascript list

python - 在 Delphi 中使用 MessagePack 序列化用户定义类型时可能出现编码问题?