因为刚来这个公司 所以每做一个功能的时候基本都要看之前的代码,突然看到一个注释
具体的就是更新那种关联关系的时候 比如 A 当前关联 1,2 ,3 后面更新后 A 关联 2,3,4 ;之前我还真像注释里说的一样 先删除 再添加,感觉除了自增键容易变大外 数据不大的情况下 感觉也没啥呀。。
1
leeshuai 2021-09-07 09:23:44 +08:00
创建时间,修改时间会变
|
2
redeemer1001 2021-09-07 09:24:07 +08:00
我也是在一个事务内先删除再添加…无并发的微小系统
|
3
arvinsilm 2021-09-07 09:30:56 +08:00
因为数据实际上没有发生变动。而这样操作会记录一次更新操作。对统计、监控、鉴权等等不友好。另外如 2L 所说,并发场景下可能会出现问题
|
4
chenmobuys 2021-09-07 09:35:49 +08:00
存在的就不删除
|
5
coderluan 2021-09-07 09:40:42 +08:00
感觉这哥们是没说服别人或者不敢说别人,然后跑注释里释放来了,这种行为本身就算投机取巧,要杜绝!
|
6
Loku 2021-09-07 09:45:21 +08:00
先删后添,多了 IO 操作。
|
7
angryfish 2021-09-07 09:58:08 +08:00
个人觉得没啥
|
8
NewYear 2021-09-07 09:59:07 +08:00
先删后增,很多系统都是这样操作的,缺点嘛就是每次要传输所有数据和关联表的数据,可能还影响性能,但是比“对比差集”简单太多。
|
9
2i2Re2PLMaDnghL 2021-09-07 10:00:37 +08:00
git blame 一下看看是不是因为过去导致了问题
|
10
littlewing 2021-09-07 10:01:24 +08:00
1k 的 tps 无所谓,如果你有 1w,10w,100w 的 tps 那就不一样了
|
11
zjsxwc 2021-09-07 10:21:29 +08:00
“先无脑全删再重新添加”确实比“diff 出哪些要删哪些要加的”简单。
前者容易实现,后者能做更多优化且节省资源。 |
12
kisick 2021-09-07 10:51:51 +08:00 via iPhone
问题在于其他地方可能用到了这张表的 id,先删再增会导致其他地方保存的 id 失效
|
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 |
14
tonyli 2021-09-07 12:02:52 +08:00
看了各位大佬的回答小弟不解..diff 不需要性能? 不需要 IO? 并发? 锁不住? 再不行乐观不住? 一定要删除? 晚上或者 IO 小的时候跑定时删除?
|
15
sutra 2021-09-07 12:06:50 +08:00
// 3.
在代码注释里写了个 3. 是什么意思?从什么 guideline 里复制来的? |
16
dwlovelife 2021-09-08 10:32:55 +08:00
最主要的问题 你删除的数据事实上在数据库里是没有完全释放的 相当于无故添加了几行隐藏数据 然后页合并和页分裂的时候 也会受影响
|
17
ClorisYe 2021-09-08 14:51:12 +08:00
先按简单做,出问题再优化。
|
18
mightofcode 2021-09-09 13:34:11 +08:00
没有 bug 就行
不存在“最好的做法” |