我有一个表来维护和分配输入的部分(从一个大的输入表),用于进程的多个实例。该表的组织如下:
BlockInfo Table
---------------
BlockID int primary key
Status varchar
每个进程都会查询它应该采取的输入块以及阻塞的进程。
我期待查询如下:
select BlockID
from BlockInfo
order by BlockID
where Status='available'
limit 1
对于这种效果,我要求服务器维护独占读锁,因为如果要将读锁保持为共享,那么多个实例可能会获得相同的块,这会导致重复努力并且是不可取的。
我可以获得一个独占的写锁,但实际上并没有写任何东西。但我想知道mysql是否允许独占读锁。
了解实施此方法的其他方法也很有帮助。
答案 0 :(得分:0)
你应该做的是:
这将允许其他进程同时处理其他行。它使表保持锁定足够的时间,以防止它们尝试在同一行上工作。
答案 1 :(得分:0)
如果要在数据库级别实现此目的,则可以使用表级锁定,如另一个答案中所述。但如果性能与您的应用程序有关,那将是一个糟糕的设计。这将导致频繁的表锁定和等待。
我建议你把工作分成应用程序。
让一个进程从数据库中读取可用的行,并填充将处理它们的工作进程的队列。