你们会用乐观锁来防止并发冲突吗

查看 158|回复 15
作者:ljzxloaf   
并发冲突似乎是个大家都在谈,但是很少有人真的去当回事的东西。
典型的如 innodb 的 mvcc 就是用乐观锁的方式去处理并发冲突,你可以通过设置不同的隔离级别让 innodb 在检测到并发修改的时候选择不同的处理方式。
在业务开发中,当用户并发修改某条数据的时候,我们也可以通过类似的方式去防止或协调冲突。
那么问题来了,在实际工作你们真的去这么做了吗?如果没有这样实践的话是啥原因呢?就我个人的经验而言,好像很少有人真的这么干。
wangxin3   
个人愚见:
并发修改在 i++时会有问题,所以要考虑并发;
日常开发大多都是 i=?的问题吧,不存在冲突,后者覆盖 i 就行。
CEBBCAT   
有的不 ACID 要亏钱,也有的只是制造了一些小小的业务漏洞。看时间充裕与否吧。如果要我当下给出回答,我的解是:
从整体方案上减小冲突可能性,从扩展性上支持未来升级,从数据安全角度可回溯
emSaVya   
写业务的人不会牺牲自己服务的吞吐量 去考虑下游数据环节的问题。下游的问题交给下游 我不会在自己服务的主流程上加任何锁。
chippai   
从实际工作来讲还是很常用的,比如版本防并发修改、库存防超发等
samtofor   
一般在开发的时候不怎么用锁,需要用锁的时候也都是悲观锁,乐观锁基本没用过
ninjashixuan   
和钱相关的业务才会开始就考虑,其他的基本不会。
samtofor   
@samtofor 防喷,因为我接触的业务规模都不大,那么点用户量是不需要考虑乐观锁这种事情的
cheng6563   
加啊,开发框架集成,一个配置搞定,无形中避免了并发冲突,为何不加
helloluckydamon   
我的实际工作中,只要可能存在并发冲突的时候,在数据库层面我几乎都会使用乐观锁处理,但几乎很少使用悲观锁。
但是,但是,但是,
在数据库操作之前,我一般会使用其他手段,前置处理并发,比如使用 redis 做分布式锁、比如使用消息队列消费再写数据库等。
数据库层面使用乐观所或者悲观锁是我的最后一道防线,前置的分布式、内存锁、队列等都是为了从宏观上更高效的防止并发冲突。
一个不恰当的例子:
宇宙飞船是密封的,但是更保险的是穿上宇航服,因为有可能宇宙飞船被撞出一个洞,也可能宇航员要出仓执行任务,虽然有各种外层防御措施,但宇航服是最后一道防线。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部