这个的可序列化图是啥?
Posted
技术标签:
【中文标题】这个的可序列化图是啥?【英文标题】:what is the serializability graph of this?这个的可序列化图是什么? 【发布时间】:2015-03-01 18:34:50 【问题描述】:我试图找出一个问题,但我不知道如何解决它,我没有宣布问题中的大部分术语。问题来了:
三笔交易;给出了 T1、T2 和 T3 以及调度程序 s1 以下。请画出 s1 的优先级或可序列化图 并指定调度 S1 的可串行化。如果可能,写 至少一个系列时间表。 r ==> 读,w ==> 写
T1: r1(X);r1(Z);w1(X);
T2: r2(Z);r2(Y);w2(Z);w2(Y);
T3: r3(X);r3(Y);w3(Y);
S1: r1(X);r2(Z);r1(Z);r3(Y);r3(Y);w1(X);w3(Y);r2(Y);w2(Z); w2(Y);
我不知道如何解决这个问题,我需要详细说明。我应该在哪个资源中寻找?预先感谢。
【问题讨论】:
【参考方案1】:有多种方法可以测试可序列化性。 可串行化的目标是找到允许事务并发执行而不会相互干扰的非串行调度。
首先我们进行冲突等效测试。这将告诉我们调度是否可序列化。
为此,我们必须定义一些规则(i & j 是 2 个事务,R=Read,W=Write)。
如果等价于:我们不能交换动作顺序:
1. Ri(x), Wi(y) - Conflicts
2. Wi(x), Wj(x) - Conflicts
3. Ri(x), Wj(x) - Conflicts
4. Wi(x), Rj(x) - Conflicts
但这些都是完全有效的:
R1(x), Rj(y) - No conflict (2 reads never conflict)
Ri(x), Wj(y) - No conflict (working on different items)
Wi(x), Rj(y) - No conflict (same as above)
Wi(x), Wj(y) - No conflict (same as above)
所以应用上面的规则我们可以推导出这个(为简单起见使用 excel):
从结果中,我们可以清楚地看到 with 成功推导了一个序列关系(即您上面的时间表,可以拆分为S(T1, T3, T2)
。
现在我们有了一个可序列化的时间表和序列时间表,我们现在进行Conflict-Serialazabile 测试:
执行此操作的最简单方法是使用与冲突等效测试相同的规则,查找任何可能发生冲突的组合。
r1(x); r2(z); r1(z); r3(y); r3(y); w1(x); w3(y); r2(y); w2(z); w2(y);
----------------------------------------------------------------------
r1(z) w2(z)
r3(y) w2(y)
w3(y) r2(y)
w3(y) w2(y)
使用上面的规则,我们最终得到了一个类似上面的表(例如,我们知道从一个事务中读取 z
,然后从另一个事务中写入 z
会导致冲突(查看规则 3)。
给定表格,从左到右,我们可以创建具有以下条件的优先图:
T1 -> T2
T3 -> T2 (only 1 arrow per combination)
因此我们最终得到一个如下图:
从图中,由于它是非循环的(无循环),我们可以得出结论,调度是可冲突序列化的。此外,因为它也是可序列化的视图(因为每个冲突的时间表也是视图-s)。我们可以测试 view-s 来证明这一点,但它相当复杂。
关于学习本资料的来源,我推荐:
“数据库系统:设计、实施和管理的实用方法:国际版”,作者:Thomas Connolly; Carolyn Begg -(它相当昂贵,所以我建议寻找更便宜的 pdf 副本)
祝你好运!
更新 我开发了a little tool,它将为您完成上述所有工作(包括图表)。使用起来非常简单,我还添加了一些示例。
【讨论】:
我怎样才能更多地了解这个问题?在哪本书中,我应该给谷歌写哪些话? @tsozgen 我会回复你的。我觉得我在工作中犯了一个错误,所以不要接受我的答案(我会在接下来的几天有机会时编辑它) 我会检查的。感谢你付出的努力。如何获取有关该主题的详细信息?你的消息来源是什么? @tsozgen 没问题,对不起,我花了这么长时间才回复你。我已经和我的讲师检查了这个特定的问题,她确认它是正确的。如果您对答案感到满意,请不要忘记接受。祝你好运:)以上是关于这个的可序列化图是啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Laravel 4+ 从 jQuery/ajax 保存序列化的可排序数据