一种数据处理方法及装置
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种数据处理方法及装置。
背景技术
目前,为了保证交易***信息处理的准确性,一般采用串行入账的方式处理一个账户的多条入账交易记录。
但是,采用串行入账的方式处理入款方的入账信息,虽然保证了入款方入账信息处理的准确性,但由于交易***单位时间内处理信息的能力有限,可能会影响入账信息的时效性。比如,在直播场景下,若采用串行入账的方式对一个热点直播间的账户进行入账处理,则入账信息处理时长可能持续到几小时甚至是几天,信息处理速度过慢,信息处理过程耗时较长。
发明内容
本公开实施例至少提供一种数据处理方法及装置。
本公开主要包括以下几个方面:
第一方面,本公开实施例提供了一种数据处理方法,所述数据处理方法,包括:
在接收到针对同一入款账户的多个入账请求后,对所述多个入账请求分别对应的付款账户执行同步扣款处理;
确定所述入款账户的账户类型;所述账户类型包括热点账户和非热点账户;所述热点账户为对应的单位时长内入账请求数量大于设定阈值的账户;
若所述入款账户为热点账户,在针对多个所述付款账户同步扣款完成后,针对所述入款账户对应的多个入账请求进行汇总入账处理;所述汇总入账处理包括将多个入账请求对应的入账额度进行汇总后,统一入账到所述入款账户。
在上述方法中,对多个入账请求对应的付款账户执行同步扣款处理,并且在对付款账户同步扣款之后,确定上述多个入账请求对应的入款账户的类型,当入款账户为热点账户时,则对该热点账户对应的多个入账请求进行汇总入账处理,采用汇总入账的方式对热点账户进行入账处理,在保证入款方入账信息处理的准确性的前提下,缩短了入款方入账信息处理过程的时间,提高了入账信息处理速度和效率。
在一种可能的实施方式中,所述方法还包括:
在确定所述入款账户为非热点账户后,针对所述入款账户对应的每个入账请求进行异步入账处理;所述异步入账处理包括分别针对每个入账请求,执行入账到所述入款账户的操作。
在一种可能的实施方式中,确定所述入款账户的账户类型,包括:
根据所述入款账户的账户标识,获取预先存储的与该账户标识对应的账户类型;或者,
根据所述入款账户对应的最近预设时间段内的入账请求数量,确定所述入款账户的账户类型。
在一种可能的实施方式中,在确定所述入款账户为热点账户后,针对所述入款账户对应的多个入账请求进行汇总入账处理之前,还包括:
根据所述入款账户的账户标识,尝试获取对应该账户标识的分布式锁;
在成功获取对应该账户标识的分布式锁后,获取数据库中对应该账户标识的锁资源。
在上述方法中,当对该账户标识对应的的分布式锁获取失败后,则不会在访问该账户标识对应的入款账户的数据库,这里,通过增加每个入款账户的分布式锁,减少对数据库的访问负担。
在一种可能的实施方式中,在确定所述入款账户为热点账户后,尝试获取对应该账户标识的分布式锁之前,还包括:
获取与所述入款账户对应的各个待入账状态的高热入账凭证;
获取数据库中对应该账户标识的锁资源之后,针对所述入款账户对应的多个入账请求进行汇总入账处理,包括:
查询各个待入账状态的高热入账凭证分别对应的高热入账记录,过滤掉其中的高热已入账记录,保留其中的高热待入账记录;
针对保留的所述高热待入账记录,进行汇总入账处理。
这里,通过查询各个待入账状态的高热入账凭证对应的高热入账记录,并获取其中的高热待入账记录,针对上述高热待入账记录进行汇总入账处理,避免出现已完成入账,且入账记录已更新为已入账记录,但高热入账凭证状态更新失败的情况,提高信息处理的准确性。
在一种可能的实施方式中,针对保留的所述高热待入账记录,进行汇总入账处理,包括:
根据所述高热待入账记录的入账请求时间的先后顺序,提取保留的预设条数的高热待入账记录,进行汇总入账处理。
在一种可能的实施方式中,若所述入款账户为热点账户,在针对多个所述付款账户同步扣款完成后,针对所述入款账户对应的多个入账请求进行汇总入账处理之前,还包括:
针对每个所述入账请求,生成所述入款账户对应的高热待入账记录,并生成所述入款账户对应的所述待入账状态的高热入账凭证;
在确定对应所述入款账户的分布式锁未被占用的情况下,生成包含入款账户标识的高热入账消息,***待处理的消息队列中;所述高热入账消息用于指示针对所述入款账户执行汇总入账处理;
所述获取与所述入款账户对应的各个待入账状态的高热待入账凭证,包括:
从所述消息队列中取出所述高热入账消息后,获取与该高热入账消息指示的入款账户对应的各个待入账状态的高热入账凭证;
所述提取保留的预设条数的高热待入账记录,进行汇总入账处理之后,还包括:
生成针对所述入款账户的新的高热入账消息,写入所述消息队列中。
第二方面,本公开实施例还提供一种数据处理装置,包括:
同步扣款处理模块,用于在接收到针对同一入款账户的多个入账请求后,对所述多个入账请求分别对应的付款账户执行同步扣款处理。
账户类型确定模块,用于确定所述入款账户的账户类型。
汇总入账处理模块,用于若所述入款账户为热点账户,在针对多个所述付款账户同步扣款完成后,针对所述入款账户对应的多个入账请求进行汇总入账处理。
在一种可能的实施方式中,所述装置还包括:异步入账处理模块,用于在确定所述入款账户为非热点账户后,针对所述入款账户对应的每个入账请求进行异步入账处理;所述异步入账处理包括分别针对每个入账请求,执行入账到所述入款账户的操作。
在一种可能的实施方式中,所述账户类型确定模块,具体用于根据所述入款账户的账户标识,获取预先存储的与该账户标识对应的账户类型;或者,根据所述入款账户对应的最近预设时间段内的入账请求数量,确定所述入款账户的账户类型。
在一种可能的实施方式中,所述装置还包括:锁资源获取模块,用于根据所述入款账户的账户标识,尝试获取对应该账户标识的分布式锁;在成功获取对应该账户标识的分布式锁后,获取数据库中对应该账户标识的锁资源。
在一种可能的实施方式中,所述汇总入账处理模块,具体用于获取与所述入款账户对应的各个待入账状态的高热入账凭证;获取数据库中对应该账户标识的锁资源之后,查询各个待入账状态的高热入账凭证分别对应的高热入账记录,过滤掉其中的高热已入账记录,保留其中的高热待入账记录;针对保留的所述高热待入账记录,进行汇总入账处理。
在一种可能的实施方式中,所述汇总入账处理模块,还具体用于根据所述高热待入账记录的入账请求时间的先后顺序,提取保留的预设条数的高热待入账记录,进行汇总入账处理。
在一种可能的实施方式中,所述装置还包括:入账请求处理模块,用于针对每个所述入账请求,生成所述入款账户对应的高热待入账记录,并生成所述入款账户对应的所述待入账状态的高热入账凭证。
高热入账消息生成模块,用于在确定对应所述入款账户的分布式锁未被占用的情况下后,生成包含入款账户标识的高热入账消息,***待处理的消息队列中;所述高热入账消息用于指示针对所述入款账户执行汇总入账处理。
待入账凭证获取模块,用于从所述消息队列中取出所述高热入账消息后,获取与该高热入账消息指示的入款账户对应的各个待入账状态的高热入账凭证。
所述高热入账消息生成模块,还用于在所述提取保留的预设条数的高热待入账记录,进行汇总入账处理之后,生成针对所述入款账户的新的高热入账消息,写入所述消息队列中。
第三方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可选的实施方式中的步骤。
第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可选的实施方式中的步骤。
关于上述装置、计算机设备及计算机可读存储介质的相关有益效果的说明参见对应方法内容的说明,这里不再赘述。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种数据处理方法的流程示意图;
图2示出了本公开实施例所提供的数据处理方法中,对每个付款账户进行扣款的处理流程示意图;
图3示出了本公开实施例所提供的数据处理方法中,汇总入账的入账处理的流程示意图;
图4示出了本公开实施例所提供的数据处理方法中,异步入账的入账处理的流程示意图;
图5示出了本公开实施例所提供的一种数据处理过程的流程示意图;
图6示出了本公开实施例所提供的一种数据处理装置的示意图;
图7示出了本公开实施例所提供的一种计算机设备的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
经研究发现,当一个入款账户接收到多个入账请求时,一般采用串行入账的方式对该入款账户进行入账信息处理,但是采用上述方式对入款方的入账信息进行交易管理,虽然保证了入款方入账信息的准确性,但由于交易***单位时间内处理信息的能力有限,可能会导致信息处理速度过慢,信息处理过程耗时较长。
基于上述研究,本公开提供了一种数据处理方法及装置,对多个入账请求对应的付款账户执行同步扣款处理,并且在对付款账户同步扣款之后,确定上述多个入账请求对应的入款账户的类型,当入款账户为热点账户时,则对该热点账户对应的多个入账请求进行汇总入账处理,采用汇总入账的方式对热点账户进行入账处理,在保证入款方入账信息处理的准确性的前提下,缩短了入款方入账信息处理过程的时间,提高了入账信息处理的速度和效率。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种数据处理方法进行详细介绍,本公开实施例所提供的一种数据处理方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字处理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该数据处理方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面以执行主体为服务器为例对本公开实施例提供的数据处理方法加以说明。
实施例一
参见图1所示,为本公开实施例提供的数据处理方法的流程示意图,所述方法包括步骤S101~S103,其中:
S101、在接收到针对同一入款账户的多个入账请求后,对所述多个入账请求分别对应的付款账户执行同步扣款处理。
其中,入款账户可以为银行卡账户、或第三方支付账户等;付款账户也可以为银行卡账户、或第三方支付账户等;上述入款账号可以为个人账户、公司账户;上述付款账号也可以为个人账户、公司账户。
这里,入账请求为付款账户发起的向入款账户转账的指令;其中,入账请求中可以包括入款账户的账户标识、付款账户的账户标识。
在具体实施中,当多个付款账户对同一入款账户进行转账操作时,每个付款账户会生成对应的入账请求,并将上述针对同一入款账户的多个入账请求发送给服务器,服务器根据接收到的多个入账请求中的付款账户标识,同时对相应的付款账户进行扣款处理。
具体的,上述对多个付款账户同时进行扣款处理的扣款步骤如下所述:服务器在数据库中获取每个付款账户的账户标识,并根据每个付款账户的账户标识,尝试获取对应每个账户标识的分布式锁,当成功获取到对应每个账户标识的分布式锁后,获取数据库中对应每个账户标识的锁资源(即获取操作每个付款账户的权限),并根据每个付款账户发起的交易数据,对每个付款账户进行减余额操作,并生成与付款账户对应的多条出款记录,将上述多条出款记录分别***到每个付款账户对应的出款账单数据库中,并生成每笔交易流水对应的多个交易凭证,将上述多个交易凭证分别***到每个付款账户对应的数据库中,从而实现对多个付款账户的同步扣款处理。具体同步扣款中对每个付款账户进行扣款的处理流程如图2所示。
S102、确定所述入款账户的账户类型。
其中,账户类型可以包括热点账户和非热点账户;这里,热点账户为对应的单位时长内入账请求数量大于设定阈值的账户,比如,当设定阈值为每秒入账请求数量为60条,当一个账户每秒入账请求数量大于60条时,则该入款账户为热点账户。
在一种可选的实施方式中,可以根据所述入款账户的账户标识,获取预先存储的与该账户标识对应的账户类型。
其中,账户标识为每个账户的唯一标识码,用来指示数据库中预先存储的每个账户。
这里,数据库中预先存储有每个账户的账户标识,服务器根据历史数据中每个账户的入账请求数量以及接收到入账请求的时间,计算单位时长内接收到的入账请求数量,当单位时长内接收到的入账请求数量大于设定阈值,则确定该账户为热点账户;当单位时长内接收到的入账请求数量小于或等于设定阈值,则确定该账户为非热点账户;并将每个账户的账户标识以及对应的账户类型存储到数据库中。
示例性地,账户a在15点30分-16点接收到入账请求数量为180000条;账户b在15点30分-16点接收到入账请求数量为1800条,服务器根据账户a、账户b历史数据中每个账户接收到的入账请求数量以及接收到入账请求的时间,计算得到账户a单位时间长内入账请求数量为100条/秒;账户b单位时长内的入账请求数量为1条/秒;根据预先设定阈值为单位时长内入账请求数量为60条/秒,确定账户a为热点账户,账户b为非热点账户,并将账户a的账户标识、以及账户a对应的账户类型:热点账户存储到数据库中;同理,将账户b的账户标识、以及账户b对应的账户类型:非热点账户存储到数据库中。
具体的,根据上述入账请求中入款账户的账户标识,查询数据库,确定该入账账户的账户标识对应的账户类型。
示例性地,数据库中预先存储有账户a的账户标识、以及账户a对应的账户类型:热点账户;当前账户a接收到入账请求时,服务器根据账户a的账户标识,查询数据库,确定账户a的账户类型为:热点账户。
在另一种可选的实施方式中,还可以根据入账账户对应的最近预设时间段内的入账请求数量,确定所述入款账户的账户类型。
具体的,根据入款账户对应的最近存在入账请求的时间段内的入账请求数量,计算该入款账户对应的单位时长内入账请求数量,并判断该入款账户对应的单位时长内入账请求数量是否大于设定阈值,当上述入款账户对应的单位时长内入账请求数量大于设定阈值时,则该入款账户为热点账户;当上述入款账户对应的单位时长内入账请求数量小于或者等于设定阈值时,则该入款账户为非热点账户。
示例性地,当入款账户对应的最近存在入账请求的时间段为10点30分-10点35分,且入账请求数量为30000条,则通过计算30000/(5*60)=100条/秒,得到该入款账户对应的单位时长内入款请求数量为100条/秒,根据预先设定阈值为单位时长内入账请求数量为60条/秒,确定该入款账户对应的单位时长内入账请求数量100条/秒大于设定阈值60条/秒,则确定该入款账户为热点账户。
若确定上述入款账户的账户类型为热点账户,则采用汇总入账的方式对入款账户进行入账处理,具体描述如以下步骤S103。
S103、若所述入款账户为热点账户,在针对多个所述付款账户同步扣款完成后,针对所述入款账户对应的多个入账请求进行汇总入账处理。
其中,所述汇总入账处理可以包括将多个入账请求对应的入账额度进行汇总后,统一入账到所述入款账户。
具体的,当确定入款账户为热点账户时,则在对多个付款账户完成同步扣款操作后,根据入款账户对应的多个入账请求,对入款账户进行汇总入账处理。
在具体实施中,在根据入款账户对应的多个入账请求,对入款账户进行汇总入账处理之前,还可以生成指示汇总入账队列进行汇总入账的指令,具体描述如下:针对每个所述入账请求,生成所述入款账户对应的高热待入账记录,将该入账请求对应的交易凭证的状态更新为调度至汇总入账的状态,并生成所述入款账户对应的所述待入账状态的高热入账凭证;在确定对应所述入款账户的分布式锁未被占用情况下后,生成包含所述入款账户标识的高热入账消息,并将所述高热入账消息***到待处理的消息队列中。
这里,高热入账记录根据状态不同,可以包括未进行入账处理的记录,即高热待入账记录;已完成入账处理的记录,即高热已入账记录;高热入账凭证的状态可以包括待入账状态和已入账状态。
其中,高热待入账记录可以为该热点账户待入账的交易记录,可以包括付款账户的账户标识、入款账户的账户标识和对应的交易金额、交易时间等信息。
其中,高热入账消息可以为触发汇总入账处理的指令,用于指示针对入款账户执行汇总入账处理,可以包括入款账户的账户标识。
其中,分布式锁可以为数据库redis锁,分布式锁的状态可以包括未被占用状态(可以用“1”来指示)、被占用状态(可以用“0”来指示)。
这里,将入账请求对应的交易凭证从付款账户的数据库转存到同一数据库,并将上述交易凭证的状态更新为调度至汇总入账的状态;其中,每个入账请求对应的交易凭证分别存储在对应的付款账户所在的数据库中。
这里,当汇总入账队列中有进程针对该入款账户执行汇总入账处理,则该入款账户的分布式锁的状态为0(即该入款账户的分布式锁被占用);当汇总入账队列中没有进程针对该入款账户执行汇总入账处理,则该入款账户的分布式锁的状态为1(即该入款账户的分布式锁未被占用)。
具体的,服务器根据每个所述入账请求中的入款账户的账户标识,查询数据库,获取上述账户标识对应的待入账记录,并根据上述待入账记录生成所述入款账户对应的高热待入账记录;服务器根据每个所述入账请求中的入款账户的账户标识,查询数据库,获取上述账户标识对应的交易凭证,将上述交易凭证转存到同一数据库,并将转存到同一数据库中的每个交易凭证的状态更新为调度至汇总入账的状态;并根据上述交易凭证,生成上述入款账户对应的待入账状态的高热入账凭证;当确定分布式锁的状态为1(即没有进程针对该入款账户执行汇总入账处理)时,生成包含上述入款账户的账户标识的高热入账消息,并将高热入账消息***到待处理的消息队列中。
在具体实施中,从消息队列中取出高热入账消息,并根据获取到的高热入账消息的指示,对入款账户进行汇总入账处理之前,还需要根据高热入账凭证的状态,获取该入款账户对应的各个待入账状态的高热入账凭证,并根据入款账户的账户标识,获取操作该入款账户的权限。
这里,获取操作该入款账户的权限的具体描述如下:根据高热入账消息中的入款账户的账户标识,尝试获取对应该账户标识的分布式锁;在成功获取对应该账户标识的账户锁后,获取数据库中对应该账户标识的锁资源。
其中,当汇总入账队列接收到高热入账消息后,汇总入账队列中进行汇总入账处理的进程会通过抢资源的方式,根据高热入账消息中的账户标识,抢占该高热入账消息指示的入款账户的分布式锁,当抢占成功后,则表示成功占用该入款账户的分布式锁;在成功占用该入款账户的分布式锁后,则可以对该入款账户的数据库进行锁资源操作,即获取到操作该入款账户数据库的权限。
在具体实施中,在获取到操作该入款账户数据库的权限之后,则根据上述获取到的该入款账户对应的各个待入账状态的高热入账凭证,查询各个待入账状态的高热入账凭证分别对应的高热入账记录,过滤掉其中的高热已入账记录,保留其中的高热待入账记录;针对保留的所述高热待入账记录,进行汇总入账处理。
其中,数据库中存储有各个高热入账凭证、高热入账凭证的状态、以及各个高热入账凭证对应的高热入账记录。
具体的,由于存在已完成入账,且高热入账记录已更新为高热已入账记录,但高热入账凭证的状态未更新成功的情况,因此需要对各个待入账状态的高热入账凭证对应的每条高热待入账记录进行汇总入账,具体描述如下:当汇总入账队列接收到高热入账消息后,汇总入账队列中进行汇总入账处理的进程根据高热入账消息中账户标识,查询数据库,获取上述账户标识指示的入款账户对应的各个待入账状态的高热待入账凭证,并在获取到操作该入款账户的权限后,查询上述各个待入账状态的高热待入账凭证对应的高热入账记录,提取出上述高热入账记录中的高热待入账记录,对上述高热待入账记录进行汇总入账处理。
在具体实施中,为了在进行入账操作过程中,保证数据库和中央处理器的资源安全,因此限制汇总入账队列中进行汇总入账处理的进程每次进行汇总入账的访问量,具体描述如下:汇总入账队列每接收到一个高热入账消息后,汇总入账队列中进行汇总入账处理的进程仅能扫描预设条数的高热待入账记录,因此根据高热待入账记录的入账请求时间的先后顺序,提取未处理的预设条数的高热待入账记录,进程扫描上述预设条数的高热待入账记录,并进行汇总入账处理。
在具体实施中,当服务器对上述预设条数的高热待入账记录进行汇总入账处理之后,在确定高热消息队列中没有针对该入款账户的高热入账消息且确定当前没有进程正在针对所述入款账户执行汇总入账处理后,生成针对所述入款账户的新的高热入账消息,并将新的高热入账消息写入所述消息队列中,并将上述新的高热入账消息发送给汇总入账队列,汇总入账队列基于新的高热入账消息,根据高热待入账记录的入账请求时间的先后顺序,对未处理的预设条数的高热待入账记录进行汇总入账处理。
其中,上述进程每次能够扫描的高热待入账记录条数可以为根据历史进程扫描数据记录,计算统计得到的;比如:可以为每次扫描100条,即100条/次。
具体的,当确定入款账户的账户类型为热点账户之后,提取针对该入款账户的多个入账请求对应的待入账记录,并根据上述待入账记录生成该入款账户对应的高热待入账记录;根据该入款账户的账户标识,获取对应的交易凭证,将上述交易凭证转存到同一数据库并更新上述交易凭证的状态,生成各个待入账状态的高热入账凭证;查询消息队列,当确定消息队列中不存在针对该入款账户的高热入账消息时,则查询该入款账户的分布式锁的状态,当确定分布式锁的状态为1(即没有进程针对该入款账户执行汇总入账处理)时,则在消息队列中生成指示该入款账户进行汇总入账的高热入账消息,并将高热入账消息发送到汇总入账队列;汇总入账队列中的进程根据高热入账消息中的账户标识,获取该入款账户对应的各个待入账状态的高热入账凭证,并抢占对应的账户标识的分布式锁,当成功抢占到该账户标识对应的分布式锁后,则获取对该账户标识对应的入款账户的数据库进行操作的权限;获取到操作权限的进程访问上述各个待入账状态的高热入账凭证,并根据上述各个待入账状态的高热入账凭证,提取对应的预设条数的高热待入账记录,并将上述预设条数的高热待入账记录批量***到该入款账户的数据库中;根据上述预设条数的高热待入账记录中的交易金额信息,计算上述预设条数的高热待入账记录对应的交易金额总和,通过上述交易金额总和对入款账户进行加余额操作,在完成加余额操作之后,将上述预设条数的高热待入账记录批量更新为高热已入账记录,并将上述预设条数的高热待入账记录对应的各个待入账状态的高热入账凭证更新为已入账状态的高热入账凭证。具体汇总入账的入账处理流程示意图如图3所示。
本公开实施例中,对多个入账请求对应的付款账户执行同步扣款处理,并且在对付款账户同步扣款之后,根据入款账户对应的单位时长内入账请求数量,确定上述多个入账请求对应的入款账户的类型,当入款账户为热点账户时,则对该热点账户对应的多个入账请求进行汇总入账,采用汇总入账对热点账户进行入账处理的方式,在保证入款方入账信息处理的准确性的前提下,缩短了入款方入账信息处理过程的时间,提高了入账信息处理的速度和效率。
在一种可选的实施方式中,当上述入款账户对应的单位时长内入账请求数量小于或者等于设定阈值时,则该入款账户为非热点账户;在确定所述入款账户为非热点账户后,针对所述入款账户对应的每个入账请求进行异步入账处理。
其中,所述异步入账处理可以包括分别针对每个入账请求,执行入账到所述入款账户的操作。
具体的,当该入款账户为非热点账户时,则服务器根据入款请求中的入款账户的账户标识,尝试获取对应该账户标识的分布式锁,在成功获取对应该账户标识的分布式锁后,则获取对该账户标识对应的入款账户的数据库进行操作的权限;根据上述入款请求的账户标识,获取该账户标识对应的待入账记录,并获取上述账户标识对应的待入账凭证,并根据上述待入账记录对该入款账户进行加余额操作,将已经处理的待入账记录更新为已入账记录,并***到入款账户对应的数据库中,并将上述待入账凭证的状态更新为已入账凭证。具体异步入账的入账处理流程示意图如图4所示。
参照图5所示,为本公开一种可选的实施方案提供的数据处理过程的流程示意图,具体数据处理过程如下:
示例性地,用户在使用媒体软件观看直播过程中,当看到自己喜欢的直播内容,则会为主播刷礼物,同时主播收到多个用户发送的礼物。在上述过程中一般采用同步扣款对多个用户对应的付款账户进行扣款处理,同时会根据该主播的入款账户的账户类型,采用汇总入账或异步入账的方式对该主播的入款账户进行入账处理,具体描述如下:
同步扣款队列根据每个付款账户的账户标识,获取对应每个账户标识的分布式锁,当成功获取到对应每个账户标识的分布式锁后,获取每个付款账户对应的数据库资源;根据每个付款账户发起的交易数据,对每个付款账户进行减余额操作,并生成多条出款记录,将上述多条出款记录根据账户标识分别***到对应的付款账户的数据库中,并将上述多条出款记录***到直播公司的付款账户对应的数据库中,并生成上述每笔交易流水对应的交易凭证,根据每个交易凭证中的扣款账户的账户标识,将上述交易凭证***到对应的付款账户的数据库中,并生成针对同一入款账户的多个入账请求,并将上述针对同一入款账户的多个入账请求发送给异步入账队列。
在一种可选的实施方式中,异步入账队列根据接收到的多个入账请求中的入款账户的账户标识,确定该入款账户为热点账户时,如图5的分支1所示,根据针对该入账账户的多个入账请求对应的待入账记录,生成该入款账户对应的高热待入账记录;并根据该入款账户的账户标识,获取对应的交易凭证,将上述交易凭证转存到同一数据库并更新上述交易凭证的状态,生成各个待入账状态的高热入账凭证;当查询到消息队列中没有针对该入款账户的高热入账消息,且确定分布式锁的状态为1(即没有进程针对该入款账户执行汇总入账处理)时,则生成指示该入款账户进行汇总入账的高热入账消息,并将上述高热入账消息发送给汇总入账队列。
汇总入账队列接收到上述高热入账消息后,如图5的分支2所示,对该入款账户的预设条数的高热待入账记录进行汇总入账,具体描述如下:根据上述高热入账消息中的账户标识,获取该入款账户对应的各个待入账状态的高热入账凭证,汇总入账队列中的进行汇总入账处理的进程抢占对应的账户标识的分布式锁,当成功抢占到该账户标识对应的分布式锁后,则获取对该账户标识对应的入款账户的数据库进行操作的权限;获取到操作权限的进程根据上述各个待入账状态的高热入账凭证,访问该账户标识对应的预设条数的高热待入账记录;并在该主播的入款账户的数据库中批量***上述预设条数的高热待入账记录,同时在该直播公司的入款账户的数据库中批量***上述预设条数的高热待入账记录;计算上述预设条数的高热待入账记录对应的交易金额总和,并根据上述交易金额总和对该主播的入款账户和直播公司的入款账户进行加余额操作,将上述保存在主播的入款账户和直播公司的入款账户的数据库中的预设条数的高热待入账记录更新为高热已入账记录,并将上述预设条数的高热待入账记录对应的各个待入账状态的高热入账凭证更新为已入账状态的高热入账凭证,从而完成汇总入账。
在另一种可选的实施方式中,异步入账队列根据接收到的多个入账请求中的入款账户的账户标识,确定该入款账户为非热点账户时,则异步入账队列根据上述入款请求中的入款账户的账户标识,尝试获取对应该账户标识的分布式锁,在成功获取对应该账户标识的分布式锁后,则获取对该账户标识对应的入款账户的数据库进行操作的权限;在获取到操作该入款账户数据库的权限后,根据上述入款请求的账户标识,获取该账户标识对应的待入账记录,并获取上述账户标识对应的待入账凭证,并根据上述待入账记录的交易金额信息,对该入款账户进行加余额操作,并将上述待入账记录更新为已入账记录,将已入账记录分别***到主播的入款账户和直播公司的入款账户对应的数据库中,并将上述待入账凭证的状态更新为已入账凭证,从而完成异步入账。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与数据处理方法对应的数据处理装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述数据处理方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
实施例二
参照图6所示,为本公开实施例提供的一种数据处理装置600的结构示意图,所述装置包括:同步扣款处理模块601、账户类型确定模块602、汇总入账处理模块603;其中,
同步扣款处理模块601,用于在接收到针对同一入款账户的多个入账请求后,对所述多个入账请求分别对应的付款账户执行同步扣款处理。
账户类型确定模块602,用于确定所述入款账户的账户类型。
汇总入账处理模块603,用于若所述入款账户为热点账户,在针对多个所述付款账户同步扣款完成后,针对所述入款账户对应的多个入账请求进行汇总入账处理。
本公开实施例中,对多个入账请求对应的付款账户执行同步扣款处理,并且在对付款账户同步扣款之后,根据该入款账户的单位时长内入账请求数量,确定上述多个入账请求对应的入款账户的类型,当入款账户为热点账户时,则对该热点账户对应的多个入账请求进行汇总入账,上述采用汇总入账的方式对热点账户进行入账处理的方法,在保证入款方入账信息处理的准确性的前提下,缩短了入款方入账信息处理过程的时间,提高了入账信息处理的速度和效率。
一种可能的实施方式中,所述装置还包括:异步入账处理模块,用于在确定所述入款账户为非热点账户后,针对所述入款账户对应的每个入账请求进行异步入账处理;所述异步入账处理包括分别针对每个入账请求,执行入账到所述入款账户的操作。
一种可能的实施方式中,账户类型确定模块602,具体用于根据所述入款账户的账户标识,获取预先存储的与该账户标识对应的账户类型;或者,根据所述入款账户对应的最近预设时间段内的入账请求数量,确定所述入款账户的账户类型。
一种可能的实施方式中,所述装置还包括:锁资源获取模块,用于根据所述入款账户的账户标识,尝试获取对应该账户标识的分布式锁;在成功获取对应该账户标识的分布式锁后,获取数据库中对应该账户标识的锁资源。
一种可能的实施方式中,汇总入账处理模块603,具体用于获取与所述入款账户对应的各个待入账状态的高热入账凭证;获取数据库中对应该账户标识的锁资源之后,查询各个待入账状态的高热入账凭证分别对应的高热入账记录,过滤掉其中的高热已入账记录,保留其中的高热待入账记录;针对保留的所述高热待入账记录,进行汇总入账处理。
一种可能的实施方式中,汇总入账处理模块603,还具体用于根据所述高热待入账记录的入账请求时间的先后顺序,提取保留的预设条数的高热待入账记录,进行汇总入账处理。
一种可能的实施方式中,所述装置还包括:入账请求处理模块,用于针对每个所述入账请求,生成所述入款账户对应的高热待入账记录,并生成所述入款账户对应的所述待入账状态的高热入账凭证。
高热入账消息生成模块,用于在确定对应所述入款账户的分布式锁未被占用的情况下后,生成包含入款账户标识的高热入账消息,***待处理的消息队列中;所述高热入账消息用于指示针对所述入款账户执行汇总入账处理。
待入账凭证获取模块,用于从所述消息队列中取出所述高热入账消息后,获取与该高热入账消息指示的入款账户对应的各个待入账状态的高热入账凭证。
所述高热入账消息生成模块,还用于在所述提取保留的预设条数的高热待入账记录,进行汇总入账处理之后,生成针对所述入款账户的新的高热入账消息,写入所述消息队列中。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
基于同一技术构思,本申请实施例还提供了一种计算机设备。参照图7所示,为本申请实施例提供的计算机设备700的结构示意图,包括处理器701、存储器702、和总线703。其中,存储器702用于存储执行指令,包括内存7021和外部存储器7022;这里的内存7021也称内存储器,用于暂时存放处理器701中的运算数据,以及与硬盘等外部存储器7022交换的数据,处理器701通过内存7021与外部存储器7022进行数据交换,当计算机设备700运行时,处理器701与存储器702之间通过总线703通信,使得处理器701执行以下指令:
在接收到针对同一入款账户的多个入账请求后,对所述多个入账请求分别对应的付款账户执行同步扣款处理;确定所述入款账户的账户类型;若所述入款账户为热点账户,在针对多个所述付款账户同步扣款完成后,针对所述入款账户对应的多个入账请求进行汇总入账处理。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的数据处理方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例所提供的数据处理方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的数据处理方法的步骤,具体可参见上述方法实施例,在此不再赘述。
本公开实施例还提供一种计算机程序,该计算机程序被处理器执行时实现前述实施例的任意一种方法。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software DevelopmentKit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。