08-事务和并发控制

08-事务和并发控制

ID:45033750

大小:320.00 KB

页数:71页

时间:2019-11-08

08-事务和并发控制_第1页
08-事务和并发控制_第2页
08-事务和并发控制_第3页
08-事务和并发控制_第4页
08-事务和并发控制_第5页
资源描述:

《08-事务和并发控制》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第8章事务和并发控制第八章事务和并发控制简介事务嵌套事务锁乐观并发控制时间戳排序并发控制方法的比较小结简介事务由客户定义的针对服务器对象的一组操作,它们组成一个不可分割的单元,由服务器执行。事务的目标在多个事务访问对象以及服务器面临故障的情况下,保证所有由服务器管理的对象始终保持一个一致的状态。简介并发控制并发控制协议都是基于串行相等的标准,源于用来解决操作冲突的规则。锁乐观并发控制时间戳排序简介Account接口中的操作Branch接口中的操作deposit(amount)//向帐户存amount数量的钱withdr

2、aw(amount)//从帐户中取amount数量的钱getBalance()->amount//返回帐户中余额setBalance(amount)//将帐户余额设置成amountcreate(name)->account//用给定的用户名创建一个新帐户lookUp(name)->account//根据给定的用户名查找帐户,并返回该帐户的一个引用branchTotal()->amount//返回支行中所有帐户余额的总和简介简单的同步机制(无事务)服务器上的原子操作-使用多线程可提高服务器的性能-采用锁机制保证线程同步-

3、原子操作:免受其它线程中执行的并发操作干扰的操作通过服务器操作的同步加强客户的协同-互斥-生产者-消费者简介事务的故障模型——Lampson模型对持久性存储的写操作可能发生故障-写操作无效或写入错误的值-文件存储可能损坏-读数据时可根据校验和发现损坏数据服务器可能偶尔崩溃-进程崩溃后,根据持久存储中的信息恢复-服务器不会产生随机故障消息传递可能由任意长时间的延迟-消息可丢失、重复或者损坏-接收方能够检测受损消息第八章事务和并发控制简介事务嵌套事务锁乐观并发控制时间戳排序并发控制方法的比较小结事务事务的概念以原子方式执行

4、的一系列操作,即1.它们不受其它并发客户操作的干扰2.所有操作或者全部成功完成,或者不产生任何影响银行事务示例TransactionT:a.withdraw(100);b.deposit(100);c.withdraw(200);b.deposit(200);事务全有或全无:或者完全成功,或者不留下任何效果故障原子性即使服务器崩溃,事务的效果也是原子的。持久性一旦事务完成,它的所有效果将被保存到持久存储中隔离性每个事务的影响不受其它事务的影响ACID:原子性,一致性,隔离性,持久性事务使用一个事务事务协调者-作用创建和

5、管理事务-示例openTransaction()->trans;开始一个新事务,并返回该事务的唯一TID,TID用于事务的其它操作。closeTransaction(trans)->(commit,abort);结束事务:若返回commit,则成功提交;否则返回abort,标示放弃。abortTransaction(trans);放弃事务。事务使用一个事务(续)事务执行结果-完全成功-放弃事务客户放弃事务服务器放弃事务事务执行历史示例事务成功执行被客户放弃被服务器放弃openTransactionopenTransac

6、tionopenTransaction操作操作操作操作操作操作服务器放弃事务操作操作向客户报告ERRORcloseTransactionabortTransaction事务-并发控制更新丢失问题初值:帐户A、B、C分别为$100、$200、$300操作:两次转帐(A、B→C),每次转帐金额为B当前帐户余额的10%期望结果:B的终值应为$242事务事务T:balance=b.getBalance();b.setBalance(balance*1.1);a.withdraw(balance/10)事务U:balance=b

7、.getBalance();b.setBalance(balance*1.1);c.withdraw(balance/10)balance=b.getBalance();$200balance=b.getBalance();$200b.setBalance(balance*1.1);$220b.setBalance(balance*1.1);$220a.withdraw(balance/10)$80c.withdraw(balance/10)$280事务-并发控制不一致检索初值:帐户A、B分别为$200、$200操作:

8、转帐+查询银行所有帐户的总余额期望结果:总余额为$400事务事务V:a.withdraw(100)b.deposit(100)事务W:aBranch.branchTotal()a.withdraw(100);$100total=a.getBalance()$100total=total+b.getBalance()$300tota

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。