mike79 发表于 2010-01-12 11:33

原帖由 冬瓜头 于 2010-1-12 08:57 发表 http://bbs.chinaunix.net/images/common/back.gif
但是打算给app回复的瞬间,链路中断或者db down,那么操作员就会认为钱没有取走,db重启后,操作员再次重试,由于操作员刚才和现在都没有对余额的变化关注过,所以再次取走了钱,也就是说,db中钱被降低数值两次,而你拿到手的钱和回执单却只有一次,损失谁来给
这个是说数据库中只作了一次更新也就是一次update+commit操作成功,但是前台给了2笔钱?而原因是数据库重启后对操作员对余额变化没有关注?
那这是业务操作失误,和数据库事务没什么关系。任何实际都不可能避免人为失误造成的损失。

冬瓜头 发表于 2010-01-12 11:33

我从一开始就没有认为db本身机制有问题。而是对整个系统的沟通流程方面,有潜在的问题,这一点不理解,是否真正存在,如果存在,怎么解决。

冬瓜头 发表于 2010-01-12 11:35

前台给了一笔。。。。
有时候人根本无法去检查机器做的是否正确的,这一点我想你同意吧,可以设想很多场景的,比如几十万条记录你去一一核对?不可能的,要电脑就是为了帮助人的,如果电脑出错了,囧

mike79 发表于 2010-01-12 11:36

原帖由 冬瓜头 于 2010-1-12 11:31 发表 http://bbs.chinaunix.net/images/common/back.gif
“你可能认为钱没有存入。
数据库重启后,柜台给你作个查询,发现余额已经增加了。”

问题就在这里,如果操作员没有关注余额呢?咱们这里不谈人为控制,不一定每个操作员都记得看余额。
如果没有回执单的应 ...
那就是人为原因导致的失误了,你不可能依靠设计来避免所有的人为失误。
对于这个失误,或许应用可以写得更强壮些,比如在数据库重启后当前会话重新连接数据库,查询余额然后返回到终端。

冬瓜头 发表于 2010-01-12 11:38

这只是一笔操作,如果是十万笔,人如何去一一核对呢?这个问题怎么解决

wolfheader 发表于 2010-01-12 11:40

原帖由 冬瓜头 于 2010-1-12 11:33 发表 http://bbs.chinaunix.net/images/common/back.gif
我从一开始就没有认为db本身机制有问题。而是对整个系统的沟通流程方面,有潜在的问题,这一点不理解,是否真正存在,如果存在,怎么解决。


我相信不存在这个漏洞,如果数据库存在这个为问题,我们所有的容灾,备份,cluster切换都没有任何意义。

没那么多精力研究这个。


还不如想想我小时候想的一个命题,我现在一想还是头疼:

如果宇宙缩成一个点,这个“世界”还剩下啥了?谁在看这个点~

wolfheader 发表于 2010-01-12 11:41

哈哈

冬瓜头 发表于 2010-01-12 11:43

世界时轮回的,世界是虚拟的,无穷无尽,因为是虚拟的,所以可以无穷无尽。哈哈

wolfheader 发表于 2010-01-12 11:45

原帖由 冬瓜头 于 2010-1-12 11:43 发表 http://bbs.chinaunix.net/images/common/back.gif
世界时轮回的,世界是虚拟的,无穷无尽,因为是虚拟的,所以可以无穷无尽。哈哈

头疼,老子在几千年是不是也跟我想同一个问题:mrgreen:

冬瓜头 发表于 2010-01-12 11:48

那时候没网络没电脑,人就是吃饭睡觉,所以人家老子用于思考的时间占了人生的很大部分,思考到一定程度,头顶上就会出现圣人光环了。不像现在,无脑90后非主流。
页: 1 2 [3] 4 5 6 7 8 9 10 11 12
查看完整版本: 银行存钱悖论探讨!!(慎入,逻辑混乱,请看完所有楼再回帖以免越弄越乱)