DMdev talks
3.24K subscribers
156 photos
13 videos
89 links
Авторский канал Дениса Матвеенко, создателя DMdev - обучение Java программированию

То, что все ищут по Java:
https://taplink.cc/denis.dmdev

P.S. Когда не программирую - я бегаю:
https://t.me/dmdev_pro_run
Download Telegram
#ВашВопрос
👇
Какие лучшие практики для получается коллекций сущностей со связанными коллекциями с пагинацией? Например у Поста есть Комментарии и Лайки, и нам нужно достать определенные посты с лайками и комментами, 1 страницу. В туториалах пишут обычно как бороться с n + 1, но это порождает другую проблему - пагинацию в памяти. Есть варианты - @BatchSize (по мне, так себе), либо найти айдишки постов первым запросом, следующими - выгрузить эти сущности, чтобы хибер их смаппил в памяти, либо уже сделать джоин фетч запрос. Как правильнее?

Все верно, такие вещи лучше выполнять в два шага/запроса, чтобы избежать проблем с производительностью.

Первый - это сам запрос с пагинацией, который достанет id сущностей, которые нужно вернуть пользователю на текущей странице.
Второй - запрос на получение полностью всех полей сущностей WHERE id IN (результат первого запроса) вместе с комментариями, т.е. будет делаться LEFT JOIN.

Такой подход работает очень быстро даже на очень больших объемах данных. А главное - он также и прост в реализации.

Также хочу напомнить про два варианта пагинации, о которых я рассказывал на своем курсе Spring: offset-based and keyset-based. И что нужно склоняться в сторону keyset-based, который является предпочтительнее, ибо гораздо эффективнее на больших объемах данных.

Но как и любое решение, keyset-based кроме своих очевидных достоинств имеет и некоторые недостатки - он чуть сложнее в понимании и реализации, нежели привычный offset-based.
❤‍🔥12👍11🔥5
Вебинар "Микросервисы" уже через 12 дней!

Всем участникам праздничной распродажи DMDev в качестве подарка я обещал пригласить на свой первый закрытый вебинар "Микросервисы", который состоится 4 мая в 11:00 МСК.

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

Я подготовил 60+ слайдов с топовой информацией, нарисовал полсотни схем и диаграмм и готов поделиться этим с вами!

P.S. Ссылку на подключение пришлю за два дня до начала, а также в день самого вебинара.

P.S.S. Кто не сможет присоединиться, запись вебинара будет доступна через некоторая время на платформе GetCourse.

P.S.S. Кто не участвовал в акции, тот сможет отдельно приобрести запись вебинара на платформе GetCourse.
🔥40👍8❤‍🔥21
Уже завтра закрытый Вебинар "Микросервисы"!

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

Мы затронем (и постараемся как следует разобрать) такие темы как:
- Вертикальное и горизонтальное масштабирование
- Load balancers
- Service registry & service discovery
- Аутентификация & авторизация
- Logging & Metrics
- Проблемы "монолитов"
- Работа с базами данных в микросервисах
- Механизмы общения между сервисами (sync & async)
- Самые распространенные паттерны микросервисов и зачем они нужны (Transactional outbox, Strangler application, API Gateway, Distributed tracing, Saga, etc)
- и многое другое
Вебинар будет очень насыщенным, так что запаситесь чаем и печеньками, чтобы обсорбировать столько полезной, а главное нужной и актуальной информации!

P.S. Вчера всем участникам должны были прийти приглашения на email, который указывался при покупке курсов на GetCourse во время праздничной распродажи. Сегодня придет еще одно.

P.P.S. Если кто-то еще желает принять участие в вебинаре завтра или посмотреть в записи, то его можно приобрести по ссылке с доступом на 6 месяцев.
🔥34👍10❤‍🔥21