担心异构数据库迁移踩“坑”?听听大咖们怎么说

2024年 8月 1日 67.3k 0

张建龙:YashanDB主要从两个方面保障迁移数据的完整性。一方面是YashanDB内核设计上面,与Oracle保持一致,其他类型数据库如MySQL、PG等在不与Oracle兼容特性冲突的前提下,YashanDB也尽可能和它们保持兼容;另一方面用崖山配套工具迁移平台YMP来保障。

首先,YashanDB在内核设计上数据类型、语义语法、函数处理行为等均和Oracle保持一致。

在设计YashanDB时,就已考虑将数据类型和Oracle的数据类型保持一致,包括长度、精度等;还有对Oracle语法语义的兼容,包括那种很小的细节,如每个函数的处理结果、每个空类型的返回结果都会保持一致。所以从Oracle迁移至YashanDB会非常方便。

这样可以最大程度上降低因为异构数据库的迁移带来的应用行为的不一致,导致业务失败。所以说从Oracle迁移,我觉得我们是相对是做的是比较全的。

其次对于PG和MySQL这两个数据库,崖山主要采取如下两种做法:

一是YashanDB兼容两者与Oracle非冲突的特性,如果遇到了PG和MySQL特有的东西,而且与Oracle不冲突的,那我们就会把这些兼容性也会做到YashanDB里面去;但是假如这个行为和我们之前设计的Oracle行为是有冲突的话,目前需要通过修改应用代码的方式来解决,因此如果是从MySQL或PG迁移到YashanDB的话,它可能存在少量的修改。

这是当前的一个处理方法,随着MySQL迁移的市场需求越来越多,我们正在研发与MySQL兼容的版本,预计下半年进行发布。在MySQL的兼容版本里面,我们就会尽量跟MySQL保持语义语法的兼容,包括执行结果、所有函数类型的兼容。这样在迁移MySQL时,就像现在迁移Oracle一样,几乎不需要应用去做一些适配改造。

二是YashanDB适配两者的数据类型长度和精度等,以避免数据丢失。因为Oracle跟MySQL本身的数据类型是有一定的差异,在迁移MySQL、PG这种数据库的时候,对于数据类型,我们现在的设计是选择一个我们的长度、精度等于它当前的一个长度、精度或者说大于它的一个长度和精度,这样的话从它迁移过来就不会因为它存储长度的不够或者是精度的问题,导致它原来的数据迁移失败的问题。

这是我们从设计上说,崖山对数据迁移的数据一致性做的保障。

第二种方式就是通过崖山迁移平台YMP来保障。YMP支持全量校验和统计校验,全量校验能够保证数据的一致性、完整性,但是效率偏低;统计校验效率较高,但它是通过对比源库和目标库的行数来快速确认数据是否完整,无法保证完整精确的一致性。大家可以根据数据量的大小来选择校验方式。

在YMP新的版本里,我们还会对这两种校验方式做一个折中,既保留行数的快速校验,又保证数据的全量校验一致性,但这个全量不是指全部的数据。比如说我们会随机抽取部分行数做些校验,这样的话就是根据随机抽取的行数,看它是否一致,这样的话我们可以根据我们抽取的数据量大小来保证我们校验的效率。

当然在真实的迁移场景中,不同的生产环境可能对停机时间是要求不一样的,有的可能只能停几分钟,有的可能停几小时,有的可以停一天,所以说我建议如果生产时间充裕的话,最好还是进行全量校验;如果时间不充裕,可以将全量校验放在测试环境,在测试环境去校验我们的数据一致性。同时,对于异构数据库的迁移,应根据我们应用对数据的一致性要求,建议尽量对应用做全面的功能测试、性能测试以及回归测试等,来保证我们应用系统不出问题。一般来说越重要的系统,就更要做这种测试,且要测得更充分一些。

这就是我们崖山目前在保障异构迁移过程中数据类型的一致性,以及精度数据丢失等问题上面做的一些工作。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论