0

我有这个仪表板(报告),它基本上执行繁重的 sql 查询并将其结果显示在表格网格上,非常标准的东西。

但是,有时,由于数据量大和 sql 复杂性,查询非常繁重,浏览器会一直挂起,直到用户出错。

我没有 n+1 查询,并尝试添加分页,但我仍然面临这个问题。

对此最好的方法是什么?使用后台作业?

有没有办法在后台执行此查询,以防止请求失败?

我尝试实现一个 sidekiq 工作人员,但我不确定在工作完成后是否可以从工作人员那里获得结果。

@results = ActiveRecord::Base
   .connection
   .select_all(query)
   .map do |record|
    Hashie::Mash.new(record)
   end

query包含对字符串的 SQL 查询。

有什么见解吗?

4

1 回答 1

0

工人是异步的。我不知道你是否需要在这里,但正因为如此。worker 和您的主进程(服务器)不在同一个线程上,因此它们无法真正进行通信

但是您可以找到一种方法在同一个工作人员中处理它,甚至将结果写入可以查找的文件中,或者在主线程上的同一服务器上发送请求(但由于数据量很大,它可能慢)等...

也许像缓存服务器这样的缓存服务器redis可以帮助临时存储它并向主线程发送一个请求,告诉他在 Redis 服务器上有一些东西要查看

于 2020-01-23T22:57:17.663 回答