【问题标题】:Do sidekiq jobs run inside a large transaction?sidekiq 作业是否在大型事务中运行?
【发布时间】:2015-06-10 19:53:06
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby sidekiq


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2014-11-04
        • 2015-04-27
        • 2017-01-08
        • 2021-11-15
        • 1970-01-01
        • 2020-12-19
        • 2017-09-29
        • 2012-10-29
        • 1970-01-01
        相关资源
        最近更新 更多