powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / оптимизация hibernate
26 сообщений из 26, показаны все 2 страниц
оптимизация hibernate
    #38781330
reset4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть приложение, которое парсит некий текстовый файл и пишет все это в 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
оптимизация hibernate
    #38781332
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
reset4Вопрос:
- как можно ускорить запись с помощью Hibernate?Попробуйте так .

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

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

Вопрос соответственно отсюда... можно ли это победить?
...
Рейтинг: 0 / 0
оптимизация hibernate
    #38781513
reset4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczreset4задача учебная для понимания возможностей (и ограничений?) Hibernate.
В дальнейшем будет использоваться в рабочем приложении где будет "100500 ассоциаций и их лень разруливать" ;) .
Ну, вот для вашей задачи массового импорта не подходит совершенно. Но вы попробуйте для начала использовать StatelessSession. Должно шуршать намного быстрее.
уже пытаюсь
...
Рейтинг: 0 / 0
оптимизация hibernate
    #38781514
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
оптимизация hibernate
    #38781535
reset4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
оптимизация hibernate
    #38781553
reset4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видимо всё из-за этого, не могу понять, что это значит...

Hibernate disables insert batching at the JDBC level transparently if you use an identity identifier generator.
...
Рейтинг: 0 / 0
оптимизация hibernate
    #38781561
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
оптимизация hibernate
    #38781565
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
оптимизация hibernate
    #38781660
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
reset4

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

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

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

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


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

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

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

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

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


hiber вроде подходящий инструмент для этого.
просто не надо такие безуспешно большие транзакции делать.
...
Рейтинг: 0 / 0
оптимизация hibernate
    #38781875
reset4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо!
Еще раз все проверил/настроил и заработало.

на 7 секунд дольше прямой записи из файла.

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


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