GBase 8a MPP Cluster集群核心特性有:支持联邦架构部署,采用新的加载架构,支持在线扩展,采用多分片和副本灵活部署的机制提升可用性和降低木桶效应,高效的节点替换,提升了检索效率,大表连接,大表分组,数据重分布的执行性能。
这次,且听我们细细说来!
集群规模
大规模集群实现的核心功能如下:
-
实现非对称部署,gclusterd和gcware部署在同一台机器上,gnode单独部署。gclusterd和gcware节点最多支持64台,gnode节点至少支持300台,数据量大于30PB。
-
一个物理节点可支持多个主分片,数据的Hash分布和主分片(虚拟节点)对应,虚拟节点和物理节点的对应关系可调整。
新集群加载服务
大规模集群加载实现的核心功能如下:
-
支持多加载机
-
支持多个数据源对一个表的同时加载
-
支持加载表状态的监控
-
支持以SQL接口方式进行加载
-
支持加载的高可用, 加载接入点gcluster异常后,能够支持加载的failover
-
支持加载对错误数据的溯源功能
-
支持GBK和UTF8字符编码格式的加载
-
支持多种协议的数据获取方式
-
支持多种数据格式
-
支持加载程序的性能随着节点数的增加而线性提升
数据复制服务
-
支持按数据块复制;
-
主分片写入,副本复制,由复制模块保障主备一致性;
-
集群写入性能1倍以上提升。
扩展性增强
大规模集群在线扩容实现的核心功能如下:
-
扩容,缩容可按照实例,指定库,指定表的方式执行。
-
扩容,缩容按照SQL接口方式执行。
-
扩容,缩容的SQL按照异步的方式来执行,后台启动任务执行,满足表的扩容和缩容条件时执行该操作,不满足时跳过,循环检查直至满足条件时就执行,直至表扩容和缩容成功。
-
扩容,缩容不中断现有业务,需要在线完成扩容和缩容,在线扩容和缩容期间对非扩容和缩容的表允许执行查询,加载,DML,DDL;对正在扩容的表只允许执行查询,加载和追加(insert values, insert select),对正在扩容或者缩容的表执行update, delete, merge或者DDL操作会被阻塞,直到该表扩容完成。对正在执行update, delete, merge或者DDL操作的表执行扩容或者缩容将会被阻塞,直到update,delete,merge或者DDL完成。
-
扩容,缩容按照异步执行方式当执行节点的gcluster出现异常后,由接管的gcluster可进行断点续传的方式(只有按照重分布方式扩容和缩容的表才能进行续传)再次从失败的状态继续执行。
-
扩容的数据重分布支持扩容时所有数据进行重分布,数据不需要重整(要求是磁盘空间足够)。
-
扩容状态可监控,可查询系统表获得扩容状态。
-
在集群状态是非lock状态下,稳定扩容、缩容,保证了数据正确性。
-
性能不低于执行create select的性能。
-
支持现有版本在节点部署一个主数据分片的情况下,通过数据hash重分布的方式实现集群的在线扩容或者缩容。
-
针对节点部署多个主数据分片的情况下,支持直接搬移数据文件的方式实现集群的在线扩展(此种方式对正扩容或者缩容的表只允许读),并支持集群一个节点包含一个主数据分片的方式扩展到一个节点包含多个主数据分片的方式。
提升检索效率
1.优化并行逻辑,消除和减少并行操作中的串行部分,充分利用并行运算
2. 细化代价评估方法,保证过滤效果明显的操作先执行
3. 去掉重复性的new/delete、对象构造、析构操作,简化耗时操作,提升性能
提升数据传输性能
select into server功能是随着GBase集群产品的发展创造并实现,目前广范用于MPP集群。其基本的功能是实现节点间的数据传输,主要用在以下几种场景中:
1) cluster执行过程中的数据汇总、拉复制表,以及动态hash重分布;
2) 扩容或缩容中的数据重分布;
3) 以及dblink等集群间数据传输等场景;
对现有的select into server进行改进。主要集中在处理流程优化、更大范围的并行化,以及资源的有效利用方面。统一并进一步改进了节点间的数据传输服务,提高了数据传输性能(至少1倍以上),并支持传输服务数据直接落地,可用于数据复制、扩容、集群拉临时表等各种场景,大大提升了集群各类操作的性能。
大表关联
GBase8a原hash join机制,随数据量增长,耗时会呈幂函数增长,而不是线性的。如join两边的数据量都增长为原来的N倍,则执行时间会趋近于原来的N*N倍。这是因为,traverse表建hash的时间和扫描match的时间都增长N倍,而二者是乘积的关系(traverse表建的每个hash表都对应一次match表的全表扫描)。
大表hash join进行优化处理,可以先对traverse表和match表同时进行hash划分,再分别对同组的traverse表和match表做join,最后将各组的join结果汇总。在进行哈希划分时,使hash buffer能够容纳根据划分后traverse表分片所建的哈希表。这样,在组内做join时,traverse表分片只需建一次哈希表,match表分片也只执行一次哈希匹配。这就是One-Pass的含义。One-Pass Hash Join算法极大地提升了join效能,使join耗时随数据量增长呈线性增长趋势,而非优化前的幂函数增长趋势。
大表分组