高并发时候的事务控制

13-09-10 vinseven
                   

用户甲的操作

1.开始事务

2.访问表A

3.访问表B

4.提交事务

乙用户在操作

1.开始事务

2.访问表B

3.访问表A

4.提交事务

访问时候,进行了操作。

大神们,怎么来控制比较好处理呢?

                   

6
banq
2013-09-11 08:17

上述处理方式会引起典型的死锁dead lock现象。

终极解决方式:使用基于Actor模型的方式(类似ERLang的进程信箱):http://www.jdon.com/45516

以A帐号到B帐号转账为例子:

发出是否可转出消息--->消息队列--->A

A作为一个对象,注意不是数据表,对象是有行为的,检查自己余额是否可转账,如果可以,冻结这部分金额,比如转账100元,冻结100元,从余额中扣除。因为外部命令是通过消息顺序进来的,所以下一个消息如果也是扣除,再次检查余额是否足够......

具体Actor模型也可以参考PPT文档中有谈到Actore模型:

http://www.jdon.com/45436

至于为什么要使用数据+行为的对象设计方式,而不是采取传统的数据喂给线程等方式,见这个帖子:

http://www.jdon.com/45727

[该贴被banq于2013-09-12 06:49修改过]

banq
2013-09-12 08:04

为了更详细解释这个问题,我专门写一篇文章见:为什么Actor模型是高并发事务的终极解决方案