.NETエンタープライズ 接続型データアクセスと短時間トランザクションマイクロソフト コンサルティング本部 赤間 信幸 |
|
|
3.5 短時間トランザクション処理の3つの制御方式の比較
ここまでの解説を比較表としてまとめたものを、表3-1に示す。
データベーストランザクション | マニュアルトランザクション | 自動トランザクション | |
実装方法 | ストアドプロシージャ内でトランザクションを制御 | コネクションオブジェクトからトランザクションオブジェクトを生成してトランザクションを制御 | トランザクションコンテキストとMS-DTC を利用してトランザクションを制御 |
アプリケーションロジックの保守性や再利用性 | × ストアドプロシージャのバージョン管理などは厄介 | △ クラス分割・メソッド設計に制約が発生するため、大規模なアプリケーションでは保守性や再利用性を意識したクラス分割が行いにくい | ○ クラス分割・メソッド設計の柔軟性が高く、保守性や再利用性を意識したクラス分割が行いやすい |
複数のクラスやメソッドにまたがった処理の1 トランザクション化 | × 不可 | △ 実施できないことはないがインタフェース設計に無理が生じることが多い | ◎ 可 |
複数のデータベースにまたがった処理の1 トランザクション化 | × 不可 | × 不可 | ◎ 可 |
設計・実装の難易度 | × Transact-SQL でビジネスロジックを実装するのが厄介 | ◎ 比較的容易 | × クラス設計とトランザクション設計を同時に検討する必要がある(ただし通常はアプリケーションアーキテクチャによる標準化が行われる) |
性能 | ◎ 1 回のラウンドトリップのみであるため高速 | ○ データベース内に閉じたトランザクション制御となるため高速 | △ MS-DTC の制御によるオーバヘッドがある(が、実際にその性能劣化が問題になるか否かはケースバイケース) |
主な利用用途 | アプリケーション内で特にパフォーマンスが求められる場所に限定的に利用 | 複雑なクラス分割を必要としない、比較的簡易なアプリケーションで利用 | 複雑なクラス分割を必要とし、高い保守性が求められるエンタープライズアプリケーションで利用 |
表3-1 短時間トランザクション処理の3つの制御方式の比較 |
この表からも分かるように、各制御方式にはトレードオフの関係がある。このため、実際に開発するシステムの要件や規模、想定耐久年数、設計・実装者のスキルなどを勘案し、最適な方法を選択する必要がある。
多くの業務システムでは、マニュアルトランザクションか自動トランザクションのいずれかの方式を利用することになるだろう。以下にこの2つのトレードオフの要点をまとめる。まず、マニュアルトランザクションはトランザクション処理としての設計・実装は容易であるが、クラス分割やメソッド配置がトランザクション処理にひきずられることになる。一方、自動トランザクションでは設計の自由度が高まるため、保守性や再利用性を前面に押し出したクラス分割やメソッド配置を行いやすくなるが、設計難易度は大幅に上昇する。
エンタープライズアプリケーションのように、特に高い保守性が求められるケースでは自動トランザクションを使ってきれいなクラス分割を行うことが望ましい。半面、設計難易度が高いため、安易に自動トランザクションを取り扱うと十分な設計・実装品質を保つことができなくなってしまう。この点に十分に注意した上で、自動トランザクションを利用して頂きたい。
なお、ここまで解説してきた3つの短時間トランザクション制御方式は基本的に混在させてはいけない。例えば、実装上は自動トランザクション内からマニュアルトランザクションを開始することができてしまうが、これは行ってはならない。このようなアプリケーション設計ではトランザクション制御の責任の担い手が不明確になり、適切なトランザクションコミット/アボート制御ができなくなってしまう。よってアプリケーション設計時には、3つの短時間トランザクション制御方式のうちのいずれか1つを利用し、「誰がトランザクション制御の責務を担うのか」を明確化させるようにする。
3.6 接続型データアクセスと短時間トランザクションのまとめ
本章のポイントをまとめると、以下のようになる。
・ 業務アプリケーションでは、中間層からの複雑なトランザクション制御が必要になる。 | |
・ データベース内のトランザクション制御だけでなく、「アプリケーションから見たトランザクション制御」という視点が必要になる。 | |
・ 業務的なトランザクション制御は、短時間トランザクション処理と長時間トランザクション処理に大別される。 | |
・ 短時間トランザクション処理(Short-term Transaction)とは、短時間で処理を完遂できるトランザクション処理であり、データベースシステムやMS-DTCなどの同時実行制御機能が利用できる。 | |
・ 長時間トランザクション処理(Long-term Transaction)とは、処理の完遂に長時間を要するトランザクション処理であり、自力での細かな設計や作り込みが求められる。 | |
・ .NETアプリケーションにて短時間トランザクション処理を制御する方法は、以下の3つに大別される。 | |
・ データベーストランザクション | |
・ マニュアルトランザクション | |
・ 自動トランザクション | |
・ 各トランザクション制御方式にはトレードオフがあるため、最適なものを選択して利用する必要がある。 | |
・ 1つの短時間トランザクション処理の中で、複数の制御方式を混在させてはならない。 | |
・ アプリケーションロジックの保守性・再利用性、設計難易度などが大幅に変わるので、システムに応じた使い分けが求められる |
.NETエンタープライズWebアプリケーション開発技術大全 Vol.5 トランザクション設計編 |
|
定価4,095円(本体3,900円+税5%) 赤間 信幸(マイクロソフト株式会社コンサルティング本部) 著 B5変型判/416p ISBN4-89100-431-2 日経BPソフトプレス発行 日経BPソフトプレスのページへ マイクロソフトプレスのページへ |
INDEX | ||
.NETエンタープライズWebアプリケーション 開発技術大全 | ||
接続型データアクセスと短時間トランザクション | ||
1.業務的なトランザクション制御 | ||
2.データベーストランザクション | ||
3.マニュアルトランザクション | ||
4.自動トランザクション | ||
5.短時間トランザクション処理の3つの制御方式の比較 | ||
「.NETエンタープライズWebアプリケーション開発技術大全」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|