文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

数据库事务

2024-04-02 19:55

关注

事务的四个特性 (ACID) ,分别是原子性( Atomicity), 一致性( Consistency), 隔离性( Isolation), 持久性( Durability)。一致性是事务的目的,原子性,隔离性,持久性是一致性的必要条件。

隔离性:多个并发事务之间要相互隔离,对于两个并发的事务T1和T2,T1和T2的开始有先后顺序,这样每个事务都感觉不到有其他事务在并发地执行。

隔离级别有四种:

1、串行Serializable :最严格的级别,事务串行执行,资源消耗最大。

2、可重复读REPEATABLE READ :保证了事务T1不会修改事务T2未提交的数据。避免了“脏读取”和“不可重复读取”的情况,但是带来了更多的性能损失。

3、读取已提交READ COMMITTED :保证了事务T1不会读到事务T2未提交的数据,避免了“脏读取”。

4、读取未提交Read Uncommitted :读取过程中会读取到非法数据。

脏读、幻读、不可重复读的区别:

脏读是T1读取了T2未提交的数据。

不可重复读则是读取了前一事务提交的数据,在某些情况下,不可重复读并不是问题,以最终查询的结果为准。

不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。

四种隔离级别与读取事务和写事务:

读取未提交,读不会阻塞任何事务,写只阻塞写,会导致读出现脏读、不可重复读、幻影读。

读取已提交,读不会阻塞任何事务,写阻塞读、写,因为写阻塞读,排除“脏读” 问题,但是读还是不阻塞写,不可重复读、幻影读会出现。

可重复读,读只阻塞写,写阻塞读、写,读阻塞写避免了“不可重复读”的问题,但是读事务并没有阻塞对数据库的插入操作,所以此 时“幻影读”问题照样存在。

Serializable 数据库系统会保证执行此种隔离级别事务的效果和顺序执行的效果一致。


默认的隔离级别:

MySQL:可重复读。

Oracle:只支持串行化和读已提交这两种级别,默认:读已提交。


并发控制:

在每个读的数据行上加上共享锁

此时我们一般采用READ COMMITTED的隔离级别,然后再结合以下几种并发控制的锁定策略:

* 乐观所 版本号重试

* 悲观锁 for update

* 乐观离线锁

* 悲观离线锁

事务常用的两个属性:readonly和timeout,设置事务的超时时间,防止大事务的发生。


事务模型解析

平面事务模型:本地事务和JTA 事务。

事务管理涉及到的几个参与者:

1 资源管理器( Resource Manager) :资源管理器一般是数据库管理系统。

2 分布式事务协调者( Distributed Transaction Coordinator,DTC):此功能一般是由我们所用的 JavaEE 应用服务器实现,比如 jboss,websphere,weblogic 等。这个角色只有在 JTA 事务中才会存在。

3 事务管理器 (Transaction manager) :每一个事务管理器都与相应的资源管理器所关联,它负责对分布式事务进行提交或者回滚。

4 应用程序( Application)

以上四者的关系可以用以下的图形来形象的表述:

数据库事务


在日常的系统开发中,我们一般都会使用数据资源(比如数据库)来对系统的状态进行保存,那么我们根据系统涉及的数据资源的多少,将事务分为RESOURCE-LOCAL事务或者JTA全局分布式事务。

1 RESOURCE-LOCAL事务

 RESOURCE-LOCAL事务是指只有一个资源管理(RM) 的事务,事务操作都是对同一个数据库进行操作。

 此时事务协调着和事务管理器的作用就有底层的资源管理器来实现了。比如目前我们在采用Spring来管理事务的时候,其实spring并没有事务功能,它仅仅是封装了底层数据库的事务操作而已。

2 全局事务或者JTA事务

国际上提出了一种分布式事务解决方案的标准OTS(Object Transaction Service),JavaEE 对OTS 做了实现,即JTS(Java Transaction Service ),java 又提供了操作JTS 的上层接口 JTA (Java Transaction API )

全局事务是涉及多个资源管理器,此时需要引入事务协调者(可以理解为全局事务管理器,可基于可靠消息实现)来进行调节

通信协议:

1、应用服务器与事务管理器通过TX协议通信。

2、事务管理器与资源管理器通过XA协议通信。

3、事务管理器之间通过XA+(XA协议超集)协议通信。

提交过程:

两阶段提交协议2PC(two phase commit) 

第一阶段:事务协调者发送“准备提交”消息给事务所涉及的所有的事务管理器,然后事务管理器又分送此消息给相应的资源管理器,然后事务管理器又将资源管理的响应情况告诉分布式事务协调着(DTC). 只有此阶段顺利完成后(既所有的资源管理器都同意提交事务),才会进入第二阶段。

第二阶段:当第一个阶段顺利完成后,事务协调者告诉事务管理器去提交事务

分布式最终一致性理论:

CAP理论:

C(一致性)在分布式环境下多个节点数据是否一致;

A(可用性)服务一直保持可用的状态;

P(分区容忍性)在分布式应用中,可能因为一些分布式的原因导致系统无法运转,好的分区容忍性,使应用虽然是一个分布式系统,但是好像一个可以正常运转的整体

BASE理论:

BA: Basic Availability 基本业务可用性;

S: Soft state 柔性状态;

E: Eventual consistency 最终一致性;


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯