了解事务陷阱【转载】
在应用程序中使用事务常常是为了维护高度的数据完整性和一致性。如果不关心数据的质量,就不必使用事务。毕竟,Java 平台中的事务支持会降低性能,引发锁定问题和数据库并发性问题,而且会增加应用程序的复杂性。
但是不关心事务的开发人员就会遇到麻烦。几乎所有与业务相关的应用程序都需要高度的数据质量。金融投资行业在失败的交易上浪费数百亿美元,不好的数据是导致这种结果的第二大因素。尽然缺少事务支持只是导致坏数据的一个因素(但是是主要的因素),但是完全可以这样认为,在金融投资行业浪费掉数十亿美元是由于缺少事务支持或事务支持不充分。
忽略事务支持是导致问题的另一个原因。我常常听到 “我们的应用程序中不需要事务支持,因为这些应用程序从来不会失败” 之类的说法。是的,我知道有些应用程序极少或从来不会抛出异常。这些应用程序基于编写良好的代码、编写良好的验证例程,并经过了充分的测试,有代码覆盖支持,可以避免性能损耗和与事务处理有关的复杂性。这种类型的应用程序只需考虑事务支持的一个特性:原子性。原子性确保所有更新被当作一个单独的单元,要么全部提交,要么回滚。但是回滚或同时更新不是事务支持的惟一方面。另一方面,隔离性事务策略 系列的其余部分将指导您如何设计针对从简单应用程序到高性能事务处理用例的有效事务策略。