【问题标题】:backward/forward validation in optimistic concurrency control乐观并发控制中的后向/前向验证
【发布时间】:2015-07-18 21:17:18
【问题描述】:
我是“并发”和“事务”的新手,我对乐观并发控制中的后向/前向验证感到有些困惑。仅以反向验证为例。假设 Tv 是正在验证的事务,而 Ti 是已提交的事务。我想知道为什么我们只检查电视的读取集 vs.Ti 的写入集。为什么我们不检查 Tv 的写入集 vs.Ti 的写入集以及 Tv 的写入集 vs.Ti 的读取集呢?由于 write-write 和 write-read 也是冲突操作...任何解释将不胜感激!
【问题讨论】:
标签:
concurrency
transactions
distributed-system
optimistic-locking
【解决方案1】:
验证使用 read-write 冲突规则来确保特定事务的调度与所有重叠事务串行等效。这意味着一旦进入验证阶段,就不能进一步对 read/write 集进行任何更改。
任意两个交易Ti和Tj需要满足3条规则,其中i i在 Tj) 之前进入验证阶段:
Ti 不得读取由 Tj
写入的对象
Tj 不得读取 Ti
写入的对象
Ti 不得写入由 Tj 和
Tj 不能写 Ti
写的对象
向后验证假定 Ti 的所有读取 操作都是在 Tj 验证开始之前执行的。这意味着 Ti 已经处于验证阶段。 (满足规则 1)
在验证 Tj 期间,Tj 的 read 集与 Twrite 集进行检查我。如果没有重叠,则 (满足规则 2)。
如果满足规则 1 和规则 2,则隐式满足规则 3。由于 Ti 在 Tj 之前进入验证阶段,所有提交的更改都将按顺序完成。 Ti 的 write 集将在 Tj 的 write 集之前验证并提交。
【解决方案2】:
-
Tv 的后向验证:
- 早期重叠事务的读取操作(执行
在 Tv 验证之前)不会受到 ot Tv 写入的影响。
验证检查 Tv 的读取集与之前的写入集
交易,如果有任何冲突则失败;
-
电视前向验证: