GBase 8a V9与V8差异对比
集群架构
集群架构上,GBase 8a MPP Cluster V9.5版本支持兼容模式,可以不创建虚拟子集群,实现对V8.6版本的完全兼容;支持数据库集群从V8.6版本平滑升级到V9.5版本。
SQL语法及开发接口上,V9.5版本与V8.6版本在SQL语法无差异、开发接口完全兼容,应用程序无需修改或只需要进行少量的调整,如:
在虚拟集群架构下需要增加命名空间(对一个表的访问从database.table变为vc.database.table),或指定默认VC(虚拟子集群);兼容模式下不存该问题。
新增功能
1.虚拟集群
虚拟集群中包含多个VC,各VC在整个集群范围内独立运行,共享统一的入口。权限许可的情况下,各虚拟集群间可以相互访问。
- 统一管理,在集群内部进行虚拟集群划分,在增强集群的扩展能力同时,提供统一的管理视图,集群可以达到千节点规模。
- 业务隔离,虚拟集群对集群进行垂直资源隔离,在实际的业务场景中,可以实现不同业务的资源物理隔离。
- 统一入口,用户选择Coordinator cluster中的任意一个Coordinator node作为集群入口。Coordinator node根据用户确定默认VC(coordinator节点存储了所有VC的database和表的元数据)。
- 透明访问,虚拟集群提供统一的访问入口(能够实现对仓库和集市的统一访问入口),应用对多个物理集群的访问对应用是透明的,对应用来说就是一个统一的集群。
2.镜像集群
虚拟集群的镜像功能有以下特点:
- 镜像表数据是主表数据的实时备份,对主表的修改将实时同步到镜像表。
- 高可用:主表有了镜像关系后,对于SELECT模块相当于主表多出了分片备份。SELECT模块可以利用多出的备份提升SELECT高可用能力。
- 灾备:支持同城异地部署集群。
- 支持以库为单位创建、删除镜像关系。库下所有表都将创建镜像。库下所有函数、存储过程和视图都会同步在目标库下创建。
新增功能-- 数据安全——数据动态脱敏
动态数据脱敏并不会真正改动表中存储的实际数据,只是在查询的时候应用该特性控制查询返回的数据。
动态数据脱敏是否启用受当前用户权限影响,拥有unmask权限的用户不受脱敏规则影响可以访问实际数据,没有unmask权限的用户受脱敏规则影响只能访问到脱敏后的数据。
语法格式:
1 | MASKED WITH(FUNCTION = ‘TYPE(参数)’) |
动态数据脱敏支持四种参数TYPE数据脱敏函数,如下:
1、 默认脱敏default
2、 随机脱敏random
3、 自定义脱敏partial
4、 哈希脱敏sha
5、 用户指定数据脱敏的起止位置
创建表时指定脱敏:
1 | Create table t(a int masked with (functon=default()), b varchar masked with(functon = partial(3,’XXX’,1), c varchar(200)); |
Alter添加、修改、删除mask属性
添加:Alter table t alter c masked with(function=’sha()’);
修改:Alter table t alter c masked with ( function = ’partial(1,’XXX’,1));
删除:Alter table t alter a drop masked;
脱敏属性权限,有unmask权限的用户可以忽略mask属性获取原始数据
1 | Grant unmask to user; |
新增功能-- 多列哈希分布
实际应用中有使用多列作为主键的情况,针对这种情况,表迁移到8a之后,可以使用这些主键的列作为HASH列。多列HASH分布可以更好的将数据均匀的分散到各个data节点。
新增功能--分区表
分区是数据库领域中处理大数据量的一种有效的技术手段,通过使用分区,可增强数据库的可用性、降低维护成本、均衡磁盘I/O,并有效改善查询性能。
分区表是根据一定规则,将数据库中的一张表分解成多个更小的容易管理的部分,从逻辑上看,只有一张表,但底层却是由多个物理分区组成。
分区表包括普通分区表和子分区表。表分区的总个数为64个。
目前常用的分区方法有RANGE分区、LIST分区、KEY分区、HASH分区,在分区的管理上目前支持创建分区、添加分区、删除分区。
RANGE分区表和LIST分区表支持子分区,子分区的分区类型可以为[LINEAR] HASH和[LINEAR] KEY。
功能优点:
1、 与单个磁盘或文件系统分区相比,可以存储更多的数据。
2、 对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据。相反地,在某些情况下,添加新数据的过程又可以通过为那些新数据专门增加一个新的分区,来很方便地实现。
3、 一些查询可以得到极大的优化,这主要是借助于满足一个给定WHERE语句的数据可以只保存在一个或多个分区内,这样在查找时就不用查找其他剩余的分区。因为分区可以在创建了分区表后进行修改,所以在第一次配置分区方案时还不曾这么做时,可以重新组织数据,来提高那些常用查询的效率。
4、 涉及到例如SUM()和COUNT()这样聚合函数的查询,可以很容易地进行并行处理。这种查询的一个简单例子如
1 | “SELECT salesperson_id, COUNT (orders) as order_total FROM sales GROUP BY salesperson_id;” |
通过“并行”,这意味着该查询可以在每个分区上同时进行,最终结果只需通过总计所有分区得到的结果。
5、 通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。
加载导出功能变更
(1)导出端口可配
远程导出功能默认使用导出客户端所在机器的16066-16165端口范围作为导出服务的临时端口。其端口范围可通过修改配置文件参数进行配置,参数如下表所示:
名称 | 最小值 | 最大值 | 默认值 |
---|---|---|---|
remote_export_min_port | 1 | 65535 | 16066 |
remote_export_max_port | 1 | 65535 | 16166 |
注:在早期的v8.6版本中,远程数据导出的端口范围为6066~6165,对于开启了防火墙的项目中,需要确认该端口。
(2) 加载支持指定文件压缩格式
参数名称:FILE_FORMAT
参数说明:用来指定被加载文件的格式
参数类型:枚举型
参数取值:UNDEFINED、UNCOMPRESSED、GZIP、SNAPPY、LZO
使用方法:指定为UNDEFINED,表示不指定格式,按文件后缀自动判断文件格式;指定为UNCOMPRESSED,表示按普通文本方式加载文 件;指定为GZIP,表示按GZIP格式加载文件;指定为SNAPPY,表示按SNAPPY格式加载文件;指定为LZO,表示按LZO格式加载文件。
BLOB/LONGBLOB支持功能变更
新版本严格区分blob和longblob类型,blob及text类型最大支持32KB;longblob和longtext最大支持64MB。
2018年2020年的部分历史版本中blob/text类型字段的大小超过最初定义的32KB,为最大64MB;在新版本中,超过32KB的数据可以读取,但再次插入超过32KB的数据内容时会报错,通过insert select/create table as select方式将数据插入到其他表中时,如存在超过32k的blob/text类型字段数据,报错。超过32KB,而不超过64MB的数据,可以存入到longblob字段中。
除字段的大小外,还有如下限制:
Longblob、blob字段不支持masked脱敏属性;
Longblob、blob不支持like条件查询;
Longblob、blob、text、longtext不支持max()、min()函数;
Longblob、blob、longtext不能作为group by、order by列;
Minus、union集合查询字段中,不支持longblob、blob、longtext字段。
Start with connect by功能完善
在v8.6.2build43R27之前的版本中,start with connect by功能存在不完善,当用户的分级查询中存在重复数据时,即存在Cycle环时不会报错退出,而是在环中反复执行。
新版本对该问题做了修复,当存在重复数据造成Cycle环时会提示报错Cycle exists in connect by clause,可通过增加nocycle关键字在遇到重复数据时终止执行并返回结果。
在中行的CDMO2项目中,客户利用了GBase 8a V 8.6.2版本start with connect by功能的缺陷,通过level条件控制分级查询的层级,如升级新版本则需要进行该部分业务的改造。
日期运算
两个日期数据直接相减,不足一天的部分,从返回0变成返回小数(V8.6.2build43开始)。
1 2 3 4 5 6 | gbase> select now(),now()-a, datediff(now(),a) from td; +---------------------+-------------+-------------------+ | now() | now()-a | datediff(now(),a) | +---------------------+-------------+-------------------+ | 2020-03-04 08:14:15 | 0.009895833 | 0 | +---------------------+-------------+-------------------+ |
如需要判断日期差距,请使用datediff函数,而不是直接相减。
集群状态去掉lock
通过gcadmin查看集群的状态,CLUSTER STATE的状态取值去掉了lock状态。
即使集群的半数以上的管理节点处于OFFLINE/CLOSE情况下,集群状态显示依然会是ACTIVE,此时执行SQL会无法下发,卡住在获取集群状态直至超时报错返回。影响集群运维时的数据库可用性判断。
审计日志归档的event默认不可用
V9.5版本集群的审计日志归档的定时任务中,没有设置该定时任务所属VC(未设置VC_ID),从而无法执行。需要用户自行调整gbase.event表中的VC_ID。如下:
update gbase.event set vc_id='vc00001' where name='import_audit_log';
其中的vc00001要根据你的vc情况决定。如有多个VC,需要自行创建各自的归档event。
HDFS加载文件名包含等号问题
在v8.6.2build43r21~r23版本中,在使用RPC协议进行HDFS上的文件加载时,如文件名中包含有等号“=”则会造成无法加载入库,在之后的版本中已经修复该问题。