An Empirical Evaluation of In-Memory Multi-Version Concurrency Control 论文阅读笔记

本文主要是介绍An Empirical Evaluation of In-Memory Multi-Version Concurrency Control 论文阅读笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

An Empirical Evaluation of In-Memory Multi-Version Concurrency Control 论文阅读笔记

Ref[1]中他讲了这篇论文名字的变化历程。。。
上课笔记:03 Multi-Version Concurrency Control Design Decisions

  • Concurrency Control Protocol
  • Version Storage
  • GC
  • Index Management

DB meta data

在这里插入图片描述

  • txn-id:ts,作为写锁
  • begin-ts:tuple version lifetime
  • end-ts:tuple version lifetime
  • pointer:指向之前的 version

都是64bit,使用 CAS update

Concurrency Control Protocol

在这里插入图片描述

这里只讨论 serializable execution

我这里尽量把 MVCC 和 Version Storage 结合起来考虑,因为这俩关系密切。如果考虑 GC 的话,就太复杂了,就先单独考虑 GC。
由于 Time-Travel Storage 和 Delta Storage 只差一个压缩,就认为是同一种,称作 new table 和 old table

MVTO

在这里插入图片描述

  • version-data 是一个 pointer,指向数据(可以带 ref count,GC 时清除顺便管理)
  • txn-id 表示时间戳,为0表示没有人在写,非0表示正在写
  • 每个 tuple 还有一个 pointer,指向 older tuple,指针的读写是 atomic
  • txn-id 和 read-ts 只有 new table 有,old table 没有。相当于 old table 只有 (version, begin-ts, end-ts, pointer)
  • 事实上 new table 中的 end-ts 总是 infinity

我觉得这里应该把 version-data, txn-id,read-ts 和 begin-ts 放到一个256bit寄存器,然后 CAS
下面是我结合自己的理解写的,统一了 MVTO 和 Version Storage

读操作
  • 先访问 new table,原子读 (version-data, txn-id, read-ts, begin-ts),如果 txn-id 非0就 spin
  • 如果命中区间 (beign-ts, inf)
    • 若 Tid > read-ts,则 CAS 更新 (version-data, txn-id, Tid, begin-ts),如果失败
      • 如果失败原因是 txn-id 被持有写锁,那么 abort-restart
      • 如果是 read-ts 被修改,那么重新尝试
    • 读 version-data
  • 如果 begin-ts 比 Tid 大,进入 old table
    • 除了 GC 以外根本不可能 overwrite old table,写操作是 append
    • 所以随便读,不需要 read-ts

如果读不存在怎么办?

写操作
  • 准备 new-version-data
  • 访问 new table,原子读 (version-data, txn-id, read-ts, begin-ts)
  • 如果
    • read-ts, begin-ts > Tid,就 abort-restart
    • txn-id 非0就 spin
  • latch:CAS 更新 (version-data, Tid, read-ts, begin-ts)
  • 把这个 tuple copy-append 到 old table,即 (version-data, begin-ts, Tid)
  • CAS 更新 (new-version-data, 0, read-ts, Tid),绝对不会失败因为自己拿着写锁

注:overhead 大概是写操作时的 tuple copy-append 到 old table

MVOCC

  • read phase (start-ts),和 MVTO 差不多
  • validation phase (commit-ts)
  • write phase

MV2PL

在这里插入图片描述

  • (txn-id, read-cnt) 整个原子操作,作为 write-read lock
  • commit 时先获取 commit-ts,更新 begin-ts,然后释放锁
  • deadlock protocol:No_Wait 性能不错

Serializability

SSI:锁 + 前驱图

Version Storage

在这里插入图片描述

我有一个问题一直没搞明白,如果试图访问一个不存在的 tuple 怎么办,这时候好像必须要上锁了,然后还得面临一大堆问题。。。
比如 Tid=8 write©,Tid=10 read©。如果 T8 还没有开始,T10 难道还要自己创建一个 C(更新 index,然后 return null),然后 T8 发现 null-C 的 read-ts=10>8 所以 abort?
感觉可行的方案也就是 index 上锁,但是这样就太 overhead,其他优化基本就没有意义了
或者是 index 使用 hash + atomic-list???

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

GC

在这里插入图片描述

  • detect expired versions: check whether a version’s end-ts < Tids of all active txns
  • unlink those versions from their associated chains and indexes
  • reclaim their storage space

在这里插入图片描述

在这里插入图片描述

Index Management

在这里插入图片描述

logical pointer 好,update 时方便

实验分析

很重要的一部分,但是他课上(Ref[1])讲了不少,就不写了。

Reference

  • CMU Advanced Database Systems - 03 Multi-Version Concurrency Control Design Decisions (Spring 2019)

这篇关于An Empirical Evaluation of In-Memory Multi-Version Concurrency Control 论文阅读笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/228607

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear