Rails Upload 文件的速度很慢,是什么原因呢?

roam · 2012年11月08日 · 最后由 allenwei 回复于 2012年11月11日 · 4318 次阅读

最近做了一个 upload 的功能,导入的是 CSV 文件,使用的是 rails 内嵌的 CSV 方法,导入的时候会对数据进行处理并且保存,当 文件数据有上千条的时候,要花费很长的时间,请问是代码的问题还是方法问题呢,还是数据库的问题,如何改善速度呢?

首先,你要分开上传和数据处理这两个任务,你的 controller 在文件上传之后,将 csv 保存下来之后,就可以返回 response 给客户端了,数据处理应当放到另外一个 process(后台)中去运行,否则有可能导致 timeout, 可以借助的 gem 有 delayed_job 或者 resque

#1 楼 @leomayleomay 具体做法应该是怎么样的呢?能给一个样例么。

#2 楼 @lgn21st #1 楼 @leomayleomay 谢了,体验确实完全改变了。请问 delayed_job 的 hook before later 什么的应该怎么用呢?我想在所有数据处理完以后给出一个 result,这样应该如何实现比较好呢?

@Roam 这些 hooks 都是在 server side 执行的,如何让你的 client 知道执行的结果?推荐阅读 juggernaut 或者 websocket 相关资料

实时导入,实时处理,这就和需要 100 天数据,然后 100.times{ 访问数据库,一条一条获取 } 是一个问题。 处理耗时任务,需要异步,在另外的线程中处理,告诉用户“正在处理,请稍等”就可以了,然后提供一个界面供他查询处理结果。

最简单的方法用 ajax polling,把进度保存在数据库里,ajax polling 去取结果 进阶办法,websocket

需要 登录 后方可回复, 如果你还没有账号请 注册新账号