首页 > 其他分享 >分布式事物

分布式事物

时间:2024-06-16 22:23:01浏览次数:9  
标签:语句 回滚 log 事物 undo 100 分布式

一、先了解事物
事物,程序能实现 事物的acid四个特性,说明程序是支持事物的。

1.A(Atomicity),原子性
原子性就是不可拆分的特性,要么全部成功然后提交(commit),要么全部失败然后回滚
(rollback)。若开启事务,在上述场景就不会出现 A 少 100 成功,B 多 100 失败 这种情况。
MySQL执行SQL语句时,会先写入redo log,再来执行SQL语句,当SQL语句执行错误时,会根据redo log来执行回滚操作。

2.C(Consistency),一致性
一致性是指 数据库将数据从一种状态 转变为 另一种状态时必须保持一致性。
MySQL是通过undo log来实现事物的一致性的。当执行SQL语句时,会先写入undo log,再写入redo log。
undo log是一种逻辑日志,会根据之前执行的SQL语句来写入对应的回滚undo log,比如执行 insert语句时,undo log就会记录一个delete语句,执行一个update语句时,就会记录一个相反的update语句来达到回滚的目的。当然,undo log也会产生 redo log日志,因为undo log也是需要进行持久性保护的。

3.I(Isolation),隔离性
隔离性,数据库事物的隔离级别产生三种现象,分别是 脏读、不可重复读和幻读。
脏读就是读取了别的事物未被提交的数据,别的事物后面又回滚了。导致读取时,读取了未提交的数据。即,读未提交。
不可重复读就是读取一条数据两次,第一次和第二次的结果不一致,也就是读取了别的事物已提交的数据。即,读已提交。
幻读就是 读取某一个范围的数据时,其他事物插入了这个范围内的某些数据,导致两次读取的数据也不一致。即,读其他数据。
串行化,解决了所有并发事物问题,但是性能太差,基本不用
导致这些现象的原因是因为MySQL数据库的InnoDB引擎是行锁,只能对某些行进行锁定,而无法锁定某个范围。

4.D(Durability),持久性
一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。

二、事物的经典场景
A给B转账100元,A账户减 -100,B账户增加 +100,两个状态必须一起转变,不能让A账户减了100,而B账户却没有增加。即这两个动作必须捆绑在一起,假如无法B账户无法增加100员,那就必须让A账户减少的100元这个动作也回滚回去。

三、事物的实现原理和琐
1.事物的问题场景
多对一问题,多个操作同时操作一个资源,而状态的变化是非原子性的,有中间状态,会导致哄抢资源的混乱状态。

一对多问题,一个操作需要绑定一系列的资源操作,若任何一个操作失败了,都会导致整个操作都毫无意义。

2.事物的实现原理
redo log,也叫重做日志,是用来实现事物的持久性的。
undo log,也叫回滚日志,用来记录数据被修改前的信息。
当执行SQL发生错误时,会根据数据之前的信息做回滚操作。

3.MySQL琐技术

在MySQL中,读读可以并行,而写读,读写、写写是不能并行的。

4.MVCC多版本并发控制
在InnoDB引擎中,每行记录后面都保存了两个隐藏的列,一个列保存行的创建时间,一个列保存了行的过期时间,存储的并不是系统时间,而是版本号。

MySQL中
事物的原子性是通过undo log来实现的
事物的持久性是通过redo log来实现的
事物的隔离性是通过 琐 + MVCC来实现的
而事物的一致性 是通过原子性、持久性、隔离性来实现的。做到了原子性、持久性、隔离性也就实现了事物的一致性。

标签:语句,回滚,log,事物,undo,100,分布式
From: https://www.cnblogs.com/velloLei/p/18251321

相关文章

  • 确保业务一致性:幂等性设计在分布式系统中的实现策略
    一、什么是幂等性?幂等性(Idempotence)是计算机科学和数学中的一个概念,指的是一个操作或者函数,无论执行多少次,其效果和执行一次都是相同的。换句话说,重复执行这个操作不会对系统状态产生额外的影响。在不同的领域,幂等性有不同的应用和表现:在编程中幂等性通常用于描述方法或......
  • Redis分布式锁详解及电商秒杀功能示例
    Redis分布式锁是一种在分布式系统中,利用Redis的原子操作特性实现的锁机制,用于保护共享资源的并发访问。原理原子性与互斥性Redis分布式锁的核心原理在于利用Redis的某些原子操作(如`SETNX`、`GETSET`、`SET`带特定选项等)来确保锁的获取与释放操作是原子性的,从而保证了锁的......
  • Spark RDD弹性分布式数据集原理与代码实例讲解
    SparkRDD弹性分布式数据集原理与代码实例讲解1.背景介绍在大数据处理领域,ApacheSpark已成为最受欢迎的框架之一。其核心组件之一是弹性分布式数据集(ResilientDistributedDataset,简称RDD)。RDD是Spark的基础抽象,提供了对大规模数据集的容错和并行处理能力。本文将......
  • 【TensorFlow深度学习】使用Horovod加速TensorFlow分布式训练
    使用Horovod加速TensorFlow分布式训练使用Horovod加速TensorFlow分布式训练:并行计算的高效实践Horovod简介安装与环境准备示例代码结构性能优化建议结语使用Horovod加速TensorFlow分布式训练:并行计算的高效实践在深度学习领域,随着模型复杂度的日益增加,单机训练已......
  • hadoop伪分布式安装
    配置ssh要点:要求免密码登陆cd~/.sshssh-keygen-trsacat./id_rsa.pub>>./authorized_keysHadoop伪分布式安装#java1.8!importantJAVA必须安装1.8,不要安装高版本,会不兼容wgethttps://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.gzsudom......
  • 分布式session和本地session区别
    分布式会话(DistributedSession)和本地会话(LocalSession)是两种会话管理方式,它们在存储位置、可扩展性和数据共享方面存在区别。存储位置:本地会话:存储在服务器本地内存中。每个服务器都维护自己的会话信息。分布式会话:会话信息存储在共享的存储介质中,例如Redis、数据库等。多......
  • 【jmeter】ubuntu分布式jmeter报错:java.rmi.ConnectException: Connection refused to
    一、场景   由于高并发测试,服务器资源不够用,所以需要使用jmeter分布式进行测试,但是测试过程中报错:java.rmi.ConnectException:Connectionrefusedtohost:127.0.1.1;  二、问题原因   就是hostname-i如果返回的是127.0.1.1 三、处理方法   修改hostna......
  • 第9篇:Milvus分布式部署与扩展:从架构设计到实践指南
    欢迎来到Milvus分布式部署与扩展的世界!在本文,我将带你深入了解Milvus的分布式架构设计、集群部署与管理。通过这篇博客,你将学会如何高效地部署和管理Milvus集群,并理解背后的原理和思想。准备好了吗?让我们开始这段知识之旅吧!文章目录Milvus的分布式架构设计分布式架构设......
  • 整理好了!2024年最常见 20 道分布式、微服务面试题(十)
    上一篇地址:整理好了!2024年最常见20道分布式、微服务面试题(九)-CSDN博客十九、如何设计一个高可用的分布式系统?设计一个高可用的分布式系统是一个复杂的过程,需要考虑多个方面以确保系统的鲁棒性、可扩展性和容错性。以下是一些关键的设计原则和实践:1. 冗余设计:数据冗余:通......
  • 整理好了!2024年最常见 20 道分布式、微服务面试题(九)
    上一篇地址:整理好了!2024年最常见20道分布式、微服务面试题(八)-CSDN博客十七、什么是断路器模式,它如何解决服务依赖问题?断路器模式(CircuitBreakerPattern)是一种软件设计模式,用于处理分布式系统中的服务依赖问题。当一个服务由于某些原因变得不稳定或不可用时,断路器模式可以......