|
|
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
Есть приложение, которое парсит некий текстовый файл и пишет все это в MySql. Вопрос именно по записи в базу данных. В упрощенном представлении запись выглядит примерно так. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. при записи около 1млн строк commit() висит около 3 минут. При этом прямая запись в MySql (скрптом из файла) проходит примерно 1 минуту. Вопрос: - как можно ускорить запись с помощью Hibernate? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2014, 23:29 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
reset4Вопрос: - как можно ускорить запись с помощью Hibernate?Попробуйте так . ЗЫ. Но лучше не использовать hibernate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2014, 23:43 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
не прокатывает, просто уменьшается объем памяти во время записи. А скорость остается такая же. Есть еще куда можно покопать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 09:02 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
reset4Есть приложение, которое парсит некий текстовый файл и пишет все это в MySql. И зачем этому приложению Hibernate??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 09:18 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
reset4 , 1) Включите show_sql, и убедитесь, что у вас не создается по одному запросу на каждую запись. 2) Разберитесь, куда уходит время - что съедает Hibernate, а что непосредственно запись в базу. Других вариантов я здесь не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 09:40 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
cdtyjv, На сколько я помню, для такой задачи стоит использовать StatelessSesssion. Но ещё помню, что народ очень сильно ругался и на StatelessSesssion тоже. Смысла в Hibernate тут минимум. Разве что в записях 100500 ассоциаций и их лень разруливать? Но я сильно в этом сомневаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 09:47 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
задача учебная для понимания возможностей (и ограничений?) Hibernate. В дальнейшем будет использоваться в рабочем приложении где будет "100500 ассоциаций и их лень разруливать" ;) . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 10:03 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
reset4задача учебная для понимания возможностей (и ограничений?) Hibernate. В дальнейшем будет использоваться в рабочем приложении где будет "100500 ассоциаций и их лень разруливать" ;) . Ну, вот для вашей задачи массового импорта не подходит совершенно. Но вы попробуйте для начала использовать StatelessSession. Должно шуршать намного быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 10:07 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
cdtyjv reset4 , 1) Включите show_sql, и убедитесь, что у вас не создается по одному запросу на каждую запись. 2) Разберитесь, куда уходит время - что съедает Hibernate, а что непосредственно запись в базу. Других вариантов я здесь не вижу. 1) хм... и правда на каждую запись по запросу... 2) см.2 Вопрос соответственно отсюда... можно ли это победить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 10:35 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
Blazkowiczreset4задача учебная для понимания возможностей (и ограничений?) Hibernate. В дальнейшем будет использоваться в рабочем приложении где будет "100500 ассоциаций и их лень разруливать" ;) . Ну, вот для вашей задачи массового импорта не подходит совершенно. Но вы попробуйте для начала использовать StatelessSession. Должно шуршать намного быстрее. уже пытаюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 10:35 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
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> ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 10:40 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
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> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 10:55 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
Видимо всё из-за этого, не могу понять, что это значит... Hibernate disables insert batching at the JDBC level transparently if you use an identity identifier generator. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 11:10 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
reset4 , Если вы работаете с IDENTITY генератором, то Хиберу всегда будет сохранять по одной строчке. Это надо для того, что бы после сохранения вытащить значение идентити из базы, и вставить его в ID поле вашего объекта. Собственно, при вызове save() это будет происходить сразу же, а при вызове persist() - отложенно в момент флаша. Но суть одна - один запрос на одну запись. Вам надо сохранять все это руками. Например, через этот метод: https://docs.jboss.org/hibernate/core/3.3/api/org/hibernate/Session.html#doWork(org.hibernate.jdbc.Work) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 11:13 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 11:18 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
reset4 при записи около 1млн строк commit() висит около 3 минут. При этом прямая запись в MySql (скрптом из файла) проходит примерно 1 минуту. Вопрос: - как можно ускорить запись с помощью Hibernate? commit те меньшими партиями, По 100-1000 записей. кардинально - меняйте engine на Myisam, но это совсем другой MySQL будет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 12:22 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
Blazkowiczreset4Есть приложение, которое парсит некий текстовый файл и пишет все это в MySql. И зачем этому приложению Hibernate??? очевидно, чтобы не писать Insert руками... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 12:23 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
MasterZivочевидно, чтобы не писать Insert руками... Для этого есть и другие инструменты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 12:24 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
BlazkowiczMasterZivочевидно, чтобы не писать Insert руками... Для этого есть и другие инструменты. какие же?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 12:33 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
MasterZivreset4 при записи около 1млн строк commit() висит около 3 минут. При этом прямая запись в MySql (скрптом из файла) проходит примерно 1 минуту. Вопрос: - как можно ускорить запись с помощью Hibernate? commit те меньшими партиями, По 100-1000 записей. кардинально - меняйте engine на Myisam, но это совсем другой MySQL будет... чуть выше писал, снижается используемая память, но скорость не меняется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 12:38 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
reset4какие же?) - SQL билдеры - SQL генераторы - Мапперы файлов на RDBMS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 12:39 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
в общем всетаки проблема в Fatch, не пойму почему не срабатывает настройка, а в любом случае для каждой записи отдельный запрос... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 12:40 |
|
||
|
оптимизация hibernate
|
|||
|---|---|---|---|
|
#18+
reset4в общем всетаки проблема в Fatch, не пойму почему не срабатывает настройка, а в любом случае для каждой записи отдельный запрос... При чум тет Fetch? Это же параметр чтения? Identity заменили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 12:41 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=156&tid=2126425]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 346ms |

| 0 / 0 |
