发明内容
本发明提供一种面向实时数据分析的流式图数据处理系统及方法,采用热点检测与热点数据迁移的优化方式保证数据处理的高效性,从而解决了现有技术中处理效率不高的问题。
第一方面,本发明提供一种面向实时数据分析的流式图数据处理系统,包括:
原始数据分析器、热点检测器、热点负载均衡器、协同调度器和N个计算分区,每一个计算分区包括用于存储静态图数据的图结构存储区和更新操作缓存区;
所述原始数据分析器用于:将一个时间片内接收到的流式更新数据转化为图更新数据,并将所述图更新数据发送到热点检测器,同时根据数据迁移记录表和基于索引的切分方法将所述图更新数据切分为N个数据块,将所述N个数据块发送到对应的计算分区的更新操作缓存区中;
所述热点检测器用于检测所述图更新数据是否为热点数据;
所述热点负载均衡器用于周期性地对所述热点检测器在预设时间段内检测到的所有热点数据进行热点负载均衡,根据热点负载均衡进行计算分区之间的数据迁移,并将进行数据迁移的热点数据通知给所述原始数据分析器;
所述原始数据分析器还用于将进行数据迁移的热点数据记录在所述数据迁移记录表中;
所述协同调度器用于:检测到有应用发出计算请求后,根据所有计算分区中的数据得到当前图结构数据,调用所述应用的算法并将所述当前图结构数据作为输入执行所述应用的算法。
进一步地,所述协同调度器具体用于:
通知每个计算分区将自身的更新操作缓存区中的数据块合并到图结构存储区中,将所有计算分区的图结构存储区中的数据进行合并得到所述当前图结构数据。
进一步地,所述热点检测器具体用于:
统计所述图更新数据在t到t+1时刻的更新次数UT(t+1),通过如下公式计算所述图更新数据在t+1时刻的热度HR(t+1):
HR(t+1)=λHR(t)+UT(t+1);
接着通过公式:计算所述图更新数据的标准分score;
其中,λ为热度的衰减系数,λ<1,μ(t)与σ(t)分别为t时刻HR(t)的均值与标准差;
若score的值大于预设阈值,则确定所述图更新数据是热点数据,若否,则确定所述图更新数据不是热点数据。
进一步地,所述热点负载均衡器具体用于:
通过公式cost=HR·AEdgesα计算在预设时间段内检测到的所有热点数据的计算开销cost,其中,AEdges为热点数据的邻接的边的数目,α为传播系数;
确定是否是第一次执行负载均衡操作,若是,则将全部热点数据按照cost从大到小排序,遍历全部热点数据,对于每个热点数据,将其分配给当前已分配的总计算开销最小的计算分区;
若否,循环执行如下操作:
S1、将已分配到每个计算分区的热点数据按照cost从大到小排序,确定出总cost最大的和总cost最小的计算分区;
S2、确定出k,满足排在前k的热点数据的cost总和大于总cost最小的计算分区的总cost;
S3、若k小于总cost最小的计算分区的热点数据个数,将cost排在第k+1的热点数据迁移到总cost最小的计算分区上,继续执行S1;
S4、否则,循环终止。
进一步地,所述协同调度器包括数据存储单元,所述数据存储单元用于存储注册到所述系统的每一应用的计算执行频率和上一次的执行时刻:
所述协同调度器还用于:
检测到有多个应用发出计算请求时,调度多个应用依次执行,在调度每一应用执行时,通知每个计算分区将自身的更新操作缓存区中从上一次执行时刻到当前时刻的全部数据块合并到图结构存储区中,将所有计算分区的图结构存储区中的数据进行合并得到所述当前图结构数据。
第二方面,本发明提供一种面向实时数据分析的流式图数据处理方法,包括:
将一个时间片内接收到的流式更新数据转化为图更新数据;
根据数据迁移记录表和基于索引的切分方法将所述图更新数据切分为N个数据块,将所述N个数据块发送到对应的计算分区的更新操作缓存区中,所述计算分区有N个,每一个计算分区包括用于存储静态图数据的图结构存储区和更新操作缓存区;
检测所述图更新数据是否为热点数据;
周期性地对在预设时间段内检测到的所有热点数据进行热点负载均衡,根据热点负载均衡进行计算分区之间的数据迁移,并将进行数据迁移的热点数据记录在所述数据迁移记录表中;
检测到有应用发出计算请求后,根据所有计算分区中的数据得到当前图结构数据,调用所述应用的算法并将所述当前图结构数据作为输入执行所述应用的算法。
进一步地,所述根据所有计算分区中的数据得到当前图结构数据,包括:
通知每个计算分区将自身的更新操作缓存区中的数据块合并到图结构存储区中,将所有计算分区的图结构存储区中的数据进行合并得到所述当前图结构数据。
进一步地,所述检测所述图更新数据是否为热点数据,包括:
统计所述图更新数据在t到t+1时刻的更新次数UT(t+1),通过如下公式计算所述图更新数据在t+1时刻的热度HR(t+1):
HR(t+1)=λHR(t)+UT(t+1);
接着通过公式计算所述图更新数据的标准分score;
其中,λ为热度的衰减系数,λ<1,μ(t)与σ(t)分别为t时刻HR(t)的均值与标准差;
若score的值大于预设阈值,则确定所述图更新数据是热点数据,若否,则确定所述图更新数据不是热点数据。
进一步地,所述周期性地对在预设时间段内检测到的所有热点数据进行热点负载均衡,根据热点负载均衡进行计算分区之间的数据迁移,包括:
通过公式:cost=HR·AEdgesα计算在预设时间段内检测到的所有热点数据的计算开销cost,其中,AEdges为热点数据的邻接的边的数目,α为传播系数;
确定是否是第一次执行负载均衡操作,若是,则将全部热点数据按照cost从大到小排序,遍历全部热点数据,对于每个热点数据,将其分配给当前已分配的总计算开销最小的计算分区;
若否,循环执行如下操作:
S1、将已分配到每个计算分区的热点数据按照cost从大到小排序,确定出总cost最大的和总cost最小的计算分区;
S2、确定出k,满足排在前k的热点数据的cost总和大于总cost最小的计算分区的总cost;
S3、若k小于总cost最小的计算分区的热点数据个数,将cost排在第k+1的热点数据迁移到总cost最小的计算分区上,继续执行S1;
S4、否则,循环终止。
进一步地,还包括:
接收到应用的注册请求后,存储所述应用的计算执行频率和上一次的执行时刻:
检测到有多个应用发出计算请求时,调度多个应用依次执行,在调度每一应用执行时,所述根据所有计算分区中的数据得到当前图结构数据,包括:
通知每个计算分区将自身的更新操作缓存区中从上一次执行时刻到当前时刻的全部数据块合并到图结构存储区中,将所有计算分区的图结构存储区中的数据进行合并得到所述当前图结构数据。
本发明提供的面向实时数据分析的流式图数据处理系统及方法,通过原始数据分析器将图更新数据发送到热点检测器,同时根据数据迁移记录表和基于索引的切分方法将图更新数据切分为N个数据块,将N个数据块发送到对应的计算分区的更新操作缓存区中,热点检测器检测该图更新数据是否为热点数据,热点负载均衡器周期性地对热点检测器在预设时间段内检测到的所有热点数据进行热点负载均衡,根据热点负载均衡进行计算分区之间的数据迁移,并将进行数据迁移的热点数据通知给原始数据分析器存储在数据迁移记录表中,最后协同调度器在检测到有应用发出计算请求后,根据所有计算分区中的数据得到当前图结构数据,调用应用的算法并将当前图结构数据作为输入执行应用的算法。由于对图更新数据进行了热点检测与热点数据迁移,避免了不同计算分区的计算倾斜,因此保证了数据处理的高效性。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图2为本发明面向实时数据分析的流式图数据处理系统实施例一的结构示意图,如图2所示,本实施例的系统可以包括:原始数据分析器10、热点检测器11、热点负载均衡器12、协同调度器13和N个计算分区,每一个计算分区包括用于存储静态图数据的图结构存储区和更新操作缓存区。更新操作缓存区用于存储流式图的更新数据,每一个时间片中得到的更新数据按顺序分数据块保存。
其中,原始数据分析器10用于:将一个时间片内接收到的流式更新数据转化为图更新数据(比如添加一个点,改变一条边的属性等),并将图更新数据发送到热点检测器,同时根据数据迁移记录表和基于索引的切分方法将图更新数据切分为N个数据块,将N个数据块发送到对应的计算分区的更新操作缓存区中,每个数据块与计算分区一一对应,数据迁移记录表存储在原始数据分析器10中,用于存储进行了数据迁移的热点数据。
其中,为了使图的存储结构能够随机存取以支持图的细粒度与高效率更新,本实施例中采用基于Hash的二维图切分方法,且方法使用了点切分方式。
本实施例中的切分方法基于以下的计算模型:给定一个N×N的图的稀疏邻接矩阵E(X轴表示边的起点,Y轴表示边的终点)以及P=K×L个计算分区,最终目标是将这些边均匀的分配到这P个计算分区中同时最小化每个点被切分存储到不同分区的个数。因为这P个计算分区被划分为了一个矩阵的形式,所以任意点被切分存储到不同分区的个数得到了限制,由此造成的通信开销也就得到了约束。
本实施例中的切分方法具体可以分为两步:首先,用边的起点的标识对K求Hash值,这样就根据起点将所有的边初步分为了K个部分,之后对这K个部分进一步切分,用每一条边的终点的标识对L求Hash值,将每一部分又进一步切分为了L个部分,至此,所有的边被均匀的分配到了这P个计算分区中,而且对于每一个点,在最坏情况下它需要存储的副本个数是K+L-1。
图3为本实施例中基于Hash的二维图切分方法的切分过程示意图,如图3所示,本实施例中以将一个8×8的稀疏邻接矩阵中表示的边切分到2×2个计算分区中的过程,不同的形状表示了不同的计算分区,图3(a)示出了原始的邻接矩阵,图3(b)示出了经过第一步切分之后的结果,图3(c)示出了经过第二步切分之后的结果。
热点检测器11用于检测该图更新数据是否为热点数据。具体地,按照如下操作检测:
统计图更新数据在t到t+1时刻的更新次数UT(t+1),通过如下公式计算图更新数据在t+1时刻的热度HR(t+1):
HR(t+1)=λHR(t)+UT(t+1)。
接着通过公式:计算图更新数据的标准分score。
其中,λ为热度的衰减系数,λ<1,μ(t)与σ(t)分别为t时刻HR(t)的均值与标准差。若score的值大于预设阈值,则确定图更新数据是热点数据,若否,则确定图更新数据不是热点数据。
热点负载均衡器12用于周期性地对热点检测器11在预设时间段内检测到的所有热点数据进行热点负载均衡,根据热点负载均衡进行计算分区之间的数据迁移,并将进行数据迁移的热点数据通知给原始数据分析器10。热点数据的负载均衡的根本目标是让每个分区的热点的总计算开销尽量保持接近,考虑到热点数据的持续性以及减少性能开销,热点数据的检测与负载均衡会在一个相对较长的时间周期内执行一次(比如30分钟),具体地,热点负载均衡器12首先通过公式cost=HR·AEdgesα计算在预设时间段内检测到的所有热点数据的计算开销cost,其中,AEdges为热点数据的邻接的边的数目,α为传播系数,经过大量实验本实施例中将其设定为1.5,预设时间为预设的周期,例如设为30分钟。接着确定是否是第一次执行负载均衡操作,若是,则将全部热点数据按照cost从大到小排序,遍历全部热点数据,对于每个热点数据,将其分配给当前已分配的总计算开销最小的计算分区。本发明中称上述算法为贪心算法,图4为本实施例中第一次执行负载均衡操作的示意图,如图4所示,4个计算分区,11个热点数据的cost从大到小排序,执行负载均衡操作后,每个热点数据分配到4个计算分区如图4所示。
若否,采用基于贪心和交换的负载均衡算法,循环执行如下操作:
S1、将已分配到每个计算分区的热点数据按照cost从大到小排序,确定出总cost最大的和总cost最小的计算分区;
S2、确定出k,满足排在前k的热点数据的cost总和大于总cost最小的计算分区的总cost;
S3、若k小于总cost最小的计算分区的热点数据个数,将cost排在第k+1的热点数据迁移到总cost最小的计算分区上,继续执行S1;
S4、否则,循环终止。
图5示出了执行上述算法的结果示意图,如图5所示,第一次循环过程将计算分区0中计算开销为2的热点迁移到了计算分区1中,第二次循环过程将计算分区2中计算开销为3的热点迁移到了计算分区3中,第三次循环过程将计算分区0中计算开销为1的热点迁移到了计算分区2中,至此算法结束。
原始数据分析器10还用于将进行数据迁移的热点数据记录在数据迁移记录表中,这样可保证图更新数据切分的正确性。
协同调度器13用于:检测到有应用发出计算请求后,根据所有计算分区中的数据得到当前图结构数据,调用应用的算法并将当前图结构数据作为输入执行应用的算法。其中,协同调度器13根据所有计算分区中的数据得到当前图结构数据,具体为:通知每个计算分区将自身的更新操作缓存区中的数据块合并到图结构存储区中,将所有计算分区的图结构存储区中的数据进行合并得到当前图结构数据。
可以看出,按照本实施例提供的面向实时数据分析的流式图数据处理系统,系统的操作是按照时间片划分,在某一个时间片内的更新数据会积攒起来一起处理,这样可以提高系统的执行效率。
本实施例提供的面向实时数据分析的流式图数据处理系统,通过原始数据分析器将图更新数据发送到热点检测器,同时根据数据迁移记录表和基于索引的切分方法将图更新数据切分为N个数据块,将N个数据块发送到对应的计算分区的更新操作缓存区中,热点检测器检测该图更新数据是否为热点数据,热点负载均衡器周期性地对热点检测器在预设时间段内检测到的所有热点数据进行热点负载均衡,根据热点负载均衡进行计算分区之间的数据迁移,并将进行数据迁移的热点数据通知给原始数据分析器存储在数据迁移记录表中,最后协同调度器在检测到有应用发出计算请求后,根据所有计算分区中的数据得到当前图结构数据,调用应用的算法并将当前图结构数据作为输入执行应用的算法。由于对图更新数据进行了热点检测与热点数据迁移,避免了不同计算分区的计算倾斜,因此保证了数据处理的高效性。
进一步地,现有技术中还存在一缺陷,当存在多个有不同计算请求频率的应用(比如应用A每5秒进行一次计算,应用B每10秒进行一次计算)同时在系统上运行时,现有的处理系统无法应对。为解决这一问题,本发明的协同调度器可应对有不同计算请求频率的多应用的运行,协同调度器13控制每个计算分区中更新操作缓存区中的数据块合并到底层图结构中的时间以及释放的时间。在图2所示系统结构的基础上,协同调度器13包括数据存储单元,所述数据存储单元用于存储注册到所述系统的每一应用的计算执行频率和上一次的执行时刻。此时协同调度器13还用于:检测到有多个应用发出计算请求时,调度多个应用依次执行,在调度每一应用执行时,通知每个计算分区将自身的更新操作缓存区中从上一次执行时刻到当前时刻的全部数据块合并到图结构存储区中,将所有计算分区的图结构存储区中的数据进行合并得到所述当前图结构数据。接着调用对应应用的算法并将所述当前图结构数据作为输入执行该应用的算法。
具体来说,当一个应用注册本发明的系统时,针对每一个应用,系统会创建一个数据存储单元来存储应用相关的信息,包括应用的计算执行频率、上一次的执行时刻,也可以包括下一次的调用时刻(即就是上一次执行时刻加上计算执行频率),同时,系统还会维护一个全局变量,用来保存上一次将数据块合并入底层图结构的时刻。对某一时刻而言,如果协同调度器13检测到没有任何应用发出计算请求,将什么也不做。如果有计算请求的话,将进行如下操作:
控制每个计算分区,将从上一次数据块合并时刻到当前时刻的所有计算分区中的数据块中的数据合并入底层图结构,为了提高系统效率,依旧采用批处理的方式,即将每一计算分区中的数据块合并成为一个整体,然后再将所有计算分区合并后的整体合并入底层图结构。最后,合并时间被更新为当前时刻。
协同调度器13调度多个应用依次执行,对于增量计算模式,每个应用的算法输入就是从上一次执行时刻到当前时刻的全部计算分区中的数据,在应用算法执行完毕之后,应用相应的上一次执行时刻为当前时刻,下一次执行时刻也会相应的进行更新。在完成所有的应用调用之后,协同调度器13会遍历检查所有应用的上一次执行时刻并且得到最久远的一个,在这个时刻之前的所有计算分区中的数据块的数据会被释放,因为它们不可能再被使用。图6为协同调度器调度两个应用时的一个计算分区中的数据块合并示意图,协同调度器上有两个应用,执行频率分别为2和3,如图6所示,t0为初始时刻,那么在t2时刻数据块1和数据块2中的数据会被合并入底层图结构,在t2时刻数据块3会被合并入底层图结构并且数据块1和数据块2会被释放,以此类推。
通过协同调度器的调度,本实施例提供的面向实时数据分析的流式图数据处理系统可以应对有不同计算请求频率的多应用的运行。
图7为本发明面向实时数据分析的流式图数据处理方法实施例一的流程图,如图7所示,本实施例的方法可以包括:
S101、将一个时间片内接收到的流式更新数据转化为图更新数据。
S102、根据数据迁移记录表和基于索引的切分方法将图更新数据切分为N个数据块,将N个数据块发送到对应的计算分区的更新操作缓存区中,计算分区有N个,每一个计算分区包括用于存储静态图数据的图结构存储区和更新操作缓存区。
S103、检测图更新数据是否为热点数据。
具体地,包括以下步骤:
统计图更新数据在t到t+1时刻的更新次数UT(t+1),通过如下公式计算图更新数据在t+1时刻的热度HR(t+1):
HR(t+1)=λHR(t)+UT(t+1);
接着通过公式计算图更新数据的标准分score;
其中,λ为热度的衰减系数,λ<1,μ(t)与σ(t)分别为t时刻HR(t)的均值与标准差;
若score的值大于预设阈值,则确定图更新数据是热点数据,若否,则确定图更新数据不是热点数据。
S104、周期性地对在预设时间段内检测到的所有热点数据进行热点负载均衡,根据热点负载均衡进行计算分区之间的数据迁移,并将进行数据迁移的热点数据记录在数据迁移记录表中。
其中,周期性地对在预设时间段内检测到的所有热点数据进行热点负载均衡,根据热点负载均衡进行计算分区之间的数据迁移,具体包括:
通过公式:cost=HR·AEdgesα计算在预设时间段内检测到的所有热点数据的计算开销cost,其中,AEdges为热点数据的邻接的边的数目,α为传播系数;
确定是否是第一次执行负载均衡操作,若是,则将全部热点数据按照cost从大到小排序,遍历全部热点数据,对于每个热点数据,将其分配给当前已分配的总计算开销最小的计算分区;
若否,循环执行如下操作:
S1、将已分配到每个计算分区的热点数据按照cost从大到小排序,确定出总cost最大的和总cost最小的计算分区;
S2、确定出k,满足排在前k的热点数据的cost总和大于总cost最小的计算分区的总cost;
S3、若k小于总cost最小的计算分区的热点数据个数,将cost排在第k+1的热点数据迁移到总cost最小的计算分区上,继续执行S1;
S4、否则,循环终止。
S105、检测到有应用发出计算请求后,根据所有计算分区中的数据得到当前图结构数据,调用应用的算法并将当前图结构数据作为输入执行应用的算法。
其中,根据所有计算分区中的数据得到当前图结构数据,可以为:通知每个计算分区将自身的更新操作缓存区中的数据块合并到图结构存储区中,将所有计算分区的图结构存储区中的数据进行合并得到当前图结构数据。
本实施例提供的面向实时数据分析的流式图数据处理方法,通过将一个时间片内接收到的流式更新数据转化为图更新数据,根据数据迁移记录表和基于索引的切分方法将图更新数据切分为N个数据块,将N个数据块发送到对应的计算分区的更新操作缓存区中,并检测该图更新数据是否为热点数据,周期性地对热点检测器在预设时间段内检测到的所有热点数据进行热点负载均衡,根据热点负载均衡进行计算分区之间的数据迁移,并将进行数据迁移的热点数据存储在数据迁移记录表中,最后在检测到有应用发出计算请求后,根据所有计算分区中的数据得到当前图结构数据,调用应用的算法并将当前图结构数据作为输入执行应用的算法。由于对图更新数据进行了热点检测与热点数据迁移,避免了不同计算分区的计算倾斜,因此保证了数据处理的高效性。
进一步地,现有技术中还存在一缺陷,当存在多个有不同计算请求频率的应用(比如应用A每5秒进行一次计算,应用B每10秒进行一次计算)同时在系统上运行时,现有的处理系统无法应对。为解决这一问题,本实施例在图7所示方法的基础上,还包括:
接收到应用的注册请求后,存储应用的计算执行频率和上一次的执行时刻。
检测到有多个应用发出计算请求时,调度多个应用依次执行,在调度每一应用执行时,根据所有计算分区中的数据得到当前图结构数据,具体包括:
通知每个计算分区将自身的更新操作缓存区中从上一次执行时刻到当前时刻的全部数据块合并到图结构存储区中,将所有计算分区的图结构存储区中的数据进行合并得到当前图结构数据。接着调用对应应用的算法并将当前图结构数据作为输入执行该应用的算法。
通过本实施例中的调度多个应用依次执行的过程,可以应对有不同计算请求频率的多应用的运行。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。