想问下 这种算投机取巧吗

2021-09-07 09:14:33 +08:00
 qwertyzzz

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

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

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

在代码注释里写了个 3. 是什么意思?从什么 guideline 里复制来的?
dwlovelife
2021-09-08 10:32:55 +08:00
最主要的问题 你删除的数据事实上在数据库里是没有完全释放的 相当于无故添加了几行隐藏数据 然后页合并和页分裂的时候 也会受影响
ClorisYe
2021-09-08 14:51:12 +08:00
先按简单做,出问题再优化。
mightofcode
2021-09-09 13:34:11 +08:00
没有 bug 就行
不存在“最好的做法”

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/800291

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX