快速业务通道

事务策略: 高并发策略-学习如何为支持高用户并发性的应用程序实现事务策略 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
复 清单 1 中的代码,方法是应用 High Concurrency 事务策略的先读取技巧。在 清单 1 所示的代码中,第一个要注意的地方是总共只用了 300 ms 的更新操作(插入和更新)。(此处,我假 定 processTrade() 方法调用的其他方法不执行更新操作。基本技巧是在事务作用域之外执行读取操作和 非更新处理,并且仅将更新封装在事务内部。清单 2 中的代码演示了减小事务作用域并仍然维持原子性 的必要性:

清单 2. 使用 High Concurrency 策略(先读取技巧)

   
public void processTrade(TradeData trade) throws Exception { 
  UserTransaction txn = null; 
  try { 
   //first validate the trade 
   TraderData trader = service.getTrader(trade.getTraderID()); 
   validateTraderEntitlements(trade, trader); 
   verifyTraderLimits(trade, trader); 
   performPreTradeCompliance(trade, trader); 
 
   //now adjust the account 
   AcctData acct = service.getAcct(trade.getAcctId()); 
   verifyFundsAvailability(acct, trade); 
   adjustBalance(acct, trade); 
   performPostTradeCompliance(trade, trader); 
 
   //start the transaction and perform the updates 
   txn = (UserTransaction)ctx.lookup("UserTransaction"); 
   txn.begin(); 
   service.insertTrade(trade); 
   service.updateAcct(trade); 
   txn.commit(); 
  } catch (Exception up) { 
   if (txn != null) { 
     try { 
      txn.rollback(); 
     } catch (Exception t) { 
      throw up; 
     } 
   } 
   throw up; 
  } 
}

事务策略: 高并发策略-学习如何为支持高用户并发性的应用程序实现事务策略(5)

时间:2011-10-21 IBM Mark Richards

注意,我将 insertTrade() 和 updateAcct() 方法移动到了 processTrade() 方法的末尾,并将它们 封装在了一个编程事务中。通过这种方法,所有读取操作和相应的处理将在事务的上下文之外执行,因此 不会在事务持续时间内在数据库中保持锁。在新代码中,事务持续时间只有 300 ms,这显著低于 清单 1 中的 6100 ms。再次,其目标是减少在数据库中花费的时间,从而减少数据库的总体并发性,以及应用程 序处理较大并发用户负载的能力。通过使用 清单 2 中的代码将数据库占用时间减少至 300 ms,从理论 上说,吞吐量将实现 20 倍的提升。

如表 2 所示,在事务作用域中执行的代码至减少至 300 ms:

表 2. API 层方法探查 — 修改后的事务作用域

方法名称 执行时间 (ms)
service.insertTrade() 200
service.updateAcct() 100

虽然这从数据库并发性的角度来说是一种显著的改善,但先读取技巧带来了一个风险:由于为更新指 定的对象上没有任何锁,因此任何人都可以在此 LUW 过程中更新这些未锁定的实体。因此,您必须确保 被插入或更新的对象一般情况下不会由多个用户同时更新。在之前的交易场景中,我做了一个安全的假设 ,即只有一个交易者会在特定的时间操作特定的交易和帐户。但是,并非始终都是这种情况,并且可能会 出现失效数据异常。

另外需要注意:在使用 Enterprise JavaBeans (EJB) 3.0 时,您必须通知容器您计划使用编程事务 管理。为此,您可以使用 @TransactionManagement(TransactionManagementType.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号