【问题标题】:Hibernate Batch update vs Stored ProcedureHibernate 批量更新与存储过程
【发布时间】:2014-11-06 11:02:21
【问题描述】:

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

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

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

【问题讨论】:

    标签: java hibernate jpa stored-procedures batch-insert


    【解决方案1】:

    对于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 生成器禁用批处理。

    如果您使用支持序列的数据库(Oracle、PostgreSQL、SQL Server 2008),我建议您尝试enhanced generators,尤其是pooled-lo optimizer

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      相关资源
      最近更新 更多