我有这个仪表板(报告(,它基本上执行繁重的SQL查询并将其结果显示在表格网格上,这是非常标准的东西。
但是,有时,由于大量数据和 sql 复杂性,查询会很繁重,并且浏览器只是挂起,直到用户收到错误。
我没有 n+1 个查询,并尝试添加分页,但我仍然面临这个问题。
对此最好的方法是什么? 使用后台作业?
有没有办法在后台执行此查询,以防止请求失败?
我尝试实现 sidekiq 工作线程,但我不确定在工作完成后是否可以从工作线程那里返回结果。
@results = ActiveRecord::Base
.connection
.select_all(query)
.map do |record|
Hashie::Mash.new(record)
end
query
包含对字符串的 SQL 查询。
有什么见解吗?
工作线程是异步的。我不知道你是否需要在这里这样做,但正因为如此。worker和你的mains进程(服务器(不在同一线程上,所以它们无法真正通信
但是你可以找到一种方法在同一个worker中处理它,甚至将结果写在一个可以查找的文件中,或者在主线程上的同一服务器上发送一个请求(但由于数据繁重,它可能会变慢(等等。
也许像redis
这样的缓存服务器可以帮助临时存储它并向主线程发送请求,告诉他 Redis 服务器上有一些东西可以查看