数据汇总方法及装置与流程

文档序号:11286339阅读:197来源:国知局
数据汇总方法及装置与流程

本申请涉及数据汇总技术领域,特别是涉及数据汇总方法及装置。



背景技术:

在电子商务交易平台中,通常会部署分布式系统,各个系统各自完成自己的任务,并且,相关的数据在各个系统的数据库之间进行同步。例如,一个典型的分布式系统应用场景中可以包括:前端交易系统、计算引擎、汇总引擎。其中,负责与前端买家用户进行交互,在买家用户产生购买行为后,可以生成相应的交易订单;计算引擎根据交易系统产生的交易订单,进行数据的初步汇总,但是,由于计算引擎的存储容量通常是很有限的,因此,计算引擎通常只能在一定的时间窗口内进行汇总,例如,如果时间窗口为一天,则计算引擎可以将前端交易系统在一天内产生的交易订单进行分段汇总,如,可以统计出某仓库中的某货品的购买量,需要发货的数量等。之后,计算引擎的汇总结果回流到汇总引擎,由汇总引擎对计算引擎回流的分段汇总结果进行汇总,例如,可以统计出某货品在一段时间内的销量等,以此来进行销售预测,或者,在预售的场景中,商家或者卖家用户可以根据一段时间内的预售销量进行备货,等等。

其中,计算引擎通常可以分为实时计算引擎以及离线计算引擎两种,并且在实际应用中,两种计算引擎通常是共存的。其中,前端业务系统每生成一笔订单,就可以向实时计算引擎发出消息,在消息体征保存商品id、收货地址、发货仓库等信息,实时计算引擎每收到一条消息,就可以执行一次分段汇总,也即对所在时间窗口内产生的数据总量进行分段汇总运算,并将分段汇总数据实时回流到汇总系统。而离线计算引擎则通常是在每个时间窗口的固定时间点(例如,当前时间窗口即将结束时),从前端业务系统的数据库中拉取该时间窗口内产生的订单数据,然后,在该时间窗口内做分段汇总计算,之后再将分段汇总结果回流到汇总系统。

现有技术中,如果汇总引擎仅利用离线计算引擎的分段汇总结果进行汇总,则通常采取的方案是:对于n个分段汇总结果,从第一个开始,依次累加,到第n个。也即:

s总=s1+s2+…+sn(1)

其中,sn即为第n个分段汇总结果。也就是说,在第一个时间窗口,需要执行的汇总操作为:s总=s1,在第二个时间窗口,需要执行的汇总操作为:s总=s1+s2,在第三个时间窗口,需要执行的汇总操作为:s总=s1+s2+s3,以此类推。

但是,在存在实时计算引擎的情况下,汇总系统可能需要优先利用实时计算引擎的汇总结果,并且,在每个时间窗口的任意时间点,都可能具有汇总需求,每个时间点获得的分段汇总结果可能都是不同的,因此,显然是无法利用上述公式进行汇总的。即使可以在每个时间窗口结束时,都分别保存当前窗口的最新分段结果,则也只能表达为:

s总=s1+s2+…+sn+s当(2)

其中,s当为当前时间窗口内当前时间点获得的实时分段汇总结果。

然而,在上述公式中,随着n的增加,算法的复杂度线性增长,最终算法的复杂为o(n)。如果随着n的增加,超过了计算机的处理能力,这个统计将无法进行。或者,即使没有超过计算能力,但是耗时很长,不能满足汇总数据使用者的期望。



技术实现要素:

本申请提供了数据汇总方法及装置,能够降低运算的时间复杂度。

本申请提供了如下方案:

一种数据汇总方法,包括:

保存第一参数值以及第二参数值,其中,第一参数值代表从第一个时间窗 口到第i-2个时间窗口结束时间点的历史汇总值,第二参数值代表第i-1个时间窗口结束时间点上的分段汇总结果;其中,i为当前时间窗口;

在计算从第一个时间窗口到当前时间窗口内任一时间点的总汇总值时,根据所述保存的信息确定第一参数值以及第二参数值,并根据实时计算引擎的实时数据回流结果,确定第三参数值,所述第三参数值代表当前时间窗口内当前时间点上的实时分段汇总结果;

将所述第一参数值、第二参数值以及第三参数值相加,确定所述总汇总值;

在当前时间窗口的结束时间点,将所述第一参数值与第二参数值相加,利用相加的结果更新所述保存的第一参数值,并利用当前时间窗口结束时间点上的分段汇总结果更新所述保存的第二参数值。

一种数据汇总装置,包括:

第一参数值保存单元,用于保存第一参数值以及第二参数值,其中,第一参数值代表从第一个时间窗口到第i-2个时间窗口结束时间点的历史汇总值,第二参数值代表第i-1个时间窗口结束时间点上的分段汇总结果;其中,i为当前时间窗口;

参数值确定单元,用于在计算从第一个时间窗口到当前时间窗口内任一时间点的总汇总值时,根据所述保存的信息确定第一参数值以及第二参数值,并根据实时计算引擎的实时数据回流结果,确定第三参数值,所述第三参数值代表当前时间窗口内当前时间点上的实时分段汇总结果;

运算单元,用于将所述第一参数值、第二参数值以及第三参数值相加,确定所述总汇总值;

参数值更新单元,用于在当前时间窗口的结束时间点,将所述第一参数值与第二参数值相加,利用相加的结果更新所述保存的第一参数值,并利用当前时间窗口结束时间点上的分段汇总结果更新所述保存的第二参数值。

根据本申请提供的具体实施例,本申请公开了以下技术效果:

通过本申请实施例,通过保存历史汇总值以及上一个时间窗口的分段汇总 结果,并在每个时间窗口的结束时间点对这两个值进行更新,就可以使得在计算总汇总值时,只需要将历史汇总值与上一时间窗口的分段汇总结果以及当前时间窗口当前时刻的实时分段汇总结果进行相加,即可确定出从第一个时间窗口当前时间窗口当前时刻的总汇总值。这样,可以实现在任意时间窗口的任一时间点都可以进行总汇总量的计算,并且,每次计算时,都只需要执行两次加法运算,因此,使得时间复杂度为o(1)。

另外,当数据源发生不稳定状态,也即实时计算引擎发生故障时,也可以进行数据的汇总运算,并且,在运算的过程中,同样可以通过一些公式,使得计算的时间复杂度控制为o(1)。

当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有优点。

附图说明

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

图1是本申请实施例提供的方法的流程图;

图2是本申请实施例提供的装置示意图。

具体实施方式

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

在本申请实施例中,为了能够在每个时间窗口内的任意时间点都能够根据实时计算引擎的回流结果进行数据汇总,并且,在进行汇总计算的过程中,降低算法的时间复杂度,可以保存两个参数值,其中第一参数值代表从第一个时 间窗口到第i-2个时间窗口结束时间点的历史汇总值,第二参数值代表第i-1个时间窗口结束时间点上的分段汇总结果;其中,i为正整数,第i个时间窗口代表当前时间窗口,这样,就可以利用第一参数值、第二参数值以及代表当前时间窗口内当前时间点上的实时分段汇总结果的第三参数值,计算出总的汇总值,之后,再通过将所述第一参数值与第二参数值相加,利用相加的结果更新所述保存的第一参数值,并利用当前时间窗口结束时间点上的分段汇总结果更新所述保存的第二参数值。也就是说,在本申请实施例中,每次计算总的汇总值时,都是三个参数值的相加运算,每次对参数值进行更新时,都是两个参数值的相加计算,加法运算的参数数量都是有限的,因此,可以使得计算的时间复杂度为o(1)。下面对具体的实现方式进行详细介绍。

参见图1,本申请实施例首先提供了一种数据汇总方法,该方法可以包括以下步骤:

s101:保存第一参数值以及第二参数值,其中,第一参数值代表从第一个时间窗口到第i-2个时间窗口结束时间点的历史汇总值,第二参数值代表第i-1个时间窗口结束时间点上的分段汇总结果;其中,i为当前时间窗口;

例如,第一参数可以表示为:s历,第二参数可以表示为s上,也就是说,第二参数为上一时间窗口结束时间点上的分段汇总结果,而第一参数是除去上一时间窗口的分段汇总结果之外的历史汇总值。其中,所谓的第一时间窗口是指第一次产生某数据时所在的第一个时间窗口。例如,在某次预售活动中,在预售开始后,开始产生参加预售的某商品对象的交易订单,相应的,需要对该商品对象在某仓库中对应的需要出库的库库存数量等数据进行汇总,则产生该商品对象的第一个交易订单时所在的时间窗口就是第一个时间窗口。本领域技术人员可根据需要设定不同的时间窗口,如一天、二天、三天、一周、一个月等,本申请对时间窗口的时间长度不作限定。

为了便于介绍,本申请实施例中,以一天作为一个时间窗口,也就是说,预售活动开始后的第一天。假设某商品对象已经产生了交易订单,则该第一天就作为相应的第一个时间窗口。接下来,预售活动可能会持续多天,则实时计算引擎分别对每天中各商品对象在各个仓库中的销量进行分段汇总,汇总系统 则将实时计算引擎每天产生的分段汇总结果再进行总的汇总,例如,可以得出从预售活动开始到某一天,某商品对象在某仓库中总共产生的销量总数。假设预售活动从12月20日开始,在12月29日进行总的汇总时,则第一参数值为从12月20日00:00到12月27日24:00之间的历史汇总值,第二参数值为从12月28日00:00到24:00的分段汇总结果。

其中,对于第一参数值以及第二参数值,在初始状态下,也即第一个时间窗口,其取值为0,随着后续时间窗口的产生,这两个参数会产生具体的取值,并且在每个时间窗口都可以对这两个参数值进行更新,并在数据库中进行保存。关于第一参数值以及第二参数值的保存以及更新情况,在后续步骤中会有详细介绍。

s102:在计算从第一个时间窗口到当前时间窗口内某一时间点的总汇总值时,根据所述保存的信息确定第一参数值以及第二参数值,并根据实时计算引擎的实时数据回流结果,确定第三参数值,所述第三参数值代表当前时间窗口内当前时间点上的实时分段汇总结果;

由于在存在实时计算引擎的情况下,汇总系统可能在每个时间窗口的任意时刻都有总的汇总需求,因此,在本申请实施例中,在计算从第一个时间窗口到当前时间窗口内任一时间点的总汇总值时,可以首先根据所述保存的信息确定第一参数值以及第二参数值,并且,还可以根据实时计算引擎的实时数据回流结果,确定第三参数值,该第三参数值代表当前时间窗口内当前时间点上的实时分段汇总结果。假设第三参数值为s当,当前的汇总时间为12月29日16:00,则s当为从12月29日00:00到16:00的汇总值,该信息是由实时计算引擎实时回流到汇总系统的,因此,可以从实时计算引擎的回流数据库中获取到该第三参数值。

需要说明的是,这里所谓的实时汇总值是指,在当前时间窗口内,当前时间点前产生的最新实时汇总值。例如,对于某商品对象在某仓库中的销量这一数据,业务系统最近一次产生交易订单的时间点为15:30,则实时计算引擎最近回流的实时分段汇总结果应该是在15:30分之后的某个时间点,如果从此时开始一直到16:00没有再产生新的关于该商品对象在该仓库上的交易订 单,则在16:00进行总的汇总计算时,取出的第三参数值就是该产生于15:30之后某时间点的实时分段汇总结果。

s103:将所述第一参数值、第二参数值以及第三参数值相加,确定所述总汇总值;

在确定出第一参数值、第二参数值以及第三参数值之后,就可以将三者相加,确定出总的汇总值。例如,如前文所述,假设第一参数值为s历,第二参数值为s上,第三参数值为s当,总的汇总值为s总,则可以通过以下公式进行计算:

s总=s历+s上+s当(3)

其中,等式右侧的三个参数都是直接从数据库中取出的固定的值,因此,无论从第一时间窗口到当前时间窗口已经经历了多少个时间窗口,也无论在当前时间窗口的具体哪个时刻进行计算,公式(3)中的加法运算都是三个数值进行相加,执行两次加法运算即可,不会出现随着经历的时间窗口数量的增加,执行加法运算的次数也逐渐增加的情况,因此,使得计算的时间复杂度为o(1)。

s104:在当前时间窗口的结束时间点,将所述第一参数值与第二参数值相加,利用相加的结果更新所述保存的第一参数值,并利用当前时间窗口结束时间点上的分段汇总结果更新所述保存的第二参数值。

如前文所述,对于第一参数值以及第二参数值,在初始状态下,也即第一个时间窗口,其取值为0,随着后续时间窗口的产生,这两个参数会产生具体的取值,并且在每个时间窗口都可以对这两个参数值进行更新。具体的,第一参数值以及第二参数值的更新时间可以发生在当前时间窗口的结束时间点,也即,在当前时间窗口中已经不会再执行总的汇总值计算操作,并且,实时计算引擎也不会再产生新的实时分段汇总结果,此时,就可以更新第一参数值以及第二参数值。其中,具体在更新第一参数值时,就可以将当前的第一参数值以及第二参数值相加,得到更新后的第一参数值,在更新第二参数值时,就可以将当前时间窗口结束时间点上的分段汇总结果确定为更新后的第二参数值,这样,在下一个时间窗口中再计算总的汇总值时,就可以利用更新后的第一参数 值以及第二参数值进行计算。也就是说,第一参数值的更新运算公式可以表示为:

s历=s历+s上(4)

为了便于理解,下面通过各参数值的变化状态进行介绍。

在第一个时间窗口,由于尚未产生历史汇总数据,也不存在“上一个时间窗口”,因此,s历=0,s上=0,在该第一个时间窗口内的任一时间点计算总的汇总值时,s总=s当。之后,在该时间窗口的结束时间点,例如24:00等,对s历以及s上进行更新,其中,更新后的s历=0+0=0,更新后的s上=s1,其中,s1为第一个时间窗口内从起始时间点到结束时间点之间的分段汇总值。

在第二个时间窗口,s历=0,s上=s1,在该第二个时间窗口内的任一时间点计算总的汇总值时,s总=s上+s当=s1+s当。之后,在该时间窗口的结束时间点,对s历以及s上进行更新,其中,更新后的s历=0+s1=s1,更新后的s上=s2,其中,s2为第二个时间窗口内从起始时间点到结束时间点之间的分段汇总值。

在第三个时间窗口,s历=s1,s上=s2,在该第三个时间窗口内的任一时间点计算总的汇总值时,s总=s历+s上+s当=s1+s2+s当。之后,在该时间窗口的结束时间点,对s历以及s上进行更新,其中,更新后的s历=s1+s2=s12,更新后的s上=s3,其中,s3为第三个时间窗口内从起始时间点到结束时间点之间的分段汇总值。

在第四个时间窗口,s历=s12,s上=s3,在该第四个时间窗口内的任一时间点计算总的汇总值时,s总=s历+s上+s当=s12+s3+s当。之后,在该时间窗口的结束时间点,对s历以及s上进行更新,其中,更新后的s历=s12+s3=s123,更新后的s上=s4,其中,s4为第四个时间窗口内从起始时间点到结束时间点之间的分段汇总值。

以此类推,后续各时间窗口中都可以按照上述方式进行总汇总值的计算,以及第一参数值与第二参数值的更新。

总之,通过公式(3)以及公式(4),使得总汇总值的计算过程中,加法 运算次数为两次,参数值的更新操作中的加法运算次数为一次,因此,时间复杂度可以控制为o(1)。

需要说明的是,前述公式(3)可以在当前时间,计算所有时间窗口的总的汇总值,并且,在当前时间窗口可以执行任意次。例如,在12月29日,可以在10:00执行一次总的汇总,还可以在16:00再执行一次总的汇总,等等。

而公式(4)是在每个时间窗口期间,执行且只能执行一次,用于更新第一参数值,以进行下个时间窗口期间总汇总值的计算。公式(4)执行后,就不能在当前时间窗口内用公式(3)来计算所有时间窗口的汇总值了,所以,公式(4)是在当前时间窗口的结束时间点执行。当然,这里的结束时间点,可以理解为恰好是当前时间窗口的结束时间点,或者,还可以是在当前时间窗口即将结束时的某个时间点,例如,在结束前1分钟时进行更新,等等。

另外需要说明的是,在具体实现时,第一参数值可以进行持久化保存在汇总系统的数据库中,第二参数值可以保存在回流数据库中,其中,回流数据库中的数据来源就是计算引擎,由于第二参数值是不需要计算的,而是直接根据实时计算引擎在上一个时间窗口的结束时间点回流的实时分段汇总结果而定,因此,可以直接在回流数据库中保存。也即,可以在回流数据库中保存用于记录第二参数值的记录,该条记录在每个时间窗口的结束时间点进行更新。

总之,在本申请实施例中,通过保存历史汇总值以及上一个时间窗口的分段汇总结果,并在每个时间窗口的结束时间点对这两个值进行更新,就可以使得在计算总汇总值时,只需要将历史汇总值与上一时间窗口的分段汇总结果以及当前时间窗口当前时刻的实时分段汇总结果进行相加,即可确定出从第一个时间窗口当前时间窗口当前时刻的总汇总值。这样,可以实现在任意时间窗口的任一时间点都可以进行总汇总量的计算,并且,每次计算时,都只需要执行两次加法运算,因此,使得时间复杂度为o(1)。

当然,在实际应用中,还可能出现实时计算引擎发生故障的情况,这就可能会导致某个或者某些时间窗口内汇总值丢失,针对这种情况,在本申请实施例中,可以对实时计算引擎的运行状态进行监控,如果所述实时计算引擎发生 故障时,则利用离线计算引擎回流的分段汇总结果,计算发生故障期间的离线汇总值,在所述实时计算引擎恢复后,利用所述第一参数、所述离线汇总值以及所述第三参数值,确定所述总汇总值。其中,对实时计算引擎的运行状态进行监控的实现方式可以有多种,例如,在其中一种方式下,可以在保存第一参数值以及第二参数值时,还保存第一参数值以及第二参数值的更新时间,在进行运行状态判断时,可以首先确定出所述第一参数值以及第二参数值的更新时间信息所属的时间窗口,然后判断所述所属的时间窗口是否为当前时间窗口的上一相邻时间窗口,如果不是,则确定所述实时计算引擎发生故障。

也就是说,假设实时计算引擎在12月26日至12月27日发生故障,12月28日00:00前恢复,则在12月26日至12月27日之间,实时计算引擎是无法进行阶段性汇总,也无法向汇总系统进行数据回流。这样,公式(3)中的s历只能更新到12月24日,s上只能更新到12月25日,也就是说,假设第一个时间窗口是12月20日,则s历的值是从12月20日00:00到12月24日24:00之间的历史汇总值,s上的值是从12月25日00:00到12月25日24:00之间的分段汇总结果。在12月26日无法从实时计算引擎获得实时分段汇总结果,因此,只能从离线计算引擎获取离线汇总结果,由于离线计算引擎通常在一个时间窗口内只执行一次分段汇总操作,例如,在每天的24:00对当天从00:00到24:00之间产生的数据进行汇总,因此,在12月26日只能执行一次总的汇总运算。

具体进行汇总运算时,就可以首先从保存的值中确定出s历和s上,然后,从离线计算引擎回流的数据中确定出12月26日的分段汇总值s离,然后将通过s历+s上+s离计算出截止到12月26日的总汇总量,并且可以更新s历=s历+s上,也就是说,此时,s历的值表示从12月20日00:00到12月25日24:00之间的历史汇总值。如果到了12月27日,实时计算引擎仍然没有恢复,则在12月27日获取到离线计算引擎回流的数据后,可以通过s历+s离1+s离2计算出截止到12月27日的总汇总量,其中,s离1为从12月26日00:00到24:00离线计算引擎计算出的分段汇总值,s离2为从12月27日00:00到24:00离线计算引擎计算出的分段汇总值。到了12月28日,由于实时计算引擎已经恢复,因此,可以通过以下公式计算出截止到12月28日任一时间点的总 汇总值:

s总=s历+s离1+s离2+s当(5)

当然,从上述公式(5)可以看出,如果实时计算引擎发生故障的时间不可估计,则公式(5)仍然可能出现时间复杂度为o(n)的情况,因为,发生故障的时间窗口每增加一个,需要执行加法运算的次数就增加一次。

为此,在本申请实施例中,如果所述实时计算引擎在连续多个时间窗口发生故障,则还可以保存第四参数值s离历以及第五参数值s离上,其中,第四参数值s离历代表从发生故障的第一个时间窗口到发生故障的第j-2个时间窗口期间的历史离线汇总值,所述第五参数值s离上为发生故障的第j-1个时间窗口的离线分段汇总结果。则在发生故障的第j个时间窗口(j为正整数,第j个时间窗口代表当前时间窗口),可以根据所述保存的信息确定所述第四参数值以及第五参数值,并将所述第四参数值与所述第五参数值相加,确定出所述离线汇总值。也就是说,可以通过以下方式对s离历进行更新:

s离历=s离历+s离上(6)

这样,在所述实时计算引擎恢复后,就可以利用以下方式计算截止到任一时间点的总汇总值:

s总=s历+s离历+s当(7)

在当前时间窗口结束时间点,可以将所述第四参数值与第五参数值相加,利用相加的结果更新所述保存的第四参数值,也就是说,可以通过以下方式对s历进行更新:

s历=s历+s离历(8)

并且,还可以利用当前时间窗口内获取到的离线计算引擎回流的分段汇总结果,更新第五参数值s离上。

需要说明的是,公式(6)可以在实时计算引擎故障期间执行,每个时间窗口执行且只能执行一次。

公式(7)是在实时计算引擎恢复后,可以在当前时间,计算所有窗口的业务汇总值。在当前时间窗口可以执行任意次。

公式(8)可以在当前窗口期间,执行且只能执行一次。用于更新历史汇总值,用于下次计算。下次计算的时间,有可能是下个时间窗口,也有可能因为故障的原因,到了若干个时间窗口之后。公式(8)执行后,就不能用公式(7)在当前时间窗口计算汇总值了,所以,公式(8)可以在当前时间窗口的结束时间点执行。

其中,s离1、s离2等是通过离线计算引擎获取,然后存储在回流数据库中的,是实时计算引擎发生故障时,每个时间窗口的业务汇总数据。s离历为故障期间所有时间窗口的历史汇总值,可以进行持久化保存,初始值为0。s历也可以在数据库中进行持久化保存,并在每个时间窗口的结束点进行更新。s当同样可以存储在回流数据库中,是当前时间窗口下的实时汇总数据。

总之,在本申请实施例中,当数据源发生不稳定状态,也即实时计算引擎发生故障时,也可以进行数据的汇总运算,并且,在运算的过程中,同样可以通过一些公式,使得计算的时间复杂度控制为o(1)。

与本申请实施例提供的数据汇总方法相对应,本申请实施例还提供了一种数据汇总装置,参见图2,该装置可以包括:

第一参数值保存单元201,用于保存第一参数值以及第二参数值,其中,第一参数值代表从第一个时间窗口到第i-2个时间窗口结束时间点的历史汇总值,第二参数值代表第i-1个时间窗口结束时间点上的分段汇总结果;其中,i为当前时间窗口;

参数值确定单元202,用于在计算从第一个时间窗口到当前时间窗口内任一时间点的总汇总值时,根据所述保存的信息确定第一参数值以及第二参数值,并根据实时计算引擎的实时数据回流结果,确定第三参数值,所述第三参数值代表当前时间窗口内当前时间点上的实时分段汇总结果;

运算单元203,用于将所述第一参数值、第二参数值以及第三参数值相加, 确定所述总汇总值;

参数值更新单元204,用于在当前时间窗口的结束时间点,将所述第一参数值与第二参数值相加,利用相加的结果更新所述保存的第一参数值,并利用当前时间窗口结束时间点上的分段汇总结果更新所述保存的第二参数值。

其中,可以持久化保存所述第一参数值,所述第二参数值以及第三参数值保存在回流数据库中。

具体实现时,该装置还可以包括:

监控单元,用于对实时计算引擎的运行状态进行监控;

离线汇总值计算单元,用于如果所述实时计算引擎发生故障时,则利用离线计算引擎回流的分段汇总结果,计算发生故障期间的离线汇总值;

总汇总值计算单元,用于在所述实时计算引擎恢复后,利用所述第一参数、所述离线汇总值以及所述第三参数值,确定所述总汇总值。

其中,如果所述实时计算引擎在连续多个时间窗口发生故障,则所述装置还包括:

第二参数值保存单元,用于保存第四参数值以及第五参数值,其中,第四参数值代表从发生故障的第一个时间窗口到发生故障的第j-2个时间窗口期间的历史离线汇总值,所述第五参数值为第j-1个时间窗口的离线分段汇总结果;

所述离线汇总值计算单元包括:

计算子单元,用于在发生故障的第j个时间窗口,根据所述保存的信息确定所述第四参数值以及第五参数值,并将所述第四参数值与所述第五参数值相加,确定所述离线汇总值;

更新子单元,用于在所述第j个时间窗口的结束时间点,将所述第四参数值与第五参数值相加,利用相加的结果更新所述保存的第四参数值,并利用当前时间窗口获得的离线分段汇总结果更新所述保存的第五参数值。

具体实现时,可以持久化保存所述第一参数值以及第四参数值,所述第三参数值以及第五参数值保存在回流数据库中。

其中,所述保存第一参数值以及第二参数值时,还包括第一参数值以及第二参数值的更新时间,此时,所述监控单元包括:

时间窗口确定子单元,用于确定所述第一参数值以及第二参数值的更新时间信息所属的时间窗口;

判断子单元,用于判断所述所属的时间窗口是否为当前时间窗口的上一相邻时间窗口,如果不是,则确定所述实时计算引擎发生故障。

总之,在本申请实施例中,通过保存历史汇总值以及上一个时间窗口的分段汇总结果,并在每个时间窗口的结束时间点对这两个值进行更新,就可以使得在计算总汇总值时,只需要将历史汇总值与上一时间窗口的分段汇总结果以及当前时间窗口当前时刻的实时分段汇总结果进行相加,即可确定出从第一个时间窗口当前时间窗口当前时刻的总汇总值。这样,可以实现在任意时间窗口的任一时间点都可以进行总汇总量的计算,并且,每次计算时,都只需要执行两次加法运算,因此,使得时间复杂度为o(1)。

另外,当数据源发生不稳定状态,也即实时计算引擎发生故障时,也可以进行数据的汇总运算,并且,在运算的过程中,同样可以通过一些公式,使得计算的时间复杂度控制为o(1)。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述 得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上对本申请所提供的数据汇总方法及装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本申请的限制。

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