延迟作业批量插入

时间:2011-02-01 23:06:49

标签: sql ruby-on-rails optimization delayed-job

我正在我的heroku服务器上优化我的SQL查询,因此我可以根据一个特定请求加快速度。现在我主要考虑尽可能将所有INSERT查询压缩到最少的查询中。

在我的代码的某些时候,我有这个:

  jobs.each do |j|
    Delayed::Job.enqueue j
  end

我发现每次迭代都会向db发送BEGIN,INSERT,COMMIT。那个jobs数组可以有几个到几百个对象。我找了一种方法来批量插入延迟的作业但找不到任何东西。知道如何实现这个目标吗?

2 个答案:

答案 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插入。