我正在开发一种数据处理产品,有些并发用户要求在特定状态下处理这些数据。
For example, users can ask to assign me a data-id where status is `Not_Assigned` or `In_Review`. 由于可能存在并发请求,而且每个人都应该获得唯一的Id,所以我考虑使用数据库锁定,但在这种情况下,如果线程无法获得锁事务将导致失败,并且控制返回到应用程序,应用程序将尝试获取新的Id,因此最终用户将面临更高的延迟。有人能指导我一个更好的方法来解决这个问题,或者指导我如何解决类似的问题吗?
作为参考,我的样本数据如下所示。
Data_id | Status | UserId
1 | Not_Assigned | NULL
2 | REVIEW | 1
3 | DONE | 2
4 | Not_Assigned | NULL
5 | Not_Assigned | NULL因此,如果有两个用户来请求具有Not_Assigned状态的数据,他们应该从(1,4,5)获得唯一的id,我可以通过在DB上添加一个锁来处理这个id。
发布于 2022-02-03 22:03:27
如果使用AUTO_INCREMENT列分配新is,则不会出现任何并发问题。
如果使用其他机制,请确保使用InnoDB、START TRANSACTION、COMMIT,并在必要时使用SELECT ... FOR UPDATE。
总是在任何查询后检查错误。错误(如并发问题)可能在事务内部发生。计划重新运行整个事务。
https://stackoverflow.com/questions/70952115
复制相似问题