1

我们有大约 100,000 条记录要插入数据库。在 Hibernate Batch 插入中执行此操作是个好主意吗?选择批量大小的策略应该是什么?

或者我们应该为批量插入调用存储过程?无法获取有关将对象数组从 Hibernate 传递到 DB 存储过程的任何信息。

或者两者的混合和匹配会加速这个过程。喜欢批量调用Stored Proc?

4

1 回答 1

2

为了有效地批量插入,请确保启用以下属性:

<property name="hibernate.order_updates" value="true"/>
<property name="hibernate.order_inserts" value="true"/>
<property name="hibernate.jdbc.batch_versioned_data" value="true"/>
<property name="hibernate.jdbc.batch_size" value="50"/>

还要确保您没有将 IDENTITY 用于您的实体 @Id 列。IDENTITY 生成器禁用批处理。

我建议您尝试增强型生成器,尤其是pooled-lo 优化器,以防您使用支持序列的数据库(Oracle、PostgreSQL、SQL Server 2008)。

您可以从 Hibernate 调用存储过程,但它对于选择数据比批量插入更有用。

如果建议的 Hibernate 批处理支持还不够,您可能应该尝试原生存储过程。

您选择的任何方法都需要注意长时间运行的事务。长时间运行的事务持有锁,撤消/重做数据库日志可能会增长并使您的事务变得更慢。

于 2014-11-06T14:45:04.620 回答