Что делать когда часть данных хранится в СУБД, а часть в другом месте

Крот

Новичок
Подскажите плиз, а как лучше всего реализовать кейс, когда часть данных для модели хранится в БД, а другая часть, например, в Redis, а еще одна в файлах. Как это все соединить воедино?
 

AnrDaemon

Продвинутый новичок
Мне показалось более логичным сделать модель для каждого хранилища, а потом объединить их в одну. При условии, что части данных хранятся консистентно. Если произвольные данные храняться как б-г на душу положит, то придётся сильно извращаться.
 

Крот

Новичок
Немного более развернуто напишу вопрос...

Допустим, у нас есть модель пользователя User. В БД хранятся идентификатор пользователя (userId) и его имя (username). В redis хранится информация по последней активности пользователя (lastActivityOn). Наша задача получить модель пользователя, у которой заполнены все эти поля (либо будут заполнены по-требованию).

Самый простой вариант - декомпозировать модель пользователя на 2 модели: User, UserActivity. В этом случае у нас будет 2 репозитория - один для работы с БД UserRepository, другой для работы с Redis UserActivityRepository. Но это не очень удобно, т.к. скорее всего придется делать еще один общий репозиторий, который бы умел работать с этими двумя и умел заполнять модель. Еще как вариант можно научить саму модель User делать подгрузку данных из UserActivityRepository, но в этом случае мы будем мешать модель со способом ее хранения, что не очень хорошо.

Ну или сделать один UserRepository и научить его работать с UserStorage и UserActivityStorage.

Какая структура была бы наиболее практичной с вашей точки зрения?
 

Adelf

Administrator
Команда форума
Нужно две модели для записи. Когда меняется username - будет использоваться одна модель. Когда меняется lastActivity - другая.
А для чтения вполне можно создать штуку которая подсосёт данные из двух мест.

P.S. Вообще, любое затруднение встречаешь - надо просто отделить запись от чтения и все затруднения сразу исчезают :)
 
  • Like
Реакции: WMix
Сверху