Percolator 事务模型的理解和梳理

Percolator 事务模型

Percolator 协议是一个 2PC 协议,TiDB 、 CockroachDB 等都使用 Percolator 协议来做事务

Percolator 协议把数据附加额外 2 个信息以及版本的概念

如下,一个数据 A ,类似以下方式表达:

版本datalockwrite
54
4hello

这时, A 的值为 hello ( write 字段指示了当前数据是哪个版本)

lock write 字段都是控制字段,其本身无版本概念,以上 table 方式表达,主要用于描述 2PC 时序过程:

  • lock 字段无需版本,用于事务过程。它是多读单写的
  • write 字段无需版本,它实际 2 个信息组合
    • 本次事务,2PC 过程中指向的版本
    • 上次事务完成,指向的版本

Percolator 的 2PC 过程

比如有 A B 数据:

版本datalockwrite
54
4hello
版本datalockwrite
1world1

要把 A B 数据同时设置为大写: HELLO WORLD ,则按以下处理:

第一阶段:

版本datalockwrite
6HELLOmain lock
54
4hello
版本datalockwrite
2WORLDlink A.lock
1world1

任何一方写失败等,做回滚处理

  • 除 main lock 的数据,其他的可并发先删
  • 最后删除 main lock 的数据

也可能是异常超时处理(最后讲)

  • 回滚处理也要考虑超时后的新 lock ,这种是乱序的误删(细节)

第二阶段:

提交阶段:

  • 从 main lock 的 A 开始提交(这步提交成功,即事务已经成功)
  • 其他非 main lock 数据,可并发提交(提交失败也没问题)
版本datalockwrite
76
6HELLO
54
4hello
版本datalockwrite
32
2WORLD
1world1

这里主要解释下,为啥这个阶段,只要 main lock 的提交成功即可

考察以下提交情况, B 数据提交异常了:

版本datalockwrite
76
6HELLO
54
4hello
版本datalockwrite
2WORLDlink A.lock
1world1

在读 B 数据时

  • 发现 lock 还是锁着的,则查看 main lock 的情况
  • 发现 main lock 锁已经无
    • 读操作,读最新版本 2 的数据
    • 写操作(第一阶段), data lock 正常写,附带 write 字段写 2

其他各种情况:正常、各种异常,都以 main lock 的情况,进而读取正确数据。不再一一列举

Percolator 的超时处理

根据上述介绍,可以发现, Percolator 对于异常是一种 lazy (懒)处理

对于超时的情况,仅仅根据版本号,其实是不够的,因为数据可能在多台主机上

比较正规(严谨)的是版本号用全局时间戳代替,即版本号也是时间戳

这样就可以判断锁是否超时了,进而可以判断 main lock 是否超时失效

  • 典型的,第一阶段 main lock 了,然后没法进行第二阶段提交

另外,对于 main lock 字段内容,最好附带所有子锁信息,这样 lazy (懒)处理 main lock 字段时:

  • 先解锁其他 lock
  • 最后解锁自己

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/872718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows图形界面(GUI)-DLG-C/C++ - 静态控件(Static)

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​​​​链接点击跳转博客主页 目录 静态控件(Static) 控件样式 消息处理 实例代码 静态控件(Static) 控件样式 文本(Text):用来显示文本信息。可以是简单的一行文本或者复杂的…

带你轻松玩转DevOps

一、DevOps详细介绍 软件开发最开始是由两个团队组成: 开发计划由**开发团队**从头开始设计和整体系统的构建。需要系统不停的迭代更新。**运维团队**将开发团队的Code进行测试后部署上线。希望系统稳定安全运行。 这两个看似目标不同的团队,需要协同完…

HarmonyOS 开发者联盟高级认证最新题库

本篇文章包含 Next 版本更新后高级认证题库中95%的题目。 答案正确率 50-60%,答案仅做参考。 请在考试前重点看一遍题目,勿要盲目抄答案。 欢迎在评论留言正确答案和未整理的题目。 1、下面关于方舟字节码格式PREF_IMM16_v8_v8描述正确的是 16位前缀操作…

dp or 数学问题

看一下数据量&#xff0c;只有一千&#xff0c;说明这个不是数学问题 #include<bits/stdc.h> using namespace std;#define int long long const int mo 100000007; int n, s, a, b; const int N 1005;// 2 -3 // 1 3 5 2 -1 // 1 -2 -5 -3 -1 int dp[N][N]; int fun…

算法力扣刷题记录 四十九【112. 路径总和】和【113. 路径总和ii】

前言 二叉树篇继续。 记录 四十九【112. 路径总和】和【113. 路径总和ii】 一、【112. 路径总和】题目阅读 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 target…

django-ckeditor富文本编辑器

一.安装django-ckeditor 1.安装 pip install django-ckeditor2.注册应用 INSTALLED_APPS [...ckeditor&#xff0c; ]3.配置model from ckeditor.fields import RichTextFieldcontent RichTextField()4.在项目中manage.py文件下重新执行迁移&#xff0c;生成迁移文件 py…

R语言模型评估网格搜索

### 网格搜索 ### install.packages("gbm") set.seed(1234) library(caret) library(gbm) fitControl <- trainControl(method repeatedcv,number 10,repeats 5) # 设置网格搜索的参数池 gbmGrid <- expand.grid(interaction.depth c(3,5,9),n.trees (1:2…

轨道交通AR交互教学定制公司优选深圳华锐视点

在寻找上海AR开发制作公司作为合作伙伴的过程中&#xff0c;选择一家既技术深厚又具备丰富经验的AR开发企业&#xff0c;成为了众多客户与合作伙伴的共同追求。华锐视点上海AR开发制作公司作为业界的佼佼者&#xff0c;凭借其卓越的公司规模、丰富的行业案例以及顶尖的ar增强现…

Unity基础调色

叭叭叭 最近&#xff08;*这两天&#xff09;因为想做一些Unity的调色问题&#xff0c;尝试原文翻译一下&#xff0c;其实直接原文更好&#xff01;&#xff01; Color Grading 参考了&#xff0c;某大牛的翻译&#xff0c;实在忍不住了&#xff0c;我是不知道为什么能翻译成…

OpenSceneGraph学习笔记

目录 引言第一章&#xff1a;OSG概述一、前言&#xff08;1&#xff09;为什么要学习OSG?&#xff08;2&#xff09;OSG的组成&#xff08;3&#xff09;OSG的智能指针&#xff08;4&#xff09;OSG的安装编译 二、第一个OSG程序&#xff08;1&#xff09;Hello OSG程序&#…

【16】Android基础知识之Window(二) - ViewRootImpl

概述 开始将ViewRootImpl了&#xff0c;总会担心讲不好&#xff0c;讲不好的点有两个&#xff0c;一个是自己理解不够&#xff0c;第二个则是自己表达不够&#xff0c;不能讲明白这里面的东西&#xff0c;不能讲到大家想要了解的东西。不过我会放下心来&#xff0c;慢慢讲&…

嵌入式面试高频八股文面试题及参考答案

目录 什么是嵌入式系统?请简要描述其特点。 请解释实时操作系统(RTOS)的概念。 请列举几种常见的嵌入式操作系统。 请解释中断、异常和竞态条件在嵌入式系统中的作用。 什么是死锁?请举例说明如何避免死锁的发生。 请解释进程和线程的区别。 请解释同步和互斥的概念…

美式键盘 QWERTY 布局的来历

注&#xff1a;机翻&#xff0c;未校对。 The QWERTY Keyboard Is Tech’s Biggest Unsolved Mystery QWERTY 键盘是科技界最大的未解之谜 It’s on your computer keyboard and your smartphone screen: QWERTY, the first six letters of the top row of the standard keybo…

Linux热键,shell含义及权限介绍

君子忧道不忧贫。 —— 孔丘 Linux操作系统的权限 1、几个常用的热键介绍1、1、[Tab]键1、2、[ctrl]-c1、3、[ctrl]-d1、4、[ctrl]-r 2、shell命令以及运行原理3、权限3、1、什么是权限3、2、权限的本质3、3、Linux中的用户3、4、Linux中文件的权限3、4、1、快速掌握修改权限的…

vue引用js html页面 vue引用js动态效果

要引用的index.html页面&#xff1a;&#xff08;资源来自网络&#xff09;在pubilc下建一个static文件放入js文件 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>数字翻转</title><meta con…

Flutter实战小案例

(实战)点不到的按钮 // 主要实现效果类 class _MyHomePageState extends State<MyHomePage> {// 1.定义要使用的变量double btnLeft 0;double btnTop 0;int timeDuration 500;String textButton "点我呀";// 2.获得当前设备屏幕尺⼨&#xff0c;需要impor…

常用的设计模式有哪些

设计模式是软件工程中用来解决常见设计问题的一些通用解决方案。常见的设计模式可以分为三大类&#xff1a;创建型模式、结构型模式和行为型模式。以下是每类设计模式的具体介绍&#xff1a; 创建型模式 这些模式主要用于对象创建&#xff0c;避免程序中的硬编码&#xff0c;…

速部署 HBase 测试环境

快速部署 HBase 测试环境 第一步&#xff1a;下载软件&#xff0c;在HBase官网下载最新版&#xff0c; 找到 bin&#xff0c;点击下载&#xff0c;比如我这里下载的是 hbase-2.5.6-bin.tar.gz 第二步&#xff1a;解压软件 $ tar -zxvf hbase-2.5.6-bin.tar.gz $ cd hbase-2.…

Lora模型训练的参数-学习笔记

任何一个lora都会有三重属性&#xff0c;易调用性、泛化性和还原性&#xff0c;任何一个lora只能完美满足其中的两项&#xff1b; 易调用性&#xff1a;在已调用lora后&#xff0c;还需要多少提示词才能让该lora完全生效&#xff1b; 泛化性&#xff1a;能不能还原lora训练素…

杜甫很 忙

我 我希望大家别再乱搞了