当有人访问我的网站时,他会看到页面的浏览量最少。所有页面,包括页面查看计数器,都存储在MYSQL数据库中。如果查看页面,则页面查看计数器将增加一个。
如果我的now服务器有多个线程,我现在就会遇到一个赛车状态:
线程1:用户A检索页面P,页面浏览量为10
线程2:用户B退出页面P,页面浏览量为10
线程1:页面P的页面浏览量从10增加到11,并保存
线程2:页面P的页面浏览量从10增加到11,并保存了
所以在最后,页面被浏览了两次,但是分页器只增加了一个。
一种解决方案是使用SELECT .然而,对于更新,用户B必须等到记录用户A正在访问的记录被保存,并且由于许多线程都试图以最少的页面浏览量获得页面,因此将出现延迟。
所以我的问题是:当许多行被锁定时,是否有可能获得未锁定的第一行,这样线程就不必等待对方了?如何在MYSQL中这样做?
我希望找到一种解决办法,结果是:
线程1:用户A锁定页面P,页面浏览量为10
线程2:用户B锁定页面q,页面浏览量为11 (因为页面P被锁定)
线程1:页面P的页面浏览量从10增加到11,并保存
线程2:页q的页面浏览量从11增加到12,并保存了
发布于 2010-01-14 08:48:02
我猜你在做这样的事:
UPDATE Pages SET PageView = 11 WHERE Id = 30其中常量11和30是由代码插入的(PHP?)
一个更好的方法是这样做:
UPDATE Pages SET PageView = PageView + 1 WHERE Id = 30然后,您不需要在多个查询中锁定行,这样您想解决的问题就消失了。
https://stackoverflow.com/questions/2063012
复制相似问题