ruby-on-rails – 使用Sidekiq的并发性导致了一些问题
发布时间:2020-12-17 01:18:26 所属栏目:百科 来源:网络整理
导读:我在我的rails应用程序中使用Sidekiq一次排队50k个工作.我们的游泳池大小设置为9. 工作都是相关的,并做同样的事情.我们有另一个模型,它有一个计数器.在每个作业期间,我们检查该模型是否具有值大于200的列.如果它大于200,我们创建该模型的另一个实例,其值为0
我在我的rails应用程序中使用Sidekiq一次排队50k个工作.我们的游泳池大小设置为9.
工作都是相关的,并做同样的事情.我们有另一个模型,它有一个计数器.在每个作业期间,我们检查该模型是否具有值大于200的列.如果它大于200,我们创建该模型的另一个实例,其值为0并继续作业.但是,由于我们一次运行9个作业,因此所有9个作业同时读取该列的值大于200,并且所有作业都创建新实例,这是不正确的. 解决这个问题的最佳方法是什么?我们基本上希望所有工作都能从最新的价值中读取. 解决方法
我无法发布任何特定代码,因为它将在很大程度上取决于您的数据库类型和设置,但您应该尝试数据库锁定.
工作人员在阅读表时应将其锁定,直到完成创建值为0的新记录.您应该锁定表以供读取,以便其他工作人员需要等到这一个工作人员完成.也可以锁定单独的行,但我不知道它是否适用于您的情况. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |