一种查询方法、装置、电子设备及存储介质与流程

文档序号:29127905发布日期:2022-03-05 00:38阅读:64来源:国知局
1.本技术实施例涉及计算机
技术领域
:,尤其涉及一种查询方法、装置、电子设备及存储介质。
背景技术
::2.近年来,基于分布式文件系统(hdfs,hadoopdistributedfilesystem)的查询引擎产品层出不穷,每个查询引擎面向不同业务场景提供独具特色的服务,以满足特定行业特定客户特定场景的需求。然而,查询引擎的差异性使得业务开发人员仍面临诸多难题:(1)业务开发进度无法保障。开发人员可能同时面临多种不同的业务,为了满足不同业务需求,需要使用不同查询引擎的接口,导致业务开发缓慢。(2)理解和使用查询引擎难度高。当开发综合性业务时,开发人员需要深刻理解每个查询引擎支持的功能列表以及针对特定结构化查询语言(sql,structuredquerylanguage)语句能取得的性能,这使得产品性能优化困难重重。技术实现要素:3.为解决上述技术问题,本技术实施例提供了一种查询方法、装置、电子设备及存储介质。4.本技术实施例提供了一种查询方法,其特征在于,所述方法包括:5.确定查询请求的类型;6.在所述查询请求为非第一类型的情况下,利用第一模块查询与所述查询请求对应的目标数据;其中,所述第一类型为select类型;7.在所述查询请求为第一类型的情况下,利用第二模块查询与所述查询请求对应的目标数据。8.本技术一可选实施方式中,所述第一模块对应的查询引擎为hive组件,所述利用第一模块查询与所述查询请求对应的目标数据,包括:9.利用hive组件查询与非select类型的所述查询请求对应的目标数据。10.本技术一可选实施方式中,所述利用第二模块查询与所述查询请求对应的目标数据,包括:11.利用第二模块确定是否存在满足所述查询请求的索引数据;在不存在满足所述查询请求的索引数据的情况下,利用第三模块对应的查询引擎查询与所述查询请求对应的目标数据。12.本技术一可选实施方式中,所述利用第三模块对应的查询引擎查询与所述查询请求对应的目标数据,包括:13.利用第三模块确定处理所述查询请求所要处理的原始数据的规模;基于所述原始数据的规模确定处理所述查询请求所需耗费的资源;在确定所述资源满足第一条件的情况下,利用第一引擎执行与所述查询请求对应的查询操作;在所述资源满足第二条件的情况下,利用第二引擎执行与所述查询请求对应的查询操作;其中,所述资源满足第一条件的情况下对应的资源量大于所述资源满足第二条件的情况下对应的资源量。14.本技术一可选实施方式中,所述利用第二模块查询与所述查询请求对应的目标数据,包括:15.利用第二模块确定是否存在满足所述查询请求的索引数据;在存在满足所述查询请求的索引数据的情况下,进一步确定缓存模块中是否存在与所述查询请求对应的缓存结果;16.在确定缓存模块中不存在与所述查询请求对应的缓存结果的情况下,利用第四模块对应的查询引擎查询与所述查询请求对应的目标数据;17.在确定缓存模块中存在与所述查询请求对应的缓存结果的情况下,利用缓存模块调取与所述查询请求对应的目标数据。18.本技术一可选实施方式中,所述利用第四模块对应的查询引擎查询与所述查询请求对应的目标数据,包括:19.利用第四模块确定处理所述查询请求所要处理的索引数据的规模;基于所述索引数据的规模确定处理所述查询请求所需耗费的资源;在确定所述资源满足第一条件的情况下,利用第一引擎执行与所述查询请求对应的查询操作;在所述资源满足第二条件的情况下,利用第二引擎执行与所述查询请求对应的查询操作;其中,所述资源满足第一条件的情况下对应的资源量大于所述资源满足第二条件的情况下对应的资源量。20.本技术一可选实施方式中,所述方法还包括:21.在利用第四模块对应的查询引擎查询到与所述查询请求对应的目标数据的情况下,将所述目标数据存储至所述缓存模块,以利用所述模块记录所述查询请求及所述目标数据。22.本技术实施例还提供了一种查询装置,所述装置包括:23.确定单元,用于确定查询请求的类型;24.第一查询单元,用于在所述查询请求为非第一类型的情况下,利用第一模块查询与所述查询请求对应的目标数据;其中,所述第一类型为select类型;25.第二查询单元,用于在所述查询请求为第一类型的情况下,利用第二模块查询与所述查询请求对应的目标数据。26.本技术一可选实施方式中,所述第一模块对应的查询引擎为hive组件,所述第一查询单元具体用于:利用hive组件查询与非select类型的所述查询请求对应的目标数据。27.本技术一可选实施方式中,所述第二查询单元,具体用于:利用第二模块确定是否存在满足所述查询请求的索引数据;在不存在满足所述查询请求的索引数据的情况下,利用第三模块对应的查询引擎查询与所述查询请求对应的目标数据。28.本技术一可选实施方式中,所述第二查询单元,还具体用于:利用第三模块确定处理所述查询请求所要处理的原始数据的规模;基于所述原始数据的规模确定处理所述查询请求所需耗费的资源;在确定所述资源满足第一条件的情况下,利用第一引擎执行与所述查询请求对应的查询操作;在所述资源满足第二条件的情况下,利用第二引擎执行与所述查询请求对应的查询操作;其中,所述资源满足第一条件的情况下对应的资源量大于所述资源满足第二条件的情况下对应的资源量。29.本技术一可选实施方式中,所述第二查询单元,具体用于:30.利用第二模块确定是否存在满足所述查询请求的索引数据;在存在满足所述查询请求的索引数据的情况下,进一步确定缓存模块中是否存在与所述查询请求对应的缓存结果;31.在确定缓存模块中不存在与所述查询请求对应的缓存结果的情况下,利用第四模块对应的查询引擎查询与所述查询请求对应的目标数据;32.在确定缓存模块中存在与所述查询请求对应的缓存结果的情况下,利用缓存模块调取与所述查询请求对应的目标数据。33.本技术一可选实施方式中,所述第二查询单元,还具体用于:利用第四模块确定处理所述查询请求所要处理的索引数据的规模;基于所述索引数据的规模确定处理所述查询请求所需耗费的资源;在确定所述资源满足第一条件的情况下,利用第一引擎执行与所述查询请求对应的查询操作;在所述资源满足第二条件的情况下,利用第二引擎执行与所述查询请求对应的查询操作;其中,所述资源满足第一条件的情况下对应的资源量大于所述资源满足第二条件的情况下对应的资源量。34.本技术一可选实施方式中,所述查询装置还包括:35.存储单元,用于在利用第四模块对应的查询引擎查询到与所述查询请求对应的目标数据的情况下,将所述目标数据存储至所述缓存模块,以利用所述模块记录所述查询请求及所述目标数据。36.本技术实施例还提供了一种电子设备,所述电子设备包括:存储器和处理器,所述存储器上存储有计算机可执行指令,所述处理器运行所述存储器上的计算机可执行指令时可实现上述实施例所述的方法。37.本技术实施例还提供了一种计算机存储介质,所述存储介质上存储有可执行指令,该可执行指令被处理器执行时实现上述实施例所述的方法。38.本技术实施例的技术方案,通过确定查询请求的类型;在所述查询请求为非第一类型的情况下,利用第一模块查询与所述查询请求对应的目标数据;其中,所述第一类型为select类型;在所述查询请求为第一类型的情况下,利用第二模块查询与所述查询请求对应的目标数据。本技术实施例的技术方案能够为不同类型的查询请求提供统一的查询语句入口,对不同类型的查询请求采用不同的模块进行处理,使得开发人员能够通过一套接口对接多种业务,加快业务开发进度。附图说明39.图1为本技术实施例提供的一种查询方法的流程示意图;40.图2为本技术实施例提供的实现本技术实施例的查询方法所需的模块组成图一;41.图3为本技术实施例提供的实现本技术实施例的查询方法所需的模块组成图二;42.图4为本技术实施例提供的查询方法处理流程示意图;43.图5为本技术实施例提供的一种查询装置的结构组成示意图;44.图6为本技术实施例提供的一种电子设备的结构组成示意图。具体实施方式45.为了能够更加详尽地了解本技术实施例的特点与技术内容,下面结合附图对本技术实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本技术实施例。46.本技术实施例中,查询请求是为了实现对数据的查询而构造的查询语句,查询语句具体为sql语句,查询语句中涉及所要查询的内容。47.作为一种可选的方案,可以采用开源产品kylin实现对sql查询语句的查询。开源产品kylin是一套基于索引数据研发的查询引擎,利用该引擎能够对sql查询语句进行解析,该方案中,在能够使用索引数据响应sql查询语句的情况下,可以利用spark进行索引数据的计算并返回;在不能够使用索引数据响应sql查询语句的情况下,可以将查询转发至提供java数据库连接(jdbc,javadatabaseconnectivity)的引擎处理查询语句(下推引擎)。该方案一定程度上具备了查询路由的功能,然而,该方案还存在以下局限性:48.(1)查询请求对应的查询语句不支持非select语句操作,如createtable,insert等sql查询语句,kylin均不能支持对相应的sql查询语句的查询。49.(2)索引数据查询引擎单一,仅能支持基于spark的索引数据计算。50.(3)下推引擎单一,运行时只能支持一种查询引擎。51.基于以上方案的局限性,目前利用kylin对sql查询语句进行查询时,kylin支持的sql查询语句的语义功能不全面,依然需要业务人员面向不同系统使用多个接口,使得业务开发进度受阻;并且,该方案使得开发人员只能选择单一的查询引擎处理数据,无法利用不同查询引擎间的差异性优化查询效果。52.基于上述方案存在的局限性,提出以下本技术实施例的技术方案,本技术实施例的技术方案能够为不同类型的查询请求提供统一的查询语句入口,利用同一的查询语句入口确定出查询语句的类型,进一步对不同类型的查询请求采用不同的模块进行处理,使得开发人员能够通过一套接口对接多种业务,加快业务开发进度。53.图1为本技术实施例提供的一种查询方法的流程示意图,如图1所示,所述方法包括如下步骤:54.步骤101:确定查询请求的类型。55.本技术实施例中,查询请求的类型,具体为查询请求包括的查询语句的类型,具体的,查询语句的类型可以分为select类型和非select类型这两种类型的语句,对于非select类型的查询语句,具体可以为数据操纵语言(dml,datamanipulationlanguage),数据定义语言(ddl,datadefinitionlanguage),数据控制语言(dcl,datacontrollanguage),事务控制语言(transactioncontrollanguage)等几种类型的语句。56.对于select类型的查询语句,具体是指以select开头的sql语句,具体列举如下:57.select*froma;58.selectsum(revenue)fromagroupbyarea。59.对于非select类型的查询语句,具体是指以非select开头的sql语句,具体列举如下:60.deletefroma;61.createtablea(stringid,stringname);62.insertintoavalues(‘123’,‘sangfor’)。63.本技术实施例中,通过查询语句的形式即可确定出查询语句的类型是否为select类型。64.步骤102:在所述查询请求为非第一类型的情况下,利用第一模块查询与所述查询请求对应的目标数据;其中,所述第一类型为select类型。65.本技术实施例中,确定查询请求非第一类型,即确定查询请求对应的查询语句为非select类型,在这种情况下,需要利用第一模块处理该非select类型的查询请求,这里,第一模块可以被称之为非select处理模块。66.本技术一可选实施方式中,所述第一模块对应的查询引擎为hive组件,对于上述步骤102,具体包括如下步骤:67.利用hive组件查询与非select类型的所述查询请求对应的目标数据。68.具体的,本技术实施例中,第一模块集成了hive组件,hive组件在批处理方面处理性能优越,并且能够执行元数据操作,第一模块能够将非select类型的sql查询语句均转发至hive组件进行处理。69.步骤103:在所述查询请求为第一类型的情况下,利用第二模块查询与所述查询请求对应的目标数据。70.本技术实施例中,查询请求为第一类型,即查询请求对应的查询语句为select类型。本技术实施例中,在利用第二模块查询与select类型的查询语句对应的目标数据时,需要由第二模块进一步确定是否存在能够满足select类型的查询语句的索引数据,根据已有的或用户自建的数据仓库中是否存在能够满足select类型的查询语句的索引数据由第二模块进一步将查询请求路由至不同的模块执行针对查询语句的查询操作。71.本技术实施例中,索引数据,又称之为聚合索引数据。例如,对于selectsum(a),avg(b)fromajoinbona.m=b.n[wheree=‘xxx’]groupbyc,d这种形式的查询语句,或者查询语句中包含这样的子查询片段,都可以使用索引数据加速。[0072]索引数据是用户设置的,设置索引时,需要设置的内容包括:[0073]1、统计指标,如sum(a),avg(b);[0074]2、数据表连接方式,ajoinbona.m=b.n;[0075]3.过滤条件字段和分组字段(维度),e,c,d;[0076]设置好这些内容,数据仓库就能够自动构建索引,可用于加速对下述查询语句的查询:selectsum(a),avg(b)fromajoinbona.m=b.n[wheree=‘xxx’]groupbyc,d。[0077]第二模块生成的索引数据类似于数据表,具体形式为:字段名称为:e,c,d,sum(a),avg(b);字段内容与selecte,c,d,sum(a),avg(b)fromajoinbona.m=b.ngroupbye,c,d内容一致。[0078]一般情况下,用户可选的统计指标包括但不限于以下几种:[0079]count、sum、min、max、countdistinct、orderby(topn)。[0080]表连接方式可以支持的连接类型包括但不限于以下几种:leftjoin和innerjoin;此外,用户可以设置多个表连接的形式,例如:ajoinbona.b=b.b;joincona.c=c.c。[0081]本技术实施例中,存在能够满足查询语句的索引数据,又可以称之为查询语句能够命中索引,具体是指查询语句或子查询语句能够直接使用索引数据获得查询结果。[0082]一般情况下,能够命中索引的查询语句,具备以下特征:[0083]1、查询语句中的映射字段是统计指标的子集以及维度字段的子集;[0084]2、查询语句中数据表的连接方式与索引中设置的数据表连接方式一致;[0085]3、查询语句中的where字段,分组字段以及排序字段是维度字段的子集;[0086]4、查询语句中至少包含一个分组字段或者一个统计指标。[0087]在查询语句不能满足以上几个特征的情况下,查询语句不能命中索引。[0088]下面,对查询语句能够命中索引数据的情况进行举例。[0089]若用户设置了如下索引:[0090]1、统计指标,如sum(a),avg(b);[0091]2、数据表连接方式,ajoinbona.m=b.n;[0092]3、过滤条件字段和分组字段(维度),e,c,d。[0093]此时,若用户写入如下查询语句:selectsum(a),efromajoinbona.m=b.ngroupbye,c,该查询语句能够命中索引:[0094]1、统计指标sum(a)是sum(a),avg(b)的子集;[0095]2、ajoinbona.m=b.n与数据表连接方式一致;[0096]3、分组字段e,c是e,c,d的子集。[0097]若用户写入如下查询语句:selectmin(a),e,mfromajoinbona.m=b.ngroupbye,c,该查询语句无法命中索引:[0098]1、设置的统计指标里没有min(a);[0099]2、映射字段m不在维度字段中。[0100]本技术一可选实施方式中,上述步骤103具体包括如下步骤:[0101]步骤1-1):利用第二模块确定是否存在满足所述查询请求的索引数据;在不存在满足所述查询请求的索引数据的情况下,利用第三模块对应的查询引擎查询与所述查询请求对应的目标数据。[0102]具体的,本技术实施例中,第三模块可以被称之为下推处理模块,用于处理查询语句不能够命中索引数据的情况的数据查询。[0103]本技术一可选实施方式中,上述步骤1-1)具体包括如下步骤[0104]步骤1-1-1):利用第三模块确定处理所述查询请求所要处理的原始数据的规模;基于所述原始数据的规模确定处理所述查询请求所需耗费的资源;在确定所述资源满足第一条件的情况下,利用第一引擎执行与所述查询请求对应的查询操作;在所述资源满足第二条件的情况下,利用第二引擎执行与所述查询请求对应的查询操作;其中,所述资源满足第一条件的情况下对应的资源量大于所述资源满足第二条件的情况下对应的资源量。[0105]具体的,在查询语句不能命中索引数据的情况下,第三模块基于查询语句处理查询请求。具体的,第三模块利用原始数据响应查询请求,通过收集需要处理的原始数据的规模,预估对查询语句进行查询需要使用的内存资源和计算资源,在预估完成查询需要消耗的内存资源或者计算资源较多的情况下,将查询语句发送至第一引擎,由第一引擎执行对查询语句的查询操作;否则,则将查询语句发送至第二引擎,由第二引擎执行对查询语句的查询操作。[0106]本技术实施例中,原始数据是指存储在已有的或用户自建的数据仓库的业务数据,例如,可以为存储在hdfs上的业务数据,可以利用如spark,hive和presto等一种或多种查询引擎进行查询和处理。原始数据规模通过计算原始数据的大小获得,并每隔一段时间更新。原始数据存储在hdfs上时,是按照文件的形式存储,通过累加所有文件实际占用存储空间的大小,即可获得原始数据的规模。[0107]本技术一可选实施方式中,第一引擎可以具体为分布式内存计算引擎spark,第二引擎可以具体为基于分布式文件系统的大规模并行处理(mpp,massivelyparallelprocessing)内存计算查询引擎presto。在利用spark查询引擎执行对查询语句的查询操作时,采用sparkonyarn(yarn为通用的资源管理系统,提供统一的资源管理和调度)的方式能够保证查询操作的稳定性;而利用presto查询引擎能够获取优越的查询性能。[0108]具体的,采用sparkonyarn的方式能够保证查询操作的稳定运行,在内存资源或者计算资源消耗较多的情况下,代表无法短时间内返回查询结果,可以将查询以spark任务的方式提交至yarn上执行,仅执行sql查询语句,获得查询结果后返回给用户。在这个过程中,能够指定好执行查询操作过程中能够使用的内存和核数,从而保证该查询操作在经历计算后能够返回结果,又不会因为资源消耗过多影响其他的查询业务。[0109]在使用presto查询的情况下,说明数据规模适中或者不大,会将查询语句下发至presto执行查询操作,此时不会限制内存和核数,允许presto使用尽可能多的资源,尽可能快速地获取结果。[0110]本技术一可选实施方式中,上述步骤103具体包括如下步骤:[0111]步骤2-1):利用第二模块确定是否存在满足所述查询请求的索引数据;在存在满足所述查询请求的索引数据的情况下,进一步确定缓存模块中是否存在与所述查询请求对应的缓存结果;[0112]步骤2-2):在确定缓存模块中不存在与所述查询请求对应的缓存结果的情况下,利用第四模块对应的查询引擎查询与所述查询请求对应的目标数据;[0113]步骤2-3):在确定缓存模块中存在与所述查询请求对应的缓存结果的情况下,利用缓存模块调取与所述查询请求对应的目标数据。[0114]具体的,本技术实施例中,第二模块在确定查询语句能够命中索引数据的情况下,会进一步判断缓存模块中是否存在与查询语句对应的缓存结果,若缓存模块中存在与查询语句对应的缓存结果,则利用缓存模块响应查询语句,即从缓存模块中调用缓存结果作为查询结果。这里,缓存模块中存储的是历史查询操作的查询结果,通过利用缓存模块对历史查询操作的查询结果进行存储,能够在后续接收到相同的查询请求时,直接从缓存模块中调用缓存结果,不再利用查询引擎重复执行查询操作。[0115]缓存模块对于查询结果进行存储时,采用设定的内存存储结构进行查询数据的存储,例如,内存存储结构具体可以为类似于map《key,value》的形式,其中,其中key是查询语句,value是与该查询语句对应的查询结果。用户将查询语句发送至缓存模块,缓存模块会查询该key是否有对应的查询语句,如果有,则将value直接获得,作为查询结果返回。[0116]本技术实施例中,第四模块可以被称之为索引处理模块,用于处理查询语句能够命中索引数据且缓存模块中不存在缓存结果的情况的数据查询。[0117]本技术一可选实施方式中,上述步骤2-2)具体包括如下步骤:[0118]利用第四模块确定处理所述查询请求所要处理的索引数据的规模;基于所述索引数据的规模确定处理所述查询请求所需耗费的资源;在确定所述资源满足第一条件的情况下,利用第一引擎执行与所述查询请求对应的查询操作;在所述资源满足第二条件的情况下,利用第二引擎执行与所述查询请求对应的查询操作;其中,所述资源满足第一条件的情况下对应的资源量大于所述资源满足第二条件的情况下对应的资源量。[0119]具体的,在查询语句能够命中索引数据且缓存模块中不存在缓存结果的情况下,由第四模块基于查询语句利用索引数据响应查询请求。具体的,第四模块会收集需要处理的索引数据规模,预估完成对查询语句的查询需要使用的内存资源和计算资源,在预估完成查询需要消耗的内存资源或者计算资源较多的情况下,将查询语句发送至第一引擎,由第一引擎执行对查询语句的查询操作;否则,则将查询语句发送至第二引擎,由第二引擎执行对查询语句的查询操作。[0120]本技术一可选实施方式中,第一引擎可以具体为spark,第二引擎可以具体为presto。在利用spark查询引擎执行对查询语句的查询操作时,采用sparkonyarn的方式能够保证查询操作的稳定性;而利用presto查询引擎能够获取优越的查询性能。[0121]本技术一可选实施方式中,在执行上述步骤2-2)之后,还可以进一步执行如下步骤:[0122]步骤3-1):在利用第四模块对应的查询引擎查询到与所述查询请求对应的目标数据的情况下,将所述目标数据存储至所述缓存模块,以利用所述模块记录所述查询请求及所述目标数据。[0123]具体的,在利用第四模块完成查询操作获得与查询语句所要查询的目标数据的情况下,可以将查询结果存储至缓存模块,利用缓存模块对查询结果进行缓存能够在后续接收到相同的查询请求时,直接从缓存模块中调用缓存结果,不再利用查询引擎重复执行查询操作,避免下次查询产生冗余的计算开销。[0124]图2和图3为实现本技术实施例提供的查询方法所需要利用模块的示意图。图2中,由第一模块处理非select类型的查询语句,其中,第一模块集成了hive组件,第一模块能够将非select类型的查询语句均转发至hive组件进行处理。由第二模块处理select类型的查询语句,其中,第二模块能够进一步确定是否存在能够满足select类型的查询语句的索引数据,根据是否存在能够满足select类型的查询语句的索引数据由第二模块进一步将查询请求路由至不同的模块(第三模块、第四模块或缓存模块)执行目标数据的查询操作。其中,第三模块用于处理查询语句不能够命中索引数据的情况的数据查询,具体可以利用原始数据响应查询请求,通过确定需要处理的原始数据的规模,基于原始数据的规模选择第一引擎或者第二引擎执行查询操作;另外,第二模块还能够在确定查询语句能够命中索引数据的情况下,进一步判断缓存模块中是否存在与查询语句对应的缓存结果,若缓存模块中存在与查询语句对应的缓存结果,则利用缓存模块响应查询语句;第四模块用于处理查询语句能够命中索引数据且缓存模块中不存在缓存结果的情况的数据查询,具体会收集需要处理的索引数据规模,根据所要处理的索引数据的规模选择第一引擎或者第二引擎执行查询操作。[0125]图3中,对于智能处理模块,其中的非select处理模块的作用等同于本技术的第一模块;下推处理模块的作用等同于本技术的第三模块;索引处理模块的作用等同于本技术的第四模块;缓存处理模块的作用等同于本技术的第四模块。需要补充说明的是,图3中的语句分类模块用于辨别查询请求中查询语句的类型,主要包括非select语句路由模块和select语句路由模块,作为一种可选的实施方式,查询请求可以从非select语句路由模块进入,即将非select语句路由模块作为查询请求输入接口,由非select类型的查询语句路由模块通过对查询请求进行判断,确定查询请求包括的查询语句为非select类型的查询语句还是select类型的查询语句,将非select类型的查询语句发送至智能处理模块中的非select处理模块进行处理,将select类型的查询语句发送至select语句路由模块进行进一步的判断,可以理解的是,select语句路由模块的作用即相当于本技术实施例所述的第二模块。[0126]图4为本技术实施例提供的查询方法的查询流程图,图4中,将非select语句路由模块作为查询请求输入接口,由非select类型的查询语句路由模块通过对查询请求进行判断,确定查询请求包括的查询语句为非select类型的查询语句还是select类型的查询语句,将非select类型的查询语句发送至智能处理模块中的非select处理模块进行处理,将select类型的查询语句发送至select语句路由模块进行进一步的判断。其中,在确定select类型的查询语句未命中索引数据的情况下,由下推处理模块通过收集需要处理的原始数据的规模,预估对查询语句进行查询需要使用的内存资源和计算资源,基于完成查询需要使用的内存资源和计算资源选择使用第一引擎或第二引擎执行查询操作;在确定查询语句能够命中索引数据且缓存处理模块中不存在与查询语句对应的缓存结果的情况下,由索引处理模块收集需要处理的索引数据规模,预估完成对查询语句的查询需要使用的内存资源和计算资源,基于完成查询需要使用的内存资源和计算资源选择使用第一引擎或第二引擎执行查询操作;在确定查询语句能够命中索引数据且缓存处理模块中存在与查询语句对应的缓存结果的情况下,由缓存处理模块直接从缓存模块中调用缓存结果,不再利用查询引擎重复执行查询操作。[0127]本技术实施例的技术方案,通过确定查询请求的类型;在所述查询请求为非第一类型的情况下,利用第一模块查询与所述查询请求对应的目标数据;其中,所述第一类型为select类型;在所述查询请求为第一类型的情况下,利用第二模块查询与所述查询请求对应的目标数据。本技术实施例的技术方案能够为不同类型的查询请求提供统一的查询语句入口,对不同类型的查询请求采用不同的模块进行处理,使得开发人员能够通过一套接口对接多种业务,加快业务开发进度。另外,本技术对于select查询语句,支持索引数据加速,查询引擎选择等功能,尽可能为用户在查询引擎模式下,选择最优路径获得最佳查询性能。[0128]图5为本技术实施例提供的一种查询装置的结构组成示意图,如图5所示,所述装置包括:[0129]确定单元501,用于确定查询请求的类型;[0130]第一查询单元502,用于在所述查询请求为非第一类型的情况下,利用第一模块查询与所述查询请求对应的目标数据;其中,所述第一类型为select类型;[0131]第二查询单元503,用于在所述查询请求为第一类型的情况下,利用第二模块查询与所述查询请求对应的目标数据。[0132]本技术一可选实施方式中,所述第一模块对应的查询引擎为hive组件,所述第一查询单元502具体用于:利用hive组件查询与非select类型的所述查询请求对应的目标数据。[0133]本技术一可选实施方式中,所述第二查询单元503,具体用于:利用第二模块确定是否存在满足所述查询请求的索引数据;在不存在满足所述查询请求的索引数据的情况下,利用第三模块对应的查询引擎查询与所述查询请求对应的目标数据。[0134]本技术一可选实施方式中,所述第二查询单元503,还具体用于:利用第三模块确定处理所述查询请求所要处理的原始数据的规模;基于所述原始数据的规模确定处理所述查询请求所需耗费的资源;在确定所述资源满足第一条件的情况下,利用第一引擎执行与所述查询请求对应的查询操作;在所述资源满足第二条件的情况下,利用第二引擎执行与所述查询请求对应的查询操作;其中,所述资源满足第一条件的情况下对应的资源量大于所述资源满足第二条件的情况下对应的资源量。[0135]本技术一可选实施方式中,所述第二查询单元503,具体用于:[0136]利用第二模块确定是否存在满足所述查询请求的索引数据;在存在满足所述查询请求的索引数据的情况下,进一步确定缓存模块中是否存在与所述查询请求对应的缓存结果;[0137]在确定缓存模块中不存在与所述查询请求对应的缓存结果的情况下,利用第四模块对应的查询引擎查询与所述查询请求对应的目标数据;[0138]在确定缓存模块中存在与所述查询请求对应的缓存结果的情况下,利用缓存模块调取与所述查询请求对应的目标数据。[0139]本技术一可选实施方式中,所述第二查询单元503,还具体用于:利用第四模块确定处理所述查询请求所要处理的索引数据的规模;基于所述索引数据的规模确定处理所述查询请求所需耗费的资源;在确定所述资源满足第一条件的情况下,利用第一引擎执行与所述查询请求对应的查询操作;在所述资源满足第二条件的情况下,利用第二引擎执行与所述查询请求对应的查询操作;其中,所述资源满足第一条件的情况下对应的资源量大于所述资源满足第二条件的情况下对应的资源量。[0140]本技术一可选实施方式中,所述查询装置还包括:[0141]存储单元504,用于在利用第四模块对应的查询引擎查询到与所述查询请求对应的目标数据的情况下,将所述目标数据存储至所述缓存模块,以利用所述模块记录所述查询请求及所述目标数据。[0142]本领域技术人员应当理解,图5所示的查询装置中的各单元的实现功能可参照前述查询方法的相关描述而理解。图5所示的查询装置中的各单元的功能可通过运行于处理器上的程序而实现,也可通过具体的逻辑电路而实现。[0143]本技术实施例还提供了一种电子设备。图6为本技术实施例的电子设备的硬件结构示意图,如图6所示,电子设备包括:用于进行数据传输的通信组件603、至少一个处理器601和用于存储能够在处理器601上运行的计算机程序的存储器602。终端中的各个组件通过总线系统604耦合在一起。可理解,总线系统604用于实现这些组件之间的连接通信。总线系统604除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图6中将各种总线都标为总线系统604。[0144]其中,所述处理器601执行所述计算机程序时至少执行图1所示的方法的步骤。[0145]可以理解,存储器602可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(rom,readonlymemory)、可编程只读存储器(prom,programmableread-onlymemory)、可擦除可编程只读存储器(eprom,erasableprogrammableread-onlymemory)、电可擦除可编程只读存储器(eeprom,electricallyerasableprogrammableread-onlymemory)、磁性随机存取存储器(fram,ferromagneticrandomaccessmemory)、快闪存储器(flashmemory)、磁表面存储器、光盘、或只读光盘(cd-rom,compactdiscread-onlymemory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(ram,randomaccessmemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(sram,staticrandomaccessmemory)、同步静态随机存取存储器(ssram,synchronousstaticrandomaccessmemory)、动态随机存取存储器(dram,dynamicrandomaccessmemory)、同步动态随机存取存储器(sdram,synchronousdynamicrandomaccessmemory)、双倍数据速率同步动态随机存取存储器(ddrsdram,doubledataratesynchronousdynamicrandomaccessmemory)、增强型同步动态随机存取存储器(esdram,enhancedsynchronousdynamicrandomaccessmemory)、同步连接动态随机存取存储器(sldram,synclinkdynamicrandomaccessmemory)、直接内存总线随机存取存储器(drram,directrambusrandomaccessmemory)。本技术实施例描述的存储器602旨在包括但不限于这些和任意其它适合类型的存储器。[0146]上述本技术实施例揭示的方法可以应用于处理器601中,或者由处理器601实现。处理器601可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器601中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器601可以是通用处理器、dsp,或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器601可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本技术实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器602,处理器601读取存储器602中的信息,结合其硬件完成前述方法的步骤。[0147]在示例性实施例中,电子设备可以被一个或多个应用专用集成电路(asic,applicationspecificintegratedcircuit)、dsp、可编程逻辑器件(pld,programmablelogicdevice)、复杂可编程逻辑器件(cpld,complexprogrammablelogicdevice)、fpga、通用处理器、控制器、mcu、微处理器(microprocessor)、或其他电子元件实现,用于执行前述的通话录音方法。[0148]本技术实施例还提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时至少用于执行图1所示方法的步骤。所述计算机可读存储介质具体可以为存储器。所述存储器可以为如图6所示的存储器602。[0149]本技术实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。[0150]在本技术所提供的几个实施例中,应该理解到,所揭露的方法和智能设备,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。[0151]上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。[0152]另外,在本技术各实施例中的各功能单元可以全部集成在一个第二处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。[0153]以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1