Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / оптимизация hibernate / 25 сообщений из 26, страница 1 из 2
19.10.2014, 23:29
    #38781330
reset4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
Есть приложение, которое парсит некий текстовый файл и пишет все это в MySql.

Вопрос именно по записи в базу данных.
В упрощенном представлении запись выглядит примерно так.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
//открываем сессию, начинаем транзакцию
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();

//цикл по заполнению сущностей данными из файла
while (){
MyEntity myEntity = new MyEntity();
session.persist(myEntity);
}

session.getTransaction().commit();




при записи около 1млн строк commit() висит около 3 минут. При этом прямая запись в MySql (скрптом из файла) проходит примерно 1 минуту.

Вопрос:
- как можно ускорить запись с помощью Hibernate?
...
Рейтинг: 0 / 0
19.10.2014, 23:43
    #38781332
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
reset4Вопрос:
- как можно ускорить запись с помощью Hibernate?Попробуйте так .

ЗЫ. Но лучше не использовать hibernate.
...
Рейтинг: 0 / 0
20.10.2014, 00:41
    #38781343
YamahaR1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
...
Рейтинг: 0 / 0
20.10.2014, 09:02
    #38781433
reset4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
не прокатывает, просто уменьшается объем памяти во время записи. А скорость остается такая же. Есть еще куда можно покопать?
...
Рейтинг: 0 / 0
20.10.2014, 09:18
    #38781440
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
reset4Есть приложение, которое парсит некий текстовый файл и пишет все это в MySql.
И зачем этому приложению Hibernate???
...
Рейтинг: 0 / 0
20.10.2014, 09:40
    #38781452
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
reset4 ,
1) Включите show_sql, и убедитесь, что у вас не создается по одному запросу на каждую запись.
2) Разберитесь, куда уходит время - что съедает Hibernate, а что непосредственно запись в базу.
Других вариантов я здесь не вижу.
...
Рейтинг: 0 / 0
20.10.2014, 09:47
    #38781464
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
cdtyjv,

На сколько я помню, для такой задачи стоит использовать StatelessSesssion. Но ещё помню, что народ очень сильно ругался и на StatelessSesssion тоже. Смысла в Hibernate тут минимум. Разве что в записях 100500 ассоциаций и их лень разруливать? Но я сильно в этом сомневаюсь.
...
Рейтинг: 0 / 0
20.10.2014, 10:03
    #38781484
reset4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
задача учебная для понимания возможностей (и ограничений?) Hibernate.
В дальнейшем будет использоваться в рабочем приложении где будет "100500 ассоциаций и их лень разруливать" ;) .
...
Рейтинг: 0 / 0
20.10.2014, 10:07
    #38781487
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
reset4задача учебная для понимания возможностей (и ограничений?) Hibernate.
В дальнейшем будет использоваться в рабочем приложении где будет "100500 ассоциаций и их лень разруливать" ;) .
Ну, вот для вашей задачи массового импорта не подходит совершенно. Но вы попробуйте для начала использовать StatelessSession. Должно шуршать намного быстрее.
...
Рейтинг: 0 / 0
20.10.2014, 10:35
    #38781511
reset4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
cdtyjv reset4 ,
1) Включите show_sql, и убедитесь, что у вас не создается по одному запросу на каждую запись.
2) Разберитесь, куда уходит время - что съедает Hibernate, а что непосредственно запись в базу.
Других вариантов я здесь не вижу.
1) хм... и правда на каждую запись по запросу...
2) см.2

Вопрос соответственно отсюда... можно ли это победить?
...
Рейтинг: 0 / 0
20.10.2014, 10:35
    #38781513
reset4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
Blazkowiczreset4задача учебная для понимания возможностей (и ограничений?) Hibernate.
В дальнейшем будет использоваться в рабочем приложении где будет "100500 ассоциаций и их лень разруливать" ;) .
Ну, вот для вашей задачи массового импорта не подходит совершенно. Но вы попробуйте для начала использовать StatelessSession. Должно шуршать намного быстрее.
уже пытаюсь
...
Рейтинг: 0 / 0
20.10.2014, 10:40
    #38781514
DDiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
reset4[
1) хм... и правда на каждую запись по запросу...
2) см.2
Вопрос соответственно отсюда... можно ли это победить?
If you are undertaking batch processing you will need to enable the use of JDBC batching. This is absolutely essential if you want to achieve optimal performance. Set the JDBC batch size to a reasonable number (10-50, for example):
у вас указано авторhibernate.jdbc.batch_size <somevalue> ?
...
Рейтинг: 0 / 0
20.10.2014, 10:55
    #38781535
reset4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
DDiverreset4[
1) хм... и правда на каждую запись по запросу...
2) см.2
Вопрос соответственно отсюда... можно ли это победить?
If you are undertaking batch processing you will need to enable the use of JDBC batching. This is absolutely essential if you want to achieve optimal performance. Set the JDBC batch size to a reasonable number (10-50, for example):
у вас указано авторhibernate.jdbc.batch_size <somevalue> ?
да, стоит 30
<property name="hibernate.jdbc.fetch_size">30</property>
...
Рейтинг: 0 / 0
20.10.2014, 11:10
    #38781553
reset4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
Видимо всё из-за этого, не могу понять, что это значит...

Hibernate disables insert batching at the JDBC level transparently if you use an identity identifier generator.
...
Рейтинг: 0 / 0
20.10.2014, 11:13
    #38781561
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
reset4 ,
Если вы работаете с IDENTITY генератором, то Хиберу всегда будет сохранять по одной строчке. Это надо для того, что бы после сохранения вытащить значение идентити из базы, и вставить его в ID поле вашего объекта. Собственно, при вызове save() это будет происходить сразу же, а при вызове persist() - отложенно в момент флаша. Но суть одна - один запрос на одну запись.
Вам надо сохранять все это руками. Например, через этот метод: https://docs.jboss.org/hibernate/core/3.3/api/org/hibernate/Session.html#doWork(org.hibernate.jdbc.Work)
...
Рейтинг: 0 / 0
20.10.2014, 11:18
    #38781565
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
reset4Hibernate disables insert batching at the JDBC level transparently if you use an identity identifier generator.
Вероятно то что в batch insert пропадает смысл, так как для каждой записи приходится генерить ключ при вставке.
Поэтому для массовой вставки, вероятно, есть смысл применить другую стратегию генерации ключей, оптимизированую для массового INSERT.
http://shengchien.blogspot.com/2010/10/hibernate-batch-processing-with-mysql.html
...
Рейтинг: 0 / 0
20.10.2014, 12:22
    #38781660
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
reset4

при записи около 1млн строк commit() висит около 3 минут. При этом прямая запись в MySql (скрптом из файла) проходит примерно 1 минуту.

Вопрос:
- как можно ускорить запись с помощью Hibernate?

commit те меньшими партиями, По 100-1000 записей.

кардинально - меняйте engine на Myisam, но это совсем другой MySQL будет...
...
Рейтинг: 0 / 0
20.10.2014, 12:23
    #38781661
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
Blazkowiczreset4Есть приложение, которое парсит некий текстовый файл и пишет все это в MySql.
И зачем этому приложению Hibernate???


очевидно, чтобы не писать Insert руками...
...
Рейтинг: 0 / 0
20.10.2014, 12:24
    #38781663
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
MasterZivочевидно, чтобы не писать Insert руками...
Для этого есть и другие инструменты.
...
Рейтинг: 0 / 0
20.10.2014, 12:33
    #38781678
reset4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
BlazkowiczMasterZivочевидно, чтобы не писать Insert руками...
Для этого есть и другие инструменты.
какие же?)
...
Рейтинг: 0 / 0
20.10.2014, 12:38
    #38781681
reset4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
MasterZivreset4
при записи около 1млн строк commit() висит около 3 минут. При этом прямая запись в MySql (скрптом из файла) проходит примерно 1 минуту.

Вопрос:
- как можно ускорить запись с помощью Hibernate?

commit те меньшими партиями, По 100-1000 записей.

кардинально - меняйте engine на Myisam, но это совсем другой MySQL будет...
чуть выше писал, снижается используемая память, но скорость не меняется
...
Рейтинг: 0 / 0
20.10.2014, 12:39
    #38781683
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
reset4какие же?)
- SQL билдеры
- SQL генераторы
- Мапперы файлов на RDBMS
...
Рейтинг: 0 / 0
20.10.2014, 12:40
    #38781687
reset4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
в общем всетаки проблема в Fatch, не пойму почему не срабатывает настройка, а в любом случае для каждой записи отдельный запрос...
...
Рейтинг: 0 / 0
20.10.2014, 12:41
    #38781689
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
reset4в общем всетаки проблема в Fatch, не пойму почему не срабатывает настройка, а в любом случае для каждой записи отдельный запрос...
При чум тет Fetch? Это же параметр чтения? Identity заменили?
...
Рейтинг: 0 / 0
20.10.2014, 13:04
    #38781729
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация hibernate
reset4Blazkowiczпропущено...

Для этого есть и другие инструменты.
какие же?)


hiber вроде подходящий инструмент для этого.
просто не надо такие безуспешно большие транзакции делать.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / оптимизация hibernate / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]