【MySQL】详解MySQL数据库事务

news2024/9/27 7:17:27

MySQL数据库事务

  • 数据库事务特性
  • 事务的并发问题
  • 事务的隔离级别
  • 分布式事务解决方案
    • 1.XA 协议
    • 2.TCC
    • 3.消息一致性方案
    • 4.阿里云中的全局事务服务 GTS

数据库事务特性

数据库事务具备ACID四大特性:
在这里插入图片描述

  • 原子性:是指事务操作时具备原子操作的,就是说整个过程要么全部成功,要么全部失败回滚。
  • 一致性:是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处以一致性状态。比如在做多表操作时,多个表要么都是事务后新的值,要么都是事务前的旧值。
  • 隔离性:是指多个用户并发访问数据数据库时,数据库为每个用户执行的事务,都不能被其他的事务所干扰,事务之间相互隔离。
  • 持久性:是指一个事务一点执行操作成功,就是对数据库里面的数据操作是永久性的。

事务的并发问题

数据库在并发访问的时候会出现哪些问题?有思考过吗?
在这里插入图片描述

  • 脏读:是指一个事务在处理过程中读取了其他未提交的事务里的数据。比如:小张转帐给 小王 500元人民币,小王 余额增加后但事务还没有提交完成,此时如果另外的请求中获取的是 小王增加后的余额,这就发生了脏读。如果这个过程中事务失败回滚时,小王的余额就不应该增加的。
  • 不可重复读:是指对数据库中的某个数据,多次读的数据结果不一致。这是因为在这个过程中有其他事务在修改并提交。
  • 幻读:是指两次查询结果,第二次查询返回结果跟第一次查询返回结果不同,幻读记录的是增加或删除的,导致两次相同条件获取的结果记录数不同。而不可重复读是对同一条记录,两次读取的值不同。

事务的隔离级别

事务的隔离级别有四种:
在这里插入图片描述

第一个隔离级别是读未提交的,最低的隔离级别,这个隔离级别就是可以读取到其他事务未提交的内容,会发生脏读,不可重复读,幻读等问题。

第二个隔离界别是读已提交的,就是只能读取到其他事务已经提交的数据。这个隔离级别可以解决脏读问题。

第三个隔离级别是可重复读,可以保证整个事务过程中,对同数据的多次读取结果是相同的。MySQL 默认的隔离级别就是可重复读。 这个级别可以解决脏读和不可重复读的问题。

第四个隔离级别是串行化,最高的隔离级别,所有事务操作都依次顺序执行。这个级别会导致并发度下降,性能最差。可以解决所有的并发问题。

分布式事务解决方案

在这里插入图片描述

1.XA 协议

XA协议是保证强一致性的刚性事务。实现方式有两段式提交和三段式提交。
在这里插入图片描述

两段式提交需要有一个事务协调者来保证所有的事务参与者都完成了第一阶段的准备工作。如果协调者收到所有参与者都准备好的消息,就会通知所有的事务执行第二阶段提交。一般场景下两段式提交已经能够很好得解决分布式事务了,然而两阶段在即使只有一个进程发生故障时,也会导致整个系统存在较长时间的阻塞。三段式提交通过增加 pre-commit 阶段来减少前面提到的系统阻塞的时间。三段式提交很少在实际中使用,了解一下就可以了。

2.TCC

TCC是满足最终一致性的柔性事务方案。TCC 采用补偿机制,核心思想是对每个操作,都要注册对应的确认和补偿操作。
在这里插入图片描述

它分为三个阶段:

  • Try 阶段主要对业务系统进行检测及资源预留;
  • Confirm 阶段对业务系统做确认提交;
  • Cancel 阶段是在业务执行错误,执行回滚,释放预留的资源。

3.消息一致性方案

基本思路是将本地操作和发送消息放在一个事务中,保证本地操作和消息发送要么都成功要么都失败。下游应用订阅消息,收到消息后执行对应操作。
在这里插入图片描述

4.阿里云中的全局事务服务 GTS

阿里云中的全局事务服务 GTS,对应的开源版本是 Fescar。

全局事务服务(Global Transaction Service ,简称GTS)用于实现分布式环境下特别是微服务架构下的高性能事务一致性,可与 RDS、MySQL、PostgreSQL 等数据源,Spring Cloud、Dubbo、EDAS 及其他 RPC 框架,消息队列等中间件产品配合使用,实现分布式数据库事务、多库事务、消息事务、服务链路级事务及各种组合

Fescar 基于两段式提交进行改良,剥离了分布式事务方案对数据库在协议支持上的要求。使用 Fescar 的前提是分支事务中涉及的资源,必须是支持 ACID 事务的关系型数据库。分支的提交和回滚机制,都依赖于本地事务来保障。 Fescar 的实现目前还存在一些局限,比如事务隔离级别最高支持到读已提交级别。
在这里插入图片描述
GTS包括客户端(GTS Client)、资源管理器(GTS RM)和事务协调器(GTS Server)三个部分。

  • GTS Client主要用来界定事务边界,完成事务的发起与结束。
  • GTS RM完成事务分支的创建、提交、回滚等操作。
  • GTS Server主要负责分布式事务的整体推进,事务生命周期的管理。
    GTS和微服务集成的结构图如上图所示,GTS Client需要和业务应用集成部署,RM与微服务集成部署。
    GTS是一款分布式事务中间件(具体地址),由阿里巴巴中间件部门研发,可以为微服务架构中的分布式事务提供一站式解决方案。更多GTS资料请访问创始人微博GTS创始人微博地址。

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

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

相关文章

分布式系统架构

分布式系统定义 分布式系统:硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。 为什么需要分布式系统 提升系统吞吐量:集群协同解决单机性能瓶颈提高系统可用性 :冗余部署,各…

OSS阿里云存储

一、开通“对象存储OSS”服务 2、进入管理控制台 二、控制台使用 点击Buket列名,Buket可以看作是一系列的虚拟内存空间它是一个独立的小个体 创建mystudent 创建成功后就有下面的样子了 ,创建的时候读写权限,我们选择公共读&#xff0c…

matlab中sign函数的使用(提取符号)

仅用于记录自己学习过程中遇到的函数 matlab中sign函数的使用,提取符号 一、语法 Y sign(x) 返回与 x 大小相同的数组 Y,其中 Y 的每个元素是: 1,前提是 x 的对应元素大于 0。 0,前提是 x 的对应元素等于 0。 -1&am…

CAP定理与分布式事务理论

文章目录一、CAP定理1.1 一致性1.2 可用性1.3 分区容错1.4 定理的矛盾点二、分布式事务理论2.1 BASE理论2.2 解决分布式事务思路一、CAP定理 分布式系统有三个指标。 Consistency(一致性)Availability(可用性)Partition toleranc…

GBASE斩获2022科技赋能金融业数字化转型突出贡献奖

12月27日,由中国人民银行主管的《金融电子化》杂志社主办的“2022中国金融科技年会暨第十三届金融科技应用创新奖颁奖典礼”成功举办,在本次活动上,GBASE南大通用“多模多态分布式数据库GBase 8c”,荣获“2022科技赋能金融业数字化…

PyCharm高级配置

pycharm设置内存大小步骤1,Help -> FindAction -> (输入 “VM”) -> (点击)“Edit Custom VM options”2,Pycharm会在编辑器中打开适当的vmoptions文件(pycharm.vmoptions或pycharm64.options)。3,将**-Xms**…

CCIE重认证350-401

拖图题 QoS traffic policing: causes TCP retransmissions when traffic is dropped导致TCP重传时流量下降 introduces no delay and jitter引入无延迟和抖动 drops excessive traffic减少过多的流量 traffic shaping: buffers excessive traffic缓冲过多的流量 introduce…

Sensor+ISP专栏-Demosaic

SensorISP专栏-Demosaic 1.what is raw raw图指的是从cmos sensor直接输出的原始图像,它本身没有颜色分量。在CMOS Sensor中使用彩色滤镜阵列(color filter array,CFA) 的方式捕获彩色图像,每个感光像素的上面覆盖一个语物理像素相同面积大…

OpenStack-Mitaka版本部署

1.环境准备 centos7.2相关文件 镜像:https://mirrors.aliyun.com/centos-vault/7.2.1511/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso?spma2c6h.25603864.0.0.5c565932JYniuU openstack-mitaka rpm包:https://mirrors.aliyun.com/centos-vault/7.2.15…

hadoop 3.x 案例7: hadoop大数据平台日志

文章目录一. Hadoop日志1.1 namenode日志1.2 datanode日志1.3 secondarynamenode日志1.4 yarn日志1.4.1 resourcemanger日志1.4.2 nodemanager日志1.5 historyServer日志二. Hive日志三. Spark日志四. Flink日志一. Hadoop日志 cd $HADOOP_HOME/logs日志分类: namenode日志 d…

【ROS】—— ROS通信机制进阶(七)

文章目录前言1. 常用API(C)1.1 初始化1.2 话题与服务相关对象1.3 回旋函数(重点)1.4 时间1.4.1 获取当前时刻and指定时刻1.4.2 持续时间1.4.3 时间运算1.4.4 设置运行频率1.4.5 定时器1.5 其他函数2. 常用API(python)2.1 初始化2.2 话题与服务相关对象2.3 回旋函数2.4 时间2.4.…

Bandit算法学习[网站优化]02——epsilon-Greedy 算法

Bandit算法学习[网站优化]02——epsilon-Greedy 算法 参考资料 White J. Bandit algorithms for website optimization[M]. " O’Reilly Media, Inc.", 2013.https://github.com/johnmyleswhite/BanditsBook 实验环境:jupyter python 3.7 项目地址&am…

twrp Xposed zip包脚本定制全解析

声明:本文不对印刷机导致的任何结果承担责任,请谨慎尝试 想要研究一个新技术,最好的办法就是read the fuck source code,读源码时最直接高效的方式,当然,这很难啃,所以通常也可以配合网上一些教程来理解,但是通常,值钱的技术一般人是不会在网上发布的,因为技术的价值就…

大厂必备Stream流、方法引用的使用

大厂必备Stream流、方法引用的使用 1 Stream的基本使用 1.1 思想 当需要对多个元素进行操作(特别是多步操作)的时候,考虑到性能及便利性,我们应该首先拼好一个“模型”步骤方案,然后再按照方案去执行它。【流水线】 …

spring源码-容器refresh

spring源码 铺垫 1.xml信息封装 我们可以预测的大致顺序 xml里的bean 封装成对象定义信息更容易进一步的 创建 注入 BeanDefinition的属性:可以看出是对xml里信息的封装 public interface BeanDefinitionReader 定义规范2.使用反射 为什么不用new创建对象&#x…

NXP EMDA学习(1):TCD寄存器详解

eDMA(Enhanced DMA)即增强型DMA,它是NXP芯片中独有的功能,其最重要的一个特性也是eDMA的核心就是TCD(Transfer Control Descriptor)即传输控制描述符。所以,我们就来看一下这个结构体中各个字段的内容的含义,对这些字段有一个基础…

位置检测有哪些传感器可以用?(带磁编码器AS5600代码)

常见的有三种 编码器、霍尔传感器、磁传感器。 编码器一般指AB相正交脉冲的增量器件,有的还会有一个Z相信号,用来指示零位; 霍尔传感器一般是指ABC三个成120度角度间隔排列的器件,这种传感器一般集成在电机内部,电机…

[Amazon]人工智能入门学习笔记---AI-机器学习-深度学习

⬜⬜⬜ 🐰🟧🟨🟩🟦🟪 (*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu &a…

基于模型预测控制的波浪能转换器(WEC)研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Flink简介

Flink 系列教程传送门 第一章 Flink 简介 第二章 Flink 环境部署 第三章 Flink DataStream API 第四章 Flink 窗口和水位线 第五章 Flink Table API&SQL 第六章 新闻热搜实时分析系统 前言 流计算产品实时性有两个非常重要的实时性设计因素,一个是待计算…