• 请不要在回答技术问题时复制粘贴 AI 生成的内容
qiaoqiao881100
V2EX  ›  程序员

做过后端的人来说说重构迁移数据库难度大吗

  •  
  •   qiaoqiao881100 · 5h 35m ago · 2947 views
    业务耦合性高,基本就是一坨屎,而且还是国内不入流的技术栈 c#, 现在要想重构,先从数据库迁移开始,之前没干过迁移这种事情, 这事情难度大吗,现在基本就让 AI 搞,也不知道最终会不会搞好。
    人和库有一个能跑就行
    Supplement 1  ·  4h 29m ago
    另外说明一下背景:
    本人之前干前端的,简历上也基本都是写前端项目,只有一个简单的的后端项目,
    对 mysql 也基本停留在简单的 curd 上面,
    这个 cto 每次问他问题都说让我掌控这个项目,说什么对我技术能力认可的,我 tm 才刚入职 2 月而已。
    Supplement 2  ·  4 mins ago
    另外说一句,目前我只负责一块业务的解耦吧算是,20 个表,然后表里面有一些服务需要拆分的,通过 api 调用方式来交互,但是我心里也没底。虽然用 AI 已经迁移了表,但是各种服务要拆分出来,主要是心里没底
    75 replies    2026-06-23 21:02:21 +08:00
    chachi
        1
    chachi  
       5h 24m ago
    c#也有.netframework 和 netcore
    看你哪种了。
    liuzhedash
        2
    liuzhedash  
       5h 22m ago   ❤️ 6
    不要重构,也不要迁移,百分之百炸
    建议再包一层,然后另起炉灶

    我是过来人,信我
    OutOfMemery
        3
    OutOfMemery  
       5h 21m ago
    楼上+1 ,最好是另起炉灶。。。。
    spacebound
        4
    spacebound  
       5h 21m ago
    有句老话怎么说来着“重构一时爽,测试火葬场”哈哈哈哈
    看你的项目规模和业务负责程度了。你再用 ai 也只能帮你转换 sql 语法,写写数据导入导出脚本,你要指望着 ai 帮你重构整个数据库,那基本完完~
    总结:能跑就不要动
    mikawang
        5
    mikawang  
       5h 20m ago
    慢慢迁移吧,新老库同时运行,CDC 从老库同步过去,出问题了能立马切回去,反正要有兜底方案
    jydeng
        6
    jydeng  
       5h 19m ago
    难度非常大
    2020diyige
        7
    2020diyige  
       5h 18m ago
    重构的难度比新做可大多了,,绝大部分情况重构没有意义
    NoKey
        8
    NoKey  
       5h 14m ago
    有些重构,其实就是相当于重新做啊
    coderxy
        9
    coderxy  
       5h 13m ago   ❤️ 3
    难度大,做好回滚方案,除非你随时准备好跑路
    一般都是先双写、然后同步旧数据、再双读验证、再把读切到新库、最后跑一段时间,没问题把双写关掉。
    loryyang
        10
    loryyang  
       5h 12m ago
    迁移还好,重构那是风险很高。但以你的描述,你想解决架构腐烂的问题,那还是得重构啊。这事,我建议是,你至少先运维老系统一年,再提重构的事情。你没摸清楚之前千万不要重构
    xiaomushen
        11
    xiaomushen  
       5h 11m ago
    不大,还好
    play78
        12
    play78  
       5h 8m ago
    我不太清楚你的业务场景。说说我的。
    公司内部一个供应链管理系统,就是简单的库存管理+行业特性。
    技术上+数据库完全重构。难不难?不难!开发 4 个多月就重构完了。
    因为数据是动态的,不能有错误,否则库存对不上。
    1. 花了一个周末过来进行数据迁移(花了一个星期,做数据转换脚本,周末才执行)
    2. 业务部门配合并行 2 套系统,期间,所有数据录两遍(操作逻辑还不太一样)、数据报表互相验证,半年!
    你就说业务部门肯不肯陪你这么玩吧。
    为什么需要半年,因为数据流不一样,新系统多了很多中间生产状态,更加精细化了,而一个产品生产周期平均需要 2-3 个月。
    yanguangs
        13
    yanguangs  
       5h 8m ago   ❤️ 1
    重构 99.9999%的情况下没有意义

    现在用 AI 来搞, 最明显的就是会超出上下文长度, 现在就是限额

    我之前搞一个需求, 一个 json 字段,tree 结构,打平存储到三张表里面,
    就这个需求,因为 token 限额跟 vibe coding 流程调优, 都搞了快 2 个星期, 同时还要不耽误其他的功能开发

    吃力不讨好, 领导关注的, 跟你关注的完全不是一个点.

    领导一不给经费去买 coding plan ,二要你不影响其他功能.
    pony2335
        14
    pony2335  
       5h 1m ago
    难度巨大无比,别干,而且必炸,有 AI 也不好使
    PopRain
        15
    PopRain  
       4h 50m ago
    迁移数据库是迁移数据库,重构是重构。。。。
    迁移数据库大部分 ERP 系统不会特别难,数据库语法基本接近,估计 AI 也能帮忙
    不理解业务,就不要去重构
    nofishing
        16
    nofishing  
       4h 50m ago
    c# 不挺好的吗,数据库不会是 sql server 吧,要换成啥?
    wangritian
        17
    wangritian  
       4h 50m ago
    没太理解为什么是先从数据库迁移开始,不应该是先开发新系统,最后迁移数据吗
    如果没办法一口气开发完,就开发一部分然后把老系统的对应代码改成远程调用
    迁移数据也没什么麻烦吧,原始数据保留不动,让 AI 反复写迁移脚本+人工测试不就完了
    qiaoqiao881100
        18
    qiaoqiao881100  
    OP
       4h 47m ago
    @nofishing 对,业务系统的数据库就是 sql server ,老板目标是最终想用 go 重构整个系统,现有 c#的系统太垃圾,有部分数据库是用 mysql 的,所以现在想先把业务上的 sql server 数据库迁移到 mysql, 然后再把我负责的业务用 go 重构 解耦。
    qiaoqiao881100
        19
    qiaoqiao881100  
    OP
       4h 47m ago
    @wangritian 想先把业务上的 sql server 数据库迁移到 mysql, 然后再把我负责的业务用 go 重构 解耦。
    qiaoqiao881100
        20
    qiaoqiao881100  
    OP
       4h 46m ago
    @wangritian 我他妈也不知道为什么就我负责的这块先重构,让我先搞,业务系统那么庞大呢。我日了
    nofishing
        21
    nofishing  
       4h 43m ago
    @qiaoqiao881100 #18 没意义啊,C# 不挺好,分模块慢慢优化呗。sql server 迁移 mysql 更没意义,除非 TB+ 数据单机放不下要换分布式数据库。我之前做过 10TB 的 sql server 迁移 OLAP 数仓,你这种 TP 的业务系统更复杂
    hnbcinfo
        22
    hnbcinfo  
       4h 41m ago
    重构这事交给 gpt-5.5 最合适。
    wysnxzm
        23
    wysnxzm  
       4h 40m ago
    新业务用新项目新数据库,老业务不要动,经验之谈听不听随你
    cwliang
        24
    cwliang  
       4h 36m ago
    风险大收益低的事情不能干
    zt4027050
        25
    zt4027050  
       4h 35m ago
    确实能动就不要搞,吃力不讨好,除非你有明确的性能优化指标,重构后可以提升 xx 倍,然后指望他升职加薪
    uCharles
        26
    uCharles  
       4h 34m ago
    怎么说呢,这种事有两个极端,有可能是想重用你也有可能是想干掉你
    chutianyao
        27
    chutianyao  
       4h 31m ago   ❤️ 1
    存量数据同步->增量双写->job 兜底比对/修复异常数据->开关控制读流量切到新库->开关控制停写老库->下线清理

    大概就这么个流程, 我之前迁移线上 0 级系统
    qiaoqiao881100
        28
    qiaoqiao881100  
    OP
       4h 28m ago
    @chutianyao 你写的字我都认识,但是看不懂。俺之前干前端的。😭
    SURA907
        29
    SURA907  
       4h 26m ago
    感觉什么都没说清楚

    1. 业务重构干嘛动数据库?
    2. 所谓数据库迁移又是哪种迁移?
    > - 更换数据库( mysql -> pg )?
    > - 还是单纯挪个窝?
    qiaoqiao881100
        30
    qiaoqiao881100  
    OP
       4h 25m ago
    @SURA907 最终目的是替换 c#这套东西,用 go 重构,所以想先把业务上的 sql server 数据库迁移到 mysql, 然后再把我负责的业务用 go 重构 解耦。
    qiaoqiao881100
        31
    qiaoqiao881100  
    OP
       4h 24m ago
    @SURA907 现在我才发现我是不懂后端被 cto 忽悠了。cto 可能也想找个垫背的
    qiaoqiao881100
        32
    qiaoqiao881100  
    OP
       4h 23m ago
    @SURA907 确实你这几个问题真是灵魂拷问, 现在只是现有系统某些业务性能不好 , 现有系统很多做法很龊,所以重构,但是还在跑。迁移数据库是 sql server 到 mysql
    ntdll
        33
    ntdll  
       4h 20m ago   ❤️ 2
    任何公司
    任何项目
    任何理由

    重构 = 自杀
    SURA907
        34
    SURA907  
       4h 15m ago
    @qiaoqiao881100 这种重构巨危险,而且工期以年为单位,除非到了不彻底重构就会爆炸的程度,否则不建议碰

    我之前有彻底重写过一个很边缘的小服务,没有碰数据库,即使如此也花了半年多

    这个服务经过几手,被改的乱七八糟,经常搞出来脏数据,频繁去生产数据库清理脏数据不是什么好事,拖了很久拖不下去了,与其缝缝补补不如彻底重写

    PS:这种细活不要太相信 AI
    yuyoung
        35
    yuyoung  
       4h 2m ago
    前端重构都容易炸飞,涉及到数据就更容易炸飞了,而且炸飞的后果更大,重构需要的不止是勇气,还要有理由,大多数重构也没法创造可观的 KPI 。
    nolynfeng
        36
    nolynfeng  
       3h 52m ago
    真是胆子大,不仅是数据库想迁移,代码也要一起改,我只能说牛,佩服佩服
    Akuikkk
        37
    Akuikkk  
       3h 47m ago
    重构过多个项目,我的经验是必炸。
    你应该做好向上管理,明确告诉老板风险很大。真炸了你也打好预防针了。
    loading
        38
    loading  
       3h 44m ago
    > 这个 cto 每次问他问题都说让我掌控这个项目,说什么对我技术能力认可的,我 tm 才刚入职 2 月而已。

    这是 PUA 话术,op 没感觉出来?
    zdjohn001
        39
    zdjohn001  
       3h 44m ago
    做前端的搞数据库重构,感觉有点离谱,数据库里面道道还挺多的,迁移数据不少坑要填,一旦有问题可能很难恢复
    cando
        40
    cando  
       3h 44m ago
    可能真就找个背锅的
    tommyshelbyV2
        41
    tommyshelbyV2  
       3h 35m ago
    绝对不要迁移,老的就不要动,直接双写到新数据库。缓慢的过渡业务。
    longaiwp
        42
    longaiwp  
       3h 33m ago
    看起来 AI 真的给了一些人盲目的自信,还能跑的东西你动它做什么,迁移个.NET 8 最多了。
    qiaoqiao881100
        43
    qiaoqiao881100  
    OP
       3h 32m ago
    @loading 我肯定感觉出来了啊,都说 2,3 遍了,就是 pua 我呗,没办法,刚入职,又不好找工作。
    Ayanokouji
        44
    Ayanokouji  
       3h 32m ago
    我自己写的,我熟悉业务的,我都不敢随便重构。虽然我有更好的设计,但是生产上依旧是缝缝补补。
    longaiwp
        45
    longaiwp  
       3h 32m ago
    看了看,还要搞什么 Go ,不要看到什么都想搞点新的技术栈进来。
    qiaoqiao881100
        46
    qiaoqiao881100  
    OP
       3h 32m ago
    @longaiwp 哈哈哈是的, 现在项目是.net5 的 abp
    qiaoqiao881100
        47
    qiaoqiao881100  
    OP
       3h 30m ago
    @yuyoung 这个老板不懂技术,估计是被这个 CTO 忽悠了可以搞重构优化性能, 又知道 go 的性能好。然后他可能有承诺了老板重构,没办法只能向下施压向上管理了
    superrichman
        48
    superrichman  
       3h 29m ago
    这 CTO 真会画饼
    qiaoqiao881100
        49
    qiaoqiao881100  
    OP
       3h 28m ago
    @Ayanokouji 看起来就是个火坑
    minibear2021
        50
    minibear2021  
       3h 21m ago
    token 管够,我能给你重构一个核电站出来。
    jackwang123
        51
    jackwang123  
       3h 19m ago
    重构,迁移这种活,搞好了没有增加收益,一不小心干砸了,你就得背锅。而且很容易出岔子。这就是典型的脏活累活
    rxswift
        52
    rxswift  
       3h 17m ago
    用 go 重构业务,不动数据库,是不是就容易了?
    qiaoqiao881100
        53
    qiaoqiao881100  
    OP
       3h 12m ago
    @minibear2021 token 确实管够,100 刀的 codex 开着,现在主要是我没啥思路, 现在主要都是参照 AI 一步一步来的。也不知道哪里会出岔子
    shannn
        54
    shannn  
       3h 8m ago
    招你来背锅,你一个新来的也不了解业务,测试要是不全面就无了
    wu00
        55
    wu00  
       3h 6m ago
    干!
    事教人,一次就会
    Akuikkk
        56
    Akuikkk  
       3h 1m ago
    @qiaoqiao881100 我还以为是 framework 。.net 5 abp 我感觉问题不大啊,技术上没有迁移的必要啊,无论是可维护性还是性能上。 不是说 go 就一定比 c#性能好的。
    xiaomushen
        57
    xiaomushen  
       3h 0m ago
    没关系,有 AI ,很好搞定的
    qiaoqiao881100
        58
    qiaoqiao881100  
    OP
       2h 52m ago
    @xiaomushen 到你这里就很 easy 了?
    TypeErrorNone
        59
    TypeErrorNone  
       2h 36m ago
    前端仔还是没经验
    webfamer
        60
    webfamer  
       2h 31m ago
    你这和我发帖询问能不能去的那个工作有的一拼😅
    newtype0092
        61
    newtype0092  
       2h 6m ago
    有资深的 DBA 看着问题不大,但是复杂数据出问题难免的,运气好的话有时间慢慢修复还好,运气不好可能得连着好几个通宵。

    我说的前提是对整个技术架构和业务流程完全熟悉的人都在场指挥的情况下,业务没完全搞透上来就动手基本就是个炸。
    AutumnVerse
        62
    AutumnVerse  
       2h 4m ago
    @qiaoqiao881100 100 刀刀 codex 就敢说管够了?太小看上下文爆炸后的 token 消耗了吧

    1 、你都不懂后端,没深入的经验,这种重构,没个十年八年的屎山开发经验,这你敢动手?
    2 、sql server 迁移 mysql 不是脑子有包吗,sql server 迁移 pg 都能说得通,迁移 mysql 不是负优化吗?
    3 、c#+sql server 这个技术栈没有任何问题,抛开不好招人的问题,go+mysql 还不如前者
    4 、mysql 的 sql 语句有很多方言,不是标准 sql ,迁移成本远大于重写


    综上所述,必炸,就算顶着 n 次故障,弄完上线了,也没任何收益啊,系统垃圾是代码问题,不是 c#+sql server 的问题,这一套架构没有任何问题。

    顺带一提,你们都用 c#+sql server 这一套了,直接打电话给微软呗,只要钱给够,微软的服务绝对包你满意,上门服务,各种性能问题给你查得明明白白,怎么迁移怎么升级,都给你安排的舒舒服服的
    micolore
        63
    micolore  
       2h 2m ago
    有过几次迁移的经验,只要给够时间,想怎么迁移都行。
    liuliuliuliu
        64
    liuliuliuliu  
    PRO
       1h 59m ago
    不是,别的先不说
    数据库能不选 mysql 就不要 mysql 啊,所有数据库里最差的就是 mysql 了,排除 access 和 sqlite……
    memos
        65
    memos  
       1h 53m ago
    巨坑,现在公司就在做信创的改造,oracle 迁移到国产数据库,不仅数据库迁移,整体项目都重构,准备跑路了已经,幸亏在试用期
    lujiaosama
        66
    lujiaosama  
       1h 47m ago
    重构最大的成本是测试验证。再烂的代码只要能在生产环境稳定跑起来那就是经过检验的合格的。业务陪你这么一通折腾有收益吗?仅仅是为了代码看起来漂亮?
    AIIsHallucFree
        67
    AIIsHallucFree  
       1h 27m ago
    你没说清楚是哪种类型的迁移啊,是从 mysql 数据库迁移到其它关系数据库吗?
    slowgen
        68
    slowgen  
    PRO
       1h 5m ago
    从 CTO 角度来说难度可能不大,比如用绞杀者模式逐步替换 API ,结合流量镜像方案把生产流量同时导入测试环境的新老系统看数据对比来验证防止翻车等,手段很多。

    如果是从培养你角度让你直接参考 https://typescript-is-like-csharp.chrlschn.dev/pages/intro-and-motivation.html 这种方便 TypeScript 熟练工快速学习 C# 的文档两天就能上手读懂项目,渐进式重构问题也不大。

    但是选择的方案这么激进,对你来说难度就很大了,起码出一个风险应对方案来,除非业务规模很小,项目也不大。

    同样是选择 AI 方案,还不如先让 AI 把当前系统优化好。
    itechify
        69
    itechify  
    PRO
       59 mins ago
    重构个鸡毛啊,又不是不能跑😆
    Plating
        70
    Plating  
       37 mins ago
    刚毕业到国企的时候,一个内部商密系统重构,出了两次事故,最后分部研发领导和一半研发被干掉了
    xubeiyou
        71
    xubeiyou  
       34 mins ago
    看重构可以带来什么
    Paii
        72
    Paii  
       31 mins ago
    一般来说非常大,而且实际迁移进度可能跟规划排期有很大出入
    nuII
        73
    nuII  
       30 mins ago
    如果是项目负责人、技术负责人牵头的,也就是有人背锅的,那就干。否则,千万别干。
    PopRain
        74
    PopRain  
       14 mins ago
    sql server 的系统,迁移到 my sql ???? 一个查询估计就把系统干趴下了,my sql 复杂查询太烂太烂
    night98
        75
    night98  
       12 mins ago
    我是后端佬,还算经验比较足的,你这个锅我都不敢接,这种重构就跟楼上说的一样都是以年起的,最佳的方案实际上是老的系统不管,新需求在新架构上开发,需要老系统的再迁移对应功能到新系统慢慢蚂蚁搬家。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3220 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 187ms · UTC 13:14 · PVG 21:14 · LAX 06:14 · JFK 09:14
    ♥ Do have faith in what you're doing.