事务管理

关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究[转]

你说的曾经没有我的故事 提交于 2019-12-03 08:23:15
1.XA XA是由X/Open组织提出的分布式事务的规范。XA规范主要定义了(全局)事务管理器(Transaction Manager)和(局部)资源管理器(Resource Manager)之间的接口。XA接口是双向的系统接口,在事务管理器(Transaction Manager)以及一个或多个资源管理器(Resource Manager)之间形成通信桥梁。XA之所以需要引入事务管理器是因为,在分布式系统中,从理论上讲(参考Fischer等的论文),两台机器理论上无法达到一致的状态,需要引入一个单点进行协调。事务管理器控制着全局事务,管理事务生命周期,并协调资源。资源管理器负责控制和管理实际资源(如数据库或JMS队列)。下图说明了事务管理器、资源管理器,与应用程序之间的关系: 图1.XA规范下的分布式事务各类参与者之间的关系 2.JTA 作为java平台上事务规范JTA(Java Transaction API)也定义了对XA事务的支持,实际上,JTA是基于XA架构上建模的,在JTA 中,事务管理器抽象为javax.transaction.TransactionManager接口,并通过底层事务服务(即JTS)实现。像很多其他的java规范一样,JTA仅仅定义了接口,具体的实现则是由供应商(如J2EE厂商)负责提供,目前JTA的实现主要由以下几种: 1

事务、视图、触发器、存储过程、函数、备份

你离开我真会死。 提交于 2019-12-03 07:47:05
目录 事务 基本原理: 使用方法 事务的特性 存储引擎 视图 触发器 存储过程 函数 数据库备份 事务 事务是什么 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言书写的用户程序的执行所引起。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。 通俗来讲,事务指一组操作,要么都执行成功,要么都执行失败。 基本原理: Mysql允许将事务统一进行管理(存储引擎INNODB),将用户所做的操作,暂时保存起来,不直接放到数据表(更新),等到用于确认结果之后再进行操作。 使用方法 start transaction; sql 语句 commit(成功提交)/rollback(回滚,清空操作); 例子: --模拟银行转账 --先准备数据 create table user( id int auto_increment primary key, name varchar(32) not null default '', salary int not null default 0 )charset utf8; insert into user(name,salary) values ('cwz',1000),('张三',2000); -

mysql面试题三

帅比萌擦擦* 提交于 2019-12-03 07:23:44
1、MySQL的复制原理以及流程 (1)、复制基本原理流程 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; (2)、MySQL复制的线程有几个及之间的关联 MySQL 的复制是基于如下 3 个线程的交互( 多线程复制里面应该是 4 类线程): 1. Master 上面的 binlog dump 线程,该线程负责将 master 的 binlog event 传到slave; 2. Slave 上面的 IO 线程,该线程负责接收 Master 传过来的 binlog,并写入 relay log; 3. Slave 上面的 SQL 线程,该线程负责读取 relay log 并执行; 4. 如果是多线程复制,无论是 5.6 库级别的假多线程还是 MariaDB 或者 5.7 的真正的多线程复制, SQL 线程只做 coordinator,只负责把 relay log 中的 binlog读出来然后交给 worker 线程, woker 线程负责具体 binlog event 的执行; (3)

mysql面试题

◇◆丶佛笑我妖孽 提交于 2019-12-03 07:22:57
事务四大特性 原子性:不可分割的操作单元,事务中所有操作,要么全部成功;要么撤回到执行事务之前的状态 一致性:如果在执行事务之前数据库是一致的,那么在执行事务之后数据库也还是一致的; 隔离性:事务操作之间彼此独立和透明互不影响。事务独立运行。这通常使用锁来实现。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。 持久性:事务一旦提交,其结果就是永久的。即便发生系统故障,也能恢复。 MySQL 的事务隔离级别 未提交读(Read Uncommitted):允许脏读,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)。 可重复读(Repeated Read):可重复读。无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响。 串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞 MySQL数据库(InnoDB引擎)默认使用可重复读( Repeatable read) 索引 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B_TREE。B

Spring 事务管理

独自空忆成欢 提交于 2019-12-03 05:27:37
1. 事务基本概述 事务的特性 逻辑上的一组操作-,组成这组事务的各个单元,要么全部成功,要么全部失败 事务的特性(ACID) 原子性:事务不可分割 一致性:事务执行前后数据完整性保证一致 隔离性:一个事务不能干扰其它事务 持久性:事务一旦成功,数据就持久化到数据库 不考虑隔离性(使用锁)引发的问题 事务的并发引发的问题 读问题 脏读:一个事务读取另一个事务未提交的数据 不可重复读:一个事务读取到另一个事务update的数据,导致两次读取的结果不一致 虚读:一个事务读取到另一个事务insert或者delete的数 据,导致两次读取的结果不一致 写问题:丢失更新 不同的锁引发不同类型的事务(事务隔离级别) 不支持事务 read_uncommitted 未提交读, 不能解决任何读问题 read_committed 已提交读 ,不能读取未提交的事务, 能够解决脏读 repeateable_read 可重复读 ,能够保证两次读取的数据是一致的, 能解决脏读和不可重复读 serializable 可序列化 ,事务的最高级别, 可以解决脏读、不可重复读和虚读 2. Spring事务管理API 1. 平台事务管理器 PlateformTransactionManager PlateformTransactionManager 是一个接口 DataSourceTransactionManager

1101 笔记

*爱你&永不变心* 提交于 2019-12-03 05:12:45
目录 1. 事务 为什么要使用 使用 特性 原子性 一致性 隔离性 持久性 2.存储引擎 InnoDB MYIsam 区别 3.视图 定义 增加视图 查看视图 删除视图 4.触发器 语法 增加触发器 查看触发器 删除触发器 5.存储过程 定义 优点 缺点 总结 语法 创建 使用 删除 6.函数 7.数据库备份 语法 1. 事务 mysql主要用于处理操作量大,复杂度高的数据,比如在人员管理系统 你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! 在mysql中只有使用了InnoDB数据库引擎的数据库或表才支持事务 事务处理可以维护数据库的完整性,保证成批的sql语句要么全部执行,要么全部不执行 事务用来管理insert,update,delete语句 为什么要使用 很多时候一个数据操作,不是一个sql语句就完成的,可能有很多个sql语句,如果部分sql执行成功而部分sql执行失败将导致数据错乱 eg: 转账 == 转入转出均成功,才能认为操作成功 使用 开启事务: start transaction sql语句: 提交: commit 回滚: rollback // 影响所有,回滚到初始 start transaction; --开启事物,在这条语句之后的sql将处在同一事务,并不会立即修改数据库

分布式事务的2PC、3PC和TCC

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-03 04:50:30
1、2PC协议   2PC 是二阶段提交(Two-phase Commit)的缩写,顾名思义,这个协议分两阶段完成。第一个阶段是准备阶段,第二个阶段是提交阶段,准备阶段和提交阶段都是由事务管理器(协调者)发起的,协调的对象是资源管理器(参与者)。二阶段提交协议的概念来自 X/Open 组织提出的分布式事务的规范 XA 协议,协议主要定义了(全局)事务管理器和(局部)资源管理器之间的接口。XA 接口是双向的系统接口,在事务管理器以及一个或多个资源管理器之间形成通信桥梁。Java 平台上的事务规范 JTA(Java Transaction API)提供了对 XA 事务的支持,它要求所有需要被分布式事务管理的资源(由不同厂商实现)都必须实现规定接口(XAResource 中的 prepare、commit 和 rollback 等)。   ①准备阶段:协调者向参与者发起指令,参与者评估自己的状态,如果参与者评估指令可以完成,参与者会写 redo 和 undo 日志,然后锁定资源,执行操作,但是并不提交。   ②提交阶段:如果每个参与者明确返回准备成功,也就是预留资源和执行操作成功,协调者向参与者发起提交指令,参与者提交资源变更的事务,释放锁定的资源;如果任何一个参与者明确返回准备失败,也就是预留资源或者执行操作失败,协调者向参与者发起中止指令,参与者取消已经变更的事务,执行 undo

JAVA之JDBC简单事务处理

南楼画角 提交于 2019-12-03 03:26:20
1、什么是Java事务 通常观念认为,事务与数据库有关。 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换成另一种状态。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。 a 、 原子性 即不可分割性,事务要么全部被执行,要么就全部不被执行。如果事务的所有子事务全部提交成功,则所有的数据库操作被提交,数据库状态发生转换;如果有子事务失败,则其他子事务的数据库操作被回滚,即数据库回到事务执行前的状态,不会发生状态转换。 b 、 一致性 事务的执行使得数据库从一种正确状态转换成另一种正确状态。 c、 隔离性 在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,即在事务正确提交之前,它可能的结果不应显示给任何其他事务。 d 、 持久性 事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。    既然事务的概念从数据库而来

深入Java 事务的原理与应用

橙三吉。 提交于 2019-12-03 03:26:05
一、什么是 JAVA 事务 通常的观念认为,事务仅与数据库相关。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示 当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。持 久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。 通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简答的说就是:要么全部执行成功,要么撤销不执行。 既然事务的概念从数据库而来,那Java事务是什么?之间有什么联系? 实际上,一个Java应用系统,如果要操作数据库,则通过JDBC来实现的。增加、修改、删除都是通过相应方法间接来实现的,事务的控制也相应转移到Java程序代码中。因此,数据库操作的事务习惯上就称为Java事务。 二、为什么需要Java事务 事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。举一个简单例子:比如银行转帐业务

MySQL面试题

不想你离开。 提交于 2019-12-03 01:47:04
1、MySQL的复制原理以及流程 (1)、复制基本原理流程 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; (2)、MySQL复制的线程有几个及之间的关联 MySQL 的复制是基于如下 3 个线程的交互( 多线程复制里面应该是 4 类线程): 1. Master 上面的 binlog dump 线程,该线程负责将 master 的 binlog event 传到slave; 2. Slave 上面的 IO 线程,该线程负责接收 Master 传过来的 binlog,并写入 relay log; 3. Slave 上面的 SQL 线程,该线程负责读取 relay log 并执行; 4. 如果是多线程复制,无论是 5.6 库级别的假多线程还是 MariaDB 或者 5.7 的真正的多线程复制, SQL 线程只做 coordinator,只负责把 relay log 中的 binlog读出来然后交给 worker 线程, woker 线程负责具体 binlog event 的执行; (3)