一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于国产CPU和OS的加快SQL查询的方法及加快系统与流程

2022-03-23 06:06:24 来源:中国专利 TAG:
基于国产cpu和os的加快sql查询的方法及加快系统
技术领域
:1.本发明涉及数据库查询
技术领域
:,具体地说是基于国产cpu和os的加快sql查询的方法及加快系统。
背景技术
::[0002][0003]随着国产基础软硬件的蓬勃发展,国产基础软硬件的推广和使用带来了前所未有的机遇。数据库作为生态环境中重要的一环,基于国产操作系统和cpu的环境下涌现出了多种国产数据库。在国产化环境下,通过更新换代实现信息化系统的功能升级已成为当前企业和政府部门信息化建设的重要方向,由于软硬件系统的不断升级和数据库管理系统的性能不断提高,基于数据库管理系统的应用系统也不断升级。[0004]数据库查询的一般方法为用sql语言对数据库的单表或者多表查询,对于单表来说只需要简单的select语句即可,但对多表查询而言,则需要用到合并查询、连接查询、子查询等一系列复杂的查询,还要配合索引主键外键等对不同的情况进行针对性的优化,同时对于编程人员也有着较高的要求,就算是对于专业的dba而言也是一种不小的挑战,国产数据库受限制于服务器硬件和本身软件性能,在这方面尤其突出。现在的国产数据库已可满足大部分业务场景,但对于复杂业务的查询性能与稳定性还有所欠缺。[0005]在实际开发中,大部分的情况下都不是从单表中查询数据,一般都是多张表联合查询取出最终的结果。一个业务都会对应多张表,比如:学生和班级,起码两张表。[0006]在表的连接查询方面有一种现象被称为:笛卡尔积现象。即:当两张表进行连接查询的时候,没有任何条件进行限制,最终的查询结果条数是两张表记录条数的乘积。这就是笛卡尔积现象。但是如果对于数据量较大的多表的关联查询进行统计操作,就更会耗费数据库的资源,对于国产数据库而言,很容易造成数据库的崩溃,且sql在实现多表的数据筛选和分组聚合(如求和,求差,拼接等)时链接逻辑复杂,可读性差,不易维护。[0007]如何加快sql查询效率,并代替数据库的多表连接查询与分组聚合查询,是需要解决的技术问题。技术实现要素:[0008]本发明的技术任务是针对以上不足,提供基于国产cpu和os的加快sql查询的方法及加快系统,来解决如何加快sql查询效率,并代替数据库的多表连接查询与分组聚合查询的技术问题。[0009]第一方面,本发明的基于国产cpu和os的加快sql查询的方法,用于实现多表查询以及分组聚合查询,包括如下步骤:[0010]基于表之间的数据的关联性,将相关联的多个表连接为一个结果集;[0011]以分组字段作为分类依据,对结果集中的数据进行分组,得到分组结果集,所述分组结果集为由分组字段相同的数据组成的集合;[0012]对于每个分组结果集,对组内数据进行聚合运算,得到分组聚合结果,并汇总所有分组结果集对应的分组聚合结果,得到最终查询结果。[0013]作为优选,基于多表连接模型,基于表之间的数据的关联性,将相关联的多个表连接为一个结果集,所述多表连接模型为:[0014]选取a1为当前主表,从a2、……、an中选取与所述当前主表相关联的一个表作为当前主表关联表;[0015]对于当前主表中每个数据,遍历当前主表关联表,从当前主表关联表中匹配到所有关联的数据,基于当前主表得到第一结果集;[0016]以第一结果集为当前主表,从剩余表中选取与所述当前主表相关联的一个表作为当前主表关联表,所述剩余表为上述n个表中未曾作为主表和主表关联表的表;[0017]对于当前主表中每个数据,遍历当前主表关联表,从当前主表关联表中匹配所有关联的数据,基于当前主表得到第二结果集;[0018]依次进行如下计算,直至将所述n个表连接为一个结果集:以第i结果集为当前主表,从剩余表中选取与所述当前主表相关联的一个表作为当前主表关联表,所述剩余表为上述n个表中未曾作为主表和主表关联表的表;[0019]对于当前主表中每个数据,遍历当前主表关联表,从当前主表关联表中匹配所有关联的数据,基于当前主表得到第i 1结果集。[0020]作为优选,以分组字段作为分类依据,对结果集中的数据进行分组时,基于键值key-value的数据结构,将结果集中所有数据根据分组字段进行分组,以分组字段为key,将相同key值的数据放入同一value中。[0021]作为优选,对于每个分组结果集,对组内数据进行聚合运算时,将每组value中的数据进行聚合计算,所述聚合计算包括求和以及计数。[0022]第二方面,本发明的基于国产cpu和os的sql查询的加快系统,用于执行如第一方面任一项所述的基于国产cpu和os的sql查询的加快方法,所述系统包括:[0023]多表连接模块,所述多表连接模块用于基于表之间的数据的关联性,将相关联的多个表连接为一个结果集;[0024]分组模块,所述分组模块用于以分组字段作为分类依据,对结果集中的数据进行分组,得到分组结果集,所述分组结果集为由分组字段相同的数据组成的集合;[0025]聚合模块,所述聚合模块用于对于每个分组结果集,对组内数据进行聚合运算,得到分组聚合结果,并汇总所有分组结果集对应的分组聚合结果,得到最终查询结果。[0026]作为优选,所述多表连接模块中配置有多表连接模型,用于基于多表连接模型基于表之间的数据的关联性,将相关联的多个表连接为一个结果集;所述多表连接模型为:[0027]选取a1为当前主表,从a2、……、an中选取与所述当前主表相关联的一个表作为当前主表关联表;[0028]对于当前主表中每个数据,遍历当前主表关联表,从当前主表关联表中匹配到所有关联的数据,基于当前主表得到第一结果集;[0029]以第一结果集为当前主表,从剩余表中选取与所述当前主表相关联的一个表作为当前主表关联表,所述剩余表为上述n个表中未曾作为主表和主表关联表的表;[0030]对于当前主表中每个数据,遍历当前主表关联表,从当前主表关联表中匹配所有关联的数据,基于当前主表得到第二结果集;[0031]依次进行如下计算,直至将所述n个表连接为一个结果集:以第i结果集为当前主表,从剩余表中选取与所述当前主表相关联的一个表作为当前主表关联表,所述剩余表为上述n个表中未曾作为主表和主表关联表的表;[0032]对于当前主表中每个数据,遍历当前主表关联表,从当前主表关联表中匹配所有关联的数据,基于当前主表得到第i 1结果集。[0033]作为优选,所述分组模块用于基于键值key-value的数据结构,将结果集中所有数据根据分组字段进行分组,以分组字段为key,将相同key值的数据放入同一value中。[0034]作为优选,所述聚合模块用于将每组value中的数据进行聚合计算,所述聚合计算包括求和以及计数。[0035]第三方面,本发明的装置,其特征在于,包括:至少一个存储器和至少一个处理器;[0036]所述至少一个存储器,用于存储机器可读程序;[0037]所述至少一个处理器,用于调用所述机器可读程序,执行第一方面任一所述的方法。[0038]第四方面,本发明的计算机可读介质,所述计算机可读介质上存储有计算机指令,所述计算机指令在被处理器执行时,使所述处理器执行第一方面任一所述的方法。[0039]本发明的基于国产cpu和os的加快sql查询的方法及加快系统具有以下优点:[0040]1、将多个表连接为一个结果集,并通过分组字段的形式对结果集中数据进行分组,得到分组结果集,再对分组结果集中数据进行聚合运算,降低了软件对国产数据库的性能要求,在同等数据库性能下提高数据的计算查询速率,能够正确数据处理的前提下支持系统的性能优化,大大提高了信创环境下的程序的稳定性;[0041]2、基于多表连接模型将多个表连接为一个结果集,通过该模型实现了多表连接的统一计算方式,便于广泛应用;[0042]3、在对表进行关联时运用的是表数据循环处理关联,而非数据库中的笛卡尔集现象,避免了笛卡尔集现象造成的影响。附图说明[0043]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0044]下面结合附图对本发明进一步说明。[0045]图1为实施例1基于国产cpu和os的加快sql查询的方法的流程框图;[0046]图2为实施例1基于国产cpu和os的加快sql查询的方法中多表连接的原理框图;[0047]图3为实施例1基于国产cpu和os的加快sql查询的方法中分子查询的原理框图。具体实施方式[0048]下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。[0049]本发明实施例提供基于国产cpu和os的加快sql查询的方法及加快系统,用于解决如何加快sql查询效率,并代替数据库的多表连接查询与分组聚合查询的技术问题。[0050]实施例1:[0051]本发明基于国产cpu和os的加快sql查询的方法,用于实现多表查询以及分组聚合查询,包括如下步骤:[0052]s100、基于表之间的数据的关联性,将相关联的多个表连接为一个结果集;[0053]s200、以分组字段作为分类依据,对结果集中的数据进行分组,得到分组结果集,分组结果集为由分组字段相同的数据组成的集合;[0054]s300、对于每个分组结果集,对组内数据进行聚合运算,得到分组聚合结果,并汇总所有分组结果集对应的分组聚合结果,得到最终查询结果。[0055]本实施例步骤s100基于多表连接模型,基于表之间的数据的关联性,将相关联的多个表连接为一个结果集,该多表连接模型为:[0056]选取a1为当前主表,从a2、……、an中选取与所述当前主表相关联的一个表作为当前主表关联表;[0057]对于当前主表中每个数据,遍历当前主表关联表,从当前主表关联表中匹配到所有关联的数据,基于当前主表得到第一结果集;[0058]以第一结果集为当前主表,从剩余表中选取与所述当前主表相关联的一个表作为当前主表关联表,所述剩余表为上述n个表中未曾作为主表和主表关联表的表;[0059]对于当前主表中每个数据,遍历当前主表关联表,从当前主表关联表中匹配所有关联的数据,基于当前主表得到第二结果集;[0060]依次进行如下计算,直至将所述n个表连接为一个结果集:以第i结果集为当前主表,从剩余表中选取与所述当前主表相关联的一个表作为当前主表关联表,所述剩余表为上述n个表中未曾作为主表和主表关联表的表;[0061]对于当前主表中每个数据,遍历当前主表关联表,从当前主表关联表中匹配所有关联的数据,基于当前主表得到第i 1结果集。[0062]如图2所示,在多表查询时,假设有表a,表b,表c三个表,他们的关系为a表与表b有直接关联,表b与表c有直接关联,a与c没有关联,那么这3个表的关联查询顺序为:先将表a与表b进行关联得到表a和b的合在一起的结果集ab,然后再将结果集ab与表c进行关联得到结果集abc;[0063]多表连接实现基本思路:对于所有的表a的每一条数据,依次从表b中匹配到有关联的数据,以a为主表得到结果集ab,以此思路类推,以ab为主表,可得结果集abc;[0064]基于以上基本思路,可得以下程序模型1,以ab为例:[0065]foreachrecordr1insourcetablea//对源表a中的每一条记录r1[0066]{[0067]foreachrecordr2insourcetableb//对源表b中的每一条记录r2[0068]{[0069]ifr1linkr2[0070]//如果r1和r2有关联[0071]{[0072]r1linkr2;//将r1和r2进行关联映射[0073]break;//处理下一条r1[0074]}[0075]}[0076]}[0077]表在分组时,需要根据分组字段groupfiled来将同组数据放在一起,分组字段groupfiled即分类的依据,每个表都不相同,每组的数据都是groupfiled值相等的数据的集合,然后再对每一分组的集合数据进行处理(求和,计数等聚合运算)。如图3所示,图中有一张表t,存储了不同日期对应的不同品类的销量,现在我们要统计2019年1月1到1月3期间每个品类的总销量,cat字段即为分组字段。所有的数据先根据cat字段进行分组,然后针对分组后的数据在组内进行聚合运算,最后再将聚合后的每组数据进行汇总就得到了我们想要的结果。[0078]本实施例中分组聚合实现基本思路为:[0079](1)依据程序中键值(key-value)数据结构的特殊性,将表中得所有数据根据分组字段先进行分组,以分组字段为key,将相同key值得数据放入同一value中。[0080](2)将每组value中的数据,进行聚合操作,如求和,计数等。[0081]基于以上基本思路,可得以下程序模型2,分为a、b两步:a.将表的每一条记录进行分组[0082]foreachrecordrinsourcetables//对源表s中的每一条记录r[0083]{[0084]ifmapmcontain“keyk”//k为分组唯一字段,如果m包含k[0085]{[0086]raddv;//将记录r放入根据k得到得v中(v=m(k))[0087]}[0088]else[0089]{[0090]newm(k);//创建新的m(k)[0091]raddv;//将记录r放入新的v(v=m(k))[0092]}[0093]nextr;//处理下条记录[0094]}[0095]}[0096]b.将分组记录进行聚合[0097]foreachvaluevinmapm//对mapm中的每一个值v[0098]{[0099]foreachrecordrinvaluev//对值v中的每一条记录r[0100]{[0101]sum;count;……;//对r进行业务处理,求和,计数等等[0102]nextr;//处理下条记录[0103]}[0104]nextm;//处理下一个map[0105]}[0106]对于本实施例的方法,对多个关联表的分组求和举例:[0107](1)通过jdbcapi接口与源数据库建立连接,用简单sql即可得到含有元数据信息的结果集a、b、c……;[0108](2)将多个单结果集关联成单个大结果集。根据程序模型1中的基本思路,将表a与表b先进行连接得到结果集ab,然后再将结果集ab根据程序模型1与结果集c进行关联得到结果集abc,对后续更多的表以此类推,以前一关联好的结果集与后表依次建立关联,即可得到关联好的结果集abc……,这样就将有关联得所有表关联成了一个大的结果集;[0109](3)将大结果集根据分组字段groupfield进行分组。对大结果集得每条记录进行循环遍历,将groupfield字段值相同得数据放入同一结果集,用groupfield字段值作为该结果集得标记,这样我们就得到了不同分组得结果集;[0110](4)将每个分组结果集进行单独求和。对每个分组结果集中得数据进行单独遍历,对自己需要的数据进行求和计算,这样就可以得到每个分组结果集的单独和。[0111]本实施例的方法大大降低了软件对国产数据库的性能要求,在同等数据库性能下提高数据的计算查询速率,能够正确数据处理的前提下支持系统的性能优化,大大提高了信创环境下的程序的稳定性;通过程序模型对数据进行处理,大大减少对sql语言的运用,可更好的兼容各种国产数据库,提高程序的对不同数据库的适应性。[0112]实施例2:[0113]本发明基于国产cpu和os的sql查询的加快系统,包括多表连接模块、分组模块以及聚合模块,多表连接模块用于基于表之间的数据的关联性,将相关联的多个表连接为一个结果集;分组模块用于以分组字段作为分类依据,对结果集中的数据进行分组,得到分组结果集,所述分组结果集为由分组字段相同的数据组成的集合;聚合模块用于对于每个分组结果集,对组内数据进行聚合运算,得到分组聚合结果,并汇总所有分组结果集对应的分组聚合结果,得到最终查询结果。[0114]其中,多表连接模块中配置有多表连接模型,用于基于多表连接模型基于表之间的数据的关联性,将相关联的多个表连接为一个结果集;所述多表连接模型为:[0115]选取a1为当前主表,从a2、……、an中选取与所述当前主表相关联的一个表作为当前主表关联表;[0116]对于当前主表中每个数据,遍历当前主表关联表,从当前主表关联表中匹配到所有关联的数据,基于当前主表得到第一结果集;[0117]以第一结果集为当前主表,从剩余表中选取与所述当前主表相关联的一个表作为当前主表关联表,所述剩余表为上述n个表中未曾作为主表和主表关联表的表;[0118]对于当前主表中每个数据,遍历当前主表关联表,从当前主表关联表中匹配所有关联的数据,基于当前主表得到第二结果集;[0119]依次进行如下计算,直至将所述n个表连接为一个结果集:以第i结果集为当前主表,从剩余表中选取与所述当前主表相关联的一个表作为当前主表关联表,所述剩余表为上述n个表中未曾作为主表和主表关联表的表;[0120]对于当前主表中每个数据,遍历当前主表关联表,从当前主表关联表中匹配所有关联的数据,基于当前主表得到第i 1结果集。[0121]分组模块用于基于键值key-value的数据结构,将结果集中所有数据根据分组字段进行分组,以分组字段为key,将相同key值的数据放入同一value中。聚合模块用于将每组value中的数据进行聚合计算,所述聚合计算包括求和以及计数。[0122]本实施例的系统可执行实施例1公开的方法。[0123]实施例3:[0124]本发明的装置,包括:至少一个存储器和至少一个处理器;至少一个存储器,用于存储机器可读程序;至少一个处理器,用于调用所述机器可读程序,执行实施例1公开的方法。[0125]实施例4:[0126]本发明的计算机可读介质,计算机可读介质上存储有计算机指令,计算机指令在被处理器执行时,使所述处理器执行实施例1公开的方法。具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机(或cpu或mpu)读出并执行存储在存储介质中的程序代码。[0127]在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本发明的一部分。[0128]用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如cd-rom、cd-r、cd-rw、dvd-rom、dvd-ram、dvd-rw、dvd rw)、磁带、非易失性存储卡和rom。可选择地,可以由通信网络从服务器计算机上下载程序代码。[0129]此外,应该清楚的是,不仅可以通过执行计算机所读出的程序代码,而且可以通过基于程序代码的指令使计算机上操作的操作系统等来完成部分或者全部的实际操作,从而实现上述实施例中任意一项实施例的功能。[0130]此外,可以理解的是,将由存储介质读出的程序代码写到插入计算机内的扩展板中所设置的存储器中或者写到与计算机相连接的扩展单元中设置的存储器中,随后基于程序代码的指令使安装在扩展板或者扩展单元上的cpu等来执行部分和全部实际操作,从而实现上述实施例中任一实施例的功能。[0131]需要说明的是,上述各流程和各系统结构图中不是所有的步骤和模块都是必须的,可以根据实际的需要忽略某些步骤或模块。各步骤的执行顺序不是固定的,可以根据需要进行调整。上述各实施例中描述的系统结构可以是物理结构,也可以是逻辑结构,即,有些模块可能由同一物理实体实现,或者,有些模块可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。[0132]以上各实施例中,硬件单元可以通过机械方式或电气方式实现。例如,一个硬件单元可以包括永久性专用的电路或逻辑(如专门的处理器,fpga或asic)来完成相应操作。硬件单元还可以包括可编程逻辑或电路(如通用处理器或其它可编程处理器),可以由软件进行临时的设置以完成相应操作。具体的实现方式(机械方式、或专用的永久性电路、或者临时设置的电路)可以基于成本和时间上的考虑来确定。[0133]上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基与上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的代码审核手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献