nhibernate多个交易的优点和缺点

时间:2015-07-29 08:00:14

标签: c# nhibernate transactions

您好我的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();
} 
...

单次提交大约需要一秒或更少(这对我来说是可以接受的时间)

所以我的问题是这种方法有哪些优点/缺点? 我只能提到: 单笔交易:

优点:

  1. 减少'创建'交易的时间
  2. 缺点:

    1. 很长时间锁定db,因为提交时间很长
    2. 多次交易

      优点

      1. 因为快速提交而在db上进行非常短的锁定
      2. 缺点

        1. 花费在“创建”交易上的时间更多
        2. 对我来说,更重要的是花时间“锁定数据库”而不是创建交易。那么这种方法还有其他优点吗?或者还有其他更好的方法?

2 个答案:

答案 0 :(得分:0)

我想建议它更少关于时间和更多关于ACID ......更具体地说,这些更新是合乎逻辑的整体' ?在涉及事务粒度时,这应该是关键。

另一种决定方法是,如果其中一个更新失败,会发生什么?听起来你希望所有更新都要回滚,所以拆分它们很好(也许因此可以并行,因此会更快?)

答案 1 :(得分:0)

不知道应用程序的详细信息:为相关根聚合执行多个事务似乎没问题。

换句话说,当更新在不同的项目上时,您可以考虑将它们放在某个repository.Update(newItem)中。

CurrentItem ci = repository.get(id) 
ci.dataUpdate(newInput)
Repository.Update(ci)