- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
方法二.顺序加锁法 预先对数据项规定一个加锁排序,所以加锁操作都要按顺序,释放锁时按照逆序 例子: 如果规定加锁顺序先R1再R2, 则T2要对R2加锁之前,需要先对R1加锁,即T2需要等待T1先释放R2再释放R1 事务T1 时间 事务T2 1。 对R1加锁 t1 2。 t2 对R2加锁 3。 请求对R2加锁 t3 等待 4。 等待 t4 请求对R1加锁 等待 等待 时间戳方法 基于时间戳排序的并发控制 时间戳概念 每个事物开始执行时,系统会给“他/她”分配一个时间戳,通常是基于系统时钟的。 越晚启动的事务其时间戳数值越大。 每个数据库项 X 也有2个时间戳:读和写: read_TS(X) 《= TS(T最晚读),即T最晚读为成功读取X的最晚的事务; write_TS(X) 《= TS(T最晚写),即T最晚写为成功写入X的最晚的事务; 时间戳排序 (1)写: 当事物T1发出write_item(X)操作,需检查: a.若read_TS(X) TS(T1), 或者write_TS(X) TS(T1), 则拒绝write操作,撤销并回滚T1, 原因:这说明某个时间戳大于T1的事物T2(比T1晚启动),在T1要写X之前,T2已经读或写了X的数据; 》如果是T2先写,则T1的写操作将覆盖了较晚启动的T2的写操作,即T2写操作无效 无效 》如果是T2先读,则T2读的是未经T1修改写入的数据,但实际上较晚启动的T2读的应该是T1修改后的数据。 对: 错: X未经T1修改 以上都违反了时间戳顺序。 b.若以上(a)中的条件没有发生,则执行T1的写操作,并将write_TS(X)的值设置为TS(T1). (2)读: 当事务T1发出read_item(X)操作,需检查: a.若write_TS(X) TS(T1),则拒绝read操作,撤销并回滚T1, 原因:说明在T1要读X之前,比T1晚启动的T2已经修改了X的数据,所以X已经不再是T1启动时的数据值了。 对: 错: X被T2修改 b. 若(a)中的条件没有发生,则执行T1的读操作, 并将read_TS(X)的值设置为TS(T1)和当前的read_TS(X) 中的最大值。 这是因为在T1读X前后,其他事务(如T2)都可以读X。 乐观 的并发控制方法 提取和修改 检验 提交和写回 事务T将数据X从数据库中提取出来,保存在临时副本中 事务T对数据X所做的所有修改都保存在临时副本中 提取和修改 检验 事务执行完毕后,提交到数据库之前需要检验: IF. 数据X被在T从数据库中提取出之后,又被其他事务提取且修改了,则冲突,T回滚,T的临时副本被删除。 ELSE. 检验通过 检验通过,才能 提交和写回 在临时副本中修改的数据X提交成功,写回到数据库中,使数据库中的X相应地改变。事务执行结束 That is all 数据库并发控制技术 10:00,A订票点读出航班目前的机票余额数,设为10张 10:02,B订票点读出航班目前的机票余额数,也为10张 10:05,A订票点订出6张机票,修改机票余额为10-6=4,并将4写回到数据库中 10:06,B订票点订出5张机票,修改机票余额为10-5=5,并将5写回到数据库中 事务 事务是数据库处理的一个逻辑工作单元,它由用户定义的一个或多个访问数据库的操作组成,这些操作一般一般包括检索(读)、插入(写)、删除和修改数据。一个事务内的所有语句被作为一个整体,要么全部执行,要么全部不执行。 如果事务中的数据库操作仅涉及数据的检索,而不更新数据库,那么这样的事务就称为只读事务;否则,称为读写事务。 描述事务处理概念的数据库模型 一条数据库记录 整个磁盘块 某个记录的字段(属性)值 数据项的粒度------数据项的大小 -------命名数据项的集合 数据库访问操作 Read_item(X):将数据库项X读取到程序变量 Write_item(X):将程序变量的值写入数据库项X中 两个事务的示例 T1 read_item(X); X:=X-N; Write_item(X); Read_item(Y); Y:=Y-N; Write_item(Y) T2 Read_item(X); X:=X+M; Write_item(X) 事务的特性 原子性 一致性 隔离性 持久性 事务状态和附加操作 BEGIN_TRA
文档评论(0)