mysql - 行级锁,或者读时锁

标签 mysql sql multithreading concurrency

我的应用程序有几个实例,每个实例都有一个线程从 MySql 表中选取未处理的项目,并开始处理它。表结构如下:

id   |   status  | other_params
     |           |             
     |           |

“状态”字段表示条目是否已处理。

我面临着如何确保当一个实例/线程从表中选取一个条目时,没有其他线程选取该条目进行处理的问题。

我已经考虑过将状态更改为“正在处理”并在完成后更改为“已处理”的解决方案,但为了使更改对其他线程可见,我需要提交。如果处理请求的节点失败,它将始终处于“处理中”状态。

而且该操作是一项繁重的操作,因此我不希望有多个线程来执行该任务。

有人提供的任何想法都会有所帮助。

最佳答案

how, I will ensure that when one instance/thread picks up an entry from the table, no other thread picks that entry for processing.

您可以通过提供行级锁来做到这一点。还设置了锁等待超时。

假设您有 2 个线程 T1、T2,它们试图从表中选取相同的未处理项目。如果T1由于任何原因失败,事务将超时并且锁将被释放。这样的话,T2就可以去处理了。

关于mysql - 行级锁,或者读时锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37770795/

相关文章:

multithreading - JMeter:tearDown Thread Group 的目的是什么

mysql - SQL 语法如何显示相关行?

php - 从 MySQL 获取最新记录(7 天)

c++ - 接收大量 (r) UDP 流量时 CPU 负载高 (Windows)

mysql - COUNT FUNCTION where 子句

sql - 验证 SQL Server 中现有记录的更快方法

c++ - 线程安全传递运算符

php - 如何在 PHP 中使用 multi_query 制作准备好的语句

c# - 'Project2.Name' 中的未知列 'where clause'

mysql - 哪个 SQL 更好?在 MySQL 5.1 上