交易最佳实践

aku*_*aku 27 database architecture transactions

你依赖数据库交易多少钱?

您更喜欢小型还是大型交易范围?

您更喜欢客户端事务处理(例如.NET中的TransactionScope)而不是服务器端事务,反之亦然?

嵌套交易怎么样?

您有与交易相关的一些提示和技巧吗?

你遇到过与交易有关的任何陷阱吗?

欢迎各种答案.

Sim*_*son 18

我总是在一个using语句中包装一个事务.

using(IDbTransaction transaction )
{
// logic goes here.
   transaction.Commit();
}
Run Code Online (Sandbox Code Playgroud)

一旦交易超出范围,它就会被处置掉.如果事务仍处于活动状态,则会回滚该事务.此行为失败 - 保护您不会意外地锁定数据库.即使抛出未处理的异常,事务仍将回滚.

在我的代码中,我实际上省略了显式回滚,并依赖using语句为我做的工作.我只是显式执行提交.

我发现这种模式大大减少了记录锁定问题.


Sar*_*pps 8

就个人而言,开发一个基于高流量性能的网站,我尽可能远离数据库事务.显然它们是必要的,所以我使用ORM和页面级对象变量来最小化我必须进行的服务器端调用的次数.

嵌套事务是最小化调用的一种很棒的方法,只要它们是不会导致锁定的快速查询,我就可以随时指导这个方向.在这些情况下,NHibernate一直是救世主.


Dev*_*ris 3

我对数据库的每次写入操作都使用事务。
因此,在一个较大的事务中包含了相当多的小“事务”,并且基本上在嵌套代码中存在未完成的事务计数。如果在结束父级时还有任何未完成的子级,则全部回滚。

我更喜欢客户端事务处理(如果可用)。如果您负责执行 sps 或其他服务器端逻辑工作单元,那么服务器端事务就可以了。