这样包装一个需要三个小时才能在 TransactionScope 中运行的进程有什么问题吗:
Dim transactionOptions As TransactionOptions = New TransactionOptions()
Using scope As New TransactionScope(TransactionScopeOption.Required, transactionOptions)
msgbox("Message Box 1")
scope.complete()
End Using
msgbox("Message Box 2")
从消息框 1 到消息框 2 大约需要五个小时。
我敢肯定我过去曾尝试过另一个长时间运行的进程,并且事务不断超时(我可能是错的),所以我在每个循环上都提交。 我在某处读到你应该尽可能多地承诺。 我的方法有什么问题吗?
有四个基本属性.. 是的,每个人都知道...称为酸。
这里只有第一个。
原子性:所以这个属性说"在原子事务中,一系列数据库操作要么全部发生,要么什么都不发生。
因此,假设您的 5 小时运行事务有 10000 个数据库操作。您真的希望它们全部发生(10000 次操作)还是根本不发生?以更好的方式,您是否可以拆分多个事务而不是单个事务?
多久提交一次?基本上问题是:您的最小交易是什么?
考虑一个银行账户的例子(非常非常简化):你可能有 10000 钱 从一个账户转账到另一个账户,但如果你从账户 A 转移到账户 B,(假设这将通过两次插入来完成)这是一个事务 - 提交这个。 然后是下一个。