数据迁移问题

Blade 已结 1 768

一、该问题的重现步骤是什么?


1. 老系统使用的框架比较老,数据库表结构设计有的字段有冗余,而且主键ID使用的还是自动递增。现在想要把业务迁移到bladex框架上,后续会涉及到相关数据迁移的工作的,有以下几点疑惑:

    

    a. 直接使用原来的表结构,所有字段都不改动


    b. 业务字段不改动,修改主键ID为新框架的雪花ID,表结构新增相关创建人、创建时间、修改人、修改时间、状态、是否删除等字段

    

    以两种方案涉及的迁移工作a是比较小的,b方案迁移工作量比较大,涉及数据关联。


    如果使用b方案的话,有什么好的数据迁移方案可供参考,感谢!!!



二、你期待的结果是什么?实际看到的又是什么?


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

bldex2.8

四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

1条回答
  •  admin
    admin (最佳回答者)
    2021-05-06 15:26

    如果只是主键改成雪花,然后加几个固定的业务字段,其他的表结构等都不改,那么推荐B方案,一劳永逸。

    如果改动很大,连结构也要改,那就推荐还是整表迁移吧,其他不要改了。


    关于B方案:

     1. 雪花ID很简单,你随机截取一段雪花ID的起始值,写一个脚本对所有业务表主键相关字段进行更新叠加,举个例子,曾经bladex从int主键切换为long主键,就写了一个脚本直接更新。

    注意⚠️:当然这种全表更新风险很大,务必做好原始备份并且在开发环境、测试环境多次测试无误后再进行升级更新,否则生产数据丢失将会带来灾难性后果

    -- ----------------------------
    -- 修改表字段为雪花id
    -- ----------------------------
    update `blade_client` set id = id + 1123598815738675200;
    update `blade_code` set id = id + 1123598815738675200;
    update `blade_dept` set id = id + 1123598815738675200;
    update `blade_dept` set parent_id = parent_id + 1123598815738675200 where parent_id > 0;
    update `blade_dict` set id = id + 1123598815738675200;
    update `blade_dict` set parent_id = parent_id + 1123598815738675200 where parent_id > 0;
    update `blade_menu` set id = id + 1123598815738675200;
    update `blade_menu` set parent_id = parent_id + 1123598815738675200 where parent_id > 0;
    update `blade_role` set id = id + 1123598815738675200;
    update `blade_role` set parent_id = parent_id + 1123598815738675200 where parent_id > 0;
    update `blade_role_menu` set id = id + 1123598815738675200;
    update `blade_role_menu` set menu_id = menu_id + 1123598815738675200;
    update `blade_role_menu` set role_id = role_id + 1123598815738675200;
    update `blade_notice` set id = id + 1123598815738675200, create_user = create_user + 1123598815738675200, update_user = update_user + 1123598815738675200;
    update `blade_param` set id = id + 1123598815738675200, create_user = create_user + 1123598815738675200, update_user = update_user + 1123598815738675200;
    update `blade_tenant` set id = id + 1123598815738675200, create_user = create_user + 1123598815738675200, update_user = update_user + 1123598815738675200;
    update `blade_user` set id = id + 1123598815738675200, role_id = role_id + 1123598815738675200, dept_id = dept_id + 1123598815738675200, create_user = create_user + 1123598815738675200, update_user = update_user + 1123598815738675200;

    2. 通用业务字段同样需要写脚本,把曾经的用户id、时间等等用脚本迁移过去。而这些一旦成功,代码层面需要参考BladeX的BaseService,在底层加一层封装,代码加上这些通用字段的赋值,这样的话,曾经的业务代码就没有改动了,风险很低。

     3. 总结一下,不管做什么操作,都需要留有后手,留有完整可恢复的备份,多测试几次再进行真正的数据迁移,祝你成功。

    0 讨论(1)
提交回复