高并发时候的事务控制
用户甲的操作
1.开始事务
2.访问表A
3.访问表B
4.提交事务
乙用户在操作
1.开始事务
2.访问表B
3.访问表A
4.提交事务
访问时候,进行了操作。
大神们,怎么来控制比较好处理呢?
用户甲的操作
1.开始事务
2.访问表A
3.访问表B
4.提交事务
乙用户在操作
1.开始事务
2.访问表B
3.访问表A
4.提交事务
访问时候,进行了操作。
大神们,怎么来控制比较好处理呢?
上述处理方式会引起典型的死锁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修改过]
为了更详细解释这个问题,我专门写一篇文章见:为什么Actor模型是高并发事务的终极解决方案