Транзакция базы данных

Введение

Узел транзакции базы данных используется для выполнения группы операций базы данных в одной транзакции. Он подходит для сценариев, где несколько шагов обработки данных должны либо все успешно выполниться, либо полностью откатиться, например создание заказа, списание остатков, запись деталей и обновление статуса.

В настоящее время узел транзакции поддерживает только источники данных базы данных. Операции с данными из того же источника данных внутри узла автоматически включаются в эту транзакцию; другие источники данных эту транзакцию не используют.

Создание узла

В интерфейсе настройки рабочего процесса нажмите кнопку плюс («+») в потоке, чтобы добавить узел «Транзакция базы данных».

20260610205146

После создания будут сгенерированы две ветви:

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

20260610205303

Настройка узла

20260610205505

Источник данных

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

Уровень изоляции

Задайте уровень изоляции транзакции. Значение по умолчанию — READ UNCOMMITTED. Если бизнес-логике требуется более строгая согласованность данных, выберите другой уровень изоляции с учетом возможностей базы данных и требований к параллельности.

Продолжать рабочий процесс после отката

Если включено, после завершения ветви После отката рабочий процесс продолжит выполнение узлов, расположенных после узла транзакции.

Если выключено, после завершения ветви После отката рабочий процесс остановится на узле транзакции, а последующие узлы не будут выполнены.

Использование

Ограничения

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

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

Примечание

Транзакции занимают соединения с базой данных до фиксации или отката. Избегайте длительных операций в ветви Выполнить и оставляйте там только необходимые чтения, записи и проверки данных.

Вложенные транзакции

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

  • Если внутренняя и внешняя транзакции используют один и тот же источник данных, внутренняя транзакция создается в области внешней транзакции и обрабатывается согласно возможностям базы данных и Sequelize.
  • Если внутренняя транзакция использует другой источник данных, она не переиспользует внешнюю транзакцию и создает независимую транзакцию для этого источника данных.
  • Если рабочий процесс запускается синхронным событием коллекции, сам триггер может уже предоставлять транзакцию верхнего уровня для того же источника данных. Узел транзакции в первую очередь переиспользует внешнюю транзакцию того же источника данных и не переиспользует транзакции других источников данных.

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

Типичный сценарий

Типичный поток выглядит так:

  1. В ветви Выполнить запрашиваются или создаются связанные данные.
  2. В ветви Выполнить продолжается обновление остатков, статуса, деталей и других данных того же источника.
  3. Если все шаги успешны, транзакция фиксируется автоматически.
  4. Если любой узел завершается неудачно или вызывает ошибку, транзакция автоматически откатывается, и рабочий процесс переходит в ветвь После отката.
  5. В ветви После отката записывается причина ошибки, отправляется уведомление или выполняется компенсирующая логика.

Если после отката нужно продолжить последующий поток, включите «Продолжать рабочий процесс после отката».