首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql中的独占读锁

问mysql中的独占读锁
EN

Stack Overflow用户
提问于 2014-06-05 06:25:06
回答 2查看 907关注 0票数 1

我有一个表,它维护和分配一个进程的多个实例的部分输入工作(从一个大的输入表)。该表格的编排如下:

代码语言:javascript
复制
BlockInfo Table
---------------
BlockID int primary key
Status  varchar 

每个进程都会查询它应该接受的输入块,以及该块的进程。

我期望查询如下:

代码语言:javascript
复制
select BlockID 
from BlockInfo 
order by BlockID 
where Status='available' 
limit 1

为此,我将要求服务器维护独占读锁,因为如果要将读锁保持为共享,那么多个实例可能会得到相同的块,这会导致重复工作,并且是不可取的。

我可以得到一个独家的写锁,但实际上没有写任何东西。但我想知道mysql是否允许独占的读锁。

它还将有助于了解实现这一目标的其他方式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-05 06:32:13

你应该做的是:

  1. 获取独占写入锁
  2. 选择要处理的行。
  3. 将其状态更改为“处理”(或“可用”以外的其他内容)
  4. 打开桌子
  5. 对行进行所有处理
  6. 更新该行以将其状态更改为“可用”

这将允许其他进程与此并行地处理其他行。它使表锁定了足够的时间,以防止它们试图在同一行上工作。

票数 0
EN

Stack Overflow用户

发布于 2014-06-05 06:52:22

如果您想要在数据库级别上实现这一点,表级别的锁就是要走的路,正如另一个答案中提到的那样。但是如果性能与您的应用程序有关,这将是一个糟糕的设计。这将导致频繁的表锁定和等待。

我建议你在应用程序中分担工作。

让一个进程从数据库中读取可用的行,并填充要处理这些行的工作进程的队列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24053018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档