проблема с производительностью режима гибернации, сохраняется по одному или массово?

У меня есть текстовый файл ~6 ГБ, который мне нужно проанализировать, а затем сохранить. При «разборе» я читаю строку из файла (обычно 2000 символов ), создаю объект Car -из строки и позже сохраняю его.

Я использую шаблон производителя-потребителя для синтаксического анализа и сохранения и задаюсь вопросом, имеет ли какое-то значение (по соображениям производительности )сохранять один объект за раз или 1000 (или любое другое количество )в один коммит?

На данный момент мне требуется >2 часа, чтобы сохранить все (3 миллиона строк )и мне кажется, что это слишком много времени (или я могу ошибаться ).

В настоящее время я занимаюсь этим:

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

Прежде чем вносить какие-либо изменения в дизайн, мне было интересно, есть ли причина, по которой этот дизайн лучше (или нет ), и если да, то какой должен быть размер автомобиля ()? Кроме того, считается ли открытие/закрытие сеанса дорогим?

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();
    }
}
6
задан adhg 23 April 2012 в 02:27
поделиться