049、事务设计之分布式基本原理

news2024/11/26 10:32:17

隔离级别

  • iso定义的隔离级别
    可串行化
    可重复读
    读已提交
    读未提交

  • 隔离级别区分的现象
    脏读: 一个事务读取另一个未提交的事务所做更改
    不可重复度 :同一事务中,前后执行相同的语句,出来的记录不一样
    幻读: 同一事务中,相同的查询出现了新的行记录

  • TiDB支持以下事务隔离级别:
    Read Commited 和 Repeatable Read。
    悲观事务模式支持: Read Commited 和 Repeatable Read。

设置会话隔离级别

set @@transaction_isolation='read-committed|repeatable-read'

切换事务模式

以乐观模式启动事务
bigin optimistic
或者
set @@tidb_txn_mode = ‘optimistic’
begin;

在悲观模式下启动事务(默认)
begin pessimistic;
或者
set @@tidb_txn_mode=‘pessimistic’;
begin;

悲观锁的效果
谁先开启事务谁先获得锁
在这里插入图片描述

乐观锁效果

谁先提交谁获得锁
在这里插入图片描述
在这里插入图片描述

事务

事务是一个工作单元。它将数据库从一种一致状态变为另一种一致状态。ACID (ATOMIC CONSISTENT ISOLATION DURABLE)

默认情况,TiDB集群在auto commit 模式下运行。
select @@autocommit;

禁用自动提交
set autocommit=0;
begin;

事务控制语句
start transaction
begin
rollback
set autocommit

隐式commit
start transaction
begin
set autocommit = 1
权限管理操作,例如 grant,revoke
ddl

因果一致性的事务

  • 会在开始的时候 从PD那获取TSO
  • 事务结束的时候 再从PD那获取TSO
  • 具有更低的commit延迟
  • START TRANSACTION WITCH CAUSAL CONSISTENCY ONLY 则只在事务开始时从PD中获取TSO。 减少了一次PD交互的IO,提升了COMMIT的效率,降低它的延迟。

事务在分布式系统的挑战

在这里插入图片描述

改进措施:TCC

在这里插入图片描述
t:try c:commit c:cancel
这个模型主要考虑第二个,如果上海提交成功,但北京没有提交成功,但由于上海的数据已经持久化,所以北京必须要不停的尝试提交成功,一旦成功后这个事务才算结束。
在这里插入图片描述
如果在try阶段就有节点失败,则每个节点都需要回滚,如果某个节点回滚失败,则会不停尝试,直到这个节点回滚成功,则事务才结束

这个最大的问题是:完全由应用程序控制,什么时候try,什么时候cancel 什么时候commt。不是由数据库控制。

改进措施2: SAGA

在这里插入图片描述
长活事务:把大事务拆分成一个个子事务。
除了做成功的小事务方案,还要有每个小事务的回退方案。
在这里插入图片描述
例如发货失败,则SAGA都需要调用回退方案

TiDB采用的方案2PC

在这里插入图片描述
不需要业务结业,由每个分布式数据库的节点控制

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

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

相关文章

ImVoxelNet 论文学习

论文链接:ImVoxelNet: Image to Voxels Projection for Monocular and Multi-View General-Purpose 3D Object Detection 1. 解决了什么问题? RGB 图像成本低、数据源丰富,可以提供场景和物体的视觉信息,但不包括场景几何结构的…

guitar pro2023最新专业的吉他制谱、扒谱软件

guitar pro8是一款打谱编曲软件。我们是会在guitar pro8里面去得到更多自由的打谱设置操作。软件中的改变都很强大好用,是会等等更轻松的编曲制作和设置等等。这里面的所有使用都是很精彩的,是能够去随意的使用更多不同的音符节拍的设置。想要自己进行打…

全志F1C200S嵌入式驱动开发(spi-nand驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 和v3s一样,f1c200s也支持tf卡、spi-nor、spi-nand启动。前面也说过,tf卡由于机械结构的原因,更适合拿来学习,spi-nor和spi-nand比较适合用来进行工业部署和消费娱乐领域。只是s…

使用3DS Max 创建未来派螺栓枪模型

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 步骤 1 创建一个框并将其转换为可编辑多边形(右键单击>转换为:>转换为可编辑多边形),然后使用连接添加一系列边循环,如下图所示。 步骤 2 …

vue往window里存数据

1、存 window._getAction () > {return actions}2、取 const parentAction window._getAction()

使用openvpn docker及frp docker工具构建虚拟专业网络(V-P-N)

使用openvpn docker及frp docker工具构建虚拟专业网络(V-P-N) 借助Docker和OpenVPN技术,您可以在短时间内设置并运行VPN服务器,并保证您的服务器安全。 运行环境 Ubuntu 16.04 TLS Docker version 19.03.8, build afacb8b7f0 OpenVPN Android Client …

Mysql教程(三):Mysql图形化工具DataGrip的基本使用

Mysql教程(三):Mysql图形化工具DataGrip的基本使用 引言:为什么选择DataGrip 智能查询控制台 可以让您在不同的模式中执行查询,并提供本地历史记录,从而记录您的所有活动,避免工作丢失。高效的…

matplotlib 3D

import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np# 创建一个三维坐标轴 fig plt.figure() ax fig.add_subplot(221, projection3d) xx fig.add_subplot(222) yy fig.add_subplot(223) xy fig.add_subplot(224)# 生成示例数据…

(vite/webpack 通用)vue 白屏 Uncaught Syntaxerror: Unexpected token ‘?‘

如果可以实现记得点赞分享,谢谢老铁~ 一、问题的描述 突然收到业务方发来的反馈: 浏览器一片空白,开控制台输出:Uncaught Syntaxerror: Unexpected token ? 这个是语法错误。 二、 如果是用vite来构建&#xff1a…

react项目打包部署到服务器上+宝塔面板的操作

首先进行配置react项目,在webpack.json中 加上homepage:.或‘./’ 首先需要项目打包 npm run build 我们会得到一个build 运行build中的index文件如果是空白的话我们需要更改上面的操作重新打包 .或./ 打包完我们需要进入腾讯云或阿里云的安全组中进行配置端口 …

数字图像学笔记 —— 19.肤色检测

文章目录 什么是肤色检测需要使用OpenCV函数颜色空间转换颜色范围位运算 什么是肤色检测 在没有AI之前,肤色检测是计算机视觉的一项常见任务。其根本思路是划定一个颜色区域,只要属于该颜色区域的像素就认为属于肤色。但是这种方法的精确度不高&#xf…

nodejs调取exe执行文件连接websocket

最近有个需求,就是需要前端调取一个封装成exe文件的websoket服务。 很显然,在浏览器的框架下,根本不可能完成这个事情。以为浏览器的沙盒机制和安全策略,是不允许读取本地文件的。 所以,我们需要nodejs的帮助。 那么…

企业应如何做好软件供应链安全管理?

随着软件供应链攻击日益普遍,Gartner 将其列为2022 年的第二大威胁。Gartner 预测,到 2025 年,全球 45% 的组织将遭受一次或多次软件供应链攻击,是2021年的3倍。这些攻击一旦成功,将给企业带来毁灭性打击,因…

mmdet3d预处理(下)| train pipeline

mmdet3d预处理(下)—— train pipeline 文章目录 mmdet3d预处理(下)—— train pipeline基类 BaseTransformLoadPointsFromFileLoadAnnotations3D标签信息:源码 ObjectSample源码 ObjectNoise输入参数源码RandomFlip3D…

【FFNN负荷预测】基于人工神经网络的空压机负荷预测(Matlab代码实现)

📋📋📋本文目录如下:🎁🎁🎁 目录 💥1 概述 📚2 运行结果 2.1 算例1 2.2 算例2 2.3 算例3 🎉3 参考文献 🌈4 Matlab代码、数据、文章 &#x1f4a…

Ubuntu下搭建Vue开发环境,开发第一个程序并部署

Vue.js目前是前端技术比较火热的开发框架,是一个基于JavaScript的前端开发框架,它可以轻松地构建大型的单页面应用程序。因为项目需要在此记录一下Ubuntu下如何搭建Vue开发环境。 目录 1.nodejs npm安装 2.安装CNMP(非必要) …

Argo CD 入门扫盲使用

目录 一、什么是 argo cd 二、为什么使用 argo cd 三、argo cd 架构图 四、Argo CD 使用 1、安装 Argo CD 2、安装 Argo CD CLI 3、发布 Argo CD 服务 4、获取 Argo CD 密码 5、准备 Git 仓库 6、创建 Argo CD App 7、版本升级 8、版本回滚 一、什么是 argo cd A…

S_Tide使用总结(1)函数及数据

1、使用增强调和分析(EHA)计算实测潮位的调和常数,不考虑交点改正。 % s_tide.m - computes the tidal analysis of the real tidal % time series using Enhanced Harmonic Analysis (EHA) without nodal correcti…

Web 3.0时代,重塑教育与学习方式的可能性

随着科技的快速发展和互联网的普及,教育领域也面临着巨大的机遇和挑战。Web 3.0时代的到来为教育与学习方式带来了全新的可能性。在这个数字化时代,我们可以探索和利用Web 3.0技术,重塑教育的方式,提供更个性化、互动性和灵活性的…

数控机床编程与操作

一、数控机床 的产生 常见数控机床: 数控车床 数控铣床 加工中心 多轴数控机床 柔性制造单元 数控线切割机床 二、数控机床的发展历程 第一代 1952年-1959年 电 子管的硬件数控系统 第二代1959年-1965年 晶体管电路为主的硬件数控系统 第三代1965年开始 小、中规模集成电路…