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秒或更少的时间(这对我来说是可以接受的)
所以我的问题是这种方法有这么多优点/缺点?我只能说:单独的事务:
优点:
- 创建事务的时间更少
缺点:
- 数据库上的长锁,因为长提交
- 非常短的锁,因为快速提交
缺点/strong>
- 在创建事务上花费更多时间
对我来说更重要的是花时间在"锁定数据库"上,而不是创建事务。那么这种方法还有其他的优点吗?或者还有其他更好的方法?
我想建议这不是关于时间,而是关于ACID…更具体地说,这些更新是一个合乎逻辑的"整体"吗?当谈到事务粒度时,这应该是关键。
另一种判断方法是如果其中一个更新失败会发生什么?听起来,您不希望所有更新都回滚,因此拆分它们是好的(因此可能是并行的,从而会更快?)
不知道应用程序的细节:为相关的根聚合执行多个事务似乎很好。
换句话说,当更新在不同的项目上时,您可能会考虑将它们放在某个存储库中。
CurrentItem ci = repository.get(id)
ci.dataUpdate(newInput)
Repository.Update(ci)