适用于大规模实时数据流的查询处理方法转让专利

申请号 : CN201210222034.6

文献号 : CN102737134B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 罗光春田玲陈爱国秦科

申请人 : 电子科技大学

摘要 :

本发明提供一种适用于大规模实时数据流的查询处理方法,根据输入的查询任务的FROM子句,将查询分解为对FROM子句中各数据流的单独查询,合并所有数据流的单独查询结果并形成最终查询结果;每个数据流的单独查询通过对SELECT子句以及WHERE子句的混合优化合并查询链实现。

权利要求 :

1.适用于大规模实时数据流的查询处理方法,其特征在于,根据输入的查询任务的FROM子句,将查询分解为对FROM子句中各数据流的单独查询,合并所有数据流的单独查询结果并形成最终查询结果;

每个数据流的单独查询通过对SELECT子句以及WHERE子句的混合优化合并查询链实现;

合并查询链包括以下步骤:

1)将当前数据流的查询语句进行分解生成各原子查询,对应每个查询语句生成一个原子操作集,计算原子操作集中所有原子查询对应的利用指标,所述利用指标为该原子查询在当前数据流对应的所有原子操作集中的重复次数,进入步骤2;

2)在当前数据流对应的所有原子操作集中选择具有最大利用指标的原子查询进行查询链合并,形成两条分支:一条真实数据流和一条虚拟数据流;真实数据流进行当前选择的原子查询操作,虚拟数据流不进行当前的原子查询操作;将具有该原子查询操作的所有查询链归入真实数据流,其它的归入虚拟数据流;之后,在当前数据流下每个查询语句根据合并后的查询链重新生成原子操作集,并重新计算各原子操作的利用指标,由此递归步骤

2,直到所有原子操作集为空,针对当前数据流的单独查询完毕;所述当前数据流为真实数据流或虚拟数据流。

2.如权利要求1所述适用于大规模实时数据流的查询处理方法,其特征在于,当在当前数据流对应的所有原子操作集中有多个最大利用指标的原子查询时,随机选择一个最大利用指标的原子查询进行查询链的合并。

3.如权利要求1所述适用于大规模实时数据流的查询处理方法,其特征在于,对于SELECT子句以及WHERE子句的对象为定值的原子操作,有完全相同的原子操作被判定为重复;

对于WHERE子句的对象为范围的原子操作,当该范围与其他WHERE子句的原子操作对象范围相同或被完全包含在所述其他WHERE子句的原子操作对象范围中即被认判定是重复。

说明书 :

适用于大规模实时数据流的查询处理方法

技术领域

[0001] 本发明涉及大规模数据流处理技术以及查询优化处理技术。

背景技术

[0002] 随着信息技术的飞速发展和互联网技术的普遍应用,许多行业都面临对海量流式数据的处理。随着数据量的不断增长,将更进一步地要求数据流处理系统平台必须提供实时高效服务的能力。可以预见,未来接入网络的数据源(例如,传感器等设备)会越来越多,需要在线处理和实时分析的数据量会越来越大,系统单元需要提供的服务也越来越多。因此,系统必须快速处理海量数据,及时响应请求,为本系统用户及外系统提供高性能、高可用的服务。
[0003] 数据查询是指对数据源的数据进行查找、筛选,从而获得需要的数据。而多个查询的内容往往会有交叉、重叠,而系统对这些部分的操作都是重复的。因此,对多个查询的优化基本思想就是充分利用这些公共部分,避免重复冗余的系统操作开销。现有对数据查询的优化处理分为两类:局部优化和全局优化。局部优化方案,典型的如AS算法,对每个查询自身进行分解,形成内部最优的可并行计算的查询图。最后将多个查询图拼起来即可。全局优化方案,典型的如IE,HA算法,对所有的查询进行统筹考虑,将各个查询分解为原子查询,查询结果按一定顺序连接起来,形成一个网状全局查询序列图。以上数据查询方法主要针对数据库进行操作。而数据流查询结构不同于数据库,相对简单,例如,数据流查询中将同一数据流中多个原子查询之间的关系基本为与(and)(为避免形成网状结构,充分利用二叉树结构的最优化理论基础,本优化算法不考虑或or的情况,对于该情况,将or的内容当成一个整体原子项,不拆分)。与数据库查询语句类似,使用SQL语法定义的数据流查询语句形式为:
[0004] SELECT Field_1[,Field_2,Field_3,…]
[0005] FROM Stream_1[,Stream_2,Stream_3,…]
[0006] WHERE Expression_1[and Expression_2 and Expression_3,…]
[0007] 其中,SELECT子句表示希望查询的字段;FROM子句表示从哪些流中进行查询;WHERE子句表示希望查询的字段需要满足哪些条件,这些查询条件在操作盒的参数属性元素中以表达式的方式出现。计算操作盒是系统任务处理的最小单位。系统的一次查询任务由多个操作盒组成。系统中可以存在多个查询任务,每个查询任务由多个操作盒组成。系统中的操作盒能够执行各种操作依赖于其中的各种参数。操作盒的参数可以是值类型也可以是各种表达式以适应各种计算要求。表达式由一个或多个操作数以及各种对操作数的运算组成。数据流查询结构中表达式之间的关系相对简单(如不包含聚合,连接等操作)。当存在较多数量的操作盒时,就可能出现重复的表达式。原子查询定义为一个简单的查询操作,即SELECT,FROM和WHERE子句中最多只能出现单一类型的项。如SELECT*FROM*WHERE A、SELECT A FROM*WHERE*、SELECT*FROM A WHERE*这样的形式,其中为保证语句完整,对于空缺项,一律填为﹡。对于SELECT*FROM*WHERE A,WHERE A为原子查询的核心。
[0008] 使用现有针对数据库的数据的优化处理方法对数据流进行处理并不能达到最优,针对数据流的特殊性,需要一种特殊的优化的计算处理的数据查询处理方法。

发明内容

[0009] 本发明所要解决的技术问题是,提供一种提高系统处理速度的数据查询方法。
[0010] 本发明为解决上述技术问题所采用的技术方案是,一种适用于大规模实时数据流的查询处理方法,根据输入的查询任务的FROM子句,将查询分解为对FROM子句中各数据流的单独查询,合并所有数据流的单独查询结果并形成最终查询结果;
[0011] 每个数据流的单独查询通过对SELECT子句以及WHERE子句的混合优化合并查询链实现;
[0012] 合并查询链包括以下步骤:
[0013] 1、将当前数据流的查询语句进行分解生成各原子查询,对应每个查询语句生成一个原子操作集,计算原子操作集中所有原子查询对应的利用指标,所述利用指标为该原子查询在当前数据流对应的所有原子操作集中的重复次数,进入步骤2;
[0014] 2、在当前数据流对应的所有原子操作集中选择具有最大利用指标的原子查询进行查询链合并,形成两条分支:一条真实数据流和一条虚拟数据流。真实数据流进行当前选择的原子查询操作,虚拟数据流不进行当前的原子查询操作;将具有该原子查询操作的所有查询链归入真实数据流,其它的归入虚拟数据流;之后,在当前数据流下每个查询语句根据合并后的查询链重新生成原子操作集,并重新计算各原子操作的利用指标,由此递归步骤2,直到所有原子操作集为空,针对当前流的单独查询完毕。
[0015] 所述当前数据流为真实数据流或虚拟数据流。
[0016] 具体的,当在当前数据流对应的所有原子操作集中有多个最大利用指标的原子查询时,随机选择一个最大利用指标的原子查询进行查询链的合并。
[0017] 本发明的有益效果是,利用数据流查询的特殊性,使得查询数据链形成最优的二叉树结构,查询效率高。

附图说明

[0018] 图1为实施例步骤1的数据流图;
[0019] 图3为实施例步骤2的数据流图;
[0020] 图2为实施例步骤3的数据流图;
[0021] 图4为实施例最终的数据流图。

具体实施方式

[0022] 根据输入的查询任务的FROM子句,将查询分解为对FROM子句中各数据流的单独查询,合并所有数据流的单独查询结果并形成最终查询结果;以FROM子句中一个数据流Stream为例:
[0023] 对数据流Stream的单独查询通过对SELECT子句以及WHERE子句的混合优化合并查询链实现:
[0024] 假设有如下多条查询:
[0025] 查询1:SELECT A,D FROM Stream WHERE B1,C1,
[0026] 查询2:SELECT A FROM Stream WHERE B3,C2
[0027] 查询3:SELECTA,D FROM Stream WHERE B2,C3,E
[0028] 查询4:SELECT D FROM Stream WHERE F
[0029] 查询5:SELECT D FROM Stream WHERE B4,F
[0030] 上述查询语句均有相同的原子查询SELECT*FROM Stream WHERE*,基于相同的数据流Stream,如图1所示,因此可以对上述5个查询语句进行查询优化。
[0031] 其中A、D表示选择的列或字段,例如Name、Age;
[0032] E、F均表示定值,如Department=”Computer”;
[0033] B表示范围MORE链,B为MORE链的关键字,且B1包含B2包含B3包含B4,以此类推,例如B1是X>10,B2是X>15;
[0034] C表示范围LESS链,与B链类似。
[0035] 为了简化描述,将一个原子查询简写为原子查询的核心字段的对象(列、字段、定值或范围),比如,将原子操作SELECTAFROM*WHERE*简写为A。
[0036] 本实施例中对于SELECT以及WHERE对象为定值的原子操作,其格式为:(原子操作,利用指标);对于WHERE对象为范围的原子操作,其格式为:(原子操作关键字,原子操作,操作符,操作符方向,利用指标)。
[0037] 步骤1)在当前数据流Stream下对个查询语句进行分解,得到各语句对应的原子操作集并各原子查询对应的利用指标。利用指标为原子查询在当前数据流Stream对应的所有原子操作集中的重复次数;对于SELECT子句以及WHERE子句的对象为定值的原子操作,有完全相同的原子操作被判定为重复;对于WHERE子句的对象为范围的原子操作,当该范围与其他WHERE子句的原子操作对象范围相同或被完全包含在所述其他WHERE子句的原子操作对象范围中即被认判定是重复。如此,得到分解后的各原子操作集为:
[0038] 查询1的原子操作集:(A,3)、(D,4)、(B,B1,>,MORE,4)、(C,C1,<,LESS,3)[0039] 查询2的原子操作集:(A,3)、(B,B3,>,MORE,2)、(C,C2,<,LESS,2)
[0040] 查询3的原子操作集:(A,3)、(D,4)、(B,B2,>,MORE,3)、(C,C3,<,LESS,1)、(E,1)[0041] 查询4的原子操作集:(D,4)、(F,2)
[0042] 查询5的原子操作集:(D,4)、(B,B4,>,MORE,1)、(F,2)
[0043] 步骤2)在(D,4)与(B,B1,>,MORE,4)中随机选择利用指标最大者:(D,4);
[0044] 对含有该原子操作D的查询语句进行合并,将具有该原子查询操作的所有查询链归入真实数据流,其它的归入虚拟数据流。合并后当前数据流形成两条分支:一条真实数据流和一条虚拟数据流。真实数据流进行当前选择的原子查询操作D,虚拟数据流不进行当前的原子查询操作,如图2所示:
[0045] 生成节点:节点D+虚拟节点1
[0046] 针对(D,4)节点,查询变为:
[0047] 查询1:SELECTAFROM节点D WHERE B1,C1
[0048] 查询3:SELECTAFROM节点D WHERE B2,C3,E
[0049] 查询4:SELECT*FROM节点D WHERE F
[0050] 查询5:SELECT*FROM节点D WHERE,B4,F
[0051] 在当前数据流(从节点D流出的真实数据流)下查询语句1、3、4、5。根据合并后的查询链重新生成原子操作集,并重新计算各原子操作的利用指标:
[0052] 查询1的原子操作集:(A,2)、(B1,3)、(C1,2)
[0053] 查询3的原子操作集:(A,2)、(B2,2)、(C3,1)、(E,1)
[0054] 查询4的原子操作集:(F,2)
[0055] 查询5的原子操作集:(B4,1)、(F,2)
[0056] 针对虚拟节点1,查询变为:
[0057] 查询2:SELECTAFROM虚拟节点1WHERE B3,C2
[0058] 在当前数据流(从虚拟节点1流出的虚拟数据流)下查询语句2根据合并后的查询链重新生成原子操作集,并重新计算各原子操作的利用指标:
[0059] 查询2的原子操作集:(A,2)、(B1,1)、(C1,1)
[0060] 步骤3)在节点D对应的真实数据流上,找到利用指标最大者:(B1,3),对含有该原子操作B1的查询语句进行合并,将具有该原子查询操作的所有查询链归入真实数据流,其它的归入虚拟数据流。合并后当前数据流形成两条分支:一条真实数据流和一条虚拟数据流。真实数据流进行当前选择的原子查询操作B1,虚拟数据流不进行当前的原子查询操作,如图3所示;
[0061] 生成节点:节点B1+虚拟节点1.1;
[0062] 再在当前数据流(从节点B1流出的真实数据流)下查询语句1、3、5根据合并后的查询链重新生成原子操作集,并重新计算各原子操作的利用指标;
[0063] 再在当前数据流(从虚拟节点1.1流出的虚拟数据流)下查询语句4,重新生成原子操作集,并重新计算各原子操作的利用指标;
[0064] 在虚拟节点1对应的虚拟数据流上,3个原子查询的利用指标相同,随机选择一个原子查询(A,2)进行执行,将具有该原子查询操作的所有查询链归入真实数据流,其它的归入虚拟数据流,如图3所示;
[0065] 生成节点:节点A+虚拟节点1.2;
[0066] 再在当前数据流(从节点A流出的真实数据流)下重新生成查询语句2的原子操作集,并重新计算各原子操作的利用指标;
[0067] 由于从虚拟节点1.2流出的真实数据流没有查询语句分配在该数据流上,因此不再做处理;
[0068] 依上述步骤,不断对在当前数据流对应的所有原子操作集中选择具有最大利用指标的原子查询进行查询链合并,在执行的原子操作对应的节点上形成一条真实数据流和一条虚拟数据流,直至所有原子操作集中没有原子查询可选择,对数据流Stream进行单独查询结束。最终真实数据流形成最终对数据流Stream进行单独查询的查询链,如图4所述。
[0069] 本实施中一个子句对应有多个对象时,对象间的关系为and。如WHERE B1,C1,则认为是WHERE B1and C1,分为两个原子查询WHERE B1、WHERE C1进行查询链的合并处理。当两个对象间的关系为or时,如WHERE B1orC1,则将B1orC1作为一个对象,即视WHEREB1orC1为一个原子查询进行查询链的合并处理。