啥是事务?
有一组操作组成的可靠的独立的工作单元。
ACID是咋回事?
A(原子性)事务的原子操作单元,对数据的修改,要么全部执行,要么全部不执行;
C(一致性)在事务开始和完成时,数据必须保持一致状态,相关的数据规则必须应用于事务的修改,以保证数据的完整性,事务结束时,所有的内部数据结构必须正确;
I(隔离性)保证事务不受外部并发操作的独立环境执行;
D(持久性)事务完成之后,对于数据的修改是永久的,即使系统出现故障也能够保持;
BASE是咋回事?
BA: Basic Availability 基本业务可用性;
S: Soft state 柔性状态;
E: Eventual consistency 最终一致性;
CAP是咋回事?
C(一致性)一致性是指数据的原子性,在经典的数据库中通过事务来保障,事务完成时,无论成功或回滚,数据都会处于一致的状态,在分布式环境下,一致性是指多个节点数据是否一致;
A(可用性)服务一直保持可用的状态,当用户发出一个请求,服务能在一定的时间内返回结果;
P(分区容忍性)在分布式应用中,可能因为一些分布式的原因导致系统无法运转,好的分区容忍性,使应用虽然是一个分布式系统,但是好像一个可以正常运转的整体;
对于任何共享系统,最多只能拥有其中两个特性。任两者的组合都有适用的场景,真实系统应该是ACID和BASE的混合体。
二阶段提交咋回事?
1、第一阶段(提交请求阶段)
协调者节点向所有参与者节点询问是否可以执行提交操作,并开始等待各参与者节点的响应。
参与者节点执行询问发起为止的所有事务操作,并将Undo信息和Redo信息写入日志。
各参与者节点响应协调者节点发起的询问。如果参与者节点的事务操作实际执行成功,则它返回一个"同意"消息;如果参与者节点的事务操作实际执行失败,则它返回一个"中止"消息。有时候,第一阶段也被称作投票阶段,即各参与者投票是否要继续接下来的提交操作。
2、第二阶段(提交执行阶段)
2.1成功
当协调者节点从所有参与者节点获得的相应消息都为"同意"时:
协调者节点向所有参与者节点发出"正式提交"的请求。
参与者节点正式完成操作,并释放在整个事务期间内占用的资源。
参与者节点向协调者节点发送"完了"消息。
协调者节点受到所有参与者节点反馈的"完了"消息后,完成事务。
2.2失败
如果任一参与者节点在第一阶段返回的响应消息为"中止",或者 协调者节点在第一阶段的询问超时之前无法获取所有参与者节点的响应消息时:
协调者节点向所有参与者节点发出"回滚操作"的请求。
参与者节点利用之前写入的Undo信息执行回滚,并释放在整个事务期间内占用的资源。
参与者节点向协调者节点发送"回滚完了"消息。
协调者节点受到所有参与者节点反馈的"回滚完了"消息后,取消事务。
有时候,第二阶段也被称作完成阶段,因为无论结果怎样,协调者都必须在此阶段结束当前事务。
3、二阶段提交的缺点
二阶段提交算法的最大缺点就在于 它的执行过程中间,节点都处于阻塞状态。即节点之间在等待对方的相应消息时,它将什么也做不了。特别是,当一个节点在已经占有了某项资源的情况下,为了等待其他节点的响应消息而陷入阻塞状态时,当第三个节点尝试访问该节点占有的资源时,这个节点也将连带陷入阻塞状态。
另外,协调者节点指示参与者节点进行提交等操作时,如有参与者节点出现了崩溃等情况而导致协调者始终无法获取所有参与者的响应信息,这是协调者将只能依赖协调者自身的超时机制来生效。但往往超时机制生效时,协调者都会指示参与者进行回滚操作。这样的策略显得比较保守。
分布式事务的XA协议?
XA协议是由X/Open组织提出的分布式事务处理的规范,主要定义了事务管理器和局部资源管理器之间的界面,目前Oracle、db2等各大数据库厂商都提供对XA的支持,XA协议采用二阶段提交来管理分布式事务。
本地事务是咋回事?
事务有资源管理器(例如DBMS)本地管理。
优点是支持ACID特性,高效,可靠,应用系统编程简单。
缺点是不支持分布式环境,隔离的最小单位有资源管理器决定,例如数据库的一行记录。
spring的事务模板(模板方法回调)
最佳实践
1、基于消息的最终一致性
消息系统提供两个方面的支持,一个是发送消息提供事务支持,另外一个就是发送成功的消息保证投递成功,这样就可以借助消息系统来实现系统的最终一致性
2、系统幂等操作
重复调用多次产生的业务结果与调用一次产生的业务结果相同。
实现方式一个是业务操作本身实现幂等,二是系统缓存请求与处理结果,检测到重复请求之后,自动返回之前的结果。
3、事务补偿机制
相关推荐
在使用LoadRunner进行性能测试时,理解和应用事务(Transaction)、集合点(Rendezvous)和思考时间(Pause Time)这几个概念至关重要。 首先,事务是LoadRunner中用于度量系统性能的一个非常重要的概念。在实际测试过程...
事务传播特性和隔离级别是Java应用程序中事务管理的关键概念。通过合理配置这些特性,可以有效地管理和控制事务行为,确保数据的一致性和完整性。在实际应用中,开发者需要根据具体的需求选择合适的传播行为和隔离...
1. **事务的基本概念** 事务是一组数据库操作,这些操作被视为一个逻辑工作单元,必须全部成功或全部失败。如果其中任何一步失败,整个事务将被回滚,以保持数据库的一致性。 2. **ACID属性** - 原子性...
Spring 的事务管理涉及到几个核心接口,其中最重要的是 `PlatformTransactionManager` 接口。该接口提供了事务管理的基本操作,如开始事务、提交事务和回滚事务。Spring 为不同的持久化层提供了相应的事务管理器实现...
日志的生命周期涉及以下几个关键阶段: 1. **写入日志**:每当事务开始并修改数据库时,相关的日志记录就会被写入事务日志。 2. **日志增长**:随着更多事务的执行,事务日志会逐渐增长。如果日志文件达到最大容量...
事务并发执行可能导致以下几种问题: 1. **丢失更新**: - 描述:两个或多个事务对同一数据进行修改时,导致其中一些事务的更新被其他事务覆盖。 - 示例:在两个并发的事务中,一个事务先修改了数据,但还未提交...
本文将深入探讨Spring中的几种事务配置方式,帮助开发者更好地理解和运用。 1. **编程式事务管理** 编程式事务管理是在代码中显式调用事务API来控制事务的开始、提交、回滚等操作。这种方式直接在业务逻辑代码中...
在Java中,事务处理有以下几种类型: **JDBC事务**:这是最基本的事务管理方式,通过`Connection`对象的`setAutoCommit()`来开启或关闭自动提交,`commit()`和`rollback()`用于提交或回滚事务。JDBC事务局限于单个...
事务处理的重要性体现在以下几个方面: 数据一致性:事务处理通过确保一系列数据库操作的原子性、一致性、隔离性和持久性,保证了数据的一致性。 可靠性:通过事务处理,数据库系统能够保证在发生故障或异常情况...
在Oracle数据库中,一个事务可以从任何可以执行的SQL语句开始,但会在以下几种情况下结束: 1. 用户明确提交事务。 2. 用户回滚事务。 3. 执行DDL(Data Definition Language)或DCL(Data Control Language)语句...
在实际应用中,Spring事务管理的配置和使用需要注意以下几个方面: - 事务传播行为:定义了事务在遇到已有事务时的行为模式,例如是否加入当前事务、新建一个事务等。 - 事务隔离级别:定义了事务的隔离水平,例如...
同时,我们还将提及与事务管理相关的几个库,包括c3p0、dbcp2和pool2,并讨论它们在连接池中的角色。 1. **数据库事务**: - 事务是数据库操作的基本单位,它包含一系列的数据库操作,这些操作要么全部执行,要么...
#### 二、事务的基础概念 事务(Transaction)是指作为单个逻辑工作单元执行的一系列操作。如果这些操作中的一个失败,则整个事务都被视为失败,并且所有更改都将被撤销。事务通常具有以下四个属性,通常称为ACID...
本篇将详细讲解Spring中的事务管理配置,帮助初学者理解并掌握这一重要概念。 1. 声明式事务管理 声明式事务管理是Spring中最常用的事务管理方式,它通过AOP(面向切面编程)来实现。在配置文件中,我们可以通过`...
以下是对这两个概念的基本知识和基础概念的讨论。 查询处理是DBMS的核心功能之一,它涉及将用户的查询请求转换为数据库中的实际数据检索操作。这个过程通常分为几个阶段: 解析阶段:DBMS首先解析用户的查询语句,...
在不考虑事务的隔离性时,可能会发生几个问题: 1. 脏读:脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。例如用户A向用户B转账100元,对应SQL命令如下 update account set money=money+100 where...
事务处理的生命周期可以分为以下几个阶段: * 事务处理开始:数据库会自动开启一个事务。 * 事务处理执行:执行 DML、DDL、DCL 语句。 * 事务处理结束:事务处理可以通过 COMMIT 或 ROLLBACK 语句来结束。 4. 事务...
例如,可以使用@Transactional注解在方法级别声明一个事务,该方法内的所有数据库操作将在同一个事务中执行。 文件名如"spring-jdbc-tran1"、"spring-jdbc-tran2"和"spring-jdbc-tran3"暗示了实验可能涉及Spring与...