一种分布式等值数据流连接方法与流程

文档序号:15215733发布日期:2018-08-21 16:50阅读:240来源:国知局

本发明涉及分布式数据流管理技术领域,特别涉及一种分布式等值数据流连接方法。



背景技术:

近年来,随着数据量爆发式地增长,传统数据库显示了较大的局限性,海量数据的分析成为新的课题,其中,流数据因为无限性,实时性,多变性等特点,给数据分析提出了新的挑战。早在2002年,Babcock就针对流数据提出了流数据管理系统,其中较为典型的原型系统有TelegraphCQ,Aurora,STREAM等管理系统。在这些流管理系统中,流连接计算由于计算复杂,资源消耗大,一直是非常重要的数据处理方式之一。

在过去的十年间,流连接计算已经达到一个新的高度。一些关键技术比如滑动窗口技术、抽样、直方图等已经被提出,大部分技术仅在单个节点模型中进行实现。在这类模型中,所有的计算资源例如CPU(性能)、内存、网络带宽等由处理单元共享。在这类模型并不需要考虑流数据是否被分发到同一个内存中。然而随着数据量的增加,单个节点的处理能力无法满足现阶段应用的需求,无法处理的数据也将被抛弃,导致数据结果的误差增大。云计算与大数据的出现,使采用分布式集群处理大数据成为了一种新的趋势。当数据流进入集群时,一个任务将会分割成多个小任务,并将分发到不同的节点上进行计算。但流连接计算在分布式环境下进行运算又带来了新的问题:(1)由于不同的数据流之间存在相互依赖关系,在分布式环境下,将数据分发到不同的节点则会导致关系的断裂而出现较大误差;(2)多流连接的中间结果庞大并且难以维护,对内存提出了较大的挑战;(3)单个节点处理压力大,当节点过载时需要有效措施保障结果的准确度。

传统的解决方案侧重于数据流连接的实现,采用基于二路连接计算的多路连接方式,维护了较多连接的中间结果,忽视了内存开销,数据连接的效率较低,或者采用的降载方式没有充分考虑流连接的特性,导致数据连接的误差较大。



技术实现要素:

为了加快数据流连接的效率和增大连接结果的准确度,本发明提出一种新型的分布式等值流连接方法,通过代价模型的计算选择开销代价最小的连接方案,减少数据连接过程中产生的中间结果的保存,降低内存开销,并采用关系树模型建立数据连接关系,并通过连接关系来快速连接数据和选择需要降载的数据,从而提高连接的效率和准确度。

一种分布式等值数据流连接方法,包括代价模型计算,用于连接代价最小的方式;数据分发,将需要连接的数据流发送到同一个task中,task为在具体线程中执行的任务抽象,将task分配到不同的节点中运算,使需要连接的数据流在同一个节点运算;数据连接,将接收到的数据构成关系数据模型,通过关系树模型连接和降载数据。

所述代价模型计算包括以下步骤:

步骤101、通过连接的语义,将连接关系划分为较小的子集合,子集合之间满足有且仅有一对连接关系,并保存新的连接语义;

步骤102、根据以下公式计算代价最小的子集合的划分集合:

costpeer=w1*costcpu+w2*costnet+w3*costmen (1)

其中costpeer表示计算节点运算流连接的理论开销,costcpu为CPU的开销,costnet为网络传输开销,costmen为内存开销,w1、w2、w3为权重系数;

节点的代价模型为:

costpeer=w1×((SData×Ojoin)÷AbiCPU)+w2×(SData÷Snet)+w3×(DistriData×Cachestra (2)

其中Snet为节点间网络传输速度,Ojoin为join算法复杂度,AbiCPU为CPU性能系数,SData为流数据速率,DistriData为流数据的分布情况,如符合泊松分布、正态分布等,CacheStra

为缓存策略的代价;

步骤103、根据代价模型选择开销代价最小的集合进行数据分发和连接;

步骤104、判断连接是否完成,如果未完成,则通过新的连接语义重新执行步骤1~步骤3,否则停止连接。

所述数据分发包括以下步骤:

步骤201、数据流在首次到达该数据分发策略时,获取该流对应的连接关系,将该流的第一个连接属性与该属性有直接连接关系的其他流的属性设置为主键,然后主键通过哈希取余的方式计算分配的task,并且记录该流需要连接的其他属性的值和task的映射形成路由表;

步骤202、随着数据流的输入,每一条数据需查找路由表来选择需要被分发到的task列表,分为两种情况:1)如果该流需要连接的属性值存在于路由表中,则直接获取该属性值对应的task列表并通过task列表分发数据,同时查看该流的其他连接属性是否存在于路由表中,如果其他属性在路由表中不存在或存在不一样的task,则将该流的task列表与路由表中该属性值的task列表合并,更新路由表,否则不更新路由表2)如果在路由表中查找不到该流需要连接的属性值,判断该流是否包含主键,如果包含主键则通过主键分发数据,并将该记录插入路由表,更新路由表,如果不包含主键则将该数据存入主缓存;

步骤203、当缓存达到预定阈值时,将缓存中的数据取出,按照步骤202重新分发。

所述降载数据的过程为:

步骤301、停止数据的插入,将接收的数据放入缓存;

步骤302、获取根节点的数据缓存,根据缓存中的key值遍历下一层的数据节点,若存在虚节点,则虚连接关系增加1,并判断虚连接数量是否已经超过预定值,如果超过,则将该节点和该节点的孩子节点都删除;若不超过,则执行步骤303。

步骤303、将该节点中的每一条数据的孩子节点设为根节点,重复执行步骤301~步骤303,直到数据全部被遍历;

步骤304、将缓存的数据和新来的数据继续连接。

本发明通过计算机的内存,CPU性能,网络的传输速度以及各种中间结果维护代价的计算,选择代价最小的模型进行数据流连接,减少了中间结果的维护和计算机资源的浪费;采用了新型的数据分发策略,通过hash值来判断需要分发的数据节点,快速地定位数据需要分发的节点,并且将具备连接关系的数据放入同一个节点中进行计算,避免了数据关系的断裂而导致的误差;采用关系树模型连接数据,充分考虑了数据连接的特性,快速有效地连接数据,减少了数据连接时的时间开销;采用了基于关系树模型的降载,通过数据已经连接的情况来判断数据流连接成功可能性的大小,抛弃被连接成功可能性最小的数据,保留被连接成功可能性最大的数据,减少了内存开销,保证了系统的稳定运行的同时增加了数据流连接成功的可能性。

附图说明

图1为多流连接示意图;

图2为本发明分布式等值数据流连接方法中数据分发流程图;

图3为实施例数据分发策略示例图;

图4为本发明分布式等值数据流连接方法中关系树模型图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,本发明包括三个阶段,代价模型计算,数据分发和数据连接计算。

代价模型计算:负责计算连接代价的最小模型,将连接关系划分为连接代价最小的子集合进行连接运算。

数据分发:负责将需要连接的数据流发送到同一个task中,从而保证需要连接的数据能够在同一个节点进行运算。

数据连接:负责将接收到的数据构成关系数据模型,通过关系树模型连接和降载数据。

代价模型计算是一系列的数学计算,将连接的计算抽象为连接模型,计算各种资源的开销,从而选取代价最小的模型,步骤如下:

1、通过连接的语义,将连接关系划分为较小的子集合,子集合之间满足有且仅有一对连接关系,并保存新的连接语义。

2、通过计算机的内存,网络传输速率,CPU性能计算代价最小的子集合划分情况,公式如下:

costpeer=w1*costcpu+w2*costnet+w3*costmen (1)

其中costcpu为CPU的开销,costnet为网络传输开销,costmen为内存开销,w1、w2、w3为权重系数;

节点的代价模型为:

costpeer=w1×((SData×Ojoin)÷AbiCPU)+w2×(SData÷Snet)+w3×(DistriData×Cachestra (2)

其中Snet为节点间网络传输速度,Ojoin为join算法复杂度,AbiCPU为CPU性能系数,SData为流数据速率,DistriData为流数据的分布情况,CacheStra为缓存策略的代价

3、选择最小的子集合划分情况进行数据分发和连接。

4、判断是否已经连接完成,如果需要继续连接,则通过新的连接语义执行步骤1,2,3,否则,停止连接操作。

数据分发策略主要通过连接关系,计算相互依赖的数据的属性值的hash值来决定数据需要被分发的计算task(任务)和节点,具体流程如图2所示。其中主键为计算数据分发节点的主要属性,主键数据通过主键值的hash(哈希)值取余来计算该数据需要被分发的task,在一条连接语句中,有且仅有一条连接条件中的数据流属性可以被设置为主键,其他的连接属性依赖于通过连接条件和主键的连带关系来获取需要分配的task列表。task为每一个线程所执行的具体任务,每一个task拥有唯一的taskid即任务编号。为了负载均衡,节点的选择由taskid决定,每一个task维护自己的数据栈,当数据发生倾斜,则在节点中重新分配task。而路由表则通过连接条件的分析,记录数据对应的属性值,并通过连接条件映射到主键,从而获取该值需要被发送的task列表,并记录该数据其他连接属性的值和task列表的映射。图3为数据分发策略的示例图,假设现有4条数据流,分别为s1、s2、s3、s4,数据流中包含的属性有a、b、c、d,当用户输入连接语句select*from s1,s2,s3,s4where s1.a=s2.a and s2.b=s3.band s3.c=s4.c时,根据上述的数据分发策略,进入该算法的第一条语句为s1,根据连接语义,s1.a和s2.a被设置为主键,s1、s2根据s1.a和s2.a来分发,s2在分发过程中会记录s2.b的值,并且记录该数据的被发送的taskid,而s3流数据则通过s2.b的记录来获取自己发送的task列表,并记录s3的b和c属性的值和发送的taskid,以此类推。

数据连接包括数据的连接和降载两个部分,通过滑动窗口缓存数据,利用hash快速查找和定位数据,并通过连接关系将每条流之间的数据关系抽象成为关系树,最后通过数据节点的最大深度来降载数据。

定义1:数据流连接的属性值作为key值,拥有相同key值的数据将存放同一个列表中,将该列表的整体作为value值,key值与value值成映射关系,这种映射关系被定义为一个数据节点。

定义2:数据节点的key值存在,但value为空的数据节点定义为虚节点。

定义3:数据节点的key值和value都不为空的数据节点定义为实节点。

定义4:两个实节点之间存在语义定义的连接关系定义为实连接关系。

定义5:两个数据节点中至少一个数据节点存在语义定义的连接关系定义为虚连接关系。

定义6:从根节点开始计算,到该数据节点的实连接关系的深度和该数据节点到叶子节点中所有存在真实连接关系的深度的累加定义为数据的最大深度。

当数据输入时,算法分为四种情况:

①初始情况:当数据进入时,关系树中不存在该流的缓存,缓存管理器需要新建该流的缓存,保存该数据的连接属性和对应的具体值,并且根据连接语义与其他流缓存进行建立连接关系。

②直接插入情况:当该流缓存已经存于与关系树中,对应数据节点存在,并且为实节点,表示该数据节点暂时无法和其他流完全连接成功,则将该数据插入该数据节点。

③插入虚匹配情况:当该流的缓存已经存在,但对应的数据节点不存在,则在该流缓存新建key值,并将该数据插入新建的数据节点,同时在对应连接流创建虚节点,形成虚连接。

④插入实际匹配情况:当该流缓存已经存在,对应数据节点存在,但该数据节点为虚节点,则至少一条流有对应连接的数据存在,此时将该数据连接其他流,连接成功则输出结果,并将该数据节点改为实际数据节点。

当调用降载策略时,首先停止数据的插入,将接收的数据放入缓存。然后获取根节点的数据缓存,根据缓存中的key值遍历下一层的数据节点,若存在虚节点,则虚连接关系增加1,并判断虚连接数量是否已经超过预定值,如果超过,则将该节点和该节点的孩子节点都删除,如果不超过,将该节点中的每一条数据的孩子节点设为根节点,递归操作以上步骤,直到数据全部被遍历。最后,将缓存的数据和新来的数据继续进行连接操作。

关系树的构造如图4,每一条数据流的缓存为该关系树的一层,通过hashmap方式存储,其中key值为连接的属性值,value为具有该属性值的数据的列表。根节点指向连接关系中出现的第一条数据流的缓存,设为该关系树的第一层,该数据流有对应的连接关系的数据流为该关系树的下一层,以此类推。关系树中每一层的节点都与上一层中的某一个节点通过连接节点相对应,称为该数据节点的父亲节点,并且关系树中的每一层节点都与下一层某一个节点通过连接关系相对应,称为该数据节点的孩子节点。如果在相邻的层中没有对应的连接的节点,则增加一个有对应key值,但value值为空的数据节点。

通过关系树连接的过程是查询父节点和子节点的递归过程,通过递归查询父节点以及父节点的父节点,和递归查询子节点以及子节点的子节点,如果递归查询的父子节点都包含有实际数值,则表示连接成功,将数据连接并发送给结果集处理,如果递归查询的父子节点中存在value值为空或者不存在对应的连接节点,则将该节点插入对应的流的缓存,并与对应的数据节点建立连接关系。

通过关系树的降载过程则是由关系树的大小达到阈值来触发。当关系树的大小达到降载阈值,则从根节点开始深度遍历关系树。将关系树中从根节点开始计算,深度遍历到叶子节点的过程中,当存在有value值为空的数据节点和无对应连接关系的数据节点的总数大于预定个数时,则将该遍历过程中除根节点外的所有数据节点删除,从而抛弃连接成功概率较小的数据节点。

本发明方案所公开的技术手段不仅限于上述实施方式所公开的技术手段,还包括由以上技术特征任意组合所组成的技术方案。

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