@neveruma

Правильно ли решать проблему n+1 с помощью кеширования?

У меня в приложении есть два домена -- склады и продукты.
На складах хранятся остатки с ValueObject productId

При получении в сервисе списка остатков, мне нужно так же получить информацию о товарах. Я использую следующее решение: получаю список остатков со склада и далее прохожусь циклом. На каждую итерацию делаю запрос в бд, в поисках информации о продуктах. Результат запроса кеширую

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

Прошу бывалых программистов оценить это решение и, если это решение действительно неоптимально, предложить менее костыльное и более оптимальное решение
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
Менее костыльное решение вы и сами знаете (или можете найти одним поисковым запросом), раз знаете название проблемы - в первом запросе получать идентификаторы, потом вторым запросом получать данные по where in.

Что же касается вашего текущего...
Я бы сказал, что оно приемлемо в некоторых ситуациях. Например, если построение информации о товарах - сложный процесс с кучей запросов к БД и/или каким-то сторонним сервисам, то имеет смысл их кешировать и тогда, действительно, будет N + 1. Но, как видите, это прям очень узкий кейс, котрого у вас, скорее всего, нет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы