在实际的多用户并发访问的生产环境里边,我们经常要尽可能的保持数据的一致性。而其中最典型的例子就是我们从表里边读取数据,检查验证后对数据进行修改,然后写回到数据库中。在读取和写入的过程中,如果在多用户并发的环境里边,其他用户已经把你要修改的数据进行了修改是非常有可能发生的情况,这样就造成了数据的不一致...
分类:
数据库 时间:
2014-07-18 10:06:03
阅读次数:
299
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。...
分类:
其他好文 时间:
2014-07-09 13:08:13
阅读次数:
138
锁:我们知道,最常用的处理多用户并发访问的方法是加锁。当一个用户锁住数据库中的某个对象时,其他用户就不能再访问该对象。加锁对并发访问的影响体现在锁的粒度上。比如,放在一个表上的锁限制对整个表的并发访问;放在数据页上的锁限制了对整个数据页的访问;放在行上的锁只限制对该行的并发访问。可见行锁粒度最小.....
分类:
其他好文 时间:
2014-06-27 00:51:09
阅读次数:
374
乐观锁与悲观锁文章转自网上好像是玉米田的,忘记了锁(locking)业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中(可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一...
分类:
系统相关 时间:
2014-06-24 09:42:30
阅读次数:
343
上篇文章详细讨论了hql的各种查询方法,在讨论过程中写了代码示例,hql的查询方法类似于sql,查询的方法比较简单,有sql基础的开发人员在使用hql时就会变得相当的简单。Hibernate在操作数据库的同时也提供了对数据库操作的限制方法,这种方法被称为锁机制,Hibernate提供的锁分为两种一种是乐观锁,另外一种是悲观锁。通过使用锁能够控制数据库的并发性操作...
分类:
系统相关 时间:
2014-06-14 14:14:29
阅读次数:
537
1.乐观锁与悲观锁
http://www.blogjava.net/loocky/archive/2006/11/15/81138.html简介:悲观锁依靠数据库提供的锁机制实现。乐观锁基于数据版本记录机制实现,大多还依靠系统中的数据存储逻辑。如果有外部系统,使用乐观锁策略时,需要使用以下几种方式....
分类:
数据库 时间:
2014-06-07 06:05:55
阅读次数:
181
独占锁:是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。乐观锁:每次不加锁,假设没有冲突去完成某项操作,如果因为冲突失败就重试,直到成功为止。一、CAS
操作乐观锁用到的机制就是CAS,Compare and Swap。CAS有3个操作数...
分类:
编程语言 时间:
2014-06-06 14:00:39
阅读次数:
452
在数据库中,并发控制有乐观锁和悲观锁之间,什么时候用乐观锁比较好什么时候用悲观锁比较好?
实际生产环境里边,如果并发量不大,完全可以使用悲观锁定的方法,这种方法使用起来非常方便和简单。但是如果系统的并发非常大的话,悲观锁定会带来非常大的性能问题,所以就要选择乐观锁定的方法。
悲观锁假定其他用户企图访...
分类:
数据库 时间:
2014-05-31 12:44:38
阅读次数:
252
InnoDB的MVCC之(乐观锁),是通过在每行记录保存两个隐藏列来实现的。这两个列,一个是存创建时间,一个是删除时间,这里的时间指的是,系统版本号,并不是真正的时间值。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录版本号比较。下面看一...
分类:
数据库 时间:
2014-05-28 03:01:47
阅读次数:
379
锁(locking)业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中(可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一些机制来保证这些数据在某个操作过程中不会被外界修...
分类:
其他好文 时间:
2014-05-22 06:00:41
阅读次数:
362