GaussDB技术解读系列:数据库迁移创新实践

2023-09-18 11:28:18

近日,以“数智赋能 共筑未来”为主题的第14届中国数据库技术大会(DTCC 2023)在北京举行,在GaussDB“五高两易”核心技术,给世界一个更优选择的专场,华为云数据库生态工具研发总监窦德明分享了GaussDB数据库的迁移创新实践。

本篇将分享GaussDB数据库迁移的创新实践。

易迁移能力是企业数据库替换选型的关键考量

数据库的选型除了要看数据库本身的能力外,能否很平滑地从其他数据库迁移到GaussDB,也是很多企业考量的关键因素。而数据库能否平滑迁移有两个非常核心的要素,一个是数据库本身,比如能否很好地兼容主流数据库的语法,让应用少改或者不改;另外一个是在数据库外围能否提供一些好用、易用的迁移工具,把应用中内嵌的SQL、数据库中的对象以及全量和增量数据,在业务近乎零停机的情况下从其他数据库平滑地迁移过来。这两点是企业做数据库选型时考量的两个迁移关键要素。

结构(UGO)+数据(DRS)

一站式迁移解决方案

在2021年的DTCC大会上,发布了华为云结构+数据一站式迁移解决方案,其中有两个核心工具。一个工具是UGO,主要做结构和应用的语法兼容性评估和转换,比如将数据库上层应用中内嵌的SQL捕获出来进行评估,对数据库内部对象的DDL进行评估,并输出一个报告,清晰地展示哪些是数据库本身兼容的、哪些是通过UGO转换可以兼容的、哪些不能转换需要人工介入进行改造等。另外一个工具是DRS,大家都知道,异构数据库替换过程中的数据迁移问题非常非常多,DRS要解决的就是怎么在业务近乎不停机的情况下快速把客户的存量数据和增量数据迁移过来,并保证数据在任何情况下不丢、不错、不乱,同时提供灵活、多样的数据比对和修复能力。

UGO+DRS一体化解决方案

在实际项目中得到验证

UGO+DRS一站式迁移解决方案近两年在很多项目中都得到了验证和应用,这里举几个实际的例子。第一个是我们公司自己内部的MetaERP项目,使用UGO自动转换了近7亿行的O数据库SQL脚本,转换成功率接近100%,同时GaussDB实现了并行逻辑解码,性能高达近300MB/秒,可以让DRS轻松应对MetaERP在月结、季结和年结时10~20倍的流量洪峰,保证数据同步<5s的低时延。

第二个是某银行的数据库替换,这个项目迁移复杂度比较高,面临应用多、数据库对象多、存储过程和package深度依赖等困难,截至目前通过我们的一站式迁移解决方案,完成了近1.3亿行SQL脚本(包含近8000万存储过程)的UGO自动转换,转换成功率超过96%,采用DRS迁移了近300套左右的O数据库实例,实现了O数据库与GaussDB数据库的长时间并机稳定运行,正反向低时延数据同步。

项目实施过程中遇到新的困难与挑战

在大量的项目实施过程中,UGO+DRS一站式迁移解决方案也遇到了一些新的困难和挑战,这些挑战相信大家也都会遇到,在此给大家做个分享。

挑战一

在做异构数据库替换时,如何快速识别异构数据库语法不兼容点,识别数据相同的情况下相同SQL在不同数据库中执行的性能差异,以及低版本向高版本升级时是否会存在不兼容或性能劣化,再有就是如何模拟业务流量洪峰时的数据库行为表现。

挑战二

当前很多企业的开发人员和DBA对GaussDB熟悉程度还不高,SQL编写水平参差不齐,而且在做应用开发时缺乏统一的SQL编程规范和有效的SQL审核机制,很多烂SQL都流入了生产环境,进而引发大量的应用性能问题,影响生产业务和客户体验。

挑战三

很多数据库当前的字符集在标准字符集的基础上做了很多扩展或者定制,导致数据迁移时相同字符集的不兼容,或者就没有对等的字符集,更有甚者,历史数据里已经存在了各种各样的乱码数据,这些特殊场景都会影响迁移的平滑性。

当然,困难和挑战还有很多,但这三个是会阻塞或拖慢数据库迁移进程的,那么针对这三个挑战,我们都做了哪些探索和创新呢?再给大家分享一下。

应对挑战一:孵化数据库流量录制与回放能力

流量录制与回放的概念相信大家都不陌生,在数据库领域,有些数据库厂商也提供了相应的工具,GaussDB面临的业务场景比较多,所以需要的技术也因场景而异。如果源数据库是公有云服务,而且提供了全量SQL,那么直接获取全量SQL并进行回放即可;如果源数据库开启了审计日志,也可以直接下载并解析审计日志,当然开启审计日志会对数据库的性能有一定的影响;如果源端是自建数据库,而且未开启审计日志,那就需要部署一个agent,通过捕获网络数据包,结合数据库本身的通信协议来解析出应用下发的所有SQL。基本上这三种方案可以涵盖所有的场景,这里面还要注意几个点,首先是要研究透不同数据库的通信协议,其次是实现异构数据库替换场景下的SQL自动转换,另外是要具备SQL回放的流量控制能力,能加速或者放慢等,当然在解析、回放等出现异常的情况下,要做好记录。

图片

接下来就是在源数据库的镜像库和GaussDB数据库同时进行流量回放,而且保证镜像库和目标数据库的数据完全一致,回放的SQL也完全一样,最终输出一个分析报告,比对每一条SQL的执行耗时、资源消耗、甚至是执行结果,很容易看出来哪些SQL的性能GaussDB比源数据库好、哪些出现了劣化、哪些是基本持平的。

GaussDB团队正在和某银行进行数据库流量录制与回放的联合创新,从实际应用效果来看,通过agent方式捕获流量包,SQL抓取成功率可以做到97%以上,解析成功率和回放成功率可以达到95%,在此过程中,还可以识别到语法不兼容、语义不兼容的异常情况。

应对挑战二:孵化GaussDB数据库SQL审核能力

SQL审核大家更为熟悉,很多大的企业都会进行探索和实践,但对于GaussDB来说,由于是纯自主创新的分布式数据库,很多企业的开发人员和DBA还不熟悉GaussDB的SQL语法,也没有制定较为完善的SQL编程规范,很多第三方SQL审核工具也没有针对GaussDB的审核能力,这种情况下,我们结合UGO成熟的SQL解析器,以及多个项目中的SQL调优实践,孵化出了GaussDB数据库的SQL审核能力。

图片

SQL审核的输入可以有多种类型,可以是代码仓,也可以是一个SQL文件,还可以是通过流量录制获取的动态SQL等等,可以审核直接获取到的原生SQL,也可以审核通过UGO转换后的SQL。

截至目前,已经沉淀了81条审核规则,并在公司内部的两个项目以及外部的多个银行进行了应用,效果超出预期。

应对挑战三:孵化字符集兼容性分析评估能力

针对数据迁移,大家最担心的莫过于正式割接时出现各种各样的问题导致割接失败,除了迁移工具本身的功能之外,最常见的可能就是字符集不兼容、数据乱码、生僻字等等。举个例子,O数据库对GBK字符集做了扩充,可以存储UTF-8字符,而GaussDB数据库的GBK字符集非常规范,从O数据库向GaussDB迁移数据时,这些UTF-8字符根本无法写入,迁移必然失败。更有甚者,很多客户的海量历史数据中有大量的乱码数据,无法确定这些数据是什么时候写入的,哪些应用写入的,或者后续会不会再用到,但客户要求必须迁移过来。那么,面对这些挑战,我们尝试通过孵化字符集兼容性分析评估工具来提前识别。

图片

这个工具的原理很简单,首先是建立一个可以分析的字符集基线,比如GB系、Unicode系列等,其次是获取源数据库的元数据,包括字符集、索引信息、表结构信息(列类型、列长度)等,然后基于源数据库和目标数据库的字符集做好映射,最后再对数据库进行数据扫描和分析,输出多维度的分析评估报告。目前这个工具正在和某银行进行联创,从前期的试用效果来看,确实能发现很多问题,比如ZHS16GBK和AL32UTF8两种字符集混编、直接写入二进制格式导致数据乱码、ZHS16GBK字符集使用了大量生僻字等。

对UGO+DRS一站式迁移解决方案

的演进思考

以上是在使用UGO+DRS一站式迁移解决方案过程中遇到的三个大的挑战,以及应对这三个挑战做的一些创新实践。现在GaussDB的迁移场景越来越多,也越来越复杂,所以会不断地进行探索和创新,让方案更完善,迁移过程更平滑,比如流量回放、SQL审核、字符集兼容性评估会支持更多的数据库,推出非常详细和全面的应用、结构、数据迁移可行性分析报告,实现SQL捕获、转换、审核、优化全流程一体化管理等等,也希望能和客户、伙伴以及各位同行进行合作。

以上是GaussDB数据库在迁移方面的一些创新实践,谢谢大家,欢迎交流。

更多推荐

JVM相关知识

运行程序时JVM中内存区域的划分:线程私有:本地方法栈:本地方法栈与虚拟机栈相似,区别是,本地方法栈为虚拟机使用的本地方法服务,虚拟机栈为虚拟机使用的JAVA方法服务。虚拟机栈:虚拟机栈中保存的主要是一个个栈帧,每当有一个方法被调用时,都会有栈帧入栈,方法结束时,栈帧就会被弹出,每个栈帧由局部变量表和操作数栈,动态连接

计算机毕业设计 基于SSM的电影推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌🍅文末获取源码联系🍅👇🏻精彩专栏推荐订阅👇🏻不然下次找不到哟————————————————计算机毕业设计题目《10

亚运之城:杭州的搞钱之王 首富都得靠边站

作者:积溪简评:这届亚运会,杭州成了显眼包,也卷成了蚊香,这背后杭州的搞钱实力,究竟有多牛?#杭州亚运会#马云#阿里手机可以“打”公交10分钟就能到还只要1块钱?这届亚运会杭州的宝子们真成了“显眼包”杭州也卷成了蚊香钱塘江边的灯光秀玉皇大帝睡觉都得戴眼罩路边的椅子能充电垃圾桶穿上新外套就连“美男计”都不放过地铁口人均1

软考 -- 计算机学习(2)

文章目录一、安全性知识1.1信息安全和信息系统安全1.2信息安全技术1.3网络安全技术二、多媒体技术三、软件工程基础知识3.1信息系统生命周期3.2软件过程模型3.3信息系统开发方法3.4系统分析和设计概述3.5结构化开发方法3.6系统运行与维护四、项目管理4.1进度管理4.2质量管理4.3风险管理一、安全性知识1.1

OpenText EnCase 客户案例——诺贝丽斯(Novelis)

OpenTextEnCase客户案例——诺贝丽斯(Novelis)诺贝丽斯(世界领先的铝材压延和回收企业)通过OpenText保存数据和节省资金诺贝丽斯在内部引入电子发现,通过OpenTextEnCaseInformationAssurance(以前称为EnCaseeDiscovery)解决方案交付复杂的案例。挑战电子

MySQL常见面试题(四)

😀前言在进行数据库设计和优化的过程中,我们不得不面对多样化的技术和方法来确保我们的系统可以高效、可靠地运行。为了深入了解和掌握这个领域,我们将讨论InnoDB存储引擎的多种索引类型,以及索引的不同方面和分类。我们还将深入探讨为什么通常推荐使用自增列作为主键,以及主键和唯一键之间的区别。最后,我们将提供一系列可用于SQ

activiti流程变量

activiti流程变量定义流程变量在Activiti中是一个十分重要的角色,流程运转时,需要靠流程变量,业务系统和activiti结合时少不了流程变量,流程变量就是activiti在管理工作流时根据管理需要而设置的变量。比如:在出差申请流程流转是如果出差天数大于三天则需要总经理审批,否者只需要认识审批,出差天数就可以

AI&DAO,将会引领我们走向何方?

人工智能(AI)和分布式自治组织(DAO)都是区块链赛道的热门项目之一,他们看似在不同的领域独立发展,然而,它们之间也存在着巨大的协同潜力。未来,AI有望成为推动DAO发展的重要动力,同时,DAO也可成为AI的最佳实验场所。DAO的下一波浪潮可能是AIDAO。释放生产力的未来首先,让我们来思考一下,AI如何在DAO中释

创建一个简单的外卖订餐系统

在今天的快节奏生活中,外卖订餐系统已经成为了人们日常生活中不可或缺的一部分。这些系统通过在线点餐和配送服务,为用户提供了便捷的用餐体验。在本文中,我们将创建一个简单的外卖订餐系统,使用Python和Flask框架构建后端,以及HTML、CSS和JavaScript构建前端。技术栈我们将使用以下技术栈来构建这个外卖订餐系

【基本数据结构 三】线性数据结构:栈

学习了数组和链表后,再来看看第三种线性表结构,也就是栈,栈和后边讲的队列一样是一种受限的线性表结构,正是因为其使用有限制,所以对于一些特定的需要操作可控的场合,受限的结构就非常有用。栈的定义我们平时放盘子的时候,都是从下往上一个一个放;取的时候,我们也是从上往下一个一个地依次取,不能从中间任意抽出。栈的结构后进者先出,

Rust认识所有权(4)

认识所有权1.认识所有权2.什么是所有权?2.1程序运行管理运行的方式2.2栈(Stack)和堆(Heap)1.栈(Stack)2.堆(Heap)2.3所有权规则2.4变量作用域2.4String类型2.5内存与分配1.以String类型为参考2.变量与数据交互的方式(一):移动2.1String版本3.变量与数据交互

热文推荐