Java 理论与实践: 理解 JTS —— 事务简介
2010-03-22 00:00:00 来源:WEB开发网核心提示: 当应用程序请求容器或事务监视器启动新的事务时,事务开始,Java 理论与实践: 理解 JTS —— 事务简介(5),由于应用程序访问各种各样的 RM,因此,日志保证了故障之间的持久性,而且还能够减少所执行的磁盘 IO 操作的数量,在事务中对它们进行征用,RM 必须使对应用程序状态所做的任何更改与
当应用程序请求容器或事务监视器启动新的事务时,事务开始。由于应用程序访问各种各样的 RM,因此,在事务中对它们进行征用。RM 必须使对应用程序状态所做的任何更改与请求更改的事务相关联。
当发生以下事件之一或者两个事件都发生时,事务结束:事务应用程序提交 该事务;通过应用程序或者由于其中一个 RM 失败,回滚 该事务。如果事务成功提交,则将写入与该事务相关联的更改,以使更改持久化并使其对于新的事务可见。如果事务被回滚,则该事务所做的所有更改都将被丢弃;就好像该事务从来没有发生过一样。
事务日志 —— 持久性的关键
事务 RM 通过在一个事务日志中记录多个事务的结果,获得持久性以及可接受的性能。事务日志存储为连续的磁盘文件(有时存储在原始分区中),并且一般只是用于写入而不用于读取,回滚或恢复的情况例外。在我们的银行账户示例中,与账户 A 和账户 B 相关联的余额将在内存中进行更新,新的余额和旧的余额将被写入到事务日志中。编写事务日志的更新记录不需要将全部数据都写入磁盘(只需要写入已更改的数据,而不需要写入全部磁盘块),而且所需的磁盘寻道时间也会更少(原因是所有更改都包含在日志中连续的磁盘块中)。此外,与多个并发事务关联的更改可以合并到一起,一次写入事务日志,这意味着每次磁盘写入时我们可以处理多个事务,而不需要每个事务进行几次磁盘写入。之后,RM 将根据所更改的数据更新实际的磁盘块。
重新启动时进行恢复
如果系统出现故障,重新启动时要做的第一件事就是重新应用所有已提交事务的作用,所有这些已提交的事务都位于日志中,但是它们的数据块尚未更新。采用这种方式,日志保证了故障之间的持久性,而且还能够减少所执行的磁盘 IO 操作的数量,或者至少使它们延迟到对系统性能影响更小的时间。
更多精彩
赞助商链接