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数据一致的效果,即一次增量数据迁移过程。

转载:华为云论坛

相关推荐
weixin_440784113 小时前
【HandlerThread实现原理】
android·java·开发语言
毛驴赶鹿3 小时前
【金仓数据库征文】KES V9性能调优实战记录:从慢SQL排查到全链路优化
数据库·sql
leoZ2313 小时前
本地跑大模型实战(七):llama.cpp 性能调优,让推理更快更省
java·人工智能·spring·生成对抗网络·语言模型·自然语言处理·llama
码农阿豪3 小时前
【金仓数据库征文】Mac开发环境|SpringBoot3 + MyBatisPlus对接KES V9 Docker实战全指南
数据库·macos·docker
杨云龙UP3 小时前
MySQL 数据库常用备份工具对比:mysqldump、mydumper 与 XtraBackup
linux·运维·服务器·数据库·mysql·dba·备份恢复
ZENERGY-众壹3 小时前
500个工商业电站压垮数据库?海量光伏时序数据存储的架构取舍
数据库·架构·influxdb·光伏·光伏运维
mubei-1234 小时前
SpringDAO的用法
java·开发语言·数据库
happymagic4 小时前
java spring boot做的jar包程序,如何实现自动运行启动
java·运维·服务器·spring boot·jar
小程故事多_805 小时前
从A2C、TRPO、PPO到GRPO,强化学习策略梯度算法完整演进与大模型落地实战解析
人工智能·算法
2601_956121976 小时前
二分算法(知识点+题目)
c++·算法