本发明涉及计算机技术领域,尤其涉及在高并发支付场景下保持账户余额一致性的方法及系统,在互联网支付交易环节中根据交易流水更新账户余额。
背景技术:
在互联网技术、云计算的大背景下,许多企业会建立自己的公众号平台或网上商城。一方面对用户或商户提供的充值、交易、提现等服务要求做到能支持高并发,以便同时能为更多用户或商户提供服务;
另一方面,账户余额的变动与资金安全息息相关,必须做到一致性。系统要根据源源不断的交易流水对账户余额进行增量更新,交易成功则增加余额,提现成功则扣减余额。
现在技术的解决方案往往采用“乐观锁”的方式进行并发控制,提升账户表访问的吞吐量。但是在互联网领域,往往需要部署多个节点的服务器形成集群,以支持大量用户的交易需求。
而一旦交易量激增,即便采用“乐观锁”提升吞吐量,还是会有大量更新失败,影响交易进行,导致用户量流失。
技术实现要素:
本发明的目的在于提供一种在高并发支付场景下保持账户余额一致性的方法,在交易环节中对账户表的更新方式,解决高并发支付场景下账户余额更新失败的情况,既保证高并发交易的进行,又保证账户余额的一致性。
本发明是通过以下的技术方案来实现的。
提供一种在高并发支付场景下保持账户余额一致性的方法,包括以下步骤,
s1、接收用户交易下单,在交易流水表中写入交易流水;
s2、生成一临时表,存储在用户交易下单时与交易流水对应的交易单号;
s3、定时根据临时表中的交易单号获取交易流水表中对应的信息,进行账户表中账户余额的更新。
进一步,还包括有步骤,在账户余额更新成功后,将临时表中对应的交易单号删除。
本发明还提供一种在高并发支付场景下保持账户余额一致性的系统,包括有:
交易流水表,在系统接收用户交易下单后,用于写入交易流水;
临时表,用于存储在用户交易下单时与交易流水对应的交易单号;
定时调度单元,用于定时执行根据临时表中的交易单号获取交易流水表中对应的信息,地行帐户表中帐户余额的更新。
在高并发支付场景下,在对数据库中表的访问,很容易做到高并发的写入,但是却很难做到高并发增量更新,所以在互联网支付场景下,高并发的用户交易下单写入交易流水表,并且同时还要更新对应的账户表中帐户余额是矛盾的,常常就会对账户表造成锁定,使得帐户余额更新失败,影响交易下单进行,导致用户量流失。
本发明技术方案的有益效果在于:将高并发增量更新转变为有序的串行化更新,就不会对账户表造成锁定,余额更新操作都会很快成功执行。
附图说明
图1是本发明实施例中的方法的流程示意图。
具休实施方式
以下结合附图与具体实施例对本发明的技术方案做进一步的详细说明。
在支付场景下会用到数据库存储各种数据,数据库是通过多个表组成,分别存交易过程中的各种数据,如交易流水表存储交易流水,帐户表存储帐户余额等信息。
参照图1所示,本实施例是实现一种在高并发支付场景下保持账户余额一致性的方法,主要包括以下步骤,
接收用户交易下单,在交易流水表中写入交易流水表;生成一临时表,在写入交易流水的同时,将交易流水对应的交易单号写入临时表;然后定时任务以单线程方式根据临时表中的交易单号获取交易流水表中对应的信息,再对账户表中的帐户余客进行更新。
将高并发增量更新转变为有序的串行化更新,就不会对账户表造成锁定,余额更新操作都会很快成功执行。待账户余额更新成功后,再将临时表中对应的交易单号删除。
本实施例通过增加一张临时表,在高并发收单时,写入交易流水的同时将交易单号同时写入临时表;然后再定时任务以单线程对账户表进行更新,有效解决高并发下写入与更新之间的矛盾冲突。
以上的描述仅仅涉及本发明的一些具体实施方式,任何本领域的技术人员基于本发明的精神所做的替换或改进均应为本发明的保护范围所涵盖,本发明的保护范围应以权利要求书为准。