7

asp.nete-commerce appで非常に簡単に書いていますが、ストアドプロシージャでトランザクションを使用する必要がありますか?

読み取り/書き込み比は約9:1です

4

5 に答える 5

7

多くの人が尋ねます - トランザクションが必要ですか? なぜそれらが必要なのですか?それらをいつ使用するのですか?

答えは簡単です。非常に正当な理由がない限り、常に使用してください (たとえば、ビジネス間の「長時間実行されるアクティビティ」にアトミック トランザクションを使用しないでください)。デフォルトは常に yes です。あなたは疑わしいですか?- トランザクションを使用します。

トランザクションはなぜ有益なのですか? それらは、クラッシュ、障害、データの一貫性、エラー処理に対処するのに役立ち、より単純なコードを書くのに役立ちます。そして、利点のリストは時間とともに増え続けます.

http://blogs.msdn.com/florinlazar/からの詳細情報は次のとおりです。

于 2008-09-13T08:52:26.303 に答える
3

SQL Server では、すべての単一ステートメントの CRUD 操作が既定で暗黙的なトランザクションにあることを思い出してください。複数のステートメントをアトミック ユニットとして機能させる必要がある場合は、明示的なトランザクション (BEGIN TRAN) を有効にするだけです。

于 2008-09-13T16:07:22.937 に答える
1

答えは、場合によります。常にトランザクションの安全性が必要なわけではありません。時にはやり過ぎです。そうでない場合もあります。

たとえば、チェックアウト プロセスを実装する場合、すべてのデータを収集した後にのみ最終処理を行いたいと考えていることがわかります。支払いの失敗について考えてみてください。ロールバックできます。これは、トランザクションが必要な場合の例です。または、それらを使用するのが賢明な場合かもしれません。

新しいユーザー アカウントを作成するときにトランザクションが必要ですか? おそらく、(何らかの理由で) 10 個のテーブルにまたがっている場合、それが 1 つのテーブルにすぎない場合は、おそらくそうではありません。

また、クライアントに何を販売したか、クライアントが誰であるか、クライアントが要求したかどうかなどにも依存します。しかし、決定を下すのがあなた次第である場合は、賢明に選択してください.

私の結論は、時期尚早の最適化を避けることです。アプリケーションを構築します。後で必要になったときに、戻ってリファクタリング/最適化する必要があることに注意してください。いくつかのオープンソース プロジェクトを見て、彼らがアプリのさまざまな部分をどのように実装したかを見て、そこから学んでください。それらのほとんどはトランザクションをまったく使用していないことがわかりますが、それらを使用する巨大なオンライン ストアがあります。

于 2008-09-13T09:06:01.997 に答える
1

もちろん、場合によります。

それは、特定のストアド プロシージャが実行する作業に依存し、おそらく、提案する「読み取り/書き込み比率」にはあまり依存しません。一般に、同時に実行されている他のクエリによって影響を受ける可能性のあるクエリの場合は、作業単位をトランザクション内に含めることを検討する必要があります。これが非決定論的に聞こえる場合は、そうです。多くの場合、特定の作業単位がどのような状況でこれの候補となるかを予測することは困難です。

まず、作業単位内 (この場合はストアド プロシージャ内) で実行されている正確なCRUDを確認し、a) 他の同時操作によって影響を受ける可能性があるかどうか、および b) その他の作業が重要かどうかを判断することをお勧めします。実行されているこの作業の最終結果に (またはその逆も)。これらの両方に対する答えが「はい」の場合は、作業単位をトランザクション内にラップすることを検討してください。

これが示唆しているのは、トランザクションを使用するか使用しないかを常に単純に決定できるわけではなく、意味がある場合に適用する必要があるということです。ACIDによって定義されたプロパティ(原子性、一貫性、分離性、耐久性) を使用して、これがいつ発生するかを判断してください。

考慮すべきもう 1 つの点は、状況によっては、特に、大量のトランザクション処理アプリケーションなど、システムが多くの操作を立て続けに実行する必要がある場合、トランザクションの相対的なパフォーマンス コストを比較検討する必要がある場合があることです。作業単位のサイズによっては、トランザクションのコミット (またはロールバック) がリソースを消費する可能性があり、おそらくシステムのパフォーマンスに不必要に悪影響を与えるか、少なくともメリットが限られています。

残念ながら、これは正確に答えるのが簡単な質問ではありません。「状況によります」。

于 2008-09-13T09:49:10.957 に答える
0

次の場合に使用します。

  1. テストしてキャッチしたいエラーがいくつかありますが、それらは外に出て作業 (物事を調べたり、値をテストしたりなど) を行う以外にはキャッチされません。通常は、ロールできるようにトランザクション内から行います。操作全体を戻します。
  2. あらゆる種類の複数ステップの操作があり、論理的には、失敗した場合はグループとしてロールバックする必要があります。
于 2008-09-15T12:55:22.613 に答える