2008-09-13 75 views

回答

7

很多人问 - 我需要交易吗?我为什么需要它们?何时使用它们?

答案很简单:一直使用它们,除非你有一个很好的理由不要(例如,不要在企业之间使用原子事务处理“长时间运行的活动”)。默认值应该始终为yes。你有疑问? - 使用交易。

为什么交易有利?它们可以帮助您处理崩溃,失败,数据一致性,错误处理,它们可以帮助您编写更简单的代码等等。这些好处将随着时间的推移而不断增长。

这里是http://blogs.msdn.com/florinlazar/

+3

“一直使用它们,除非你有一个非常好的理由不要”这就像告诉人们随时都戴头盔,除非他们有充分的理由不这样做。 – 2008-09-13 09:10:04

1

答案是一些更多的信息,它依赖。您并不总是需要交易安全。有时它是过度的。有时候不是。

例如,我可以看到,例如,当您执行结帐过程时,只希望在收集完所有数据后最终确定它。等待付款f'up,您可以回滚 - 这是您的一个示例需要交易。或者,当使用它们是明智的时候。

当您创建新的用户帐户时,您是否需要交易?也许,如果它跨越10个表格(无论出于何种原因),如果它只是一个表格,那么可能不是。

这也取决于你卖给你的客户,他们是谁,如果他们要求,等等。但如果决定取决于你,那么我会说,明智地选择。

我的底线是,避免过早优化。构建您的应用程序,请记住,您可能需要返回并在需要时进行重构/优化。看看一些开源项目,看看他们如何实现他们的应用程序的不同部分,从中学习。你会发现他们中的大多数根本不使用交易,但是有大量的在线商店使用它们。

1

当然,这取决于。

它取决于特定存储过程所执行的工作,也许与您所建议的“读/写比率”不同。一般来说,如果查询可能受到其他同时运行的查询的影响,则应考虑在事务中封闭一个工作单元。如果这听起来不确定,那就是。通常很难预测某种工作单位在什么情况下有资格成为候选人。

一个很好的开始就是检查在工作单元内执行的确切的CRUD,在这种情况下在你的存储过程中,并决定它是否会受到其他一些同时操作的影响,以及b)如果其他工作对于这项工作的最终结果(或反之亦然)至关重要。如果这两个答案都是“是”,那么考虑在交易中包装工作单元。

这是什么建议是,你不能总是简单地决定是使用或不使用交易 S,而当它是有道理的,你应该应用它们。使用由ACID(原子性,一致性,隔离性和耐久性)定义的属性来帮助确定何时可能出现这种情况。

要考虑的另一件事是,在某些情况下,特别是如果系统必须快速连续执行许多操作(例如大容量事务处理应用程序),则可能需要衡量事务的相对性能成本。根据工作单元的大小,事务的提交(或回滚)可能是资源昂贵的,可能会不必要地对系统的性能产生负面影响,或者至少受益不大。

不幸的是,这不是一个简单的问题来准确地回答:“这取决于”。

3

在SQL Server中记住,默认情况下,所有单个语句CRUD操作都处于隐式事务中。如果您需要使多个语句充当原子单位,您只需打开显式事务(BEGIN TRAN)即可。

0

使用它们,如果:

  1. 还有,你可能想测试和渔获物不会陷入除非你走出去,做的工作(看东西,测试值一些错误,等等),通常来自一个交易中,这样你就可以回滚整个操作。
  2. 有任何类型的多步骤操作,如果它们失败,应该在逻辑上作为一个组回滚。