【TiDB理论知识04】TiKV-分布式事务与MVCC

分布式事务

下面一个事务 里面有两个更新,分别将id=1的Tom改为Jack,将id=2的zhangsan 改为 lisi。在MySQL中这个事务很普通,但是在分布式数据库TiDB 中的会遇到什么问题呢?

begin;
(1,'Tom') --> (1,'Jack')
(2,'zhangsan') --> (2,'lisi')
commit;

比如(1,‘Tom’)  存储在一个TiKV中 ,(2,'zhangsan')存储在另一个TiKV中,

当我完成修改操作(1,‘Tom’) --> (1,‘Jack’) 数据所在的TiKV并提交后,存储(2,'zhangsan')的TiKV不可用了,这样就出现了一个事务中一部分提交修改持久化,一部分未提交的状况,破坏了事务的原子性。

TiDB采用Google的模型解决这个问题 

分布式事务在TiKV的存储

通过一个只修改一行的事务了解事务是如何存储在TiKV中的 。

事务流程

begin;  从PD中获取事务开始的时间戳 start_ts

接下来会把修改的数据读取到内存中,

commit;两阶段提交 ;第一阶段 prewrite阶段,写两个CF, 分别为default CF  和 Lock CF。将内存中修改的数据写入到TiKV节点中 ,将锁信息写入到TiKV节点中。第二阶段 commit阶段,从PD中获取事务结束的时间戳commit_ts。

乐观锁:在提交commit的时候将锁信息写入到TiKV ,其他会话感知不到

悲观锁:将锁信息提前写入到TiKV中,其他会话可以感知到。

目前讨论的按乐观锁讨论

事务是如何存储在TiKV上 

事务中,TiKV节点会有三个CF 分别存储为

default  CF 存储修改的数据,put  <3_100,Frank > 在 (ID_时间戳,修改的新值),只存储修改的新值,因为新数据永远在上面

put  <3_100,Frank > 修改

put  <3_100,Frank > 插入

delete  <3_100,Frank > 删除

Lock CF 存储锁信息 ,只给事务修改的第一行加一把主锁 ,其他修改的行指向主锁。

锁结构<3,(w,pk,3,100,...)>  w代表写锁,pk代表主键,3 代表key? ,100代表开始时间戳

在Write CF中 写入 提交信息 ,commit 之后 两阶段提交的第二阶段,

<3_110,100>  <业务ID_提交时间,事务开始时间>

然后写入 锁信息的清理,不是删除 LOCK CF中数据,而是插入一条数据 例如

<3,(D,pk,3,100,...)>  D 代表删除

write CF 不单单会记录提交信息 ,当这一行的数据长度小于255字节时 ,还能写数据的修改。

分布式事务在TiKV的实现

分布式事务解决的关键点:只给修改的第一行加一把主锁 ,其他行加的是锁的指向 ,指向第主锁 。分布式事务原子性,取决于主锁。

put <1_100,Jack> 业务id_事物开始的时间戳 ,

<1,(W,pk,1,100...)> 只给修改的第一行加一把主锁 ,其他行加的是锁的指向 ,指向第主锁 

put<2_100,Candy>

<2,(w,@1,2,100...)> 存储的是锁的指向,指向的是主锁。

MVCC

如果需要修改很多数据,这些数据在修改期间都不能读写,那严重影响了数据库系统的并发性。

解决上面的方法 :写确实不能再写了,因为这些数据在修改。但是可以读。

其他数据库也有MVCC。

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

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

相关文章

玩转大数据11:数据可视化与交互式分析

1. 引言 数据可视化和交互式分析是大数据领域中的重要方面。随着大数据时代的到来&#xff0c;数据量越来越大&#xff0c;数据类型越来越复杂&#xff0c;传统的数据处理和分析方法已经无法满足我们的需求。数据可视化可以将复杂的数据以简单、直观的方式呈现出来&#xff0c…

JVM 性能调优及监控诊断工具 jps、jstack、jmap、jhat、jstat、hprof 使用详解

目录 一. 前言 二. jps&#xff08;Java Virtual Machine Process Status Tool&#xff09; 三. jstack 四. jmap&#xff08;Memory Map&#xff09;和 jhat&#xff08;Java Heap Analysis Tool&#xff09; 五. jstat&#xff08;JVM统计监测工具&#xff09; 六. hpro…

EMC VNX Unified存储NAS控制台常见问题解答

每次遇到VNX unfied的case就是一坨屎&#xff0c;很多客户根本不理解什么是Unifed storage&#xff0c;EMC的Clariion中端存储系统还分Block和Unified的产品。这个blog就是简单介绍一下VNX Unified存储的管理控制台&#xff0c;英文是 control station, 简称为CS。 顾名思义&a…

苍穹影视V20七彩视界/免授权开源源码/热门影视APP源码带后台+带安装教程

源码简介&#xff1a; 苍穹影视V20七彩视界&#xff0c;它是免授权开源源码&#xff0c;作为影视APP源码&#xff0c;它带后台&#xff0c;也带安装教程。 苍穹影视 V20 全新后台七彩视界免受权开源源码此版本为天穹公益版开源无解密安装教程 全新后台很是都雅&#xff0c;源码…

pair的用法,详解

1.pair是什么 pair名为二元组&#xff0c;顾名思义&#xff0c;就是储存二元组的。 2.pair的初始化 pair<第一个值类型, 第二个值类型> pr 第一个值类型&#xff1a;要储存的第一个值的数据类型第二个值类型&#xff1a;要储存的第二个值的数据类型pair<int, int&g…

伦茨科技宣布ST17H6x芯片已通过Apple Find My「查找」认证

深圳市伦茨科技有限公司&#xff08;以下简称“伦茨科技”&#xff09;发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家&#xff0c;该平台提供可通过Apple Find My认证的Apple查找&#xff08;Find My&#xff09;功能集成解决方案。…

年底不同外贸客户催单模板分享

最近工厂又爆单了&#xff0c;有些小的订单都没时间管了。时间过得很快&#xff0c;眼看就剩一个多月就春节&#xff0c;大家可以抓住这段时间催一下还有机会成单的客户&#xff0c;好为来年做准备&#xff01; 1.老客户模板 Dear xxx, Greetings. Do you have any new inqu…

FIR IP 学习记录

工具&#xff1a; matlab filterdesigner 工具箱 vivado FIR IP核 实现&#xff1a; 1.matlab设计与测试 先用matlab设计目标滤波器&#xff0c;得到滤波器的抽头系数。 如图&#xff0c;根据需求选择 低通/高通/带通/带阻。 由于vivado用的是FIR IP核&#xff0c;所以设…

什么是HTML?

✨前言✨ 本文主要介绍什么是HTML以及W3C &#x1f352;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f352;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 文章目录 什么是HTMLHTML发展史HTML的特点什么…

Linux权限理解(1)

目录 1.shell命令以及运行原理 2.Linux权限的概念 Linux权限管理 01.文件访问者的分类&#xff08;人&#xff09; 02.文件类型和访问权限&#xff08;事物属性&#xff09; a) 文件类型 b)基本权限 03.文件权限值的表示方法 04.文件访问权限的相关设置方法 a)chmod …

FPGA设计时序分析概念之Timing Arc

目录 1.1 Timing Arc概念 1.2 Timing Arcs的类型 1.3 Timing Sense(时序感知) 1.4 参考资料 1.1 Timing Arc概念 在时序工具对设计进行时序分析时&#xff0c;经常会看到一个概念Timing Arch(时序弧)。Timing Arc是一个信号一个单元Cell的输入引脚Pin到该单元输出引脚Outpu…

Redis主从架构中从节点的master_link_status:down

项目场景&#xff1a; 在搭建Redis的主从架构时&#xff0c;查看Redis的从节点状态时发现其连接的主节点的状态为down&#xff0c;并且查看主节点的状态时发现连接的从节点数量为0。 问题描述 原因分析&#xff1a; 可能在主节点中配置了密码&#xff0c;即requirepass。 解决…

算法:常见的链表算法

文章目录 链表算法两数相加两两交换链表中的节点重排链表合并K个升序链表K个一组翻转链表 总结 本篇总结常见的链表算法题和看他人题解所得到的一些收获 链表算法 关于链表的算法&#xff1a; 画图&#xff1a;画图可以解决绝大部分的数据结构的问题&#xff0c;任何的算法题…

视觉学习笔记12——百度飞浆框架的PaddleOCR 安装、标注、训练以及测试

系列文章目录 虚拟环境部署 参考博客1 参考博客2 参考博客3 参考博客4 文章目录 系列文章目录一、简单介绍1.OCR介绍2.PaddleOCR介绍 二、安装1.anaconda基础环境1&#xff09;anaconda的基本操作2&#xff09;搭建飞浆的基础环境 2.安装paddlepaddle-gpu版本1&#xff09;安装…

语言模型GPT与HuggingFace应用

受到计算机视觉领域采用ImageNet对模型进行一次预训练&#xff0c;使得模型可以通过海量图像充分学习如何提取特征&#xff0c;然后再根据任务目标进行模型微调的范式影响&#xff0c;自然语言处理领域基于预训练语言模型的方法也逐渐成为主流。以ELMo为代表的动态词向量模型开…

在线教育小程序正在成为教育行业的新生力量

教育数字化转型是目前教育领域的一个热门话题&#xff0c;那么到底什么是教育数字化转型&#xff1f;如何做好教育数字化转型&#xff1f; 教育数字化转型是利用信息技术和数字工具改变和优化教育的过程。主要特征包括技术整合、在线学习、个性化学习、大数据分析、云计算、虚拟…

【C++学习手札】基于红黑树封装模拟实现map和set

​ &#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 &#x1f49c;本文前置知识&#xff1a; 红黑树 ♈️今日夜电波&#xff1a;漂流—菅原纱由理 2:55━━━━━━️&#x1f49f;──────── 4:29 …

Appium获取toast方法封装

一、前置说明 toast消失的很快&#xff0c;并且通过uiautomatorviewer也不能获取到它的定位信息&#xff0c;如下图&#xff1a; 二、操作步骤 toast的class name值为android.widget.Toast&#xff0c;虽然toast消失的很快&#xff0c;但是它终究是在Dom结构中出现过&…

【计算机网络】HTTP请求

目录 前言 HTTP请求报文格式 一. 请求行 HTTP请求方法 GET和POST的区别 URL 二. 请求头 常见的Header 常见的额请求体数据类型 三. 请求体 结束语 前言 HTTP是应用层的一个协议。实际我们访问一个网页&#xff0c;都会像该网页的服务器发送HTTP请求&#xff0c;服务…

使用Java将图片添加到Excel的几种方式

1、超链接 使用POI&#xff0c;依赖如下 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>Java代码如下,运行该程序它会在桌面创建ImageLinks.xlsx文件。 …