本发明涉及计算机数据库
技术领域:
,尤其涉及一种基于数据模式转换和并行框架的关系数据查询优化方法。
背景技术:
:随着各类应用中数据的规模不断增加,这导致了在集中式的关系数据库上的对大规模数据查询操作执行响应时间增加,影响了应用系统在查询处理实时性上的需求,如何提高海量数据上查询处理的性能已经成为数据库应用领域一个重要需求;针对海量数据的存储和访问,现有数据管理系统采用分布式存储和并行查询处理的方式来提高查询处理的性能;将集中式关系数据库上的查询进行分解,将需要并行处理部分合理地转移到并行处理框架下运行,将能够极大地提高查询处理的性能,满足实际应用在实时性上的需求;造成当前关系数据库系统在一些复杂查询上性能低下的主要原因在于关系模型针对的是通用型数据库,在模式设计上主要面向减少数据冗余的思想,这样的结果就是在实际的查询执行时需要对多个关系表进行连接操作,而连接操作在关系数据库中属于执行代价较高的操作,数据库管理系统自身的查询优化器并不一定能够生产最优的执行策略;关系数据库系统在并行查询处理上的能力较弱,现有的关系数据库管理系统虽然支持多处理器的并行方式,但是并不支持多主机的并行处理,这样在数据规模变大的情况下,很难通过水平扩展的方式保证查询处理的执行性能;采用关系模型存储的数据在实现一些特助应用中的业务逻辑时会收到关系代数操作符的限制,从而不得不以较复杂的查询方式实现,这导致了查询执行性能的进一步下降;现在,针对一些特殊数据查询应用已经提出了新的数据模型,如键值模型,同时基于这些数据模型也有相应的并行计算框架以支撑对海量数据信息的并行查询处理。然而,目前缺少一种有效的方法将关系数据库中的数据针对查询的特征准确地转换到spark并行查询处理框架之上以提高各类复杂查询处理的执行效率。技术实现要素:针对现有技术的缺陷,本发明提供一种基于数据模式转换和并行框架的关系数据查询优化方法,能够将关系数据库中的数据针对查询的特征准确地转换到spark并行查询处理框架之上,从而有效提高对关系数据库上部分频繁执行的复杂查询的处理效率。一种基于数据模式转换和并行框架的关系数据查询优化方法,包括以下步骤:步骤1:对关系模型数据上复杂查询语句进行结构分析;首先对执行性能较低的关系数据库上的结构化查询语句,即sql查询语句,转化为sql语法解析树结构,以进行下一步分析,找出关系数据库上的sql查询语句中能够通过转换为新的数据模式存储数据和并行查询方式进行优化以提高查询效率的查询语句结构,以用于在下一个步骤中生成数据的键值模型存储结构;要找出的能进行优化的查询语句结构包括基于关系表关键字作为连接属性的多表连接查询结构、能聚合文本属性值的嵌套查询结构、能并行执行的嵌套查询结构和查询谓词中包含的编码属性匹配查询;步骤2:构建新的数据存储结构;基于对数据模式上的sql查询语句的分析,结合查询所涉及关系表的关系模式结构,进一步构建新的数据模式存储结构,以实现通过新的数据模式的数据存储提高查询执行效率,新的数据模式为关系模型或键值模型;步骤3:基于步骤2中所生成的新的数据模式存储结构,实现在数据存储上的转换处理,将关系模型数据库中存储的数据转存到新的数据模式存储系统中;步骤4:进行查询语句的转换,由于sparksql能够直接支持sql查询语句,因此查询语句的转换仅针对数据模式的变化做出相应修改;步骤5:基于sparksql查询生成spark任务并执行该任务,sparksql查询任务的生成基于查询语句转换的结果进行,基于步骤4的转换结果进行判断,如果没有生成不相关子查询的独立任务,则整体执行转换后的查询语句,直接将转换后的查询语句作为查询任务提交给sparksql引擎执行查询操作,执行后结果数据以schemardd形式返回,如果生成了不相关子查询的独立任务,则基于sparksql查询的构建并执行查询处理任务。进一步地,所述步骤1中找出基于关系表关键字作为连接属性的多表连接查询结构的方法为:对关系模式数据上的sql查询语句构建关系代数形式的查询树,在关系代数查询树上通过关系运算操作符的等价变换,找出多个关系表的连接查询结构,其中关系表表示为t1={k1,a1},t2={k2,a2},...,tn={kn,an},ti表示一个关系表,ki表示关系表ti的连接属性集合且为表ti的主键,ai表示关系表ti的非连接属性集合,i=1,2,...,n,即qs=t1∞t2∞...∞tn,记录这个基于关系表关键字作为连接属性的多表连接查询结构qs;所述步骤1中找出可聚合文本属性值的嵌套查询结构的方法为:查找sql查询语句中在关系表文本属性上的文本模糊匹配查询,判断这个文本模糊匹配查询是否在一个exists操作符的嵌套相关子查询结构中,如果该子查询结构中符合查询结构“select*fromtwheret.ak=u.aandct”,其中t表示子查询关系表,u表示父查询关系表,ak表示相关子查询连接属性,ct表示在文本属性at上的文本模糊匹配查询谓词,则标记该子查询为可聚合文本属性值的查询结构;所述步骤1中找出能并行执行的嵌套查询结构中,在查询语句中发现并标记不相关子查询,先执行不相关子查询,同时将父查询的中间结果数据进行分片,然后将子查询结果发送到各个中间结果数据;所述步骤1中找出查询谓词中包含的编码属性匹配查询的方法为:在sql查询语句中,如果一个查询谓词的查询属性a为基于一个代码表rc的属性,即该属性上a的属性值w依赖于代码表rc中的有限个编码值,属性值w为单个编码值或由多个编码值和分隔符拼接而成的文本,同时查询条件为基于一个或多个编码值的“逻辑或”匹配方式,即假设属性值为“a1,a2,...,an”,查询谓词中待匹配值为“b1,b2,...,bm”,如果存在ai=bj,i∈1,2,...,n,j∈1,2,...,m,则记录该查询谓词的查询属性;所述代码表指一个记录数量固定且表示一种编码规则的关系表,关系表中包含编码属性和语义属性。进一步地,所述步骤2构建新的数据存储结构的具体步骤包括:步骤2-1:合并关系表以生成新的数据模式结构;对于在找出基于关系表关键字作为连接属性的多表连接查询结构的过程中标记出的sql查询语句中所包含的关键字作为连接属性的多表连接查询结构,将其中的多个关系表涉及的关系表集合{t1,t2,...,tn}合并为新的数据模式结构,表示为ts(key,v),其中key为关键字,其结构由关系表中的连接属性{k1,k2,...,kn}中所包含的属性构成,v为新关系表中的非主属性集合,对应关系表集合中的非主属性集合{a1,a2,...,an};步骤2-2:使用位向量编码方式优化基于代码表存储的属性;对于在找出查询谓词中包含的编码属性匹配查询过程中找出的查询谓词涉及的编码属性,基于代码表中的编码顺序将属性值基于位向量形式进行重新编码,生成新的编码属性ac;编码方式为,对于一个记录在找出的查询谓词涉及的编码属性上的属性值构建一个与代码表中记录数量相同长度的二进制位向量,如果在原属性值中包含对应二进制位上的编码值,则该位上标记为1,否则标记为0;转换后数据模式中位向量编码的属性值以二进制位向量或整型存储;步骤2-3:生成具有聚合文本属性值的模式结构;对于在找出能聚合文本属性值的嵌套查询结构过程中找出的聚合文本属性值的嵌套查询结构,生成相关属性的符合结构属性,通过聚合同一个查找键值下多个记录的多个文本属性值,实现在查询执行过程中一次访问全部文本属性值内容并进行模糊匹配,从而提高查询效率;新的具有聚合文本属性值的模式结构的构建方式为,对于相关子查询“select*fromtwheret.ak=u.aandct”中的关系表t,文本属性at为文本匹配查询谓词ct所包含的查询属性,创建新的关系表t′,t′中使用属性ak作为主关键字,对于关系表t中属性ak上具有相同取值的多个记录,使用指定分隔符将多个记录中文本属性at的属性值进行拼接,生成新关系表t′中新文本属性at′的对应属性值。进一步地,所述步骤2中构建的新的数据模式为关系模型时,步骤3中数据存储上的转换处理方式为:(1)执行合并关系表数据模式的数据转换,基于合并后的关系表创建新表t′,新表数据从合并前的关系表导入;(2)对于关系模式中进行位向量编码转换的属性,对于一个记录中属性值的编码转换方式是为该属性值构建一个与代码表中记录数量相同长度的二进制位向量bv,如果在原属性值中包含对应二进制位上的编码值,则该位上标记为1否则标记为0,再将该位向量按照64位长度整数进行分割和补位生成有一个或多个整数表示的位向量值,如果用多个整数表示,则转换后可生成多个位向量属性;(3)对于具有聚合文本属性值的数据模式的数据存储转换,在新的关系表t′中增加属性at′,子查询中关系表的文本属性为at,属性at′的属性值由其对应的主键在子查询关系表中对应记录分组在属性at上的值集合使用分隔符进行拼接生成;(4)其它不涉及模式转换的关系表保持原结构不变;所述步骤2中构建的新的数据模式为键值模型时,步骤3中数据存储上的转换处理方式为:(1)对于合并关系表所生成的新的表结构创建列族cf(colunmfamily),如果作为连接属性的主键为单属性主键,则主键ak(ak表示主键属性)作为行键(rowkey),行键取值为主键属性值;如果连接属性的主键为属性组,则属性组组合作为行键,行键取值为主键属性结合连接符的拼接文本,同时主键中包含的每个属性转换为一个列;原始关系表中的每个普通属性转换为列族cf中的一个列,数据由原关系表导入;(2)对于位向量编码方式属性的数据转换,如果底层存储引擎支持整型数据类型的定义,则采用与关系模型存储转换中相同的方法对属性值进行编码转换,如果底层存储引擎只支持文本属性存储,则不进行属性编码的转换;(3)对于具有聚合文本属性值的数据模式的数据存储转换,在列族cf(colunmfamily)中增加一个文本数据列rt(即colunm),rt列上的值同样由具有多个相关子查询连接属性ak的属性值记录的文本属性at的属性值拼接生成;(4)对于其它关系表都将转换为列族,将关系表的主关键字(即主键)转换为行键,关系表的其它属性和属性值转换为对应的列和列值。进一步地,所述步骤4查询语句转换的具体方法如下:步骤4-1:如果查询语句中涉及到对位向量方式重新编码后的属性的查询,则转换对位向量编码属性上的查询,以生成基于位向量属性值的查询谓词,假设查询谓词中对于属性值查询条件的待匹配值集合为{b1,b2,...,bm},则将该待匹配值集合按照代码表生成相应的位向量qc;将原查询语句中原文本属性上的“like”查询或“in”查询语句替换为新编码属性ac上基于“逻辑与”的位运算,即ac&qc,如果有匹配的值,则位运算结果为正数,否则位运算结果为0,即判断为假;步骤4-2:使用具有聚合文本属性列的查询谓词替换嵌套相关子查询的关系表;步骤4-3:替换多表连接查询;对于原sql查询中的基于关系表关键字作为连接属性的多表连接子查询,qs=t1∞t2∞...∞tn,使用在新的数据模式结构ts或列簇cf上的查询代替;步骤4-4:抽取不相关子查询语句作为独立任务;对于查询语句分析中发现的不相关子查询的嵌套查询,如果该不相关子查询的父查询是不包含连接操作的最上层查询,则将该不相关子查询分离出来作为一个独立的sparksql的sql查询任务。进一步地,所述步骤5中基于sparksql查询的构建并执行查询处理任务,具体方法为:将查询语句分为主查询和子查询,每个查询都生成相应的sparksql引擎上的sql查询任务,主查询执行后生成相应的schemardd结果集,子查询执行后生成相应的filterrdd结果集;基于子查询在主查询中查询谓词的相应属性,利用spark引擎中的过滤活动在主查询的schemardd结果集中使用子查询的filterrdd结果集作为过滤条件得到最后的查询处理结果;如果原始查询中包含排序操作,则还需要调用spark引擎的排序活动对最终的查询结果进行排序,生成最终排序的查询结果集合。由上述技术方案可知,本发明的有益效果在于:本发明提供的一种基于数据模式转换和并行框架的关系数据查询优化方法,能够将关系数据库中的数据针对查询的特征准确地转换到spark并行查询处理框架之上,从而有效提高对关系数据库上部分频繁执行的复杂查询的处理效率。本发明能够提高特定复杂查询下数据的存储效率和查询处理的执行效率,减少查询执行时间;本发明具有较高的通用性,对于转换后的数据模式既可以依然使用关系模型进行存储,也可以使用面向海量数据访问而提出的键值模型进行存储;本发明很好的利用了高效的spark并行处理框架,将关系数据上的结构化查询以最佳的并行方式和内存处理方式执行,从而提高查询性能;本发明能够应用于改善针对更新不频繁的的海量关系数据上的复杂查询处理性能,提高查询的执行效率。附图说明图1为本发明实施例提供的基于数据模型转换和并行框架的关系数据查询优化方法的处理框架示意图;图2为本发明实施例提供的sql查询语法解析树结构示意图。具体实施方式下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。本实施例的软硬件环境为:服务器集群,其中单个服务器主机硬件为2ghz处理器,内存4g,软件为linux操作系统redhatlinux,安装hdfs、hbase和apachespark框架。本实施例中提供如下文章评审关系数据库模式:专家表:e(专家号,专家姓名,证件号码,职称,所属单位),其中“专家号”为主键,“职称”属性为指向tcode的外键,如表1所示;表1专家表e数据表专家号专家姓名证件号码职称所属单位1王一110001教授高校12李二120001副教授高校23张三110031教授高校34李四320001研究员高校25赵一300401副教授高校16孙二120021高级工程师高校47张一113034副研究员高校58王二330041高级工程师高校69赵三130451中级及以下高校310李二656001副教授高校611张四110867教授高校712孙一120441无高校6专家所属行业领域:ed(专家号,行业领域),其中“专家号”为主键,如表2所示;表2专家行业领域表ed数据表专家学术头衔:eh(专家号,学术头衔),其中“专家号”为外键,如表3所示;表3专家学术头衔表eh数据表专家号学术头衔1工程院院士1973首席专家3863领域专家4科学院院士5万人计划7千人计划10万人计划10863领域专家11长江学者11973首席专家待评审文章信息:p(文章编号,标题,文章作者,作者单位),其中“文章编号”为外键;专家职称代码表:tcode(职称名称)职称名称为主键。要为待评审文章选择一组专家进行评审,有如下查询要求:1.专家“职称”属性的值可以为以下取值其中之一:“教授”、“副教授”、“研究员”和“副研究员”;2.专家的“学术头衔”包含文本其中之一:“院士”和“首席专家”;3.专家所属行业领域的“行业领域”属性的值为“数据库”;4.要求文章作者所在单位的专家不能参与评审文章,即专家的“所属单位”属性值不能与任何一篇待评审文章中作者单位相同;5.查询符合以上条件的专家的相关信息。针对以上查询要求,生成在关系数据库上的结构化查询为:selecte.专家号,e.专家姓名,e.证件号码,e.所属单位frome,edwheree.专家号=ed.专家号anded.行业领域=“数据库”ande.职称in(″教授″,″副教授″,″研究员″,″副研究员″)andexists(select1fromehwheree.专家号=eh.专家号and(eh.学术头衔like″%院士%″oreh.学术头衔like″%首席专家%″)ande.所属单位notin(selectdistinctp.作者单位fromp)下面基于数据模式转换和并行框架的关系数据查询优化方法将查询转换为分布式处理结构,如图1所示,为本实施例方法的处理框架示意图,具体方法步骤如下。步骤1:对关系模型数据上复杂查询语句进行结构分析,针对查询构建基于sql语句的查询解析树,并从中发现可以用于优化的查询结构。具体方法为:步骤1-1:对该复杂查询语句转换成关系代数所表达的解析树结构,以进行下一步分析,转换后的sql语法解析树如图2所示,其中查询语句采用语法解析树结构进行表示,
表示查询或子查询结构,表示sql的select-from-where查询结构,表示sql的select子句,表示sql的from子句,表示sql的where子句,表示关系的属性名,表示关系的属性列表,表示关系名,表示关系列表,表示查询条件结构,表示查询要匹配的模式内容;步骤1-2:在查询语句中找出基于关系表关键字作为连接属性的多表连接查询结构;在本实施例中,图2中所标识出的q1部分的查询结构可以转换为关系表e和关系表ed基于“专家号”属性的连接操作,而“专家号”属性在两个关系表中都是关键字,即查询中包含qs=e∞ed查询结构符合基于关系表关键字作为连接属性的多表连接查询结构;步骤1-3:在查询语句中找出可聚合文本属性值的嵌套查询结构;在本实施例中,如图2中所标识出的q3部分所示,其中包含一个exists操作符的嵌套相关子查询结构,即查询条件中的“exists(select1fromehwheree.专家号=eh.专家号and(eh.学术头衔like″%院士%″oreh.学术头衔like″%首席专家%″)”部分,其中子查询关系表为eh,父查询关系表为e,连接属性为“e.专家号”和“eh.专家号”,进行文本匹配的属性为“eh.学术头衔”,对应的匹配谓词为“eh.学术头衔like″%院士%″oreh.学术头衔like″%首席专家%″”,因此该结构为可聚合文本属性值的查询结构;步骤1-4:在查询语句中找出能并行执行的嵌套查询结构;在关系数据库的查询语句中,嵌套查询中不相关子查询的执行过程是由内向外的,即先执行子查询的执行,在利用子查询的执行结果作为父查询中查询谓词的执行条件,比如sql中in,notin语句构成的不相关子查询结构;因此可以先执行不相关子查询,同时将父查询的中间结果数据进行分片,然后将子查询结果发送到各个中间结果数据;在本步骤中,在查询语句中发现并标记不相关子查询;在本实施例中,如图2中所标识出的q4部分所示,其为“notin”语句构成的查询条件,对应的子查询为“selectdistinctp.作者单位fromp”,该查询为不相关子查询,因此可以先执行这个不相关子查询,将结果存储后发送到分布式的多个节点上执行并行查询处理;标记该查询结构;步骤1-5:在查询语句中找出查询谓词中包含的编码属性匹配查询;在本实施例中,如图2中所标识出的q2部分所示,查询条件“e.职称in(″教授″,″副教授″,″研究员″,″副研究员″)”中查询属性为“e.职称”,代码表为专家职称代码表tcode,其“e.职称”的属性值为tcode表中“职称名称”的单一取值,该查询条件中匹配方式等价于“逻辑或”的匹配方式,要匹配的多个编码值为{″教授″,″副教授″,″研究员″,″副研究员″},将该查询结构标记为编码属性匹配查询。本步骤主要目的是找出编码属性上的查询,以便基于转换编码的方式对查询处理进行优化。以上找出可进行优化的查询语句结构的步骤顺序可以随意调整,在这些步骤中发现的各类查询结构将在保证查询语义不变的前提下用于后续优化步骤之中。步骤2:基于以上对sql查询语句的分析,将现有数据模式转换为新的适合于分布式查询的数据存储结构。具体方法为:步骤2-1:合并关系表以生成新的数据模式结构;对于在步骤1-2中标记出的sql查询语句中使用两个表的关键字作为连接属性的多表连接查询结构q1部分,将其中的关系表集合{e,ed}合并为新模式结构,表示为新专家表e′(“专家号”,{“专家姓名”,“证件号码”,“职称”,“所属单位”,“行业领域”}),其中“专家号”为关键字,对应关系表集合中的非主属性集合为{“专家姓名”,“证件号码”,“职称”,“所属单位”,“行业领域”},如表4所示;在本实施例中,采用hbase存储新专家表e′数据,因此使用列族数据(columnfamily)模型存储;表4转换后新专家表e′数据表步骤2-2:使用位向量编码方式优化基于代码表存储的属性;在本实施例中,“e.职称”为基于代码表的属性,对其属性值基于代码表tcode进行位向量编码,其中代码表中“职称名称”的各属性值对应的位向量编码如表5所示,生成新属性“e.职称b”用32位整型值存储,如表4中的职称b所示;表5职称代码表tcode数据表步骤2-3:为专家表生成具有聚合文本属性值的模式结构;对于步骤1-3中找出的聚合文本属性值的嵌套查询结构q3部分,在本步骤中生成相关属性的符合结构属性,聚合专家学术头衔表eh中同一个“专家号”属性值下多个记录的“学术头衔”属性值,在新专家表e’中增加“学术头衔”属性,其属性值为每个“专家号”在对应的专家学术头衔表eh中,相同“专家号”对应的多个“学术头衔”属性值使用逗号分隔符拼接的文本字符串。步骤3:将关系数据库中存储的各关系表数据转存hbase存储系统或关系数据库中的对应的表中;在本实施例中用hbase存储系统时,该存储系统采用的是基于键值模型的列族模型数据存储,根据采用键值模型时的数据转换方法:(1)首先基于合并关系表后生成的新专家表e′,创建存储新专家表e′的列族experts,其中行键设置为“专家号”,列包括{“专家姓名”,“证件号码”,“职称”,“所属单位”,“行业领域”},对于行键值和行键值对应各列的值从关系数据库的专家表e和专家所属行业领域表ed中的数据导入;(2)对于可以进行位向量编码方式的属性“职称”,因为hbase只支持文本属性值存储,因此不进行属性编码的转换,使用原专家表e的“职称”属性的属性值作为列族experts中“职称”列的值;(3)专家学术头衔表eh中的“学术头衔”属性可以作为新专家表e’的复合结构属性,因此在列族experts中创建“学术头衔”列,列值为多个属性值文本拼接后的取值,如表4中新专家表e’中“专家号”属性值为“1”的记录对应的“学术头衔”属性值为“工程院院士、973首席专家”;(4)创建查询涉及其它关系表的列族,对于待评审文章信息表p创建列族papers,其中行键为“文章编号”,列集合为{“标题”,“文章作者”,“作者单位”};存储转换后,表4中新专家表e′的第一条记录转换到专家信息列族experts中存储的结构如表6所示。表6专家信息列族experts数据表在本实施例中用关系数据库存储时,与hbase存储数据的区别在于能使用位向量编码方式存储“职称”属性值。表4中新专家表e′的第一条记录的“职称”属性转换为位向量编码方式后使用整型值“128”作为属性值。步骤4:进行查询语句的转换。在对数据模式进行了重新构建并进行了数据存储转换之后,就可以支持查询处理了,但在将查询提交给spark框架进行处理之前,还需要针对模式上的改变进行查询语句转换,由于sparksql能够直接支持sql查询语句,因此查询语句的转换可以仅针对数据模式的变化做出相应修改。本实施例中,针对在hbase上的数据存储模式,将在关系数据库上的sql查询转换为在spark框架上sparksql组件所支持的查询结构,查询语句转换的步骤如下:步骤4-1:转换对位向量编码属性上的查询;在本实施例中,在hbase存储系统中未对属性值进行编码转换,因此该步骤省略;步骤4-2:替换嵌套相关子查询的关系表;本实施例中,使用具有聚合文本属性列“学术头衔”的查询谓词“学术头衔like″%院士%″or学术头衔like″%首席专家%″”替换原相关子查询“exists(select1fromehwheree.专家号=eh.专家号and(eh.学术头衔like″%院士%″oreh.学术头衔like″%首席专家%″)ande.所属单位notin(selectdistinctp.作者单位fromp)”.步骤4-3:替换多表连接查询;对于原sql查询语句中的专家表和专家所属领域表的连接查询,使用在列族experts上的查询谓词“行业领域=″数据库″”代替;步骤4-4:抽取不相关子查询语句作为独立任务;在原sql查询语句中,不相关子查询及相关谓词为:“e.所属单位notin(selectdistinctp.作者单位fromp)”,因此将不相关子查询“selectdistinctp.作者单位fromp”分离出来,转换为一个在对应hbase列族上独立执行的sparksql语句“selectdistinct作者单位frompapers”;在步骤4之后,本实施例将生成两个sparksql查询语句,分别是:子查询sparksql语句:selectdistinct作者单位frompapers;主查询sparksql语句:select专家号,专家姓名,证件号码,所属单位fromexpertswhere行业领域=“数据库”ande.职称in(″教授″,″副教授″,″研究员″,″副研究员″)and学术头衔like″%院士%″oreh.学术头衔like″%首席专家%″。步骤5:基于sparksql查询生成spark任务并执行该任务。本步骤的任务是生成spark引擎上的查询任务,并提交查询以获得最终查询结果;这里采用spark引擎的主要原因包括其采用了基于rdd的内存数据处理模式,避免内存与硬盘之间频繁的i/o操作;支持sql92标准的sql查询语句,能够实现与关系数据上原有查询的无缝集成;对底层数据存储的良好兼容,支持hbase等多种数据存储引擎;具有较强的并行处理能力和可扩展性。sparksql查询任务的生成主要基于查询语句转换的结果进行,基于步骤4-4的转换结果进行判断,如果没有生成不相关子查询的独立任务,则整体执行转换后的查询语句,直接将转换后的查询语句作为查询任务提交给sparksql引擎执行查询操作,执行后结果数据以schemardd形式返回,如果生成了不相关子查询的独立任务,则基于sparksql查询的构建并执行查询处理任务。在本实施例中,基于步骤4-4的转换结果,其中生成了不相关子查询的独立sparksql查询任务,因此基于sparksql查询的构建并执行查询处理任务。构建基于rdd操作的spark处理任务;首先执行子查询,并将结果缓存在rdd中,假设rdd命名为“avoidaff”,再执行主查询语句得到候选专家集合,同样缓存在rdd中,假设该rdd命名为“cexperts”;由于在原sql语句中主查询和子查询是通过“notin”谓词构建的查询关系,因此这里使用spark的filter操作将“cexperts”rdd中专家的“所属单位”在“avoidaff”rdd中的记录过滤,并将结果作为最终结果输出;待评审文章信息表p中数据如表7所示,在执行以上查询任务后,最终将输出符合条件的评审专家为(11,张四,110867,高校7)。表7待评审文章信息表p数据表文章编号标题文章作者作者单位1文章1作者1高校11文章2作者2高校2本实施例提供的一种基于数据模式转换和并行框架的关系数据查询优化方法能够有效提高对关系数据库上部分频繁执行的复杂查询的处理效率。最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明权利要求所限定的范围。当前第1页12