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语句为我做的工作.我只是显式执行提交.
我发现这种模式大大减少了记录锁定问题.
就个人而言,开发一个基于高流量性能的网站,我尽可能远离数据库事务.显然它们是必要的,所以我使用ORM和页面级对象变量来最小化我必须进行的服务器端调用的次数.
嵌套事务是最小化调用的一种很棒的方法,只要它们是不会导致锁定的快速查询,我就可以随时指导这个方向.在这些情况下,NHibernate一直是救世主.
我对数据库的每次写入操作都使用事务。
因此,在一个较大的事务中包含了相当多的小“事务”,并且基本上在嵌套代码中存在未完成的事务计数。如果在结束父级时还有任何未完成的子级,则全部回滚。
我更喜欢客户端事务处理(如果可用)。如果您负责执行 sps 或其他服务器端逻辑工作单元,那么服务器端事务就可以了。