2011-06-13 91 views
1

我正在构建订购资源的网站。我有一个资源池(比如10个资源),当用户想要订购一个资源时,我检查哪一个是免费的,并将其分配给用户。 我使用MYSQL InnoDB表和锁定使用从池中锁定资源,同时允许其他人从资源池中订购其他资源

update ResourceTable SET SOMEFIELD='1' 

但是行,如果第一个事务还不完,现在其他用户正在搜索(使用

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

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

如何让多个用户订购资源urces没有等待?

(I虽然不知何故选择未锁定的行 - >在不存在MYSQL)

回答

0

的溶液可以是改变SOMEFIELD的值之前锁定整个表。更新这个值是一个非常快速的操作,所以即使有几个到你的站点的传入请求需要几乎同时访问资源池,并且有一个请求正在改变SOMEFIELD的过程中,其他请求只能等待一小部分其次是释放桌上的锁。

+0

谢谢,但问题是,我正在寻找一个解决方案没有锁等待(因为有其他免费资源) – Guy 2012-09-27 11:36:22