Артём Гордиенко - Hibernate - проблема декартова произведения при запросах с пагинацией

  Рет қаралды 5,318

JPoint, Joker и JUG ru — Java-конференции

JPoint, Joker и JUG ru — Java-конференции

Күн бұрын

Пікірлер: 30
@ЯрЛав-т8у
@ЯрЛав-т8у Ай бұрын
Отличный доклад. К нему хорошо дополняет статья на Хабре. Хорошо рассказываете
@Denleont
@Denleont Жыл бұрын
Спасибо за интересный доклад! мы в своё время тоже столкнулись с этой проблемой пагинации в памяти приложения. Мало кто в принципе знает об этой проблеме
@arvgord
@arvgord 8 ай бұрын
Спасибо! Рад, что вам было интересно.
@alekseyshibayev5243
@alekseyshibayev5243 11 ай бұрын
1. Спасибо за доклад. Тоже рою jpa. 2. На 12 минуте понял к чему ты клонишь, если бы ты использовал List, а не Set, то получил бы исключение, загуглив которое, ты нашел бы статью от Влада Михалсеа. Где он пишет, что Set не решает проблему, а под капотом будет декартово произведение. 3. Я написал самописный динамический ентити граф, через дерево и сабграфы. Интересно попробовать его вместе с батч сайзом, написаным в ручную через цикл по айдишникам.
@MaximBodrov
@MaximBodrov Жыл бұрын
Спасибо Артему! BatchSize классная в данном случае штука! Но как я понял, она имеет преимущество над вторым подходом в случае, когда дочерних объектов слишком много (10-20-больше). Если пара-тройка, то они оба хороши
@maximelmanov6719
@maximelmanov6719 Жыл бұрын
Она имеет преимущество из-за 2-х запросов к бд, что занимает значительное время. Плюс риски дисконекта увеличиваются
@arvgord
@arvgord 8 ай бұрын
Если в связанных коллекциях содержится небольшое количество объектов и у вас всего несколько коллекций @OneToMany, то значительной разницы вы не заметите.
@Batyrev
@Batyrev Жыл бұрын
Спасибо за доклад! Интересно что уже не в первый раз встречаю мнение о том что нативный запрос "написанный ручками" или вью как-то решают описанные в докладе проблемы с декартовым произведением. По сути дела те же самые джоины уйдут в нативный запрос или во вью, а декартово произведение никуда не денется + к этому ещё нужно будет как-то прикрутить пагинацию! К сожалению это осознаётся только когда непосредственно столкнёшься с реализацией...
@maximelmanov6719
@maximelmanov6719 Жыл бұрын
Query DSL/jpa streamer в помощь
@maximelmanov6719
@maximelmanov6719 Жыл бұрын
Был очень удивлен, что не было слов про query dsl или jpa streamer. Человек посмотрит и ришит, буду использовать batchsize, минусы которого очевидны. Или два запроса к бд, что тоже очень странно в наше время. В любом случае доклад - это большое дело, но ожидания совсем неоправдали себя(
@arvgord
@arvgord 8 ай бұрын
Мне было бы интересно узнать, как Query DSL или JPA Streamer решают проблему декартова произведения в запросах с пагинацией. Если у вас есть примеры рабочего кода, например, на GitHub, я бы с удовольствием ознакомился с ними.
@vladimir.kravets
@vladimir.kravets Жыл бұрын
Зачем вообще хибер в микросервисах? На сколько там развестая модель предметной области у микросервиса? По итогу абстракция протекает везде где можно и нельзя... Столько упражнений, а по факту проще написать один не очень сложный запрос ручками и не страдать фигней.
@dmitrysmirnov5575
@dmitrysmirnov5575 Жыл бұрын
или вьюху на стороне БД и проецировать это куда хочешь на стороне джава и делать старую добрую пагинацию из коробки. Как-то все сложно у автора
@maximelmanov6719
@maximelmanov6719 Жыл бұрын
Query DSL/jpa streamer в помощь
@arvgord
@arvgord 8 ай бұрын
Использовать или не использовать Hibernate зависит от вашей конкретной задачи и предпочтений. Для небольших микросервисов может быть вполне достаточно JdbcTemplate. Для микросервисов со сложной бизнес-логикой Hibernate позволяет быстро реализовывать необходимый функционал. Когда у вас динамические запросы с фильтрацией и сортировкой по десяти полям, это существенно ускоряет работу. С помощью абстракции вы не привязаны к конкретной базе данных. Также не всегда есть возможность выбора библиотек или фреймворков в существующих проектах. В данном докладе я рассматриваю проблемы, с которыми могут столкнуться разработчики (как я столкнулся), которые уже используют Hibernate в своих проектах или только планируют его использовать.
@erlanibraev
@erlanibraev 6 ай бұрын
Потому что он идёт в зависимостях spring-data-jpa 😂
@ins798
@ins798 Жыл бұрын
взглянем на ситуацию шире: молодой чемодан взял абстракцию в виде языка котлин, взял абстракцию под SQL в виде хибернета, взял абстракцию в виде мэпстракта. И при использовании абстракций над абстрацией через абстракцию он обнаружил, что есть проблемы, которые надо решать. Нормальная ли это ситуация?
@ВасилийГоловко-д9и
@ВасилийГоловко-д9и 2 ай бұрын
а чем тебе не угодил mapstruct? или ты все сеттеры будешь ручками прописывать?
@ins798
@ins798 2 ай бұрын
@@ВасилийГоловко-д9и кто ты такой есть то, что я тебе буду сейчас все разжёвывать, иди теорию учи,ламер
@bananasba
@bananasba Жыл бұрын
Мне тут кто-то рассказывал как все хорошо в джаве с проекциями из бд, где ты?)
@xzib-nt5
@xzib-nt5 Жыл бұрын
Наверное просто не использует хибер)
@maximelmanov6719
@maximelmanov6719 Жыл бұрын
Query DSL/jpa streamer в помощь
@vladimirmokeev2856
@vladimirmokeev2856 9 ай бұрын
Изначально говорит, что ему надо выводить количество по счетам и прочую стату. А потом пишет код, чтоб вытягивать все из базы, вместо того, чтобы агрегаты использовать. Кек
@ins798
@ins798 Жыл бұрын
Да, используйте нативный запрос, если запрос сложный. Какую-то фигню наковыряли и носятся с нею.
@maximelmanov6719
@maximelmanov6719 Жыл бұрын
Нативный тежелее поддерживать, т.к. придется при необходимости "дебажить" строки, что не очень удобно. Query DSL/jpa streamer в помощь
@vladimirmokeev2856
@vladimirmokeev2856 9 ай бұрын
Какой же он не компетентный. Не может даже нормально энтити граф использовать. А "замеры скорости" - это испанский стыд. Вопрос вообще некорректный изначально. Там рост m^n, а он все чешет про 2^n. Всегда можно будет подобрать m и n, чтобы его любимчик выиграл в миллион раз. Хорошо хоть ему на это несколько раз указали потом
@hol1low747
@hol1low747 2 ай бұрын
Multiset join (blaze persistence/jooq) в помощь
Andres Sacco - Using a Martial Art to Do Tests
50:11
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 693
Андрей Беляев - DTO: живи быстро, гори ярко
56:20
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 19 М.
Алексей Рагозин - Java в контейнере: особенности эксплуатации
46:19
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 15 М.
Никита Летов - Используем @Transactional like a Pro
1:16:31
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 59 М.
Артем Артемьев - Моментальная аналитика с помощью Spring + Redis. Это возможно?
48:07
Михаил Жилин - Как PostgreSQL может сделать больно, когда не ожидаешь?
45:50
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 6 М.
Андрей Беляев - Hibernate 6: что нового и почему это важно
49:56
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 19 М.
Андрей Беляев - JPA-паззлеры (+Hibernate и Spring)
1:04:57
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 24 М.
Кирилл Толкачев - Как познавать Spring Boot с помощью TDD
56:14
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 13 М.