面试题答案
一键面试依赖关系管理基本原理
- 事务时间戳:在SSI模式下,每个事务被分配一个唯一的时间戳。这个时间戳决定了事务的逻辑执行顺序。时间戳通常基于系统时钟或逻辑计数器生成。
- 读写集合:每个事务在执行过程中,会记录其读操作(读取的数据项集合,称为读集
Read Set
)和写操作(写入的数据项集合,称为写集Write Set
)。例如,事务T1读取数据项A、B,写入数据项C,那么{A, B}是T1的读集,{C}是T1的写集。 - 依赖跟踪:当一个事务读取数据时,它建立了对数据项最新版本的依赖。如果另一个事务修改了该数据项,就可能破坏这种依赖关系。例如,事务T1读取了数据项X,之后事务T2修改了X,这就产生了潜在的依赖冲突。系统通过跟踪事务之间的读写操作,构建依赖关系图。
确保事务可串行化执行的方式
- 验证阶段:在事务提交前,系统进入验证阶段。它会检查事务的读集和写集,看是否与其他并发事务存在冲突。例如,如果事务T1读取了数据项A,而在T1提交前,事务T2写入了A,那么T1验证失败。
- 冲突检测:
- 写 - 读冲突(WR conflict):如果一个已提交事务的写集与当前事务的读集有交集,说明当前事务读取的数据可能已被修改,导致数据不一致,这种情况会使当前事务验证失败。
- 写 - 写冲突(WW conflict):如果两个并发事务的写集有交集,说明它们试图修改同一数据项,这也会导致当前事务验证失败。
- 回滚机制:当事务验证失败时,该事务会被回滚。例如,事务T3在验证阶段发现与已提交事务T4存在冲突,T3会被回滚,这样就能保证系统状态的一致性,确保事务按照某种可串行化的顺序执行,避免了并发事务间的相互干扰。