当前位置: 首页 > article >正文

【GaussDB迁移攻略】DRS支持CDC,解决大规模数据迁移挑战

目录

1 背景介绍

2 CDC的实现原理

3 DRS的CDC实现方式

4 DRS的CDC使用介绍

5 总结


1

背景介绍

随着国内各大行业数字化转型的加速,客户的数据同步需求越来越复杂。特别是当需要将一个源数据库的数据同时迁移到不同的目标库场景时,华为云通常会创建一个或多个DRS(Data Replication Service)任务来进行数据同步。

但是,随着源库数据量的增大,DRS任务数量也越来越多,会造成源库性能下降,甚至影响源库正常业务。

为了解决这一问题,华为云采用了DRS支持CDC(Change Data Capture,变更数据捕获)的数据迁移方案。本文将详细介绍其实现原理、实现方式及使用方法。

2

CDC的实现原理

CDC的核心思想是监测并捕获数据库的变动(包括插入、更新和删除操作),并将这些变更按发生的顺序完整记录下来,以供其他服务进行订阅及消费。

CDC主流的实现机制有2种:基于查询和基于日志

  • 第一种,基于查询

实现方式:通过SQL语句查询数据库中的变更记录。

优点:实现简单。通过简单SQL命令,即可完成数据查询,无需额外适配。

缺点

1)高延迟,依赖查询效率。

2)影响源库性能。

  • 第二种,基于日志

实现方式:通过解析日志,获取数据库的变动记录。

优点

1)低时延。数据变化快速记录到日志中,解析识别速度快。

2)高保真。日志中包含完整的DDL和DML变更,可以精确捕捉源库的各种变动。

3)不会增加源库压力。

缺点:灵活性有限。各个引擎的日志机制不同,需要深入了解后适配开发。

3

DRS的CDC实现方式

DRS的CDC功能主要借鉴了CDC的思想,采用基于日志的方式,并提出了1+N的架构创新,如图1所示。该架构通过一个CDC任务连接源库进行日志抽取和解析,而下游的多个DRS任务则直接通过CDC获取数据进行增量同步,不再连接源库。因此也不会对源库产生压力。

图片

1 DRSCDC实现架构

图1中,CDC负责日志下载、日志解析和增量数据的发布;DRS负责全量迁移、日志下载、日志解析(过滤)和增量数据回放。

在新架构中,需要2个任务来完成数据迁移,相对于单任务完成迁移操作,低时延和高可靠成为该架构的主要技术挑战。

3.1 低时延

3.1.1 NIO网络通信

为了保证低时延,需要CDC和DRS任务之间的数据高效传输。NIO技术成为华为云的优选,这种面向缓冲区、基于通道的I/O处理方式,能够高效地处理大量数据和高并发请求。

NIO的核心组件:

缓冲区(Buffer)

用于存储和处理CDC和DRS任务各自的数据,确保数据传输的高效性。

通道 (Channel)

实现CDC和DRS任务之间的数据传输,支持双向和异步操作,提高数据传输的效率和可靠性。

选择器(Selector)

管理多个通道的IO事件,确保一个线程可以同时监控多个通道的IO操作,实现非阻塞IO,提高系统的并发处理能力。

典型NIO模型的处理方式,如图2所示,一个线程可以管理多个网络连接。

图片

典型NIO模型的处理方式

回到我们业务本身CDC(RFS-Server)和DRS(RFS-Client)进行数据传递时,我们采用多路复用IO模型,交互方式如图3所示:

图片

3 CDCDRS组件交互

SocketListener线程:实时监听来自RFS-Client发送的连接请求;

SocketReader线程:负责校验请求是否有效,读取下游任务发送的命令,并进行分发处理;

RequestProcesser线程:执行具体操作,如读取文件长度、读取文件属性等。

传输性能测试结果:

测试项(客户端数量)

平均速度(MB/s)

最小(MB/s)

最大(MB/s)

1

268.2

129.1

622.9

5

112.9

29.1

833.9

测试环境:

类型

规格

ECS实例

c3.xlarge.2

3.1.2 数据压缩

对已解析的日志文件进行压缩,以减少磁盘占用,降低存储成本,并进一步提高数据的读写性能。

  • 压缩算法

在数据迁移过程中,如果进行压缩,那么无损压缩算法成为我们的必选。当前选用LZ4压缩算法,尽管压缩率不是最优(接近2.0),但是压缩和解压缩速度极快。

LZ4 的主要算法思想是将重复的字符串替换为对已识别字符串的引用。具体工作原理是在数据流中使用滑动窗口识别出现在一定范围内的数据序列。找到匹配项后,算法会将第二次出现的匹配项替换为对第一次出现的引用,从而减少数据的大小。

LZ4专注于查找固定长度的序列,简化了匹配过程。同时,使用哈希表存储和快速检索固定长度序列的位置,以实现快速引用。

从源库抽取的日志文件,统一解析为THL文件。存储格式如下:

字符串:使用一个字节表示是否存在,实际内容使用UTF格式;

基本数据类型:使用固定长度。

THL文件是序列化和反序列严格对称。这种紧凑性设计,占用更少的存储空间。

  • 数据剪枝

从实际业务需求出发,在CDC任务中提供2种对象选择方式:整库和部分表选择。通过对象选择,过滤冗余的源库日志数据,减少磁盘空间占用。

3.2 高可靠

3.2.1 数据安全

在数据迁移过程中,下游的所有DRS任务都依赖CDC,从中拉取日志数据。除了性能外,如何可靠地传输数据,并保证传输过程中数据不丢失,成为衡量可靠性的关键因素。

  • 文件完整性校验

由于网络环境的复杂性,数据在传输时有可能会出错。因此,针对传输的每条数据,将校验其序列号和长度是否一致。传输完成后,再次校验文件长度,来保证文件的一致性。

  • 加密传输

针对安全极度敏感客户,可以启动SSL传输加密。SSL通过使用数字证书和加密算法建立加密连接,保证数据传输过程的机密性。然而,启用 SSL 传输会导致性能下降约三倍,建议按需使用。

  • 安全位点

CDC任务从源库拉取日志时,受限于源库日志的保留时间。如果日志被清理,则无法继续从源库拉取。对于DRS任务,从CDC拉取日志时,不再受限源库日志的清理,可以持续拉取使用。

但是,用户可以调整放大CDC任务的同步对象范围。在这种情况下,调整前产生的数据,即没有新增对象的日志数据将不再可用。故引入“安全位点”概念,确保之前的数据不再支持拉取使用,且从安全位点之后的数据都是完整有效。

3.2.2 故障恢复

DRS任务自身已具备断点续传和故障恢复等功能,针对CDC任务和DRS任务之间因为网络闪断等原因,导致通信断开时DRS任务失败,如果通信条件恢复,那么,DRS任务也需要快速恢复。

  • 文件异常快速识别

通信中断后,为了保证THL文件数据的完整性,会清理本地文件,并重新拉取。

DRS任务在生成本地THL文件时,会标记文件的UUID,通过UUID的变动,可以快速识别文件变化,如图4所示。

图片

文件异常快速识别 

4

DRS的CDC使用介绍

DRS的CDC使用介绍(以MySQL为例)

1)创建CDC任务

  • 步骤一 创建CDC实例

设置数据流动方向、源库引擎、源库实例

图片

  • 步骤二 源库配置

填写源库用户名和密码,进行测试连接。

图片

  • 步骤三 任务配置

设置同步对象的范围,支持不同库配置不同规则。

图片

  • 步骤四 预检查

检查源库是否满足迁移条件,权限、表结构、源库参数等校验。

2)创建同步任务

  • 步骤一 创建同步实例

配置数据流动方向、源库引擎、同步模式。

图片

  • 步骤二 源库及目标库

源库信息中,开启CDC开关,可以选择CDC任务,后续从CDC中拉取日志。

图片

  • 步骤三 设置同步

在“编辑同步任务”页面,默认的同步对象是CDC中已选择的对象范围,选择后,支持映射。

图片

  • 步骤四 数据加工

针对已选择的对象,配置数据过滤,列加工等。

  • 步骤五 预检查

检验CDC任务连通性、对象选择范围是否合理等。

3) CDC任务运行

  • 发布列表

DRS任务启动后,即可再发布列表中查看下游的所有DRS任务。

图片

5

总结

DRS支持CDC的数据迁移方案,即CDC通过拉取源库日志,解析成标准的THL格式文件,进行增量数据发布。DRS直接拉取THL文件,进行解析和过滤,实现增量数据回放,有效的降低了多个DRS任务直连源库对源库性能的影响。针对源库数据量级大需要拆分任务迁移(一对多场景),以及对源库性能敏感客户优先推荐使用该方案。

相关文章:

【GaussDB迁移攻略】DRS支持CDC,解决大规模数据迁移挑战

目录 1 背景介绍 2 CDC的实现原理 3 DRS的CDC实现方式 4 DRS的CDC使用介绍 5 总结 1 背景介绍 随着国内各大行业数字化转型的加速,客户的数据同步需求越来越复杂。特别是当需要将一个源数据库的数据同时迁移到不同的目标库场景时,华为云通常会创建…...

HoloTime:从一张图片生成可交互的4D虚拟世界——突破静态生成模型,重构VR/AR内容生产范式

引言:静态生成模型的局限与HoloTime的突破 在空间智能与虚拟内容生成领域,传统生成模型(如扩散模型)面临两大瓶颈: 静态输出:仅能生成固定视角的3D场景或局部物体动画。沉浸感缺失:无法构建用户可“走进去”的动态4D空间(时间+空间)。HoloTime 通过“图像→全景视频→…...

【Python CGI编程】

Python CGI(通用网关接口)编程是早期Web开发中实现动态网页的技术方案。以下是系统化指南,包含核心概念、实现步骤及安全实践: 一、CGI 基础概念 1. 工作原理 浏览器请求 → Web服务器(如Apache) → 执行…...

JavaScript 时间转换:从 HH:mm:ss 到十进制小时及反向转换

关键点 JavaScript 可以轻松实现时间格式(HH:mm:ss 或 HH:mm)与十进制小时(如 17.5)的相互转换。两个函数分别处理时间字符串到十进制小时,以及十进制小时到时间字符串的转换,支持灵活的输入和输出格式。这…...

【深度学习】#11 优化算法

主要参考学习资料: 《动手学深度学习》阿斯顿张 等 著 【动手学深度学习 PyTorch版】哔哩哔哩跟李牧学AI 目录 深度学习中的优化挑战局部极小值鞍点梯度消失 凸性凸集凸函数 梯度下降一维梯度下降学习率局部极小值 多元梯度下降 随机梯度下降随机梯度更新动态学习率…...

《数字藏品APP开发:解锁高效用户身份认证与KYC流程》

开发一款数字藏品APP,要面对诸多复杂且关键的环节,其中,实现高效的用户身份认证与KYC(了解你的客户)流程,无疑是重中之重。这不仅关乎用户资产安全与平台合规运营,更是构建用户信任、保障平台可…...

ros2中自定义的package查不到?

在ros2中自定义的package功能包,使用命令:ros2 pkg list无法查找到自己的功能包? 首先,利用ros2 pkg create命令创建好功能包之后要利用colcon build命令进行编译,编译成功之后,在当前路径需要运行命令&am…...

根据台账批量制作个人表

1. 前期材料准备 1)要有 人员总的信息台账 2)要有 个人明白卡模板 2. 开始操作 1)打开 人员总的信息台账,选择所需要的数据模块; 2)点击插入,选择数据透视表,按流程操作&…...

LocaleContextResolver实现多语言切换-笔记

1. LocaleContextResolver功能简介 org.springframework.web.servlet.LocaleContextResolver是 Spring MVC 中用于解析和管理用户 Locale(语言环境) 的核心接口。 //LocaleContextResolver 接口定义 public interface LocaleContextResolver extends L…...

Android从单体架构迁移到模块化架构。你会如何设计模块划分策略?如何处理模块间的通信和依赖关系

从单体架构迁移到模块化架构。可能有些小伙伴已经深陷单体架构的泥潭,代码耦合得跟一团麻线似的,改个小功能都能牵一发而动全身;也可能有些团队在协作时,经常因为代码冲突或者职责不清搞得焦头烂额。相信我,这些问题我都经历过,真的能把人逼疯!所以,咱得找个更好的方式…...

Zephyr OS Nordic芯片的Flash 操作

目录 概述 1. 软硬件环境 1.1 软件开发环境 1.2 硬件环境 2 Flash操作库函数 2.1 nRF52832的Flash 2.2 Nordic 特有的 Flash 操作 2.2.1 nrfx_nvmc_bytes_write 函数 2.2.2 nrfx_nvmc_page_erase函数 2.2.3 nrfx_nvmc_write_done_check 函数 3 操作Flash的接口函数…...

uv python 卸载

又是查了半天 官网wiki没有 网上一堆傻子胡说 uv提示也不对 AI还在这尼玛胡编乱造 开始 我原来装了这几个环境 uv python list 现在python3.7.7不需要了,卸载,直接 uv python uninstall 3.7.7 去找你自己要卸载的版本号,不需要整个包名复制…...

MCP本地高效与云端实时:stdio 与 HTTP+SSE 传输机制深度对比

概览 模型上下文协议(MCP)定义了客户端与服务器之间通信的统一标准,所有消息均采用 JSON-RPC 2.0 格式进行封装,并在此基础上支持两种传输机制:stdio(标准输入/输出) 与 HTTPSSE(Se…...

浮点数截断法:四舍五入的精确模拟

理论解释: 1. 目标 假设 a 3.14159,我们想四舍五入到 小数点后两位(即 3.14 或 3.15)。 2. 步骤拆解 (1) a * 100 把 a 放大 100 倍,让小数点后两位变成整数部分: 3.14159 * 100 314.159 (2) 0.5 关…...

技术文章:解决汇川MD500系列变频器干扰问题——GRJ9000S EMC滤波器的应用

1. 引言 汇川MD500系列变频器(Variable Frequency Drive, VFD)以其高性能、宽功率范围(0.4kW-500kW)和灵活的控制方式,广泛应用于工业自动化领域,如风机、水泵、传送带和压缩机等。然而,MD500系…...

大模型数据分析破局之路20250512

大模型数据分析破局之路 本文面向 AI 初学者、数据分析从业者与企业技术负责人,围绕大模型如何为数据分析带来范式转变展开,从传统数据分析困境谈起,延伸到 LLM MCP 的协同突破,最终落脚在企业实践建议。 🌍 开篇导语…...

基于javaweb的SSM驾校管理系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

Java内存泄露生产环境排查过程,通透了

昨天线上环境崩了 java堆内存溢出。。。 报错:java.lang.OutOfMemoryError: Java heap space 下面我将我排查问题的思路和过程记录了下来 1. 场景 客户端跟Java服务端通过websocket连接建立长链接并发送语音数据(text格式)Java服务端跟听…...

NHANES指标推荐:MDS

文章题目:The association between magnesium depletion score (MDS) and overactive bladder (OAB) among the U.S. population DOI:10.1186/s41043-025-00846-x 中文标题:美国人群镁耗竭评分 (MDS) 与膀胱过度活动症…...

以项目的方式学QT开发C++(二)——超详细讲解(120000多字详细讲解,涵盖qt大量知识)逐步更新!

API 描述 函数原型 参数说明 push_back() 在 list 尾部 添加一个元素 void push_back(const T& value); value :要添 加到尾部的元 素 这个示例演示了如何创建 std::list 容器,并对其进行插入、删除和迭代操作。在实际应用中&am…...

Docker使用经验-从Image导出dockerfile并进行修改

好久没进行记录写作了,还是得进行下去 0 前言 项目上拉下来的docker-image在我自己电脑上创建的容器不能正常启动,创建者在容器里面添加的了用户,容器启动后会进入该用户 1 docker导出dockerfile dfimage是一个用于从Docker镜像生成Docker…...

【HTML5学习笔记1】html标签(上)

web标准(重点) w3c 构成:结构、表现、行为,结构样式行为相分离 结构:网页元素整理分类 html 表现:外观css 行为:交互 javascript html标签 1.html语法规范 1) 所有标签都在…...

计算机视觉---目标检测(Object Detecting)概览

一、目标检测定义与核心任务 1. 定义 任务:在图像/视频中定位并分类所有感兴趣目标,输出边界框(Bounding Box)和类别标签。核心输出: 坐标:((x_1, y_1, x_2, y_2))(左上角右下角)或…...

在vue3中使用Cesium的保姆教程

1. 软件下载与安装 1. node安装 Vue.js 的开发依赖于 Node.js 环境,因此我们首先需要安装 Node.js。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它允许你在服务器端运行 JavaScript 代码,同时也为前端开发提供了强大的工具支…...

IP地址、端口、TCP介绍、socket介绍、程序中socket管理

1、IP地址:IP 地址就是 标识网络中设备的一个地址,好比现实生活中的家庭地址。IP 地址的作用是 标识网络中唯一的一台设备的,也就是说通过IP地址能够找到网络中某台设备。 2、端口:代表不同的进程,如下图: 3、socket:…...

基于MCP的桥梁设计规范智能解析与校审系统构建实践

引言 在腾讯云开发者社区中,有多种MCP工具可以用于本系统的开发和优化中,以下是一些潜在的应用场景: ‌PDF解析工具‌:如pdfplumber等,可以用于规范文件的预处理,提取文本和图像信息。‌自然语言处理工具…...

搭建运行若依微服务版本ruoyi-cloud最新教程

搭建运行若依微服务版本ruoyi-cloud 一、环境准备 JDK > 1.8MySQL > 5.7Maven > 3.0Node > 12Redis > 3 二、后端 2.1数据库准备 在navicat上创建数据库ry-seata、ry-config、ry-cloud运行SQL文件ry_20250425.sql、ry_config_20250224.sql、ry_seata_2021012…...

OM和SCADA的区别

在工业与能源领域,O&M(Operation and Maintenance,运维) 和 SCADA(Supervisory Control And Data Acquisition,监控与数据采集系统) 是两类截然不同的概念,前者是 人员与流程驱动…...

CentOS7 grub配置文件介绍

1. grub2-editenv list saved_entryCentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core) 这个命令查询出当前启动的内核版本。 2.grep ^menu /boot/grub2/grub.cfg menuentry CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core) --class centos --class gnu-linux --class gnu --c…...

SpringBoot常用注解详解

文章目录 1. 前言2. 核心注解2.1 SpringBootApplication2.2 Configuration2.3 EnableAutoConfiguration2.4 ComponentScan2.5 Bean2.6 Autowired2.7 Qualifier2.8 Primary2.9 Value2.10 PropertySource2.11 ConfigurationProperties2.12 Profile 3. Web开发相关注解3.1 Control…...