处理简单而一般的并发,治标不治本
听同事说这项目是去年11月份启动的,到现在为止二期都没开发完,昨天今年因为要做改善,原本只要一个权限能进来操作数据的,但现在要求改成可以多个权限,这样就会导致数据并发。
这2天没做别的,就在做并发处理,我写好一个测试组就测一个,测试不通过在打回来从新编写过。如此反复做了N次,今年终于搞定一大半,仍然还有几种情况没搞定。
。写这篇是希望能和大家分享下我的想法,期待大家的提出更好的解决方案。 因现在在网吧无法贴代码,就先说下我的处理思路。
权限A1 ,A2,A3,A4,A5,A6代表有6个权限,进入页面后要根据登陆者权限加载不同导航,但数据是一样都可以做修改操作。而且不能用数据库的事务和锁。因为这个项目比较特殊。原先就要3套系统在用这数据库,在加上现在的就是4套系统基于这数据库的。所以如果用数据库锁会在提交数据的时候会导致其他系统崩溃。想了很久,暂时找到了治标的办法没有治本,就是在表的上面加上一个字段记录没做一次更改就加1,在页面上用个hidden保存这个值,提交的时候做比较如果页面上的和数据库一致就可以提交,不一致就弹出一个msg提示,在从新刷新下页面这样就可以提交了。
这种办法如果分前后就很好用,但最少2个以上权限同时登陆进入这个页面,而且还是同一条数据的时候并发就很高了,问题就出来了。发现都可以更改成功,向系统发送通知消息。
今天我又想了个思路就是,新增一个临时表和上个表一模一样,操作的时候就读这个临时的当数据好了可以做临时的保存,等做好了后点提交就向真表写入这条数据,但这时又要考虑这次的数据输入有误想回到上一次,就要做个回滚数据功能,但就是这个如果都点登陆就会正常报msg只有一个人成功操作这数据,因为我在程序写了事务,执行完后count值就改变了另外的一个人就不能找到这条数据了,因为比较的时候都是同一时间进来hidden值一样但我还用它当条件此时就找不到了,但如果一人回滚一人提交此时就并发处理不出来了。
这个问题困扰了我2天了,不知道各位是如何处理这样高并发的。