如果我将NHibernate配置为20的批量大小,我是否可能在常规的非批量更新相关方案中遇到问题?
我的应用程序执行的大多数更新/插入都是一次性的。但在某些情况下,我正在进行大规模更新/插入,这将受益于批处理。我是否应该为这些配置使用不同的会话配置,或者您认为我可以安全地将批量大小留给整个应用程序?
我问的原因是,为批处理方案设置一个不同的会话是很麻烦的(因为这是一个带有每个请求会话的Web应用程序)。
答案 0 :(得分:2)
在NH documentation中,提到的批量更新的唯一不利之处是:
乐观并发检查可能是 因为ADO.NET 2.0没有受损 返回受影响的行数 批处理中的每个语句,只有 受影响的总行数 批次。
我不认为这对小批量来说是个问题。所以我怀疑更高的批量大小会对应用程序的正常运行产生负面影响。
但是,您应该考虑为批处理操作创建一个新会话。正常的NHibernate会话将是inefficient for batch updates/inserts,因为第一级缓存会跟踪每个对象。您可以通过定期执行session.Flush(); session.Clear();
手动控制此操作,但可能更容易使用StatelessSession。