CN115455031B - 一种Doris的数据查询方法、装置、存储介质及设备 - Google Patents
一种Doris的数据查询方法、装置、存储介质及设备 Download PDFInfo
- Publication number
- CN115455031B CN115455031B CN202211145425.2A CN202211145425A CN115455031B CN 115455031 B CN115455031 B CN 115455031B CN 202211145425 A CN202211145425 A CN 202211145425A CN 115455031 B CN115455031 B CN 115455031B
- Authority
- CN
- China
- Prior art keywords
- data
- result
- aggregation result
- aggregation
- doris
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 49
- 230000002776 aggregation Effects 0.000 claims abstract description 220
- 238000004220 aggregation Methods 0.000 claims abstract description 220
- 238000004364 calculation method Methods 0.000 claims abstract description 50
- 230000005540 biological transmission Effects 0.000 claims abstract description 7
- 238000012545 processing Methods 0.000 claims description 26
- 230000015654 memory Effects 0.000 claims description 22
- 230000000694 effects Effects 0.000 abstract description 14
- 238000005192 partition Methods 0.000 description 22
- 238000010586 diagram Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 7
- 230000006870 function Effects 0.000 description 5
- 239000000243 solution Substances 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 3
- 239000000872 buffer Substances 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 239000007853 buffer solution Substances 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 230000001550 time effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/219—Managing data history or versioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
- G06F16/244—Grouping and aggregation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/248—Presentation of query results
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种Doris的数据查询方法、装置、存储介质及设备,该方法包括:首先获取Doris的底层算子中的历史数据,并将其进行聚合计算,得到聚合结果,然后通过预设缓存系统,将其进行缓存;接着响应于对Doris的数据查询请求,对Doris中新插入的底层算子中的实时数据进行聚合计算,得到聚合结果;进而从预设缓存系统中获取历史数据的聚合结果,并将其与实时数据的聚合结果进行合并处理,得到合并后的数据,再将其通过Doris的数据发送算子向执行引擎的上层进行反馈,输出最终的数据查询结果。由于先将底层算子中历史数据的聚合结果缓存,在数据查询时,只需要对实时数据进行聚合计算,历史数据的聚合结果可从缓存中获取,减少了计算资源,提高了查询并发效果。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种Doris的数据查询方法、装置、存储介质及设备。
背景技术
目前,为了提高Doris的数据查询并发能力,通常采用结构化查询语言缓存(SQLCache)和分区缓存(Partition Cache)这两种缓存机制,但这两种缓存机制,主要的应用场景均是面向离线查询,对于实时数据的查询,并发效果较差。这是由于SQL Cache是按SQL的签名、查询的表的分区身份标识(Identity document,ID)、分区最新版本来存储和获取缓存,三者组合确定一个缓存数据集,其中任何一个发生变化,如SQL有变化、如查询字段或条件不一样、或数据更新后版本发生变化,均会导致命中不了缓存,即,查询不到指定的数据。而Partition Cache是将SQL并行拆分,识别只读分区和可更新分区,将只读分区缓存,更新分区不进行缓存,如果是查询一周等一段时间数据量的SQL,确实可以缓存较多计算结果,但是实时的任务大多数不会出现跨天查询,而是需要查询当天的数据任务,因此,实时部分的数据还是需要全量读取和计算,而Doris的分区在实际应用中基本不会设置为小时,否则Doris的元数据将会压垮整个前端节点(Frontend,FE)的元数据,所以,仍然会导致Doris的数据查询并发效果较差。
发明内容
本申请实施例的主要目的在于提供一种Doris的数据查询方法、装置、存储介质及设备,能够通过缓存Doris中最底层算子的计算结果,减少了输入/输出((Input/Output,IO)和中央处理器(central processing unit,CPU)计算资源,提高了查询并发效果。
本申请实施例提供了一种Doris的数据查询方法,包括:
获取Doris的存储引擎架构中底层算子中的历史数据,并将所述历史数据进行聚合计算,得到聚合后的底层算子中历史数据的聚合结果;
通过预设缓存系统,将所述历史数据的聚合结果进行缓存;
响应于对所述Doris的数据查询请求,对所述Doris中新插入的底层算子中的实时数据进行聚合计算,得到实时数据的聚合结果;
从所述预设缓存系统中获取历史数据的聚合结果,并将所述历史数据的聚合结果与所述实时数据的聚合结果进行合并处理,得到合并后的数据;
将所述合并后的数据通过Doris的数据发送算子向执行引擎的上层进行反馈,以便输出最终的数据查询结果。
一种可能的实现方式中,所述通过预设缓存系统,将所述历史数据的聚合结果进行缓存,包括:
通过预设缓存系统,按照键值对的方式,将所述历史数据的聚合结果进行缓存。
一种可能的实现方式中,所述历史数据的聚合结果的键包含底层算子读取器,以及过滤器、列、本地聚合算子、排序算子中的至少一项。
一种可能的实现方式中,所述历史数据的聚合结果的值的存储结构为结果块列表。
一种可能的实现方式中,所述将所述历史数据的聚合结果与所述实时数据的聚合结果进行合并处理,得到合并后的数据,包括:
当所述历史数据的聚合结果的键的最上层为底层算子读取器、过滤器或列时,将所述历史数据的聚合结果与所述实时数据的聚合结果组织为列表方式,进行联合处理,得到处理后的数据;
或者,当所述历史数据的聚合结果的键的最上层为本地聚合算子时,将所述历史数据的聚合结果与所述实时数据的聚合结果组织为哈希方式,并在对所述实时数据的聚合结果进行哈希处理后,将得到的处理结果插入到所述历史数据的聚合结果对应的哈希结果中;
或者,当所述历史数据的聚合结果的键的最上层为排序算子时,将所述历史数据的聚合结果与所述实时数据的聚合结果组织为有序列表或者有序哈希表方式,并将所述实时数据的聚合结果,通过插入排序的方式,插入到有序结果集中。
一种可能的实现方式中,所述方法还包括:
利用最近最少使用算法,当达到所述预设缓存系统中预置的过期时间和/或缓存容量时,删除所述预设缓存系统中最不频繁使用的历史数据的聚合结果。
一种可能的实现方式中,所述预设缓存系统为内存。
本申请实施例还提供了一种Doris的数据查询装置,所述装置包括:
第一计算单元,用于获取Doris的存储引擎架构中底层算子中的历史数据,并将所述历史数据进行聚合计算,得到聚合后的底层算子中历史数据的聚合结果;
缓存单元,用于通过预设缓存系统,将所述历史数据的聚合结果进行缓存;
第二计算单元,用于响应于对所述Doris的数据查询请求,对所述Doris中新插入的底层算子中的实时数据进行聚合计算,得到实时数据的聚合结果;
合并单元,用于从所述预设缓存系统中获取历史数据的聚合结果,并将所述历史数据的聚合结果与所述实时数据的聚合结果进行合并处理,得到合并后的数据;
反馈单元,用于将所述合并后的数据通过Doris的数据发送算子向执行引擎的上层进行反馈,以便输出最终的数据查询结果。
一种可能的实现方式中,所述缓存单元具体用于:
通过预设缓存系统,按照键值对的方式,将所述历史数据的聚合结果进行缓存。
一种可能的实现方式中,所述历史数据的聚合结果的键包含底层算子读取器,以及过滤器、列、本地聚合算子、排序算子中的至少一项。
一种可能的实现方式中,所述历史数据的聚合结果的值的存储结构为结果块列表。
一种可能的实现方式中,所述合并单元具体用于:
当所述历史数据的聚合结果的键的最上层为底层算子读取器、过滤器或列时,将所述历史数据的聚合结果与所述实时数据的聚合结果组织为列表方式,进行联合处理,得到处理后的数据;
或者,当所述历史数据的聚合结果的键的最上层为本地聚合算子时,将所述历史数据的聚合结果与所述实时数据的聚合结果组织为哈希方式,并在对所述实时数据的聚合结果进行哈希处理后,将得到的处理结果插入到所述历史数据的聚合结果对应的哈希结果中;
或者,当所述历史数据的聚合结果的键的最上层为排序算子时,将所述历史数据的聚合结果与所述实时数据的聚合结果组织为有序列表或者有序哈希表方式,并将所述实时数据的聚合结果,通过插入排序的方式,插入到有序结果集中。
一种可能的实现方式中,所述装置还包括:
删除单元,用于利用最近最少使用算法,当达到所述预设缓存系统中预置的过期时间和/或缓存容量时,删除所述预设缓存系统中最不频繁使用的历史数据的聚合结果。
一种可能的实现方式中,所述预设缓存系统为内存。
本申请实施例还提供了一种Doris的数据查询设备,包括:处理器、存储器、系统总线;
所述处理器以及所述存储器通过所述系统总线相连;
所述存储器用于存储一个或多个程序,所述一个或多个程序包括指令,所述指令当被所述处理器执行时使所述处理器执行上述Doris的数据查询方法中的任意一种实现方式。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行上述Doris的数据查询方法中的任意一种实现方式。
本申请实施例提供的一种Doris的数据查询方法、装置、存储介质及设备,首先获取Doris的存储引擎架构中底层算子中的历史数据,并将历史数据进行聚合计算,得到聚合后的底层算子中历史数据的聚合结果,然后,通过预设缓存系统,将历史数据的聚合结果进行缓存;接着,响应于对Doris的数据查询请求,对Doris中新插入的底层算子中的实时数据进行聚合计算,得到实时数据的聚合结果;进而,可以从预设缓存系统中获取历史数据的聚合结果,并将历史数据的聚合结果与实时数据的聚合结果进行合并处理,得到合并后的数据,再将合并后的数据通过Doris的数据发送算子向执行引擎的上层进行反馈,以便输出最终的数据查询结果。可见,由于本申请实施例是先将底层算子中历史数据的聚合结果进行缓存,这样,在对Doris进行数据查询时,只需要对新插入的底层算子中的实时数据进行聚合计算,其他历史数据的聚合结果直接从缓存中获取即可,从而能够减少IO和CPU计算资源,提高了查询并发效果。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的Doris的架构示意图;
图2为本申请实施例提供的MPP分布式执行框架的示意图;
图3为本申请实施例提供的存储引擎架构的示例图;
图4为本申请实施例提供的数据查询计算的流程示例图;
图5为本申请实施例提供的一种Doris的数据查询方法的流程示意图;
图6为本申请实施例提供的Doris的数据查询的整体过程示例图;
图7为本申请实施例提供的按照键值对的方式,将历史数据的聚合结果进行缓存的示意图;
图8为本申请实施例提供的一种Doris的数据查询装置的组成示意图。
具体实施方式
Doris是一款高性能分析型数据仓库,使用向量化、分布式执行框架(MassivelyParallel Processing,简称MPP)、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。Doris既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。Doris的架构示意图如图1所示,其核心包含前端节点(Frontend,FE)、后端节点(Backend,BE)两类进程,不依赖任何外部组件,方便部署与维护。同时,FE和BE节点均可以在线水平扩展,元数据和数据都有副本机制,确保整个系统无单点。
其中,FE用于管理元数据,管理客户端连接,进行查询规划,查询调度等。BE用于数据存储以及结构化查询语言(Structured Query Language,SQL)的执行等。
数据存储方面,Doris的BE节点都是完全对等的,FE按照一定策略将数据分配到对应的BE节点。在数据导入时,数据会直接写入到BE节点,不会通过FE中转,BE用于将导入数据写成对应的格式以及生成相关索引。
在执行SQL计算时,一条SQL语句首先会按照具体的语义规划成逻辑执行单元,然后再按照数据的分布情况拆分成具体的物理执行单元。物理执行单元会在数据存储的节点上进行执行,这样可以避免数据的传输与拷贝,从而能够得到极致的查询性能。
Doris整体对外展示的是一个MySQL协议接口,支持标准SQL语法。用户可以通过已有的MySQL客户端对Doris中的数据进行查询和分析。
Doris的MPP分布式执行框架示意图如图2所示,在该MPP执行框架中,一条SQL数据查询请求会被拆分成多个物理计算单元,在多机并行执行。每个执行节点拥有独享的资源(如CPU、内存等)。例如,对于一条SQL语句“selectid count(*)from Table group by id”,在Doris的执行端会将其拆分为如图2所示的物理执行过程,其中,虚线框表示执行单元,会被调到BE节点执行。示案例SQL中有两层任务,通过数据发送算子(Data Sender)和数据接收算子(Data Receiver)构成的排序随机打乱(Shuffle)过程连接,每层均被拆分为两个分桶(Bucket)。这4个执行单元会同时下发到BE端执行,数据查询计算完毕后,会通过结果发送算子(Result Sender)发送给Doris的FE端进行展示或者输出。
Doris的存储引擎架构示例图如图3所示,Doris的存储结构类似日志结构合并树(Log Structure Merge Tree,LSM树)的结构,在一个表(Tablet)中,内部数据由最底层算子(即,行集合(RowSet),可以看成是多个行(Row)组成的文件集合)组成,RowSet包含编号和版本信息,每当有新的数据写入时,会生成一个新的RowSet,如图3所示的“底层算子n-0”。需要说明的是,即使是在Doris中聚合模型或者更新模型表,也只会生成新的RowSet,而不是修改RowSet。并且,可以根据RowSet所在目标文件的大小,对RowSet中的历史数据异步的进行合并,即,将多个较小的RowSet组合成较大的RowSet,以生成合并后的RowSet,并删除合并前的原RowSet,如图3所示,将底层算子0-0、底层算子1-0、底层算子2-0合并为底层算子2-1后,删除底层算子0-0、底层算子1-0、底层算子2-0。
将图2所示的MPP分布式执行框架和图3所示的存储引擎架构进行联合处理,实现数据查询计算的流程示例图如图4所示,仍以SQL语句“select id count(*)from Tablegroup by id”在存储端的片段实例(Fragment Instance)为例,在传统的Doris的数据查询方法中,会将最底层的联机分析处理扫描(OLAPScan)转换为底层算子读取器(RowSetReader)来读取对应RowSet中的数据,以便将磁盘(Disk)中的数据读到内存中,并且,在具体实现过程中,存在几个RowSet就会读取几次数据,即使SQL任务一致,第二个SQL任务依然会重新读取全部历史数据进行重新计算,这将会导致整个Doris的查询并发度较低,无法承载高并发的场景。
对此,为提高Doris的数据查询并发能力,目前通常采用了SQL Cache和PartitionCache两种缓存机制。但这两种缓存机制,主要的应用场景均是面向离线查询,对于实时数据的查询,并发效果较差。如果是查询实时数据表,每秒都会有实时的数据新写入,那么采用了SQLCache的缓存机制必然都是失效的。而由于Partition Cache是将SQL并行拆分,识别只读分区和可更新分区,将只读分区缓存,更新分区不进行不缓存,如果是查询一周等一段时间数据量的SQL,确实可以缓存较多计算结果,但是实时的任务大多数不会出现跨天查询,而是需要查询当天的数据任务,因此,实时部分的数据还是需要全量读取和计算,而Doris的分区在实际应用中基本不会设置为小时,否则Doris的元数据将会压垮整个FE的元数据。另外,由于Partition Cache要求SQL可以并行拆分,这也限定了其使用场景必须是分区粒度的聚合操作,一旦出现其他维度的聚合就会无法使用。
所以,目前经常采用的SQL Cache和Partition Cache这两种缓存机制,对于Doris的实时数据的查询并发效果较差。
为解决上述缺陷,本申请提供了一种Doris的数据查询方法,首先获取Doris的存储引擎架构中底层算子中的历史数据,并将历史数据进行聚合计算,得到聚合后的底层算子中历史数据的聚合结果,然后,通过预设缓存系统,将历史数据的聚合结果进行缓存;接着,响应于对Doris的数据查询请求,对Doris中新插入的底层算子中的实时数据进行聚合计算,得到实时数据的聚合结果;进而,可以从预设缓存系统中获取历史数据的聚合结果,并将历史数据的聚合结果与实时数据的聚合结果进行合并处理,得到合并后的数据,再将合并后的数据通过Doris的数据发送算子向执行引擎的上层进行反馈,以便输出最终的数据查询结果。可见,由于本申请实施例是先将底层算子中历史数据的聚合结果进行缓存,这样,在对Doris进行数据查询时,只需要对新插入的底层算子中的实时数据进行聚合计算,其他历史数据的聚合结果直接从缓存中获取即可,从而能够减少IO和CPU计算资源,提高了查询并发效果。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
第一实施例
参见图5,为本实施例提供的一种Doris的数据查询方法的流程示意图,该方法包括以下步骤:
S501:获取Doris的存储引擎架构中底层算子中的历史数据,并将所述历史数据进行聚合计算,得到聚合后的底层算子中历史数据的聚合结果。
在本实施例中,为了提高Doris的数据查询并发效果,本申请提出通过缓存Doris中最底层算子的计算结果,来减少IO和CPU计算资源,以提高数据查询并发效果的方案。
具体来讲,首先需要获取Doris的存储引擎架构中底层算子中的历史数据,然后并将这些历史数据进行聚合(Aggregate,Agg)计算,得到聚合后的底层算子中历史数据的聚合结果,用以通过执行后续步骤S502-S505,实现对Doris中数据的快速查询。
举例说明:如图6所示,假设磁盘(Disk)的底层算子2-1和底层算子3-0中存储了历史数据,底层算子4-0中为新写入的实时数据,这样,在从Disk中获取到底层算子2-1和底层算子3-0中的历史数据后,可以根据数据的id,进行聚合计算,得到各自对应的聚合结果:“底层算子2-1聚合结果”和“底层算子3-0聚合结果”。
S502:通过预设缓存系统,将历史数据的Agg结果进行缓存。
在本实施例中,通过步骤S501将历史数据进行聚合计算,得到聚合后的底层算子中历史数据的聚合结果后,进一步的,可以通过预设缓存系统,将历史数据的聚合结果进行缓存,以便后续进行数据查询时,可以直接从缓存中获取该历史数据的Agg结果,而不需要重复读取所有历史数据再进行聚合计算,仅需要通过后续步骤S503进行实时数据的聚合计算,再将二者的计算结果进行合并(Merger)即可,从而能够同时减少IO和CPU资源浪费。
其中,需要说明的是,本申请实施例对预设缓存系统的具体组成不做限定,可根据实际情况进行设定。一种可选的实现方式是,可以将内存作为预设缓存系统,或者可以使用其他第三方存储系统作为预设缓存系统,如远程字典服务(Remote Dictionary Server,Redis)或Memcache等其他缓存系统。
举例说明:如图6所示,基于上述举例,在从Disk中获取到底层算子2-1和底层算子3-0中的历史数据,并根据数据的id进行聚合计算(比如,将id值同为1的一万条数据进行聚合计算、将id值同为2的3万条数据进行聚合计算等),得到各自对应的聚合结果“底层算子2-1聚合结果”和“底层算子3-0聚合结果”后,可通过预设缓存系统,将这些聚合结果进行缓存,即为如图6中所示的“底层算子2-1聚合缓存”和“底层算子3-0聚合缓存”,用以执行后续步骤。
具体来讲,一种可选的实施方式是,本步骤S502的实现过程可以包括:通过预设缓存系统,按照键值对(即Key和Value)的方式,将历史数据的聚合结果进行缓存。
其中,一种可选的实施方式是,本申请将历史数据的聚合结果的键(Key)设定为逻辑片段实例(Logical Fragment Instance)的形式,涵盖了扫描节点(ScanNode)中除DataSender算子外所有节点的元数据信息,如图7所示,历史数据的聚合结果的Key可以包含5层节点数据,其中,底层算子读取器(RowSetReader)是不可或缺的,同时可以还包含过滤器(Filter)、列(Project)、本地聚合算子(Local Agg)、排序算子(Local Sort)中的至少一项。
其中,如图7所示,底层算子读取器(RowSetReader(id List)):存储的元数据信息主要是RowSet的id列表,表示该缓存保存了哪些RowSet数据。过滤器(Filter(predicts)):该节点存储的元数据是谓词表达式,并精确到表示式中的数值,例如where a=1和where a=2指的不是同一个缓存。列(Project(fields)):指的是进行列裁剪后返回的列,例如Select a,sum(b)和select a,count(b)可以命中同一个缓存。本地聚合算子(Local Agg(fileds+function)):指的是聚合算子,存储的元数据为聚合的字段和聚合函数及函数中的字段。例如对于Select a,sum(b),需要包含agg字段a和函数sum(b),如果函数中出现谓词表达式,则也需要包含该谓词表达式的值,例如select a,sum(case when(b==0)thenb else 0)等。排序算子(Local Sort(sort fileds)):存储的元数据包含排序字段。
一种可选的实施方式是,本申请将历史数据的聚合结果的值(Value)设定为结果块列表(Trunk List)的形式,如图7所示,用结果块(Trunk)在内存中存储计算结果。Trunk是一种内存的列存结构,数据按照列存Trunk中是没有头(header)信息的,这些元数据信息可以从上述Key的取值计算得到。而将Value设定为结果块列表的形式,是为了方便在进行RowSet中数据的合并时,有些场景可以不需要搬动内存数据,只需要将多个内存用链表方式连接起来即可,从而提高了数据处理效率。
S503:响应于对Doris的数据查询请求,对Doris中新插入的底层算子中的实时数据进行聚合计算,得到实时数据的聚合结果。
在本实施例中,通过步骤S502利用预设缓存系统(如内存),将历史数据的聚合结果进行缓存后,进一步的,当接收到用户对Doris的数据查询请求(如上述SQL数据查询语句)后,响应于该数据查询请求,需要对Doris中新插入的RowSet中的实时数据进行聚合计算,得到实时数据的聚合结果,用以执行后续步骤S504。
举例说明:如图6所示,基于上述举例,在接收到用户对Doris的数据查询请求后,响应于该数据查询请求,可以利用底层算子读取器获取底层算子4-0中新写入的实时数据,并根据数据的id,对其进行聚合计算,得到实时数据的聚合结果,即图6中的“本地聚合”,用以执行后续步骤S504。
S504:从预设缓存系统中获取历史数据的聚合结果,并将历史数据的聚合结果与实时数据的聚合结果进行合并处理,得到合并后的数据。
在本实施例中,通过步骤S503得到实时数据的聚合结果后,进一步的,可以从预设缓存系统中获取历史数据的聚合结果,并将历史数据的聚合结果与实时数据的聚合结果进行合并处理,得到合并后的数据,用以执行后续步骤S505,从而能够同时减少IO和CPU资源浪费。
具体来讲,一种可选的实现方式是,可以根据上面提及的述历史数据的聚合结果的Key所包含的不同内容,将历史数据的聚合结果与实时数据的聚合结果进行不同方式的合并处理,得到合并后的数据,具体实现过程如下:
当历史数据的聚合结果的Key的最上层为RowSetReader、Filter或Project时,可以将历史数据的聚合结果与实时数据的聚合结果组织为列表(List)方式,进行联合(Unoin)处理,得到处理后的数据,即只需要将历史数据的聚合结果与实时数据的聚合结果实现简单的Unoin即可流入下个节点,进行后续处理。
或者,当历史数据的聚合结果的Key的最上层为Local Agg时,可以将历史数据的聚合结果与实时数据的聚合结果组织为哈希(Hash)方式,并在对实时数据的聚合结果进行哈希处理后,将得到的处理结果插入到历史数据的聚合结果对应的哈希结果中,即,可以在将实时数据的聚合结果通过Agg Filed做Hash处理后,插入到缓存的历史数据的聚合结果对应的Hash结果中。
再或者,当历史数据的聚合结果的Key的最上层为Local Sort时,可以将历史数据的聚合结果与实时数据的聚合结果组织为有序列表(Ordered List)或者有序哈希表(Ordered Hash Map)方式,进而可以将实时数据的聚合结果,通过插入排序的方式,插入到有序(Ordered)结果集中。
S505:将合并后的数据通过Doris的数据发送算子向执行引擎的上层进行反馈,以便输出最终的数据查询结果。
在本实施例中,通过步骤S504将历史数据的聚合结果与实时数据的聚合结果进行合并处理,得到合并后的数据后,进一步的,可以将合并后的数据通过Doris的Data Sender算子向执行引擎的上层进行反馈,以便输出最终的数据查询结果,即,在实现了历史数据的聚合结果与实时数据的聚合结果的合并处理后,进一步可以将处理结果流入Data Sender算子进行Shuffle操作,以便进入后面的计算过程,并通过Result Sender将最终的数据查询结果发送给Doris的FE端进行展示或者输出。
这样,通过上述处理,在进行数据查询时,只需要对实时数据进行聚合的计算,其他历史数据的RowSet计算结果从缓存中获取即可,从而可以省略大部分(如近80%)的读取和计算数量,提高了数据查询的并发效果。
需要说明的是,本申请实现数据查询的并发效果的提高的核心步骤就是通过预设缓存系统,将历史数据的聚合结果进行缓存,所以,为了保证并发效果,本申请还提出了各种对于预设缓存系统的维护方案,具体包括如下三种:
(1)缓存插入:每当有新的RowSet结果计算出来,则将其插入预设缓存系统之中,但如果出现缓存数据的数量较大,并且已经超过预设缓存系统(如内存)空间的预设阈值(可根据实际情况设定,本申请不进行限定,如可以取值为1/3)时,则不将该数据写入预设缓存系统,而是在下次计算时,依然采用读取磁盘的方式进行数据查询,并提示管理端增加预设缓存系统(如内存)的配置,以保证Doris对于数据的存储和查询性能。
(2)缓存置换:利用近期最少使用算法(Least Recently Used,LRU),当达到预设缓存系统中预置的过期时间和/或缓存容量时,删除预设缓存系统中最不频繁使用的历史数据的聚合结果,实现缓存的置换。
(3)缓存失效:在进行Doris的数据查询时,查询类型可能会有很典型的时间效应,例如,在当天早上8点以后,几乎就不会查询前天的数据,因此,在后台线程中,可以利用对应的SQL,将前天的缓存进行失效处理。
综上,本实施例提供的一种Doris的数据查询方法,首先获取Doris的存储引擎架构中底层算子中的历史数据,并将历史数据进行聚合计算,得到聚合后的底层算子中历史数据的聚合结果,然后,通过预设缓存系统,将历史数据的聚合结果进行缓存;接着,响应于对Doris的数据查询请求,对Doris中新插入的RowSet中的实时数据进行聚合计算,得到实时数据的聚合结果;进而,可以从预设缓存系统中获取历史数据的聚合结果,并将历史数据的聚合结果与实时数据的聚合结果进行合并处理,得到合并后的数据,再将合并后的数据通过Doris的数据发送算子向执行引擎的上层进行反馈,以便输出最终的数据查询结果。可见,由于本申请实施例是先将底层算子中历史数据的聚合结果进行缓存,这样,在对Doris进行数据查询时,只需要对新插入的底层算子中的实时数据进行聚合计算,其他历史数据的聚合结果直接从缓存中获取即可,从而能够减少IO和CPU计算资源,提高了查询并发效果。
第二实施例
本实施例将对一种Doris的数据查询装置进行介绍,相关内容请参见上述方法实施例。
参见图8,为本实施例提供的一种Doris的数据查询装置的组成示意图,该装置800包括:
第一计算单元801,用于获取Doris的存储引擎架构中底层算子中的历史数据,并将所述历史数据进行聚合计算,得到聚合后的底层算子中历史数据的聚合结果;
缓存单元802,用于通过预设缓存系统,将所述历史数据的聚合结果进行缓存;
第二计算单元803,用于响应于对所述Doris的数据查询请求,对所述Doris中新插入的底层算子中的实时数据进行聚合计算,得到实时数据的聚合结果;
合并单元804,用于从所述预设缓存系统中获取历史数据的聚合结果,并将所述历史数据的聚合结果与所述实时数据的聚合结果进行合并处理,得到合并后的数据;
反馈单元805,用于将所述合并后的数据通过Doris的数据发送算子向执行引擎的上层进行反馈,以便输出最终的数据查询结果。
在本实施例的一种实现方式中,所述缓存单元802具体用于:
通过预设缓存系统,按照键值对的方式,将所述历史数据的聚合结果进行缓存。
在本实施例的一种实现方式中,所述历史数据的聚合结果的键包含底层算子读取器,以及过滤器、列、本地聚合算子、排序算子中的至少一项。
在本实施例的一种实现方式中,所述历史数据的聚合结果的值的存储结构为结果块列表。
在本实施例的一种实现方式中,所述合并单元804具体用于:
当所述历史数据的聚合结果的Key的最上层为底层算子读取器、过滤器或列时,将所述历史数据的聚合结果与所述实时数据的聚合结果组织为列表方式,进行联合处理,得到处理后的数据;
或者,当所述历史数据的聚合结果的键的最上层为本地聚合算子时,将所述历史数据的聚合结果与所述实时数据的聚合结果组织为哈希方式,并在对所述实时数据的聚合结果进行哈希处理后,将得到的处理结果插入到所述历史数据的聚合结果对应的哈希结果中;
或者,当所述历史数据的聚合结果的键的最上层为排序算子时,将所述历史数据的聚合结果与所述实时数据的聚合结果组织为有序列表或者有序哈希表方式,并将所述实时数据的聚合结果,通过插入排序的方式,插入到有序结果集中。
在本实施例的一种实现方式中,所述装置还包括:
删除单元,用于利用最近最少使用算法,当达到所述预设缓存系统中预置的过期时间和/或缓存容量时,删除所述预设缓存系统中最不频繁使用的历史数据的聚合结果。
在本实施例的一种实现方式中,所述预设缓存系统为内存。
进一步地,本申请实施例还提供了一种Doris的数据查询设备,包括:处理器、存储器、系统总线;
所述处理器以及所述存储器通过所述系统总线相连;
所述存储器用于存储一个或多个程序,所述一个或多个程序包括指令,所述指令当被所述处理器执行时使所述处理器执行上述Doris的数据查询方法的任一种实现方法。
进一步地,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行上述Doris的数据查询方法的任一种实现方法。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到上述实施例方法中的全部或部分步骤可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者诸如媒体网关等网络通信设备,等等)执行本申请各个实施例或者实施例的某些部分所述的方法。
需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种Doris的数据查询方法,其特征在于,所述方法包括:
获取Doris的存储引擎架构中底层算子中的历史数据,并将所述历史数据进行聚合计算,得到聚合后的底层算子中历史数据的聚合结果;
通过预设缓存系统,将所述历史数据的聚合结果进行缓存;
响应于对所述Doris的数据查询请求,对所述Doris中新插入的底层算子中的实时数据进行聚合计算,得到实时数据的聚合结果;
从所述预设缓存系统中获取历史数据的聚合结果,并将所述历史数据的聚合结果与所述实时数据的聚合结果进行合并处理,得到合并后的数据;
将所述合并后的数据通过Doris的数据发送算子向执行引擎的上层进行反馈,以便输出最终的数据查询结果。
2.根据权利要求1所述的方法,其特征在于,所述通过预设缓存系统,将所述历史数据的聚合结果进行缓存,包括:
通过预设缓存系统,按照键值对的方式,将所述历史数据的聚合结果进行缓存。
3.根据权利要求2所述的方法,其特征在于,所述历史数据的聚合结果的键包含底层算子读取器,以及过滤器、列、本地聚合算子、排序算子中的至少一项。
4.根据权利要求2所述的方法,其特征在于,所述历史数据的聚合结果的值的存储结构为结果块列表。
5.根据权利要求3所述的方法,其特征在于,所述将所述历史数据的聚合结果与所述实时数据的聚合结果进行合并处理,得到合并后的数据,包括:
当所述历史数据的聚合结果的键的最上层为底层算子读取器、过滤器或列时,将所述历史数据的聚合结果与所述实时数据的聚合结果组织为列表方式,进行联合处理,得到处理后的数据;
或者,当所述历史数据的聚合结果的键的最上层为本地聚合算子时,将所述历史数据的聚合结果与所述实时数据的聚合结果组织为哈希方式,并在对所述实时数据的聚合结果进行哈希处理后,将得到的处理结果插入到所述历史数据的聚合结果对应的哈希结果中;
或者,当所述历史数据的聚合结果的键的最上层为排序算子时,将所述历史数据的聚合结果与所述实时数据的聚合结果组织为有序列表或者有序哈希表方式,并将所述实时数据的聚合结果,通过插入排序的方式,插入到有序结果集中。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
利用最近最少使用算法,当达到所述预设缓存系统中预置的过期时间和/或缓存容量时,删除所述预设缓存系统中最不频繁使用的历史数据的聚合结果。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述预设缓存系统为内存。
8.一种Doris的数据查询装置,其特征在于,所述装置包括:
第一计算单元,用于获取Doris的存储引擎架构中底层算子中的历史数据,并将所述历史数据进行聚合计算,得到聚合后的底层算子中历史数据的聚合结果;
缓存单元,用于通过预设缓存系统,将所述历史数据的聚合结果进行缓存;
第二计算单元,用于响应于对所述Doris的数据查询请求,对所述Doris中新插入的底层算子中的实时数据进行聚合计算,得到实时数据的聚合结果;
合并单元,用于从所述预设缓存系统中获取历史数据的聚合结果,并将所述历史数据的聚合结果与所述实时数据的聚合结果进行合并处理,得到合并后的数据;
反馈单元,用于将所述合并后的数据通过Doris的数据发送算子向执行引擎的上层进行反馈,以便输出最终的数据查询结果。
9.一种Doris的数据查询设备,其特征在于,包括:处理器、存储器、系统总线;
所述处理器以及所述存储器通过所述系统总线相连;
所述存储器用于存储一个或多个程序,所述一个或多个程序包括指令,所述指令当被所述处理器执行时使所述处理器执行权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行权利要求1-7任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211145425.2A CN115455031B (zh) | 2022-09-20 | 2022-09-20 | 一种Doris的数据查询方法、装置、存储介质及设备 |
US18/470,184 US20240095246A1 (en) | 2022-09-20 | 2023-09-19 | Data query method and apparatus based on doris, storage medium and device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211145425.2A CN115455031B (zh) | 2022-09-20 | 2022-09-20 | 一种Doris的数据查询方法、装置、存储介质及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115455031A CN115455031A (zh) | 2022-12-09 |
CN115455031B true CN115455031B (zh) | 2024-05-24 |
Family
ID=84305021
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211145425.2A Active CN115455031B (zh) | 2022-09-20 | 2022-09-20 | 一种Doris的数据查询方法、装置、存储介质及设备 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20240095246A1 (zh) |
CN (1) | CN115455031B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110399397A (zh) * | 2018-04-19 | 2019-11-01 | 北京京东尚科信息技术有限公司 | 一种数据查询方法和系统 |
US10909441B2 (en) * | 2017-06-02 | 2021-02-02 | Microsoft Technology Licensing, Llc | Modeling an action completion conversation using a knowledge graph |
CN113177049A (zh) * | 2021-05-13 | 2021-07-27 | 中移智行网络科技有限公司 | 一种数据处理方法、装置和系统 |
CN113760983A (zh) * | 2021-01-20 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 数据处理方法、系统及非瞬时性计算机可读存储介质 |
CN114168613A (zh) * | 2021-11-04 | 2022-03-11 | 广州广电运通信息科技有限公司 | 基于算子组合运算的审计分析方法、系统、装置及介质 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030220860A1 (en) * | 2002-05-24 | 2003-11-27 | Hewlett-Packard Development Company,L.P. | Knowledge discovery through an analytic learning cycle |
US20120232936A1 (en) * | 2011-03-11 | 2012-09-13 | Castlight Health, Inc. | Reference Pricing of Health Care Deliverables |
CN105488148A (zh) * | 2015-11-26 | 2016-04-13 | 上海晶赞科技发展有限公司 | 大数据的存储访问系统及方法 |
US11989096B2 (en) * | 2015-12-21 | 2024-05-21 | Ab Initio Technology Llc | Search and retrieval data processing system for computing near real-time data aggregations |
US10831509B2 (en) * | 2017-02-23 | 2020-11-10 | Ab Initio Technology Llc | Dynamic execution of parameterized applications for the processing of keyed network data streams |
WO2020227435A1 (en) * | 2019-05-07 | 2020-11-12 | Intel Corporation | V2x services for providing journey-specific qos predictions |
CN110502539B (zh) * | 2019-07-17 | 2022-07-01 | 苏宁云计算有限公司 | 一种olap动态缓存方法及装置 |
CN112115114A (zh) * | 2020-09-25 | 2020-12-22 | 北京百度网讯科技有限公司 | 日志处理的方法、装置、设备及存储介质 |
CN112507199B (zh) * | 2020-12-22 | 2022-02-25 | 北京百度网讯科技有限公司 | 用于对搜索系统进行优化的方法和装置 |
CN112633761B (zh) * | 2020-12-31 | 2023-09-19 | 中国平安财产保险股份有限公司 | 指标数据的查询方法、装置、设备及存储介质 |
US20220327123A1 (en) * | 2021-04-07 | 2022-10-13 | Pensando Systems Inc. | Methods and systems for flow logs using an internally indexed searchable object |
WO2022266999A1 (en) * | 2021-06-25 | 2022-12-29 | Intel Corporation | Digital edge services orchestration of awareness, on-demand, and event-triggered services |
CN113849531B (zh) * | 2021-09-23 | 2024-03-22 | 北京百度网讯科技有限公司 | 查询方法及装置 |
CN114491199A (zh) * | 2022-01-25 | 2022-05-13 | 浙江大华技术股份有限公司 | 一种数据检索方法、装置及系统 |
US20220224776A1 (en) * | 2022-04-01 | 2022-07-14 | Kshitij Arun Doshi | Dynamic latency-responsive cache management |
CN115098582A (zh) * | 2022-06-14 | 2022-09-23 | 北京三快在线科技有限公司 | 旅游服务质量监测系统、方法、存储介质及电子设备 |
-
2022
- 2022-09-20 CN CN202211145425.2A patent/CN115455031B/zh active Active
-
2023
- 2023-09-19 US US18/470,184 patent/US20240095246A1/en active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10909441B2 (en) * | 2017-06-02 | 2021-02-02 | Microsoft Technology Licensing, Llc | Modeling an action completion conversation using a knowledge graph |
CN110399397A (zh) * | 2018-04-19 | 2019-11-01 | 北京京东尚科信息技术有限公司 | 一种数据查询方法和系统 |
CN113760983A (zh) * | 2021-01-20 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 数据处理方法、系统及非瞬时性计算机可读存储介质 |
CN113177049A (zh) * | 2021-05-13 | 2021-07-27 | 中移智行网络科技有限公司 | 一种数据处理方法、装置和系统 |
CN114168613A (zh) * | 2021-11-04 | 2022-03-11 | 广州广电运通信息科技有限公司 | 基于算子组合运算的审计分析方法、系统、装置及介质 |
Non-Patent Citations (1)
Title |
---|
"大数据实时交互式分析";袁喆 等;《软件学报》;20200131;第31卷(第1期);第162-182页 * |
Also Published As
Publication number | Publication date |
---|---|
US20240095246A1 (en) | 2024-03-21 |
CN115455031A (zh) | 2022-12-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11169978B2 (en) | Distributed pipeline optimization for data preparation | |
JP5922716B2 (ja) | 個別にアクセス可能なデータユニットの記憶の取り扱い方法 | |
US11461304B2 (en) | Signature-based cache optimization for data preparation | |
CN111026727A (zh) | 基于日志文件的表维度检索数据同步方法、系统及装置 | |
TW201530328A (zh) | 爲半結構化資料構建NoSQL資料庫索引的方法及裝置 | |
US9262511B2 (en) | System and method for indexing streams containing unstructured text data | |
WO2013046667A1 (ja) | 情報システム、その管理方法およびプログラム、データ処理方法およびプログラム、ならびに、データ構造 | |
WO2024174305A1 (zh) | 一种基于预计算场景的查询处理方法及其装置 | |
CN116089414B (zh) | 基于海量数据场景的时序数据库写入性能优化方法及装置 | |
CN112965939A (zh) | 一种文件合并方法、装置和设备 | |
US20170109387A1 (en) | Cache optimization for data preparation | |
CN113672583B (zh) | 基于存储与计算分离的大数据多数据源分析方法及系统 | |
CN112527900A (zh) | 一种数据库读多副本一致性的方法、装置、设备及介质 | |
CN107577809A (zh) | 离线小文件处理方法及装置 | |
WO2024021808A1 (zh) | 数据查询请求的处理方法、装置、设备及存储介质 | |
CN115455031B (zh) | 一种Doris的数据查询方法、装置、存储介质及设备 | |
CN116821133A (zh) | 一种数据处理方法和装置 | |
CN116737753A (zh) | 业务数据处理方法、装置、计算机设备和存储介质 | |
CN116975052A (zh) | 数据处理方法及相关设备 | |
CN115438032A (zh) | 一种基于云计算的数据检索方法、装置及系统 | |
CN112711627B (zh) | 一种Greenplum数据库的数据导入方法、装置及设备 | |
CN114063931A (zh) | 一种基于大数据的数据存储方法 | |
CN113868249A (zh) | 一种数据存储方法、装置、计算机设备以及存储介质 | |
CN113742346A (zh) | 资产大数据平台架构优化方法 | |
CN116719821B (zh) | 一种并发数据插入Elasticsearch的排重方法、装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |