Size: a a a

Software Design/Architecture/Zen

2020 October 11

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
тоже верно, в одной транзакции лучше, но нарушение консистетности все-таки возможно. кол-во не критично, вот последний коммент может не сойтись
источник

k

knopkod4v in Software Design/Architecture/Zen
Sergey Protko
конкретно в этом кейсе вариантов оч много просто потому что любой вариант в целом будет работать - тут достаточно низкие риски что стэйт будет не консистентным (ты всегда можешь в транзакцию завернуть) и тут не нужны локи особо (ну затрется ну и ладно).

Но скорее всего я бы кидал доменный ивент что коммент для такой-то темы был запощен и строил бы по этим ивентам отдельную проекцию. Тут тебе уже нужны будут какие-то гарантии что ивент дойдет до проектора. В этом случае все будет надежно с точки зрения стэйта но могут запаздывать апдейты для UI.
когда начинаются вот эти темы с ивентами, сначала кажется, что всё довольно изи, но когда оказывается, что ещё и транзакции надо разделять - тут начинаются инфраструктурные проблемы. Надо сразу надёжную инфраструктуру со всякими ретраями, гарантией обработки сообщений 1 раз, вот это вот всё =\
Так что на самом деле это не совсем тривиальный вариант
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
в целом лучше решать проблемы по мере возникновения) сделал - напоролся на проблему - думаешь как решить. а пока проблем нет, что голову себе парить попусту
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Сергей Предводителев
Если событие - очередь - обработка, то получается какое-то время данные будут не консистенты
а тут вопрос на что это влияет. Если речь идет про аукцион где это сильно влияет на стоимость товара, то это один вопрос. А если это "в списке тем показывать последний коммент" то там задержка на 2-3 секунды вообще погоды не делает
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Ну у меня довольно просто проект в этом плане и нагрузки маленькие и база одна. Думаю лучше в транзакции сделать... сделаю по второму варианту.

2) В сущности не делать, будет репозиторий сам сохранять эти значения и использоваться они будту только в модельках, которые для чтения, которые без ORM собираются.
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Спасибо за помощь :)
источник

SP

Sergey Protko in Software Design/Architecture/Zen
ну повторюсь, я бы в твоем случае вообще не парился бы и делал запрос в стиле SELECT DISTINCT ON(theme_id) и джойнил бы уже темы туда, но это если у тебя постгрес, тогда индексы бы разрулили

или не джойнил бы и применил бы мои любимые application side joins :)
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Sergey Protko
ну повторюсь, я бы в твоем случае вообще не парился бы и делал запрос в стиле SELECT DISTINCT ON(theme_id) и джойнил бы уже темы туда, но это если у тебя постгрес, тогда индексы бы разрулили

или не джойнил бы и применил бы мои любимые application side joins :)
у меня по старинке mysql
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
в восьмерке много чего подвезли тоже
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Sergey Protko
ну повторюсь, я бы в твоем случае вообще не парился бы и делал запрос в стиле SELECT DISTINCT ON(theme_id) и джойнил бы уже темы туда, но это если у тебя постгрес, тогда индексы бы разрулили

или не джойнил бы и применил бы мои любимые application side joins :)
Почему они твои любимые?
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
Типа инфа о связях под ответственностью кода?
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
А бд - тупо положить чтобы не потерялось
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Dmitriy Tkachenko
Почему они твои любимые?
потому что активно их юзаю что бы связи на уровне UI оставались на уровне UI. Типа что нет FK и таблички джойнятся кодом да.

но я не удаляю ничего (специфика проекта) потому мне проще)
источник

DT

Dmitriy Tkachenko in Software Design/Architecture/Zen
А если ты джойнишь датасет из таблиц без фк в одном запросе - это тоже же application side joins?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Dmitriy Tkachenko
А если ты джойнишь датасет из таблиц без фк в одном запросе - это тоже же application side joins?
нет. application side joins это когда "приложение джойнит данные". то есть два запроса. Список постов, потом комменты по where post_id = ANY(:posts) а потом склеиваешь это дело. Типичная история с каким-нибудь graphql и прочими api gateway
источник

АГ

Алексей Гевондян... in Software Design/Architecture/Zen
зафигачил всю базу в оперативку, и выбираешь по id нужные сущности)
источник

АЯ

Андрей Ява in Software Design/Architecture/Zen
Sergey Protko
нет. application side joins это когда "приложение джойнит данные". то есть два запроса. Список постов, потом комменты по where post_id = ANY(:posts) а потом склеиваешь это дело. Типичная история с каким-нибудь graphql и прочими api gateway
Почему = ANY а не IN ?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
Андрей Ява
Почему = ANY а не IN ?
источник

SP

Sergey Protko in Software Design/Architecture/Zen
ну для пыхи насколько я понимаю разницы особо нет - всеравно DBAL и PDO так не умеют
источник

СП

Сергей Предводителев... in Software Design/Architecture/Zen
Алексей Гевондян
тоже верно, в одной транзакции лучше, но нарушение консистетности все-таки возможно. кол-во не критично, вот последний коммент может не сойтись
Как теоретически может не сойтись последний комментарий, если в транзакции делать?
источник