2017-08-09 10 views
1

SQL Serverでは、トランザクションを開始することはできますが、意図的に開いている接続から孤立していますが、接続を閉じた状態でSQL Serverにトランザクションを開いたままにする

RESTサービスのユースケースです。

私はトランザクションで動作する一連のHTTPリクエストをリンクすることができます。これは、サービスがステートフルな場合に実行できます。つまり、接続を開いている単一のREST APIサーバー(名前付き接続にHTTPヘッダー値をマップする)がありますが、Webサーバーの非粘着性ファームでは問題があります。

DBが名前付き/リーストランザクションなどの概念をサポートしていれば、名前付きのミューテックスのようになる可能性があります。

アトミックデータ突然変異のための他のRESTfulデザインがあります。

ありがとうございました。

+0

リクエストを処理するアプリケーションサーバーを使用していますか? – TcKs

答えて

1

いいえトランザクションは作成されたセッションで生き残り、セッションは終了し、セッションは存続し、その接続で消滅します。あなたは好きなだけトランザクションを開いたままにしておくことができますが、セッションを維持し、それによって接続を開くだけでトランザクションを開くことができます。トランザクションがコミットする前にセッションが終了すると、セッションは自動的にロールバックされます。トランザクションは悲観的なロックを使用する傾向があるため、一般的には良いことです。これらのロックを必要以上に長持ちさせたくありません。

現在の接続がトランザクションを開始しなかった場合でも参加できるdistributed transactionのようなものがありますが、複数の分散ノードが連続してアクションを実行するシナリオ1つのデータベース上のトランザクション。具体的には、トランザクションを生きたままにし、最後にコミットすることを決定するための1つの「マスター」ノードが必要です。ノードがトランザクションを認識できるようにして、参加できるようにする必要があります。実際にこの方法をとることはお勧めしません。具体的なシナリオ(通常は独自のテーブルに変更を蓄積し、完了したらバッチとしてコミットすること)にソリューションを調整するよりもはるかに複雑です。 1つのトランザクション)。

0

キュー指向設計を使用すると、アプリケーションが単にキューに追加され、SQLサーバーエージェントのキューがポップして実行されます。

+0

'SQLサーバーエージェント 'がキューにポップして実行する'並列処理を介してキュー内の多くのタスクでこれを行う方法はありますか? –

+0

これはどのようにトランザクションのセマンティクスを保持しますか? –

関連する問題