炒冷饭,对于数据库“删除”操作大家平时都是物理删除,还是逻辑删除啊?

2017-11-29 19:37:46 +08:00
 mynameisny

铺垫

本人不才,不知这个“逻辑删除”词用的对不对,想表达的就是:当删除时只是将 is_deleted 字段设置为 1,而不是真的将这条记录删掉,关键词可能是 logic delete 或 soft delete。


问题


求解

我能理解具体问题需要具体分析,是要“逻辑删除”还是“物理删除”,主要还是要根据实际的业务场景,比如互联网企业搜 /收集的个人信息、电商类平台用户的订单、金融类平台的交易记录,肯定是不能删除的。但是对于一些维护中间状态的数据,如果可以通过记录日志实现“留档”那么就可以真的删掉它。

不知道有没有那种开源组件,可以_自动实现_当我从一个表中物理删除一条记录时,它可以帮我将它转移到备份表中,我看了一个 MySQL 的审计插件,但是好像并不做这个用途的。或者有类似“ commit log ”那种东东,删除时只需要记录一个 log,有需要的时候可以从日志中恢复回来。


参考

下附几个我搜过的资料,希望能帮助和我一样迷茫的童鞋:

  1. “别删除数据” http://www.infoq.com/cn/news/2009/09/Do-Not-Delete-Data

  2. “逻辑删除真的不是一个好的设计 - 简书” http://www.jianshu.com/p/f37281576585

  3. “ MySQL 删除数据是加一个字段做标记,还是将删除的数据插入到另外一张备份表里,哪种方案更好? - V2EX ” https://fast.v2ex.com/t/406208

  4. “不做显式删除,而用 status=0 代替,是好的实践么? - V2EX ” https://www.v2ex.com/t/363226

17148 次点击
所在节点    问与答
35 条回复
BOYPT
2017-11-29 19:46:00 +08:00
物理删除?是指那硬盘去用铝热剂烧吗
swuzjb
2017-11-29 19:46:24 +08:00
看业务
zn
2017-11-29 19:57:51 +08:00
基本都是标志删除。做事要留后悔药。
msg7086
2017-11-29 20:22:33 +08:00
如果真实世界没有删除,那真实世界也就没有新建了。宇宙的能量是守恒的。
wingoo
2017-11-29 20:27:40 +08:00
没有真实删除的
liprais
2017-11-29 20:35:08 +08:00
真删了还分析啥
p2pCoder
2017-11-29 20:41:04 +08:00
现在还有物理删除的?
R18
2017-11-29 20:44:38 +08:00
当然有物理删除啊,我们每天几 G 日志用 mysql 存,基本就是分析一次,最多更新三次,查一个月以内,这些数据不删除存着干嘛…
ratazzi
2017-11-29 20:51:49 +08:00
unique key 的问题用 PostgreSQL 的 partial index 不错
Jackeriss
2017-11-29 20:53:38 +08:00
@BOYPT 化学删除:将硬盘浸入浓硫酸。
billlee
2017-11-29 21:15:10 +08:00
物理删除。回滚靠 binlog.
gamexg
2017-11-29 21:27:51 +08:00
>逻辑删除的设计还会导致常用的 unique key 失效(当然用户可将数据行中原来的码和 is_deleted 一起作为 unique key,但是这样又会出现,再次删除时,系统中无法出现两个完全相同的 ID,又都是 is_deleted=1 的记录出现)。

is_deleted 记录删除时间戳即可。
p2pCoder
2017-11-29 21:38:21 +08:00
@R18 建模数据维度越多,以后可选择的空间越大,有大数据和 AI 考虑的,还是可以保留,不过,不用一直保存在 mysql 中
Tink
2017-11-29 21:49:43 +08:00
还有物理删除的?
LemonFlower
2017-11-30 01:28:34 +08:00
外包项目是真删除,公司项目是打标记,还是看需求啦....如果没有要求,更喜欢真实删除数据,不喜欢被欺骗,所以也不想欺骗别人
falcon05
2017-11-30 04:46:48 +08:00
看业务,大部分场景不能做物理删除,以前公司招了个逼,用户删除订单,就真的从数据库里删除了……惊呆了
Mutoo
2017-11-30 06:17:55 +08:00
这个术语叫 soft delete (软删除)
cnTangLang
2017-11-30 06:31:55 +08:00
正常的商业系统,都必须软删除
当然不一定只是做标记,也可能用移表的方法啊。
jydeng
2017-11-30 08:11:19 +08:00
一般都是软删除,做人留一线
shakoon
2017-11-30 08:21:52 +08:00
在我司,delete 是高级权限操作,任何含 delete 的代码上线前必须经过若干领导冗长的评审,楼主感受一下 →_←

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

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

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

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

© 2021 V2EX