关于并发脏数据的问题

2013-07-25 15:13:26 +08:00
 timepast
hibernate spring mysql 查了资料 有hibernate乐观锁和mysql行级锁 等解决方式
自己没有这方面的实战经验 发此贴 一是求解 而是讨论

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

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

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

@timepast 看你并发到什么程度吧,并发高到一定程度就不用hibernate了,自己去写做mapper,然后根据实际业务来决定哪些是悲观锁、哪些乐观锁,而且以后进行程序改动时,还得做业务影响分析,这块才是最头痛的东西。。。。
pythonee
2013-07-26 17:16:30 +08:00
@wodemyworld
这个高端,确实没有遇到过这个场景,这种应该是电信级别的吧

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

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

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

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

© 2021 V2EX