说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

乐观锁和悲观锁 你更钟情于哪一个?

HTML文档下载 WORD文档下载 PDF文档下载
对数据库的并发访问一直是应用程序开发者需要面对的问题之一,一个好的解决方案不仅可以提供高的可靠性还能给应用程序的性能带来提升。下面我们来看一下Couchbase产品市场经理Don Pinto结合Couchbase Server为我们带来的悲观锁和乐观锁的解析。

故事背景:Alice和Joe将共同读取Couchbase Server中的同一个数据,然后都将对数据做出修改;接着将新的版本写入数据库。那么谁的修改将被保存?Alice还是Jone?又或是都不?还是结合了两者的。

开发者对有连续访问的共享数据使用锁。那么究竟该选择什么样的锁方案 —— 乐观或者悲观?

在看Don Pinto带来的乐观锁与悲观锁的区别以及选用建议之前,先简单介绍一下他的履历:Don Pinto,现任Couchbase产品市场经理;曾担任微软SQL Server和SQL Azure项目经理;更早阶段还曾任职于IBM(DB2 LUW软件工程师)、Honeywell(软件开发者)等公司。下面先看看乐观锁与悲观锁的区别:

乐观锁

如果我们需要建立一个在线的百科 —— 使用Couchbase Server的应用程序:用户可以修改和添加文章。假设一下Alice正在使用应用程序对“bicycles”上的一篇文章进行编辑(修改一些信息),但是在保存前Alice忽然想起一些其它的事情并离开了电脑;就在这个时候Joe也注意到了“bicycles”文章上的相同错误并且准备纠正。

如果应用程序中使用的是乐观锁,Joe就可以编辑文章并保存修改。当Alice返回并准备保存修改的时候,那么不管是Alice或者是应用程序都希望知道文档的最新状态 —— 在Alice修改文档的行动得到允许前。乐观锁的出发点在于该数据很少会因为并发修改而产生冲突,所以并发修改显得更重要一点。

悲观锁

这里不防设想一下你的业务流程需要互斥存取一个或多个文档(又或是一个graph中的文档)。参照上面的例子:当Alice正在编辑文档的时,她不想其他的用户对相同的文档进行编辑。如果这时Joe再去做同样的事情,那么他必须等待直到Alice释放锁。

通过使用悲观锁,应用程序可以实现对文档的单独占有。当用户完成文档的访问后,可以手动或者设置超时来释放锁。

那么究竟该选用什么类型的锁?这里是没有确切的答案的,因为使用什么样的锁该由具体情况决定。你需要根据你应用程序的需求选择相应类型的锁

除非你认为一个文档会存在重度的竞争,乐观锁的开销要远低于悲观锁—— 夺取你需要的,迅速做出修改并保存。如果被系统中其他人抢夺,你只能继续尝试直到成功。

使用了悲观锁,你可以对一个指定的项目进行互斥存取 —— 当它被锁定时,其它的线程都不可以访问。这里的关键在于悲观锁在操作失败后必须得到释放。想象一下:你已经获得了对象A,但获得对象B之前你不想放弃对象A;但是另一个已经获得了对象B的用户,在获得对象A之前也不想放弃对象B。那么这时候就需要用到超时设置,它可以打破死锁和处理释放锁失败的情况。

简而起见,用户通常会在整个应用程序中使用相同的锁策略。如果在整个应用程序中都有着同样的需求,这么做也无可非议。事实上,情况不是这样的 —— 不同的应用程序对象有着不同的访问需求。下面看一下社交游戏中的两个例子:

  • 角色和玩家的信息在游戏期间被频繁的访问,这就需要快速的读写访问。第一选择 —— 使用乐观锁。第二选择 —— 悲观锁。
  • 用户的账号和参数只在用户登录或者是游戏开始的时候才会被读入,并且不会被频繁的修改。那么乐观锁在这里同样会有很好的表现。

在Couchbase Server中获得悲观锁

  • 使用get-and-lock API获得检索给定键的值,并进行锁定
  • 应用现在已经拥有了对该文档的互斥控制

在Couchbase Server中获得乐观锁

这里需要使用check-and-set(CAS)API获得CAS的版本号。

释放Couchbase Server中的锁

这里需要使用CAS来修改并释放锁

解读CAS

CAS操作是一个很简单的理念用以建立更卓越的并发性控制机构。CAS会在对一个对象进行读入和尝试保存时确认这个对象是否被其他的用户更改 —— 如果对象被另一个用户更改,那么错误将会产生而应用程序必须重新读取对象的值并重试操作。如果对象不存在高度争夺,那么数据的转换将是幂等的;而重试操作也会在不浪费太多的工作下完成,一般情况下乐观锁会是一个拥有高性能的解决方案。

与CAS的交互涉及到一个GAS回路,点击查看详情。

举个例子:下面交互图中存在的3个用户。他们3个都在使用CAS尝试去更改X对象 —— 每个客户端都成功,但是一次只有一个。

你并不需要释放锁,吩咐Couchbase就好了

当你做一个get-and-lock的操作时,你提供一个值作为锁的参数。一个键默认会被锁定15秒。15秒过后,如果你还没有手动的释放锁,那么Couchbase会自动的为你释放。

最终的见解

当然不是在所有的情况下,乐观锁都是最好的解决方案。在许多用例中乐观锁可能会有很好的表现,但在其它情况下可能就会需要像悲观锁这样更严格的方案。

当然锁也不是适合所有的情况 —— 如果出现锁竞争,你的应用程序可能就会抛锚。如果一个线程已经获得了一个锁,而OS又没有对这个锁的安排;那么其他想争用这个锁的线程将会被阻塞。当然其中的一个选择就是避免完全加锁,尽量的使用原子操作。这些API对存在高度竞争的数据是很有效的。

原文虽确定了Couchbase Server这个使用背景,但是有些思想和API还是值得借鉴的。

原文链接:Optimistic or pessimistic locking - Which one should you pick?  (编译/仲浩 审校/包研)

欢迎关注@CSDN云计算微博,了解更多云信息。

【最具价值CTO评选秀】能做存储的超级计算机——任宇翔和以色列团队的创业故事 OpenStack Swift存储策略 分享5个可视化的正则表达式编辑工具 在iOS程序中使用Bluemix云推送服务 GitHub开源任务列表组件 表白健身小能手!详解Apple Watch特色功能 高逼格不任性!个人智能航空摄影飞行设备ZANO Clappr——开源的Web视频播放器 东软举办2014解决方案论坛 将全面推进BBC战略 Google Glass已死,智能眼镜长存! 五个步骤,保护移动应用免受恶意攻击 声波改变移动社交——参加联想“茄子快传”创意征集 赢取平板电脑大奖! 车载硬件Baen:被游戏化的驾驶体验 深入解析Docker背后的namespace技术 响应苹果要求:Qt 5.4、Qt Creator 3.3同迎RC版 击碎泡沫谈发展,盘点OpenStack商业生态圈! 2014年11月操作系统份额:Windows 7雄居第一,XP跌新低 微信开放平台上线统计报表功能 【向导】如何开始学习高伸缩性编程? 基于Apache Samza,揭秘LinkedIn架构背后的技术 Aeron:每秒可以传递数百万消息的低延时开源消息系统 英特尔物联网马拉松:用创造力改变生活 年末总结:2014年全球手游市场发展的六大趋势 Saber——模块化、组合式的移动前端框架 什么仇什么怨?还原日本反美颜应用Primo真面目 横跨2D与3D!专属C#开发者的超强游戏引擎Paradox 首份“2014年移动外语学习行业报告”等你下载 《近匠》Ayla联合创始人张南雄:物联网发展的三个阶段 神器 VisuAlgo:通过动画学习算法和数据结构 【工具推荐】QWrap——开源的前端JavaScript框架 老外看中国:移动应用UI设计的十大精髓 activex 发布 用C#怎样得到一个dll文件的版本号呢? 问一个比较简单的问题! 关于msgbox的简单问题,才鸟求知,谢谢帮忙!!!!! 困惑。什么工作好啊,来者有分 大哥、大姐们,快拔刀吧! 如何取得SQL SERVER2000数据库某字段的空值? 如何用split分割纵向字符串?在线等候. 关于java workshop的问题(急) 向高手请教一个问题(硬编译),至少200分相送 为什么我用request.getPathInfo()取到的结果为空? c# 版的朋友们大家好!!新手登录,多多帮助! oracle触发1器 一个好多人问过的问题,可是我这里还是不能用,请在帮下忙 发布Applet出现的错误,帮忙撒 本人在PB开发中遇到莫名其妙的问题 强烈建议成立crack专栏,同意的请跟帖。 textbox的输入问题 我的98系统在重新启动后再进入系统时屏幕上会出现一闪闪的雪花点,这是为什么呀? 请教!谁会使用这个API函数(DbiPackTable),该函数在BDE32.HLP中。 一个循环问题,急急急!! mysql -h remotehost -u root连不上对方机子? 分布式应用中的服务器端访问当地窗口的问题 打印的问题,大家请看,得到你们的思路,马上给分! 我想做一个保存图片资源的dll文件,谁有这方面的文章和代码啊? 看一下这个ServiceApp.出错信息! 有专家吗?Cache问题 那里有linux原码下栽?不全也可以? 怎么用OPENCV?(50分) winsock下载FLASH动画的错误问题 好好看看这个妞,天机不可泄漏啊,哈哈哈哈 VxD 中如何使用 sprintf 等函数?[200 分] help me !!! 急急急!!! 有关datareport的问题! 我下载了Core SDK,《windows核心编程》的示例还是编译不成功? SQL Server中定义image类型的问题? 鼠标拖拽效果 简单的问题?高分相送,UP者有分。。。。。。。。 到底到哪里找weblogic 7的破解文件啊? 请教向win2000 server申请证书的问题 我有了一只小猫,好可爱啊!为它散分!TMD,只有最后125分了! query1.CanModify:= true;???? 我下载了Core SDK,《windows核心编程》的示例还是编译不成功? 现急需bmp文件转换成jpg文件的java源代码,请高手们帮帮忙,分数可再加。 大家有没有做过宏的,我写了一个宏却有下面的提示. 。。。如何对所访问的网站的返回结果进行处理。。。 哈哈哈,托普股票昨天狂跌!!!!!!! 请进! ASPX 里如何获得连接数据库的速度 …… 如何解决win98不登录网络也可以访问win2000共享目录的问题? 请问treeview控件如何使选定的节点在完成一次操作后任选定及如何使选定的节点在失去焦点后显示颜色为亮蓝色 一只蚂蚁从长为4cm,宽为3cm,高为12cm的长方体纸箱的A点沿纸箱爬到B点,那么它所性的最短路线的长是---- 电动车电池质保多长时间铅酸的电动车电池电池质保多长时间,到2010年4月24日没有一个回答正确的.我都听说了,大多数都是保15个月;有的保20个月;还有的保两年,就是不知道什么品牌的.告诉 对于中国的牛,我有特别的尊敬感情. 留给我印象最深的,要算一回在田垄上的“相遇”. 一群朋友郊游,我领头在狭窄的阡陌上走,怎料迎面来了几只耕牛,狭道容不下人和牛,终有一方要让路, 一只蚂蚁从长为4cm,宽为1cm,高是12cm的长方体纸箱的A点沿纸箱爬到B点,那么它所行的最短路线的长是多少 腌制火腿是,添加nano2(这是?)是为了让颜色越鲜艳越好, 环形磁铁的磁感线和南北极如何分布 利用二氧化碳的物理性质可以用二氧化碳作( )进行( ),也可以用它来隔绝空气,进利用二氧化碳的物理性质可以用二氧化碳作( )进行( ),也可以用它来隔绝空气,进行( ). 太空记忆枕头保健枕健康枕芯护颈枕颈椎枕头一般价格是多少呢? 环型磁铁的磁感线分布 五年级下册口语交际三的作文“劝说”作文800字星期一要用 记忆枕,护颈枕,太空枕,保健枕头 环形磁铁的磁感线是怎样的?看了很多百度知道里的问答、总是觉得还是不懂、环形磁铁的磁感线是不是就是类似于地球的磁感线? 5年级下册第三单元口语交际,劝说短文50-100字左右. 已知逻辑关系如下,绘制双代号网络图,并计算时间参数ES、LS、EF、LF、TF和FF,找出关键线路用双箭头线标出工作ABCDEFGH紧前工作——ABBBC、DC、EF、G时间13162421 简述决策在管理中的地位与作用 五年级下册口语交际3劝说作文怎么写啊?口语交际本次口语交际的话题是“劝说”,这里有规劝的意思,劝说别人改掉不良的习惯.安排这次口语交际的目的,是让学生在交际中学会怎样动之以情 根据表中各工序的逻辑关系,绘制双代号网络图,计算ES,LS,TF,FF,工期,标出关键线路. 急,有会的朋友们帮帮忙吧,谢谢了. 中国的牛 这种比较的写法我们还在小学课文《》中体会过 五年级下册口语交际三的作文“劝说”作文要450字 计算机中BS HT LF VT FF CR CAN ESC SP DEL 的原英文是什么 巴基斯坦小学课文写中国的具体内容是什么?我想看看他们国家是怎么写的. 怎么样把铝线上的 油渍去掉?又有亚光的?我是想怎么铝线上的 油渍洗白 又有亚光的 英语的意思ls thistheartroom? 如何理解实践在认识中的决定作用 目前市场上销售的汽水饮料大多数是碳酸饮料,其中溶有二氧化碳气体.打开汽水瓶盖时,汽水会自动喷出来,这说明气体在水中的溶解度与压强有关,且( )喝了汽水之后会打嗝,这说明气体溶 电磁炉的原理是由于锅产生涡流,加热食物,那为什么我摸锅时不会被电到?(当一个回路线圈通予电流时,其效果相当于磁铁棒.因此线圈面有磁场N-S极的产生,亦即有磁通量穿越.若所使用的电源 计划在管理中的地位与作用字数达到一千字就行的论文! 五年级下册语文口语交际3,劝说乱丢垃圾的,至少写出五条,从从轻到重、从己到他 如何选择一款适合自己的枕头?可以买零听品牌的恒温太空记忆棉慢回弹舒眠护颈枕头吗 粗苯加氢设计单位粗苯加氢 五年级下册语文第三单元口语交际劝说怎么写?快! 太空零压力记忆枕头加长护颈枕慢回弹颈哪里有 粗苯加氢 梦兮 安睡慢回弹枕头 太空记忆枕头 零压力护颈枕 颈椎保健 请写出氯气与碘反应的化学方程式.另外,是HIO4吗? 氢气和氯气及溴发生反应,哪个放热多 五年级下册语文第三单元口语交际 劝说 怎么写啊.急.19: 氯气和碘反应 求介绍分析中国文化的文章吗? 一战对英国 影响最好是各方面都有的 比如对经济啊这种的 women,democracy,imperialism,territorial expansion,new ideologies,social change.3Q3Q不一定要英文,中文的也OK。因为要写论文,要是带点什么参考书目 氯气和碘的反应? 中国牛这篇文章是赞扬谁的,是赞扬中国还是牛啊! 对于中国的牛. 英国在一战中是什么角色 下列关于NaNO2、Na2O2、SO2、O2等四种物质的组成的叙述中正确的是都含有2个氧原子对吗?仔细看题 中国的牛 1.中国的牛象征什么?2.文中能与文章结尾遥相呼应的是那一句? 英国在一战中的作用 下列物质误食后,不会引起中毒的是?(1)BaSO4(2)NaNO2(3)CH3OH(4)P4 关于中国航母相关文章? 一战的影响要简短的那种,答题用的,两三行就够用! 含Na离子的物质(除NaCl为中性外)都是碱性的吗?比如说NaNO2、Na2CO3 经常吃微波炉做的食物有什么坏处? 房屋装饰工程质保时间及质保金 文章中第一段有什么作用 读书伴我成长 500字作文 什么汽车整车质保时间最长 电压和电流线圈产生涡流的原理,我想知道这个,要看那种书啊 汽水中的气体通过什么方法溶解在水中 甲醚用铜做催化剂加热 反应生成什么物质 写出化学反应方程式 这个 3年有限质保 主要我觉的是“有限”这两个字要注意,这很容易令身为消费者的我们受到伤害的! 文章第一段有何作用
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘