简介:PostgreSQL的AnalyticDB(以下称为ADB PG)是PB -Level MPP架构云云本机数据仓库。从ADB PG架构设计的角度来看,本文讨论了ADB PG中的runnime filter实施方案,并介绍了ADB PG的实现方案ADB PG动态连接过滤器功能技术细节的技术细节基于BLOOM过滤器。
作者|Yuyi
来源|阿里的开发人员公共帐户
近年来,数据库系统服务的数据量已在索引级别增长,与此同时,处理的业务需求变得越来越复杂,实际时间需求越来越高。单元数据库系统具有逐渐无法满足现代数据库服务要求,因此分布式数据库/数据仓库已越来越多地使用。
在真实时间分析(OLAP)领域,分布式数据仓库可以为系统的分布特性提供全面发挥,并且复杂的OLAP任务分解为系统中的所有节点,以计算和改善分析性能;分布式数据仓库也可以更方便地方便,可以更方便地方便地扩展系统节点,以满足增加用户数据量的需求。能力的扩展带来的成本绩效正在下降。
这种现象的原因之一是,表连接(JOIN)是数据库业务中使用最广泛的运算符之一,依赖于分布式计算中系统节点之间的数据交互;当分布式簇的尺度增加时,数据相互作用的Nodesthe成本将大大增加。在这种情况下,对分布式系统的网络处理功能进行了高度测试,并且用户的数据表设计和SQL编写功能依赖用户的数据表设计来减轻数据交互压力。
为了解决这个问题,行业中的不同分布式数据库系统提出不同的加入运行算法。问题。从ADB PG体系结构设计的视角,本文讨论了ADB PG中运行时过滤器的实现方案,并介绍了基于Bloom滤波器的ADB PG Dynamic Join滤波器功能技术细节的技术细节。
ADB PG是基于开源项目GreenPlum构建的。它扩展了单个机器PostgreSQL。多个PG服务同时在单个或多个服务器上激活,并形成一个群集,以分布式形式提供数据库服务。
ADB PG将每个PG服务称为一个细分市场,并介绍了slice.slice的概念,用于求解分布式系统中的网络结构。当数据库涉及MPP多阶段计算(例如Hash Join的左和右表的JOIN密钥,对相同的哈希分布都不满意的JOIN密钥,则需要通过网络传输分配JOIN密钥。ADBPG削减了前面网络传输的后阶段分为不同的切片。以下是ADB PG群集的示意图。
如何解决此架构下大型群集下方加入的性能问题?在行业中解决此问题的一个计划是介绍网络代理节点。同一台计算机中的细分市场将网络数据发送到本地代理节点,并且执行代理节点和其他机器上的代理节点以减少网络拥塞。该解决方案挑战了ADB PG体系结构,并且从根本上不会减少加入的网络洗牌。为了减少从JOIN的root计算出的数据量,ADB PG设计并实现JOIN RUNTIME FILTER解决方案。
运行时过滤器的目的是在加入计算之前筛选一部分数据,并需要“载体”过滤器实现。在组合ADB PG的架构设计,存储层和网络层后,我们选择将Bloom Filter用作运行时过滤器的实现形式。
Bloom滤波器是一种概率数据结构,通常用于确定元素是否属于集合。Bloom滤波器的优点是其空间效率非常高,并且计算性能通常很高;缺点是存在正错误判断的率误报误报,但是没有假否定的否定,也就是说,Bloom滤波器确定集合的结果不仅是正确或错误。而是“可能的true”或“ true”或“ false”。
上图是标准布鲁姆过滤器的计算思想的标准图。其中的0和1是收集信息的位数组,即每个位都有稍微存储。上述x,y和z中插入的三个元素表明,使用了三种哈希算法来计算该算法带有三种哈希算法的位数组中的哈希值。以下是确定元素W是否属于集合。由于三个哈希值之一没有放在位数组中,因此可以肯定的是W不是集合。
通常由以下参数描述Bloom过滤器:
M ---绽放过滤器位数组
k ---哈希功能编号k
P ---错误判断的率
n ---绽放过滤器插入元素编号
我们省略了派生过程,并直接给出每个参数的关系:
当花朵过滤器足够大时,可以将其简化为
设计块滤波器时,可以根据实际的计算方案提前确定N和M。以上公式可以被视为具有自变量和p(k)的函数p(k)。为了获得最低错误判断的率P.根据上述公式,当P是次要值时,可以计算相应K的值:
Bloom过滤器的参数设计
如何将Bloom Filter应用于ADB PG联接过滤和优化,我们必须首先设计Bloom Filter的参数。对于Bloom Filter插入的元素的数字n,您可以直接使用执行中获得的右表上的加入数量计划;为了获得理想的过滤率,降低错误判断的速率P,PG高版本的Bloom Filter的想法使用PG高版本的Bloom Filter the Design bloom filter尺寸字节是N:M:M达到1:16的2倍。在此设计下,您可以按照下图计算k(k)函数的最佳k值。当k = 11时,您可以获得最小的p = 0.046%
k = 11表示,对于每个元素,需要计算11个哈希值以插入Bloom滤波器位数组。这对于ADB PG是不可接受的。建造花朵过滤器的成本大大太大。建造花朵过滤器时,ADB PG将考虑全面的错误判断率和哈希计算,并选择适当的K值。
在确定构建块文件的基本原理之后,下一步是项目实现问题。BloomFilter的项目实现非常简单有效。通常,我们可以直接使用BITSET数组来创建Bloom过滤器,并通过位操作实现插入和搜索Bloom滤波器。下面的图是计算示意图,可将元素插入Bloom Filter Bitset阵列中。
完成ADB PG哈希(Join)的Bloom滤波器设计后,我们将讨论如何将BLOOM过滤器应用于JOIN的运行时过滤器。ADBPG将根据Bloom Filter将运行时过滤器命名为动态JOIN滤波器。
1动态联接过滤器实现方法
由于ADB PG优化器通常选择右表作为小表,左表用作大表格,因此ADB PG使用动态联接滤波器的设计特性来过滤一条路,也就是说,仅适用于右表过滤左表。左表在右表上过滤;同时,我们还可以使用动态连接过滤器将其灵活地应用于左表链接上不同操作员的过滤器。
由于哈希联接的不同形式,可以将动态联接过滤器的实现汇总为两种形式的本地联接和MPP联接,并进一步区分运行时过滤器推动操作员的能力。
本地加入
本地加入是指符合相同哈希分布的左右表的联接密钥,也无需进行调整数据。在这次,哈希,哈希联接和左侧扫描在同一切片内。在相同的过程中,我们可以将Bloom过滤器直接传递到过程空间中的Bloom滤波器到左扫描操作员进行过滤和输出。
MPP加入
MPP加入是指对相同的哈希分布不满意的左右表的联接密钥,并且需要在JOIN密钥随机数据中定位。相同的切片,因此,根据基本原理,您只需要考虑左侧的洗牌状况,即,左表就存在于哈希(Hash)前面。
MPP联接中的另一种情况是,这不是左表下方的简单扫描,并且没有相关信息可以将Join Join Key的Bloom过滤器扫描。运动正面以减少运动发件人的数据。
2 Bloom滤波器网络传输
动态联接滤波器在每个计算节点上建立一个本地Bloom滤波器。每个计算节点都需要收集所有其他节点的BLOOM过滤器,并且在本地形成完整的Bloom滤波器后,它可以开始过滤计算。我们将Bloom Filter的接收和接收分配:完整的传输和位传输。在发送之前,我们可以判断两种模式的数据量量,并适应具有少量数据的模型。
Bloom滤波器全量传输
Bloom滤波器位传输
接下来,我们测试ADB PG动态连接过滤器的性能。测试群集是ADB PG公共云的一个示例。使用TPC-H 1TB测试集(比例= 10000)进行测试,并打开了动态联接滤波器功能的功能比较执行的测试性能。下图显示了TPC-H不同性能的查询测试结果:
可以看出,动态连接滤波器在Q5,Q8,Q9和Q17上实现了巨大的性能改进。其中,Q17的优化性能是最好的,并且执行时间优化为8。Q10稍微撤退:10s返回到12s,因为Q10的联接键完全匹配。动态连接滤波器无法提前动态过滤,优化器无法准确估算成本,该计划仍然使用Dynamic.join filtr.join filtr.ind,由于在优化器下的推动规则,因此Q20也未通过动态连接过滤器选择。实际上,Q20与Q17相似,该Q17更适合使用动态联接滤波器。为了解决这些问题,ADB PG优化器相关的功能仍在开发中。
动态连接过滤器使用ADB PG体系结构,存储层和网络层的特征,并将Bloom过滤器用作JOIN RUNTIME FILLE滤波器的实现形式,并在TPC-H测试中实现了显着的性能改进。未来,我们将从以下方面进行进一步的开发和优化,以增强客户的体验:
原始链接
本文是阿里巴巴云的原始内容,未经许可就无法重印。
原始:https://juejin.cn/post/7098148581382553637