技术贴 | 深度解析 KaiwuDB 聚焦操作

news2025/1/18 3:16:05

在这里插入图片描述

一、AST 抽象语法树

执行一条简单的 SQL 语句 SELECT avg(b) FROM NATION GROUP BY b。NATION 是一张小表,只有 25 条记录;对第 2 列 b 进行取平均值的聚集操作。上述示例中的 SQL 语句经过分析器解析后得到 AST,如下图所示。
在这里插入图片描述

二、逻辑计划

将 AST 转换成一个树状结构的 Plan,称之为逻辑查询计划。抽象语法树中的每一个语法元素都被转换成一个查询逻辑单元,例如 scanNode, sortNode, groupNode 等。

例子中的逻辑计划很简单,就是扫描节点(Scan) 和聚集(Group By)。命令 EXPLAIN SELECT avg(b) FROM NATURE GROUP BY b;显示如下:
在这里插入图片描述

三、物理计划

(DistSQLPlanner).PlanAndRun 方法把逻辑计划转换为物理计划,其中递归调用 createPlanForNode 方法生成各个物理算子,交给执行器具体执行。生成物理计划过程是 KaiwuDB 根据底层 KV 数据的分布和预估返回数据集的大小,决定是否需要生成分布式执行计划,该例子为本地执行的物理计划。

在(DistSQLPlanner).PlanAndRun 方法中,逻辑计划会被转换为物理计划,并通过递归调用 createPlanForNode 方法生成各个物理算子,这些算子会被交给执行器具体执行;KaiwuDB 根据底层 KV 数据的分布和预估返回数据集的大小,决定是否需要生成分布式执行计划。

逻辑计划节点和物理计划节点并不是一一对应关系,但是这个例子中,逻辑计划中的 Scan 和 Group 分别对应物理计划中的 TableReader 算子和聚集算子。
在这里插入图片描述
四、执行
最后调用 (DistSQLPlanner).Run 方法执行物理计划。执行引擎采用火山模型(Volcano),每一层执行算子通过调用下一层的 Next 方法获取一条记录。

聚集分为两种情况,具体执行过程如下:

(1)HashAggregater

在 Hash Aggregate 的计算过程中,我们需要维护一个 Hash 表,Hash 表的键为聚合计算的 Group-By 列,若以平均数函数 avg 为例,值为聚合函数的中间结果 sum 和 count。在 Group-By 列 a,求 avg(b) 的例子中,求键为 Group-By 列 b 的值,即 sum(b) 和 count(b)。

计算过程中,只需要根据每行输入数据计算出键,在 Hash 表中找到对应值进行更新即可。


// Next is part of the RowSource interface.
func (ag *hashAggregator) Next() (sqlbase.EncDatumRow, *distsqlpb.ProducerMetadata) {
  for ag.State == runbase.StateRunning {
    var row sqlbase.EncDatumRow
    var meta *distsqlpb.ProducerMetadata
    switch ag.runningState {
    case aggAccumulating:
      ag.runningState, row, meta = ag.accumulateRows()
    case aggEmittingRows:
      ag.runningState, row, meta = ag.emitRow()
    default:
      log.Fatalf(ag.Ctx, "unsupported state: %d", ag.runningState)
    }

    if row == nil && meta == nil {
      continue
    }
    return row, meta
  }
  return nil, ag.DrainHelper()
}

其中 ag.runningState 为 aggAccumulating:是数据还没有读取完毕,没有算出最终的 agg 结果时的状态,当所有的数据读取完毕后将状态设置为 aggEmittingRows 输出结果。上面的计划就是一个典型的 Hashagg 的例子的逻辑计划。

(2)OrderAggregator 算子

OrderAggregate 的计算需要保证输入数据按照 Group-By 列有序。在计算过程中,每当读到一个新的 Group 的值或所有数据输入完成时,便对前一个 Group 的聚合最终结果进行计算。因为 OrderAggregate 的输入数据需要保证同一个 Group 的数据连续输入,所以 Stream Aggregate 处理完一个 Group 的数据后可以立刻向上返回结果,不用像 HashAggregate 一样需要处理完所有数据后才能正确的对外返回结果。

当上层算子只需要计算部分结果时,比如 Limit,当获取到需要的行数后,可以提前中断 OrderAggregate 后续的无用计算。当 Group-By 列上存在索引时,由索引读入数据可以保证输入数据按照 Group-By 列有序,此时同一个 Group 的数据连续输入 OrderAggregate 算子,可以避免额外的排序操作。如果想要走 Orderagg 则需要将 groupby 列建立索引:create index on nature(b),即可看到计划的转变。

在这里插入图片描述
以下是 Hashagg 和 Orderagg 聚集方法类图:

在这里插入图片描述

五、优化方法

为了提高聚集算子的执行效率,KaiwuDB 提出了如下两种并行聚焦方法:

(1)HashAggregater 并行

HashAggregater 并行的设计思路是并行计算后,将计算后的结果根据计算时产生的中间统计信息直接汇总 Hash,进行 finalworkers 的汇总。HashAggExec 处理所有聚合函数,根据 Aggragator 计划建造,调用 Next()时,从 Src 读取所有数据并更新 partialagfuncs 中的所有项,直到所有 gorutinee 完成。

具体修改思路为在上层 Processor 构建一个 Parallelworker 算子(原来 newAggregator 的地方),让它去构建 newAggregator ,即并行计算的 HashAggregator 子算子,构建几个依据设定好的并发度来构建,让构建好的 newAggregator 取 tablereader 的块去读去算,算好的结果不发送,而是传入管道中。最上层的 Parallelworker 算子遍历各个管道,将得到的所有数据再做一次 HashAggragator。最后再将所有结果发送。

(2)OrderAggregator 算子并行

OrderAggregater 并行的总体设计思路与 HashAggregator 基本相同。但因 OrderAggregator 已经有序,所以分发数据时需要分块按序分配给子算子。将计算后的结果根据计算时产生的中间统计信息直接汇总 Hash,按分配块的顺序直接进行 finalworkers 的汇总。其他部分与 HashAggregator 相同,最后再将所有结果发送。

下图是以 HashAggregator 为例的并行运算流程图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1154125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

末日危机小说,情节紧凑刺激,主角霸气拯救世界,绝对过瘾

今天小郑为大家精挑细选了三本让人欲罢不能的末日危机小说。这些书籍不仅在情节设计上扣人心弦,更在设定和人物塑造上别具一格。每一本都犹如一部惊心动魄的探险旅程,让你在享受阅读的乐趣的同时,也能感受到深刻的思考和震撼。 《全世界只有…

为什么要使用 Spring 框架?

Spring 是一个轻量级应用框架,它提供了 IoC 和 AOP 这两个核心的功能。它的核心目的是为了简化企业级应用程序的开发,使得开发者只需要关心业务需求,不需要关心 Bean 的管理, 以及通过切面增强功能减少代码的侵入性。从 Spring 本…

3D模型如何添加金属贴图?

1、金属贴图的原理 金属贴图(Metallic Map)是一种用于模拟物体表面金属性质的贴图技术。它通过控制光线在物体表面的反射和折射行为来实现对金属材质的模拟。金属贴图通常使用灰度图像来表示物体表面的金属度信息,白色表示完全金属&#xff…

基于若依的ruoyi-nbcio流程管理系统增加仿钉钉流程设计(三)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 这个部门主要是修改审批人的指定用户选择,这里就要采用ruoyi的用户体系。 这里主要是修改Pro…

高防CDN:保护现代网站的重要工具

在今天的数字时代,互联网已经成为人们生活的不可或缺的一部分。然而,随着互联网的普及,网络安全威胁也日益增多,对网站和应用程序的稳定性和可用性提出了严峻挑战。这就是为什么越来越多的网站选择采用高防CDN(Content…

软件评测师之数据结构与算法

目录 一.数据结构的概述二.线性表三.队列与栈四.数组五.树与二叉树二叉树遍历 六.堆七.图八.算法概述伪代码 一.数据结构的概述 所谓数据结构是指数据元素的集合或者数据对象的集合,以及元素之间的相互关系和构造方法。 数据结构分为逻辑结构和物理结构。逻辑结构…

【计网 Socket编程】 中科大郑烇老师笔记 (九)

目录 0 引言1 Socket是什么?是网络的一个层次?是一个协议?2 Socket编程2.1 TCP Socket编程2.1.2 基本概念2.1.1 一般步骤 2.2 UDP Socket编程 3 TCP Socket编程 实战 🙋‍♂️ 作者:海码007📜 专栏&#xf…

FlinkCDC系列:通过skipped.operations参数选择性处理新增、更新、删除数据

在flinkCDC源数据配置,通过debezium.skipped.operations参数控制,配置需要过滤的 oplog 操作。操作包括 c 表示插入,u 表示更新,d 表示删除。默认情况下,不跳过任何操作,以逗号分隔。配置多个操作&#xff…

塔望食观察丨从“一药难求”看国内退烧药品牌是怎样炼成的

随着新冠疫情防疫的全面放开,感染患者不断增多,市民在未知的恐慌中开启了囤药模式,药店中的“四类药”(退烧、止咳、抗病毒、抗生素类药品)被一抢而空,尤其是以退烧类药物更为短缺,以解热镇痛的…

银河麒麟V10SP1-20200711的mate-indicators进程占用内存过高的解决办法

目录 一、监控异常 二、进程异常 三、解决方法 (一)第一步:先查看操作系统版本 (二)第二步:下载相应版本的补丁包 (三)第三步:升级补丁、重启系统 1. 升级步骤 2. …

正常女人会感染HPV吗?北京劲松医院谭巍主任称取决于这些因素

正常女人会感染HPV吗?答案是肯定的。HPV(人乳头瘤病毒)是一种常见的性传播病毒,它可以通过性接触、接触感染者的个人物品等方式传播。因此,正常女性也有可能会感染HPV病毒。 首先,让我们了解一下HPV病毒。HPV病毒是一种小型DNA病毒&#xf…

windows版本redis如何设置后踢启动和重启计算机之后自动重启redis

1. 进入redis安装目录 D:\softwarePackage\redis\Redis-x64-3.2.100 2. 打开dos窗口 使用以下命令来启动 Redis 服务器,并使其在后台运行 redis-server --service-start 3. 设置重启自启动 打开服务界面 (windowsr 输入 services.msc) 找…

方差的性质

参考了百度百科-验证,自己推导了下,加深印象。 方差的定义 方差写作Var(X),它表示随机变量值和它的期望值之差的平方的期望。 对于离散型随机变量X,方差的计算公式为: 其中,E表示期望的意思。 对于连续型…

MySQL---数据用户管理和索引

DDL:CTEATE DROP ALTER dml:对数据进行管理 update insert into delete truncate dpl:查询语句 select dcl:权限控制语句 grant revoke 数据库用户管理 创建用户 修改用户权限 删除用户 grant要在终端执行 创建用户 cr…

4.多层感知机-2简化版

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 多层感知机一、感知机1、感知机2、训练感知机3、图形解释4、收敛定理5、XOR问题6、总结 二、多层感知机1、XOR2、单隐藏层3、单隐藏层-单分类4、为什么需要非线性激活函数5、Sigmoid函数6、Tanh函数7、ReLU函数8、多类分…

抽奖之星软件,可设置中奖几率概率

抽奖之星简介 抽奖之星 (www.wsgsoft.net/plds/) 可控制抽奖/抽签的结果。 包括内定、中奖次序、限制范围、修改几率、排除、分组等,详情可安装软件试用。 设置中奖几率 界面如下。界面右边,可选中一些名单,并设置其几率(N倍&a…

HEC-RAS 1D/2D水动力与水环境模拟技术

水动力与水环境模型的数值模拟是实现水资源规划、环境影响分析、防洪规划以及未来气候变化下预测和分析的主要手段。然而,一方面水动力和水环境模型的使用非常复杂,理论繁复;另一方面,免费的水动力和水环境软件往往缺少重要功能&a…

建筑建材物料展示预约小程序的作用

建材物料在工程和家庭中的应用度非常高,涵盖服务与产品,如墙面翻新、刷墙、墙纸等,所谓专业事专业人做,因此建筑建材服务商家需要不断拓展客户进行产品/服务的销售。 而在市场拓展方面,由于当今主流需求者年轻化&…

基于STC12C5A60S2系列1T 8051单片机可编程计数阵列CCP/PCA/PWM模块的PWM(脉冲宽度调制)应用

基于STC12C5A60S2系列1T 8051单片机可编程计数阵列CCP/PCA/PWM模块的PWM(脉冲宽度调制)应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍STC…

超融合数据库:解锁全场景数据价值的钥匙

前言 近日,四维纵横对外官宣已完成上亿元 B 轮融资。作为超融合数据库理念的提出者,三年来 YMatrix 持续在超融合数据库领域中保持精进与迭代,对于超融合数据库在行业、场景中的应用和理解也更为深刻。 本篇文章,我们将基于 YMa…