在金融领域,绝大多数的银行业应用设计都是基于传统单机关系型数据库,没有从整体应用架构考虑与第三代分布式数据库进行适配,尤其在银行核心系统应用第三代分布式数据库案例甚少,没有可复制的成功经验可以借鉴,从数据库自身机制和核心系统应用等方面,面临核心难点之乐观锁适配问题:
乐观锁在事前对表不会加锁,只在提交的时候比对提交版本号,不能保证每笔交易都能提交成功,在高并发的金融记账业务场景里,会造成大量的交易超时,出现用户短款现象,不能满足银行业务连续性和数据“强一致性”的要求。
大家针对这个核心难点问题有何解?有什么比较好的方法和经验吗?欢迎谈谈!
乐观锁和悲观锁应用的场景不同,悲观锁更注重数据安全,更新数据前,读取数据时先利用数据库的锁机制将该数据行进行锁定,直到事务提交才释放,强调安全性,持有锁时间长,并发效率在某些场景效率不高;
乐观锁在最后提交的时候才去比较数据版本号,锁持有时间短,并发效率高,但是如果出现大量的数据冲突,会导致大量交易失败,所以乐观锁应用的前提应该是该业务场景下数据冲突的概率很小。
所以还是要结合业务场景和特点,在安全性保证的前提下,考虑使用乐观锁还是悲观锁,我们行大部分业务场景都是采用的悲观行锁,通过其他途径去提升并发效率,比如大事务改小事务,事务中锁尽量往后放等。
分布式数据库比集中式数据库有个全局一致性读的特殊性,现在分布式数据库通过增加全局时间戳组件实现了全局一致性读,能满足数据“强一致性”的要求。
收起乐观锁确实会出现成功率不高的问题,那就换悲观锁呗,那么带来了新的问题,多个会话同时更新一条数据,势必会带来争抢,tps也上不去,不如牺牲一点点性能,采用分而治之的思想,将账户按一定的规则拆分一下,成为多个子账户,会话按照一定的规则去访问子账户,这样就降低了争抢;不过...现在的分布式数据库还存在这个情况?
收起