我正在我的heroku服务器上优化我的SQL查询,因此我可以根据一个特定请求加快速度。现在我主要考虑尽可能将所有INSERT查询压缩到最少的查询中。
在我的代码的某些时候,我有这个:
jobs.each do |j|
Delayed::Job.enqueue j
end
我发现每次迭代都会向db发送BEGIN,INSERT,COMMIT。那个jobs
数组可以有几个到几百个对象。我找了一种方法来批量插入延迟的作业但找不到任何东西。知道如何实现这个目标吗?
答案 0 :(得分:1)
我一直在使用AR-Extensions将模型中的批量数据插入到数据库中。
那是在Rails 2.3.x上,但要注意现在有不同版本,具体取决于Rails版本:http://www.continuousthinking.com/tags/arext
我不确定Delayed :: Job是如何工作的,但是从你的例子中猜测,我假设它将每个作业的记录插入一个表,然后作为队列。您可以使用AR-Extensions扩展它,以收集所有这些模型并立即插入所有作业。
答案 1 :(得分:1)
我最终将User
对象排入队列,该对象具有jobs
属性。所以1插入而不是jobs.length
插入。