我有超过6000个具有多个关联的用户行,每行显示超过15列。
每当我调用此动作进行检索时,Heroku似乎会在一段时间后拒绝处理并停止。
我已尝试find_each
但这似乎不起作用,因此我设置了Resque
RedisToGo
。
它似乎可以与其他查询一起使用,这对于创建和更新大量记录特别有用,但我如何有效地将其显示给用户?
我是否会使用Resque Status
这样的内容在currently processing
页面上向用户显示状态,然后在准备就绪时显示?
现实世界的应用程序如何处理这类问题?
答案 0 :(得分:2)
预先加载所有数据的效率低于您可以获得
无论服务器资源的成本如何,这都是糟糕的系统设计。效率最高的&更好的方法是只加载您需要显示的数据:
想象一下,如果Google每次都为您的查询加载了所有结果。它不仅会降低您的体验,还会使服务器超负荷使其无法使用
<强>分页强>
使用分页解决方案会更好:
这两种方式都以类似的方式工作 - 通过应用他们的.page()
&amp;您查询的.per()
方法,gems只返回该页面的数据(如Google)
如果您想provide an ajax pagination solution,那么您将能够创建所有可用数据的感觉,而无需大量开销:
答案 1 :(得分:1)
我认为heroku的超时时间为30秒。可能你的要求不止于此。
你应该留意n + 1个查询。您使用联接或包含使用较少的查询吗?
同样在这种情况下,通常使用分页。如果您不想拥有多个页面,只需使用ajax加载页面即可。也许你需要一个无尽的卷轴。这样你就可以避免长时间的请求,这实际上是一种不好的做法。