7

e-commerce appasp.net中写了一个非常简单的东西,我需要在我的存储过程中使用事务吗?

读/写比率约为 9:1

4

5 回答 5

7

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

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

为什么交易是有益的?它们可以帮助您处理崩溃、故障、数据一致性、错误处理,它们可以帮助您编写更简单的代码等。而且好处列表将随着时间的推移而继续增长。

以下是来自http://blogs.msdn.com/florinlazar/的更多信息

于 2008-09-13T08:52:26.303 回答
3

请记住,在 SQL Server 中,默认情况下,所有单语句 CRUD 操作都在隐式事务中。如果您需要将多个语句作为一个原子单元,您只需要打开显式事务 (BEGIN TRAN)。

于 2008-09-13T16:07:22.937 回答
1

答案是,这取决于。您并不总是需要交易安全。有时它是矫枉过正的。有时不是。

我可以看到,例如,当您实施结帐流程时,您只想在收集所有数据等后完成它。考虑一下付款方式,您可以回滚 - 这是您需要交易时的示例。或者也许在明智的时候使用它们。

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

这还取决于您向客户出售的产品以及他们是谁,以及他们是否提出要求等。但是,如果由您做出决定,那么我会说,明智地选择。

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

于 2008-09-13T09:06:01.997 回答
1

当然,这取决于。

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

一个好的起点是检查工作单元中正在执行的精确CRUD,在这种情况下是在您的存储过程中,并确定它是否 a)可能受到其他一些同时操作的影响,以及 b)其他工作是否重要到正在执行的这项工作的最终结果(或者,甚至反之亦然)。如果这两个答案都是“是”,那么考虑将工作单元包装在事务中。

这表明您不能总是简单地决定使用或不使用 transaction,而是应该在有意义的时候应用它们。使用ACID定义的属性(原子性、一致性、隔离性和持久性)来帮助确定何时可能出现这种情况。

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

不幸的是,这不是一个容易准确回答的问题:“视情况而定”。

于 2008-09-13T09:49:10.957 回答
0

在以下情况下使用它们:

  1. 您可能想要测试和捕获一些错误,除非您出去并做工作(查找内容,测试值等),否则不会被捕获,通常从事务中进行,以便您可以滚动返回整个操作。
  2. 有任何类型的多步骤操作,如果它们失败,从逻辑上讲,它们应该作为一个组回滚。
于 2008-09-15T12:55:22.613 回答