私はかなりe-commerce app
をasp.netに書いています。私のストアドプロシージャでトランザクションを使用する必要はありますか?ストアドプロシージャでトランザクションを使用する必要はありますか? [MSSQL 2005]
読み取り/書き込みの比率は約9:1です。
私はかなりe-commerce app
をasp.netに書いています。私のストアドプロシージャでトランザクションを使用する必要はありますか?ストアドプロシージャでトランザクションを使用する必要はありますか? [MSSQL 2005]
読み取り/書き込みの比率は約9:1です。
多くの人が尋ねます - 取引が必要ですか?なぜ私はそれらを必要としますか?いつそれらを使用するのですか?
答えは簡単です:あなたが非常に良い理由がない限り(例えば、企業間の長期間の活動に原子的な取引を使用しないなど)、それらを常に使用してください。デフォルトは常にyesでなければなりません。あなたは疑わしいですか? - トランザクションを使用する。
なぜトランザクションは有益ですか?クラッシュ、失敗、データの一貫性、エラー処理に役立ち、よりシンプルなコードの作成などに役立ちます。また、メリットの一覧は時間とともに増加し続けます。ここで
答えは、それが依存して、あるhttp://blogs.msdn.com/florinlazar/
からいくつかの詳細情報です。取引の安全性を常に必要とするわけではありません。時にはそれは過度のものです。時にはそうではない。
たとえば、チェックアウトプロセスを実装すると、すべてのデータなどを集めた時点で確定する必要があることがわかります。支払い方法について考えてみましょう。ロールバックすることができます。トランザクションが必要です。または、それらを使用することが賢明な場合は、
新しいユーザーアカウントを作成するときにトランザクションが必要ですか?おそらく、それが10テーブル(何らかの理由で)を越えていれば、単なるテーブルであればおそらくそうではないでしょう。
また、あなたのクライアントを売った人、彼らが誰であるか、要求したかなどによっても変わります。しかし、もしあなたが決定するのであれば、賢明に選ぶといいでしょう。
私の結論は早すぎる最適化を避けることです。アプリケーションを構築し、必要に応じて後でリファクタリング/最適化することをお勧めします。いくつかのオープンソースプロジェクトを見て、彼らがアプリのさまざまな部分をどのように実装したかを見て、それから学びましょう。ほとんどの人はトランザクションをまったく使用していませんが、それらを使用する巨大なオンラインストアがあります。
もちろん、それは依存します。
これは、特定のストアドプロシージャが実行する作業と、多分あなたが推奨する「読み取り/書き込みの比率」ほどではありません。一般的には、他のいくつかの同時に実行されている照会によって影響を受ける可能性がある照会の場合は、トランザクション内の作業単位を囲むことを検討する必要があります。これが非決定論的に聞こえる場合は、そうです。特定の作業単位がどのような状況でこれの候補となるかを予測することは、しばしば困難です。
作業ユニット内で実行されている正確なCRUDを確認することができます。この場合、ストアード・プロシージャー内で、a)他のいくつかの同時操作の影響を受けるかどうかを判断し、b)この仕事の最終結果に向けて他の仕事が重要であるということです(あるいは、その逆もあります)。両方の回答が「はい」の場合は、トランザクション内の作業単位をラップすることを検討してください。
のトランザクションを使用するか使用しないかを決めるのではなく、意味をなさないときに適用することをお勧めします。ACID(Atomicity、Consistency、Isolation、およびDurability)で定義されているプロパティを使用して、これがいつ可能かを判断してください。
考慮すべきもう1つの事柄は、システムが大量のトランザクション処理アプリケーションなどのようにすばやく連続して多くの操作を実行する必要がある場合は、トランザクションの相対的なパフォーマンスコストを検討する必要がある場合があります。作業単位のサイズに応じて、トランザクションのコミット(またはロールバック)はリソースが高価になる可能性があり、システムのパフォーマンスに不利な影響を及ぼす可能性があります。
残念ながら、これは正確に答えるのは簡単な質問ではありません。「それは依存します」
SQL Serverでは、すべての単一ステートメントCRUD操作は、既定では暗黙的なトランザクションになっています。複数のステートメントをアトミック単位として動作させる必要がある場合は、トランザクションの抽象化(BEGIN TRAN)をオンにするだけです。
場合は、それらを使用してください:あなたが外出して仕事をしている(物事を見て、値をテストすることによって除いてキャッチされることはありませんいくつかのあなたのためにテストする可能性のあるエラーとキャッチがあります
"あなたには正当な理由がない限り、常にヘルメットを着用するように人々に伝えるのと同じような理由がない限り、常に使用してください。 –
それは、トランザクションを使用することは、私がそうではないと思う何らかの方法で迷惑またはばかげていると仮定しています。 –
私は@ジェフアトウッドがヘルメット着用の終わりに来る前に完全なパラを読んでいないと思う。 – Codeslayer