乐观并发控制中的后向/前向验证

时间:2015-05-08 04:16:23

标签: concurrency transactions distributed-system optimistic-locking

我是“并发”的新手。 “事务”,我对乐观并发控制中的后向/前向验证感到有些困惑。只需对示例进行反向验证。假设Tv是正在验证的事务,而Ti是已提交的事务。我想知道为什么我们只检查电视的读取设置vs.Ti的写入集。为什么我们不检查Tv的写集vsTi的写集和Tv的写集vsTi的读集呢?由于写 - 写和写 - 读也是冲突操作...任何解释都将不胜感激!

2 个答案:

答案 0 :(得分:2)

验证使用读取 - 写入冲突规则来确保特定事务的调度与所有重叠转换等效。这意味着一旦进入验证阶段,就无法对读取 / 写入集进行更改。

任何两个交易T i 和T j 需要满足3个规则,其中i <1。 j(T i 在T j 之前进入验证阶段):

  1. T i 不得读取由T j

  2. 写的对象
  3. T j 不得读取由T i

  4. 写的对象
  5. T i 不得写入由T j 编写的对象 T j 不得写入由T i

  6. 写的对象

    向后验证假设在T j 的验证开始之前执行了T i 的所有读取操作。这意味着T i 已经处于验证阶段。 (满足规则1)

    在验证T j 期间,对 write 设置的T检查 T j 集<子> I 。如果没有重叠,则(满足规则2)

    如果满足规则1和规则2,则隐含地满足规则3。所有提交的更改将按顺序完成,因为T i 在T j 之前进入验证阶段。 T i write 集将在T j write 设置之前被验证和提交。

答案 1 :(得分:-1)

  • 电视的反向验证:

    • 读取早期重叠事务的操作(执行 在验证电视之前)不能受到电视写入的影响。 验证检查Tv的读取集与先前的写集 交易,如果有任何冲突就失败;
  • 转发验证电视:

    • 将Tv的写集与所有重叠的读集进行比较 活跃交易;

    • 与向后验证不同,在前向验证中 是中止哪个交易的选择(电视或任何一个 冲突的活跃交易);