从池中锁定资源,同时允许其他人从资源池中订购其他资源

时间:2011-06-13 06:13:20

标签: mysql transactions locking

我正在建立一个订购资源的网站。我有一个资源池(比如10个资源),当用户想要订购资源时,我会检查哪个是免费的并将其分配给用户。 我正在使用MYSQL innoDB表并使用

锁定行
update ResourceTable SET SOMEFIELD='1'

但如果第一笔交易尚未完成,现在又有另一位用户正在搜索(使用

select * FROM ResourceTable WHERE SOMEFIELD!='1' LOCK IN SHARE MODE

,用户正在等待第一笔交易完成(尽管还有其他免费资源)。 如果我删除LOCK IN SHARE MODE,我将获得一个应该被锁定的资源。

如何让多个用户无需等待即可订购资源?

(我虽然以某种方式选择了未锁定的行 - > MYSQL中不存在)

1 个答案:

答案 0 :(得分:0)

解决方案可能是在更改SOMEFIELD的值之前锁定整个表。更新此值是一个非常快速的操作,因此,即使您的站点的一些传入请求需要几乎同时访问资源池,并且一个请求正在更改SOMEFIELD,其他请求只需等待一小部分第二个是它释放桌子上的锁。