数据库原理补充:数据库并发控制软件设计案例.ppt
《数据库原理补充:数据库并发控制软件设计案例.ppt》由会员分享,可在线阅读,更多相关《数据库原理补充:数据库并发控制软件设计案例.ppt(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、并发控制案例分析并发控制案例分析主讲:吕震宇说明实验环境:wVisual Studio.NET 2005wSQL Server 2005其它说明:wSQL Server 2000+VS.NET 2003 也可以w需要对代码做细微调整源代码及数据库见附件并发控制案例设某银行存款帐户数据如下表:w现在要求编写一程序,完成两项功能:存款与取款。每次操作完成后向明细表中插入一行记录并更新帐户余额。帐号0001户名张三序号金额帐户余额1¥1,000.00¥1,000.00 2¥-500.00¥500.00 3¥200.00¥700.00 4¥400.00¥1,100.00 5¥-700.00¥400.0
2、0 1、问题似乎很简单解决办法:w 读取最后一行记录的帐户余额数据w 根据存、取款金额计算出新的帐户余额w 将新的记录插入表中真的这么简单?w在不考虑并发问题的情况下是可行的w如果考虑并发,问题就多了序号序号金额金额帐户余额帐户余额5-700.00 400.00 到银行取钱单位发工资 银行读取帐户 余额400元 单位读取帐户 余额400元 单位发工资 2000元 更新帐户余额62000.00 2400.00 取款100元 更新帐户余额7-100.00 300.00 余额错误上述解决办法的并发问题2、让我来想一想问题所在:并发问题!解决办法:加锁!w在读最后一条记录时先加上锁。怎么加锁?加什么锁
3、?w读之前加共享锁?w读之前加排它锁?读之前加共享锁?w显然不行!序号序号金额金额帐户余额帐户余额5-700.00 400.00 到银行取钱单位发工资 银行读取帐户 余额400元 单位读取帐户 余额400元 单位发工资 2000元 更新帐户余额62000.00 2400.00 取款100元 更新帐户余额7-100.00 300.00 余额错误ss读之前加排它锁,事务完成再释放?w三级封锁协议中没有定义读前加排它锁(暂且不管)w显然不行!序号序号金额金额帐户余额帐户余额5-700.00 400.00 到银行取钱单位发工资 银行读取帐户 余额400元 单位读取帐户 余额400元 单位发工资 200
4、0元 更新帐户余额72000.00 2400.00 取款100元 更新帐户余额6-100.00 300.00 余额错误xx 等待 等待 等待x还不止这些如何读取帐户余额?SELECT TOP 1 帐户余额 FROM 帐户明细ORDER BY 序号 DESC存在的问题:w在并发场景下你怎么确定它一定是最后一行?w随着数据量增大越来越没效率(因为需要排序)3、看来问题真的不是这么简单 问题出在哪里呢?w从系统设计一开始我们就走错了!重新设计!帐号户名帐户余额帐号序号金额帐户余额0001张三¥400.00 00011¥1,000.00¥1,000.00 00012¥-500.00¥500.00 00
5、013¥200.00¥700.00 00014¥400.00¥1,100.00 00015¥-700.00¥400.00 AccountAccountDetail冗余数据为什么引入冗余数据?w确保帐户余额在唯一的地方进行存储w避免了读取帐户余额时访问大量数据并排序新问题:w我们无法直接对数据库进行锁操作w必须通过合理的事务隔离级别完成并发控制ReadUnCommittedReadCommittedRepeatableReadSerializable4、着急吃不着热豆腐看来我们必须对各事务隔离级别逐一分析 ReadUnCommittedw显然不行w在这个事务隔离级别下连脏数据都可能读到,何况“脏
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 原理 补充 并发 控制 软件设计 案例
限制150内