本文由
外刊IT评论
组织翻译
没有事务处理的日子
Living Without Transactions
摘要
<!-- -->Martin Fowler (敏捷大师)发表了一篇blog,是关于放弃数据库事务管理,以依靠程序代码来管理事务的方法替代对数据事务管理的依赖.也许有时候这也是个正确的解决方案.<!-- --> <!-- -->
在 Transactionless
这篇blog中,Martin Fowler 对eBay的架构师DanPritchett最近的一次关于为什么eBay的架构师并不十分依赖数据库事务处理的演讲发表了评论. ebay的数据的完整性是由应用层代码完成的. Fowler 指出.
不用事务管理的根本原因是它在某种程度上损耗了eBay的处理效率. 这种影响因为eBay非常大量的将它们的数据分割在很多很多的物理数据库里的事实而变得更加恶化. 结果就是使用事务管理就意味着要使用分布式事务管理,这向来就是需要谨慎的事情.
这种大量的分割,以及在性能问题上,让数据库扮演主要角色的做法意味着eBay不能够使用许多的其他的数据库工具.相关的完整性和数据的排序全是用应用层代码完成的. 它们几乎不能用到trigger和存储过程.
Fowler不加思索的指出事务处理是一个非常有用的数据管理工具,而且指出:
没有人想要把事务处理从工具里排除掉. 我没有足够的关于eBay的详细信息让我来判断放弃事务的对于eBay来说是正确的做法. 但是eBay的例子让我们明白,没有事务管理的日子并不是像人们想象的那样不可能.
除了成为一个我们值得考虑的一种替换方案的事实外,它也是一个例子表明非事务处理的方式的使用要比人们平时所认为的更加常见. 业务需要分多步走,而且和多个资源相关,而且时长时间的分布事务,或是资源不支持事务,这样的事情是常见的.
根据Fowler's blog写的,在应用层里控制数据的完整性需要非常的小心,还需要许多额外的代码:
你需要加倍小心你提交的顺序,让最重要的放在最前面. 每一步提交你都要检查是否提交成功了,如果失败了如何处理.
当开发人员观察放大企业应用程序时,经常会发现数据层是最终的瓶颈. 目前好像是出现了两种途径去提高数据库层: In-memory, distributed caches,such as Tangosol's Coherence and JBoss Cache, 和把大数据库分割成许多小的数据库,在这些数据库中横向的反数据集群.
在第一种方法中,缓存成了应用程序的主要持久数据目标了. 许多的缓存解决方案提供了他们自己的API,通过这些API,他们绕过了传统的企业数据管理接口,例如JDBC和J2EE事务管理.
非集群的数据库,在另一方面,需要应用程序管理多个数据库连接,很可能要依赖分布式事务管理来确保这些跨越数据库的操作的成功.分布式事务处理--特别是分布式事务处理的协调者,就成了又一个瓶颈和失败点,而且可测量性也有限. 就像Fowler的文章指出的,分布式数据库中利用应用程序协调跨越数据库的工作可以增加可测量性.
在你的应用中,你是如何避免让数据库成为一个(single point of failure??)个别的失败和可测量到的瓶颈的? 对Fowler的博客里描述的非事务处理类型的应用的你是如何考虑的?
分享到:
相关推荐
mysql事务处理的意义 事务处理机制在程序开发过程中有着非常重要的作用,它可以使整个系统更加安全,例如在银行处理转账业务时,如果A账户中的金额刚被发出,而B账户还没来得及接收就发生停电,这会给银行和个人带来...
本文的目的是要提供一个关于的Java事务处理API(JTA)的高级的概述,以及与分布式事务相关的内容。一个事务处理定义了一个工作逻辑单元,要么彻底成功要么不产生任何结果。 一个分布式事务处理只是一个在两个或更多...
易语言学习进阶事务处理源码,学习进阶事务处理
关于mysql的事务处理 public static void StartTransaction(Connection con, String[] sqls) throws Exception { if (sqls == null) { return; } Statement sm = null; try { // 事务开始 System....
事务处理能力部分(TCAP).ppt事务处理能力部分(TCAP).ppt事务处理能力部分(TCAP).ppt事务处理能力部分(TCAP).ppt事务处理能力部分(TCAP).ppt事务处理能力部分(TCAP).ppt事务处理能力部分(TCAP).ppt事务处理能力部分...
联机事务处理系统,OLTP介绍
事务处理广泛地应用于数据库和操作系统领域,并在现代计算机系统中监控、控制和更新信息。本书向读者展示了大型的、分布的、异构的计算机系统是如何进行可靠工作的。作者使用事务作为基本概念,说明了在有限的资金和...
Java事务处理Java事务处理.docJava事务处理.doc
PostgreSQL技术内幕:事务处理深度探索.docx
结合目前事务处理的精华,我开发了太极分布式事务处理框架TJDTP,采用可靠消息服务和重试、补偿处理机制,使用事件驱动、最终一致的事务模型,巧妙地运用数据库的事务处理能力,对服务操作结果进行判断,调用应用...
( 事务处理--介绍事务原理和事务实现.docx )
JSP运用事务处理
大家跨服务器加事务的时候经常遇到以下报错:导入Microsoft分布式事务处理协调器MSDTC,网上大部分教程都是服务器配置msdtc,但是发现两个服务器都配置之后还是不行,可参照此图片解决,已验证过,不好用找我,最低...
数据库事务处理课件,中文版,详细的课件。值得下载啊!
Hibernate事务处理Hibernate事务处理
C#中的事务处理例子程序,适合初学者,可以直接用,在数据库的同步控制上很有用
java事务处理的三种方式 spring核心功能理解
数据库与事务处理。
本资源介绍了如果使用c#带参数的事务处理
JTA(Java Transaction API) 为 J2EE 平台提供了分布式事务服务。 要用 JTA 进行事务界定,应用程序要调用 javax.transaction.UserTransaction 接口中的方法。