Java 理论与实践: 理解 JTS —— 事务简介
2010-03-22 00:00:00 来源:WEB开发网核心提示: 不仅不可能同时将多个数据块写入磁盘,而且每当进行修改时马上将每个数据块写入磁盘,Java 理论与实践: 理解 JTS —— 事务简介(3),也对系统性能有不利影响,将磁盘写入延迟到比较适宜的时间可能会大大改善应用程序的吞吐量,我们将事务 定义为对应用程序状态的相关操作的集合,事务具有原子性、一致
不仅不可能同时将多个数据块写入磁盘,而且每当进行修改时马上将每个数据块写入磁盘,也对系统性能有不利影响。将磁盘写入延迟到比较适宜的时间可能会大大改善应用程序的吞吐量,但是,需要采用不损害数据完整性的方式执行。
甚至在系统没有发生故障时,上面讨论的代码还有另一种风险 —— 并发性。如果账户 A 中有 100 美元,但是却同时开始向它的两个不同的账户分别转账 100 美元,那么会发生什么情况呢?如果时间上凑巧,并且没有适当的锁定机制,两次转账都可能成功,从而使账户 A 的余额为负值。
这些情况似乎都是非常可能发生的,因此希望企业数据系统能够解决这些问题是理所应当的。我们希望在发生火灾、洪水、电源故障、磁盘以及系统出现故障时,银行都能够保持正确的账户记录。可以通过冗余(冗余的磁盘、计算机以及数据中心)来提供容错,但是事务 使得构建容错的软件应用程序成为可能。事务提供了一个框架,用于在系统或组件发生故障时保持数据一致性和完整性。
什么是事务?
那么到底什么是事务呢?在定义这个术语之前,我们首先定义应用程序状态 的概念。应用程序的状态包含影响应用程序操作的所有内存和磁盘中的数据项目 —— 应用程序 “知道” 的所有内容。应用程序状态可以存储在内存、文件或者数据库中。如果系统发生故障,例如应用程序、网络或者计算机系统崩溃,则我们想确保当重新启动系统时,可以恢复应用程序的状态。
现在,我们将事务 定义为对应用程序状态的相关操作的集合。事务具有原子性、一致性、隔离性 以及持久性 这几个属性。这些属性统称为 ACID 属性。
更多精彩
赞助商链接