时间窗口累计的实现方法与流程

文档序号:13760420阅读:497来源:国知局
时间窗口累计的实现方法与流程

本发明涉及互联网信息监测技术领域,尤其涉及一种时间窗口累计的实现方法。



背景技术:

在支付业务中,随着业务发展,风险控制愈加依赖于通过多维度、多场景在指定时间段内交易发生的次数、量等各种累计值来做相关的逻辑运算,以及通过建模、同比、环比的方式判断具体的交易风险。

累计值以时间窗口维度计算,包括定时区间和滑动式扫描区间;在滑动窗口中,时间窗口不是向前跳,而是每过一个单位时间向前滑动一次,滑动的时间长度是自定义设置的,主要涉及三个参数:位置交换范围、窗体大小和步长,这三个参数关系到算法的效率和有效性,主要通过对算法的复杂度进行评估和分析。

算法复杂度的分析主要进行时间复杂度的分析,插入的订单数据经过MQ队列排队等待,插入时间点也可能不是时间窗口上最大的时间点,因此需要对冲突数据进行修补。

现有方案是通过Oracle关系数据库,根据业务的不同,按照年、月、日等各种指定时间形式通过where子句,累计不同条件场景下的统计值。通过SQL拼接的形式查询,但是:

1)由于各种场景的统计值存储以对应的月、日来创建,导致需求变更不可避免地要去改动表结构和查询条件,通过SUM函数实现的SQL需要开发和二次拼接,也不支持滑动时间窗口自定义的累计值统计业务;

2)大量的SQL查询消耗DB的资源,数据库不支持分布式部署,随着业务的发展,在高并发、大容量的情况下,数据库的查询瓶颈越来越明显;

3)由于关系数据库的局限性,所有对接的时间窗口都必须事先按照常用的年、月、日等固定步长确定,不能自定义不同粒度步长的时间窗口;

4)在多维度、多场景下做累计业务统计,会造成额外的人员支出。



技术实现要素:

本发明的主要目的在于提供一种时间窗口累计的实现方法,旨在解决多维度、多场景组合下,SQL查询算法不灵活、查询吞吐量不高、查询粒度不够精确的问题。

为实现上述目的,本发明提出一种时间窗口累计的实现方法,包括以下步骤:

S1:实时获取交易数据信息并加以存储;

S2:通过滑动时间窗口累计算法对所述交易数据信息进行统计分析;

S3:判断时间窗口的位置交换范围、窗体或步长的大小,如果是大则执行步骤S4,否则执行步骤S5;

S4:选择减法引擎算法计算Redis Cluster数据库中的数据累计值和获取值,如果Redis Cluster数据库异常则执行步骤S6,若否,则结束;

S5:选择加法引擎算法计算Redis Cluster数据库中的数据累计值和获取值,如果Redis Cluster数据库异常则执行步骤S7,若否,则结束;

S6:选择减法引擎算法计算Hbase数据库中的数据累计值和获取值;

S7:选择加法引擎算法计算Hbase数据库中的数据累计值和获取值。

进一步地,所述步骤S4中计算数据累计值的步骤包括:

S41:查看需要插入的分数列上是否有值;

S42:删除同分数维度下的数据并返回最大成员;

S43:修复插入时间后面的数据;

S44:插入累计数据;

S45:删除无效时间数据;

S46:设置Map的过期时间。

进一步地,所述步骤S4中计算数据获取值的步骤包括:

S47:获取有效时间范围内的最大值;

S48:获取无效时间范围内的最小值;

S49:用最大值减去最小值获取时间窗口之间有效的累计数据。

进一步地,所述步骤S6中计算数据累计值的步骤包括:

S61:查询需要插入的时间列,并返回当前列上的值;

S62:修复有效时间数;

S63:存储滑动时间窗口累计值;

S64:删除无效时间数据。

进一步地,所述步骤S6中计算数据获取值的步骤包括:

S65:获取有效时间范围内的最大值;

S66:获取无效时间范围内的最小值;

S67:用最大值减去最小值获取时间窗口有效时间的值。

进一步地,所述步骤S5中计算数据累计值的步骤包括:

S51:转换存储的field;

S52:增加increment累计数据;

S53:删除无效时间数据;

S54:设置Map的过期时间。

进一步地,所述步骤S5中计算数据获取值的步骤包括:

S55:判断需要查询时间段;

S56:获取Map中的所有数据;

S57:判断有效时间范围内的部分累计数据,逐个统计。

进一步地,所述步骤S43,包括以下子步骤:

S431:增加当前冲正量到冲正累计总量的increment累计数据,并返回累加当前冲正量后的总量;

S432:查询有限时间段内,key值小于等于累加当前冲正量后的总量减去当前冲正量后的数值的成员;

S433:在每个成员值的基础上累加当前冲正量,放入集合中;

S434:删除S432中查询到的成员。

进一步地,所述窗体以年、月、日、时、分、秒为单位,年、月窗体单位选择减法引擎算法计算数据累计值和获取值,日、时、分、秒窗体单位选择加法引擎算法计算数据累计值和获取值。

进一步地,计算数据获取值的最长时间为5ms。

本发明的时间窗口累计的实现方法,首先通过滑动时间窗口累计算法对所述交易数据信息进行统计分析,然后判断时间窗口的位置变换范围、窗体或步长的大小来选择适用加法或减法,最后在Redis Cluster数据库或Hbase数据库中完成交易数据累计值和获取值的统计分析与快速查询,解决了多维度、多场景组合下,SQL查询算法不灵活、查询吞吐量不高、查询粒度不够精确的问题,实现了获取时间窗口累计值的快速响应,提高了准确性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。

图1为本发明时间窗口累计的实现方法一实施例的流程图;

图2为图1中步骤S4中数据累计值获取的流程图;

图3为图1中步骤S4中数据获取值获取的流程图;

图4为图1中步骤S6中数据累计值获取的流程图;

图5为图1中步骤S6中数据获取值获取的流程图;

图6为图1中步骤S5中数据累计值获取的流程图;

图7为图1中步骤S5中数据获取值获取的流程图。

图8为图3中步骤S43的流程图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明,本发明实施例中所有方向性指示(诸如上、下、左、右、前、后……)仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。

另外,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。

Redis Cluster数据库主要利用其哈希(Hash)特性,一个Map中可以放多对值,理论上可存2键值对,key表示时间维度,value表示累计的值。Redis的实现主要还是利用有序集合(sorted set)特性,对其具有排序数据流水模型,sorted-Sets中的每一个成员都会有一个分数与之关联,减法的实现思想正式利用分数来为集合中的成员进行从小到大的排序,解决滑动窗口业务的实现。然而,需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score)确实可以重复的。

Hbase数据库的存储道理同Redis Cluster数据库一样,哈希Map就是其rowkey,Map的key表示列,value表示Hbase列上的值,默认只用一个列族。Hbase的累计方式和Redis一样,只是Redis用set集合实现,Hbase采用双写累计。

参照图1,图1为本发明时间窗口累计的实现方法一实施例的流程图,在该实施例中,首先对基于该交易业务的该时间窗口的交易数据进行实时监测,通过后台服务器实时获取该时间窗口的交易数据,并对该数据进行存储;然后通过滑动时间窗口累计算法对基于该时间窗口发生的交易数据的信息进行统计分析,滑动时间窗口累计算法采用滑动式扫描,不受粒度限制,能够真正达到零误差;然后判断时间窗口的位置交换范围、窗体或步长的大小,位置交换范围、窗体或步长满足其中一个是大就采用减法引擎算法计算数据累计值和获取值,否则采用加法引擎算法计算数据累计值和获取值,用户累计优先使用加法,商户累计优先使用减法,年、月窗体单位优先使用减法,天、时、分、秒窗体单位优先使用加法,步长n>10的优先使用减法,反之优先使用加法;加法或减法引擎算法都需要以专门的数据库为平台,本发明使用非关系型的Redis Cluster数据库,以及在Redis Cluster数据库出现异常时作为候补的Hbase数据库,这两种非关系型数据库均支持滑动时间窗口的风控参数累计,完全不同于原来的关系型数据库的SQL统计模式,比如对当前用户快捷支付当日累计量的统计,关系型数据库通过SQL实现,非关系型数据库通过在内创建一块空间,通过对数据清洗,按照一定规则存入并排序,进而提供查询的速度和减少计算量;最后在Redis Cluster数据库或Hbase数据库中选择性地使用加法引擎算法或减法引擎算法完成数据累计值及获取值的统计和查询。

参照图2,基于Redis Cluster数据库的交易数据累计值的减法引擎算法分6步,第一步S41是通过redis命令“ZCOUNT[key min max]”,查看需要插入的分数列上是否有值;第二步S42是通过redis命令“ZREM key member[member...]”,删除同分数维度下的数据并返回最大成员,保证高并发情况下的安全问题;第三步S43是通过redis命令“ZREM key member[member...],然后ZAAD key score1 member1[score2 member2]”,修复插入时间后面的数据,但是在修复插入时间后面的数据之前需要解决修复冲突数据;第四步S44是通过redis命令“ZADD key scorel member1[score2 member2]”,插入累计数据;第五步S45是先通过redis命令“HGETALL[key]”查询key下所有数据,然后通过redis命令“HDEL key field2[field2]”删除无效时间范围内的累计数据;第六步S46是通过redis命令“EXPIRE[key seconds]”,设置Map的过期时间。

参照图3,基于Redis Cluster数据库的交易数据获取值的减法引擎算法分3步,第一步S47是通过redis命令“ZREVRANGEBYSCORE key max min[WITHSCORES]”,获取有效时间范围内的最大值;第二步S48是通过redis命令“ZREVRANGEBYSCORE key max min[WITHSCORES]”,获取无效时间范围内的最小值;第三步S49是通过redis命令“ZRANGEBYSCORE key min max[WITHSCORES][LIMIT]”,用最大值减去最小值获取时间窗口之间有效的累计数据。

参照图4,基于Hbase数据库的交易数据累计值的减法引擎算法分4步,第一步S61是查询需要插入的时间列,并返回当前列上的值;第二部S62是修复有效时间数;第三步S63是存储滑动时间窗口的累计值;第四步S64是删除无效的时间数据。

参照图5,基于Hbase数据库的交易数据获取值的减法引擎算法分3步,第一步S65是获取有效时间范围内的最大值;第二步S66是获取无效时间范围内的最小值;第三部S67是用最大值减去最小值获取时间窗口有效时间的值。

参照图6,基于Redis Cluster数据库的交易数据累计值的加法引擎算法分4步,第一步S51是通过插入的统计维度换算存储的field,如以交易数据的订单时间作为统计维度,订单时间是2016年5月24号,17点52分34秒,若步长的单位设定为小时,转换为field就是20160524170000,若步长的单位设定为日,转换为field是20160524000000;第二步S52是通过redis命令“HINCRBY[key field increment]”,增加increment累计数据;第三步S53先通过redis命令“HGETALL[key]”查询key下所有数据,然后通过redis命令“HDEL key field2[field2]”删除无效时间范围内的累计数据;第四步S54通过redis命令“EXPIRE[key seconds]”,设置Map的国旗时间,以释放空间,提高计算速度。

参照图7,基于Redis Cluster数据库的交易数据获取值的加法引擎算法分3步,第一步S55是判断需要查询时间段,如查询当前用户前3天到前7天快捷交易的量,当前时间是2016年5月24号,17点52分34秒,获取有效的时间范围field是在20160517000000-20160521000000范围内的数据;第二步S56是通过redis命令“HGETALL[key]”,获取Map中的所有数据;第三步S57是判断有效时间范围内的部分累计数据,逐个统计。

参照图8,基于Redis Cluster数据库的交易数据累计值的减法引擎算法中,修复插入时间后面的数据分4步,第一步是增加当前冲正量到冲正累计总量的increment累计数据,并返回累加当前冲正量后的总量;第二步是查询有限时间段内,key值小于等于累加当前冲正量后的总量减去当前冲正量后的数值的成员;第三步是在每个成员值的基础上累加当前冲正量,放入集合中;第四步是删除第二步中查询到的成员。

进一步地,所述窗体以年、月、日、时、分、秒为单位,年、月窗体单位选择减法引擎算法计算数据累计值和获取值,日、时、分、秒窗体单位选择加法引擎算法计算数据累计值和获取值。加法适用于窗体小、步长长的数据累计查询,减法适用于窗体大、步长短的数据累计查询。

进一步地,NoSQL数据库采用zset特性实现减法,保留最大累计值和无效时间值,获取一段时间累计值,计算次数大大减少,增加查询的吞吐量,最大支持5W的TPS响应,高峰期间查询一个场景下所有累计原子响应在5ms内,推算可支持400~500笔/s实时多风控规则订单响应。

本实施例的时间窗口累计的实现方法,使用Redis Cluster和Hbase两种NOSQL数据库的特性,实现时间窗口上关键业务数据的统计,支持滑动时间窗口上的数据查询获取。利用NOSQL的key-value存储特性,其不定义表结构、利用可以复杂的查询条件面向列的数据库、以及高扩展性来适应获取多维度、多场景组合的时间窗口上参数值统计的成功性,经过在真实环境中大量风险数据拦截研究与考证,准确可靠。解决了多维度、多场景组合下,SQL查询算法不灵活、查询吞吐量不高、查询粒度不够精确的问题,实现了获取时间窗口累计值的快速响应,提高了准确性。

以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是在本发明的发明构思下,利用本发明说明书及附图内容所作的等效结构变换,或直接/间接运用在其他相关的技术领域均包括在本发明的专利保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1