在一个群里被恶心坏了

2024-05-10 16:51:20 +08:00
 gongxuanzhang
我在 B 站看到一个微博架构师发的一些视频.觉得他讲的东西很实战,加了他的群,而且是哈尔滨的,我本人是佳木斯的所以对他非常有好感
今天上午群里在讨论事务隔离级别的问题.
本身就这一个技术问题大家有着不同的理解很正常,无论说的是对是错我觉得都没啥问题.
主要是针对 MySQL 的 RR 隔离级别下的幻读问题






这时候他表示没有锁就是幻读,还表示 Java 的锁就没学明白,我表达快照读就算不加锁同样没有幻读问题,除非你在事务里面修改了其他事务新增的数据,那就没办法了





然后就开始攻击我了,说官方文档写的清楚.

然后我去 MySQL 官方看,同时自己做了验证,我的理解是普通 Select 无论加不加锁,无论怎么查询都不会有幻读问题,如果 for update 或者 delete update 这种操作就会用临建锁或者间隙锁来保证一致.
所以他的结论"不加锁都是幻读" 就是不对的

还上升到 java 的锁,CopyOnWirteArrayList 不就是快照实现吗? 一个快照迭代器创建之后就是不会被其他线程影响啊,难道迭代器不加锁要被 add 影响吗? 无锁保证数据一致的方法多了,JcTool 里面好多队列都是



当我想把官方这个截图贴到群里的时候,我就已经被踢了. 我巨无语,一个资深技术专家可以这么讨论问题的.

然后我去 B 站质问他,果不其然 B 站也把我拉黑了



这就是架构师的格局吗 开了眼了


我觉得无论我说的是不是对的,技术问题起码应该就事论事,直接开始人身攻击,属实牛
26554 次点击
所在节点    程序员
161 条回复
BQsummer
2024-05-11 10:26:06 +08:00
"普通 Select 无论加不加锁,无论怎么查询都不会有幻读问题,如果 for update 或者 delete update 这种操作就会用临建锁或者间隙锁来保证一致" 原 op 的这句话错的一塌糊涂, 为啥大家关注点不在技术本身
zhuziyi
2024-05-11 10:28:14 +08:00
这类群 99% 都是垃圾消息生产地,想在这种微信群里获得有效有价值的信息太困难。(非公开、小、私群除外)
sockpuppet9527
2024-05-11 10:59:07 +08:00
歪下楼,纯讨论技术

1. 首先“幻读”是否一定要加锁?
我的答案是:否,完全可以以空间换时间来解决"幻读"的问题。拿 pg 举例,xlog 中记录了每一条 insert/update/delete 语句且带有了 xmin/xmax/tid ,假设我们不存在 heap 表,将数据只存在 xlog 中,那么同一个事务只需要去扫当前 tid 事务 id 命中的 xlog 进行还原就行,这个时候是无需锁的,因为 xlog 中不会做 in-place update/delete 。

像现在的 [neon db]( https://github.com/neondatabase/neon) 做法是类似的。

2. mysql 中“幻读”是否一定要加锁?
不了解 mysql ,不知道
sockpuppet9527
2024-05-11 11:05:08 +08:00
@ucando
"快照读明明就是有可能发生幻读",我理解这一点上不是绝对。

pg 有些存储插件的做法是把数据本身做成不可改的,比如 gp 的 aoco ,对于 aoco 来说快照读只发生在辅助表内,也就是读 heap 表的部分,这部分发不发生幻读,取决于隔离级别的。

之前看到有做法把 aoco 的辅助表改到了直接拿个 log-base 的引擎在存,隔离级别在这一层面会失效,且只有 vacuum 发生才会上锁。
dogfeet
2024-05-11 11:08:11 +08:00
大家都在说什么啊?是我搞错了吗? rr 应该妥妥的有幻读的问题啊。
xz410236056
2024-05-11 11:12:05 +08:00
这些自称什么架构师的,也就骗骗刚毕业的。。不都是卖课、卖教程的吗
tedzhou1221
2024-05-11 11:32:42 +08:00
@dogfeet 题主说在没有 mvcc 下,rr 有幻读,但 mysql 的 innodb, 有用 mvcc 来解决 幻读问题。
前面也贴出文章 https://mp.weixin.qq.com/s/K5l6hixzn5K9jWd7shu2GQ
dogfeet
2024-05-11 11:34:19 +08:00
@dogfeet 哦,后面有说到只是纯快照读的前提的话
tangv22ex
2024-05-11 11:37:30 +08:00
@gongxuanzhang #23 UP 视频推一下
WalterHs
2024-05-11 12:39:34 +08:00
突然想起来前几天 Fenng 在推特上跪舔微信本地文件存储,喷那些骂微信的都是傻逼,然后云风大佬亲自做实验,然后再评论区证明 Fenng 说的不对,微信本地文件存储本身确实有问题,结果 Fenng 回了几句眼看要被拆穿直接把云风拉黑了。
这些人的一贯做法就是这样的,树立自己意见领袖的地位大于一切,消灭一切反对者,真理和事实在这里并不重要。
ucando
2024-05-11 12:52:09 +08:00
@tedzhou1221 文章里也说了 mvcc 并不能解决所有情况的幻读,所以问题其实还在。一般情况下一个事务中是会对某些表做增删改的操作的,那就一定会有当前读的操作,如果仅仅解决快照读的幻读问题,还是不能保证不出问题。反正我做这种操作前一定会加锁,不指望靠这些默认的逻辑来保障数据安全
ChainLock
2024-05-11 13:30:22 +08:00
资深技术专家 就是狗屎
oldking24
2024-05-11 13:31:31 +08:00
mvcc 在 mysql 的可重复读的隔离级别下没有完全的解决幻读问题。有部分当前读会出现幻读的数据。
rxmt
2024-05-11 13:39:09 +08:00
@watzds 还行吧,op 说的话观点明确,指出错误,没有表达什么额外的情绪,这里本身就是打着“讨论技术”的旗号的,说个问题还得考虑留面子,难为自己么。
aliyun2017
2024-05-11 13:52:34 +08:00
你不会是说姓袁的的吧
xiaohundun
2024-05-11 13:57:33 +08:00
做视频,揭穿他,我帮你点赞,我帮你 at 他,搞他!
goxxoo
2024-05-11 14:04:19 +08:00
贫道用 laravel 的开源库也遇到过, 具体哪个就不提了
louettagfh
2024-05-11 14:09:10 +08:00
你说的确实不对啊,RR 还是会有幻读的
lasuar
2024-05-11 14:14:35 +08:00
所以我就没有建立一个 k8s 交流群,都是 issue 或者 email 交流
iCong
2024-05-11 14:23:21 +08:00

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

https://ex.noerr.eu.org/t/1039525

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

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

© 2021 V2EX