DBMS中的视图可序列化简介
DBMS的视图可序列化是一种发现指定日程表是否可视图序列化的方法。为了证明一个指定的时间表是否是可视图序列化的,用户涉及测试约定的时间表是否与它的串行时间表是视图等价的。由于没有同步的事务执行,我们可以确认,一个串行时间表肯定不会让数据库不可预测。相反,在非串行时间表中,数据库可能会处于不一致的状态,因为在数据库服务器中存在多个事务在同步执行。通过测试一个指定的非串行时间表是可视图串行化的,我们需要确保它持有一个一致的时间表。
DBMS中视图可序列化的语法
简单地说,当一个特定的时间表出现时,我们可以在DBMS中定义视图可序列化,称为视图等同于几个串行时间表,即没有重叠的事务。
让我们看看如何测试现有的两个DBMS时间表是否被定义为保持视图等价。
假设我们有两个计划表X1和X2,只有当它们符合所有后续条件时,才会被认为是保持视图等价。
- 初始读取。 在这两个时间表中,每个数据项的初始读取状态应该在事务中匹配。例如,如果在时间表T1中,事务X1在事务X2之前声明一个数据项Y,那么在指定的时间表T2中,X1必须在X2之前读取Y。
- 读取与初始读取。 任何人都会对初始读取这个词产生混淆。因此,初始读取表示对一个数据项的初步读取过程。例如,我们可以看到,数据项Y在一个时间表中可以被交付无数次,但是,对Y的初始读取操作被称为初始读取。
- 最终写入。 在这两个时间表中,每个数据项的最终写入过程都应该满足。假设,例如,事务X1在时间表T1中曾经写过一个数据项Y,那么在T2中,对Y的最新写程序必须由事务X1来完成。
- 更新读取。 在时间表T1中的不确定性,事务X1正在读取任何由X2重组的数据项,而不是在时间表T2中对相同的数据项。假设在时间表T1中,X1在X2对Y进行写程序后对Y实施了读程序,那么在T2中,X1必须在X2对Y实施写程序后再读Y。
如何在DBMS中执行视图可序列化?
为了检查一个明确的非序列化时间表是否被声明为保持视图可序列化,我们需要确认它持有一个一致的时间表。这似乎是在检查一个非串行时间表是否可串行化,而不是在所有时间都有一个串行时间表。这方面的答案是,系统资源完全被事务的并发执行所消耗,而当与串行时间表相关联时,事务的并发执行明显更快。
在这里,可序列化的想法有利于识别支持数据库一致性的精确的非序列时间表。
主要来说,有两种可序列化的方式。
1.冲突的可序列化
我们可以通过以下方式来识别所提供的时间表是否是冲突可序列化的:
- 如果指定的时间表是冲突可序列化的,那么肯定会是视图可序列化的。停留并报告你的反应。
- 但是,如果指定的时间表不是冲突的那种,那么它就可以或不可以被视图序列化。所以,我们需要回去尝试其他进程。
2.视图可序列化
找到以下定义视图可序列化条件的拇指规则:
- 对于整个数据项来说,初始读者应该是相似的。
- 写-读顺序应该是相同的。
- 对于整个数据项来说,最终的写入者应该是相同的。
- 所有冲突可序列化的时间表都被称为视图可序列化。
- 所有可视图序列化的时间表可能是也可能不是可冲突序列化的。
- 没有盲写表示没有任何视图可序列化的时间表。
DBMS中视图可序列化的例子
让我们通过一个例子来认识DBMS中的视图可序列化这一术语:
提供的时间表:

正如我们所看到的,在串行时间表中,只有当当前执行的事务完成后,事务才能开始。因此,所提供的时间表的串行时间表应该是下面这个样子的。

因此,当我们证明DBMS中提供的时间表与它的串行时间表是视图等价的时候,之后,指定的时间表就被定义为视图可串行的。
让我们再次通过不同的例子来说明上述语法,以测试三种不同的方法来了解一个时间表是否定义了视图可序列化。
示例#1
通过以下方法检查指定的计划表是否作为冲突可序列化存在:
- 当一个计划表作为冲突可序列化存在时,那么它肯定是视图可序列化的。
- 当所提供的计划表不存在时,它在DBMS中可以或不可以被视图序列化。
例子#2
我们将测试是否存在任何盲写操作过程,盲写一词定义为不读而写:
- 如果有任何盲写出现,那么该计划肯定不能被视图序列化。
- 但是,如果出现了盲写,那么时间表可能是可视图序列化的,也可能不是。
例子 #3
在这里,我们将检查得到一个与视图等价的串行时间表:
- 使用上述三个条件方法,我们将写出整个依赖关系。
- 之后,我们将画出一个应用这些依赖关系的图。
- 但是,当图中没有出现循环时,那么时间表将是可视图序列化的,否则就不是。
如果任何两个时间表T1和T2被称为视图等价,原因是T1时间表中的最终写操作是由X1事务执行的,而在T2中,X1实现了最终写操作。
请注意,T2被说成是T1的一个串行时间表。如果我们需要证明这两个时间表都是视图等价的,那么我们就可以将T1时间表定义为DBMS中的视图可序列化时间表。
结论
DBMS的视图可序列化是一个技术概念,它有助于识别准确的非序列时间表,维护服务器中数据库的一致性。仅仅谈及可序列化,它包括两种类型。冲突和视图可序列化。调度器通常承诺可序列化,而不管DBMS事务对其数据做了什么。