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

3

我对"并发"和"事务"比较陌生,对于乐观并发控制中的后向/前向验证感到有些困惑。以后向验证为例,假设Tv是正在验证的事务,Ti是已提交的事务。我想知道为什么我们只检查Tv的读取集合和Ti的写入集合。为什么不检查Tv的写入集合和Ti的写入集合以及Tv的写入集合和Ti的读取集合呢?因为写-写和写-读也是冲突操作...任何解释都将不胜感激!

2个回答

4
验证过程使用读取-写入冲突规则,确保特定的事务调度与所有重叠的事务序列等效。这意味着一旦进入验证阶段,就不能再执行读/写集的更改。
任何两个事务Ti和Tj都需要满足3个规则,其中i < j (Ti在Tj之前进入验证阶段):
1. Ti不得读取Tj写入的对象。 2. Tj不得读取Ti写入的对象。 3. Ti不得写入Tj写入的对象,Tj也不得写入Ti写入的对象。
向后验证假定Ti的所有读取操作在Tj的验证开始之前已执行。这意味着Ti已经处于验证阶段中。(规则1已满足)
在验证Tj期间,将Tj的读取集与Ti的写入集进行比较。如果没有重叠,则规则2得到满足。
如果规则1和规则2得到满足,则规则3会被隐含满足。所有提交的更改都将被顺序执行,因为Ti在Tj之前进入了验证阶段。Ti的写入集将在Tj的写入集之前得到验证和提交。

-1
  • Tv的后向验证:

    • 在Tv验证之前执行的早期重叠事务的读操作不会受到Tv的写入影响。验证将Tv的读取集与早期事务的写入集进行比较,如果存在任何冲突,则验证失败;
  • Tv的前向验证:

    • Tv的写入集与所有重叠活动事务的读取集进行比较;

    • 与后向验证不同,在前向验证中有选择要中止哪个事务(Tv或任何冲突的活动事务)的选项;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接