Fast Serializable Multi-Version Concurrency Control for Main-Memory Database Systems 论文阅读笔记

Fast Serializable Multi-Version Concurrency Control for Main-Memory Database Systems 论文阅读笔记

这是一篇好论文

Serializable MVCC implementation

  • 不允许 write-write(CAS更新?),commit-ts 作为 serialization order
  • delta storage (undo buffer)
  • validation phase(避免 phantom, write-skew
    • 检查 read set 是否与最近(T’s start-ts < txn’s commit-ts < T’s commit-ts) committed txn write set 有交集(本事务称作 T,最近提交的事务称作 txn)
    • 沿着这些 delta storage 检查
    • 保留 T’s selection predicates,即 where clause,用于检测冲突
      • 对于 udpate:
        • 检查 update 的 txn’s column 是否属于 T’s read set
        • 检查 txn’s content 是否满足 T’s selection predicates
      • 对于 deletion:
        • 检查 txn’s deleted tuple 是否满足 T’s selection predicates
      • 对于 creation:
        • 检查 txn’s created tuple 是否满足 T’s selection predicates

在这里插入图片描述

validation phase 是 critical section

GC

如果 undo buffer (commit-ts) < 最小的 txn’s start-ts,那么可以被清除

Serializability 证明

serializability <=> 依赖关系遵循 commit-ts 顺序

对于 read txn,start-ts = commit-ts,相当于发生在一点。之前 commit 的可见,之后不可见。

对于 write txn,start-ts 记作 Sb,commit-ts 记作 Tc。下证明 txn 等价于发生在 Tc 这一点:
首先发生在 Sb 之前的一定可见;Tc 之后的不可见;[Sb, Tc] 之间的和 read set 没关系,这是 validation phase 保证的;并且前文说没有 write-write conflict,我猜应该是用 CAS 或者锁。因此 update 在 Tc 时刻被实施,并且 Tc 时刻之前的和自己相关的依赖是可见的。

Reference

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值