C# 数据导入策略上的nhibernate事务范围
我们需要在数据库之间导入大量数据,涉及多个表 交易的最佳策略是什么?我猜打开一个会话,有一个大事务,并在流程结束时提交它是一个坏主意C# 数据导入策略上的nhibernate事务范围,c#,nhibernate,transactions,data-import,C#,Nhibernate,Transactions,Data Import,我们需要在数据库之间导入大量数据,涉及多个表 交易的最佳策略是什么?我猜打开一个会话,有一个大事务,并在流程结束时提交它是一个坏主意 每张桌子后的承诺会更好吗?如果一个特定的表与其他表有依赖关系,该如何处理呢?如果可能,您可以尝试在单独的事务中导入没有依赖关系的表,然后在另一个事务中导入具有依赖关系的表 如果这不可能,我建议使用一个大型事务。回到数据库基础,当创建事务时,您打算添加到数据库中的所有数据都存储在内存中,并且仅在该场景中调用提交(?)后才添加到数据库中,一个大型事务不会潜在地消耗大量
每张桌子后的承诺会更好吗?如果一个特定的表与其他表有依赖关系,该如何处理呢?如果可能,您可以尝试在单独的事务中导入没有依赖关系的表,然后在另一个事务中导入具有依赖关系的表
如果这不可能,我建议使用一个大型事务。回到数据库基础,当创建事务时,您打算添加到数据库中的所有数据都存储在内存中,并且仅在该场景中调用提交(?)后才添加到数据库中,一个大型事务不会潜在地消耗大量内存吗?是的,但是如果您有大量需要保持一致的数据,那么就没有其他需要的了,除了确保自己的数据仍然是consistent@user1838662不知何故,我发现现代先进的数据库系统甚至在提交之前都无法将数据存储到磁盘上,这一点令人怀疑。当然,不同的数据库引擎可能会以不同的方式实现这一点。我怀疑在进行更改时,许多人会将磁盘写入数据排队(但不会等到事务的准备阶段才完成写入)。如果您计划使用NHibernate导入数据,至少要使用
无状态会话
。我不熟悉无状态会话,我猜它提供了一种更快的插入数据的方法?无状态会话不使用一级缓存,也不使用二级缓存或查询缓存-对于批量操作,性能会比会话有所提高(不过,请看一下使用无状态会话的注意事项)