VLDB 2021 COCO 论文阅读

article/2025/10/29 10:56:52

Epoch-based Commit and Replication in Distributed OLTP Databases

记录一篇之前读过的论文。。。

整篇论文的核心在于Epoch,将传统数据库以事务为粒度提交和恢复变成了以Epoch为粒度来提交和恢复,这样做的好处就是可以减少2PC和同步复制的时间开销。并且提出两种OCC算法,对于Epoch机制来说很有好处。

这篇文章理论介绍性居多,对于事务处理的流程做了很详细的解释,包括2PC的处理,容错的处理,及事务各生命周期的伪代码,如果各位有兴趣可以阅读原文。

主要贡献

1.实现了COCO这个OLTP系统,可以选择复制方式,primary-backup replication和state machine replication,我的理解很简单就是前者是将操作在主节点执行完后的数据复制到备机,后者是复制操作到每个节点,每个节点各自执行这个操作。

2.两个OCC算法

下面我也主要进行介绍事务处理过程吧,最后介绍两个OCC算法

2PC

和传统的2PC没有太多区别,只不过系统是以Epoch为粒度,所以当Epoch内只要有一个事务被Abort那么整个Epoch都会被Abort,这样的处理很明显有很大的缺陷,会导致事务的Abort率增加,所以论文对于并发性访问或者违反完整性约束条件的事务是只Abort这一个事务,而不会Abort该事务所在的Epoch。

Epoch的缺陷

优点很明显,缺陷也很明显,Epoch最大的优势就在于可以减少2PC和同步开销,而最明显的缺陷就是Epoch的机制导致,Commit延迟会比事务为粒度的系统更长,并且如果涉及到长事务,会更加凸显这个问题,影响其他事务的提交。还有上面提到的Abort率会增加,因为一个事务的abort会导致整个Epoch的Abort。

事务生命周期

Coco的事务大体分为两个阶段,执行和提交,首先我们明确一个点,初始化事务的节点为协调节点,接下来再解释两个阶段 

执行阶段

在执行阶段,如果是读操作,会首先判断是否已经在读集中,如果在读集就直接读缓存,为了防止多次读同一个数据的问题。如果没有在读集就进入transaction_read,判断当前本地节点是否有需要读的key值对应的Value(第三行),ns是Node Set,记录存在该key值副本的节点id,如果没有就到最近存在该key的节点去读value(第6行)。

 对于写入操作,如果该节点不是主节点就将其插入事务的写集,如果是该key的主节点,因为是OCC,所以就直接写入数据库。

此时结束了执行阶段进入提交阶段

提交阶段

提交阶段分为三步,1.写集上锁,2.OCC验证 3.提交

上锁阶段,只对主节点上锁,而且为了避免死锁,COCO使用NO_WAIT的策略,也就是如果有另一个事务要写相同数据的时候,看到数据已经被上锁了,不进行等待,直接进行Abort。并且在上锁之前会对TID进行对比,如果写集的TID和数据库的不相等,直接abort,出现这种情况的原因是存在读事务更改TID的可能,也就是写后读。

写集上锁后进行OCC验证,也就是对比TID的过程。只有OCC验证通过才能进行提交,否则就abort。下面就是写入数据库的过程,得到所有key的副本节点(第3行),然后找一个最近的节点写入该数据(第4行),再对所有节点进行同步(第5-6行),因为异步同步的原因,不能保证多个事务写的顺序一致,所以采用了托马斯写规则,写TID更大的那个,直接覆盖前一个(第14-15行)。

 OCC算法

PT-OCC

physical time OCC,即使用物理时钟的OCC,使用物理时钟的分布式数据库有一个需要考虑的问题,即时钟偏移,得保证所有的节点的时间节点一致。当然现在的很多时钟NTP组件可以做到ms级别,对于事务来说,也算是勉强够用吧。主要是将Silo的单机OCC改成分布式OCC。主要思路就是验证读集,无需让写集的每个记录持有锁,只要未检测到更改,就可以确保读取一致快照。

锁阶段

将事务写集中所有记录的primary node给锁定上,这个tid是新生成的,如果这条记录在写集中,那么就遵循Thomas写规则,record的tid用最新的tid覆盖。然后ok的判断是判断这个锁有没有被其他的事务占用,如果占用了,他为了避免死锁,采用了no_wait的死锁预防策略,就是一旦有其他的事务占用锁了,那就直接abort就好。后面的TID不同就是可能这条记录被覆盖掉了,所以就abort,写写冲突。

Validate读集阶段

再次确认此时的记录被当前事务lock并且没被其他并发事务修改

写回数据库

没有被abort就先提交到primary key所在的节点,解锁这条记录,然后再异步的把这数据更改到其他节点

LT-OCC

就是逻辑时间OCC,逻辑时间就无需全局时钟,然后COCO是把Tictoc单节点OCC改成分布式OCC。[wts, rts]的含义是,wts代表记录何时写入,rts代表在[wts, rts]区间都可以读。

上锁阶段

大部分和PT-OCC相同。wts是记录写的时间,也相当于之前physical time的TID,rts是可以读取的时间,因为在当前时间有读写集,所以rts需要更新到最新的时间。

验证读集阶段

读集中的rts<Tid时需要尝试扩展,>Tid就无需验证,(TID>写集中的rts是否没有存在的意义),事务会在两种情况abort 1.事务记录被其他并发事务修改也就是wts被更改 2.rts<T.tid 此时需要扩展rts,让该记录在TID时刻可读,但是如果被其他事务锁定,此时也需要abort。否则就把rts扩展到tid

写回数据库

和PT-OCC类似

快照事务的实现,文中提到了一点,当没数据冲突的时候,可以读一致性快照。

提到的一个优化点,锁定写集和验证读集并行进行。可以提高吞吐量。

以上就是这篇论文的大致内容,对事务的生命周期做了一个很详细的描述,OCC的过程也有很详细的解释和伪代码。各位在不了解这些的情况下,建议阅读原文。

希望对各位有所帮助!

我的个人博客,欢迎交流!

CodebellsCodebells personal blogs.https://codebells.github.io/


http://chatgpt.dhexx.cn/article/D6YxcEdo.shtml

相关文章

【区块链论文整理】VLDB篇

VLDB (Very Large Data Base&#xff09;是数据库三大顶会之一&#xff0c;近几年也发表了不少水平很高的文章。本文主要针对VLDB 会议中区块链相关的论文进行简单整理。 2021 SlimChain: Scaling Blockchain Transactions through Off-Chain Storage and Parallel Processing…

入选数据库顶会 VLDB:如何有效降低产品级内存数据库快照尾延迟?

阿里云操作系统团队、阿里云数据库团队以及上海交通大学新兴并行计算研究中心一起合作的论文 “Async-fork: Mitigating Query Latency Spikes Incurred by the Fork-based Snapshot Mechanism from the OS Level” 被数据库系统领域顶会 Very Large Data Bases Conferences (V…

VLDB 2023 | 基于擦除的浮点无损压缩(附论文和源码)

大量浮点时间序列数据正以前所未有的高速率生成。一种高效、紧凑、无损的时间序列数据压缩方法对海量数据的应用场景至关重要。现有的大多数浮点无损压缩方法是基于异或操作&#xff0c;但它们没有充分利用尾随零&#xff0c;这通常会导致压缩率不尽如人意。本次为大家带来重庆…

运算符—逻辑运算符

目录 5.逻辑运算符 5.1逻辑运算符概述 5.2短路逻辑运算符 5.逻辑运算符 &#xff08;学完之后要求能够使用逻辑运算符完成逻辑运算&#xff09; 5.1逻辑运算符概述 在数学中&#xff0c;一个数据x&#xff0c;大于3&#xff0c;小于6&#xff0c;我们可以写为这样来表示&am…

C语言关系运算和逻辑运算

一、关系运算 1.关系运算符 每个关系运算符对它左侧值和右侧值进行比较大小的运算 2.关系表达式 用关系运算符连接起来的式子。 若关系为真&#xff0c;关系表达式的值为1&#xff1b; 若关系为假&#xff0c;关系表达式的值为0&#xff1b; 3.优先级 关系运算符优先级低于算术…

C语言复习--逻辑运算符|| 和,!

&& 只有两个条件都为真时&#xff0c;才为真。||只要一个为真&#xff0c;就为真。 逻辑运算符很重要的法则是短路法则。 逻辑运算符的运算顺序都是从左到右计算。 && 当左侧条件为假时&#xff0c;就不计算右侧。 || 都左侧条件为真时&#xff0c;就不计…

C语言:关系运算符逻辑运算符

本节的所讲解的符号&#xff0c;大家在生活中应该都有用过&#xff0c;像我们去商场买东西&#xff0c;都会比较一下价格&#xff0c;是不是相等啊&#xff0c;哪家的贵&#xff0c;哪家的便宜啊。 在C语言中程序中也存在这样的比较&#xff0c;这个时候就需要用到关系运算符了…

C语言逻辑运算符详解

情景模式&#xff1a;现在研发出了一款新的软件&#xff0c;要求使用者必须成年&#xff0c;并且成绩大于等于60&#xff0c;该怎么办呢&#xff1f; 或许你会想到使用嵌套的 if 语句&#xff0c;类似下面这样的代码&#xff1a; #include <stdio.h> int main() {int a…

C 语言 逻辑运算符

文章目录 介绍逻辑运算符一览案例演示 介绍 用于连接多个条件&#xff08;一般来讲就是关系表达式&#xff09;&#xff0c;最终的结果要么是真(非 0 表示)&#xff0c;要么是 假(0 表示) 。 逻辑运算符一览 下表显示了 C 语言支持的所有逻辑运算符。假设变量 A 的值为 1&am…

☀️光天化日学C语言☀️(11)- 逻辑运算符 | 我是一个有逻辑的人

&#x1f649;饭不食&#xff0c;水不饮&#xff0c;题必须刷&#x1f649; C语言免费动漫教程&#xff0c;和我一起打卡&#xff01; &#x1f31e;《光天化日学C语言》&#x1f31e; LeetCode 太难&#xff1f;先看简单题&#xff01; &#x1f9e1;《C语言入门100例》&#…

C语言逻辑运算符介绍和示例

文章目录 1、逻辑运算符介绍2、逻辑表达式的书写3、不得不说的逻辑非4、获取视频教程5、版权声明 1、逻辑运算符介绍 在日常生活中&#xff0c;要做出某个决定&#xff0c;需要判断的条件往往不止一个&#xff0c;需要判断多个条件&#xff0c;例如超女选秀&#xff0c;参与选…

C语言按位逻辑运算符总结-与、或、非、异或

点击上方蓝字关注我&#xff0c;了解更多咨询 C中有按位逻辑运算符&#xff1a;按位取反、按位与、按位或、按位异或。这4个运算符可以用于整型&#xff0c;包括char类型。按位操作针对每一个位进行操作&#xff0c;不影响左右两边的位。4个运算符的作用总结如下&#xff1a; 一…

C语言逻辑运算符和||,一篇文章带你读懂逻辑表达式!

目录 逻辑运算符有哪些&#xff1f; 逻辑运算符的短路特性 逻辑运算符在表达式求值中的问题 逻辑运算符&&、||混合的不同情况 逻辑运算符有哪些&#xff1f; C 语言提供了以下三种逻辑运算符。 一元&#xff1a;&#xff01;&#xff08;逻辑非&#xff09;。 二…

勒让德符号判断二次剩余-C语言

近日备考学习二次剩余理论&#xff0c;其中了解到勒让德符号这个相比欧拉定理更加方便判断一个正整数在一个模数下是否为二次剩余&#xff1b; 基于勒让德符号理论的学习&#xff0c;本文旨在通过程序来实现基于勒让德符号的二次剩余判断方法&#xff1b; 本文着重点在于运算…

二次剩余入门

昨天训练的时候遇到一道题怎么也不会做&#xff0c;在网上搜了题解之后第一次听说了二次剩余&#xff0c;看了一天各种dalao的博客&#xff0c;在这里总结一下自己所理解的二次剩余及其用法。 1&#xff0c;什么是二次剩余&#xff1f; 2&#xff0c;二次剩余有什么用&#xff…

平方剩余(二次剩余)

平方剩余&#xff1a; 设p是奇素数(即大于2的素数)&#xff0c;如果二次同余式 有解&#xff0c;则a称为模p的平方剩余&#xff0c;否则a称为模p的平方非剩余(二次非剩余)(之所以规定p是大于2的素数&#xff0c;是因为p 2时解上面的二次同余式非常容易。 求出p 5&#xff…

二次剩余--欧拉准则

在 数论中&#xff0c; 二次剩余的 欧拉判别法&#xff08;又称 欧拉准则&#xff09;是用来判定给定的 整数是否是一个 质数的 二次剩余。 目录 1 叙述2 举例 2.1 例子一&#xff1a;对于给定数&#xff0c;寻找其为二次剩余的模数2.2 例子二&#xff1a;对指定的质数p…

二次剩余问题x的求解及代码实现(python)

一、问题引入 二次剩余是数论基本概念之一。它是初等数论中非常重要的结果&#xff0c;不仅可用来判断二次同余式是否有解&#xff0c;还有很多用途。C.F.高斯称它为算术中的宝石&#xff0c;他一人先后给出多个证明。 [1] 研究二次剩余的理论称为二次剩余理论。二次剩余理论…

二次剩余(学习笔记)

就是用来求解 x 2 ≡ n &VeryThinSpace; m o d &VeryThinSpace; p x^2\equiv n \bmod p x2≡nmodp的一个方法 对 p p p进行分类讨论&#xff1a; p 2 p2 p2 &#xff0c;则 x n xn xn p p p为奇素数 勒让德符号&#xff1a; ( a p ) { 1 a 在 模 p 意 义 下 是 二…

(转载)二次剩余(知识总结+板子整理)

思路来源 https://blog.csdn.net/kele52he/article/details/78897187&#xff08;二次剩余&#xff09; https://blog.csdn.net/stevensonson/article/details/85845334&#xff08;二次剩余&#xff09; https://blog.csdn.net/skywalkert/article/details/52591343?locat…