Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate кто нибудь тестил когда оно помирает? / 25 сообщений из 92, страница 1 из 4
27.08.2020, 19:19
    #39993131
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
есть скажем сущность, автор.
есть сущность книга.
у автора 200 000 000 книг. он талантливый. написал много.

я делаю гет автор и начинаю получать его книги. хибер делает селект * фром книги вхере автор-ид=авторИд.
так вот, этим запросом он выгребет скажем так много.
когда он помрет?
использует ли он хоть какие то там оптимизации типа ленивых списков и т.п.? или вот всё и сразу?
...
Рейтинг: 0 / 0
27.08.2020, 19:34
    #39993136
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
andreykaT

у автора 200 000 000 книг. он талантливый. написал много.

я делаю гет автор и начинаю получать его книги
Наркоман.

https://vladmihalcea.com/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/ Therefore, in reality, @OneToMany is practical only when many means few. Maybe @OneToFew would have been a more suggestive name for this annotation.
...
Рейтинг: 0 / 0
27.08.2020, 19:48
    #39993140
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
Чо хотел то?
Вообще правильно сказали про наркмоанство, но если уж очень хочется совокупляться с крокодилом, то в хибере раньше было что-то вроде fetchSize или maxResultSize, короче гугли hibernate pagination
...
Рейтинг: 0 / 0
27.08.2020, 20:06
    #39993141
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
andreykaT,
Тебя не должно интересовать помрёт. Тебя должно интересовать время чтения. Например зависнет на чтении на 20 минут. Оно тебе надо?
Но не помер же)))))
...
Рейтинг: 0 / 0
27.08.2020, 20:06
    #39993142
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
andreykaT, достаточно один раз прочитать спецификацию JPA (она не большая):

Код: java
1.
2.
3.
4.
5.
6.
Query query = entityManager.createQuery("SELECT f FROM Foo f");
int pageNumber = 1;
int pageSize = 10;
query.setFirstResult((pageNumber-1) * pageSize); 
query.setMaxResults(pageSize);
List <Foo> fooList = query.getResultList();



Никакой мистики в ORM нет, они просто отправляют SQL запросы. Если делаете "SELECT * FROM Foo" на большой таблице, готовьтесь к тому что сессия отвалится по таймауту или по OutOfMemory
...
Рейтинг: 0 / 0
28.08.2020, 06:29
    #39993199
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
andreykaT
есть скажем сущность, автор.
есть сущность книга.
у автора 200 000 000 книг. он талантливый. написал много.

я делаю гет автор и начинаю получать его книги. хибер делает селект * фром книги вхере автор-ид=авторИд.
так вот, этим запросом он выгребет скажем так много.
когда он помрет?
использует ли он хоть какие то там оптимизации типа ленивых списков и т.п.? или вот всё и сразу?


Помрет, когда память выжрет.
Ну или БД соединение пришибёт по таймауту.

:-)
...
Рейтинг: 0 / 0
28.08.2020, 07:12
    #39993207
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
Kachalov
andreykaT, достаточно один раз прочитать спецификацию JPA (она не большая):

Код: java
1.
2.
3.
4.
5.
6.
Query query = entityManager.createQuery("SELECT f FROM Foo f");
int pageNumber = 1;
int pageSize = 10;
query.setFirstResult((pageNumber-1) * pageSize); 
query.setMaxResults(pageSize);
List <Foo> fooList = query.getResultList();



Никакой мистики в ORM нет, они просто отправляют SQL запросы. Если делаете "SELECT * FROM Foo" на большой таблице, готовьтесь к тому что сессия отвалится по таймауту или по OutOfMemory
И вам тоже советую почитать спецификацию :) getResultStream() завезли в JPA 2.2, а предлагаемый вариант с постраничной разбивкой он, откровенно говоря, так себе - работает только в режиме SERIALIZABLE. Да и ТС не нужно это - он хочет делать так:

Код: java
1.
List<Author> authors = book.getAuthors()
...
Рейтинг: 0 / 0
28.08.2020, 07:25
    #39993211
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
>он хочет делать так:
List<Author> authors = book.getAuthors()
= увы. Он по джуниорски считает что код не подстраивается под Большие данные.
На самом деле всегда программист это учитывает руками в своем коде.
Автомата для этого не придумали.
...
Рейтинг: 0 / 0
28.08.2020, 08:02
    #39993223
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
вообще загружать такое количество - это попытка сделать свой вариант субд.
что однозначно ведёт к провалу.
...
Рейтинг: 0 / 0
28.08.2020, 08:25
    #39993231
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
Начиная с того, что автор бредит "у автора 200 000 000 книг. он талантливый. написал много"

Такое большое кол-во в реальной жизни редко когда требуется. Печатать - ни бумаги ни чернил не хватит, просматривать на экране - тем более. Т.е. нормальный бизнес аналитик, увидев такое, тут же должен задуматься "а нафига это надо, почему так много, что же с этим БУДУТ РЕАЛЬНО ДЕЛАТЬ". В 90% постановок, где возникают такие "проблемы", эти данные нифига не нужны, и весь код можно сократить до ";" (ассемблерной инструкции NOP), т.к. все равно, в результате, эти данные отправятся в /dev/null.

Одни из немногих задач, где такие объемы могут фигурировать по бизнес требованиям, какая нибудь offline обработка. Например за ночь, нужно перетащить 100500 миллионов записей из одной СУБД в другую, т.е. то, что называется ETL. Или опять таки, например за ночь, нужно расчитать/сформировать 100500 документов и отправить их по e-mail.

Но даже в таких задачах, тут же пытаются, это кол-во как-то "побить" на мелкие порции и обрабатывать по частям. Или для ускорения (обработка в параллель) или для упрощения обработки ошибок/повторных запусков.

IMHO & AFAIK

Offtopic off

с чего он будет падать? просто добавь оперативки! Но это автору нужно в соседний топик по C, где тема "вектор на триллион объектов".
...
Рейтинг: 0 / 0
28.08.2020, 09:35
    #39993256
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
PetroNotC Sharp
>он хочет делать так:
List<Author> authors = book.getAuthors()
= увы. Он по джуниорски считает что код не подстраивается под Большие данные.
На самом деле всегда программист это учитывает руками в своем коде.
Автомата для этого не придумали.

я пытаюсь понять подойдет ли мне хибер под мои цели. этот запрос делаю не я этот запрос делает хибер.
...
Рейтинг: 0 / 0
28.08.2020, 09:38
    #39993257
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
вадя
вообще загружать такое количество - это попытка сделать свой вариант субд.
что однозначно ведёт к провалу.

я чуть ранее создавал тему. автор-книги. у книг поменялся автор. книг 200 миллионов. мы говорм вот те новый автор. а хибер начинает делать select * from книги where автор_ид=айди_автора

да. я могу конечно сам делать селект книги там с пагинацией или еще как. и по кускам апдейтить. вопрос собссно в этом и есть. можно ли положиться на хибер или ну его.

а вы блин артисты да что за автор который 200 миллионов книг написал. да быть таких авторов не может. может.
...
Рейтинг: 0 / 0
28.08.2020, 10:17
    #39993276
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
andreykaT
PetroNotC Sharp
>он хочет делать так:
List<Author> authors = book.getAuthors()
= увы. Он по джуниорски считает что код не подстраивается под Большие данные.
На самом деле всегда программист это учитывает руками в своем коде.
Автомата для этого не придумали.

я пытаюсь понять подойдет ли мне хибер под мои цели. этот запрос делаю не я этот запрос делает хибер.
еще раз для тугодоходящих.
Ты не должен в коде делать select from миллион.
И хибер не ЗАСТАВЛЯЙ.
Ты сам его заставляешь!
Типо что будет с котом если его не кормить неделю?
Ну глупый же вопрос.?
...
Рейтинг: 0 / 0
28.08.2020, 10:20
    #39993279
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
andreykaT,
>да. я могу конечно сам делать селект книги там с пагинацией или еще как. и по кускам апдейтить. вопрос собссно в этом и есть. можно ли положиться на хибер или ну его.

Иначе твой поинт в том что можно написать красиво, но.... можно ли положиться на либу ХХХХХ если натравить ее на миллирд.
Глупый вопрос?
...
Рейтинг: 0 / 0
28.08.2020, 11:11
    #39993326
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
andreykaT
я чуть ранее создавал тему. автор-книги. у книг поменялся автор. книг 200 миллионов. мы говорм вот те новый автор. а хибер начинает делать select * from книги where автор_ид=айди_автора

да. я могу конечно сам делать селект книги там с пагинацией или еще как. и по кускам апдейтить. вопрос собссно в этом и есть. можно ли положиться на хибер или ну его.

1)
Нормальные люди в нормальных системах вообще ничего не апдейтят.

Создается суррогатный ключ и если автор внезапно: взял фамилию жены/мужа, поменял пол или занялся еще какой нибудь деятельностью, которая меняет его ФИО, то просто меняется ФИО у одной записи, у самого автора, а книги как были, так и остаются.

2)
Делать SELECT что бы апдейтить - вообще за гранью добра и зла. "Апдейтять"... как не странно это может прозвучать.... командой... внезапно... командой... UPDATE !

IMHO & AFAIK
...
Рейтинг: 0 / 0
28.08.2020, 11:15
    #39993330
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
PetroNotC Sharp

...что можно написать красиво, но.... можно ли положиться...


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

IMHO & AFAIK
...
Рейтинг: 0 / 0
28.08.2020, 11:20
    #39993334
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
Понятное дело что тут речь идет не о книгах.

Главное в этом вопросе - не пытаться всю базу данных прогрузить в java-heap.
Безотносительно хибернейта. А вообще. В принципе.
...
Рейтинг: 0 / 0
28.08.2020, 11:20
    #39993336
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
Андрей Панфилов
И вам тоже советую почитать спецификацию :) getResultStream() завезли в JPA 2.2

- и что именно Вы хотели этим сказать? что getResultList() отменили? или что он "плохой"? может хотя бы deprecated? Может Вы решили что ТСу надо будет эти данные итерировать? Так это телепатия, он об этом не писал. Более того, как правило ORM реализуют getResultStream() как getResultList().stream(), т е никаких профитов тут нет (в будущем планируют переделать на какой нибудь ScrollableResults - в 6.x Hibernate ожидают).

Андрей Панфилов
предлагаемый вариант с постраничной разбивкой он, откровенно говоря, так себе - работает только в режиме SERIALIZABLE.

- Вы наверное архитектором работаете и отвечаете на те вопросы которые не задают. В постановке задачи никто вставку данных в процессе чтения производить не собирается, речь идет только об их извлечении.

Андрей Панфилов
Да и ТС не нужно это - он хочет делать так:
Код: java
1.
List<Author> authors = book.getAuthors()


- в случае большого количества связанных записей так конечно делать не стоит (мне это показалось очевидным) и ответ уже был - использовать отдельный запрос с пагинацией. А если пофантазировать и предположить что памяти у JVM много, можно предложить L2-кэш и его предварительный прогрев (скажем при старте приложения) - хрень конечно, но если ТСу нужно делать именно так как Вы написали ...
...
Рейтинг: 0 / 0
28.08.2020, 11:27
    #39993340
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
Мне вообще всегда очень "нравится" когда автор не приводит ни схемы БД ни запроса ни строчки кода c entities.
Это создает бесконечный простор для философских споров на тему евангелия и РДБМС и теологии Java.

Сейчас - каждый из нас пытается в голове синтезировать эту схему и придумать возможные pitfalls. Это - прекрасно.
Воистину это - тема пятничного топика.
...
Рейтинг: 0 / 0
28.08.2020, 11:29
    #39993343
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
andreykaT
я могу конечно сам делать селект книги там с пагинацией или еще как. и по кускам апдейтить.

- копец.
Код: java
1.
2.
3.
4.
Query query = em.createQuery("UPDATE Book b SET b.author = :authorNew WHERE b.author.id = :authorOldId");
query.setParameter("authorNew", author);
query.setParameter("authorOldId", 1);
int updateCount = em.executeUpdate();
...
Рейтинг: 0 / 0
28.08.2020, 11:37
    #39993346
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
mayton

Главное в этом вопросе

Главное понять, что же НУЖНО

Если нужно вылечит горло - то нормальные люди стрептоцит (или другие средства) глотают через рот
Если нужно вылечит геморой - то свечи запихивают в другие места

Понятно, что List <Foo> располагается в памяти. И вычитка данных происходит в память. Если памяти много - то хоть "вектор на триллион", хоть хибернет.... почему "должно помирать" - совершенно не понятно. Всякие оптимизации типа ленивого чтения из базы или кэширование - можно конечно обсуждать, но IMHO вреда от них в любом случае больше, чем пользы. И это никак не отменит того факта, что List - оно все равно про коллекции в памяти (скорее всего).

Очередной идиотский вопрос без какой либо конкретики, в чем же проблема и что же автору нужно. Ну и без единой строчки кода или test case. В лучших традициях последнего времени.

IMHO & AFAIK
...
Рейтинг: 0 / 0
28.08.2020, 11:51
    #39993359
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
Спешу первый поздравить коллег с пятницей.
...
Рейтинг: 0 / 0
28.08.2020, 12:29
    #39993388
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
Kachalov
- и что именно Вы хотели этим сказать? что getResultList() отменили? или что он "плохой"? может хотя бы deprecated? Может Вы решили что ТСу надо будет эти данные итерировать? Так это телепатия, он об этом не писал. Более того, как правило ORM реализуют getResultStream() как getResultList().stream(), т е никаких профитов тут нет (в будущем планируют переделать на какой нибудь ScrollableResults - в 6.x Hibernate ожидают).

Ну в спецификацию же вы первый начали морду лица тыкать, ну вот обратка пришла да, getResultList() плохой. Нет, полноценный getResultStream() в хибере начиная с 5.3, а не с 6.0 - читайте release notes.

Kachalov

- Вы наверное архитектором работаете и отвечаете на те вопросы которые не задают. В постановке задачи никто вставку данных в процессе чтения производить не собирается, речь идет только об их извлечении.
Нет, я просто хрень вижу издалека: вы своим советом с пагинацией единственное что можете, так это задрочить базу до смерти, потому что в предлагаемом решении никакого ключа для сортировки нет, поэтому на каждый вызов будет возвращаться какой-то мусор, да еще и база будет потеть, потому что чтобы что-то пропустить, нужно сначала это что-то прочитать.

Kachalov
- в случае большого количества связанных записей так конечно делать не стоит (мне это показалось очевидным) и ответ уже был - использовать отдельный запрос с пагинацией. А если пофантазировать и предположить что памяти у JVM много, можно предложить L2-кэш и его предварительный прогрев (скажем при старте приложения) - хрень конечно, но если ТСу нужно делать именно так как Вы написали ...
Пагинация - отстой, подходит только для web.
...
Рейтинг: 0 / 0
28.08.2020, 12:29
    #39993389
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
PetroNotC Sharp
andreykaT,
>да. я могу конечно сам делать селект книги там с пагинацией или еще как. и по кускам апдейтить. вопрос собссно в этом и есть. можно ли положиться на хибер или ну его.

Иначе твой поинт в том что можно написать красиво, но.... можно ли положиться на либу ХХХХХ если натравить ее на миллирд.
Глупый вопрос?

да, можно ли натравить миллиард на либу и ожидать что она сама всю работу сделает. именно так.
...
Рейтинг: 0 / 0
28.08.2020, 12:32
    #39993393
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate кто нибудь тестил когда оно помирает?
andreykaT
PetroNotC Sharp
andreykaT,
>да. я могу конечно сам делать селект книги там с пагинацией или еще как. и по кускам апдейтить. вопрос собссно в этом и есть. можно ли положиться на хибер или ну его.

Иначе твой поинт в том что можно написать красиво, но.... можно ли положиться на либу ХХХХХ если натравить ее на миллирд.
Глупый вопрос?

да, можно ли натравить миллиард на либу и ожидать что она сама всю работу сделает. именно так.

Сделай ультра-современное решение в духе NoSQL.
- joins нет
- все - денормализовано и лежит в коллекциях
- все заранее отсортировано в репликах
- все реплицируется через CQRS

и полетит птицей твой автор с 200 мильонами книжек. А там глядишь ты и от хибернейта откажешься
ибо он - безсмысленен и ненужен для NoSQL.

Я - суръёзно!
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate кто нибудь тестил когда оно помирает? / 25 сообщений из 92, страница 1 из 4
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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