同じアプリケーション内で異なるトランザクション分離レベルを使用することは可能ですか? たとえば、単純なクライアント リクエストには READ_COMMITTED を使用し、より複雑なリクエストには READ_REPEATABLE を使用したいと考えています。
質問する
382 次
1 に答える
0
私はこれを理解しようとして何週間も無駄にしたので、学んだことの記録を投稿しています. 追加の回答を歓迎します。
Connection.setTransactionIsolation(int)を使用してトランザクション分離レベルを変更することは技術的に可能ですが、これを行うことは強くお勧めしません。
- トランザクション分離は、トランザクションを開始する前に設定する必要があります。そうしないと、「実装定義」の動作になります。
- 適切なトランザクション分離を検出するには、呼び出すメソッド (およびそれらが呼び出すメソッド) に必要なトランザクション分離を把握する必要があります。
- これはすぐに、各メソッドの適切な分離レベルを追跡するのに苦労するメンテナンスの悪夢に発展します。
- 実行時に適切な分離レベルをプログラムで照会しようとすると (依存関係に必要な分離レベルを尋ねることによって)、非常に見苦しいコードになり、メンテナンスの悪夢になります。
代わりに、弾丸をかじって、アプリケーション全体で単一のトランザクション分離レベルを選択することをお勧めします。安全なものから始めて、パフォーマンスの高い分離レベルにゆっくりと移行します。
于 2012-11-28T20:43:18.837 に答える