sidekiq jobs 运行 是在大交易中吗?

Do sidekiq jobs run inside a large transaction?

我在 Web 应用程序上有一个大型记录导入作业 运行ning。导入是由 PORO 进行的 运行,它计算需要导入多少个对象,并将该数字除以当前对象所在的索引,从而为我提供了一种计算完成百分比的简洁方法。在它完成这个计算之后,我将这个百分比保存到数据库中以便对其进行轮询并让用户知道这个导入已经走了多远。

在整个作业结束之前,sidekiq 似乎不允许这些数据库写入接触数据库,给我留下了这个问题:

是否每个 sidekiq 作业都完全包含在事务中?

(我并不懒惰,我只是没有太多时间自己浏览代码并发现这一点。)

没有。您可以使用 Model.transaction { } 在 perform 方法中控制 DB 事务边界。 Sidekiq 从不接触数据库。

不,Sidekiq 本身并没有将其作业包装在事务中。确保您没有将循环或调用循环的方法包装在事务中。