保守和严格的2-PL的区别
保守的2-PL
它也被称为静态2-PL。该协议要求事务在开始执行前,通过预先声明其读集和写集,锁定其访问的所有项目。
如果任何一个预先声明的项目不能被锁定,事务不会锁定任何一个项目,相反,它会等待,直到所有的项目都可以被锁定。
严格的2-PL
这要求除了锁是2-Phase之外,事务持有的所有Exclusive(X)和Shared(S)锁都要释放,直到事务提交之后。
Rigorous比Strict 2-PL更具限制性。
严格的2-PL的实现很容易。
保守2-PL和严格2-PL的区别:
编号 | 保守2-PL | 严格2-PL |
---|---|---|
1 | 一个事务在开始执行之前,必须获得它所需要的所有数据项的锁。 | 一个事务在执行过程中,只要有需要,就可以获得数据项的锁(只在增长阶段)。 |
2 | 保守2-PL没有一个增长阶段。 | 严格2-PL有一个增长阶段。 |
3 | 保守2-PL有一个缩减阶段。 | 严格2-PL没有萎缩阶段。 |
4 | 保守2-PL确保生成的时间表是可序列化的和无死锁的。 | 严格2-PL确保生成的计划是可序列化的、可恢复的和无级联的。 |
5 | 保守2-PL不能确保可恢复和无级联的时间表。 | 严格2-PL不能确保无死锁的时间表。 |
6 | 保守2-PL不确保严格的时间表。 | 严格2-PL确保生成的计划是严格的。 |
7 | 由于难以实现,所以在实践中没有使用。 | 严格2-PL很容易实现,但在实践中使用了它的一个较轻的版本(即严格的2-PL)。 |
8 | 在保守的2-PL中,一个事务可以读取一个未提交的事务的值。 | 在严格的2-PL中,一个事务只能读取已提交事务的值。 |