基于验证的协议2024年12月17日 | 阅读 3 分钟 验证阶段也称为乐观并发控制技术。在此技术中,假定事务结束时所有数据项都可以成功更新。在应用所有更新时,它们会应用于为该事务保留的数据项的本地副本。最后,验证阶段检查事务的任何更新是否违反了可串行化,如果没有违反可串行化,则执行提交操作,并从本地副本更新数据库。否则,事务将被回滚并重新启动。乐观调度方法之所以称为乐观,是因为它们假定干扰很少,因此在事务执行期间无需进行检查。 - 读取阶段:在此阶段,读取并执行事务 T。它用于读取各种数据项的值,并将它们存储在临时本地变量中。它可以对临时变量执行所有写操作,而不会更新实际数据库。
- 验证阶段:在此阶段,将临时变量值与实际数据进行验证,以查看它是否违反了可串行化。
- 写入阶段:如果事务的验证通过,则将临时结果写入数据库或系统,否则将回滚事务。
验证阶段会检查可能导致重叠的事务的读写操作。因此,每个事务都分配有以下不同的时间戳 Start(Ti):包含 Ti 开始执行的时间。 Validation (Ti):包含 Ti 完成读取阶段并开始验证阶段的时间。 Finish(Ti):包含 Ti 完成写入阶段的时间。 - 该协议用于确定事务的可串行化时间戳,它使用验证阶段的时间戳,因为这是确定事务将提交还是回滚的实际阶段。
- 因此 TS(T) = validation(T)。
- 可串行化是在验证过程中确定的。它无法提前决定。
- 在执行事务时,它确保了更高的并发度,并且冲突次数更少。
- 因此,它包含回滚次数较少的事务。
当以下任一条件满足时,事务 T 可以成功完成其验证阶段: - 所有较旧的事务,即时间戳较小的事务,必须在请求的事务开始之前完成。
- 如果事务 T 在较早的事务完成之前开始,则事务 T 不应读取较早事务写入的数据项。此规则保证较早事务的写入不会被其他事务 T 读取。
- 如果事务 T 在较早的事务完成之前开始,则较早的事务应在其写入阶段完成,然后事务 T 才进入其验证阶段。因此,此规则保证写入是按顺序完成的,确保没有冲突。
在验证事务 T 时,首先检查前一个事务的第一个条件。如果为假,则只检查第二个条件。如果第二个条件为假,则只检查第三个条件。如果这三个条件中的任何一个为真,则没有冲突,并且 T 成功得到验证。如果这三个条件都不为真,则事务 T 的验证阶段将失败,然后将其回滚并稍后重新启动。 使用基于验证的协议的主要思想是: - 最小开销:所有数据项都在事务结束时更新,因此在事务执行过程中产生的开销最小。
- 无级联回滚:由于回滚仅涉及本地数据副本,而不涉及数据库,因此不会发生级联回滚。
- 无需锁定:与传统协议相比,此技术允许更高的并发性,因为无需锁定。
- 高效:当冲突很少时,此技术非常高效。偶尔发生的冲突会导致事务回滚。
使用基于验证的协议的主要缺点是: - 如果回滚的事务很长,则会损失宝贵的处理时间。
- 当事务之间存在大量干扰时,这些技术效果不佳,因为已提交完成的事务的结果将被丢弃,并且必须重新启动。
|