延迟作业批量插入

5
我正在优化我的SQL查询,以便在一个特定的请求上加快速度,在我的Heroku服务器上完成这个过程。现在我主要在尽可能地压缩所有的INSERT查询。
在我的代码的某个地方,我有以下内容:
  jobs.each do |j|
    Delayed::Job.enqueue j
  end

我发现每次迭代都会向数据库发送BEGIN、INSERT和COMMIT。这个jobs数组中可能有几个对象,也可能有几百个对象。我一直在寻找一种批量插入延迟作业的方法,但没有找到任何东西。你有什么想法吗?

2个回答

1

我已经长时间使用AR-Extensions将模型中的批量数据插入数据库。

不过那是在Rails 2.3.x上,要注意现在根据Rails版本有不同的版本:http://www.continuousthinking.com/tags/arext

我不确定Delayed::Job是如何工作的,但从你的示例猜测,我会认为它会将每个作业插入一个表中的记录,然后用作队列。您可以使用AR-Extensions扩展该功能,以收集所有这些模型并一次性插入所有作业。


1

最终我排队放置了我的对象,该对象有一个属性。因此只需要1次插入而不是jobs.length次插入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接