知识大全 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邮箱被锁定了如何解决1、首选搞清楚被锁定的原因;2、找客服申诉,解锁;3、通过手机号码和绑定邮箱解锁;126邮箱是网易公司于2001年11月推出的免费的电子邮箱,是网易公司倾力打造的专业电子
苹果appleid被锁定了怎么办你好, 当我们在多次尝试输入错误的AppleID账号的安全提示问题以后,系统从安全角度考虑,就会自动锁定当前账号。比如,你是想在AppleID页面设置时,多次输入错误安
筹码锁定指标的使用要领1、LFS指标的走势一般为大部分时间在50以上的高位运行,但有时会快速下探然后又快速拉起继续在高位运行,形成锥形底。这种尖底很好的对应了每次行情的见顶,而且有近一半的机会是在尖底
Oracle中被锁定的解决办法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一些性能方面的告警
SQLServer与Oracle数据锁定的比较 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数
功能介绍 可以实现锁定表格的行和列的功能效果和Excel里的冻结窗格类似当然没有Excel那么强大了只是类似 问题 当一个table太大而导致在屏幕里显示不下的时候IE会出现滚动条但是这时候