事务策略: 高并发策略-学习如何为支持高用户并发性的应用程序实现事务策略 - 编程入门网
效数据异常。为了应对可能的这种情况,如果在此事务策略中使用对象关系映射(ORM )框架,则应确保使用了版本验证功能。
为了演示这种先读取技巧,我们从一些实现 API 层事务策略的代码入手。在清单 1 中,事务在 API 层中开始,并且包围了整个工作单元,包括所有的读取、处理和更新操作: 清单 1. 使用 API 层策略 @TransactionAttribute(TransactionAttributeType.REQUIRED) public void processTrade(TradeData trade) throws Exception { try { //first validate and insert the trade TraderData trader = service.getTrader(trade.getTraderID()); validateTraderEntitlements(trade, trader); verifyTraderLimits(trade, trader); performPreTradeCompliance(trade, trader); service.insertTrade(trade); //now adjust the account AcctData acct = service.getAcct(trade.getAcctId()); verifyFundsAvailability(acct, trade); adjustBalance(acct, trade); service.updateAcct(trade); //post processing performPostTradeCompliance(trade, trader); } catch (Exception up) { ctx.setRollbackOnly(); throw up; } } 事务策略: 高并发策略-学习如何为支持高用户并发性的应用程序实现事务策略(4)时间:2011-10-21 IBM Mark Richards注意在 清单 1 中,所有的处理都包含在 Java Transaction API (JTA) 事务的作用域内,包括所有 的确认、验证和兼容性检查(提前和事后)。如果您通过探查器工具来运行 processTrade() 方法,那么 就会看到每个方法调用的执行时间将与表 1 相似: 表 1. API 层方法探查 — 事务作用域
processTrade() 方法的持续时间稍微长于 6 秒 (6100 ms)。由于事务的起始时间与方法相同,因此 事务的持续时间也是 6100 ms。根据您所使用的数据库类型以及特定的配置设计,您将在事务执行过程中 保持共享和专用锁(从执行读取操作开始)。此外,在由 processTrade() 方法调用的方法中执行的任何 读取操作也可以在数据库中保持一个锁。您可能会猜想,在本例中,在数据库中保持锁持续 6 秒以上将 不能扩展以支持高用户负载。 清单 1 中的代码在没有高用户并发性或高吞吐量需求的环境中可能会非常出色地运行。遗憾的是,这 只是大多数人用于测试的一种环境。一旦此代码进入生产环境,其中数以百计的交易者(或者是全球的) 都在进行交易,则该系统最有可能会运行得非常糟糕,并且极有可能会遇到数据库死锁(根据您所使用的 数据库而定)。 现在,我将修 |
||||||||||||||||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |