応用情報技術者 2012年 春期 午前2 問15
問題文
ストアドプロシージャの特徴を生かして通信回数を減らしたシステムをクライアントサーバシステムで実現するとき、クライアントとサーバの機能分担構成はどれか。ここで、データベースアクセス層は DB 層、ファンクション層は FN 層、プレゼンテーション層は PR層とそれぞれ略す。

選択肢
ア:
イ:(正解)
ウ:
エ:
🔒 解説は解答すると表示されます
通信回数削減の役割分担【午前2解説】
正解の理由
選択肢イはクライアントがプレゼンテーション(PR)と一部のファンクション(FN)を担当し、サーバ側にデータベース(DB)と主要なFN(=DBアクセスを伴う処理、ストアドプロシージャ化する処理)を置く構成です。ストアドプロシージャを用いる最大の効果は「複数のDB操作をサーバ内部で完結させ、クライアントとサーバ間の往復(ラウンドトリップ)を大幅に減らす」点にあります。イの構成では、DBアクセスを伴うロジックをサーバ側のFN層(ストアドプロシージャ)で集中実行できるため、クライアントは1回の呼び出しで必要な処理結果を受け取り、通信回数が最小化されます。よって通信回数削減の観点で最適なのはイです。
解法ステップ
- 目的を明確化:ストアドプロシージャで通信回数を減らすには「DBへアクセスする処理(DBに対する複数操作)」をサーバ側にまとめて置く必要があると確認します。
- 各層の役割を整理:
- DB層:実データの保管・トランザクション。
- FN層:ビジネスロジック(DBアクセスを伴う処理はここに集約可能)。
- PR層:画面表示・ユーザー操作の受け渡し(頻繁なデータ転送は避けたい)。
- 各選択肢を「どこでDBアクセスが発生するか」「クライアントとサーバの往復回数がどうなるか」で比較する。
- 例で確認(簡単化したラウンドトリップ数):
- クライアント側で多くのDB呼び出しを行う場合:処理ごとに往復が発生して (n 回)となる。
- ストアドプロシージャでまとめる場合:1回の呼び出しでサーバ内部で完結 → 。
イはこの「まとめ実行」が可能な設計になっているため通信回数が減る。
(注)イの表記は「クライアントもFNを持つ」となっていますが、ここでのクライアント側FNは主に画面制御や入力検証等の軽量処理に限り、DBアクセスを伴う主要なビジネスロジックはサーバ側FNに集約される想定です。
選択肢別の誤答解説
- ア:クライアントにDB層まで置く構成
- 問題点:クライアントにDBがあるとデータの一貫性と同期が複雑になります。さらに、クライアント側で直接DB操作を行う場合、サーバとの整合性を取るための通信や同期処理が増えることになり、通信回数削減の目的に反します。
- ウ:サーバにDB層とPR層を置く構成
- 問題点:PR層(画面表現)をサーバに置くと、画面更新のたびに大量のプレゼンテーションデータ(画面描画用データやHTML等)をクライアントへ送る必要があり、通信量や頻度が増えます。頻繁なUI操作がある環境では往復が増え、通信削減効果が薄れます。
- エ:クライアントはPR層のみ、サーバにDB・FN・PRを集中させる構成(極端な薄いクライアント)
- 問題点:サーバ側でPRまで処理するとクライアントに表示用データを頻繁に送り続ける必要が生じ、特にUIの応答性や帯域に対して負荷が高まります。プレゼン情報の頻出転送によりネットワーク負荷が増加し、通信回数削減の観点では不利です。
よくある誤解
- 「ストアドプロシージャを使えばすべての処理をクライアント側に任せてよい」
- 誤解です。ストアドプロシージャはサーバ側で処理をまとめて実行する手段であり、むしろDBアクセスを伴う処理はサーバに集約することが目的です。クライアントにすべて任せると逆に多数のDBアクセスや同期問題で通信が増えます。
- 「サーバ側にPR層を置けば通信回数が減る」
- 部分的には処理呼び出しはサーバ内で完結しますが、PR層をサーバに置くと画面表示に関わるデータを細かく送受信することになりがちで、結果として通信回数や通信量が増えることが多い点に注意してください。
- 「FNをサーバに全部置せば常に最適」
- FNをサーバに集約するとラウンドトリップは減りますが、サーバ負荷やスケーラビリティ、可用性への影響も考慮する必要があります。選択は通信削減だけでなく運用面の制約も踏まえて行うべきです。
補足コラム
- ストアドプロシージャを用いる利点と注意点:
- 利点:ネットワーク往復の削減、DB側での最適化(インデックス活用やトランザクションの局所化)、セキュリティ(クライアントから直接SQLを発行させない)
- 注意点:DBサーバに処理負荷が集中しやすく、スケールアウトが難しくなることや、ロジックのバージョン管理が複雑になる点
- 実務判断の指標:操作ごとのDB呼び出し回数、画面更新頻度、処理の重さ(CPU/メモリ)、ネットワーク帯域といった要素を定量的に比較して、FNをどの程度サーバに置くか決めます。
FAQ
Q1: クライアントに軽いFNを残す理由は何ですか?
A1: 入力検証や画面遷移制御など、ユーザー体験を向上させるためにレスポンスを速くしたい処理はクライアント側で処理します。これにより、不要なサーバ呼び出しを避けつつ、DBアクセスを伴う重い処理だけをサーバ側に委ねられます。
A1: 入力検証や画面遷移制御など、ユーザー体験を向上させるためにレスポンスを速くしたい処理はクライアント側で処理します。これにより、不要なサーバ呼び出しを避けつつ、DBアクセスを伴う重い処理だけをサーバ側に委ねられます。
Q2: イと「完全にFNをサーバに置く」構成はどう違いますか?
A2: 完全にサーバにFNを置けばさらにラウンドトリップは減りますが、その分サーバ負荷が増大します。選択肢の中で現実的なバランスを取ると、イのようにPRはクライアント、DBアクセス主体のFNはサーバにする方法が通信削減と応答性の両立につながります。
A2: 完全にサーバにFNを置けばさらにラウンドトリップは減りますが、その分サーバ負荷が増大します。選択肢の中で現実的なバランスを取ると、イのようにPRはクライアント、DBアクセス主体のFNはサーバにする方法が通信削減と応答性の両立につながります。
Q3: ストアドプロシージャで通信回数はどれくらい減るか?
A3: 定性的には「複数回のDB呼び出しが1回の呼び出しで済む」ことが多く、例えば処理前は 回の往復が必要だったものがストアドプロシージャで 回に削減される場合があります(n は元のDB呼び出し回数)。
A3: 定性的には「複数回のDB呼び出しが1回の呼び出しで済む」ことが多く、例えば処理前は 回の往復が必要だったものがストアドプロシージャで 回に削減される場合があります(n は元のDB呼び出し回数)。
関連キーワード: ストアドプロシージャ、クライアントサーバ、FN層、DB層、PR層、ラウンドトリップ、帯域、スケーラビリティ

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

