数据库并发及解决方案(一)

关于数据库的并发问题

    数据库并发实际上就是系统用户在同一时间操作同一笔数据造成的。如某一个操作分成三个步骤完成。A用户在执行到第二步的时候,B用户开始执行第一步,如果这样就很可能遇到数据并发修改的问题。为了更好的理解,下面将用一个例子阐述。

假设现在有10张火车票,没张票在数据库表中对应一行记录,每卖一张,系统会将该条记录更新为已卖的状态。如果现在仅剩下一张票,A用户查看票还剩一张,则点击购买,可以在点击前的瞬间,B用户也查看到了还剩一张票,也点击了购买,最终的结果就是“超卖”了一张票,实际上只有10张票,却卖了11张,而最先抢到票的,却发现买到的票的订单不是自己。这就是数据并发的一个比较典型的案例,通俗的讲就是很多人同一时间在做一件事情。

数据库并发的解决方式

    对于数据库并发的控制有两种解放策略:

第一种是利用悲观锁,悲观锁的大概意思是每次从表中获取数据时,都认为会对数据做出修改。所以每次在拿数据的时候都会“上锁”,操作完成之后再“解锁”。在数据加锁期间,如果有其他人从表中拿数据就会等待,直到解锁为止。在数据库中的悲观锁有“表锁”和“行锁”等。

第二种是乐观锁,乐观锁的意思是认为获取的数据不会被占用,所以先占用,如果发现没占用上,那么就直接操作失败。

悲观锁和乐观锁的优缺点

    悲观锁使用体验效果好,但是对于系统的性能影响很大,比较适合于并发量不大的场景。乐观锁适用于“写少读多”的场景,这样可以加大系统的整个吞吐量,即可以处理更多的用户访问,但是由于乐观锁可能会出现“操作失败”,所以用户体验效果不是很理想。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值