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

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

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云计算微博,了解更多云信息。

attr(properties) -JQuery API html(val)-JQuery API html()-JQuery API removeAttr(name)-JQuery API removeClass(class)-JQuery API text(val)-JQuery API text()-JQuery API toggleClass(class)-JQuery API val(val)-JQuery API val-JQuery API after(content) -JQuery API append(content) -JQuery API appendTo(expr) -JQuery API before(content)-JQuery API clone(deep) -JQuery API empty()-JQuery API insertAfter(expr)-JQuery API insertBefore(expr) -JQuery API prepend(content)-JQuery API prependTo(expr)-JQuery API remove(expr)-JQuery API wrap(elem)-JQuery API wrap(html) -JQuery API add(elements) -JQuery API add(html)-JQuery API add(expr) -JQuery API children(expr) -JQuery API contains(str) -JQuery API end() -JQuery API filter(filter) -JQuery API filter(expression) -JQuery API 在Sql语言中的取整函数是什么? 怎样将添加的记录到所有的现有记录后面? 如何装双系统?(在线等候) CSS一般要学多久才算掌握? 从事共享软件开发的进来谈谈做共享的辛酸好吗? 请教使用notifyicon遇到的问题 ActiveState.Visual.XSLT.for.VS.2003.v1.7.9.2475.WinNT2K无法安装。 如何合并两个dataset win98系统下ISAM问题 如何减小生成的EXE文件大小等? asp.net有没有模板 帮帮忙,呵呵!!!一个小问题!!!!! 用VB的兄弟姐妹们,来整个MSN如何? 关于dllhost占用系统资源的问题! 谁是雍亲王,出来说话!!! 在WSAD5.0里怎么添加类型为MYSQL的数据源 高手们,帮帮我噢(解决立刻给分) 全中国程序员联和起来。 如何在web的FORM1模式下画一条线段 界面贴图问题 为什么我用Server.MapPath(""),返回不了任何东东? 上手指路,高分相送 asp怎样连到SQL Server 2000?给100分,在线等 ASP.NET和SQL 哪位兄弟有用asp.net做的OA完整的例子...大家快来.. 关于dllhost占用系统资源的问题! Kylix是否和Delphi一样有RTF控件可以处理丰富文本? 小弟想考程序员!各位大哥指点一下嘛!有要考的交流一下嘛! 查询条件的问题?? 从事共享软件开发的进来谈谈做共享的辛酸好吗? TListView中某一SubItem怎末实时更新?在线等。。 http://www.000163.com/的空间能不能信得过? 请帮忙哟,在线急等 asp.net下如何用c#编写程序实现调用数据库中的多个表显示在datagrid 如何调用存储过程来删除表中的列名???? 给一个变量赋空值的问题 如何在DirectDraw显示Edit,输入文字?? 贴子回复次数大于跟给分次数是什么意思啊?让不让结啊?? 结交delphi爱好者! 请各位高手给我指点一下方向? 如何在Sybase数据库中获得刚插入的那条记录的主键? 怎样获得菜单项(menuitem)名? 简单问题 请问如果有一个dll文件,我想知道里面有什么函数,但我又没有说明书,有什么工具么? 报表设计器怎末没有在外接程序菜单中显示出来呀?? 如何知道选哪个? 急,如何将图标保存在一个数组中,并将它显示出来? struts配制数据源中如何指定url编码? 在csdn设立开放源代码的项目 妈的!等咱有了钱... zt 请问那位大哥有在linux用mysql管理前端啊 辛弃疾 白朴 李白 艾青 怎么排序急 不导电的水用什么流量计 如果有人在家里去世了 然后该怎么办?包括打120时该怎么说 文言文《枭与鸠对话》的全文翻译 唐僧是指十二生肖哪一个希望最快解决,谢谢大家 girl.you think you'er cooler than me 是什么意思? 文言文《枭与鸠对话》的启示是什么原文】枭①逢鸠,鸠②曰:“子③将安④之⑤?”枭曰:“我将东徙⑥。”鸠曰:“何故?”枭曰:“乡人皆⑦恶⑧我鸣,以故东徙。”鸠曰:“子能更 rain是什么意思 质壁分离实验 染的细胞是什么 枭与鸠的对话枭(猫头鹰)逢鸠(斑鸠).鸠曰:“子将安之?” 枭曰:“我将东徙.” 鸠曰:“何故?” 枭曰:“乡人(当地人)皆恶我鸣.以故东徙.” 鸠曰:“子能更鸣,可矣;不能更鸣,东徙,犹恶子之声.” 1 知恩图报饮水思源的意思是指十二生肖哪个 齐景公问政于孔子,孔子的回答体现了孔子的什么主张 古文;枭蓬鸠翻译 Rain是啥意思? 怎样正确使用安全带 题目看补充,解答我打问号的.最后一道也要.小胖班级有50人要划船,每条大船可做6人,需要20元,每条小船可做4人,需要15元,请你设计几种租船方案方案 大船(条) 小船(条) 金额(元)问:那 能不能给我一份英语统考的题库,万分感谢 英语“作词/作曲/演唱”分别怎么写?作词:作曲:演唱:这三个用英语怎么写? 打问号的题求解析 哪位大神能帮忙翻译一下...或者告诉我这是干嘛的也行... 请问大家作曲(者)和作词(者)还有专辑,这三个用英语怎么说? 把打问号的解答 英语翻译LZ是刚到美国的学生,今天一上课历史老师就发给我这么一张纸,什么都没说,我不清楚这是什么啊,下周一就要把这张纸交上去, 作词、作曲、演唱者用英文怎么说? 已知正六棱柱的12个定点都在一个半径为3的球面上,当正六棱柱的体积最大时,其高的值为? 求大神做几道英语题.最好能翻译下每个题和答案!在线等急! 英语翻译歌曲中作词者、作曲者翻译成英文该怎么说?老板让我马上交差,如有知道的麻烦尽快回复, 拿破仑的加冕典礼是在哪里举行的?还有,拿破仑真的长这样吗? 谁给我解释解释 腻和腻歪 分别什么意思别告诉我一字之差 作词,作曲,演唱英文是什么? 〈明义法师之鸠〉译文 ”腻歪“怎么解释?怎么应用?谢谢! 六棱柱是由几个面围成的 《明义法师之鸠》的译文急~~~~~~ 为什么总有人说,这是有多歪腻.什么的 想问一下有关银行方面的英语,因为要给国外汇款,那些英文缩写不太懂,如题account ref.bank ref.bic ref.iban ref.不懂的别来 《明义法师之鸠》古文解释 “暗送秋波” 忄去读什么音 谁能给我文言文《明义法师之鸠》的译文和字词解释?越快越好, 英语翻译Set Up Panel On Dispiay Wide Sounds Menu Color Type2 Startup Off File No Reset World Time Home Timestamp Off Data Style YY/MM/DD Auto Power Off 1min REC/PLAY Power On USB Mass Storage Video Out NTSC 4:3 Format Rsest REC Focus AF Focus Fra 西方经济微观 为什么MC=W/MPL 正方体是不是棱柱 会计题,解题公式.甲公司成立时收到某投资者投入的原材料一批,双方确认的价值为100 000元(不含税费),增值税额为17 000元(准许抵扣),甲公司注册资本为800 000元.该投资者出资占注册资本 翻译:做某事花费某人一些时间 正方体是棱柱吗 不少行人却在马路上横冲直撞,对天桥似乎视而不见,原因何在?写一篇500字左右的文章必须要500字左右的额.... 李氏之鸠文言文 运用比喻或拟人的修辞,使用下面的词语写一段环境描写的话,至少用上其中的三个.宁静 涌起 领略 内涵 关于商鞅变法商鞅变法的内容是如何体现社会变革的?哪些措施最能体现社会变革?哪一项对后世政治制度影响最大?改革使那些人受益那些人受害?还有是哪几项是有利于社会进步的? 照相机的发展经历了一个由低级到高级的过程,针孔式照相机是利用( )的原理来成像的,而老式傻瓜相机和现代的一些高级相机都是利用物距大于凸透镜( )倍的情况,成( )缩小 请运用比喻或拟人修辞下面备选词语中至少两个词语写一段描写环境的话词宁静涌起领略内涵 不少行人却在马路上横冲直撞,对天桥似乎视而不见,原因何在?写一篇500字左右的议论文急用………………………………………………………………6 its probably cause you think you're cooler than me. 体会每组近义词的不同含义,在完成词语搭配.比喻 宁静的什么什么 平静的什么什么在仿写一个个大侠知道谢谢了,. 找出一组意思相反的词 橡皮的英文 用奔波,宁静,涌起.内涵,领略写一连贯的话,至少用2个 商鞅变法经过 橡皮用英语怎么写? 韩央行行长:应仿效中国积极推新货币互澳大利亚军方为因自身失误造成森林大火默克尔手机疑遭窃听 德政界反应强烈要日媒评安倍“积极和平主义” 称应三思俄媒称美欲打造“全球北约”综合遏华日媒:四个关键词解读金正恩时代美媒文章:没有美国的世界将会怎样?波黑发起“植百万棵树”行动财经随笔:“奥巴马医改”为何不讨喜?国际新闻早报:欧洲政界谴责美国窃听行日媒:日英拟开国安热线“牵制中国”美刊盘点中国继续购买美债四大理由日本台风灾区官员与女子欢饮引民愤 或欧盟针对美监控拟推新法规 科技企业或港媒:监控丑闻令美众叛亲离 “去美国军演引发澳大利亚山火肆虐 一名灭火飞日议员质疑安倍 称应给首相出席国会次三名驻阿富汗英军官涉嫌私刑处决塔利班美国国安局被指30天收集1240亿份雄性鱼深夜发奇怪求偶声 扰乱英国居民穷母为喂子行窃 女警感动放人送百美元时间都去哪儿了惑城(三十三)图说吕梁缘何能连续三年获评“省优”信息快车23吨黄铜一人如何卸货?山西吕梁:“1123”思路绽放检察“创新机制打造亮点助推转型发展山东召开专项活动联席会发挥检察职能作用推进矿区改革发展年轻小伙不学好律师阅卷网上预约平台开通钓鱼岛是中国固有领土李克强主持召开国务院常务会议儿子奸少女犯罪父亲作伪证被捕“一案双查”提高案件质量谁是真正盗窃犯用“看得见听得到”的执法办案实效取信巡视与督察双管齐下演示千年变革色拉油变身橄榄油普通调料充名牌
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘