数据库事务

3.1.4 Spring的事务管理

こ雲淡風輕ζ 提交于 2020-02-21 08:03:09
四、 Spring 的事务管理 事务原本是数据库中的概念, 在 Dao层。 但一般情况下, 需要将事务提升到 业务层, 即 Service层。 这样做是为了 能够使用事务的特性来管理具体的业务。 1. Spring事务管理API介绍 (1) 事务管理器是 PlatformTransactionManager接口 对象。 其主要 用于完成事务的提交、 回滚, 及获取事务的状态信息。 PlatformTransactionManager接口 常用的两个实现类 DataSourceTransactionManager: 使用JDBC或MyBatis 进行持久化数据时使用。 HibernateTransactionManager: 使用Hibernate进行持久化数据时使用。 (2) Spring的回滚方式 Spring事务的默认回滚方式是: 发生运行时异常时回滚, 发生受查异常时提交。 (3) 事务定义接口 事务定义接口 TransactionDefinition中定义了 事务描述 相关的三类常量: 事务隔离级别、 事务传播行为、 事务默认超时时限, 及对它们的 操作。 所谓事务传播行为是指, 处于不同事务中的方法在相互调用时, 执行期间事 务的维护情况。 如, A事务中的方法doSome() 调用B事务中的方法doOther() , 在调 用执行期间事务的维护情况, 就称为事务传播行为

如何选择分布式事务形态(TCC,SAGA,2PC,补偿,基于消息最终一致性等等)

岁酱吖の 提交于 2020-02-21 04:19:10
转载自: 如何选择分布式事务形态(TCC,SAGA,2PC,补偿,基于消息最终一致性等等) 各种形态的分布式事务 分布式事务有多种主流形态,包括: 基于消息实现的分布式事务 基于补偿实现的分布式事务(gts/fescar自动补偿的形式) 基于TCC实现的分布式事务 基于SAGA实现的分布式事务 基于2PC实现的分布式事务 之所以有这么多形态,是 因为任何事情都没有银弹,只有最合适当前场景的解决方案 。 这些形态的原理已经在很多文章中进行了剖析,用“分布式事务”关键字就能搜到对应的文章,本文不再赘述这些形态的原理,并将重点放在如何根据业务选择对应的分布式事务形态上。 何时选择单机事务? 这个相信大家都很清楚,在条件允许的情况下,我们应该尽可能地使用单机事务,因为单机事务里,无需额外协调其他数据源,减少了网络交互时间消耗以及协调时所需的存储IO消耗,在修改等量业务数据的情况下,单机事务将会有更高的性能。 但单机数据库由于 业务逻辑解耦等因素进行了数据库垂直拆分、或者由于单机数据库性能压力等因素进行了数据库水平拆分之后,数据分布于多个数据库,这时若需要对多个数据库的数据进行协调变更,则需要引入分布式事务。 分布式事务的模式有很多种,那究竟要怎么选择适合业务的模式呢?以下我们将从使用场景、性能、开发成本这几个方面进行分析。 何时选择基于消息实现的事务?

如何选择分布式事务形态(TCC,SAGA,2PC,基于消息最终一致性等等)

吃可爱长大的小学妹 提交于 2020-02-21 04:18:21
各种形态的分布式事务 分布式事务有多种主流形态,包括: 基于消息实现的分布式事务 基于补偿实现的分布式事务 基于TCC实现的分布式事务 基于SAGA实现的分布式事务 基于2PC实现的分布式事务 这些形态的原理已经在很多文章中进行了剖析,用“分布式事务”关键字就能搜到对应的文章,本文不再赘述这些形态的原理,并将重点放在如何根据业务选择对应的分布式事务形态上。 何时选择单机事务? 这个相信大家都很清楚,在条件允许的情况下,我们应该尽可能地使用单机事务,因为单机事务里,无需额外协调其他数据源,减少了网络交互时间消耗以及协调时所需的存储IO消耗,在修改等量业务数据的情况下,单机事务将会有更高的性能。 但单机数据库由于 业务逻辑解耦等因素进行了数据库垂直拆分、或者由于单机数据库性能压力等因素进行了数据库水平拆分之后,数据分布于多个数据库,这时若需要对多个数据库的数据进行协调变更,则需要引入分布式事务。 分布式事务的模式有很多种,那究竟要怎么选择适合业务的模式呢?以下我们将从使用场景、性能、开发成本这几个方面进行分析。 何时选择基于消息实现的事务? 基于消息实现的事务适用于分布式事务的提交或回滚只取决于事务发起方的业务需求,其他数据源的数据变更跟随发起方进行的业务场景。 举个例子,假设存在业务规则:某笔订单成功后,为用户加一定的积分。 在这条规则里,管理订单数据源的服务为事务发起方

[系统软件工程师面试] 6. mysql

别等时光非礼了梦想. 提交于 2020-02-21 02:54:50
1. Mysql内核 MyISAM和InnoDB内核选型 1. InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一; 2. InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败; 3. InnoDB 是聚集索引,MyISAM 是非聚集索引。聚簇索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。 4. InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快; 5. InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。这也是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一; 如何选择: 1. 是否要支持事务

SQLServer数据事务日志操作

邮差的信 提交于 2020-02-21 01:31:37
日志备份 (log backup) 包括以前日志备份中未备份的所有日志记录的事务日志备份。 (完整恢复模式) 使用SSMS数据库管理工具备份事务日志 1、连接数据库,选择数据库-》右键点击-》选择任务-》选择备份。 2、在备份数据库弹出框中-》备份类型选择事务日志备份-》删除系统自动生成的文件名-》点击添加。 3、在选择备份目标弹出框中选择备份路径。 4、在定位数据库文件弹出框中-》选择备份文件路径-》输入文件名(注意添加后缀名)-》点击确定。 5、弹出框都点击确定。 6、示例结果: 使用SSMS数据库管理工具还原事务日志 数据库事务日志还原分为两步,第一步为还原数据库,第二步为还原数据库事务日志 第一步还原数据库 1、连接数据库,选择要还原的数据库-》右键点击-》选择任务-》选择还原-》选择数据库。 2、在还原数据库弹出框中-》选择设备-》选择要还原的文件的路径。 3、在选择备份设备弹出框中-》点击添加。 4、在定位备份文件弹出框中-》选择文件所在文件夹-》选择要还原的文件。 5、在还原数据库弹出框中-》点击选项选择恢复模式。 6、在还原数据库弹出框中-》如果要还原的数据库已存在,选择覆盖现有数据库,如果不存在,不必选择-》选择数据库恢复模式为RESTORE WITH NORECOVERY。 7、点击确定。 8、此时数据库状态为正在还原。 第二步还原事务日志文件 1

redis面试题

我的梦境 提交于 2020-02-20 17:53:56
文章正文 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性能问题和解决方案: 10、redis 过期键的删除策略? 11、Redis 的回收策略(淘汰策略)? 12、为什么 edis 需要把所有数据放到内存中? 13、Redis 的同步机制了解么? 14、Pipeline 有什么好处,为什么要用 pipeline? 15、是否使用过 Redis 集群,集群的原理是什么? 16、Redis 集群方案什么情况下会导致整个集群不可用? 17、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个? 18、Jedis 与 Redisson 对比有什么优缺点? 19、Redis 如何设置密码及验证密码? 20、说说 Redis 哈希槽的概念? 21、Redis 集群的主从复制模型是怎样的? 22、Redis 集群会有写操作丢失吗?为什么? 23、Redis 集群之间是如何复制的? 24、Redis 集群最大节点个数是多少? 25、Redis 集群如何选择数据库? 26、怎么测试

数据库基础笔记(二)

。_饼干妹妹 提交于 2020-02-20 13:06:48
接上篇 文章目录 10 transaction-view-index事物-视图-索引: transaction定义,ACID,导致事物结束的两种情况:commit,rollback/回滚rollback:导致回滚的情况,解决方法/sql4个隔离层级isolated level,选择/事物序列化的定义,操作/view的定义,种类,声明,结合触发器的视图,基表更改引起实例化视图更改问题以及解决方法/index索引定义,声明,使用索引优化数据库查询tuning的优点,缺点 transaction定义,ACID,commit roll back:导致回滚的情况,解决方法 sql4个隔离层级isolated level,选择 视图的定义,两种类别,声明,结合触发器的视图,视图实例化,基表更改引起实例化视图更改问题的解决方法 index索引定义,声明,使用索引优化数据库查询tuning的优点,缺点 11 psm持久型存储模块(存储过程),pl与sql: psm定义,参量的三种类型,声明,invoke调用,语法:判断,循环,指针,return/动态SQL声明,调用 psm定义,参量,声明,invoke,3个基本种类及作用,语法:判断,循环,指针 动态SQL的声明,调用 12 grant授权: 语法:授权(操作权限,授权权限),撤销授权revoke,撤销授权的两种选项/授权图的点,边,AP,P*

Mysql错误编码和解释表

倾然丶 夕夏残阳落幕 提交于 2020-02-20 05:54:22
Mysql错误编码和解释表 1.错误消息的组成 一共由三部分组成 mysql数字错误代码,这个数字的mysql的特定值,不可以移植到其它数据库系统。 一个五位长度的sqlstate值,这些值取自ANSI SQL和ODBC,并且更加标准化。并不是所有的MySQL错误号都具有相应的SQLSTATE值。在这些情况下,使用'HY000' (一般错误)。 错误的消息描述 2.一些额外的说明 如果需要错误检查,请使用错误代码,而不是错误消息。 如果数据库管理员更改语言设置,则会影响错误消息的语言。 错误代码在给定的MySQL系列的GA版本中是稳定的。在系列达到GA状态之前,新的代码可能仍在开发中,可能会发生变化。 错误消息信息在share/errmsg-utf8.txt文件中。 %d并分别%s表示数字和字符串,当它们被显示时被替换成Message值。 share/errmsg-utf8.txt中列出的错误值被用来生成的定义 include/mysqld_error.h和 include/mysqld_ername.hMySQL的源文件。 share/errmsg-utf8.txt列出的SQLSTATE值用于生成include/sql_state.hMySQL源文件中的定义 。 3.错误码和解释 错误:1000SQLSTATE: () HY000 ER_HASHCHK 消息:hashchk 错误

JDBC学习笔记之管理事务(十二)

喜欢而已 提交于 2020-02-19 21:04:01
回顾事务概念 事务 :一个包含 多个步骤 的业务操作。如果这个业务操作被 事务管理 ,则这个步骤要么同时成功,要么同时失败 操作 : 1.开启事务 2.提交事务 3.回滚事务 Connection对象管理事务 方法 : 1.开启事务: setAutoCommit(boolean autoCommit) 调用该方法设置参数为 false ,即开启事务 注意 :在执行sql之前开启事务 2.提交事务: commit() 注意 :当所有sql都执行完提交事务 3.回滚事务: rollback() 注意 :在catch中回滚事务 案例 我们用 account 表写一个转账的案例 代码: package com . zzq ; import util . JDBCUtils ; import java . sql . Connection ; import java . sql . PreparedStatement ; import java . sql . SQLException ; /** * 事务操作 */ public class JDBCDemo12 { public static void main ( String [ ] args ) { Connection conn = null ; PreparedStatement pstmt1 = null ;

Java EE入门(五)——MySQL基础 (多表关系、范式、多表查询、事务、DCL)

元气小坏坏 提交于 2020-02-19 12:13:21
Java EE入门(五)——MySQL基础 (多表关系、范式、多表查询、事务、DCL)   iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 1、多表关系 多表之间的关系: 一对一的关系。 一对多 或 多对一 的关系。 多对多的关系。 一对多关系实现:在多的一方建立外键列,指向一的一方的主键。 多对多关系实现:需要借助第三张中间表,中间表中至少包含两个字段,作为外键分别指向两张表的主键。这两个字段构成了联合主键。 一对一关系实现:在任意一方添加外键列,指向另一方的主键。而且需要在外键列添加唯一约束。 分析示例:用户收藏旅游线路。 三个实体:旅游线路分类、旅游线路、用户。 旅游线路分类和旅游线路是 一对多 的关系。 用户和收藏的旅游线路是 多对多 的关系。 实现: CREATE TABLE category( cid INT PRIMARY KEY AUTO_INCREMENT, cname VARCHAR(100) NOT NULL UNIQUE ); CREATE TABLE route( rid INT PRIMARY KEY AUTO_INCREMENT, rname VARCHAR(100) NOT NULL UNIQUE, CONSTRAINT r_c FOREIGN KEY (rid) REFERENCES category