V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
timepast
V2EX  ›  Java

关于并发脏数据的问题

  •  
  •   timepast ·
    idyllim · 2013-07-25 15:13:26 +08:00 · 4245 次点击
    这是一个创建于 4140 天前的主题,其中的信息可能已经有所发展或是发生改变。
    hibernate spring mysql 查了资料 有hibernate乐观锁和mysql行级锁 等解决方式
    自己没有这方面的实战经验 发此贴 一是求解 而是讨论

    求一实战过效率高的解决思路
    8 条回复    1970-01-01 08:00:00 +08:00
    nybux
        1
    nybux  
       2013-07-25 15:28:51 +08:00   ❤️ 1
    乐观,自己判断
    悲观,数据库锁定
    timepast
        2
    timepast  
    OP
       2013-07-25 15:41:27 +08:00
    @nybux 有必要同时加么? 比如说 程序里面用上 乐观锁 再用上mysql的行级锁?
    nybux
        3
    nybux  
       2013-07-25 16:30:43 +08:00
    没必要,悲观锁是肯定可以保证没有冲突的。但是会降低性能,因为这条记录被锁住了,其他人没法再读取这条记录了。
    乐观锁通过一定的算法保证当前库里面的记录是自己前面读出来的记录,比如加个版本号字段或者加个time字段,或者把所以字段都读出来,然后update的时候where都加上。
    plprapper
        4
    plprapper  
       2013-07-25 16:42:44 +08:00
    一般来说 乐观锁就够了
    timepast
        5
    timepast  
    OP
       2013-07-25 19:34:12 +08:00
    @nybux
    @plprapper

    悲观锁 确实会 降低效率 但是应该是能彻底解决此问题
    plprapper
        6
    plprapper  
       2013-07-25 23:10:47 +08:00
    至今没有碰到过乐观锁 搞不定 需要用悲观锁的这种 场景 。

    所以很难理解你所谓的 “彻底” 到底是啥含义。
    wodemyworld
        7
    wodemyworld  
       2013-07-26 00:30:35 +08:00
    @plprapper 那是你做的系统用的人太少,并发上不去,当并发上去了,乐观锁会造成大量的存储过程rollback,并发越高,存储过程的长度就必须越短,最后恨不得改成一句,然后乐观锁慢慢成了事实上的悲观锁。。。。。

    @timepast 看你并发到什么程度吧,并发高到一定程度就不用hibernate了,自己去写做mapper,然后根据实际业务来决定哪些是悲观锁、哪些乐观锁,而且以后进行程序改动时,还得做业务影响分析,这块才是最头痛的东西。。。。
    pythonee
        8
    pythonee  
       2013-07-26 17:16:30 +08:00
    @wodemyworld
    这个高端,确实没有遇到过这个场景,这种应该是电信级别的吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3051 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 00:42 · PVG 08:42 · LAX 16:42 · JFK 19:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.