zoukankan      html  css  js  c++  java
  • 锁方面区别

    行锁:对表操作时对操作行上锁。
    表锁:对表操作是锁上整个表的数据。
    共享锁:对于多个不同的事务,对同一个资源共享同一个锁。但是对于insert ,update,delete事务则会自动加上排它锁。在执行语句后面加上lock in share mode就代表对某些资源加上共享锁。 eg: 可同时执行多个select语句。
    排它锁:对于多个不同的事务,对同一个资源只能有一把锁。只需在执行语句后+for update 即可。eg:只能一个个进行操作。
    悲观锁:在操作数据的时候,认为此操作会发生数据冲突,所以在进行每次操作时都要通过获取锁才能进行相同数据的操作。与Java的synchronized很相似,所以悲观锁需要耗费较多的时间。
    乐观锁:操作数据库时,认为此操作不会导致数据冲突,在操作数据时,不进行加锁处理,在进行更新后,再去判断是否有冲突。例如hibernate中的乐观锁两种实现,就是分别基于version和timestamp来实现的。eg:
      update user set name = ‘John’ ,version=version+1 where id =13 and version = #{version};
    注:update语句完成后需要commit操作的,相当于一个update语句就是一个原子操作,所以不会出现两条update能同时更新的情况

    悲观锁与乐观锁的使用场景

    乐观锁适用于写比较少的情况下(多读场景),即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果是多写的情况,一般会经常产生冲突,这就会导致上层应用会不断的进行retry,这样反倒是降低了性能,所以一般多写的场景下用悲观锁就比较合适。

  • 相关阅读:
    【模板】Sparse-Table
    UVa 11235 Frequent values
    【模板】树状数组
    UVa 1428 Ping pong
    数学技巧
    UVa 11300 Spreading the Wealth
    UVa 11729 Commando War
    UVa 11292 Dragon of Loowater
    POJ 3627 Bookshelf
    POJ 1056 IMMEDIATE DECODABILITY
  • 原文地址:https://www.cnblogs.com/xiongying4/p/12380912.html
Copyright © 2011-2022 走看看