基于广播子查询缓存的OLAP查询优化方法及系统
未命名
09-03
阅读:125
评论:0

技术领域:
:1.本发明涉及云网络可观测数据分析领域,尤其涉及一种加速olap查询性能的方法及系统。
背景技术:
::2.olap(onlineanalyticalprocessing,联机分析处理)是一种联机分析处理系统,olap主要用于对数据进行查询操作。随着olap的不断发展,olap系统产品层出不穷,大多数都是基于关系型数据库的rolap(关系数据库联机分析处理)系统或者单一的molap(多维数据库联机分析处理)系统。3.随着商业数据量的快速增长,传统的单机olap数据库已经无法满足用户的需求,现代olap系统基本上都采用了分布式架构。在分布式的olap系统中,实现了对sql查询的分布式优化,因此支持海量数据的查询和分析。4.在现代olap系统中,常见的sql查询优化主要为“查询结果缓存(queryresultcache)”,即用来缓存一条查询语句的结果集,如果后续再有相同的查询,直接从结果集缓存中读取结果,而不用再重新执行而极大提升查询性能。5.但是,随着“时序类型”的数据查询量的不断增长,由于“查询结果缓存(queryresultcache)”的设计约束,需要每次查询的sql必须完全一致才能命中缓存,但是时序数据的查询仅内层子查询部分一致不变,外层sql时间参数并不一致,导致每次查询时并不能有效命中缓存,从而影响了整个系统的查询吞吐性能。技术实现要素:6.本发明的目的是针对现有技术的不足,提供一种基于广播子查询缓存的olap查询优化方法及系统,用于加速olap查询性能。相对于现有的olap系统查询结果缓存方案,本方案以更加细粒度、灵活的缓存算法,可以直接应用到分布式大数据分析系统中,充分利用分布式集群能力加速olap的查询性能。7.本发明的目的是通过以下技术方案实现的:8.根据本说明书的第一方面,提供一种基于广播子查询缓存的olap查询优化方法,该方法包括以下步骤:9.s1,当管理节点收到针对时序数据的sql查询请求时,将其按算子拆分为子查询和最终结果汇聚查询,使用广播机制,将子查询物理计划的执行结果缓存到olap集群所有工作节点;10.s2,在工作节点执行针对时序数据的sql查询时,直接在本地进行子查询物理计划的缓存查询,如果命中缓存,则直接进行下一步的算子执行;如果没有命中缓存,则进行子查询算子执行,将子查询物理计划的执行结果进行本地缓存,并将执行结果通过广播更新到olap集群所有工作节点。11.进一步地,所述管理节点接收到针对时序数据的sql查询请求,首先将sql解析为逻辑计划,将所述逻辑计划优化为物理计划,再将所述物理计划按算子拆分为子查询和最终结果汇聚查询。12.进一步地,所述工作节点对接收到的子查询物理计划进行哈希运算,取得标识id,使用所述标识id从本地缓存模块中尝试获取子查询物理计划的缓存;如果获取到缓存,则将缓存结果加载进入执行流程,进入哈希连接的算子计算阶段;否则在本地执行该子查询物理计划,将执行结果加载进入执行流程,进入哈希连接的算子计算阶段,同时将子查询物理计划的标识id、执行结果组合成为缓存结构写入本地缓存模块。13.进一步地,所述工作节点的本地缓存结构表示为hashmap《hashid,result》,其中hashid为对子查询物理计划进行的md5计算值,result为工作节点内存中的数据结构值。14.进一步地,所述工作节点的查询过程在没有命中缓存时,子查询物理计划会在本工作节点执行,执行结果写入本地缓存结构hashmap《hashid,result》中;同时从管理节点获取所有工作节点prc地址,并将hashmap《hashid,result》广播给所有工作节点。15.根据本说明书的第二方面,提供一种基于广播子查询缓存的olap查询优化系统,该系统包括以下模块:16.子查询模块:部署在olap集群工作节点,用于提取子查询物理计划,对物理计划进行哈希运算,取得标识id,使用标识id从缓存模块中尝试获取子查询物理计划的缓存;如果获取到缓存,则将缓存结果加载进入执行流程,进入哈希连接的算子计算阶段;否则本地执行该子查询物理计划,将执行结果加载进入执行流程,进入哈希的算子计算阶段,同时将子查询物理计划的标识id、执行结果组合成为缓存结构写入缓存模块;17.缓存模块:部署在olap集群工作节点,为子查询模块提供缓存写、并行读的能力;对于第一次进行写入的缓存,调用广播模块对olap集群所有工作节点进行缓存广播;18.广播模块:提供缓存广播服务,收到来自缓存模块的缓存广播请求后,从管理节点获取所有工作节点prc地址,并将子查询物理计划的执行结果广播给所有工作节点。19.进一步地,所述缓存模块提供基于lru策略的缓存服务,缓存结构表示为hashmap《hashid,result》,其中hashid为对子查询物理计划进行的md5计算值,result为工作节点内存中的数据结构值。20.进一步地,所述系统能够部署于各种形式的计算节点平台,包括ecs、docker、物理机环境。21.本发明与现有技术相比,具有如下的优点:22.第一,针对“时序类型”的数据查询,提出了新的、更加细粒度、灵活的缓存算法,避免了“查询结果缓存(queryresultcache)”的设计缺陷,可以直接应用到分布式大数据分析系统中,充分利用分布式集群能力加速olap的查询性能。23.第二,通过缓存广播机制,可以在集群环境中直接应用,使子查询的缓存在所有节点均可用,提升整体的缓存命中率,充分利用分布式集群能力加速olap的查询性能。附图说明24.图1是本发明实施例提供的基于广播子查询缓存的olap查询优化方法流程图;25.图2是本发明实施例提供的基于广播子查询缓存的olap查询优化系统结构图。具体实施方式26.为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。27.在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。28.如图1所示,本技术实施例提出的一种基于广播子查询缓存的olap查询优化方法,具体实现可以分为三个步骤。29.(1)设计一套新的缓存方案,不是针对sql查询结果进行缓存,而是针对子查询算子的局部结果进行缓存。30.所述缓存方案,具体在olap集群的工作节点worker中实现。worker节点负责sql的物理计划physicalplan的执行。传统的“sql查询结果缓存(queryresultcache)”,是在代理层proxy对sql的查询结果进行缓存,在时序类型的数据分析场景中,其缓存命中率非常低;而本方案,是对sql的physicalplan的算子层面进行局部结果缓存,其更加细粒度、灵活,能在时序类型的数据分析场景中极大的提升缓存命中率,充分利用分布式集群能力加速olap的查询性能。31.(2)当管理节点master收到针对时序数据的sql查询请求时,将sql解析为逻辑计划logicalplan,将logicalplan优化为physicalplan,将physicalplan按算子拆分为子查询、最终结果汇聚查询。其中子查询physicalplan的执行结果,使用广播机制,缓存到分布式系统的各个worker节点中。32.所述算子拆分,主要是针对physicalplan的拆分,子查询一般会被优化为哈希连接hashjoin。worker节点对接收到的子查询physicalplan进行哈希运算,取得标识id,使用标识id从worker节点的本地缓存模块中尝试获取子查询physicalplan的缓存;如果获取到缓存,则将缓存结果加载进入执行流程pipeline,进入hashjoin的算子计算阶段;如果没有获取到缓存,则在本地执行该子查询physicalplan,将执行结果加载进入pipeline,进入hashjoin的算子计算阶段,同时将子查询physicalplan的标识id、执行结果组合成为缓存结构hashmap《hashid,result》写入worker节点的本地缓存模块。33.所述缓存结构hashmap《hashid,result》中,hashid为对子查询physicalplan进行的md5计算值,result为worker节点内存中的数据结构值。34.(3)在worker节点执行针对时序数据的sql查询时,直接在本地进行子查询physicalplan的缓存查询,如果命中缓存,则直接进行下一步的算子执行;如果没有命中缓存,则进行子查询算子执行,将子查询physicalplan的执行结果进行本地缓存,并将执行结果通过广播更新到olap集群所有的worker节点中。35.所述查询过程在没有命中缓存时,子查询physicalplan会在本worker节点执行,执行完成后的结果会写入本地缓存结构hashmap《hashid,result》中;同时会从master节点获取所有的worker节点prc地址,并将hashmap《hashid,result》广播给所有的worker节点。通过这样的方式,使子查询的缓存在所有节点均可用,提升整体的缓存命中率,充分利用分布式集群能力加速olap的查询性能。36.如图2所示,本技术实施例提出的一种基于广播子查询缓存的olap查询优化系统,包括以下模块:37.子查询模块:部署在worker节点,提取子查询的physicalplan,对physicalplan进行哈希运算,取得标识id,使用标识id从缓存模块中尝试获取子查询physicalplan的缓存;如果获取到缓存,则将缓存结果加载进入pipeline,进入hashjoin的算子计算阶段;如果没有获取到缓存,则本地执行该子查询physicalplan,将执行结果加载进入pipeline,进入hashjoin的算子计算阶段,同时将子查询physicalplan的标识id、执行结果组合成为缓存结构hashmap《hashid,result》写入缓存模块。38.缓存模块:部署在worker节点,提供基于lru策略的缓存服务,为子查询模块提供缓存写、并行读的能力。其核心为一张哈希表hashtable,并使用读写锁进行控制,缓存结构为hashmap《hashid,result》。对于第一次进行写入的缓存,会调用广播模块,对olap集群所有worker节点进行缓存广播。39.广播模块:提供缓存广播服务,收到来自缓存模块的缓存广播请求后,会从master节点获取所有的worker节点prc地址,并将hashmap《hashid,result》广播给所有的worker节点。通过这样的方式,使子查询的缓存在所有节点均可用,提升整体的缓存命中率,充分利用分布式集群能力加速olap的查询性能。40.本技术实施例在基于阿里云ecs平台上实现了原型系统,并测试了方法效果。但是根据计算节点使用的硬件设备不同,本技术实施例也可以推广部署到物理机、docker等平台。41.以上所述仅是本发明的优选实施方式,虽然本发明已以较佳实施例披露如上,然而并非用以限定本发明。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围情况下,都可利用上述揭示的方法和技术内容对本发明技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何的简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。当前第1页12当前第1页12
技术特征:
1.一种基于广播子查询缓存的olap查询优化方法,其特征在于,包括:s1,当管理节点收到针对时序数据的sql查询请求时,将其按算子拆分为子查询和最终结果汇聚查询,使用广播机制,将子查询物理计划的执行结果缓存到olap集群所有工作节点;s2,在工作节点执行针对时序数据的sql查询时,直接在本地进行子查询物理计划的缓存查询,如果命中缓存,则直接进行下一步的算子执行;如果没有命中缓存,则进行子查询算子执行,将子查询物理计划的执行结果进行本地缓存,并将执行结果通过广播更新到olap集群所有工作节点。2.根据权利要求1所述的方法,其特征在于,所述管理节点接收到针对时序数据的sql查询请求,首先将sql解析为逻辑计划,将所述逻辑计划优化为物理计划,再将所述物理计划按算子拆分为子查询和最终结果汇聚查询。3.根据权利要求1所述的方法,其特征在于,所述工作节点对接收到的子查询物理计划进行哈希运算,取得标识id,使用所述标识id从本地缓存模块中尝试获取子查询物理计划的缓存;如果获取到缓存,则将缓存结果加载进入执行流程,进入哈希连接的算子计算阶段;否则在本地执行该子查询物理计划,将执行结果加载进入执行流程,进入哈希连接的算子计算阶段,同时将子查询物理计划的标识id、执行结果组合成为缓存结构写入本地缓存模块。4.根据权利要求1所述的方法,其特征在于,所述工作节点的本地缓存结构表示为hashmap<hashid,result>,其中hashid为对子查询物理计划进行的md5计算值,result为工作节点内存中的数据结构值。5.根据权利要求4所述的方法,其特征在于,所述工作节点的查询过程在没有命中缓存时,子查询物理计划会在本工作节点执行,执行结果写入本地缓存结构hashmap<hashid,result>中;同时从管理节点获取所有工作节点prc地址,并将hashmap<hashid,result>广播给所有工作节点。6.一种基于广播子查询缓存的olap查询优化系统,其特征在于,包括:子查询模块:部署在olap集群工作节点,用于提取子查询物理计划,对物理计划进行哈希运算,取得标识id,使用标识id从缓存模块中尝试获取子查询物理计划的缓存;如果获取到缓存,则将缓存结果加载进入执行流程,进入哈希连接的算子计算阶段;否则本地执行该子查询物理计划,将执行结果加载进入执行流程,进入哈希的算子计算阶段,同时将子查询物理计划的标识id、执行结果组合成为缓存结构写入缓存模块;缓存模块:部署在olap集群工作节点,为子查询模块提供缓存写、并行读的能力;对于第一次进行写入的缓存,调用广播模块对olap集群所有工作节点进行缓存广播;广播模块:提供缓存广播服务,收到来自缓存模块的缓存广播请求后,从管理节点获取所有工作节点prc地址,并将子查询物理计划的执行结果广播给所有工作节点。7.根据权利要求6所述的系统,其特征在于,所述缓存模块提供基于lru策略的缓存服务,缓存结构表示为hashmap<hashid,result>,其中hashid为对子查询物理计划进行的md5计算值,result为工作节点内存中的数据结构值。8.根据权利要求6所述的系统,其特征在于,所述系统能够部署于各种形式的计算节点平台,包括ecs、docker、物理机环境。
技术总结
本发明公开了一种基于广播子查询缓存的OLAP查询优化方法及系统。现有的OLAP系统查询结果缓存方案在时序类型的数据分析场景中,其缓存命中率非常低,本发明提出了新的、更加细粒度、灵活的缓存方案,即针对子查询算子的局部结果进行缓存,避免了查询结果缓存的设计缺陷,可以直接应用到分布式大数据分析系统中;本发明通过缓存广播机制,可以在集群环境中直接应用,使子查询的缓存在所有节点均可用,提升整体的缓存命中率,充分利用分布式集群能力加速OLAP的查询性能。加速OLAP的查询性能。加速OLAP的查询性能。
技术研发人员:吕彪 程鹏 戚依宁 方崇荣 陈积明
受保护的技术使用者:浙江大学
技术研发日:2023.06.14
技术公布日:2023/8/31
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/