Обработка транзакций в веб-приложениях - PullRequest
2 голосов
/ 20 января 2009

В большинстве веб-приложений я заметил, что всякий раз, когда в цепочке страниц участвует транзакция, обработка транзакции происходит на уровне базы данных. В веб-приложении, где могут быть многочисленные пользователи, выполняющие такие транзакции, обработка всех транзакций может быть критической задачей. Я согласен с тем, что уровень базы данных достаточно эффективен для этого и предоставляет целый ряд возможностей для этого.

У меня вопрос: если веб-приложение построено на базе данных, которая не обеспечивает поддержку обработки транзакций, есть ли способ обработки этих транзакций на других уровнях?

1 Ответ

2 голосов
/ 20 января 2009

База данных, которая не обрабатывает транзакции? Лучше получить новую базу данных.

Я не согласен - транзакции не обрабатываются в слое постоянства. Я думаю, что они должным образом относятся к сервисному слою, потому что сервисные методы - это то, что сопоставляется с единицами работы и вариантами использования. Один сервисный вызов может включать более одной базы данных и объекта модели, поэтому все они должны быть одной единицей работы ACID. Это невозможно, если уровень персистентности обрабатывает транзакции.

Такая конструкция может обрабатывать транзакции, даже если база данных их не поддерживает. Сервис может реализовать компенсационные звонки в случае отката. Это невозможно, если вы включите эту логику в уровень постоянства.

По моему мнению, у вас должен быть отдельный интерфейс службы между уровнями сети и постоянства. Веб-уровень обрабатывает только HTTP-запросы, маршрутизацию к службам и формулирует ответы для обратной отправки. Службы делают работу.

Службы МОГУТ быть веб-службами, если вы решите развернуть их таким образом, но существует множество вариантов развертывания. Отдельный уровень обслуживания не зависит от этих вариантов выбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...