ruby-on-rails – 使用Sidekiq的并发性导致了一些问题

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 使用Sidekiq的并发性导致了一些问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在我的rails应用程序中使用Sidekiq一次排队50k个工作.我们的游泳池大小设置为9.

工作都是相关的,并做同样的事情.我们有另一个模型,它有一个计数器.在每个作业期间,我们检查该模型是否具有值大于200的列.如果它大于200,我们创建该模型的另一个实例,其值为0并继续作业.但是,由于我们一次运行9个作业,因此所有9个作业同时读取该列的值大于200,并且所有作业都创建新实例,这是不正确的.

解决这个问题的最佳方法是什么?我们基本上希望所有工作都能从最新的价值中读取.

解决方法

我无法发布任何特定代码,因为它将在很大程度上取决于您的数据库类型和设置,但您应该尝试数据库锁定.

工作人员在阅读表时应将其锁定,直到完成创建值为0的新记录.您应该锁定表以供读取,以便其他工作人员需要等到这一个工作人员完成.也可以锁定单独的行,但我不知道它是否适用于您的情况.

猜你在找的Ruby相关文章