求助,在我项目中,当并发量大时,出现的问题。

08-01-21 fejjsong
         

在我的项目中,每次用户登录后进行操作的时候都要从数据库取一个key,key不能重复,而且取出来用了就马上从数据库里删除(key是不断生成的,专门有个服务,少于5000条,则自动生成),问题是当并发量上去之后就报错了,有可能用户取到同一个key,或者当key已经删除了,肯定不行,后台就会报错。怎么样处理并发量大的时候产生的问题,我想到了同步锁,但是效果不是很好,而且我对这方面没什么经验,我也是刚刚开始做项目,请大家帮忙啊,谢谢。我是用Hibernate来取的。banq大哥,这是个经常遇到的问题吧,请问该怎么处理呢?

         

banq
2008-01-21 16:31

需要做一个简单的范围划分,第一次读从A范围获得Key;如果有第二次并发读,从B范围获得Key, 这样保证并发同时读时获得Key不相同。

fejjsong
2008-01-21 17:29

请问,我用什么来判断是第二次并发读取呢。每个用户登陆进来后执行的都是相同的事务处理。相同的代码。就是这里不是很清楚。想到了用悲观锁,但是效率问题也要考虑。

wlmouse
2008-01-22 10:05

有几个问题问一下。首先这个KEY是做什么用的?为什么马上要删除?KEY的格式是如何规定的?不知道你使用的是哪个数据库,像Oracle有自己的序列发生器。如果可以的话,用UUID代替如何?可以保证每次生成的UUID是不同的。而且用户的登录操作并发应该不大吧?谁没事反复登录、退出的。我觉得即使使用悲观锁,性能也不会有太大影响。

banq
2008-01-22 17:31

>我用什么来判断是第二次并发读取呢

需要第三方检测工具如Jprofiler