justinbieber1997 2020-10-29 10:21 采纳率: 0%
浏览 585

老数据迁移到现有数据库,现有数据库用sharding-jdbc分库分表了,那么我该迁移到哪个库的哪个表呢?

我的方案是在主库里新建一个表,把老数据手动迁移过去,并且不希望后续系统往里插数据
新表只存我手动迁移的老数据,并且老数据也能在系统里查到,现有配置如图图片说明
spring.shardingsphere.sharding.tables.ent_invoice.actual-data-nodes=ds$->{0..1}.ent_invoice$->{0..1}

spring.shardingsphere.sharding.tables.ent_invoice.databaseStrategy.inline.shardingColumn=FPFM

spring.shardingsphere.sharding.tables.ent_invoice.databaseStrategy.inline.algorithmExpression=ds$->{Math.abs(FPFM.substring(FPFM.length()-1,FPFM.length()).hashCode()) % 2}

spring.shardingsphere.sharding.tables.ent_invoice.table-strategy.inline.sharding-column=FPFM

spring.shardingsphere.sharding.tables.ent_invoice.table-strategy.inline.algorithm-expression=ent_invoice$->{Math.abs(FPFM.hashCode()) % 2}

我是不是只需要在第一行配置后面加上我的新表(ds0.ent_invoice_sk)就行,别的不用动?

  • 写回答

1条回答 默认 最新

  • 小码农叔叔 Java领域优质创作者 2023-06-09 21:36
    关注

    个人觉得你的这个方案可能需要重新评估是否合理,个人建议仅供参考:
    1、老表的数据和分库后的新数据是否有冲突?首先搞清楚这个问题;
    2、如果有冲突的情况,和没有冲突的情况,在数据迁移的具体操作是不一样的;

    个人方案建议:
    1、假设新老表数据没有冲突,可以每天定时增量迁移数据,至于迁到那个表,使用分库分表默认算法即可;
    2、业务上面的数据同时双写,老表依然写数据,但是业务数据的读取走新的分表,同时一边迁移数据,同时一边删除老表数据;
    3、另有一个程序不断扫描新老表数据差异,当差异越来越小,小到一个非常小的地步时,可以考虑全部切换为新表数据,然后手工补偿少许数据;

    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?