暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

人大金仓数据库KingbaseES 聚集算子介绍

原创 数据猿 2023-12-27
209


关键字:

KingbaseES、聚集算子、聚集函数、人大金仓、KingbaseES

概述

在KingbaseES的使用过程中,我们经常会遇到需要对数据库查询结果进行数理统计方面的难题,而数据库作为数据的载体,它不仅提供了我们对数据的存取操作,也具备对所查询数据进行分析处理的能力,而这一能力在KES中就表示为聚集算子也被称为聚合函数。接下来本文将从使用和基本原理的角度来介绍聚集算子。

聚集算子简述

常见的聚集算子的实现一般有两种,一种是基于Hash表实现的(hash聚集),另一种则是基于排序实现的(分组聚集),这两种方法通常都是针对具有group by的查询而言的,对于没有group by的查询我们只需要对表进行以便扫描,并对每个元组进行累积计算操作即可,这种情况就是朴素聚集,而如count,sum等这样的函数就被称为聚集函数。

在KingbaseES中,聚集函数一般的计算最多被分为三个步骤,分别是转换函数、合并函数和后处理函数,而合并函数只有在并行聚集的过程中才会用到,那么接下来我们简单的介绍一下聚集函数中的两大核心模块:转换函数和后处理函数。

转换函数与后处理函数

一个朴素聚集的过程其本质就是利用对元组的遍历并累计的方式,这一过程涉及到对元组数据的读取操作,这个读取操作根据不同的优化模型具备不同的处理方式,我们这里就以较为简单的火山模型来描述这一个过程:通过对下层算子中一条条的读出元组,随后聚集算子通过将每个元组聚集所需的信息累积到一个状态转换变量中,而累积的过程就是将新元组的值和累积状态进行某种运算,这个运算的过程就是转换函数。而最后当我们将整张表扫描完成后,我们有了所有元组数据的一个累积转换状态,而一般的有些聚集算子需要对累积状态进行最后进一步的处理,这一步的处理就是后处理函数,因此对于后处理函数来说并不是每个聚集算子都需要去执行,它们的流程图大致如下所示:


在上面的流程图中,基本上介绍了整个朴素聚集的一般流程,最终数据库的执行器会将聚集的结果返回给上层算子。

合并函数与并行聚集

既然已经完成了一个聚集算子的基本实现,那么接下里我们进一步介绍聚集算子中的合并函数,并行聚集的思想就是对底层所需的依赖进行并行扫描,聚集算子本身就是一个CPU密集型的算子,如果聚集是基于单进程实现的,那么就无法利用CPU的多核架构能力,可能导致结果就是执行过程阻塞在CPU上,即使还没有达到IO设备的性能瓶颈,这也就无法提升整个执行过程的速度。

那么数据库对此的解决方案就是实现并行聚集,并行聚集也包括为两个部分,分别是下层的顺序扫描算子与上层的聚集算子,在并行聚集中上层算子被划分为两阶段执行,这是与朴素聚集所不同的地方,分别为部分聚集和最终聚集这两个阶段,在KES中并行聚集并不是利用并行扫描对元组进行直接收集,而是利用每个工作进行对自己负责的一步元组进行一次聚集计算得到一个部分聚集的结果,然后再将部分聚集的结果汇总到Leader进程中,由Leader进程进行最终的聚集,这样每个工作进程都可以最大化的利用系统CPU资源。对于聚集算子来说,需要统计计算的是整体数据趋势分析,而部分计算的结果显然是不准确的,因此在并行聚集中必须进行最终聚集,在部分聚集的时候,我们是不能执行后处理函数的,需要对分区中进行聚集算子中执行后处理函数进行判定。

聚集算子的使用

在上面的章节中,我们简单介绍了KES中聚集算子的基本计算原理,那么接下来我们通过实际的案例来使用聚集算子:

首先是对朴素聚集中无需后处理函数的聚集算子进行实例使用:

这类型的聚集算子的标准典范就是count聚集函数,这个聚集函数的功能是用于将数据库中行进行统计计算,并且会随着表中的更新更新结果集,其具体用例如下所示:

其次是对朴素聚集中需要后处理函数的聚集算子进行实例使用:

这类型聚集算子的标准典范就是avg聚集函数,这个聚集函数的功能是用于将数据库中表中列的值进行统计求均值计算,并会随着表中的更新更新结果集,其具体用例如下所示:

总结

KingbaseES中仍然具备许多的功能与特性值得我们去探索,本文从聚集算子的基本原理以及使用角度介绍了KES中聚集算子(聚集函数)的执行逻辑以及其设计过程,通过简要的流程图说明了聚集算子从下层算子到上层算子以及到最后的执行器中数据库中存取数据元组的数据处理过程。

参考资料

提供该题目相关内容在产品手册中可以系统学习的位置,例如:

《KingbaseES数据库性能调优指南》

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论