数据库迁移

背景:

        领导布置任务,让把两个数据库中存储的数据全部迁移到另一个数据库中

        分别是:mysql--->oceanbase,oracle--->oceanbase这两个。

步骤:

        mysql--->oceanbase

        先将mysql中的数据迁移到oceanbase中,本来领导布置的是15张表,但是领导没注意到有外键,结果多了三张基础表,所以一共是18张表,有外键,所以迁移顺序是有要求的。先将建表语句DDL创建完毕,然后在建表语句的基础上迁移数据。

        在这里我使用的是责任链模式,一是数据的量不大,二是表数据迁移是有顺序的。

        先创建一个处理器接口,这个接口中有一个方法migrate(),所有的handler都要实现这个接口,每个handler中的migrate()方法都调用自己具有的三个方法,一是selectList(),将mysql中的数据表中的数据查询出来;二是processData(),对数据进行处理;三是writeToOceanbase(),将数据写入到oceanbase数据库中。在这个过程中使用mybatisplus的@DS注解,实现数据源的切换。

        然后写一个责任链管理器MigrationChainManager,用来对责任链进行管理,在这里通过反射的方式获取所有的handler,利用多态,左边是接口,右边是通过反射拿到的实现类,然后调用接口中的migrate()方法,实现数据的迁移。

        在这个过程中,将要处理的handler的名字写入到nacos中,通过配置类读取,然后再责任链管理器中通过for循环的方式按nacos中的配置文件的顺序一次拿到对应的处理器进行处理。从而实现责任链的顺序。

        oracle--->oceanbase

        这个数据库就三张表,而且没有外键,不值得使用责任链模式,使用模板方法直接迁移就行。

        先创建一个接口,这个接口中有四个待实现方法,分别是:truncateTable()用来实现目标数据库数据的清理;sourceData()用来从源数据库获取数据;processData()用来处理从源数据库获得的数据;writeToOceanBase()用来将数据写入到目标数据库。还有一个默认方法:migrate()用来按照顺序调用上述四个方法。

        子类实现接口,重写四个方法。然后在service方法中,注入四个子类对象,然后在调用migrate()方法,即可实现数据的迁移。

注意事项:

        1.数据源切换的时候,由于使用的是mybatisplus的@DS注解,这个注解不能配合@Translational注解使用,因为后者会导致数据源的锁定,不能实现数据源的切换。

        2.@DS注解使用的时候,在配置文件中的数据源的配置是用规定的配置顺序的。

        3.设计模式设计好模板,重复的代码交给AI。

        4.oracle数据库的数据库结构和mysql不一样,配置起来也不一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值