您好我的NHibernate交易有问题。
我必须做几次更新,但是当我使用时:
using (var trans = session.BeginTransaction())
{
.....
trans.commit();
}
提交花了我很长时间大约1分钟或者什么(在我的情况下这是不可接受的)
所以我每次更新使用多个事务,我有这样的事情:
using (var trans1 = session.BeginTransaction())
{
.....
trans1.commit();
}
using (var trans1 = session.BeginTransaction())
{
.....
trans1.commit();
}
using (var trans1 = session.BeginTransaction())
{
.....
trans1.commit();
}
...
单次提交大约需要一秒或更少(这对我来说是可以接受的时间)
所以我的问题是这种方法有哪些优点/缺点? 我只能提到: 单笔交易:
优点:
缺点:
多次交易
优点
缺点
对我来说,更重要的是花时间“锁定数据库”而不是创建交易。那么这种方法还有其他优点吗?或者还有其他更好的方法?
答案 0 :(得分:0)
我想建议它更少关于时间和更多关于ACID ......更具体地说,这些更新是合乎逻辑的整体' ?在涉及事务粒度时,这应该是关键。
另一种决定方法是,如果其中一个更新失败,会发生什么?听起来你不希望所有更新都要回滚,所以拆分它们很好(也许因此可以并行,因此会更快?)
答案 1 :(得分:0)
不知道应用程序的详细信息:为相关根聚合执行多个事务似乎没问题。
换句话说,当更新在不同的项目上时,您可以考虑将它们放在某个repository.Update(newItem)中。
CurrentItem ci = repository.get(id)
ci.dataUpdate(newInput)
Repository.Update(ci)