我有一个表,用于维护和分配输入的一部分(来自一个大输入表),用于流程的多个实例。该表组织如下:
BlockInfo Table
---------------
BlockID int primary key
Status varchar
每个进程都查询它应该接受的输入 block ,并处理该 block 。
我希望查询如下:
select BlockID
from BlockInfo
order by BlockID
where Status='available'
limit 1
为了达到这个效果,我会要求服务器保持独占读锁,因为如果读锁是共享的,那么多个实例可能会得到同一个 block ,这会导致重复努力并且是不可取的。
我可以获得独占写锁,但实际上不能写任何东西。但是我想知道mysql是否允许独占读锁。
了解其他实现方法也会有所帮助。
最佳答案
你应该做的是:
- 获取独占写锁
- 选择要处理的行
- 将其状态更改为“处理中”(或“可用”以外的其他状态)
- 解锁 table
- 对行进行所有处理
- 更新行以将其状态改回“可用”
这将允许其他进程与此同时处理其他行。它使表保持锁定足够的时间,以防止他们尝试在同一行上工作。
关于mysql - mysql中的独占读锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24053018/