CN110060036A - 一种拆分记账方法、账务系统及支付系统 - Google Patents
一种拆分记账方法、账务系统及支付系统 Download PDFInfo
- Publication number
- CN110060036A CN110060036A CN201910254880.8A CN201910254880A CN110060036A CN 110060036 A CN110060036 A CN 110060036A CN 201910254880 A CN201910254880 A CN 201910254880A CN 110060036 A CN110060036 A CN 110060036A
- Authority
- CN
- China
- Prior art keywords
- account
- record
- balance
- balance units
- accounting
- 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.)
- Granted
Links
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/02—Payment architectures, schemes or protocols involving a neutral party, e.g. certification authority, notary or trusted third party [TTP]
- G06Q20/023—Payment architectures, schemes or protocols involving a neutral party, e.g. certification authority, notary or trusted third party [TTP] the neutral party being a clearing house
-
- 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/04—Payment circuits
- G06Q20/06—Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme
- G06Q20/065—Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme using e-cash
-
- 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/085—Payment architectures involving remote charge determination or related payment systems
- G06Q20/0855—Payment architectures involving remote charge determination or related payment systems involving a third party
-
- 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/38—Payment protocols; Details thereof
Landscapes
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Engineering & Computer Science (AREA)
- Strategic Management (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Finance (AREA)
- Computer Security & Cryptography (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
本发明公开了一种拆分记账方法、账务系统及支付系统,包括:获取热点账户的账户余额;将所述余额数字按照十进制单位的顺序,拆分为共计N个余额单位表,N为所述余额数字在十进制表示状态下的位数;每个余额单位表中包含M行记录,M为其所在的余额单位表所表示的十进制单位的数值;每一行记录具有一个主键ID;当记账请求为支出请求时,从不同的余额单位表中删除相应行数的记录;当记账请求为入账请求时,从不同的余额单位表中增加相应行数的记录。此外,还公开了相应的账务系统和支付系统。本发明解决了热点账户(单账户高并发)记账瓶颈,把现有技术中的抢锁记账方式变更为无锁可并发式记账,提升了热点账户的并发量及吞吐量。
Description
技术领域
本发明涉及在线支付业务领域,尤其涉及一种拆分记账方法、账务系统及支付系统。
背景技术
当前,在线支付应用的行业越来越广泛,例如电商、航旅、数娱、在线教育、投资理财、大宗交易、基金保险等等。
在线支付通常需要引入第三方支付平台。第三方支付平台通常有自己的一套客户/账户/账务系统。
在第三方支付平台的账务系统的处理中,数据从一个账户转出,或者有数据转入一个账户,账户都会收到记账请求,并都有一个记账处理的过程。记账处理过程主要包括两部分,一是记录记账凭证,二是更新账户的余额。现有的记账方式一般为一个账户一条余额记录,为了保证账户不被其他请求影响数据的准确性,在进行记账处理时,会先对账户的资源加锁,记账处理完毕后会自动释放锁。随着账务处理业务量的增大,账务数据库中的账户常常会在瞬间产生多个并发操作,但所有对应的并发线程中只有一个线程能够持有当前账户的资源锁,其他线程必须等待该锁被释放后再逐一进行记账处理,这样该账户将会被频繁加锁释锁,使该账户成为账务数据库热点,即热点账户,产生性能瓶颈点,严重影响账务数据库的性能。
因此,需要提供一种记账方法,解决热点账户高并发的能力受制于数据库悲观锁的瓶颈限制的问题,以提高热点账户的并发量及吞吐量。
发明内容
本发明的目的在于提供一种拆分记账方法,以解决上述技术背景中提出的问题。
为实现上述目的,本发明采用以下技术方案:
本发明第一个方面提供了一种拆分记账方法,包括:
获取账户的记账请求;
判断所述账户是否属于热点账户,所述热点账户是指在交易系统中发生资金进出操作、加锁解锁操作的频率大于预设阈值的账户;
若所述账户属于热点账户,则进入拆分记账流程,所述拆分记账流程包括:
从所述交易系统的内存中获取所述热点账户的账户余额,得到以分为单位的余额数字;
将所述余额数字按照十进制单位的顺序,拆分为共计N个余额单位表,N为所述余额数字在十进制表示状态下的位数;每个余额单位表中包含M行记录,M为其所在的余额单位表所表示的十进制单位的数值;每一行记录具有一个主键ID;
当所述记账请求为支出请求时,若支出金额在资金控制阈值内,则根据支出金额,分别从不同的余额单位表中删除相应行数的记录,更新所述热点账户的账户余额,并将最后一笔记录的主键ID缓存于一缓存单元,结束本次拆分记账流程;否则,拒绝本次交易;所述资金控制阈值是根据所述热点账户的历史资金流出数据得到的安全金额;
当所述记账请求为入账请求时,则根据入账金额,分别从不同的余额单位表中增加相应行数的记录,更新所述热点账户的账户余额,并将最后一笔记录的主键ID缓存于一缓存单元,结束本次拆分记账流程。
优选地,所述记账请求为支出请求时:
第T-1余额单位表中的已有的记录的行数为a,欲删除的行数为b,a、b为大于等于0且小于等于9的自然数;
当a≥b时,第T-1余额单位表中的记录更新为(a-b)行;
当a<b时,第T-1余额单位表中增加(10-b)行新记录,同时,与其相邻的更高单位的第T余额单位表中删除一行记录;其中,T为大于等于2且小于等于N的自然数。
优选地,所述记账请求为入账请求时:
第T-1余额单位表中的已有的记录的行数为a,欲增加的行数为c,a、c为大于等于0且小于等于9的自然数;
当a+c≤9时,第T-1余额单位表中的记录更新为(a+c)行;
当a+c>9时,第T-1余额单位表中删除(10–c)行记录,同时,与其相邻的更高单位的第T余额单位表中增加一行记录;其中,T为大于等于2且小于等于N的自然数。
优选地,所述拆分记账方法还包括并发处理流程,所述并发处理流程包括:
当每个记账请求到来时,若需要更新所述余额单位表的记录,则获取所述缓存单元中该余额单位表中最后一笔记录的主键ID的值ID;从所述缓存单元中抢占主键ID区域进行记账操作;所述主键ID区域为ID+1,ID+2,……,ID+K,K为大于等于1的自然数,表示欲删除或欲增加记录的行数。
优选地,所述主键ID为一固定长度的数据,其中包括代表具有该主键ID的行所在的余额单位表的单位标识,以及代表余额单位表的记录更新次数的自然数。
优选地,所述拆分记账方法还包括:
第T-1余额单位表中的已有的记录的行数为a,欲删除的行数为b,a、b为大于等于0且小于等于9的自然数;
当第T-1余额单位表中的记录在删除过程中出现异常,则
a≥b时,第T-1余额单位表中的记录增加b行;
a<b时,第T-1余额单位表中删除(10-b)行记录,同时,与其相邻的更高单位的第T余额单位表中增加一行记录;其中,T为大于等于2且小于等于N的自然数。
优选地,所述拆分记账方法还包括:
第T-1余额单位表中的已有的记录的行数为a,欲增加的行数为c,a、c为大于等于0且小于等于9的自然数;
当第T-1余额单位表中的记录在增加过程中出现异常,则
当a+c≤9时,第T-1余额单位表中的记录删除c行;
当a+c>9时,第T-1余额单位表中增加(10–c)行记录,同时,与其相邻的更高单位的第T余额单位表中删除一行记录;其中,T为大于等于2且小于等于N的自然数。
优选地,所述拆分记账方法还包括:
若支出金额不在资金控制阈值内,记录本次交易失败;
当失败次数达到预定次数阈值时,更新所述资金控制阈值。
优选地,所述缓存单元为Redis缓存数据库。
优选地,所述缓存单元包括多个hash结构的缓存块,属于同一个账户的所有记账请求被保存在同一个hash结构的缓存块中;hash结构中key为十进制单位,value为该十进制单位对应的余额单位表中的主键ID。
优选地,所述余额单位表中的十进制单位可以为人民币,也可以为美元或者其它币种。
本发明第二个方面提供了一种账务系统,采用上述任一拆分记账方法,所述账务系统包括:
——接收模块,接收交易系统发送的记账请求,所述记账请求是针对账户的账户余额发生变动的多笔待处理交易;
——判断模块,用于在接收到记账请求后,判断所述账户是否属于热点账户,所述热点账户是指在交易系统中发生资金进出操作、加锁解锁操作的频率大于预设阈值的账户;
——获取模块,当所述账户属于热点账户时,从交易系统的内存中获取所述账户的账户余额,得到以分为单位的余额数字;
——拆分记账模块,将所述余额数字按照十进制单位的顺序,拆分为共计N个余额单位表,N为所述余额数字在十进制表示状态下的位数;每个余额单位表中包含M行记录,M为其所在的余额单位表所表示的十进制单位的数值;每一行记录具有一个主键ID;
当所述记账请求为支出请求时,若支出金额在资金控制阈值内,则根据支出金额,分别从不同的余额单位表中删除相应行数的记录,更新所述热点账户的账户余额,并将最后一笔记录的主键ID缓存于一缓存单元;所述资金控制阈值是根据所述热点账户的历史资金流出数据得到的安全金额;
当所述记账请求为入账请求时,则根据入账金额,分别从不同的余额单位表中增加相应行数的记录,更新所述热点账户的账户余额,并将最后一笔记录的主键ID缓存于一缓存单元;
——缓存单元,针对所述热点账户的每一个记账请求,记录每个余额单位表中最后一笔记录的主键ID的值ID。
优选地,所述账务系统还包括并发处理模块:
所述并发处理模块,用于在每个记账请求到来,且需要更新所述余额单位表的记录时,从所述缓存单元中抢占主键ID区域进行记账操作;所述主键ID区域为ID+1,ID+2,……,ID+K,K为大于等于1的自然数,表示欲删除或欲增加记录的行数。
优选地,所述账务系统还包括异常处理模块:
所述异常处理模块,用于在所述余额单位表中的记录在删除或增加的过程中出现异常时,恢复所述热点账户的账户余额。
优选地,所述账务系统还包括校验处理模块:
所述校验处理模块,用于当所述支出金额在资金控制阈值的范围内,继续执行本次交易;否则,拒绝本次交易;所述资金控制阈值是根据所述热点账户的历史资金流出数据得到的安全金额。
本发明第三个方面提供了一种支付系统,其包括交易系统,以及与该交易系统连接的上述的账务系统,其中:所述交易系统接收订单、处理订单并将其下发至所述账务系统供其记账。
本发明的支付系统由于采用了上述账务系统,而上述账务系统由于采用了上述拆分记账方法,因此提高了自身处理热点账户高并发的能力。具体原理前已详述,在此不再赘述。
与现有技术相比,本发明的技术方案具有以下有益效果:
1)提供一种拆分记账方法,该方法主要解决了热点账户(单账户高并发)记账瓶颈,把现有技术中的抢锁记账方式变更为无锁可并发式记账,将账户余额按照十进制单位拆分为多个表多个记录,通过删除或增加记录的行数进行记账,提升了热点账户的并发量及吞吐量。
2)同时保证了账户记账的安全性、有效性以及高效性。
本发明所述的账务系统和支付系统同样具有以上优点和有益效果。
附图说明
构成本申请的一部分附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是本发明所述的拆分记账方法的基本流程示意图。
图2~图3为本发明实施例一的账户余额拆分结构示意图。
图4~图6为本发明实施例二的账户余额拆分结构示意图。
具体实施方式
本发明提供一种拆分记账方法、账务系统及支付系统,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序,应该理解这样使用的数据在适当情况下可以互换。此外,术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明适用于单账户高并发的记账场景,如支付公司,电商、理财、p2p、证券等公司的账务系统。
图1示意了本发明所述的拆分记账方法的基本流程。
如图1所示,一种拆分记账方法,包括:
获取账户的记账请求;
判断所述账户是否属于热点账户,所述热点账户是指在交易系统中发生资金进出操作、加锁解锁操作的频率大于预设阈值的账户;
若所述账户属于热点账户,则进入拆分记账流程,所述拆分记账流程包括:
从所述交易系统的内存中获取所述热点账户的账户余额,得到以分为单位的余额数字;
将所述余额数字按照十进制单位的顺序,拆分为共计N个余额单位表,N为所述余额数字在十进制表示状态下的位数;每个余额单位表中包含M行记录,M为其所在的余额单位表所表示的十进制单位的数值;每一行记录具有一个主键ID;
当所述记账请求为支出请求时,若支出金额在资金控制阈值内,则根据支出金额,分别从不同的余额单位表中删除相应行数的记录,更新所述热点账户的账户余额,并将最后一笔记录的主键ID缓存于一缓存单元,结束本次拆分记账流程;否则,拒绝本次交易;所述资金控制阈值是根据所述热点账户的历史资金流出数据得到的安全金额;
当所述记账请求为入账请求时,则根据入账金额,分别从不同的余额单位表中增加相应行数的记录,更新所述热点账户的账户余额,并将最后一笔记录的主键ID缓存于一缓存单元,结束本次拆分记账流程。
在一种优选实施例中,所述缓存单元为Redis缓存数据库。所述缓存单元包括多个hash结构的缓存块,属于同一个账户的所有记账请求被保存在同一个hash结构的缓存块中。hash结构中key为十进制单位,value为该十进制单位对应的余额单位表中的主键ID。通过查询账户(如:张三)对应的hash结构的缓存块,可以得到该账户所有的余额单位表的缓存数据。通过账户及指定的十进制单位,可以得到该账户指定十进制单位所对应的余额单位表中的所有缓存数据。例如,“张三分”,可得到张三账户下十进制单位为分的记账数据。
所述主键ID为一固定长度的数据,其中包括代表具有该主键ID的行所在的余额单位表的单位标识,以及代表余额单位表的记录更新次数的自然数。在一种优选实施例中,所述主键ID设计为一固定长度数据,共十九位。前八位表示日期,日期格式为yyyyMMdd;第九位和第十位是两位单位标识(01~99),表示十进制单位,01代表单位“分”,02代表单位“角”,03代表单位“元”,类似地,十元、百元、千元等十进制单位则将该单位标识依次增一;后九位为大于等于1、且自增的正整数L(1~999999999),不足九位在数字左侧以0占位,L表示该十进制单位的余额单位表中的第L条记录,例如:2019031801000000001代表2019年3月18日十进制单位为分的余额单位表中的第一条记录。
实施例一:
本发明的拆分记账方法支持多个币种,如人民币、美元或其它币种。本实施例中以人民币的拆分记账方法为例。
假设所述账户属于热点账户,进入以下拆分记账流程。
首先,从交易系统的内存中获取所述热点账户的账户余额。
人民币的单位为元,人民币辅币单位为角、分,由于人民币单位之间是十进制的换算关系,如,1元=10角,1角=10分,因此,将账户余额按照十进制单位被拆分为多个余额单位表,如分、角、元、十元、百元……等表,每个余额单位表包含至多9行记录,每行记录代表一个该十进制单位的数值,例如,单位为百元的余额单位表中,一行记录代表余额为100元,五行记录则代表余额为500元。
图2示意了本实施例一的一种账户余额拆分结构。如图2所示,账户为张三的账户余额为9999.99元,即999999分,根据上述拆分方法,将账户余额按照分、角、元、十元、百元、千元拆分为多个余额单位表,每个余额单位表中各分为九行记录,如单位为分的余额单位表中的九行记录表示9分,单位为角的余额单位表中的九行记录表示9角,……单位为千元的余额单位表中的九行记录表示9000元。
当所述记账请求为支出请求时,若支出金额在资金控制阈值内,则根据该支出金额,分别从不同的余额单位表中删除相应行数的记录。其中,所述资金控制阈值是根据所述热点账户的历史资金流出数据得到的安全金额。根据该资金控制阈值,如果在单位时间内,请求支出的金额总和在该资金控制阈值的范围内(比如,小于或等于该资金控制阈值),就可以确定账户余额是安全的,不会出现透支。
图3示意了在图2的基础上,当记账请求为支出请求时的账户余额拆分结构。如图3所示,当账户张三发出支出金额为555.00元的记账请求时,分别从单位为元、十元、百元的余额单位表中删除五行记录,即单位为元、十元、百元的余额单位表中各剩余四行记录,账户余额更新为9444.99元。
实施例二:
图4示意了本实施例二的一种账户余额拆分结构。如图4所示,账户为李四的账户余额为543.99元,根据上述拆分方法,将账户余额按照分、角、元、十元、百元、千元拆分为多个余额单位表。单位为分的余额单位表中包含九行记录,表示9分;单位为角的余额单位表中包含九行记录,表示9角;单位为元的余额单位表中包含的三行记录,表示3元;单位为十元的余额单位表中包含四行记录,表示40元;单位为百十元的余额单位表中包含五行记录,表示500元。
图5示意了在图4的基础上,当记账请求为支出请求时的账户余额拆分结构。如图5所示,当账户李四三发出支出金额为80.00元的记账请求时,单位为十元的余额单位表中记录行数不足,需要从更高单位的余额单位表中借一个单位,即,单位为十元的余额单位表中先删除四行记录,单位为百元的余额单位表中删除一行记录,单位为十元的余额单位表中再新增加六行记录。当然,也可以为,先删除单位为百元的余额单位表中一行记录,再往单位为十元的余额单位表中增加两行记录。账户余额更新为463.99元。
图6示意了在图4的基础上,当记账请求为入账请求时的账户余额拆分结构。如图6所示,当账户李四三发出入账金额为85.00元的记账请求时,单位为元的余额单位表中的记录直接增加五行;单位为十元的余额单位表中的记录行数如果直接增加八行,总行数会超过9,需要向更高单位的余额单位表进一个单位,即,单位为十元的余额单位表中先删除四行记录,单位为百元的余额单位表中增加一行记录,单位为十元的余额单位表中再新增加两行记录。当然,也可以为,单位为百元的余额单位表中先增加一行记录,单位为十元的余额单位表中再删除两行记录。账户余额更新为628.99元。
实施例三:
所述拆分记账方法还包括并发处理流程,所述并发处理流程包括:
当每个记账请求到来时,若需要更新所述余额单位表的记录,则获取所述缓存单元中该余额单位表中最后一笔记录的主键ID的值ID;从所述缓存单元中抢占主键ID区域进行记账操作;所述主键ID区域为ID+1,ID+2,……,ID+K,K为大于等于1的自然数,表示欲删除或欲增加记录的行数。
例如,当前,十进制单位为分的余额单位表中,最后一笔记录的主键ID为2019031801000000001,该笔记账请求需要删除十进制单位为分的余额单位表中的三行记录,则账户系统会从所述缓存单元中抢占主键ID:2019031801000000002、2019031801000000003和2019031801000000004。
实施例四:
所述拆分记账方法还包括异常处理流程,所述异常处理流程包括:
若所述余额单位表中的记录在删除过程中出现异常,则所述余额单位表中增加相应行数的记录,恢复所述热点账户的账户余额;或者
若所述余额单位表中的记录在增加过程中出现异常,则所述余额单位表中删除相应行数的记录,恢复所述热点账户的账户余额。
其中,该异常包括、但不限于网络异常、数据库异常、交易系统异常、账务系统异常中的一种或几种。
具体地,在一种实施例中,第T-1余额单位表中的已有的记录的行数为a,欲删除的行数为b,a、b为大于等于0且小于等于9的自然数;
当第T-1余额单位表中的记录在删除过程中出现异常,则
a≥b时,第T-1余额单位表中的记录增加b行;
a<b时,第T-1余额单位表中删除(10-b)行记录,同时,与其相邻的更高单位的第T余额单位表中增加一行记录;其中,T为大于等于2且小于等于N的自然数。
在另一种实施例中,第T-1余额单位表中的已有的记录的行数为a,欲增加的行数为c,a、c为大于等于0且小于等于9的自然数;
当第T-1余额单位表中的记录在增加过程中出现异常,则
当a+c≤9时,第T-1余额单位表中的记录删除c行;
当a+c>9时,第T-1余额单位表中增加(10–c)行记录,同时,与其相邻的更高单位的第T余额单位表中删除一行记录;其中,T为大于等于2且小于等于N的自然数。
上述异常处理流程在异常现象发生时,不会回滚缓存单元中的主键ID,也不会回滚数据库中已删除的记录,通过增加或删除相应行数的记录来恢复账户余额,确保了缓存单元中的数据与数据库中的数据始终保存同步。
应用实例:
现有的一种第三方支付平台包括用于收单、下发的交易系统,以及与该交易系统连接的用于拆分记账等账务处理的的账务系统,交易系统接收订单、处理订单并将其下发至账务系统供其记账。
按照上述实施例的记账方法基于数据库设计相应的软件,其中,账务系统主要包括:
——接收模块,接收交易系统发送的记账请求,所述记账请求是针对账户的账户余额发生变动的多笔待处理交易。
——判断模块,用于在接收到记账请求后,判断所述账户是否属于热点账户,所述热点账户是指在交易系统中发生资金进出操作、加锁解锁操作的频率大于预设阈值的账户。
——获取模块,当所述账户属于热点账户时,从交易系统的内存中获取所述账户的账户余额,得到以分为单位的余额数字。
——拆分记账模块,将所述余额数字按照十进制单位的顺序,拆分为共计N个余额单位表,N为所述余额数字在十进制表示状态下的位数;每个余额单位表中包含M行记录,M为其所在的余额单位表所表示的十进制单位的数值;每一行记录具有一个主键ID;
当所述记账请求为支出请求时,若支出金额在资金控制阈值内,则根据支出金额,分别从不同的余额单位表中删除相应行数的记录,更新所述热点账户的账户余额,并将最后一笔记录的主键ID缓存于一缓存单元;所述资金控制阈值是根据所述热点账户的历史资金流出数据得到的安全金额;
当所述记账请求为入账请求时,则根据入账金额,分别从不同的余额单位表中增加相应行数的记录,更新所述热点账户的账户余额,并将最后一笔记录的主键ID缓存于一缓存单元。
——缓存单元,针对所述热点账户的每一个记账请求,记录每个余额单位表中最后一笔记录的主键ID的值ID。
——并发处理模块,用于在每个记账请求到来,且需要更新所述余额单位表的记录时,从所述缓存单元中抢占主键ID区域进行记账操作;所述主键ID区域为ID+1,ID+2,……,ID+K,K为大于等于1的自然数,表示欲删除或欲增加记录的行数。
——异常处理模块,用于在所述余额单位表中的记录在删除或增加的过程中出现异常时,恢复所述热点账户的账户余额。
——校验处理模块,用于当所述支出金额在资金控制阈值的范围内,继续执行本次交易;否则,拒绝本次交易;所述资金控制阈值是根据所述热点账户的历史资金流出数据得到的安全金额。
其中,拆分记账模块,基于实施拆分记账流程。
本应用实例的第三方支付平台的账务系统在吞吐量上有非常大的提升,把现有技术中的抢锁记账方式变更为无锁可并发式记账,克服了热点账户(单账户高并发)的记账瓶颈,同时保证了账户记账的安全性、有效性以及高效性。
以上对本发明的具体实施例进行了详细描述,但其只是作为范例,本发明并不限制于以上描述的具体实施例。对于本领域技术人员而言,任何对本发明进行的等同修改和替代也都在本发明的范畴之中。因此,在不脱离本发明的精神和范围下所作的均等变换和修改,都应涵盖在本发明的范围内。
Claims (10)
1.一种拆分记账方法,其特征在于,包括:
获取账户的记账请求;
判断所述账户是否属于热点账户,所述热点账户是指在交易系统中发生资金进出操作、加锁解锁操作的频率大于预设阈值的账户;
若所述账户属于热点账户,则进入拆分记账流程,所述拆分记账流程包括:
从所述交易系统的内存中获取所述热点账户的账户余额,得到以分为单位的余额数字;
将所述余额数字按照十进制单位的顺序,拆分为共计N个余额单位表,N为所述余额数字在十进制表示状态下的位数;每个余额单位表中包含M行记录,M为其所在的余额单位表所表示的十进制单位的数值;每一行记录具有一个主键ID;
当所述记账请求为支出请求时,若支出金额在资金控制阈值内,则根据支出金额,分别从不同的余额单位表中删除相应行数的记录,更新所述热点账户的账户余额,并将最后一笔记录的主键ID缓存于一缓存单元,结束本次拆分记账流程;否则,拒绝本次交易;所述资金控制阈值是根据所述热点账户的历史资金流出数据得到的安全金额;
当所述记账请求为入账请求时,则根据入账金额,分别从不同的余额单位表中增加相应行数的记录,更新所述热点账户的账户余额,并将最后一笔记录的主键ID缓存于一缓存单元,结束本次拆分记账流程。
2.根据权利要求1所述的一种拆分记账方法,其特征在于,所述记账请求为支出请求时:
第T-1余额单位表中的已有的记录的行数为a,欲删除的行数为b,a、b为大于等于0且小于等于9的自然数;
当a≥b时,第T-1余额单位表中的记录更新为(a-b)行;
当a<b时,第T-1余额单位表中增加(10-b)行新记录,同时,与其相邻的更高单位的第T余额单位表中删除一行记录;其中,T为大于等于2且小于等于N的自然数。
3.根据权利要求1所述的一种拆分记账方法,其特征在于,所述记账请求为入账请求时:
第T-1余额单位表中的已有的记录的行数为a,欲增加的行数为c,a、c为大于等于0且小于等于9的自然数;
当a+c≤9时,第T-1余额单位表中的记录更新为(a+c)行;
当a+c>9时,第T-1余额单位表中删除(10–c)行记录,同时,与其相邻的更高单位的第T余额单位表中增加一行记录;其中,T为大于等于2且小于等于N的自然数。
4.根据权利要求1所述的一种拆分记账方法,其特征在于,所述拆分记账方法还包括并发处理流程,所述并发处理流程包括:
当每个记账请求到来时,若需要更新所述余额单位表的记录,则获取所述缓存单元中该余额单位表中最后一笔记录的主键ID的值ID;从所述缓存单元中抢占主键ID区域进行记账操作;所述主键ID区域为ID+1,ID+2,……,ID+K,K为大于等于1的自然数,表示欲删除或欲增加记录的行数。
5.根据权利要求1所述的一种拆分记账方法,其特征在于,所述拆分记账方法还包括:
第T-1余额单位表中的已有的记录的行数为a,欲删除的行数为b,a、b为大于等于0且小于等于9的自然数;
当第T-1余额单位表中的记录在删除过程中出现异常,则
a≥b时,第T-1余额单位表中的记录增加b行;
a<b时,第T-1余额单位表中删除(10-b)行记录,同时,与其相邻的更高单位的第T余额单位表中增加一行记录;其中,T为大于等于2且小于等于N的自然数。
6.根据权利要求1所述的一种拆分记账方法,其特征在于,所述拆分记账方法还包括:
第T-1余额单位表中的已有的记录的行数为a,欲增加的行数为c,a、c为大于等于0且小于等于9的自然数;
当第T-1余额单位表中的记录在增加过程中出现异常,则
当a+c≤9时,第T-1余额单位表中的记录删除c行;
当a+c>9时,第T-1余额单位表中增加(10–c)行记录,同时,与其相邻的更高单位的第T余额单位表中删除一行记录;其中,T为大于等于2且小于等于N的自然数。
7.一种账务系统,其特征在于,采用如权利要求1-6中任意一项所述的拆分记账方法,所述账务系统包括:
——接收模块,接收交易系统发送的记账请求,所述记账请求是针对账户的账户余额发生变动的多笔待处理交易;
——判断模块,用于在接收到记账请求后,判断所述账户是否属于热点账户,所述热点账户是指在交易系统中发生资金进出操作、加锁解锁操作的频率大于预设阈值的账户;
——获取模块,当所述账户属于热点账户时,从交易系统的内存中获取所述账户的账户余额,得到以分为单位的余额数字;
——拆分记账模块,将所述余额数字按照十进制单位的顺序,拆分为共计N个余额单位表,N为所述余额数字在十进制表示状态下的位数;每个余额单位表中包含M行记录,M为其所在的余额单位表所表示的十进制单位的数值;每一行记录具有一个主键ID;
当所述记账请求为支出请求时,若支出金额在资金控制阈值内,则根据支出金额,分别从不同的余额单位表中删除相应行数的记录,更新所述热点账户的账户余额,并将最后一笔记录的主键ID缓存于一缓存单元;所述资金控制阈值是根据所述热点账户的历史资金流出数据得到的安全金额;
当所述记账请求为入账请求时,则根据入账金额,分别从不同的余额单位表中增加相应行数的记录,更新所述热点账户的账户余额,并将最后一笔记录的主键ID缓存于一缓存单元;
——缓存单元,针对所述热点账户的每一个记账请求,记录每个余额单位表中最后一笔记录的主键ID的值ID。
8.根据权利要求7所述的一种账务系统,其特征在于,所述账务系统还包括并发处理模块:
所述并发处理模块,用于在每个记账请求到来,且需要更新所述余额单位表的记录时,从所述缓存单元中抢占主键ID区域进行记账操作;所述主键ID区域为ID+1,ID+2,……,ID+K,K为大于等于1的自然数,表示欲删除或欲增加记录的行数。
9.根据权利要求7所述的一种账务系统,其特征在于,所述账务系统还包括异常处理模块:
所述异常处理模块,用于在所述余额单位表中的记录在删除或增加的过程中出现异常时,恢复所述热点账户的账户余额。
10.一种支付系统,其特征在于:包括交易系统,以及与该交易系统连接的如权利要求7-9中任意一项所述的的账务系统,其中,所述交易系统接收订单、处理订单并将其下发至所述账务系统供其记账。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910254880.8A CN110060036B (zh) | 2019-03-29 | 2019-03-29 | 一种拆分记账方法、账务系统及支付系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910254880.8A CN110060036B (zh) | 2019-03-29 | 2019-03-29 | 一种拆分记账方法、账务系统及支付系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110060036A true CN110060036A (zh) | 2019-07-26 |
CN110060036B CN110060036B (zh) | 2023-01-10 |
Family
ID=67318053
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910254880.8A Active CN110060036B (zh) | 2019-03-29 | 2019-03-29 | 一种拆分记账方法、账务系统及支付系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110060036B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111061748A (zh) * | 2019-12-12 | 2020-04-24 | 吉林亿联银行股份有限公司 | 一种热点账户的记账方法及装置 |
CN111241118A (zh) * | 2020-04-26 | 2020-06-05 | 浙江网商银行股份有限公司 | 缓存数据处理方法以及装置 |
CN111552697A (zh) * | 2020-04-16 | 2020-08-18 | 重庆富民银行股份有限公司 | 一种解决银行核心系统热点账户的高并发处理方法 |
CN112381537A (zh) * | 2020-11-05 | 2021-02-19 | 上海汇付数据服务有限公司 | 一种热点账户记账的方法 |
CN113269553A (zh) * | 2021-06-09 | 2021-08-17 | 广州市百果园网络科技有限公司 | 一种余额管理方法及系统 |
CN116051117A (zh) * | 2023-03-07 | 2023-05-02 | 天津金城银行股份有限公司 | 热点账户余额的控制方法、装置和电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008117079A (ja) * | 2006-11-01 | 2008-05-22 | Mizuho Bank Ltd | 現金支払システム、金融機関端末装置及び現金支払方法 |
CN107274162A (zh) * | 2017-05-31 | 2017-10-20 | 深圳市长亮科技股份有限公司 | 一种高交易并发量的处理方法 |
CN109087086A (zh) * | 2018-08-01 | 2018-12-25 | 中信百信银行股份有限公司 | 控制热点账户交易的方法 |
CN110928565A (zh) * | 2019-11-21 | 2020-03-27 | 深圳乐信软件技术有限公司 | 热点账户数据更新方法、装置、服务器及存储介质 |
-
2019
- 2019-03-29 CN CN201910254880.8A patent/CN110060036B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008117079A (ja) * | 2006-11-01 | 2008-05-22 | Mizuho Bank Ltd | 現金支払システム、金融機関端末装置及び現金支払方法 |
CN107274162A (zh) * | 2017-05-31 | 2017-10-20 | 深圳市长亮科技股份有限公司 | 一种高交易并发量的处理方法 |
CN109087086A (zh) * | 2018-08-01 | 2018-12-25 | 中信百信银行股份有限公司 | 控制热点账户交易的方法 |
CN110928565A (zh) * | 2019-11-21 | 2020-03-27 | 深圳乐信软件技术有限公司 | 热点账户数据更新方法、装置、服务器及存储介质 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111061748A (zh) * | 2019-12-12 | 2020-04-24 | 吉林亿联银行股份有限公司 | 一种热点账户的记账方法及装置 |
CN111552697A (zh) * | 2020-04-16 | 2020-08-18 | 重庆富民银行股份有限公司 | 一种解决银行核心系统热点账户的高并发处理方法 |
CN111552697B (zh) * | 2020-04-16 | 2023-09-15 | 重庆富民银行股份有限公司 | 一种解决银行核心系统热点账户的高并发处理方法 |
CN111241118A (zh) * | 2020-04-26 | 2020-06-05 | 浙江网商银行股份有限公司 | 缓存数据处理方法以及装置 |
CN112381537A (zh) * | 2020-11-05 | 2021-02-19 | 上海汇付数据服务有限公司 | 一种热点账户记账的方法 |
CN113269553A (zh) * | 2021-06-09 | 2021-08-17 | 广州市百果园网络科技有限公司 | 一种余额管理方法及系统 |
CN116051117A (zh) * | 2023-03-07 | 2023-05-02 | 天津金城银行股份有限公司 | 热点账户余额的控制方法、装置和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110060036B (zh) | 2023-01-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110060036A (zh) | 一种拆分记账方法、账务系统及支付系统 | |
US11243920B2 (en) | Distributed database system, transaction processing method, lock server and storage medium | |
Zhang et al. | A storage optimization scheme for blockchain transaction databases. | |
CN107563887A (zh) | 基于as400银行核心账务系统零停机日切方法 | |
Hakansson | Convergence to isoelastic utility and policy in multiperiod portfolio choice | |
CN107274162A (zh) | 一种高交易并发量的处理方法 | |
KR950007394B1 (ko) | 데이타 관리방법 및 데이타 관리시스템 | |
CN106952158A (zh) | 解决热点账户问题的记账方法及设备 | |
CN107526775A (zh) | 一种区块链数据归档的方法 | |
CN109785134B (zh) | 用区块链来实现股票交易的管理系统及方法 | |
CN109255701B (zh) | 一种网贷业务数据处理方法 | |
CN109615514A (zh) | 热点账户交易系统及方法 | |
JPH035846A (ja) | リモート・アプリケーシヨン実行方式 | |
CN103970807B (zh) | 数据库连接管理方法及系统 | |
CN101989213A (zh) | 账户并发处理方法及账户并发处理系统 | |
CN108829740A (zh) | 数据存储方法和装置 | |
CN107943584A (zh) | 批量交易请求的处理方法及装置 | |
CN113867909A (zh) | 一种原子式实时清算方法 | |
CN106973091A (zh) | 分布式内存数据重分布方法及系统、主控服务器 | |
CN110427389A (zh) | 一种用于区块链数字货币的数据处理和查询方法 | |
CN109472680A (zh) | 一种账务处理方法及系统 | |
CN111552697A (zh) | 一种解决银行核心系统热点账户的高并发处理方法 | |
CN106204263A (zh) | 交易运行控制方法和装置 | |
JP5889379B1 (ja) | 電子記録債権の担保管理サービスシステムおよび方法 | |
CN109471898A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |