您依赖数据库交易多少钱?
您更喜欢小型还是大型交易范围?
您是否更喜欢客户端事务处理(例如.NET中的TransactionScope)而不是服务器 边交易,反之亦然?
嵌套交易怎么样?
您是否有与交易相关的提示和技巧?
您遇到过与交易有关的任何问题吗?
欢迎各种答案。
答案 0 :(得分:18)
我总是在一个using语句中包装一个事务。
using(IDbTransaction transaction )
{
// logic goes here.
transaction.Commit();
}
一旦交易超出范围,它就会被处置掉。如果事务仍处于活动状态,则会回滚该事务。此行为失败 - 保护您不会意外地锁定数据库。即使抛出未处理的异常,事务仍将回滚。
在我的代码中,我实际上省略了显式回滚,并依赖using语句为我做的工作。我只是显式执行提交。
我发现这种模式大大减少了记录锁定问题。
答案 1 :(得分:8)
就个人而言,开发一个基于高流量性能的网站,我尽可能远离数据库事务。显然它们是必要的,所以我使用ORM和页面级对象变量来最小化我必须进行的服务器端调用的数量。
嵌套事务是最小化调用的一种很棒的方法,只要它们是不会导致锁定的快速查询,我就可以随时指向这个方向。在这些情况下,NHibernate一直是救世主。
答案 2 :(得分:3)
我对数据库的每次写操作都使用事务 因此,在较大的事务中包含了相当多的小“事务”,并且嵌套代码中基本上存在未完成的事务计数。如果在结束父母时有任何未完成的孩子,则全部回滚。
我更喜欢可用的客户端事务处理。如果你被降级为sps或其他服务器端逻辑工作单元,服务器端事务就可以了。
答案 3 :(得分:2)
哇!很多问题!
直到一年前,我100%依赖交易。现在只有98%。在高流量网站的特殊情况下(如Sara所述)以及高分区数据,强制执行分布式事务的需要,可以采用无事务架构。现在,您必须在应用程序中编写参照完整性代码。
此外,我喜欢使用注释(我是一个Java人)和方面以声明方式管理事务。这是确定事务边界的一种非常简洁的方法,它包括事务传播功能。
答案 4 :(得分:2)
就像一个FYI ......嵌套交易可能很危险。它只会增加陷入僵局的可能性。因此,虽然它是好的和必要的,但它的实施方式在更高的数量情况下很重要。
答案 5 :(得分:2)
服务器端事务,每秒35,000个事务,SQL Server:10 lessons from 35K tps
我们只使用服务器端交易:
其他:
我们每天处理数百万个INSERT行(一些通过临时表进行批处理),完整的OLTP,没有问题。但不是35k tps。
答案 6 :(得分:0)
这是嵌套T-SQL事务的有趣链接:http://aleemkhan.wordpress.com/2006/07/21/t-sql-error-handling-pattern-for-nested-transactions-and-stored-procedures/
答案 7 :(得分:0)
正如Sara Chipps所说,交易对于高流量应用来说是过度的。所以我们应该尽可能地避免它。换句话说,我们使用BASE architecture而不是ACID。易趣是一个典型的案例。 Ebay架构中根本不使用分布式事务。但是对于eventual consistency,你必须自己做一些技巧。