南大通用数据迁移之GaussDB_To_GBase8a(一)迁移综述


原文链接:

https://www.gbase.cn/community/post/3857

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

1.从GaussDB迁移到GBase 8a的可行性

        从产品架构角度分析GaussDB迁移到GBase 8a MPP Cluster的可行性可以总结如下:
        GaussDB 200和GBase 8a都属于MPP架构数据库产品,架构上的相似性意味着从GaussDB迁移到GBase 8a是现实可行的;
        从两款产品的逻辑架构上进行对比,GaussDB 200和GBase 8a均采用了MPP+Share Nothing的无共享并行处理架构。
        GaussDB 200集群管理模块CM(Cluster Manager)对应GBase 8a的gcware(corosync)和gcmonit模块、Coordinator(CN)模块对应GBase 8a的gcluster模块,Datanode(DN)模块对应GBase 8a的gnode模块。

GaussDB逻辑架构

GBase 8a MPP Cluster逻辑架构

        GaussDB和GBase 8a都支持ANSI SQL标准,因此两个产品中大量语句的语法一致或高度相似,因此语法迁移方面的整体难度可控;
        GaussDB和GBase 8a均提供标准的API接口,在第三方工具和外围系统生态上也具备高度相似性,对迁移后上下游系统的变动和影响较小。
        GaussDB与GBase 8a MPP Cluster数据库在接口、工具、语言等方面的对比如下:


        GaussDB支持行存和列存两种类型的表。行存表与事务型数据库存储和操作模式一样,存储和操作模式与GBase 8s数据库基本一致。列存表与GBase 8a MPP的存储和操作模式基本一致。GaussDB行存表和列存表在业务操作上如果有关联性能较差,所以在GaussDB的实际生产环境中一般也是建议相关业务表全部建成行存表或者全部建成列存表。所以迁移的时候可以选择行存业务迁移至GBase 8s,列存业务迁移至GBase 8a MPP。如果行存和列存业务有交集或者需要混合HDFS存储的需求,可以迁移至GBase UP,GBase UP平台底层融合了GBase 8s、GBase 8a MPP和Hadoop,GBase UP下的多异构数据库对上层用户透明,对底层数据能流动交互。
        对于GaussDB迁移至GBase 8a MPP,行存表的业务改动量较多一些,列存表的业务改动很少,鉴于上述大量相同点,总的工作量是可控和可接受的工作。

2.迁移流程概述

GaussDB 200迁移至GBase 8a MPP Cluster的总体流程如下图所示:

DDL迁移:
        DDL迁移采用一次性迁移的方式进行,可以从GaussDB导出DDL脚本,按照GBase 8a MPP Cluster语法对导出的脚本使用脚本方式进行批量修改;
数据迁移:
        将GaussDB数据库的表数据通过接口以规定的分隔符导出成平面文件,然后使用FTP/NFS等方式发送到GBase 8a MPP Cluster可以访问的文件系统,再通过GBase 8a MPP Cluster提供的批量数据加载工具完成数据加载。
程序/脚本迁移:
        程序和脚本迁移包括仓库ETL和各层数据加工程序/脚本、GaussDB库内存储过程等。迁移采用人工迁移审核的方式。
        对于脚本类型的程序,如果perl脚本程序,需要对ETL连接数据库的具体方式进行转换,对于每日批量加工业务的调度,需要针对性的对调度程序进行重新配置,如informatica、kattle等工具的数据库连接部分配置、mapping映射关系的调整等。
工具接口迁移:
        工具接口迁移,主要指GaussDB数据库上下游的第三方工具,如ETL工具、BI工具等的接口迁移和联调工作,主要是将连接GaussDB的第三方工具接口配置为连接GBase 8a MPP Cluster的接口,涉及的接口主要包括JDBC、ODBC等标准接口和对应的jar包或驱动程序的重新安装和连接配置,并对联通性和工具的基本功能进行验证。

3.数据模型区别概述

集群内业务隔离方式不同:
        GaussDB 200中可以使用Database和Schema实现业务的隔离,区别在于Database的隔离更加彻底,各个Database之间共享资源极少,可实现连接隔离、权限隔离等,Database之间无法直接互访,一个集群内,用户自定义的Database数量建议不超过3个,最多支持128个。Schema隔离的方式共用资源较多,可以通过grant与revoke语法便捷地控制不同用户对各Schema及其下属对象的权限。创建用户时会自动的创建同名的Schema,用户也可以单独创建新的Schema。
GBase 8a MPP Cluster使用Database实现业务隔离,用户自定义Database的数量没有限制,不同Database之间可以互相访问。不支持用户创建Schema。
数据的物理存储和逻辑管理方式不同:
        GaussDB 200支持自定义表空间,数据库的数据逻辑上以表空间来管理,表空间使用率达到90%,表空间中的表变为只读,需要扩容表空间后表可恢复正常读写。GBase 8a MPP不同版本对表空间的支持度不一样,V95以上(含)版本支持用户自定义表空间,V86版本不支持用户自定义表空间。
GaussDB 200创建数据库时可以指定表空间,一个数据库可以指定多个表空间,一个表空间也可以被多个数据库指定,但是一个表的数据只能归属于一个表空间,不能跨表空间。
GaussDB 200数据的底层物理存储是一个表的数据由多个datafile segment(数据文件)组成,每个datafile segment里有很多数据单元CU(等同于GBase 的DC),每个CU默认存60000个记录(可调,值在10000-60000之间),datafile segment满1G就分离出新的datafile segment(推荐的数据文件格式是xfs格式)。数据库操作数据的最小粒度是1个block为8k,即8k是数据库的io单位。
        GBase 8a MPP物理存储推荐的文件格式是ext4,表数据也是由多个数据文件(segment)组成,数据文件是以2G作为分割,满2G就分离出新的数据文件。每个数据文件由很多数据单元DC组成,每个DC固定存储65535个记录,不可调。
        GaussDB 200是分布式架构,数据分布在各个DN上。每三个数据节点组成一个安全环,类似8a老版本的安全组,每个数据节点可以存储多个主分片,每个主分片有两个副本,分别存储在安全环内的另两个数据节点上:备节点和从备节点。主节点故障后备节点启用为主节点,原主节点变为备节点。从备DN不占用实际存储空间,仅在主、备DN故障时才起作用,且只存储数据日志,不存储数据页面。这点与GBase 8a MPP不同,GBase 8a MPP可以有多个副本,但是没有从备的概念,每个副本都是实际存储的主片的备份数据。
GaussDB 200数据分布到DN上的分布方式推荐hash分布、Replication,对应于GBase 8a MPP的随机分布表和复制表。GaussDB 200和GBase 8a MPP的hash分布列选取原则一样,都是数据均分、业务操作避免节点间拉表,但是GaussDB的hash分布列支持多列组合作为分布列,GBase 8a MPP只支持单列作为分布列。
        GaussDB 200支持各个节点上的表数据进一步分区存储,即是在一个节点内部对数据按照用户指定的策略对数据做进一步的水平分表,GaussDB 200支持范围分区(Range Partitioning)。GBase 8a MPP 不同的版本对分区的支持情况不同,V95以下的版本不支持表分区。
        GaussDB 200的表数据存储类型支持行存和列存两种,引擎也分别由行执行引擎和列执行引擎对应,列执行引擎的性能(除indexscan相关的算子)比行执行引擎性能要好很多。行存表和列存表在建表时指定,行存和列存表的关联耗费资源大,性能低。GaussDB 200中有业务关联的表一般是统一建立成行存表或者列存表。
1)GaussDB 200的行存
        与GBase 8a MPP的行列混存概念不一样,GaussDB 200的行存是与oracle、mysql等事务数据库一样的存储模式,是以记录为单位存入数据文件中,读取时也是按记录读取,即100列的表,只读取一列也需要把其余列的数据按记录的粒度读取出来。所以GaussDB 200的行存表中,一条记录最大不能超过1个datafile segment大小即不能超过1G。当然,GaussDB 200的行存表在主外键、约束、字段的属性设置等方面与oracle等事务数据库一样,也支持常规的修改表和字段的属性。
2)GaussDB 200的列存
        与GBase 8a MPP的列存存储方式一样,存储和读取都是以纵向列进行,查询时如果100列的表只读取其中一列,不会连带读取出相关记录的其他字段出来。与GBase 8a MPP一样,列存的表不支持主、外键功能,字段属性的alter也与GBase 8a MPP 类似,不支持alter table 列的很多属性,具体参考SQL语法迁移部分。GBase 8a MPP的行存列本质上仍然是列存。
事务的支持度不同
        GaussDB 200有全局事务管理模块GTM(Global Transaction Manager),即含GTM进程的特殊MPPDBServer,负责生成和维护全局事务ID、事务快照、时间戳等需要全局唯一的信息。GaussDB 200是基于MVCC(多版本并发控制)并结合两阶段锁的方式进行事务管理。
        GaussDB 200默认是自动提交,即每条sql作为一个事务自动提交,这跟GBase 8a MPP相同。GaussDB支持事务块,支持数据库事务ACID特性,用户可以通过start transaction命令显式启动一个事务块。GBase 8a MPP不同版本对事务的支持程度不同,V95以下版本建议不使用事务。

原文链接:

https://www.gbase.cn/community/post/3857

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值