快速业务通道

权衡Apache Geronimo EJB事务选项,第3部分: 综合所有事务 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
该策略提供对数据的可靠访问,但是不适用于较小规模的系统,因为当要求系统规模和更多锁时,性能将会降低。

积极锁定 不会在事务期间持有锁。您采取积极的态度并假设在您使用数据时数据不会被其他事务修改。当发生数据冲突时,您可以处理异常情况,但假设这是很少发生的。当要求更新数据时,实现策略来检查数据在最近被读取之后和在被修改之前这段时间里没有发生改变。如果数据没有改变,就执行更新。该策略适用于大规模系统。缺点是您必须实现检测和处理数据冲突的代码。

下一节将讨论改变事务的隔离级别。这是消极锁定的一个例子,其中通过改变事务的隔离级别来控制消极锁定的程度和效力。

隔离

事务的 ACID 属性之一是隔离性。隔离允许事务行为(无论是读还是写数据)独立或隔离于其他并发运行的事务。通过控制隔离,每个事务在其行动时间里都像是修改数据库的惟一事务。一个事务与其他事务隔离的程度称为隔离级别。

锁机制和同步用来控制隔离级别。随着隔离级别增加,需要更多的锁和同步。由于锁控制数据资源,其他尝试执行任何数据操作的事务必须等待,直到锁被释放。因此,增加隔离级别将以性能为代价。相反,随者隔离级别降低,因事务耗费较少的时间来等待锁被释放,将提高性能。

数据一致性

对事务设置隔离级别来处理下列数据一致性问题:

脏数据读(Dirty read)

不可重复读(Unrepeatable read)

影像读(Phantom read)

脏数据读

当从数据库读取未经提交的数据时,发生脏数据读。读取的数据没有与数据库里的真实数据同步。

考虑下面的场景,其中两个事务在读取和更新数据库的 String 字段 X。String X 的初始值是 foo:

事务 1 读取 String X 的值 foo。

事务 1 将 String X 的当前值与 bar 连接并将其保存到数据库中。

X 的新值是 foobar。事务 1 还没有发出提交语句。

事务 2 读取 String X 的值,即 foobar。

事务 1 中止。

事务 2 将 String X 与 bar 连接并将其保存至数据库。

X 的新值是 foobarbar,这时其正确的值应该是 foobar。

事务 2 对 String X 的值执行了脏数据读。

这里的问题是一个事务可以改变值,而另一个事务可能在初始修改被提交前读取其值。数据是脏的,并不能表示数据的真实状态。

权衡Apache Geronimo EJB事务选项,第3部分: 综合所有事务(3)

时间:2011-03-13 IBM Jonathan Sagorin

不可重复读

如果应用程序从数据库读取数据,然后又重读已经被修改的数据(可能以后在同一事务中),那么会发生不可重复读。考虑下面的场景,其中两个应用程序在读取和更新同一数据:

应用程序 1 读取 String X 的值 foo。

应用程序 2 更新 String X 的值为 foobar。

应用程序 1 重读 String 的值并发现其已改为 foobar。

因此在读取之间,数据的值已改变并变得不一致。

影像读

影像读 与不可重复读类似。但是,影像读会将新数据插入到数据库中。应用程序从数据库中读取数据集,然后确定在其重读同一数据集时,附加的数据已经被添加。考虑下面的场景,其中两个应用程序在读取和更新数据库的同一数据:

应用程序 1 搜索符合某个条件的数据并返回五行的数据集。

应用程序 2 将五个满足应用程序 1 的搜索条件的附加行添加到数据库。

在应用程序 1 基于其初始条件重读数据库(且期望得到五行)时,将返回 10 行。

同样,在读取之间数据变得不一致。

选择隔离级别

隔离的四个级别列在下面,按最低(最弱)隔离级别到最高(最强)级别的顺序排列。记住当提高隔离级别时,应用程序的性能将降低。

Read uncommitted - 该选项仅适用于具有非共享数据的非任务关键型系统(这在应用程序中是很少见的情况)。性能处于最佳状态,但是将牺牲并发控制。如果确定没有其他并发事务,请使用该选项。使用该选项,以

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号