データベーストランザクション

概要

データベーストランザクションノードは、複数のデータベース操作を同じトランザクション内で実行するためのノードです。注文作成後の在庫引き落とし、明細の書き込み、ステータス更新など、複数のデータ処理を「すべて成功」または「すべてロールバック」にしたい場合に適しています。

トランザクションノードは現在、データベースデータソースのみをサポートします。ノード内の同じデータソースのデータ操作は自動的にこのトランザクションに含まれます。他のデータソースはこのトランザクションを使用しません。

ノードの作成

ワークフロー設定画面で、フロー内のプラス(「+」)ボタンをクリックして、「データベーストランザクション」ノードを追加します。

20260610205146

作成後、2つの分岐が生成されます。

  • 実行:トランザクション内で実行されるメイン分岐です。この分岐のすべてのノードが成功すると、トランザクションは自動的にコミットされます。いずれかのノードが失敗またはエラーになると、自動的にロールバックされます。
  • ロールバック後:ロールバック後に実行される分岐です。この分岐はトランザクション外で実行され、ログ記録、通知送信、補償処理などに使用できます。

20260610205303

ノード設定

20260610205505

データソース

このトランザクションで制御するデータベースデータソースを選択します。同じデータソースのデータ操作ノードのみが自動的にトランザクションに含まれます。

分離レベル

トランザクションの分離レベルを設定します。デフォルト値は READ UNCOMMITTED です。より厳密なデータ整合性が必要な場合は、データベースの機能と同時実行要件に応じて別の分離レベルを選択してください。

ロールバック後もワークフローを続行

有効にすると、ロールバック後 分岐の完了後、ワークフローはトランザクションノードの後続ノードを続行します。

無効にすると、ロールバック後 分岐の完了後、ワークフローはトランザクションノードで終了し、後続ノードは実行されません。

使用方法

制約

実行 分岐では、手動処理や遅延など、ワークフローを一時停止する非同期ノードはサポートされません。トランザクションは現在の実行中にコミットまたはロールバックされる必要があります。実行 分岐が待機状態に入ると、システムはトランザクションをロールバックし、ワークフローを失敗としてマークします。

ロールバック後 分岐はトランザクション外で実行されるため、上記の制約を受けません。必要に応じて、この分岐でリクエスト送信、手動確認待ち、遅延処理などの非同期ノードを使用できます。

注意

トランザクションはコミットまたはロールバックされるまでデータベース接続を占有します。実行 分岐では長時間実行される操作を避け、必要なデータの読み取り、書き込み、判定だけを配置してください。

ネストされたトランザクション

トランザクションノードはネストして使用できますが、データソースの範囲に注意してください。

  • 内側と外側のトランザクションが同じデータソースを使用する場合、内側のトランザクションは外側のトランザクションの範囲内に作成され、データベースと Sequelize の機能に応じて処理されます。
  • 内側のトランザクションが異なるデータソースを使用する場合、外側のトランザクションは再利用されず、そのデータソース用に独立したトランザクションが作成されます。
  • ワークフローが同期のコレクションイベントでトリガーされる場合、トリガー自体が同じデータソースのトップレベルトランザクションを提供していることがあります。トランザクションノードは同じデータソースの外側のトランザクションを優先して再利用し、異なるデータソースのトランザクションは再利用しません。

ネストされたトランザクションは理解とトラブルシューティングのコストを増やします。通常は、局所的なロールバック境界が本当に必要な場合にのみ使用してください。そうでない場合は、1つのトランザクションノードでデータ処理全体を包むことを推奨します。

よくあるシナリオ

典型的なフローは次のとおりです。

  1. 実行 分岐で関連データを検索または作成します。
  2. 実行 分岐で、同じデータソースの在庫、ステータス、明細などを更新します。
  3. すべて成功すると、トランザクションは自動的にコミットされます。
  4. いずれかのノードが失敗またはエラーになると、トランザクションは自動的にロールバックされ、ロールバック後 分岐に入ります。
  5. ロールバック後 分岐で、失敗理由の記録、通知送信、補償ロジックを実行します。

ロールバック後に後続フローを続行する必要がある場合は、「ロールバック後もワークフローを続行」を有効にしてください。