hibernate多事务的优点和缺点

本文关键字:缺点 事务 hibernate | 更新日期: 2023-09-27 18:05:29

嗨,我有一个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秒或更少的时间(这对我来说是可以接受的)

所以我的问题是这种方法有这么多优点/缺点?我只能说:单独的事务:

优点:

  1. 创建事务的时间更少

缺点:

  1. 数据库上的长锁,因为长提交
多个事务

  1. 非常短的锁,因为快速提交
<

缺点/strong>

  1. 在创建事务上花费更多时间

对我来说更重要的是花时间在"锁定数据库"上,而不是创建事务。那么这种方法还有其他的优点吗?或者还有其他更好的方法?

hibernate多事务的优点和缺点

我想建议这不是关于时间,而是关于ACID…更具体地说,这些更新是一个合乎逻辑的"整体"吗?当谈到事务粒度时,这应该是关键。

另一种判断方法是如果其中一个更新失败会发生什么?听起来,您不希望所有更新都回滚,因此拆分它们是好的(因此可能是并行的,从而会更快?)

不知道应用程序的细节:为相关的根聚合执行多个事务似乎很好。

换句话说,当更新在不同的项目上时,您可能会考虑将它们放在某个存储库中。

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