`

关于事务的一些学习笔记

 
阅读更多

今天在整理资料的时候发现了之前学习事务的时候的一些学习笔记,顺便写篇blog记录一下备以后查验。

 

 

 

事务是什么

1 事务的概念

1.1 为什么需要事务

  在我们日常系统开发当中,我们是不是不可避免的要对一些数据资源 进行访问,但是我们怎么来保证我们对数据资源的访问不会破坏数据资源的完整性呢?这个时候就需要事务了,正是引入了事务的概念,我们平时对数据资源进行操作的时候才不会破坏数据资源的完整性或者说是不变量约束

1.2 何为事务

        前面从为什么需要事务的角度,我们意识到了事务其实就是用来保护系        统处于一致性性状态的一种措施。也可以说是一系列原子操作 的集合。

2 事务的特征

前面从事务目的的角度说明了事务到底是什么,那么事务又是达到保证数据资源完整性的目的的呢?这需要我们来了解一下事务的特征,事务一共有四个特性 (ACID) ,分别是原子性( Atomicity), 一致性( Consistency), 隔离性( Isolation), 持久性( Durability).

2.1 原子性

何为原子性?之前说了事务需要保证数据资源的完整性,那么我们就需要控制对数据资源的访问,使得对数据资源进行访问的操作要么全部成功,否则只要一个操作失败,那么全部失败(虽然有点极端 ^_^ ,但是很必要),这样数据资源就不会因为一部分操作成功,但是一部分操作失败而引起系统不一致。

2.2 一致性

何为一致性呢?一致性就是说,当我们在对数据资源的一次访问过程中,在访问之前和访问之后,数据资源的状态都要处于一种完整的,满足不变量约束的状态。(比如银行转账,当从账户 A 转账到账户 B 后,账户 A 和账户B 的金额总和是不变的,这就是一种不变量约束)。

其实一致性也说出了事务的心声,这也正是事务的目的,但是要想实现此目的,事务必须满足其它的三条特征,原子性,隔离性,持久性是一致性的必要条件。

 

2.3 隔离性

        何为隔离性?隔离性主要是考虑到了系统的并发操作,但系统对数据资        源进行访问的时候,可能同时有好多个并发操作同时进行,这样为了保证系       统的一致性,事务必须具有一定的隔离性,使得并发执行的一些列操作互相      不要产生干扰。

        总之,事务的隔离性,主要是为了保证在多线程环境下,数据资源的一 致性。

2.4 持久性

        何为持久性?持久性就是指在事务结束的时候,事务的结果应该被持久 的保存下来,此特征也是为一致性来服务的,试想一下,假如事务成功了, 但是此时突然断电或者其它的故障,那么此时事务的结果还是应该要保存下      来,不然系统的不变量约束就遭到了破坏。

 

以上是事务的四特征,下面主要来说说事务的隔离性问题,对于事务的隔离性问题, ANSI 标准规定了四个隔离级别,如下 :

3 事务的隔离级别

    在说隔离级别以前,我们先来明确两个问题,读取事务和写事务,读取事务只是对数据库进行读操作,不会引起数据库状态变化,而写事务要对数据库进行更新。下面就以读事务和写事务来加以描述:

3.1 读取未提交( Read uncommited)

         读取未提交隔离级别是最低的一种隔离级别,其中读事务不会阻塞任 何事务,写事务阻塞写事务,但是不阻塞读事务,正是因为写事务不阻塞读 事务,所以就造成读取事务读到的数据可能是脏的,这也就是著名的“脏读   问题”,同时因为读事务没有阻塞写事务,所以在读事务中的两次读取操作    可能读到不同的数据,这也就造成了著名的“不可重复读问题”,同理此种 情况下也存在“幻影读”问题。

3.2 读取已提交( Read commited)

        读取已提交隔离级别中,读事务不会阻塞任何事务,但是写事务会阻塞 读事务和其它写事务,此时因为写事务会阻塞读事务,所以不会出现“脏读” 问题,但是因为此时读事务还是不阻塞写事务,所以“不可重复读”问题还 会出现,同时“幻影读”问题还是会出现。

3.3 可重复读( Repeatable Read)

         可重复读隔离级别中,读事务会阻塞写事务,不阻塞读事务,写事务 会阻塞写事务和读事务,因为此时读事务阻塞了写事务,所以避免了“不可 重复读”的问题,但是此时读事务并没有阻塞对数据库的插入操作,所以此 时“幻影读”问题照样存在。

3.4 序列化 (Serializable)

         Serializable 隔离级别是最严格一种隔离级别,数据库系统会保证执行    此种隔离级别事务的效果和顺序执行的效果一致。不过在日常的开发过程种    很少使用此种隔离级别,因为它严重影响了系统的性能。

  

    以上就是事务的四种隔离级别,但是实际的开发当中,我们还是需要注意以下几个问题:

    1 并不是所有的数据库都支持以上的四种隔离级别,具体的数据库支持的隔离级别可参考相应的数据库文档。

    2  在实际的开发当中,我们经常还会遇到一个问题就是如何在事务隔离级别和系统的并发性方面取得一个折中,如果采用 serializable 隔离级别,这样数据库就做好了并发控制,但是系统性能非常差,此时我们一般采用读取已提交的隔离级别,然后再结合以下几种并发控制的锁定策略:

*    乐观所

*    悲观锁

*   乐观离线锁

*   悲观离线锁

此时其实并发是由应用程序来控制的,而事务的隔离由数据库系统来管理。

事务模型解析

       首先事务模型分为好几种比如平面事务,嵌套事务等,平面事务是一个完整的不能再进行嵌套的事务,而嵌套型事务容许事务进行嵌套,事务嵌套子事务,这样主事务可以对嵌套子事务进行重试,这样增加了事务成功的总体的成功率,嵌套式事务最典型的例子就是订票。比如某人要去旅行,需要路径 A,B,C D 四个不同的地方, A B 需要订火车票, B C 需要订机票, C D 需要订船票,那么如果采用平面事务,只要 A,B,C,D 任意一段路程订票失败那么就订票失败了,这样明显成功率比较低,这种情况下可以采用嵌套型事务来避免平面性事务的刚性失败的缺点。

       上面说了常见的事务模型的类型,下面主要说一下目前 JAVAEE 应用中,我们常见的事务,本地事务或者 resource-local 事务和全局事务或者说 JTA 事务,需要声明的是 resource-local jta 事务都属于前面说的平面事务模型。在具体说这两种不同类型事务之前,首先我们来明确几个事务管理会涉及到的几个参与者:

1 资源管理器( Resource Manager) :资源管理器一般是数据库管理系统,也可以是消息队列,遗留系统等。

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

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

4 应用程序( Application)

 

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


 

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

1  RESOURCE-LOCAL 事务

         RESOURCE-LOCAL 事务是指只有一个资源管理( RM) 的事务,比如 我们系统中只涉及到一个数据库,更准确点说应该是事务操作都是对同一个    数据库进行操作。

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

2  全局事务或者 JTA 事务

全局事务是涉及多个资源管理器,此时需要引入事务协调者来进行调节,此时就需要两阶段提交协议 2PC two phase commit) ,下面简要说一下两阶段提交协议。

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

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

我们可以形象的用下图对分布式事务的参与者进行描述:

 

 

上图描述一种场景,一个分布式事务中需要操作两个数据库和一个 JMS 服务器,在这种场景下,在进行事务操作的时候,对于 DB 来说,首先事务管理器从支持 XA 接口的 JDBC 驱动程序中取得对应的 javax.transaction.xa.XAResource 实现类, 然后从相应的 JDBC 驱动中获取到 javax.sql.XAConnection 的实现类,其中 XAResource 对应用程序是透明的,应用程序只需要拿到 XAConnection 进行操作数据库即可,对于 JMS 过程类似,首先从支持 XA JMS 消息中间件获取 javax.transaction.xa.XAResource ,然后再获取 javax.jms.XAConnection 的实现类,这里 XAResource 同样对应用程序是透明的。

四:参考文献

1  << 精通 EJB3.0>>

2  <<Enterprise Javabean 3.0>>

3  << 面向模式的软件体系结构 >> 2 ,卷 3

4  << 服务器端组件模式 >>

5  Specification: JSR-000907 Java(tm) Transaction API (JTA) Specification ("Specification"),此文档在附件,有需要的可以下载看看。

 

  • 大小: 64.4 KB
  • 大小: 51.6 KB
0
0
分享到:
评论
1 楼 cetusz 2012-05-28  
感谢分享

相关推荐

    1个人工智能相关资源的技术细节探讨和相关的学习笔记

    以下是一个人工智能相关资源在实践工作中的使用案例: ### 案例:京东方工业互联网中的AI应用 - **资源**:京东方利用人工智能技术结合工业互联网平台,实现了生产过程的智能化管理和优化。

    DeepSeek使用技巧大全-1000个DeepSeek神级提示词,让你轻松驾驭AI

    为什么你的AI助手总是答非所问? 「写篇产品分析」→ 收到一堆不知所云的文字 「做个竞品对比」→ 得到几页没有重点的废话 揭秘:不是AI不够聪明,而是你的指令太“高冷”! 一、新手进阶:5大法则,让AI瞬间Get你的点 法则:人话指令——行动+领域+输出格式 错误示范:“分析数据” → AI给你一堆看不懂的术语 正确打开方式:“用小白都能听懂的话,解析2023年销售数据,找出三大问题,给出改进建议,并做成图表” 秘诀:把AI当成你的助手,明确任务、受众和呈现方式,它就能精准回应!

    东南大学操作系统原理课程讲义-操作系统基本概念与历史演变及其应用实例解析

    内容概要:本文档为东南大学操作系统原理课程的详细讲义。主要内容涵盖了操作系统的发展历史、主要概念和结构、具体应用案例、计算机系统组织结构以及具体的处理器、内存、缓存、中断及输入输出模块的工作机制等基础知识。还介绍了如eCos、Linux等操作系统在高性能计算领域的实际应用场景,特别是针对嵌入式系统配置的需求,如eCos用于AMS-02项目。通过展示GUI和X Windows系统的例子解释了操作系统是如何协调各种任务并提高系统效率。同时,也探讨了内存管理、进程管理、死锁、I/O管理等方面的内容。最后给出了该课程的具体教学大纲和教学要求。 适用人群:对于正在学习或从事操作系统相关领域的高校学生或者研究学者而言,这份讲义能够帮助理解和掌握操作系统的运作原理和关键技术。 使用场景及目标:该讲义适用于课堂教学,帮助学员理解操作系统的构成要素及工作机制,了解各类操作系统的演化路径,并应用于实际项目的开发和技术优化过程中,从而培养学生对计算机软硬件协同工作的认知能力和工程素养。 其他说明:讲义还包括了几位操作系统领域先驱人物的简介(Ken Thompson & Dennis Ritchie、Stev

    DeepSeek爆火,25年AI行业如何发展?.pdf

    DeepSeek爆火,25年AI行业如何发展?.pdf

    基于STM32的'水位检测自动控制系统':集成超声波模块与DS18B20传感器的多功能应用.pdf

    基于STM32的'水位检测自动控制系统':集成超声波模块与DS18B20传感器的多功能应用.pdf

    鸿蒙(HarmonyOS)- 装饰器

    鸿蒙(HarmonyOS)- 装饰器

    加载mp4 xxxxxxxxxxxxxxxxxxx

    加载mp4 xxxxxxxxxxxxxxxxxxx

    基于SpringBoot的甘肃非物质文化网站(源码+数据库+万字文档)

    一、项目介绍 404.系统包含两种角色:用户、管理员,系统分为前台和后台两大模块,主要功能如下: 用户信息管理 用户信息管理页面为管理员提供了以下功能: - 查询管理用户信息 - 删除用户信息 - 修改用户信息 - 新增用户信息 - 对用户名称进行模糊查询 商品分类管理 商品分类管理页面为管理员提供了以下功能: - 查看已发布的商品分类数据 - 修改商品分类 - 作废商品分类(即删除商品分类) 申请信息管理 申请信息管理页面为管理员提供了以下功能: - 查看用户的申请信息 - 作废申请信息(即删除申请信息) 订单信息管理 订单信息管理页面为管理员提供了以下功能: - 查看用户的订单信息 - 作废订单信息(即删除订单信息)

    MATLAB实现基于TCN-Transformer+BiLSTM多变量时间序列预测的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文档详细介绍了基于MATLAB实现TCN-Transformer+BiLSTM多变量时间序列预测的方法及其项目实例。项目旨在提高时间序列预测精度、解决传统方法局限性,提升多变量数据处理能力和实时处理能力,增强智能决策系统发展。核心技术包括TCN(捕捉长时依赖性)、Transformer(捕捉全局依赖性)、BiLSTM(捕捉双向依赖性)。该模型经过多层次特征提取与优化、在线学习与实时预测,具有良好的应用前景。 适用人群:具备MATLAB编程基础和技术背景的研发人员,熟悉机器学习和时间序列预测的科学家与工程师。 使用场景及目标:适用于金融市场预测、交通流量预测、能源需求预测、供应链管理、医疗健康数据分析、气象预测和工业生产预测等多领域。主要目标包括提高预测精度、提升实时处理能力、增强多变量数据处理能力和模型的自适应学习。 其他说明:文中提供了详细的项目背景介绍、模型架构、实施细节和部署方案,强调了模型的优化策略(如自动化超参数调优和GPU/TPU加速推理)及应用领域的拓展可能性(如引入多模态数据融合和强化学习技术)。此外,项目还包括精美的图形用户界面(GUI)设计与可视化工具,支持用户自定义配置模型参数,并实现便捷的数据文件选择和结果导出功能。

    基于SpringBoot的高校宣讲会管理系统(源码+数据库+万字文档)

    415高校宣讲会管理系统,系统包含三种角色:管理员、企业、学生,系统分为前台和后台两大模块,主要功能如下。 前台功能模块: - 首页:展示系统的概览信息、推荐宣讲会等内容。 - 论坛:用户可以在论坛中进行交流、分享经验等。 - 企业:展示注册的企业信息,供用户浏览。 - 公告信息:查看系统发布的公告信息。 - 宣讲会:浏览宣讲会的详细信息,包括时间、地点等。 - 个人中心:用户管理个人信息,包括查看报名宣讲会、修改个人信息等操作。 后台管理模块(企业): - 个人中心:管理企业的个人信息,包括修改密码等操作。 - 宣讲会管理:发布和管理企业的宣讲会信息,包括添加宣讲会、编辑宣讲会、取消宣讲会等操作。 - 宣讲会报名管理:管理学生对宣讲会的报名情况,包括查看报名学生列表、确认报名等操作。 - 论坛管理:管理企业在论坛的发帖情况,包括查看帖子列表、回复帖子等操作。 - 公告信息管理:发布和管理企业的公告信息。 后台管理模块(管理员): - 个人中心:管理管理员的个人信息,包括修改密码等操作。 - 管理员管理:管理系统的管理员账号,包括添加管理员、编辑管理员、删除管理员等操作。

    numpy-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl

    该资源为numpy-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl,欢迎下载使用哦!

    QNX Neutrino 实时操作系统(RTOS)的技术特性及其应用领域解析

    内容概要:本文详细介绍了QNX Neutrino实时操作系统(RTOS),这是一种基于微内核架构设计的高度可靠性和实时性能的系统。QNX的微内核架构将应用程序、网络和文件系统隔离开来运行,使得当一个组件发生故障时不会影响整个系统的稳定,支持立即重启并限制对外围组件的影响最小化。为了提升实时可用性和高可用性,它实现了自我监测机制、自适应分区等功能,确保重要任务按时执行。此外,操作系统提供了全面的信息安全特性、强大的多处理能力、多种网络通信接口、图形化用户界面技术支持以及详细的文档和技术支撑。它适用于汽车、医疗器械、工业自动化、运输和重型机械等多个行业领域的关键任务环境。 适用人群:主要针对有较高安全性和实时性的需求的行业从业者,尤其是汽车制造和工业控制领域的产品经理和技术开发者。 使用场景及目标:帮助用户理解如何利用QNX Neutrino构建高效稳定的关键嵌入式系统,包括了解其技术架构、安全防护方法,优化系统性能等; 其他说明:文章还包括关于BlackBerry QNX提供的服务介绍,如功能安全性认证和支持迁移至新系统的帮助。

    DeepSeek内部研讨系列:DeepSeek与AIGC应用.pdf

    DeepSeek内部研讨系列:DeepSeek与AIGC应用.pdf

    urdfdom-headers-devel-1.0.5-1.el8.x64-86.rpm.tar.gz

    1、文件说明: Centos8操作系统urdfdom-headers-devel-1.0.5-1.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf urdfdom-headers-devel-1.0.5-1.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm

    numpy-2.2.0-cp313-cp313-macosx_14_0_arm64.whl

    该资源为numpy-2.2.0-cp313-cp313-macosx_14_0_arm64.whl,欢迎下载使用哦!

    Matlab基于WOA-SVR鲸鱼算法(WOA)优化支持向量回归的数据多输入单输出回归预测的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:该文档详细介绍了基于Matlab的鲸鱼优化算法(WOA)与支持向量回归(SVR)结合的方法及其项目实现。WOA通过仿鲸鱼的捕食行为,优化SVR模型的参数选择,有效克服传统SVR存在的不足,特别擅长处理高维和非线性回归问题。项目的目标包括优化SVR的预测精度、提升计算效率、增强模型的鲁棒性、为各类应用提供优质回归工具、促进智能化优化算法的应用,并推广WOA。项目应对的主要挑战涵盖高维数据处理、参数优化、计算资源利用、噪音剔除等,皆由WOA的特性予以克服。该研究为诸如金融、气象等领域提供了新的预测视角,强调数据预处理、算法融合的重要性,并详细探讨了模型的具体实施、结果可视化、以及系统的部署运维等层面。 适用人群:适合从事机器学习、金融分析、工程技术等领域的研究人员及从业者,特别是希望借助先进算法优化数据分析过程的人士。 使用场景及目标:可用于多输入单输出回归预测任务,旨在显著改善预测准确性和稳定性,具体应用场景区别于但不限于金融市场的趋势估计、气候条件预测、工程监测与维护、能源消耗预估和环保措施的效果预测等。 其他说明:文中还包含了完整的代码示例和详细的注释指导,辅助开发者更深入地理解和应用WOA-SVR优化算法,从而在实际问题解决中取得成效。

    uw-imap-utils-2007f-24.el8.x64-86.rpm.tar.gz

    1、文件说明: Centos8操作系统uw-imap-utils-2007f-24.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf uw-imap-utils-2007f-24.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm

    北京大学 - DeepSeek内部研讨系列:DeepSeek原理和落地应用.pdf

    北京大学 - DeepSeek内部研讨系列:DeepSeek原理和落地应用.pdf

    CoppeliaSim机器人仿真模拟器软件发表的论文-金土石科技

    CoppeliaSim旨在为机器人研究和开发提供仿真环境。它可以帮助用户进行机器人建模、编程和仿真,并提供了丰富的工具和库,如机器人运动学、动力学模型等。CoppeliaSim支持多种编程语言,如Python、C++、Lua等,并具有易于使用的GUI界面,使得用户可以轻松地创建、控制和监视机器人仿真。这是CoppeliaSim发表的论文可以参考。

    益阳市乡镇边界,矢量边界,shp格式

    矢量边界,行政区域边界,精确到乡镇街道,可直接导入arcgis使用

Global site tag (gtag.js) - Google Analytics