Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate, сохронения более 100000 записей быстро! 
:(
    Опции темы
unkis
  Дата 25.4.2007, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



Ребята как можно оптимировать следующий код, чтобы, сохранения происходило ещё быстрее.

Есть лист, в нём более ста тысяч объектов, их все надо сохранить.

соединения с базой открываю один раз, ну вообщем вот код, как можно его ещё оптимироовать, если вообще возможно?

Код

public class Controller {
    

    private static ArrayList<RequestLocation> requestLocationList = new ArrayList<RequestLocation>();
        EntityManagerFactory emf;
        private EntityManager entityManager;
        private EntityTransaction tx2;    

        private Controller() {
            emf = Persistence.createEntityManagerFactory("example",    new Properties());
            entityManager = emf.createEntityManager();
            tx2 = entityManager.getTransaction();

        }

..............................
.............................
..............................
//сохраняем объекты.
    public Long saveRequestLocation(final ArrayList<RequestLocation> requestLocationList) {
        
        try {
            tx2.begin();
            for (RequestLocation requestLocation : requestLocationList) {
                if (entityManager.find(Location.class,requestLocation.getLocation().getLocation_id())==null) {
                    entityManager.persist(requestLocation.getLocation());
                    entityManager.persist(requestLocation);
                }else{        
                    requestLocation.setLocation(entityManager.find(Location.class,requestLocation.getLocation().getLocation_id()));
                entityManager.persist(requestLocation);
                }
            }
            tx2.commit();
        } catch (Exception e) {
            
            e.printStackTrace();
            System.err.println(e.getMessage());
            System.exit(0);
        }

        return null;

    }
 








--------------------
www.unkis.com
PM MAIL WWW   Вверх
tux
Дата 26.4.2007, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(unkis @  25.4.2007,  22:38 Найти цитируемый пост)
как можно его ещё оптимироовать, если вообще возможно?

Делать все операции сохранения в БД в одной транзакции.
PM MAIL Skype GTalk Jabber YIM   Вверх
unkis
  Дата 26.4.2007, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



так не подходит, потому что эти данные мне нужны потом что бы можно было узнать сохранял ли я такие данные уже или нет.

то есть
Код

 if (entityManager.find(Location.class,requestLocation.getLocation().getLocation_id())==null)


если я всё буду делать в одной транзакции, то здесь всегда будет равно null хоте это не так.





--------------------
www.unkis.com
PM MAIL WWW   Вверх
tux
Дата 26.4.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(unkis @  26.4.2007,  10:47 Найти цитируемый пост)
так не подходит

Тогда никак. Вообще говоря, Hibernate здесь совершенно не при чем. Оптимизировать БД надо. Хотя и этим вряд ли возможно добиться значительной прибавки производительности.
PM MAIL Skype GTalk Jabber YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0452 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.