冲突与视图可串行化判定

52、解释受限写入规则的含义,并说明在受限写入规则下如何测试一个调度是否是冲突可串行化的。使用上述方法,判断以下调度是否可串行化:S = [R1(Z), R2(Y), W2(Y), R3(Y), R1(X), W1(X), W1(Z), W3(Y), R2(X), R1(Y), W1(Y), W2(X), R3(W), W3(W)] 其中 Ri(Z)/Wi(Z) 表示事务 i 对数据项 Z 的读/写操作。

受限写入规则指事务基于其先读取的数据项旧值来更新该数据项。在受限写入规则下,可通过构建优先图来测试调度是否冲突可串行化。

优先图是有向图 $ G = (N, E) $,构建方法如下:

  • 为每个事务创建一个节点;
  • 若事务 $ T_j $ 读取了事务 $ T_i $ 写入的数据项的值,则创建有向边 $ T_i \rightarrow T_j $;
  • 若事务 $ T_j $ 在读取某数据项后写入该数据项,且该数据项之前被事务 $ T_i $ 读取过,则创建有向边 $ T_i \rightarrow T_j $;
  • 若事务 $ T_j $ 在某数据项被事务 $ T_i $ 写入后又写入该数据项,则创建有向边 $ T_i \rightarrow T_j $。

若优先图包含环,则调度不是冲突可串行化的。

对于调度
$ S = [R_1(Z), R_2(Y), W_2(Y), R_3(Y), R_1(X), W_1(X), W_1(Z), W_3(Y), R_2(X), R_1(Y), W_1(Y), W_2(X), R_3(W), W_3(W)] $,需构建其优先图:

  1. 为事务 $ T_1 $、$ T_2 $、$ T_3 $ 创建节点。

  2. 分析边:
    - 因为 $ R_2(Y) $ 后 $ W_2(Y) $,$ R_3(Y) $ 读取了 $ W_2(Y) $ 写入的值,所以有边 $ T_2 \rightarrow T_3 $。
    - 因为 $ R_1(X) $ 后 $ W_1(X) $,$ R_2(X) $ 读取了 $ W_1(X) $ 写入的值,所以有边 $ T_1 \rightarrow T_2 $。
    - 因为 $ W_1(X) $ 后 $ W_2(X) $,所以有边 $ T_1 \rightarrow T_2 $。
    - 因为 $ R_1(Y) $ 后 $ W_1(Y) $,$ W_3(Y) $ 读取了 $ W_1(Y) $ 写入的值,所以有边 $ T_1 \rightarrow T_3 $。

经分析,优先图无环,所以该调度是冲突可串行化的。

53、基于可串行化来设计并发控制算法是否合理?请说明理由。可串行化在标准并发控制算法中是如何应用的?

并发控制算法与可串行化

基于可串行化来设计并发控制算法是合理的。 可串行化 意味着并发执行的事务的效果与这些事务按某种串行顺序执行的效果相同,能保证数据库的一致性和正确性,避免并发操作带来的数据冲突和不一致问题。

在标准并发控制算法中, 可串行化 是重要目标和衡量标准。

主要并发控制技术

1. 锁机制

  • 通过对数据项加锁,防止其他事务在合适时间之前访问。
  • 保证事务按可串行化顺序执行。
  • 常见类型包括共享锁(S锁)和排他锁(X锁)。

2. 时间戳机制

  • 为每个事务分配唯一的时间戳。
  • 根据时间戳决定事务的执行顺序。
  • 确保并发执行的结果与按时间戳顺序串行执行的结果一致。

这两种机制的核心目标都是在满足一定约束条件的前提下,实现事务的安全并行执行,从而达到 可串行化 的要求。

54、讨论如何使用带标签的优先图来测试视图可串行性。

  • 使用带标签的优先图测试视图可串行性,可按以下步骤构建优先图:
    1. 为每个事务创建一个节点;
    2. 创建一个标记为 Tbw 的节点, Tbw 是一个虚拟事务,在调度开始时插入,包含对调度中访问的每个数据项的写操作。
  • 构建好图后,若图是无环的,则可判定该调度是视图可串行的。

55、使用构建优先图的方法,判断以下调度是否是冲突可串行化的:S1 = [R1(X), W2(X), W1(X)],其中R1(X)表示事务T1读取数据项X,W2(X)表示事务T2写入数据项X,W1(X)表示事务T1写入数据项X。

为判断该调度是否冲突可串行化,需构建优先图。根据规则:

  • 存在 T1 读 X 后 T2 写 X,应创建有向边 T1 → T2;
  • 还存在 T2 写 X 后 T1 写 X,应创建有向边 T2 → T1。

优先图中出现了循环,所以该调度不是冲突可串行化的。

56、使用构建优先图的方法,判断以下调度是否是冲突可串行化的:S2 = [W1(X), R2(X), W3(X), W2(X)]

  • 可以构建该调度的优先图来判断是否冲突可串行化。
  • 创建节点 T1、T2、T3 分别代表三个事务。
  • 由于 T2 读取了 T1 写入的数据项 X,创建有向边 T1 → T2。
  • T2 在 T3 写入 X 后又写入 X,创建有向边 T3 → T2。
  • T3 在 T1 写入 X 后写入 X,创建有向边 T1 → T3。
  • 若优先图无环,则调度冲突可串行化;若有环,则不可串行化。
  • 此优先图无环,所以该调度是冲突可串行化的。

57、使用构建优先图的方法,判断以下调度是否为冲突可串行化:S3 = [W1(X), R2(X), R3(X), W3(X), W4(X), W2(X)]

  • 需要构建优先图来判断冲突可串行化。

  • 根据规则:

  • 由于 T2 读取 T1 写入的 X 值,存在有向边 T1 → T2。
  • T3 读取 T1 写入的 X 值,存在有向边 T1 → T3。
  • T3 写入 X 值,且在 T1 写入之后,存在有向边 T1 → T3。
  • T4 写入 X 值,在 T1、T3 写入之后,存在有向边 T1 → T4 和 T3 → T4。
  • T2 写入 X 值,在 T1、T3、T4 写入之后,存在有向边 T1 → T2、T3 → T2 和 T4 → T2。

  • 若优先图中存在环,则该调度不是冲突可串行化。

  • 需进一步检查构建的优先图是否存在环,才能确定该调度是否为冲突可串行化。

58、为以下事务场景生成一个等待图,并判断是否存在死锁:事务1锁定数据项x2,正在等待x1和x8;事务2锁定数据项x3和x10,正在等待x7;事务3锁定数据项x8,正在等待x4;事务4锁定数据项x7,正在等待x1;事务5锁定数据项x1和x5,正在等待x3;事务6锁定数据项x4和x9。

  • 首先构建等待图,节点为 T1、T2、T3、T4、T5、T6。
  • 有向边如下:
  • T1 → T5(因 T1 等 x1,T5 锁 x1) <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值