MST

星途 面试题库

面试题:PostgreSQL SSI中依赖关系管理的基本原理是什么

请简要阐述PostgreSQL SSI(Serializable Snapshot Isolation,可串行化快照隔离)模式下依赖关系管理的基本原理,以及它如何确保事务的可串行化执行。
30.2万 热度难度
数据库PostgreSQL

知识考点

AI 面试

面试题答案

一键面试

依赖关系管理基本原理

  1. 事务时间戳:在SSI模式下,每个事务被分配一个唯一的时间戳。这个时间戳决定了事务的逻辑执行顺序。时间戳通常基于系统时钟或逻辑计数器生成。
  2. 读写集合:每个事务在执行过程中,会记录其读操作(读取的数据项集合,称为读集 Read Set)和写操作(写入的数据项集合,称为写集 Write Set)。例如,事务T1读取数据项A、B,写入数据项C,那么{A, B}是T1的读集,{C}是T1的写集。
  3. 依赖跟踪:当一个事务读取数据时,它建立了对数据项最新版本的依赖。如果另一个事务修改了该数据项,就可能破坏这种依赖关系。例如,事务T1读取了数据项X,之后事务T2修改了X,这就产生了潜在的依赖冲突。系统通过跟踪事务之间的读写操作,构建依赖关系图。

确保事务可串行化执行的方式

  1. 验证阶段:在事务提交前,系统进入验证阶段。它会检查事务的读集和写集,看是否与其他并发事务存在冲突。例如,如果事务T1读取了数据项A,而在T1提交前,事务T2写入了A,那么T1验证失败。
  2. 冲突检测
    • 写 - 读冲突(WR conflict):如果一个已提交事务的写集与当前事务的读集有交集,说明当前事务读取的数据可能已被修改,导致数据不一致,这种情况会使当前事务验证失败。
    • 写 - 写冲突(WW conflict):如果两个并发事务的写集有交集,说明它们试图修改同一数据项,这也会导致当前事务验证失败。
  3. 回滚机制:当事务验证失败时,该事务会被回滚。例如,事务T3在验证阶段发现与已提交事务T4存在冲突,T3会被回滚,这样就能保证系统状态的一致性,确保事务按照某种可串行化的顺序执行,避免了并发事务间的相互干扰。