Hibernate 处理并发

  一: 事务:

           指操作数据库的一个程序执行单无,这些操作要么全部成功,要么全部失败以保证数据的完成性和统一性.

 

  二: 多事务并发引起的问题

                  

            a : 第一类丢失更新

                 撤销一个事务时把其它事务更新的数据也覆盖了。

                   for example : 事务A 和B 同时访问数 据Data  如果事务B 更新了数据,但事务A执行了回滚操作那么数据就回到当初

                   如: 银行帐户 Account_A  中有200元  甲执行 取100元的操作 乙执行转入100元 如果甲成功取出100 但乙方操作失败那么帐户中还有200元  这样银行就丢了100块

 

            b: 脏读

                   指: 一个事务读取了另一个事务未提交的数据.

                   例如:

 

                     甲取款100元未提交,乙进行转帐查到帐户内剩有100元,这是甲放弃操作回滚,乙正常操作提交,帐户内最终为0元,乙读取了甲的脏数据,客户损失100元

 

    c: 不可重复读

          指: 一个事务在两次读同一行数据时得到不一样的结果 

        实际上是指读取了以更新数据

           甲乙同时开始都查到帐户内为200元,甲先开始取款100元提交,这时乙在准备最后更新的时候又进行了一次查询,发现结果是100元,这时乙就会很困惑,不知道该将帐户改为100还是0。

 

     d: 第二类丢失更新

          指不可重复读的特例:

            如上:如乙没有进行第二次查询那么 取出100后还有100 这时银行就丢了 100

 

   事务的隔离级别:

              1: Serilalizable           串行化   [隔离级别最高]

              2: reapetable read      可重复读

              3: read commmited     读取已提交数据 [通常采用]

              4: read uncommited    读取未提交数据 [隔离级别最差]

  那么对于多数的数据库系统可采用 第三种 read Commited 读取以提交数据.这样可以避免脏读,同时性能上面也有一定优势.

   每个数据库连接都有一个全局变量来表示当前的隔离级别 @@tx_isolation JDBC采用的是数据库默认的隔离级别。在Hibernate.cfg.xml中我们可以显示的设置隔离级别

              Read uncommited 1

              read commmited   2

              reapetable read     4

              Serilazable          8

      在sesssionFacotry中加入属性 hibernate.connection.isolation 即可

  并发控制:

        当数据库系统采用Red Committed隔离级别时,会导致不可重复读和第二类丢失更新的并发问题,在可能出现这种问题的场合。可以在应用程序中采用悲观锁或乐观锁来避免这类问题。

        

         乐观锁: 

乐观锁假定当前事务操纵数据资源时,不会有其他事务同时访问该数据资源,因此不作数据库层次上的锁定。为了维护正确的数据,乐观锁使用应用程序上的版本控制(由程序逻辑来实现的)来避免可能出现的并发问题。
唯一能够同时保持高并发和高可伸缩性的方法就是使用带版本化的乐观并发控制。版本检查使用版本号、 或者时间戳来检测更新冲突(并且防止更新丢失)

 

            

        悲观锁:

          悲观锁假定当前事务操纵数据资源时,肯定还会有其他事务同时访问该数据资源,为了避免当前事务的操作受到干扰,先锁定资源。尽管悲观锁能够防止丢失更新和不可重复读这类并发问题,但是它影响并发性能,因此应该很谨慎地使用悲观锁

     

   

             

               


 

  三: 事务的隔离级别

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值