GaussDB(DWS)数据融合:Oracle增量数据迁移到DWS

本文介绍一种从Oracle到Dws进行数据迁移方式。数据迁移分为两步,全量迁移和增量迁移。全量迁移是指将源端的全部或部分数据一次性的迁移到目标端的过程,全量同步采用CDM方案;增量同步是指将指定检查点后的数据库数据增量变化由源数据库同步到目标数据库的过程。

全量数据的导入导出已在前面章节进行了介绍,这里只介绍增量数据迁移。增量数据迁移包含两部分,分别是数据捕获与数据回放。数据捕获指的是捕获到Oracle数据库的数据变化过程,由DRS模块完成,将增量数据同步到DWS的数据回放由Spark程序完成,在MRS作业中执行,整个过程如下图所示。整体思想基于Kafka Topic,屏蔽捕获端与回放端区别,实现各种异构数据库间的数据抽取与回放。

数据回放得spark程序原理如下:

1.1 处理增量数据

增量数据从kafka消费到之后按批次放置于HDFS,以以上格式存放于CSV文件中,在原始数据的基础上增加后面蓝色字段来进行解析并进行回放。按照顺序逐条解析CSV文件后,按照不同的op_type将增量数据放入不同的数据结构中存储,包含插入、删除两个数据结构。如果是插入数据,则直接放入插入数据队列中;如果是更新数据,先查插入队列中是否包含op_position中的before数据,若包含则从插入队列中删除,然后将before数据放入删除数据队列中,将after数据放入插入队列中;如果是删除数据,从插入队列去查,如果包含则从插入队列中删除,如果不存在删除标记位,将数据插入删除列队中,如果存在删除标记位,将删除数据插入删除标记队列中。这个是在内存中做的一次数据整合压缩操作。

1.2 数据入临时表

为了数据可以批量导入DWS正式表中,对应内存中的插入、删除数据结构,建立临时表,插入、删除临时表,临时表的结构是正式表除去删除标记位以后的表结构。内存中处理完一个或多个文件后(可通过参数指定一次处理的文件个数)将内存中的数据copy进这三个临时表中。

1.3 数据回放入正式表

数据回放是将临时表中的数据入库到正式表中。 插入表采用merge语法,对比主键有此主键则更新为临时表数据,没有此主键则插入此数据。删除的时候有两个选择:直接删除还是打标记删除。打标记意味着表有一个标志位,专门用来做删除,删除数据的时候只需将此标志位由0置1,增量数据中不需要携带标志位数据。直接删除时只需匹配删除数据,匹配上了就删除。删除表采用delete语法,where条件匹配主键,即删除相同主键的数据,当存在删除标记位时,会将删除标记临时表采用merge语法,对比主键有此主键则更新为临时表数据,并将删除标记位置1,没有此主键则插入此数据,删除标记位同为1。执行的时候,先执行插入表,再执行删除表。

采用这三步即可将Oracle采集到得数据处理过程回放到DWS数据库中,以达到和Oracle数据一致的效果,即一次增量数据迁移过程。

转载:华为云论坛

相关推荐
Decay__1 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
学长毕设4 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
raindayinrain4 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
zzu123zsw5 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
小徐不徐说5 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
UIU1146 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
源码集结号6 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场6 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi6 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
啃瓜子的松鼠6 小时前
泛微OAe9-后端二开异步调用
java