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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章