Твой код без транзакций гарантирует, что при падение бд, перезапуске

редиса, отвале платежной системы и т д консистентность данных будет?

5 ответов

13 просмотров

Там чуть-чуть только переписать его. Просто будет немного больше шагов. И будет полная консистентность при любом падении. Если изучал когда-нибудь Event Sourcing то быстро поймёшь, что лог событий всегда отражает консистентное состояние системы. Текущее состояние это лишь проекция, сумма лога событий. Запись одного события в лог можно считать атомарной операцией. Как перевести биллинг на схему похожую на Event Sourcing это много раз решённая задача. В том числе в моём биллинге. Так решать не принято, 99% программистов решают "в лоб" и костылят потом транзакции и блокировки из-за ошибочно выбранной модели.

Roman-Tsurkanu Автор вопроса

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

Конечно, транзакции и блокировки проще и понятней. Как любой приëм который даëт бонус в краткосрочной перспективе и позже прилетают большие проблемы в долгосрочной. Нужно понимать плюсы и минусы разных решений и знать чем мы жертвуем и ради чего. Допустим трейты, наследование, аннотации это не зло само по себе. Но злоупотребление и упование на такие вещи всегда приводит к печальным последствиям. Это суть любого антипаттерна. Если держишь небольшое зло под контролем, то не беда. Если решил что это хорошо и допустимо везде и всегда, то ты попал. Для программиста который думает о транзакциях и блокировках, главное понимать, что есть и другие пути. Если он это понимает и может сравнить разные варианты решения задачи, то он находится в более выгодном положении чем программист, который видит решение только через мьютексы и более ничего. Знание вариантов и разумный выбор — залог успеха проекта ) Как видно по моему коду, я и сам не гнушаюсь транзакциями, хотя прекрасно могу жить и без них )

Да нет, проще как раз Event Sourcing, но у него есть один маленький минус - на сколь-нибудь больших объёмах тормозит безбожно. Поэтому базы используют его только в журналах предзаписи.

Не тормозит если думать над дизайном на пару шагов дальше, а не бросать на полпути.

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта