在一个群里被恶心坏了

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






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





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

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

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



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

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



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


我觉得无论我说的是不是对的,技术问题起码应该就事论事,直接开始人身攻击,属实牛
22869 次点击
所在节点    程序员
161 条回复
angeni
146 天前
和人观点:
1. 你确实说错了,RR 有幻读。MVCC 解决不了 insert into 带来的幻读问题
2. 这个架构师技术不论,脾气太大
lesismal
146 天前
技术人说话多数都比较直, 一不小心就闹矛盾了
iCong
146 天前
去架构师的 B 站发了下 v2 的链接被删了。还拉黑了哈哈。
sdfw23xd
146 天前
我也支持你发个视频反驳他,事不是什么大事,关键是太恶心了。
shayebushi
146 天前
人家洪金宝在佛山是打拳祖师爷,位置稳稳的,你叶问非要去那教拳,这不挑衅吗 不踢你踢谁
maemolee
146 天前
@gongxuanzhang #13 支持,不喜欢看到这种 ego 特别大的自媒体,见了恶心。
ma199385
146 天前


画了下图,方便理解
watzds
146 天前
@rxmt #114 哈哈,对喷也行啊,不过自己心态要好,op 自己都恶心坏了,影响自己心情也没意思
netabare
146 天前
不愧是 Java 架构师,整天拿着个破锁在那里锁个没完没了的。
EndlessMemory
146 天前
你敢质疑他他就给你封了
AJ1if4
146 天前
@ma199385 点开看不了,能再发一遍吗 谢谢
Majjx
146 天前
这要让你说清楚了,还怎么资深,怎么 ga 韭菜,怎么拉人入伙,怎么当领导。有仇发视频,没仇就当没这人
Lockroach
146 天前
看到下面都是夸的你就该知道该跑了
想当赛博皇帝当的
hangszhang
146 天前
@0xLittleFi #91 这不是幻读,前后两次的 SQL 查询语句都不一样了,幻读的定义是前后查询语句一样
hangszhang
146 天前
@ucando 不是啊,MVCC 解决了当前读的问题呀,假如你第一次查询是快照读,第二次查询是当前读,这都不是同一条 SQL 了,应该不能叫幻读吧
liprais
146 天前
目测是菜鸡互琢,两个半调子没啥好讨论的
还有以 mysql 官方文档为依据的一看就是自己没动手验证过,bug 多到你怀疑人生
ucando
146 天前
@hangszhang 文章里已经说明了 MVCC 下幻读的触发条件了,能让同一事务中的同一条查询 SQL 产生不同的结果。
A 事务:SELECT * FROM users WHERE AGE > 10 AND AGE <30; 返回 2 条结果。
B 事务:INSERT INTO users(gmt_create, age, name) values(now(), 20, 'Paidaxing999'); COMMIT;
A 事务:UPDATE users set name = "Paidaxing888" where age = 20;
A 事务:SELECT * FROM users WHERE AGE > 10 AND AGE <30; 返回 3 条结果。
wcnmm
146 天前
@luolin0826 语言的艺术啊,确实很厉害。
hangszhang
145 天前
@ucando #137 看明白了,感谢,update 语句把前面 insert 的数据数据读到了当前 session 里面
ychost
145 天前
已经忘了幻读啥的了,实际生产环境中高并发、大数据很少用 MySQL ,一般高并发就不应该出现复杂业务逻辑

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

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

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

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

© 2021 V2EX