212 похожих чатов

Привет. Подскажите как можно решить такую гипотетическую ситуацию: Есть два контекста/домена

identity и shop. Данных в каждом контексте очень много.
Заказчик говорит, что он хочет чтобы заказы можно было сортировать по логину пользователя. Логины находятся в identity, а заказы в shop.

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

16 ответов

8 просмотров

Что вы понимаете под "мигрировать"? Контексты на одной машине

Alexander- Автор вопроса

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

Alexander
Не совсем понял. Контекст либо изолирован, либо не...

Мб связать не на уровне запросов к бд, а на уровне юз кейса?

Ну конечно, а как ты еще сделаешь. Но зачем тебе здесь контекст идентити )

Alexander- Автор вопроса
Maxim Kainov
Ну конечно, а как ты еще сделаешь. Но зачем тебе з...

Ну вот как оказывается, еще джоинить можно. Решение очень быстрое, но, как мне кажется, в перспективе создаст трудности и все равно придется делать то, на чем изначально сэкономили. Контекст идентити занимается штуками связаными с авторизацией/аутентификацей

Alexander
Ну вот как оказывается, еще джоинить можно. Решени...

А, так у тебя одна бд. Ну если с индексами проблем не будет, то лучше джоины, чтобы данные не дублировать.

Alexander- Автор вопроса
Maxim Kainov
А, так у тебя одна бд. Ну если с индексами проблем...

Ну вот получается сейсчас я должен джоинить и не дублировать, а потом все равно делать eventual consistency, если что-то придется выделять в микросервис или использовать другую бд под контекст

Alexander- Автор вопроса

Ну не только убрать, но еще и настроить трансфер данных, который уже мог быть. Хотя щас мне кажется, что мб и не так сложно скейлить такое. В случае использования отдельной бд под контекст, мы же просто делаем бекап основных данных и развертывем на новой бд. Удаляем лишние таблицы, делаем eventual consistency и все. И никаких изменений в коде. Но опять же не знаю как оно на самом деле

Alexander
Ну не только убрать, но еще и настроить трансфер д...

Ну колонку с данными надо будет скопировать еще, в общем разница невелика. Но если тебе понадобится отделять сервис, то лучше сразу конечно сделать.

Alexander
Ну вот как оказывается, еще джоинить можно. Решени...

есть еще решение с дубликатом данных. Т.е. если у тебя два домена используют одни и те же данные, то обычно ситуация сводится к тому, что один домен является овнером данных (мутирует их), а другие - потребителями. Самый простой пример - складской учет, который говорит магазину какие товары есть для продажи, а какие кончились на складе магазина. В таком случае, один из возможных вариантов как еще решить проблему общих данных - застримить данные от овнера ко всем потребителям. Т.е. ты из домена передаешь данные необходимые для бизнес логики в других доменах. Т.е. по сути, копируешь два раза данные, только с нужными трансформациями для каждых доменов. Если по реализации - опять же, один из способов это сделать - стриминг, т.е. используя Event-Carried State события, от овнера отдаешь всем потребителям стейт нужный (каждый потребитель сам решает, какие данные и в каком виде они нужны). Это подойдет, если у тебя синк данных может занимать время, есть уже готовый брокер, который может обработать столько данных и система разделяется по бизнес флоу, а не по ресурсам. еще из минусов - придется дублировать данные и могут коллизии возникать. Т.е. данные долго синхронизируются + придется думать о каком-то публичном id, что бы связать данные между подсистемами (при этом, без привязки на реализацию id из базы, так как базы могут быть разными и обычный сиквенс может палки в колеса вставить)

пример со складским учетом некорректный - он не требует дублирования данных. Вот вообще

Sergey P
пример со складским учетом некорректный - он не тр...

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

Anton Davydov
зависит от того, как на него смотреть. Если воспри...

повторюсь - при любом раскладе нет никаких причин дублировать данные. Именно "дублировать"

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

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
#include <stdio.h> int main(void) { int n; scanf("%d", &n); int digits1[n] = {0}; int digits2[n] = {0}; я не могу таким образом заранее массив нулями заполнить?
Linus
12
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
я про форму записи. смысл указывать что 8 байтный регистр 8 байт?
Aiwan \ (•◡•) / _bot
10
читать файл максимально быстро? странный вопрос))
zamtmn
53
Вроде бы вопрос уже заезжанный, но тем не менее У меня есть функция menu() которая выводит набор возможных действий, а затем спрашивает у пользователя что он хотел бы сделать....
David Golovatin
2
Кто создает тут ботов для телеграмм групп ?
Antskup
8
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
14
Карта сайта