• 请不要在回答技术问题时复制粘贴 AI 生成的内容
gongxuanzhang
V2EX  ›  程序员

在一个群里被恶心坏了

  •  5
     
  •   gongxuanzhang · May 10, 2024 · 31968 views
    This topic created in 913 days ago, the information mentioned may be changed or developed.
    我在 B 站看到一个微博架构师发的一些视频.觉得他讲的东西很实战,加了他的群,而且是哈尔滨的,我本人是佳木斯的所以对他非常有好感
    今天上午群里在讨论事务隔离级别的问题.
    本身就这一个技术问题大家有着不同的理解很正常,无论说的是对是错我觉得都没啥问题.
    主要是针对 MySQL 的 RR 隔离级别下的幻读问题






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





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

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

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



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

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



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


    我觉得无论我说的是不是对的,技术问题起码应该就事论事,直接开始人身攻击,属实牛
    Supplement 2  ·  May 13, 2024
    回复的视频已经贴在上边,
    V 友指出的我说"innodb 没有幻读问题",我说的确实是错的,这点的修正我当时在群里就已经说明,只是没截图出来,这点在视频中提到了,可以去看视频.
    我表达的是我对他"不加锁都是幻读的情况"的质疑.
    如果有兴趣可以去看视频
    161 replies  •  2024-05-14 11:09:31 +08:00
    1  2  
    ❮ ❯
    BQsummer
    BQsummer
    May 11, 2024
    101
    "普通 Select 无论加不加锁,无论怎么查询都不会有幻读问题,如果 for update 或者 delete update 这种操作就会用临建锁或者间隙锁来保证一致" 原 op 的这句话错的一塌糊涂, 为啥大家关注点不在技术本身
    zhuziyi
    zhuziyi
    May 11, 2024
    102
    这类群 99% 都是垃圾消息生产地,想在这种微信群里获得有效有价值的信息太困难。(非公开、小、私群除外)
    sockpuppet9527
    sockpuppet9527
    May 11, 2024
    103
    歪下楼,纯讨论技术

    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
    sockpuppet9527
    May 11, 2024
    104
    @ucando
    "快照读明明就是有可能发生幻读",我理解这一点上不是绝对。

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

    之前看到有做法把 aoco 的辅助表改到了直接拿个 log-base 的引擎在存,隔离级别在这一层面会失效,且只有 vacuum 发生才会上锁。
    dogfeet
    dogfeet
    May 11, 2024
    105
    大家都在说什么啊?是我搞错了吗? rr 应该妥妥的有幻读的问题啊。
    xz410236056
    xz410236056
    May 11, 2024
    106
    这些自称什么架构师的,也就骗骗刚毕业的。。不都是卖课、卖教程的吗
    tedzhou1221
    tedzhou1221
    May 11, 2024
    107
    @dogfeet 题主说在没有 mvcc 下,rr 有幻读,但 mysql 的 innodb, 有用 mvcc 来解决 幻读问题。
    前面也贴出文章 https://mp.weixin.qq.com/s/K5l6hixzn5K9jWd7shu2GQ
    dogfeet
    dogfeet
    May 11, 2024
    108
    @dogfeet 哦,后面有说到只是纯快照读的前提的话
    tangv22ex
    tangv22ex
    May 11, 2024
    109
    @gongxuanzhang #23 UP 视频推一下
    WalterHs
    WalterHs
    May 11, 2024❤️2
    110
    突然想起来前几天 Fenng 在推特上跪舔微信本地文件存储,喷那些骂微信的都是傻逼,然后云风大佬亲自做实验,然后再评论区证明 Fenng 说的不对,微信本地文件存储本身确实有问题,结果 Fenng 回了几句眼看要被拆穿直接把云风拉黑了。
    这些人的一贯做法就是这样的,树立自己意见领袖的地位大于一切,消灭一切反对者,真理和事实在这里并不重要。
    ucando
    ucando
    May 11, 2024
    111
    @tedzhou1221 文章里也说了 mvcc 并不能解决所有情况的幻读,所以问题其实还在。一般情况下一个事务中是会对某些表做增删改的操作的,那就一定会有当前读的操作,如果仅仅解决快照读的幻读问题,还是不能保证不出问题。反正我做这种操作前一定会加锁,不指望靠这些默认的逻辑来保障数据安全
    ChainLock
    ChainLock
    May 11, 2024
    112
    资深技术专家 就是狗屎
    oldking24
    oldking24
    May 11, 2024
    113
    mvcc 在 mysql 的可重复读的隔离级别下没有完全的解决幻读问题。有部分当前读会出现幻读的数据。
    rxmt
    rxmt
    May 11, 2024
    114
    @watzds 还行吧,op 说的话观点明确,指出错误,没有表达什么额外的情绪,这里本身就是打着“讨论技术”的旗号的,说个问题还得考虑留面子,难为自己么。
    aliyun2017
    aliyun2017
    May 11, 2024
    115
    你不会是说姓袁的的吧
    xiaohundun
    xiaohundun
    May 11, 2024
    116
    做视频,揭穿他,我帮你点赞,我帮你 at 他,搞他!
    goxxoo
    goxxoo
    May 11, 2024
    117
    贫道用 laravel 的开源库也遇到过, 具体哪个就不提了
    louettagfh
    louettagfh
    May 11, 2024
    118
    你说的确实不对啊,RR 还是会有幻读的
    freemoon
    freemoon
    May 11, 2024
    119
    所以我就没有建立一个 k8s 交流群,都是 issue 或者 email 交流
    N6R91zIxLm37099s
    N6R91zIxLm37099s
    May 11, 2024
    121
    和人观点:
    1. 你确实说错了,RR 有幻读。MVCC 解决不了 insert into 带来的幻读问题
    2. 这个架构师技术不论,脾气太大
    lesismal
    lesismal
    May 11, 2024
    122
    技术人说话多数都比较直, 一不小心就闹矛盾了
    iCong
    iCong
    May 11, 2024
    123
    去架构师的 B 站发了下 v2 的链接被删了。还拉黑了哈哈。
    sdfw23xd
    sdfw23xd
    May 11, 2024❤️1
    124
    我也支持你发个视频反驳他,事不是什么大事,关键是太恶心了。
    shayebushi
    shayebushi
    May 11, 2024 via Android❤️1
    125
    人家洪金宝在佛山是打拳祖师爷,位置稳稳的,你叶问非要去那教拳,这不挑衅吗 不踢你踢谁
    maemolee
    maemolee
    May 11, 2024
    126
    @gongxuanzhang #13 支持,不喜欢看到这种 ego 特别大的自媒体,见了恶心。
    ma199385
    ma199385
    May 11, 2024
    127


    画了下图,方便理解
    watzds
    watzds
    May 11, 2024
    128
    @rxmt #114 哈哈,对喷也行啊,不过自己心态要好,op 自己都恶心坏了,影响自己心情也没意思
    netabare
    netabare
    May 11, 2024 via Android
    129
    不愧是 Java 架构师,整天拿着个破锁在那里锁个没完没了的。
    EndlessMemory
    EndlessMemory
    May 11, 2024
    130
    你敢质疑他他就给你封了
    AJ1if4
    AJ1if4
    May 11, 2024
    131
    @ma199385 点开看不了,能再发一遍吗 谢谢
    Majjx
    Majjx
    May 11, 2024
    132
    这要让你说清楚了,还怎么资深,怎么 ga 韭菜,怎么拉人入伙,怎么当领导。有仇发视频,没仇就当没这人
    Lockroach
    Lockroach
    May 11, 2024
    133
    看到下面都是夸的你就该知道该跑了
    想当赛博皇帝当的
    hangszhang
    hangszhang
    May 12, 2024
    134
    @0xLittleFi #91 这不是幻读,前后两次的 SQL 查询语句都不一样了,幻读的定义是前后查询语句一样
    hangszhang
    hangszhang
    May 12, 2024
    135
    @ucando 不是啊,MVCC 解决了当前读的问题呀,假如你第一次查询是快照读,第二次查询是当前读,这都不是同一条 SQL 了,应该不能叫幻读吧
    F281M6Dh8DXpD1g2
    F281M6Dh8DXpD1g2
    May 12, 2024 via iPhone
    136
    目测是菜鸡互琢,两个半调子没啥好讨论的
    还有以 mysql 官方文档为依据的一看就是自己没动手验证过,bug 多到你怀疑人生
    ucando
    ucando
    May 12, 2024
    137
    @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
    wcnmm
    May 12, 2024
    138
    @luolin0826 语言的艺术啊,确实很厉害。
    hangszhang
    hangszhang
    May 12, 2024
    139
    @ucando #137 看明白了,感谢,update 语句把前面 insert 的数据数据读到了当前 session 里面
    ychost
    ychost
    May 12, 2024
    140
    已经忘了幻读啥的了,实际生产环境中高并发、大数据很少用 MySQL ,一般高并发就不应该出现复杂业务逻辑
    HelloAmadeus
    HelloAmadeus
    May 12, 2024 via iPhone
    142
    这连 mvvc 是什么都不知道吧?
    nicoljiang
    nicoljiang
    May 12, 2024
    143
    还是支持一下 op ,反对这种技术行业的“官僚”主义。
    ma199385
    ma199385
    May 12, 2024 via Android
    144
    @AJ1if4 换个 vpn 节点试试,图没问题
    sloknyyz
    sloknyyz
    May 13, 2024
    145
    这种建群的想都不用想就是割韭菜,所有名为技术交流群最后都会沦为吹水群。
    lizy0329
    lizy0329
    May 13, 2024
    146
    最小可爱的一种行为就是+所谓的群,有这时间还不如多读读官方文档
    gongxuanzhang
    gongxuanzhang
    OP
    May 13, 2024
    147
    @lizy0329 你说的对
    CuChulainn
    CuChulainn
    May 13, 2024
    148
    这个架构师不过如此
    hellomsg
    hellomsg
    May 13, 2024
    150
    @zhuisui #42 探讨这类问题确实挺难的,不同时空不同场景,没法一一说明,没有准确答案
    hellomsg
    hellomsg
    May 13, 2024
    151
    @sagaxu #66 如果这个作者能光明正大的虚心接受你指出的错误,那更牛了,可惜
    hellomsg
    hellomsg
    May 13, 2024
    152
    @lambdaX999 #81 我理解的结论:若欲彻底解决幻读问题,在 InnoDB 中唯一可选的隔离级别是 Serializable (可串行化)级别。
    https://mp.weixin.qq.com/s/K5l6hixzn5K9jWd7shu2GQ
    maemolee
    maemolee
    May 13, 2024
    153
    @gongxuanzhang #141 很好,点赞了!
    shurimasoul
    shurimasoul
    May 13, 2024
    155
    支持发视频 diss 他
    Wesson
    Wesson
    May 13, 2024
    156
    @NeedI09in 一致性非锁定读,也就是快照读,把头埋进快照里,完全不顾外面天翻覆地的变化,自然发现不了幻象,这不代表解决了幻读,只是你看不见而已。这比幻读更糟糕。
    NeedI09in
    NeedI09in
    May 13, 2024
    157
    @Wesson 哈哈哈,有道理。这个解释很有意思,哈哈哈。
    lambdaX999
    lambdaX999
    May 13, 2024
    158
    ![]( https://img.erpweb.eu.org/imgs/2024/05/932a103a6951923c.png)

    纯路人,对双方都没有恶意,OP 能出个视频来详细的分析下这个问题吗?我看 B 站下面很多粉丝说 OP 不懂
    gongxuanzhang
    gongxuanzhang
    OP
    May 13, 2024
    159
    @lambdaX999 我 append 的视频中有部分提到,没有完整说明,但是我觉得足够解释了
    dolorain
    dolorain
    May 14, 2024
    160
    @gongxuanzhang 视频看过了,支持 UP 主
    gongxuanzhang
    gongxuanzhang
    OP
    May 14, 2024
    161
    @dolorain 感谢支持,不要骂人就好
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   933 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 103ms · UTC 21:55 · PVG 05:55 · LAX 13:55 · JFK 16:55
    ♥ Do have faith in what you're doing.