当前位置:  开发笔记 > 编程语言 > 正文

NHibernate批量插入或更新

如何解决《NHibernate批量插入或更新》经验,为你挑选了1个好方法。

嗨,我正在开发一个项目,我们需要每天处理几个xml文件,并使用这些文件中包含的信息填充数据库.

每个文件大约1Mb,包含大约1000条记录; 我们通常需要处理12到25个这些文件.我已经看到了一些关于使用NHibernate的批量插入的信息,但是我们的问题在某种程度上比较棘手,因为xml文件包含与更新记录混合的新记录.

在xml中有一个标志,告诉我们特定记录是新记录还是对现有记录的更新,但不是更改了哪些信息.xml记录不包含我们的数据库标识符,但我们可以使用xml记录中的标识符来唯一地定位数据库中的记录.

到目前为止,我们的策略是确定当前记录是插入还是更新,并且基于我们在数据库上执行插入或者我们进行搜索,然后我们使用来自的信息来更新对象的信息. xml记录,最后我们对DB进行更新.

我们当前的方法存在的问题是我们遇到了数据库锁问题,而且我们的性能下降得非常快.我们已经考虑过一些替代方案,比如为不同的操作设置单独的表,或者甚至是单独的数据库,但是做出这样的举动意味着要做出很大的努力,所以在做出任何决定之前我想先询问社群对这个问题的看法,提前感谢.



1> Mauricio Sch..:

一些想法:

始终尝试使用IStatelessSession进行批量操作.

如果您对性能仍不满意,只需跳过NHibernate并使用特定于此的存储过程或参数化查询,或使用IQuery.ExecuteUpdate()

如果您正在使用SQL Server,则可以将xml格式转换为BCPFORMAT xml,然后对其运行BULK INSERT(仅用于插入)

如果您有太多数据库锁,请尝试对操作进行分组(即首先找出需要插入的内容和更新的内容,然后获取更新的PK,然后运行BULK INSERT进行插入,然后运行更新)

如果解析源文件是性能问题(即它最大化CPU内核),请尝试并行执行(可以使用Parallel Extensions)

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有