使用乐观锁的问题

来源:5-4 数据库问题

bbmouse

2021-11-04

老师说:
事务的性能太慢怎么办?
考虑使用乐观锁

意思是不开启事务去select得到结果,然后也不开启事务的去update,因为没有开启事务,所以缓解了事务太慢的现象吗?这里没太懂,因为一般乐观锁是和分布式锁一起考虑,用其中之一,不知道还能解决事务太慢?

还有一个想问下老师,比如spring里面,方法不加@transactional注解的话,应该不会开启事务,如果不开启事务,去读的话按照什么规则呢?能不能读到别人事务里做的改变?(此时没开事务,应该没有隔离级别把,)

写回答

1回答

ccmouse

2021-11-10

事务的开销是很大的。不加事务能提高不少效率。但代价就是同学说的“没有隔离级别”,其实是我读和写之间没有保护。我读到的始终是当前数据库别人最新commit进来的数据。

所以“乐观锁”,我们通过时比如间戳,或者版本号来进行保护,保证我们的数据从读进来到修改这段时间内没有被别人改过。这里产生另一个代价,如果此时不幸被别人改了,我们的这个“先读后写”的操作就会失败。


0
2
ccmouse
回复
bbmouse
这个开销是锁的开销,以及事务本身在启动以及commit的时候所需要分配和释放的资源。
2021-11-11
共2条回复

Google面试官亲授-Java面试新手尊享课

为面试新手量身定制的Java面试尊享课,解锁“鲤鱼跃龙门”的妙招

2853 学习 · 180 问题

查看课程