CN108615145A - 一种账户并行存取款的方法以及系统 - Google Patents
一种账户并行存取款的方法以及系统 Download PDFInfo
- Publication number
- CN108615145A CN108615145A CN201810310475.9A CN201810310475A CN108615145A CN 108615145 A CN108615145 A CN 108615145A CN 201810310475 A CN201810310475 A CN 201810310475A CN 108615145 A CN108615145 A CN 108615145A
- Authority
- CN
- China
- Prior art keywords
- account
- interlock
- remaining sum
- parallel
- deposit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 238000007667 floating Methods 0.000 claims description 44
- 230000006870 function Effects 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 8
- 238000007689 inspection Methods 0.000 claims description 7
- 238000004364 calculation method Methods 0.000 claims 1
- 230000007246 mechanism Effects 0.000 abstract description 12
- 238000012545 processing Methods 0.000 abstract description 11
- 238000010586 diagram Methods 0.000 description 13
- 238000005516 engineering process Methods 0.000 description 7
- 230000006872 improvement Effects 0.000 description 7
- 238000013461 design Methods 0.000 description 6
- 238000002955 isolation Methods 0.000 description 4
- 230000018109 developmental process Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000004140 cleaning Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000007717 exclusion Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 239000013078 crystal Substances 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 229920001296 polysiloxane Polymers 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 239000010979 ruby Substances 0.000 description 1
- 229910001750 ruby Inorganic materials 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/08—Payment architectures
- G06Q20/10—Payment architectures specially adapted for electronic funds transfer [EFT] systems; specially adapted for home banking systems
- G06Q20/102—Bill distribution or payments
Landscapes
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Strategic Management (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
本发明提供一种账户并行存取款的方法、系统、计算机设备以及计算机可读存储介质,涉及数据处理技术领域。所述方法包括:通过新增数据库表的方式为一账户设立多个关联账户;将所述账户的余额拆分后放入所述关联账户中;将所述账户对应的多个关联账户进行锁定操作;对所述关联账户进行并行存款业务;对所述关联账户进行并行取款业务。本发明由于应用了锁的机制,因此保证了所有账户余额的准确性,确保账户本身不会出现透支情况,实现了真正意义上的高并行,存取业务相比现有技术方案吞吐量可以有巨幅的提升。
Description
技术领域
本发明关于数据处理技术领域,具体的讲是一种账户并行存取款的方法、账户并行存取款的系统、计算机设备以及计算机可读存储介质。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
因业务需要,在银行的账户体系中存在许多的“热点账户”。这些“热点账户”每天会有大量的存取款业务发生,同时这些存取款业务还是高频的,如“核心系统”、“支付宝”、“财务通”、“活期富”等业务每天均会产生大量的代发、代收(即从相关公司在银行开立的对公存款结算户转出并转入相应的个人存款账户)交易,需要频繁的对某一个“对公存款结算户”做存取款操作。
因当前银行账户体系架构设计无法满足“热点账户”的高频需求(单个账户不支持并行存取款业务),以支付宝、财务通为例,为了支持高并行目前的做法是外围的系统将每N笔代发业务组成一个包,首先汇总一个包的代发总金额并调用核心系统“代发资金转入交易”,将此汇总的代发金额从对公存款结算户转出并转入一个代发内部户,然后再执行N次“单笔代收付交易”,将代发资金逐笔从内部户转出并转入个人结算户。如果“单笔代收付交易”执行期间发生错误则最后再执行“代收付余额转出交易”将代发差错金额从内部户转回对公结算户。目前此类方案存在以下问题:
1、尽管“单笔代收付交易”可以并行执行,但是“包”与“包”之间必须串行,导致其吞吐量然而受很大限制。以“支付宝”业务为例,一天代发业务量高达130多万笔,外围系统需要分割成2万多个包调用核心交易,由于包与包之间必须串行,实际仍然需要花费很长的时间才能完成这些业务。
2、现有方案不是针对每笔代发业务从对公结算户存取款,而是以包为单位进行存取款,造成发生业务的公司对账困难。
3、经常有“代收付余额转出交易”发生错误,需要业务手工调账将差错金额从内部户转回对公结算户,造成不必要的风险。
4、外围的系统处理逻辑复杂,开发工作量巨大。
因此,如何提供一种新的方案,其能够解决上述技术问题是本领域亟待解决的技术难题。
发明内容
有鉴于此,本发明提供了一种账户并行存取款的方法、账户并行存取款的系统、计算机设备以及计算机可读存储介质,通过为一个账户设立多个关联账户,将账户的余额拆分入不同的关联账户中,并对关联账户进行锁定操作,之后进行并行的存取更新不同的关联账户记录,由于应用了锁的机制,因此保证了所有账户余额的准确性,确保账户本身不会出现透支情况。
为了实现上述目的,本发明提供了一种账户并行存取款的方法,所述方法包括:
通过新增数据库表的方式为一账户设立多个关联账户;
将所述账户的余额拆分后放入所述关联账户中;
将所述账户对应的多个关联账户进行锁定操作;
对所述关联账户进行并行存款业务;
对所述关联账户进行并行取款业务。
优选的,所述方法还包括:
将所述账户对应的账户层的库表设置为只读方式。
优选的,对所述关联账户进行并行存取款业务包括:
增加所述关联账户的余额以及存入浮动额;
当存款业务成功时,将所述关联账户的存入浮动额清空以确定存入金额。
优选的,对所述关联账户进行并行取款业务包括:
扣减所述关联账户的余额;
更新所述关联账户的余额;
通过结构化查询语言SQL语句中的SUM函数汇总所有关联账户的余额以及浮动额,确定出所述账户的账户余额;
对所述账户进行透支检查。
本发明的目的之一是,提供了一种账户并行存取款的系统,所述系统包括:
关联账户设置模块,用于通过新增数据库表的方式为一账户设立多个关联账户;
账户余额拆分模块,用于将所述账户的余额拆分后放入所述关联账户中;
关联账户锁定模块,用于将所述账户对应的多个关联账户进行锁定操作;
并行存款业务模块,用于对所述关联账户进行并行存款业务;
并行取款业务模块,用于对所述关联账户进行并行取款业务。
优选的,所述系统还包括:
只读方式设置模块,用于将所述账户对应的账户层的库表设置为只读方式。
优选的,并行存款业务模块包括:
关联账户增加模块,用于增加所述关联账户的余额以及存入浮动额;
浮动额清空模块,用于当存款业务成功时,将所述关联账户的存入浮动额清空以确定存入金额。
优选的,所述并行取款业务模块包括:
余额扣减模块,用于扣减所述关联账户的余额;
余额更新模块,用于更新所述关联账户的余额;
金额汇总模块,用于通过结构化查询语言SQL语句中的SUM函数汇总所有关联账户的余额以及浮动额,确定出所述账户的账户余额;
透支检查模块,用于对所述账户进行透支检查。
本发明的目的之一是,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现一种账户并行存取款的方法。
本发明的目的之一是,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行一种账户并行存取款的方法。
本发明的有益效果在于,提供了一种账户并行存取款的方法、账户并行存取款的系统、计算机设备以及计算机可读存储介质,通过为一个账户设立多个关联账户,将账户的余额拆分入不同的关联账户中,并对关联账户进行锁定操作,之后进行并行的存取更新不同的关联账户记录,由于应用了锁的机制,因此保证了所有账户余额的准确性,确保账户本身不会出现透支情况,实现了真正意义上的高并行,存取业务相比现有技术方案吞吐量可以有巨幅的提升。
为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种账户并行存取款的系统的结构示意图;
图2为本发明实施例提供的一种账户并行存取款的系统中并行存款业务模块的结构示意图;
图3为本发明实施例提供的一种账户并行存取款的系统中并行取款业务模块的结构示意图;
图4为本发明实施例提供的一种账户并行存取款的方法的流程图;
图5为图4中的步骤S104的流程示意图;
图6为图4中的步骤S105的流程示意图;
图7为并行取款处理时的示意图;
图8为并行取款处理的对比示意图;
图9为并行取款处理的交易1与交易2的对比示意图;
图10为并行寸款处理的交易1与交易2的对比示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本领域技术技术人员知道,本发明的实施方式可以实现为一种系统、设备、方法或计算机程序产品。因此,本发明公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
现有技术中,因当前银行账户体系架构设计无法满足“热点账户”的高频需求(单个账户不支持并行存取款业务)。基于此,本发明提供了一种账户并行存取款的系统,请参阅图1,本发明提供的账户并行存取款的系统包括:
关联账户设置模块100,用于通过新增数据库表的方式为一账户设立多个关联账户。
在本申请中,账户包括现有技术中提及的“热点账户”,这些“热点账户”每天会有大量的存取款业务发生,同时这些存取款业务还是高频的。
在本申请的一种实施方式中,通过新增数据库表的方式为账户设立多个关联账户。新增的数据库表如下表1所示。
表1
账户余额拆分模块200,用于将所述账户的余额拆分后放入所述关联账户中。
关联账户锁定模块300,用于将所述账户对应的多个关联账户进行锁定操作。在本申请中,锁定操作通过下述数据库锁机制来实现。具体的:
为了之后更清楚的分析,此处以DB2数据库为例详细介绍关系型数据库锁的机制。DB2数据库的锁分为2个层次,第一层是Tablespace/Table层的锁,本申请无需考虑这个层次的锁。第二层是Page/Row层的锁,本申请所指的锁均是指这个层次的锁。
Page/Row层的锁分为3种,S-共享、U-更新和X-排他,它们的互斥关系如表2所示,其中,√-表示可以共存,×-表示互斥。
表2
Lock | S | U | X |
S | √ | √ | × |
U | √ | × | × |
X | × | × | × |
对Page/Row上S、U、X中何种锁是由结构化查询语言(Structured QueryLanguage,SQL)语句本身决定的。DML语句如Update、Insert、Delete必定会对Page/Row上X锁,直到事务提交(commit)或者回滚(rollback)才会释放。DQL(Select)语句是否上锁、上S/U中的何种锁、何时释放锁,则受Isolation Level(在程序编译时指定或者在Select语句中指定)和For Update of子句影响,如下表3所示。
表3
在本发明的一种实施方式中,关联账户锁定模块300还可将所述账户对应的多个关联账户中的任意一个关联账户进行锁定操作。可根据随机数等规则找到所述账户的对应的任意一个关联账户,锁定该关联账户。
并行存款业务模块400,用于对所述关联账户进行并行存款业务。
并行取款业务模块500,用于对所述关联账户进行并行取款业务。
在介绍具体的存取款业务之前,本申请首先介绍影响热点账户并行的原因以及本申请提供的关联账户的账户表数据结构。根据核心系统过往的需求,对于热点账户的并行需求仅限于并行的存取款。因此本申请仅对热点账户的存取款处理做分析。
在现有的核心系统账户体系架构中,一个账户的余额信息在库表中有且只有一条记录。以取款为例(存款同理,此处不再描述),因为要更新账户的余额,势必会对账户的余额信息记录上X锁,鉴于关系型数据库锁的机制对单个账户的取款只能串行执行(也因此保证金账户余额的数据一致性)。如图7所示的并行取款时的处理流程,交易A先上了U锁,因此交易B需要等待交易A事务提交后释放U锁。
影响热点账户并行存取的根本原因还是一个账户的余额信息在库表中有且只有一条记录,当存入支取更新账户的余额时会基于关系型锁的机制只能串行执行。
因此本申请首先设计一个库表,将热点账户的余额记录拆分为多条记录存放到这个库表中。在本申请中,将新设计的库表命名为“关联账户表”,其数据结构设计如表1所示。从该库表的数据结构可以清晰的看到一个账户可以对应下述库表的多条记录,原账户的余额被分散在该库表的多条记录中,一个账户的余额可以体现为“SELECT SUM(余额)-SUM(存入浮动额)FROM影子账户表WHERE账号=?”,原账户的余额信息记录中的余额不再有意义。
在本申请的其他实施方式中,所述系统还包括:
只读方式设置模块,用于将所述账户对应的账户层的库表设置为只读方式。
图2为本发明实施例提供的一种账户并行存取款的系统中并行存款业务模块400的结构示意图,请参阅图2,并行存款业务模块400包括:
关联账户增加模块401,用于增加所述关联账户的余额以及存入浮动额。
在本申请中,账户的余额体现为“SELECT SUM(余额)-SUM(存入浮动额)FROM影子账户表WHERE账号=?”,因此此时账户余额并未增加,即存入金额并未落实。
浮动额清空模块402,用于当存款业务成功时,将所述关联账户的存入浮动额清空以确定存入金额。
在本申请中,只读方式设置模块对账户层的库表数据设置为只读方式,即只读原账户余额信息记录。由关联账户锁定模块将所述账户对应的多个关联账户进行锁定操作。在执行锁定操作时,可根据随机数等规则找到账户的任意一个关联账户,锁定该条关联账户。在执行并行存款业务时,关联账户增加模块401首先增加所述关联账户的余额以及存入浮动额,最后当存款业务成功时,浮动额清空模块402将所述关联账户的存入浮动额清空以确定存入金额。下面简述为何存入同时要增加余额和浮动额,以图10为例,假设账户当前余额为100,存款交易(交易1)存入100,取款交易(交易2)支取150。假如不使用“存入浮动额”,那么:
1.存款交易先于取款交易“脏读汇总账户的关联账户的余额,获得账户支取后余额”步骤前更新了关联账户记录A的余额,这时账户余额变为200。
2.取款交易扣减关联账户记录B的余额后,通过“脏读汇总账户的影子账户余额获得账户支取后余额”步骤获得账户余额为50,取款成功。
3.之后存款交易发生一些错误回滚了更新。
4.最终账户余额变为了-50,产生了透支。
本申请在引入“存入浮动额”后,可以避免透支,具体的:
1.存款交易先于取款交易“脏读汇总账户的影子账户余额获得账户支取后余额”步骤前更新了影子账户记录A的余额和存入浮动额,此时存入金额并未落实,账户余额仍为100(原因参见账户余额计算的SQL)。
2.取款交易扣减关联账户记录B的余额后,通过“脏读汇总账户的影子账户余额获得账户支取后余额”步骤获得账户余额为-50,回滚退出。
因此,本申请设置了浮动额,能够避免并行取款可能造成账户发生透支的情况。
关联账户余额记录的存入浮动额清理需要等到存款交易完全结束后才能做,处理方法有两种,如表4所示。
表4
图3为本发明实施例提供的一种账户并行存取款的系统中并行取款业务模块500的结构示意图,请参阅图3,所述并行取款业务模块500包括:
余额扣减模块501,用于扣减所述关联账户的余额。
在本申请的一种实施方式中,允许将关联账户中的余额扣减为负数。
余额更新模块502,用于更新所述关联账户的余额;
金额汇总模块503,用于通过结构化查询语言SQL语句中的SUM函数汇总所有关联账户的余额以及浮动额,确定出所述账户的账户余额。
在本申请中,SQL语句隔离级别必须为脏读,这样可以读到其他并行的存取交易未提交的更新。
透支检查模块504,用于对所述账户进行透支检查。如图8所示。
在本申请中,可以通过以下几种方式中的任一种确保并行的支取/存入业务更新不同的关联账户的余额记录。
取Absolute Time(精确到毫秒级)模账户的关联账户数作为序号读“关联账户表”;取随机数模账户的关联账户数作为序号读“关联账户表”;取交易的日志号模账户的关联账户数作为序号读“关联账户表”。
需要注意的是,关联账户的余额更新需要放在余额统计之前,因为对于账户的余额统计采用的是脏读的方式(如果不采用脏读的方式统计余额,数据库在查询时会先testlock,这会影响并行),这样才能避免并行的取款交易导致账户出现透支。如图9所示,为了提高并行度汇总关联账户余额采用的是脏读的方式,假设交易1、交易2同时发生。图9中的A中,若更新余额在汇总余额之前,交易1汇总余额时能取到交易1和交易2扣减后的余额,交易2也同理,这样当余额不足时两笔交易会同时失败而不会产生透支。图9中的B中,若更新余额在汇总余额之后,交易1汇总余额时取到的是交易1、2发生之前的账户余额,交易2也同理,这样当余额均能支持交易1、2的支取金额但是无法支持交易1、交易2的支取金额之和时(余额>交易1支取金额and余额>交易2支取金额and余额<交易1支取金额+交易2支取金额),交易1、2均能成功但是实际账户发生了透支。
如上即是本发明提供的一种账户并行存取款的系统,通过为账户设置多个关联账户的方式,实现了账户的并行存取并可防止透支。取款时先更新任意关联账户余额后再通过脏读的方式汇总关联账户的“余额减存入浮动额”作为账户余额进行透支检查。存款时更新任意关联账户余额和存入浮动额,存款交易提交后再清空关联账户的存入浮动额确保只有在存款交易成功后存入金额才能落实。
此外,尽管在上文详细描述中提及了系统的若干单元模块,但是这种划分仅仅并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。同样,上文描述的一个单元的特征和功能也可以进一步划分为由多个单元来具体化。以上所使用的术语“模块”和“单元”,可以是实现预定功能的软件和/或硬件。尽管以下实施例所描述的模块较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
在介绍了本发明示例性实施方式的系统之后,接下来,参考附图对本发明示例性实施方式的方法进行介绍。该方法的实施可以参见上述整体的实施,重复之处不再赘述。
本发明提供了一种账户并行存取款的方法,请参阅图4,该方法包括:
S101:通过新增数据库表的方式为一账户设立多个关联账户。
在本申请中,账户包括现有技术中提及的“热点账户”,这些“热点账户”每天会有大量的存取款业务发生,同时这些存取款业务还是高频的。
在本申请的一种实施方式中,通过新增数据库表的方式为账户设立多个关联账户。新增的数据库表如下表1所示。
S102:将所述账户的余额拆分后放入所述关联账户中。
S103:将所述账户对应的多个关联账户进行锁定操作。在本申请中,锁定操作通过下述数据库锁机制来实现。具体的:
为了之后更清楚的分析,此处以DB2数据库为例详细介绍关系型数据库锁的机制。DB2数据库的锁分为2个层次,第一层是Tablespace/Table层的锁,本申请无需考虑这个层次的锁。第二层是Page/Row层的锁,本申请所指的锁均是指这个层次的锁。
Page/Row层的锁分为3种,S-共享、U-更新和X-排他,它们的互斥关系如表2所示,其中,√-表示可以共存,×-表示互斥。
:对Page/Row上S、U、X中何种锁是由结构化查询语言(Structured QueryLanguage,SQL)语句本身决定的。DML语句如Update、Insert、Delete必定会对Page/Row上X锁,直到事务提交(commit)或者回滚(rollback)才会释放。DQL(Select)语句是否上锁、上S/U中的何种锁、何时释放锁,则受Isolation Level(在程序编译时指定或者在Select语句中指定)和For Update of子句影响,如下表3所示。
S104:对所述关联账户进行并行存款业务。
S105:对所述关联账户进行并行取款业务。
在介绍具体的存取款业务之前,本申请首先介绍影响热点账户并行的原因以及本申请提供的关联账户的账户表数据结构。根据核心系统过往的需求,对于热点账户的并行需求仅限于并行的存取款。因此本申请仅对热点账户的存取款处理做分析。
在现有的核心系统账户体系架构中,一个账户的余额信息在库表中有且只有一条记录。以取款为例(存款同理,此处不再描述),因为要更新账户的余额,势必会对账户的余额信息记录上X锁,鉴于关系型数据库锁的机制对单个账户的取款只能串行执行(也因此保证金账户余额的数据一致性)。如图7所示的并行取款时的处理流程,交易A先上了U锁,因此交易B需要等待交易A事务提交后释放U锁。
影响热点账户并行存取的根本原因还是一个账户的余额信息在库表中有且只有一条记录,当存入支取更新账户的余额时会基于关系型锁的机制只能串行执行。
因此本申请首先设计一个库表,将热点账户的余额记录拆分为多条记录存放到这个库表中。在本申请中,将新设计的库表命名为“关联账户表”,其数据结构设计如表1所示。从该库表的数据结构可以清晰的看到一个账户可以对应下述库表的多条记录,原账户的余额被分散在该库表的多条记录中,一个账户的余额可以体现为“SELECT SUM(余额)-SUM(存入浮动额)FROM影子账户表WHERE账号=?”,原账户的余额信息记录中的余额不再有意义。
在本申请的其他实施方式中,所述方法还包括:
将所述账户对应的账户层的库表设置为只读方式。
图5为步骤S104的流程示意图,请参阅图5,步骤S104包括:
S201:增加所述关联账户的余额以及存入浮动额。
在本申请中,账户的余额体现为“SELECT SUM(余额)-SUM(存入浮动额)FROM影子账户表WHERE账号=?”,因此此时账户余额并未增加,即存入金额并未落实。
S202:当存款业务成功时,将所述关联账户的存入浮动额清空以确定存入金额。
在本申请中,对账户层的库表数据设置为只读方式,即只读原账户余额信息记录。将所述账户对应的多个关联账户进行锁定操作。在执行锁定操作时,可根据随机数等规则找到账户的任意一个关联账户,锁定该条关联账户。在执行并行存款业务时,首先增加所述关联账户的余额以及存入浮动额,最后当存款业务成功时,将所述关联账户的存入浮动额清空以确定存入金额。下面简述为何存入同时要增加余额和浮动额,以图10为例,假设账户当前余额为100,存款交易(交易1)存入100,取款交易(交易2)支取150。假如不使用“存入浮动额”,那么:
1.存款交易先于取款交易“脏读汇总账户的关联账户的余额,获得账户支取后余额”步骤前更新了关联账户记录A的余额,这时账户余额变为200。
2.取款交易扣减关联账户记录B的余额后,通过“脏读汇总账户的影子账户余额获得账户支取后余额”步骤获得账户余额为50,取款成功。
3.之后存款交易发生一些错误回滚了更新。
4.最终账户余额变为了-50,产生了透支。
本申请在引入“存入浮动额”后,可以避免透支,具体的:
1.存款交易先于取款交易“脏读汇总账户的影子账户余额获得账户支取后余额”步骤前更新了影子账户记录A的余额和存入浮动额,此时存入金额并未落实,账户余额仍为100(原因参见账户余额计算的SQL)。
2.取款交易扣减关联账户记录B的余额后,通过“脏读汇总账户的影子账户余额获得账户支取后余额”步骤获得账户余额为-50,回滚退出。
因此,本申请设置了浮动额,能够避免并行取款可能造成账户发生透支的情况。
关联账户余额记录的存入浮动额清理需要等到存款交易完全结束后才能做,处理方法有两种,如表4所示。
图6为步骤S105的流程示意图,请参阅图6,步骤S105包括:
S301:扣减所述关联账户的余额。
在本申请的一种实施方式中,允许将关联账户中的余额扣减为负数。
S302:更新所述关联账户的余额;
S303:通过结构化查询语言SQL语句中的SUM函数汇总所有关联账户的余额以及浮动额,确定出所述账户的账户余额。
在本申请中,SQL语句隔离级别必须为脏读,这样可以读到其他并行的存取交易未提交的更新。
S304:对所述账户进行透支检查。如图8所示。
在本申请中,可以通过以下几种方式中的任一种确保并行的支取/存入业务更新不同的关联账户的余额记录。
取Absolute Time(精确到毫秒级)模账户的关联账户数作为序号读“关联账户表”;取随机数模账户的关联账户数作为序号读“关联账户表”;取交易的日志号模账户的关联账户数作为序号读“关联账户表”。
需要注意的是,关联账户的余额更新需要放在余额统计之前,因为对于账户的余额统计采用的是脏读的方式(如果不采用脏读的方式统计余额,数据库在查询时会先testlock,这会影响并行),这样才能避免并行的取款交易导致账户出现透支。如图9所示,为了提高并行度汇总关联账户余额采用的是脏读的方式,假设交易1、交易2同时发生。图9中的A中,若更新余额在汇总余额之前,交易1汇总余额时能取到交易1和交易2扣减后的余额,交易2也同理,这样当余额不足时两笔交易会同时失败而不会产生透支。图9中的B中,若更新余额在汇总余额之后,交易1汇总余额时取到的是交易1、2发生之前的账户余额,交易2也同理,这样当余额均能支持交易1、2的支取金额但是无法支持交易1、交易2的支取金额之和时(余额>交易1支取金额and余额>交易2支取金额and余额<交易1支取金额+交易2支取金额),交易1、2均能成功但是实际账户发生了透支。
本申请还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本申请提供的账户并行存取款的方法。
本申请还提供了一种计算机可读存储介质,存储有实现本申请提供的账户并行存取款的方法的计算机程序。
综上所述,本发明提供了一种账户并行存取款的方法、账户并行存取款的系统、计算机设备以及计算机可读存储介质,通过为一个账户设立多个关联账户,将账户的余额拆分入不同的关联账户中,并对关联账户进行锁定操作,之后进行并行的存取更新不同的关联账户记录,由于应用了锁的机制,因此保证了所有账户余额的准确性,确保账户本身不会出现透支情况。
本申请实现了在银行核心系统中支持对“热点账户”并行的存取款操作,这些存取款操作需要与普通的存取款操作一致,相比现有技术方案:
1、“热点账户”实现了真正意义上的高并行,存取业务相比现有“打包”的技术方案吞吐量可以有巨幅的提升。
2、对“热点账户”存取款操作后,账户余额可以真实的反应交易后的余额,方便对账。即使交易失败也无需任何人工或者自动的方式进行调账,方便发生业务的公司进行对账。
3、相关的业务前置系统可以按照常规的存取操作对“热点账户”做存入或者支取业务。相比现有技术方案,相关的业务前置系统开发难度与开发量大幅减少。
对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(ProgrammableLogic Device,PLD)(例如现场可编程门阵列(Field Programmable Gate Array,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logiccompiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware DescriptionLanguage,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced BooleanExpression Language)、AHDL(Altera Hardware Description Language)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java HardwareDescription Language)、Lava、Lola、MyHDL、PALASM、RHDL(Ruby Hardware DescriptionLanguage)等,目前最普遍使用的是VHDL(Very-High-Speed Integrated CircuitHardware Description Language)与Verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。
本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机系统(可以是个人计算机,服务器,或者网络系统等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持系统或便携式系统、平板型系统、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子系统、网络PC、小型计算机、大型计算机、包括以上任何系统或系统的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理系统来执行任务。在分布式计算环境中,程序模块可以位于包括存储系统在内的本地和远程计算机存储介质中。
虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。
Claims (10)
1.一种账户并行存取款的方法,其特征是,所述方法包括:
通过新增数据库表的方式为一账户设立多个关联账户;
将所述账户的余额拆分后放入所述关联账户中;
将所述账户对应的多个关联账户进行锁定操作;
对所述关联账户进行并行存款业务;
对所述关联账户进行并行取款业务。
2.根据权利要求1所述的方法,其特征是,所述方法还包括:
将所述账户对应的账户层的库表设置为只读方式。
3.根据权利要求2所述的方法,其特征是,对所述关联账户进行并行存取款业务包括:
增加所述关联账户的余额以及存入浮动额;
当存款业务成功时,将所述关联账户的存入浮动额清空以确定存入金额。
4.根据权利要求1所述的方法,其特征是,对所述关联账户进行并行取款业务包括:
扣减所述关联账户的余额;
更新所述关联账户的余额;
通过结构化查询语言SQL语句中的SUM函数汇总所有关联账户的余额以及浮动额,确定出所述账户的账户余额;
对所述账户进行透支检查。
5.一种账户并行存取款的系统,其特征是,所述系统包括:
关联账户设置模块,用于通过新增数据库表的方式为一账户设立多个关联账户;
账户余额拆分模块,用于将所述账户的余额拆分后放入所述关联账户中;
关联账户锁定模块,用于将所述账户对应的多个关联账户进行锁定操作;
并行存款业务模块,用于对所述关联账户进行并行存款业务;
并行取款业务模块,用于对所述关联账户进行并行取款业务。
6.根据权利要求5所述的系统,其特征是,所述系统还包括:
只读方式设置模块,用于将所述账户对应的账户层的库表设置为只读方式。
7.根据权利要求6所述的系统,其特征是,所述并行存款业务模块包括:
关联账户增加模块,用于增加所述关联账户的余额以及存入浮动额;
浮动额清空模块,用于当存款业务成功时,将所述关联账户的存入浮动额清空以确定存入金额。
8.根据权利要求6所述的系统,其特征是,所述并行取款业务模块包括:
余额扣减模块,用于扣减所述关联账户的余额;
余额更新模块,用于更新所述关联账户的余额;
金额汇总模块,用于通过结构化查询语言SQL语句中的SUM函数汇总所有关联账户的余额以及浮动额,确定出所述账户的账户余额;
透支检查模块,用于对所述账户进行透支检查。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征是,所述处理器执行所述计算机程序时实现权利要求1至4任一所述方法。
10.一种计算机可读存储介质,其特征是,所述计算机可读存储介质存储有执行权利要求1至4任一所述方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810310475.9A CN108615145A (zh) | 2018-04-09 | 2018-04-09 | 一种账户并行存取款的方法以及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810310475.9A CN108615145A (zh) | 2018-04-09 | 2018-04-09 | 一种账户并行存取款的方法以及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108615145A true CN108615145A (zh) | 2018-10-02 |
Family
ID=63659916
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810310475.9A Withdrawn CN108615145A (zh) | 2018-04-09 | 2018-04-09 | 一种账户并行存取款的方法以及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108615145A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109618070A (zh) * | 2018-12-03 | 2019-04-12 | 中国移动通信集团江苏有限公司 | 话单计费方法、装置、设备及介质 |
CN109741052A (zh) * | 2019-01-28 | 2019-05-10 | 杭州复杂美科技有限公司 | 红包处理方法、设备和存储介质 |
CN109919623A (zh) * | 2019-02-28 | 2019-06-21 | 泰康保险集团股份有限公司 | 防止账户透支方法、装置、设备及可读存储介质 |
CN109918200A (zh) * | 2019-03-04 | 2019-06-21 | 中国工商银行股份有限公司 | 热点账户处理方法、装置及系统 |
CN110264332A (zh) * | 2019-05-06 | 2019-09-20 | 阿里巴巴集团控股有限公司 | 账户出账的方法、装置和电子设备 |
CN111695984A (zh) * | 2020-05-29 | 2020-09-22 | 中国建设银行股份有限公司 | 一种账号余额处理方法和装置 |
CN113806393A (zh) * | 2021-09-24 | 2021-12-17 | 拉扎斯网络科技(上海)有限公司 | 电子资源处理方法、装置、电子设备及可读存储介质 |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2260481A1 (en) * | 1998-01-26 | 1999-07-26 | Citibank Canada | A method and system for general accounting generation for common sub ledger processing |
JP2003044644A (ja) * | 2001-07-30 | 2003-02-14 | Idemitsu Kosan Co Ltd | 自動会計仕訳システムおよび自動会計仕訳プログラム |
JP2006209677A (ja) * | 2005-01-31 | 2006-08-10 | Sumitomo Mitsui Banking Corp | 外貨預金を用いた為替取引方法および銀行システム |
CN101344953A (zh) * | 2008-09-02 | 2009-01-14 | 蒋晓谦 | 预测未来事件的服务平台 |
JP2009020676A (ja) * | 2007-07-11 | 2009-01-29 | Japan Research Institute Ltd | 預金口座に対する入出金処理方法およびシステム |
CN101763619A (zh) * | 2010-02-02 | 2010-06-30 | 中国工商银行股份有限公司 | 一种金融票据电子化交易装置及方法 |
US8352342B1 (en) * | 2009-06-19 | 2013-01-08 | Island Intellectual Property Llc | Method and system for determining fees for deposits allocated over a plurality of deposit institutions |
US20130246303A1 (en) * | 2012-03-14 | 2013-09-19 | The Bank Of New York Mellon, A New York Banking Corporation | Corporate actions automation system and method |
CN103677771A (zh) * | 2012-09-06 | 2014-03-26 | 阿里巴巴集团控股有限公司 | 一种并发事务的处理方法和装置 |
CN105447604A (zh) * | 2014-08-04 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种账户处理方法及装置 |
CA2912066A1 (en) * | 2014-11-13 | 2016-05-13 | Jeff POMEROY | System and method of reloading prepaid cards |
CN105991571A (zh) * | 2015-02-09 | 2016-10-05 | 阿里巴巴集团控股有限公司 | 一种信息处理方法及装置 |
CN106952158A (zh) * | 2017-03-17 | 2017-07-14 | 证通股份有限公司 | 解决热点账户问题的记账方法及设备 |
CN107274162A (zh) * | 2017-05-31 | 2017-10-20 | 深圳市长亮科技股份有限公司 | 一种高交易并发量的处理方法 |
CN107430725A (zh) * | 2014-12-22 | 2017-12-01 | 曼弗雷德·内斯蒂夫特 | 连续流支付 |
-
2018
- 2018-04-09 CN CN201810310475.9A patent/CN108615145A/zh not_active Withdrawn
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2260481A1 (en) * | 1998-01-26 | 1999-07-26 | Citibank Canada | A method and system for general accounting generation for common sub ledger processing |
JP2003044644A (ja) * | 2001-07-30 | 2003-02-14 | Idemitsu Kosan Co Ltd | 自動会計仕訳システムおよび自動会計仕訳プログラム |
JP2006209677A (ja) * | 2005-01-31 | 2006-08-10 | Sumitomo Mitsui Banking Corp | 外貨預金を用いた為替取引方法および銀行システム |
JP2009020676A (ja) * | 2007-07-11 | 2009-01-29 | Japan Research Institute Ltd | 預金口座に対する入出金処理方法およびシステム |
CN101344953A (zh) * | 2008-09-02 | 2009-01-14 | 蒋晓谦 | 预测未来事件的服务平台 |
US8352342B1 (en) * | 2009-06-19 | 2013-01-08 | Island Intellectual Property Llc | Method and system for determining fees for deposits allocated over a plurality of deposit institutions |
CN101763619A (zh) * | 2010-02-02 | 2010-06-30 | 中国工商银行股份有限公司 | 一种金融票据电子化交易装置及方法 |
US20130246303A1 (en) * | 2012-03-14 | 2013-09-19 | The Bank Of New York Mellon, A New York Banking Corporation | Corporate actions automation system and method |
CN103677771A (zh) * | 2012-09-06 | 2014-03-26 | 阿里巴巴集团控股有限公司 | 一种并发事务的处理方法和装置 |
CN105447604A (zh) * | 2014-08-04 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种账户处理方法及装置 |
CA2912066A1 (en) * | 2014-11-13 | 2016-05-13 | Jeff POMEROY | System and method of reloading prepaid cards |
CN107430725A (zh) * | 2014-12-22 | 2017-12-01 | 曼弗雷德·内斯蒂夫特 | 连续流支付 |
CN105991571A (zh) * | 2015-02-09 | 2016-10-05 | 阿里巴巴集团控股有限公司 | 一种信息处理方法及装置 |
CN106952158A (zh) * | 2017-03-17 | 2017-07-14 | 证通股份有限公司 | 解决热点账户问题的记账方法及设备 |
CN107274162A (zh) * | 2017-05-31 | 2017-10-20 | 深圳市长亮科技股份有限公司 | 一种高交易并发量的处理方法 |
Non-Patent Citations (2)
Title |
---|
张海利;王振华;卢战鸽;: "银行业务变更需求的分析和思考", 中国金融电脑, no. 05, 7 May 2013 (2013-05-07) * |
杨会超;孙冬;: "电子支付系统在江苏汾灌高速公路的应用", 中国交通信息产业, no. 10, 25 October 2007 (2007-10-25) * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109618070A (zh) * | 2018-12-03 | 2019-04-12 | 中国移动通信集团江苏有限公司 | 话单计费方法、装置、设备及介质 |
CN109618070B (zh) * | 2018-12-03 | 2021-03-23 | 中国移动通信集团江苏有限公司 | 话单计费方法、装置、设备及介质 |
CN109741052A (zh) * | 2019-01-28 | 2019-05-10 | 杭州复杂美科技有限公司 | 红包处理方法、设备和存储介质 |
CN109919623A (zh) * | 2019-02-28 | 2019-06-21 | 泰康保险集团股份有限公司 | 防止账户透支方法、装置、设备及可读存储介质 |
CN109919623B (zh) * | 2019-02-28 | 2021-08-13 | 泰康保险集团股份有限公司 | 防止账户透支方法、装置、设备及可读存储介质 |
CN109918200A (zh) * | 2019-03-04 | 2019-06-21 | 中国工商银行股份有限公司 | 热点账户处理方法、装置及系统 |
CN110264332A (zh) * | 2019-05-06 | 2019-09-20 | 阿里巴巴集团控股有限公司 | 账户出账的方法、装置和电子设备 |
CN111695984A (zh) * | 2020-05-29 | 2020-09-22 | 中国建设银行股份有限公司 | 一种账号余额处理方法和装置 |
CN113806393A (zh) * | 2021-09-24 | 2021-12-17 | 拉扎斯网络科技(上海)有限公司 | 电子资源处理方法、装置、电子设备及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108615145A (zh) | 一种账户并行存取款的方法以及系统 | |
US20210374610A1 (en) | Efficient duplicate detection for machine learning data sets | |
US11816100B2 (en) | Dynamically materialized views for sheets based data | |
US11086894B1 (en) | Dynamically updated data sheets using row links | |
CN109615495B (zh) | 一种数据的对账方法、装置、设备及系统 | |
US10019535B1 (en) | Template-free extraction of data from documents | |
CN103425722A (zh) | 无日志的原子数据移动 | |
CN103425723A (zh) | 删除多级存储架构中的记录而不进行记录锁定 | |
JP2002538546A (ja) | Abapコードコンバータの仕様 | |
CN107358525B (zh) | 一种账户交易方法和装置 | |
US20180285982A1 (en) | Automated field-mapping of account names for form population | |
US20180121292A1 (en) | Systems and methods for database management | |
CN109978540A (zh) | 一种分布式记账方法、设备及系统 | |
CN109472680A (zh) | 一种账务处理方法及系统 | |
US11861692B2 (en) | Automated hybrid pipeline for customer identification | |
Deng et al. | Why do zombie firms seldom die or resurrect? The effect of government subsidies on the survival duration of China’s zombie firms | |
CN112035503B (zh) | 交易数据更新方法及装置 | |
US7516144B2 (en) | Method and system for re-population of data in a database | |
EP4172902A1 (en) | A machine learning framework and method for using the same | |
CN110046877A (zh) | 对账方法和装置、服务器 | |
CN110046976A (zh) | 对账方法和装置、服务器 | |
CN110189219B (zh) | 一种基于参数预加工的对账方法和装置 | |
US20190311345A1 (en) | Real-time data storage and analytics system | |
CN106844242B (zh) | 一种数据交换方法和系统 | |
CN110597862A (zh) | 一种基于信息系统的数据录入方法、设备以及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20181002 |
|
WW01 | Invention patent application withdrawn after publication |