Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate性能问题,一个一个持续还是批量?_Java_Database_Hibernate_Persistence - Fatal编程技术网

Java hibernate性能问题,一个一个持续还是批量?

Java hibernate性能问题,一个一个持续还是批量?,java,database,hibernate,persistence,Java,Database,Hibernate,Persistence,我有一个6GB的文本文件,我需要解析它,然后保存。通过“解析”,我从文件中读取一行(通常为2000个字符),从该行创建一个Car对象,然后我将其持久化 我正在使用生产者-消费者模式来解析和持久化,我想知道(出于性能原因)一次持久化一个对象或一次提交1000个(或任何其他数量)是否会有什么不同 目前,我花了超过2小时的时间来保存所有内容(300万行),而且对我来说时间太长了(或者我可能错了) 目前我正在这样做: public void persistCar(Car car) throws Exce

我有一个6GB的文本文件,我需要解析它,然后保存。通过“解析”,我从文件中读取一行(通常为2000个字符),从该行创建一个Car对象,然后我将其持久化

我正在使用生产者-消费者模式来解析和持久化,我想知道(出于性能原因)一次持久化一个对象或一次提交1000个(或任何其他数量)是否会有什么不同

目前,我花了超过2小时的时间来保存所有内容(300万行),而且对我来说时间太长了(或者我可能错了)

目前我正在这样做:

public void persistCar(Car car) throws Exception
{
    try
    {
        carDAO.beginTransaction();  //get hibernate session...

        //do all save here.

        carDAO.commitTransaction(); // commit the session

    }catch(Exception e)
    {
        carDAO.rollback();
        e.printStackTrace(); 
    }
    finally
    {
        carDAO.close();
    }
}
在我进行任何设计更改之前,我想知道这种设计更好(或不更好)是否有原因,如果是这样,应该是什么样的车。size()?此外,是否认为会话的打开/关闭代价高昂

public void persistCars(List<Car> cars) throws Exception
{
    try
    {
        carDAO.beginTransaction();  //get hibernate session...
        for (Car car : cars)    
        //do all save here.

        carDAO.commitTransaction(); // commit the session

    }catch(Exception e)
    {
        carDAO.rollback();
        e.printStackTrace(); 
    }
    finally
    {
        carDAO.close();
    }
}
公共车辆(列出车辆)引发异常
{
尝试
{
carDAO.beginTransaction();//获取休眠会话。。。
用于(汽车:汽车)
//所有的都保存在这里。
carDAO.commitTransaction();//提交会话
}捕获(例外e)
{
carDAO.rollback();
e、 printStackTrace();
}
最后
{
carDAO.close();
}
}

传统上,hibernate不适合大容量插入。有一些方法可以在一定程度上优化它

就拿这个例子来说,

Session Session=sessionFactory.openSession();
事务tx=会话.beginTransaction();

对于(int i=0;我将尝试此代码的性能,然后返回此答案。谢谢!
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

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();
    }
}

tx.commit();
session.close();