Java理论与实践: 理解JTS —— 事务简介 - 编程入门网
的吞吐量,但是,需要采用不损害数据完整性的方式执行 。
甚至在系统没有发生故障时,上面讨论的代码还有另一种风险 —— 并发性 。如果账户 A 中有 100 美元,但是却同时开始向它的两个不同的账户分别转账 100 美元,那么会发生什么情况呢?如果时间上凑巧,并且没有适当的锁定机制 ,两次转账都可能成功,从而使账户 A 的余额为负值。 这些情况似乎都是非常可能发生的,因此希望企业数据系统能够解决这些问 题是理所应当的。我们希望在发生火灾、洪水、电源故障、磁盘以及系统出现故 障时,银行都能够保持正确的账户记录。可以通过冗余(冗余的磁盘、计算机以 及数据中心)来提供容错,但是事务 使得构建容错的软件应用程序成为可能。 事务提供了一个框架,用于在系统或组件发生故障时保持数据一致性和完整性。 Java理论与实践: 理解JTS —— 事务简介(2)时间:2010-12-22 IBM Brian Goetz什么是事务? 那么到底什么是事务呢?在定义这个术语之前,我们首先定义应用程序状态 的概念。应用程序的状态包含影响应用程序操作的所有内存和磁盘中的数据项目 —— 应用程序 “知道” 的所有内容。应用程序状态可以存储在内存、文件或 者数据库中。如果系统发生故障,例如应用程序、网络或者计算机系统崩溃,则 我们想确保当重新启动系统时,可以恢复应用程序的状态。 现在,我们将事务 定义为对应用程序状态的相关操作的集合。事务具有原子 性、一致性、隔离性 以及持久性 这几个属性。这些属性统称为 ACID 属性。 原子性 意味着要么所有事务操作都应用于应用程序状态,要么都不应用;事 务是不可拆分的工作单元。 一致性 意味着事务代表应用程序状态的正确转换 —— 即事务不能违反应用 程序中固有的任何完整性限制。实际上,一致性的概念是特定于应用程序的。例 如,在记账应用程序中,一致性可能包括所有资产账户的总和始终等于所有负债 账户的总和这个不变式。在本系列的第 3 部分中讨论事务划分时,我们将详细 讨论这个需求。 隔离性 意味着一个事务的效果不影响正在同时执行的其他事务。从事务的角 度讲,它意味着事务按顺序执行而不是并行执行。在数据库系统中,通常通过使 用锁机制来实现隔离性。为了使应用程序获得最佳性能,有时也会对某些事务放 松隔离性的要求。 持久性 意味着一旦成功完成某个事务,对应用程序状态所做的更改将 “经 得起失败”。 什么是 “经得起失败”呢?它由什么组成?这取决于系统,一个设计良好的 系统将明确地标识可以从哪些故障中恢复过来。在我的桌面工作站上运行的事务 数据库,对于系统崩溃和电源故障非常稳定健壮,但是对于我的办公大楼发生大 火灾却没有任何作用。银行可能不仅仅在数据中心具有冗余的磁盘、网络以及系 统,而且还可能在别的城市有冗余的数据中心,该冗余数据中心通过冗余的通信 链路连接,目的是允许从严重的故障(如自然灾害)中进行恢复。军用的数据系 统甚至可能有更严格的容错要求。 事务的剖析 典型事务有几个参与者 —— 应用程序、事务监视器(TPM)以及一个或多个 资源管理器(RM)。资源管理器存储应用程序状态,常常是数据库,但也可能是 消息队列服务器(在 J2EE 应用程序中,它们将是 JMS 提供者)或其他事务性 资源。TPM 协调 RM 的活动,以确保事务 “要么全有要么全无” 属性。 当应用程序请求容器或事务监视器启动新的事务时,事务开始。由于应用程 序访问各种各样的 RM,因此,在事务中对它们进行征用。RM 必须使对应用程序 状态所做的任何更改与请求更改的事务相关联。 当发生以下事件之一或者两个事件都发生时,事务结束:事务应用程序提交 该事务 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |