我正在建立一个订购资源的网站。我有一个资源池(比如10个资源),当用户想要订购资源时,我会检查哪个是免费的并将其分配给用户。 我正在使用MYSQL innoDB表并使用
锁定行update ResourceTable SET SOMEFIELD='1'
但如果第一笔交易尚未完成,现在又有另一位用户正在搜索(使用
select * FROM ResourceTable WHERE SOMEFIELD!='1' LOCK IN SHARE MODE
,用户正在等待第一笔交易完成(尽管还有其他免费资源)。
如果我删除LOCK IN SHARE MODE
,我将获得一个应该被锁定的资源。
如何让多个用户无需等待即可订购资源?
(我虽然以某种方式选择了未锁定的行 - > MYSQL中不存在)
答案 0 :(得分:0)
解决方案可能是在更改SOMEFIELD的值之前锁定整个表。更新此值是一个非常快速的操作,因此,即使您的站点的一些传入请求需要几乎同时访问资源池,并且一个请求正在更改SOMEFIELD,其他请求只需等待一小部分第二个是它释放桌子上的锁。