【发布时间】:2016-07-31 12:20:58
【问题描述】:
我有一个应用程序,它在几个页面(请求)上进行大量计算。 Web 界面发送 AJAX 请求。计算有时需要大约 2-5 分钟。问题是,此时 AJAX 请求超时。
我们当然可以增加门户网站的超时时间,但这听起来不是正确的解决方案。此外,为了提高性能:
- 删除了 N+1/重复查询
- 实现缓存
这里还可以做些什么来减少计算时间?
另外,如果还需要更长的时间,我正在考虑以下解决方案:
- 预先进行计算并将其存储在数据库中。所以当实际请求来的时候,就不需要计算了。 (对这种方法感到担忧。因为我们将不得不修改/擦除并重新计算这些数据,只要有一些应用程序逻辑发生变化。)
- 当应用程序启动/数据被修改时,将整个数据加载到缓存中。但是第一次必须进行计算。此外,当应用程序启动时,不能将整个数据保存在缓存中。所以需要根据需要将其存储在缓存中。
- 也许,做一些像 Angular promise 这样的事情,当响应来自服务器时,promise 就会得到满足。
我们有没有其他方法可以有效地做到这一点?
更新: 根据用户输入,计算可能会在几秒钟内发生。而且可能需要2-5分钟。场景是,用户导入一个 excel。 excel已被解析并保存在数据库中。现在在另一个页面上,用户希望查看对导入数据(已通过后台作业保存到数据库)进行少量计算得出的报告/分析图。计算必须与许多因素一起完成,因此不想将其保存在 DB 中(如上所述)。此外,当用户请求报告/分析图表时,告诉他图表将在某个时间后显示是不好的体验。您将收到电子邮件/通知等。
【问题讨论】:
-
可以并行处理任何计算吗? Ruby 的并发 gem 比较容易使用,并且可以使用并发线程来提高性能。
-
必须检查一下。但是整个计算结果必须合并然后作为响应发送。另一件事是,我们如何优化查询,因为我们必须从许多表中获取数据。每个并行进程会单独查询吗?
标签: ruby-on-rails performance ruby-on-rails-4 caching elasticsearch