我有一个表,它维护和分配一个进程的多个实例的部分输入工作(从一个大的输入表)。该表格的编排如下:
BlockInfo Table
---------------
BlockID int primary key
Status varchar 每个进程都会查询它应该接受的输入块,以及该块的进程。
我期望查询如下:
select BlockID
from BlockInfo
order by BlockID
where Status='available'
limit 1为此,我将要求服务器维护独占读锁,因为如果要将读锁保持为共享,那么多个实例可能会得到相同的块,这会导致重复工作,并且是不可取的。
我可以得到一个独家的写锁,但实际上没有写任何东西。但我想知道mysql是否允许独占的读锁。
它还将有助于了解实现这一目标的其他方式。
发布于 2014-06-05 06:32:13
你应该做的是:
这将允许其他进程与此并行地处理其他行。它使表锁定了足够的时间,以防止它们试图在同一行上工作。
发布于 2014-06-05 06:52:22
如果您想要在数据库级别上实现这一点,表级别的锁就是要走的路,正如另一个答案中提到的那样。但是如果性能与您的应用程序有关,这将是一个糟糕的设计。这将导致频繁的表锁定和等待。
我建议你在应用程序中分担工作。
让一个进程从数据库中读取可用的行,并填充要处理这些行的工作进程的队列。
https://stackoverflow.com/questions/24053018
复制相似问题