我们有大约100,000条记录被插入到数据库中。在Hibernate批量插入中这样做会是一个好主意吗?应该选择批量大小的政策是什么?Hibernate批量更新与存储过程
否则我们应该调用一个存储过程来批量插入?无法获得有关从Hibernate传递数组对象到数据库存储过程的任何信息。
或者两者的混合搭配都会加速这一过程。像批量调用Stored Proc一样?
感谢
我们有大约100,000条记录被插入到数据库中。在Hibernate批量插入中这样做会是一个好主意吗?应该选择批量大小的政策是什么?Hibernate批量更新与存储过程
否则我们应该调用一个存储过程来批量插入?无法获得有关从Hibernate传递数组对象到数据库存储过程的任何信息。
或者两者的混合搭配都会加速这一过程。像批量调用Stored Proc一样?
感谢
对于efficient batch inserts请确保您启用以下属性:
<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"/>
另外,还要确保你don't use IDENTITY for your entity @Id column。 IDENTITY生成器禁用批处理。
我建议你尝试enhanced generators,尤其是pooled-lo optimizer,以防你使用支持序列的数据库(Oracle,PostgreSQL,SQL Server 2008)。
您可以从Hibernate中调用存储过程,但对于选择数据比对批量插入更有用。
如果建议的Hibernate批处理支持不够,您应该试试本地存储过程。
您选择的任何方法都需要注意长时间运行的事务。长时间运行的事务持有锁,并且撤销/重做数据库日志可能会增长并使事务更慢。