V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qwertyzzz
V2EX  ›  程序员

想问下 这种算投机取巧吗

  •  
  •   qwertyzzz ·
    123 · 2021-09-07 09:14:33 +08:00 · 4577 次点击
    这是一个创建于 1173 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为刚来这个公司 所以每做一个功能的时候基本都要看之前的代码,突然看到一个注释

    6b427c21389d7fb280f51bbde39daf1.png

    具体的就是更新那种关联关系的时候 比如 A 当前关联 1,2 ,3 后面更新后 A 关联 2,3,4 ;之前我还真像注释里说的一样 先删除 再添加,感觉除了自增键容易变大外 数据不大的情况下 感觉也没啥呀。。

    18 条回复    2021-09-09 13:34:11 +08:00
    leeshuai
        1
    leeshuai  
       2021-09-07 09:23:44 +08:00
    创建时间,修改时间会变
    redeemer1001
        2
    redeemer1001  
       2021-09-07 09:24:07 +08:00
    我也是在一个事务内先删除再添加…无并发的微小系统
    arvinsilm
        3
    arvinsilm  
       2021-09-07 09:30:56 +08:00
    因为数据实际上没有发生变动。而这样操作会记录一次更新操作。对统计、监控、鉴权等等不友好。另外如 2L 所说,并发场景下可能会出现问题
    chenmobuys
        4
    chenmobuys  
       2021-09-07 09:35:49 +08:00
    存在的就不删除
    coderluan
        5
    coderluan  
       2021-09-07 09:40:42 +08:00
    感觉这哥们是没说服别人或者不敢说别人,然后跑注释里释放来了,这种行为本身就算投机取巧,要杜绝!
    Loku
        6
    Loku  
       2021-09-07 09:45:21 +08:00
    先删后添,多了 IO 操作。
    angryfish
        7
    angryfish  
       2021-09-07 09:58:08 +08:00
    个人觉得没啥
    NewYear
        8
    NewYear  
       2021-09-07 09:59:07 +08:00
    先删后增,很多系统都是这样操作的,缺点嘛就是每次要传输所有数据和关联表的数据,可能还影响性能,但是比“对比差集”简单太多。
    2i2Re2PLMaDnghL
        9
    2i2Re2PLMaDnghL  
       2021-09-07 10:00:37 +08:00
    git blame 一下看看是不是因为过去导致了问题
    littlewing
        10
    littlewing  
       2021-09-07 10:01:24 +08:00
    1k 的 tps 无所谓,如果你有 1w,10w,100w 的 tps 那就不一样了
    zjsxwc
        11
    zjsxwc  
       2021-09-07 10:21:29 +08:00
    “先无脑全删再重新添加”确实比“diff 出哪些要删哪些要加的”简单。
    前者容易实现,后者能做更多优化且节省资源。
    kisick
        12
    kisick  
       2021-09-07 10:51:51 +08:00 via iPhone
    问题在于其他地方可能用到了这张表的 id,先删再增会导致其他地方保存的 id 失效
    Vegetable
        13
    Vegetable  
       2021-09-07 11:14:25 +08:00
    @kisick 关系表的 ID 不应该被任何业务依赖,也不太可能出现被依赖的情况。

    看一下 Django ORM 的对多关系 Set 操作,可以选择是清空还是对比,同时提到了 race condition 的问题。
    应该说这是一种选择,而不是所谓投机取巧。

    https://docs.djangoproject.com/en/3.2/ref/models/relations/#django.db.models.fields.related.RelatedManager.set
    tonyli
        14
    tonyli  
       2021-09-07 12:02:52 +08:00
    看了各位大佬的回答小弟不解..diff 不需要性能? 不需要 IO? 并发? 锁不住? 再不行乐观不住? 一定要删除? 晚上或者 IO 小的时候跑定时删除?
    sutra
        15
    sutra  
       2021-09-07 12:06:50 +08:00
    // 3.

    在代码注释里写了个 3. 是什么意思?从什么 guideline 里复制来的?
    dwlovelife
        16
    dwlovelife  
       2021-09-08 10:32:55 +08:00
    最主要的问题 你删除的数据事实上在数据库里是没有完全释放的 相当于无故添加了几行隐藏数据 然后页合并和页分裂的时候 也会受影响
    ClorisYe
        17
    ClorisYe  
       2021-09-08 14:51:12 +08:00
    先按简单做,出问题再优化。
    mightofcode
        18
    mightofcode  
       2021-09-09 13:34:11 +08:00
    没有 bug 就行
    不存在“最好的做法”
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1088 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:34 · PVG 07:34 · LAX 15:34 · JFK 18:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.