知识大全 pessimistic锁定对optimistic锁定(2)

Posted

篇首语:与天地兮比寿,与日月兮齐光。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 pessimistic锁定对optimistic锁定(2)相关的知识,希望对你有一定的参考价值。

  pessimistic locking 考虑

   ) 使用select for update(nowait)不像optimistic locking需要用户额外的编码 实现简单

   ) 在交互式应用中 行锁的时间可能较长 如果用户所住该纪录后 离开终端 则其他用户将无法更新该纪录(但用户可以查看该记录 oracle 写并不阻塞读) 在 有线 (服务器可以知道客户端的状态)应用中 应用保留着客户端的session 可以通过数据库或者应用服务器设置session的idle time 如果客户端长时间占有资源且不做操作 则断掉该连结 释放锁 但在 无线 (服务器无法知道客户端的状态)应用中 则无法设置idle time断掉客户端

   ) UI交互 如果纪录已经被其他用户锁住 当前用户在修改纪录之前就会获知 可以选择等待或者取消等待

  optimistic locking策略

  因为在更新数据前 读取数据的时候不锁纪录 所以要在更新纪录的时候 验证纪录是否已经被修改过 这需要额外的代码和设计 常用的方法包括 )整合所有相关列验证 )使用timestamp时间戳验证

  整合所有相关列验证

  Time : Ian read SHERSA s salary record:    SQL> select * from emp where name= SHERSA ;

  ID NAME SALARY

  

   SHERSA     Time : HR read SHERSA s salary record:    SQL> select * from emp where name= SHERSA ;

  ID NAME SALARY

  

   SHERSA     Time : Ian update SHERSA s salary by increment

  SQL> update emp set salary= where id= and name= SHERSA and salary= ;

  SQL> mit;

  SQL> select * from emp where name= SHERSA ;

  ID NAME SALARY

  

   SHERSA

  Time : HR update SHERSA s salary

  SQL SQL> update emp set salary=salary* where id= and name= SHERSA and salary= ;

   rows updated

  显示 行被更新了 表示纪录被其他用户有效修改(无效修改指其他用户虽然修改过 但数值没有变)过 可以通过程序判断 提示用户 其他用户已经修改过 请再次提交你的修改请求…

  显然 这个方法需要所有的验证列都在where语句中 开发的时候不够灵活

  使用timestamp时间戳验证

  在每个表中增加一个timestamp字段 更新时候验证timestamp字段

  SQL> Alter table emp add mofied current_timestamp default (current_timestamp) not null;

  增加一个timestamp字段 标记该纪录改动的时间

  SQL> create or replace trigger upd_modified_emp_tri

   before update on emp for each row

   begin

   :new modified:=current_timestamp;

   end;

   /

  Trigger created

  建立必要的触发器

  Time : Ian read SHERSA s salary record:

  SQL> select * from emp where id= ;    ID NAME SALARY MODIFIED

  

   SHERSA DEC AM    Time : HR read SHERSA s salary record:    SQL> select * from emp where id= ;    ID NAME SALARY MODIFIED

  

   SHERSA DEC AM    Time : Ian update SHERSA s salary by increment

  SQL> update emp set salary= where id= and modified=to_timestamp( DEC AM );

   row updated

  SQL> mit;

  SQL> select * from emp where id= ;    ID NAME SALARY MODIFIED

  

   SHERSA DEC AM    Time : HR update SHERSA s salary

  SQL> update emp set salary=salary* where id= and modified=to_timestamp( DEC AM );

   rows updated

  显示 行被更新了 表示纪录被其他用户修改 可以通过程序判断 提示用户 其他用户已经修改过 请再次提交你的修改请求…

  与第一种方法相比 where部分只需要增加额外的字段timestamp字段即可 低于 i的版本可以自定义验证列

  optimistic locking考虑

  optimistic locking需要用户额外的编码和设计 比pessimistic复杂

   ) 在交互式应用中 行锁的时间较短 仅仅在更新纪录的时候获得 读记录时候不获得锁 用户操作的时候离开终端 则其他用户仍然可以更新该纪录 在 无线 应用中 通常使用optimistic locking

   ) UI交互 如果纪录已经被其他用户修改 用户费了很多精力和时间去填写表格 点击[提交] 结果系统返回[更新 行 请重新填写] 然后系统重新load新纪录的表格 用户之前输入的改动都将不再记忆

cha138/Article/program/Oracle/201311/18868

相关参考

“非典”的源头锁定果子狸

在抗击“非典”的战役中,有的科学家认为“非典”病毒可能来源于动物,但尚无充分证据,寻找“非典”病毒源头,对研究“非典”的病因、传播机制、流行规律以及制定有效的预防控制措施意义十分重大。为此,深圳疾病预

用户暂时离开时,锁定Windows系统以免其他人非法使用。锁定系统的快捷方式为同时按住()

用户暂时离开时,锁定Windows系统以免其他人非法使用。锁定系统的快捷方式为同时按住()。A、WIN键和Z键B、F1键和L键C、WIN键和L键D、F1键和Z键正确答案:C

用户暂时离开时,锁定Windows系统以免其他人非法使用。锁定系统的快捷方式为同时按住()

用户暂时离开时,锁定Windows系统以免其他人非法使用。锁定系统的快捷方式为同时按住()。A、WIN键和Z键B、F1键和L键C、WIN键和L键D、F1键和Z键正确答案:C

知识大全 微信支付被锁定了,锁定的时候是不是输入正确的密码也不可以

微信支付被锁定了,锁定的时候是不是输入正确的密码也不可以?1、一天内输错10次,验密冻结;过了当天24点,则解冻;2、支持密码输入错误时,页面会出现剩余的可输入次数,可选择“忘记密码”的快速入口进行找

知识大全 网易126邮箱被锁定了 如何解决

网易126邮箱被锁定了如何解决1、首选搞清楚被锁定的原因;2、找客服申诉,解锁;3、通过手机号码和绑定邮箱解锁;126邮箱是网易公司于2001年11月推出的免费的电子邮箱,是网易公司倾力打造的专业电子

知识大全 苹果appleid被锁定了怎么办

苹果appleid被锁定了怎么办你好, 当我们在多次尝试输入错误的AppleID账号的安全提示问题以后,系统从安全角度考虑,就会自动锁定当前账号。比如,你是想在AppleID页面设置时,多次输入错误安

筹码锁定指标的使用要领

筹码锁定指标的使用要领1、LFS指标的走势一般为大部分时间在50以上的高位运行,但有时会快速下探然后又快速拉起继续在高位运行,形成锥形底。这种尖底很好的对应了每次行情的见顶,而且有近一半的机会是在尖底

知识大全 Oracle中被锁定的解决办法

Oracle中被锁定的解决办法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一些性能方面的告警

知识大全 SQLServer与Oracle数据锁定的比较

SQLServer与Oracle数据锁定的比较  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数

知识大全 发布一个锁定行列的一种方法

  功能介绍  可以实现锁定表格的行和列的功能效果和Excel里的冻结窗格类似当然没有Excel那么强大了只是类似  问题  当一个table太大而导致在屏幕里显示不下的时候IE会出现滚动条但是这时候