Java 使用Hibernate插入(更新)大量实体的最佳方法是什么?

Java 使用Hibernate插入(更新)大量实体的最佳方法是什么?,java,hibernate,orm,jdbc,Java,Hibernate,Orm,Jdbc,我需要执行类似的操作 for (int i = 0; i<=moreThanThousand; i++){ Entity e = new Entity(); insertEntity(e); } Hibernate中是否有批处理机制?在多个线程中执行此工作有意义吗?最佳做法是什么? 对于JDBC,我会使用PreparedStatement的addBatch()和executeBatch()方法,但我不擅长Hibernate。 提前谢谢 您可以使用以

我需要执行类似的操作

   for (int i = 0; i<=moreThanThousand; i++){
       Entity e = new Entity();
       insertEntity(e);
   }
Hibernate中是否有批处理机制?在多个线程中执行此工作有意义吗?最佳做法是什么? 对于JDBC,我会使用PreparedStatement的addBatch()和executeBatch()方法,但我不擅长Hibernate。
提前谢谢

您可以使用以下方法定义批次大小:

hibernate.jdbc.batch_size 20
批量插入/更新很容易:

for ( int i=0; i<100000; i++ ) {
    Customer customer = new Customer(.....);
    session.save(customer);
    if ( i % 20 == 0 ) { //20, same as the JDBC batch size
        //flush a batch of inserts and release memory:
        session.flush();
        session.clear();
    }
}

for(int i=0;i您可以使用以下方法定义批量大小:

hibernate.jdbc.batch_size 20
批量插入/更新很容易:

for ( int i=0; i<100000; i++ ) {
    Customer customer = new Customer(.....);
    session.save(customer);
    if ( i % 20 == 0 ) { //20, same as the JDBC batch size
        //flush a batch of inserts and release memory:
        session.flush();
        session.clear();
    }
}

<代码> >(int i=0;i)如果你正在处理大量的数据,比如每天导入数据,并且你有一个非常小的处理窗口,那么最好的方法是直接使用JDBC访问你的数据库,考虑所有这些:

  • 垃圾收集器-避免在关键操作上构造和释放数百万个对象
  • 除了数据处理之外的数据导入-尝试使用存储过程处理数据库内的数据。在存储过程中,当数据与其他业务数据(通常需要)关联时,可以达到最佳性能
  • 数据物理验证—解析操作和物理验证您应该只在导入阶段进行,只将清理后的数据留给存储过程,以便根据数据库中的其他业务数据进行验证
  • 流水线-考虑构建一个同时处理多个阶段的流水线,当您导入数据时,已经导入的数据由存储过程异步处理,依此类推。
我可以告诉你,在我们每天只需2小时就可以处理大约800万条记录的系统上(我没有字节数,但容量很大),因此,即使使用允许的最高硬件,这也是达到最佳性能的唯一途径


我希望我已经给了你一个新的有用的方法。

如果你正在处理大量的数据,比如每天导入数据,并且你有一个非常小的处理窗口,那么最好的办法就是直接用JDBC访问你的数据库,考虑所有这些:

  • 垃圾收集器-避免在关键操作上构造和释放数百万个对象
  • 除了数据处理之外的数据导入-尝试使用存储过程处理数据库内的数据。在存储过程中,当数据与其他业务数据(通常需要)关联时,可以达到最佳性能
  • 数据物理验证—解析操作和物理验证您应该只在导入阶段进行,只将清理后的数据留给存储过程,以便根据数据库中的其他业务数据进行验证
  • 流水线-考虑构建一个同时处理多个阶段的流水线,当您导入数据时,已经导入的数据由存储过程异步处理,依此类推。
我可以告诉你,在我们每天只需2小时就可以处理大约800万条记录的系统上(我没有字节数,但容量很大),因此,即使使用允许的最高硬件,这也是达到最佳性能的唯一途径

我希望我已经给了你一个新的有用的方法来考虑。