您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。 [-]:MogDB中MySQL兼容性——PostgreSQL体系下的多语法解析器实现 - 发现报告

MogDB中MySQL兼容性——PostgreSQL体系下的多语法解析器实现

2024-10-05 刘伟 - 米软绵gogo
报告封面

刘伟@云和恩墨 数据库发展的三个时代,成就了三种商业形态 •商业数据库时代:成就了商业软件时代;•开源数据库时代:成就了互联网时代;•新数据库时代:是商业和开源、SQL和NewSQL交融的时代,成就了云和数字化时代; 国产化中一个特殊问题:MySQL“难民” •前一轮“去IOE” •开源数据库(MySQL为代表)•分库分表•中间件 •现在历史时代 •真·国产化数据库•MySQL归属Oracle,Oracle归属美国•相信Oracle的法务部门 •新时代的新问题 •O兼容性•M兼容性•DB2兼容性 一个数据库,怎么实现多种数据库的语法? 每个兼容性开发单独的数据库OR 插件式实现一套数据库内实现多种兼容性 目录 03 独立实现 openGauss插件基本机制创建一个B兼容性数据库dolphin基础 迁移 独立的语法实现独立的函数实现独立的通讯协议冲突机制的实现 兼容性评估离线迁移在线同步数据校验 注:PPT中代码片段均来自openGauss dolphin基础 openGauss插件基本机制 •插件文件结构: •so文件•control文件•sql文件 •so文件•功能实现位置•set_extension_index•u_sess->attr.attr_common.extension_session_vars_array[index]=mem; •control文件•版本号•插件库位置 •sql文件•实际动态注册函数位置•执行升级 hook大军 创建B兼容性数据库时候 •create database b•单纯新增元数据•第一次登录•必须是系统管理员用户•登录中自动执行create extension dolphin语句•登录成功即安装成功•dolphin插件在初始化函数中注册各个钩子函数,初始化必要的内存结构 纯dolphin实现 独立的语法实现独立的函数实现独立的通讯协议冲突机制的实现 P a r t.0 2 独立的语法hook •在语法解析器执行时候,检查当前是否有语法hook•如果已经被hook了,调用插件中的语法解析器 rename table语法变换 •openGass中原本就有rename类似语法•rename语法变换为MySQL兼容性语法•执行阶段去判断是否为兼容性执行过程•根据语法额外扩展多个表的rename过程 独立的函数实现 •重建单独的B兼容性函数缓存•替换掉server的函数缓存•当sql处理函数搜索调用•直接引用插件内的函数 用户锁的实现 •MySQL用户锁•MySQL中对字符串直接加锁•openGauss中机制•advistory锁•对int64/或者两个int32的组合可以空中加锁 •实现 •实现字符串到数字的映射表•dolphin中实现对应函数•通过sql创建函数 •限制•无法支持线程池 独立的通讯协议 •开启单独的监听端口•兼容MySQL密码认证协议•兼容MySQL SQL执行协议•SQL收到后转到插件解析处理 独立的SQL执行--机制冲突 •MySQL VS PostgreSQL •错误信息机制•MySQL积累返回•PostgreSQL即时返回 •大小写•MySQL大小写不敏感•PostgreSQL大小写敏感 •结果集•MySQL一个SQL返回多个结果集•PostgreSQL一SQL返回一个结果集 MDB--数据迁移周期管理 针对异构环境中各类常见数据库迁移到openGauss/MogDB,我们推出了MDB系统,一款异构数据库迁移同步全生命周期的自动化工具系统,囊括了数据迁移工作中的方方面面,实现数据迁移的全生命周期管理。 离线迁移工具 在线同步系统 实时数据在线同步工具,通过插件实时捕获源库中的数据变更,并对数据进行并发解析,最终生成目标库中可执行的SQL语句,将数据同步到目标数据库中。同时也支持在同步过程中的各类名称与数据转换。 自动化且高效的实现各类异构数据库之间的迁移工作,包括对象迁移和数据迁移。可自定义迁移并发度,自动化进行对象与数据的兼容性改造,对于部分的OraclePL/SQL代码也有丰富的规则实现自动改写。 MDB-各类型数据库的支持 MDB全称MogDBDataBridge,是一款异构数据库迁移同步套件,通过主流关系型数据库与MogDB之间构建数据桥,支持异构数据库迁移全生命周期的核心功能,助力企业客户完成国产化替代流程。 ①兼容性评估②SQL性能评估 ①对象结构同步②全量数据快速迁移③增量数据准实时同步 迁移中 迁移后 ①全量数据校验②持续数据校验 MDB-SQL采集与兼容性评估 MDB系统中支持迁移前的兼容性评估和SQL性能评估,该部分功能由内部SCA工具来实现完成。用户可在MDB系统中直接使用兼容度评估功能来对MDB中已加入的节点进行评估,也可以独立使用SCA命令来适配无法直连数据库的采集与评估。 目前支持对七种源端数据库进行SQL数据采集和兼容度分析: 1.Oracle:支持自动采集(OC),兼容性分析(OI),性能对比分析(OS)2.MySQL:支持基于慢日志的SQL自动采集(MC),兼容性分析(MI)3.DB2:支持自动采集(DC),兼容性分析(DI)4.PostgreSQL:支持基于pg_stat_statements的自动采集(DC),兼容性分析(DI)5.Informix:支持自动采集(DC),兼容性分析(DI)6.SQL Server:支持自动采集(DC),兼容性分析(DI)7.File:支持csv,excel文件的解析,兼容性分析(DI) 支持在如下操作系统和平台架构下运行: 1.Linux x86_642.Linux arm64 (ARM平台由于没有DB2/Informix客户端,故不支持DB2/Informix数据采集) MDB-数据同步与迁移 MDB数据同步采用的是开源的Debezium组件进行定制,可实现对不同数据库增量数据的捕获与解析。 MDB-数据校验 在数据对比校验过程中,关键在于特征数据的处理与对比。 对此,MVD采取了两种对比策略 1.区块对比:对全表进行Hash计算,将全表分成若干数据块,逐个数据块对比Hash值 2.逐行对比:逐行计算每行数据的特征值(md5),该模式下,特征值可能在数据库层计算,也可能在MVD层计算 感谢您的观看