在Heroku上的Rails中一次显示大量记录

时间:2014-03-02 00:39:33

标签: ruby-on-rails ruby heroku ruby-on-rails-4 resque

我有超过6000个具有多个关联的用户行,每行显示超过15列。

每当我调用此动作进行检索时,Heroku似乎会在一段时间后拒绝处理并停止。

我已尝试find_each但这似乎不起作用,因此我设置了Resque RedisToGo

它似乎可以与其他查询一起使用,这对于创建和更新大量记录特别有用,但我如何有效地将其显示给用户?

我是否会使用Resque Status这样的内容在currently processing页面上向用户显示状态,然后在准备就绪时显示?

现实世界的应用程序如何处理这类问题?

2 个答案:

答案 0 :(得分:2)

预先加载所有数据的效率低于您可以获得

无论服务器资源的成本如何,这都是糟糕的系统设计。效率最高的&更好的方法是只加载您需要显示的数据:

  

想象一下,如果Google每次都为您的查询加载了所有结果。它不仅会降低您的体验,还会使服务器超负荷使其无法使用


<强>分页

使用分页解决方案会更好:

这两种方式都以类似的方式工作 - 通过应用他们的.page()&amp;您查询的.per()方法,gems只返回该页面的数据(如Google)

如果您想provide an ajax pagination solution,那么您将能够创建所有可用数据的感觉,而无需大量开销:

enter image description here

答案 1 :(得分:1)

我认为heroku的超时时间为30秒。可能你的要求不止于此。

你应该留意n + 1个查询。您使用联接或包含使用较少的查询吗?

同样在这种情况下,通常使用分页。如果您不想拥有多个页面,只需使用ajax加载页面即可。也许你需要一个无尽的卷轴。这样你就可以避免长时间的请求,这实际上是一种不好的做法。