V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
cinlen
V2EX  ›  程序员

请教后端们: 数据库 schema 变更让项目执行 migrate 还是让 DBA 处理?

  •  
  •   cinlen · 20 小时 38 分钟前 · 651 次点击

    假设有 user 微服务和 user 表.

    user 微服务新增了一个迭代 v1.0.2 ,但是有一个 break change ,需要:

    1. user 表新增一个字段 aaa
    2. aaa 字段需要根据每个 user 的情况赋予不同初始值
    3. user 表删除一个字段 bbb

    目前有两种方案:

    1. user 微服务 v1.0.2 上线后去 migrate user1.0.2.sql
    2. 让 dba 在上线时配合去执行这些操作

    这里只是举一个例子。

    方案 1 感觉用的不少,但个人感觉线上 ddl 还是选择方案 2 dba 处理更稳妥一点, 特别是数据量大时涉及到锁表啥的。

    请问什么情况下使用方案 1 ,什么情况下使用方案 2 ?想要各位后端大佬们的一些好的实践方案。

    14 条回复    2025-01-17 23:24:17 +08:00
    sagaxu
        1
    sagaxu  
       20 小时 36 分钟前
    大表加个字段可能要锁表几个小时,DBA 处理可以缩短到秒级
    zakokun
        2
    zakokun  
       20 小时 33 分钟前   ❤️ 1
    删除字段这个行为没必要,线上业务从来不应该删除字段;即使要删除,那也是稳定运行了 N 个版本以后,确认没影响了才删除,谁会一上线就急匆匆的删除字段啊
    只要不删除字段,那就是正常发布就行了,先加字段,然后发新版本,没啥特别的
    EricXuu
        3
    EricXuu  
       20 小时 19 分钟前 via Android
    先找 dba 加字段赋默认值,然后起一个刷数服务刷数。
    删除字段不必要。确实要删,先去掉代码里的引用,稳定几个版本后删字段。
    JYii
        4
    JYii  
       20 小时 2 分钟前   ❤️ 2
    通常 DDL 操作都要走 OA 审批,到 DBA 去操作。
    一个点是让开发操作少一点风险;另外一点数据库分配给 web 服务的权限不足,没法操作。
    当然你要说你有权限,那应该默认你可以随便搞
    cinlen
        5
    cinlen  
    OP
       19 小时 43 分钟前
    @JYii 权限问题确实没考虑到,那确实无脑使用第二种方案就行了。
    billzhuang
        6
    billzhuang  
       19 小时 11 分钟前
    postgres 几乎没有这个问题。
    0x663
        7
    0x663  
       19 小时 3 分钟前
    @sagaxu DBA 是怎么做到的?
    sagaxu
        8
    sagaxu  
       18 小时 23 分钟前   ❤️ 1
    @0x663 DBA 字段加新表上,同步复制完数据,旧表只读改名,再把新表 rename 成旧表
    xuelu520
        9
    xuelu520  
       17 小时 30 分钟前
    不走 migrate 。
    加入大表加字段什么的操作,锁表好久呢,这种肯定要闲时半夜去执行的。
    另外有些字段是要先上线的,不好控制时间。
    ilucio
        10
    ilucio  
       16 小时 34 分钟前
    dba 操作就没事了,rename 的时候找一个
    ilucio
        11
    ilucio  
       16 小时 33 分钟前
    @ilucio 上面这个没打完就自动发了,重发一次。。
    ilucio
        12
    ilucio  
       16 小时 31 分钟前
    @ilucio 生产上 drop column 风险很高,多余字段放着就好了,一般只有 DDL 无法更改字段类型时才需要考虑拉 DBA
    rename 表
    Tidusy
        13
    Tidusy  
       10 小时 52 分钟前
    我这边刚出了一个线上故障。新增字段设置了默认值,上线后 auto-migrate 直接往存量数据刷数,把数据库卡了
    cinlen
        14
    cinlen  
    OP
       10 小时 28 分钟前
    @Tidusy 如果项目中采用 migrate 的方式,那么如何避免这类情形发生呢?让 DBA review 吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2717 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:52 · PVG 09:52 · LAX 17:52 · JFK 20:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.