ref : https://medium.com/dean-lin/真正理解资料库的悲观锁-vs-乐观锁-2cabb858726d
爲什麽要了解这个呢?
我相信工作一段时间,一定会遇到资料被重复异动、覆盖的情况,初学者可能想说,那就多设where条件啊,但这不能根本的解决这个议题,不过设定where条件想法,已经有点接触这个议题了.
以前常听同事,提到一些关键字 dead lock 、red lock 、row lock 都会一头雾水,发生dead lock 事件的时候,也不能体会他们在紧张什麽,所幸现在知道的事情多了,就想说把这个观念给记录下来吧
所以什麽是乐观锁 vs 悲观锁 ?
乐观锁、悲观锁是种概念,主要指的是针对DB table 栏位异动的限制,解决资料出现不符合预期的异动
我对乐观锁、悲观锁的理解是,乐观锁就像是信任制,会给你条件让你遵守,确保结果,悲观锁就是觉得人性本恶,所以必须用强制规定,确保结果
举个爸爸零钱箱例子
家里爸爸准备了共用零钱箱给家里两个小孩,里头固定有五百元.钱可以取用,但是当天晚上必须把钱补回500
如果爸爸采用乐观锁,制定规则
爸爸相信大家都会遵守规则,所以两位可以随时取用零钱,但是必须在当天晚上把拿走的补齐,让零钱箱固定有500
如果爸爸采用悲观锁,制定规则
爸爸才不相信大家会乖乖把钱补进去,因此每个人取用零钱,必须写下谁、在几点几分、拿走多少,反之亦然,一样当天晚上零钱桶需有500
小结
用乐观锁,取用零钱的人可以自由取用、但相对的要做到软性的要求,就是把拿走的补齐,此情况虽然方便快速,但肯定会有人性的忘记,导致结果不符合预期(晚上金额500)
用悲观锁,取用零钱的人,取用、归还时,都需要强制完成纪录的动作,否则不能达成目的,这相较乐观锁,是用强制力规范,确保结果符合预期,但相对的需要纪录支出,本身就会耗费时间
然後呢?
其实在开发过程中,没有什麽绝对,所以我们首先需要知道有这个选择,然後根据当下的情境,选择最适合的方案组合
乐观锁的情境,比较适用修改量不大、资料若真的有非预期异动,其损害也还能承受的情况
悲观锁的情境,比较适用有大量的修改量、资料不容许些微失误的情况(金额交易)
>>: 04. Unit Test x Cart Class
Binary Search Tree的优势在於寻找、插入的时间复杂度较低,它只需要O(log n)~...
名词解释 model 在本系列文章中,代表 ActiveRecord 自动产生的 model sch...
Web 应用程序选单多样化,早期最常见的多半树状选单,直至手机问世後汉堡选单(hamburger m...
各位朋友好! 这是第一次参加iThome铁人赛~ 本次参加主要目的是对聊天机器人抱有浓厚兴趣, 但受...
Standard System Independent Formats(标准系统独立格式) Gif ...