которого работает по модели запрос-ответ. (На протяжении пользовательской сессии это один запрос на сервер раз в 2-5 секунд, на каждый запрос - 3-5 запросов в базу). На каждый запрос могут срабатывать разные системы логики. Например, какие-то параметры объекта должны изменяться по времени, но вместо того, чтобы каждую минуту ходить по всей таблице и менять числа по таймеру, мы просто обновляем их, когда к нему кто-то стучится, используя поле last_update. Или ещё, на каждый запрос пользователя, вне зависимости от того, что это запрос, отправляем ему вдовесок все новые нотификации, которые он должен получить.
Насколько разумно в архитектуре приложения для каждого запроса создавать БД-транзакцию и потом передавать объект, представляющий эту транзакцию по всем вызовам, чтобы если что-то свалилось, не оставлять данные в полу-изменённом состоянии? Насколько часто такой подход применяется?
Транзакции уместны для объединения общего блока запросов в один, чтобы изобразить атомарность. И надо учитывать, что данные на клиенте будут, грубо говоря, на момент начала транзакции (явно созданной или автоматической). Так что логика проверок last_update должна учитывать одновременное выполнение других запросов.
Постоянно такой подход применяется. Разные фреймворк вроде Django могут даже за пользователя открывать транзакцию до вызовоа его кода и закрывать после ,если пользователь сам ее не закрыл
Обсуждают сегодня