国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter

2024-06-24 08:52

本文主要是介绍国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter

今年5月份GreenPlum官方将GitHub仓库代码全部删除,各个分支的issues和bugs讨论等信息全部清除,仅将master分支代码进行归档。对于国内应用GPDB的用户来说,这是一个挑战性事件,对与后期维护、升级等都变得非常困难。有幸HashData开源了基于GP衍生版本CloudberryDB版本,对国内GP用户来说是一个及时的福音。

今天介绍下CloudberryDB中的Runtime Filter。它实现了两种runtime filter方式。一种是:新增了RuntimeFilter算子,在Hash Join算子的探测端添加RuntimeFilter算子,当然这就导致仅在RuntimeFilter算子实现提前过滤,并未将filter下沉到SeqScan算子或者TableAM层,仍旧存在不必要的算子计算。另一种是将runtime filter下推到SeqScan或者TableAM,尽量能够提前终止算子执行。后一种方式目前仅处于开发阶段,并未release,期待该功能尽快完善。

1、RuntimeFilter算子方式过滤

045902f40ee015cc5105a3a9f1fde737.png

从上面执行几乎也可以看出,仅在Hash Join的探测端挂载了一个RuntimeFilter算子。首先看下该算子是怎么执行的。

1.1 结构体之间关系

c47a56757e2098e1560bdf137fb24728.png

主要关系是:HashJoin的运行时结构体HashJoinState的JoinState js即PlanState ps中有左右子节点的执行计划节点。左子树为探测端结构体RuntimeFilterState,执行运行时过滤的动作;右子树为HashState节点,rfstate为RuntimeFilterState地址。由此保证内表构建时,构建的bloom bitmap可以关联到探测端扫描外表时判断外表值是否在bloom bitmap中。

1.2 具体流程

24462ac9275a6c6f619fb86838bd8b44.png

1)MultiExecPrivateHash构建完hash表后,标记build_finish为true,确保RuntimeFilter节点执行时可以进入布隆过滤

2)MultiExecPrivateHash构建hash表时,调用ExecHashGetHashValue将内表值的join字段hash后放到bf中

3)ExecRuntimeFilter执行时,判断外表值是否在bf中,若在则将其输出,若不在则过滤掉,不进入join

4)可以看到,这种运行时过滤方式,仅将过滤下沉了一个执行节点,底层节点的扫描等多层执行计划节点并没有最优地避免执行,效果也不会太好。

2、filter下沉到SeqScan的方式

我们看下另一种实现方式,将布隆过滤下沉到SeqScan底层节点,这种方式比较彻底,可以尽最大可能减少不必要节点执行。

该patch可查看:

https://github.com/cloudberrydb/cloudberrydb/pull/405

Hash执行时构建布隆过滤器的流程如下图所示:

32118e1a2c3e04338275549132e831ac.png

1)通过gp_enable_runtime_filter_pushdown配置项开启该功能

2)BuildRuntimeFilter函数用于构建布隆过滤器,对于每个外表值都将其构建到af->bf中

3)当内表值都构建到hash表,并完成布隆过滤器的build后,通过PushdownRuntimeFilter函数将布隆过滤器通过scankey的形式下推到SeqScan节点的filters链表中。af->target即为SeqScan节点。

SeqScan节点执行时即可通过布隆过滤器进行过滤,流程如下图所示:

c5c19c6e04cdfc00befb52cee64b3e6c.png1)对于表的每行记录都通过PassByBloomFilter进行判断,看它在没在bloom bitmap中,若在就向上层节点推出记录,否则过滤掉,扫描下个记录。由此可见,在hash join中将join条件过滤提前到了SeqScan位置,大大减少了中间算子的计算。

2)还需要考虑一个问题:如何将HashJoin的Hash子节点的布隆过滤器和下沉对象SeqScan关联起来。

c109272170eef176fc3991b465111704.png

1)HashJoin算子初始化时ExecInitHashJoin通过CreateRuntimeFilter函数构建布隆过滤器和下沉位置的关系

2)通过FindTargetAttr函数遍历HashJoin的左子树,找到SeqScan节点,该节点即为下沉到的对象

3)HashState中的filters链表存储AttrFilter *af。af->bf和af->target构成了布隆过滤器和SeqScan节点的关系。

由此,可见这种方式实现原理上比较完善,可以尽可能的减少中间算子的计算。当然,对于CloudberryDB来说,该功能还未release,期待尽早release。

这篇关于国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089682

相关文章

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

数据库期末复习知识点

A卷 1. 选择题(30') 2. 判断范式(10') 判断到第三范式 3. 程序填空(20') 4. 分析填空(15') 5. 写SQL(25') 5'一题 恶性 B卷 1. 单选(30') 2. 填空 (20') 3. 程序填空(20') 4. 写SQL(30') 知识点 第一章 数据库管理系统(DBMS)  主要功能 数据定义功能 (DDL, 数据定义语

给数据库的表添加字段

周五有一个需求是这样的: 原来数据库有一个表B,现在需要添加一个字段C,我把代码中增删改查部分进行了修改, 比如insert中也添入了字段C。 但没有考虑到一个问题,数据库的兼容性。因为之前的版本已经投入使用了,再升级的话,需要进行兼容处理,当时脑子都蒙了,转不过来,后来同事解决了这个问题。 现在想想,思路就是,把数据库的表结构存入文件中,如xxx.sql 实时更新该文件: CREAT

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

SQL Server中,添加数据库到AlwaysOn高可用性组条件

1、将数据添加到AlwaysOn高可用性组,需要满足以下条件: 2、更多具体AlwaysOn设置,参考:https://msdn.microsoft.com/zh-cn/library/windows/apps/ff878487(v=sql.120).aspx 注:上述资源来自MSDN。

SQL Server中,用Restore DataBase把数据库还原到指定的路径

restore database 数据库名 from disk='备份文件路径' with move '数据库文件名' to '数据库文件放置路径', move '日志文件名' to '日志文件存放置路径' Go 如: restore database EaseWe from disk='H:\EaseWe.bak' with move 'Ease

我与Bloom filter

1 海量网页判断用Bloom Filter 面试的时候,一个面试官问我说:“有一个网络爬虫,爬虫程序会不停地爬取页面上的每一个网页,并把爬取后的网页给存储起来,那么爬虫如何判定现在在爬的网页有没有被爬过。” 我当时卡住了半天回答不上来。 面试官给我说用Bloom Filter。 Bloom Filter把爬取过的网页映射到Bloom Filter内,如果再爬取到该网页,Bloom Filt

数据库原理与安全复习笔记(未完待续)

1 概念 产生与发展:人工管理阶段 → \to → 文件系统阶段 → \to → 数据库系统阶段。 数据库系统特点:数据的管理者(DBMS);数据结构化;数据共享性高,冗余度低,易于扩充;数据独立性高。DBMS 对数据的控制功能:数据的安全性保护;数据的完整性检查;并发控制;数据库恢复。 数据库技术研究领域:数据库管理系统软件的研发;数据库设计;数据库理论。数据模型要素 数据结构:描述数据库