[解決済み] なぜ開発者はデータベースへの直接接続ではなく、ウェブサービスを使うべきなのでしょうか?[クローズド]
質問
私は、データベースへ直接接続するのではなく、Web サービスを介してリモート データベースへ接続する理由のトップ 10 リストが欲しいのです。これは現在社内で議論されていることで、私はウェブサービスを支持していますが、議論には負けています。私はWCF/ウェブサービスについて基本的なことは理解していますが、他の誰も理解していません。私たちは今後やりたいことは何でもできますが、今選択したものには固執する必要があります。
これが私が思いついたものです。他に何かありますか?
- WCF ウェブサービスは、正しく構成されていれば、より安全にすることができます。
- DBへの変更は、サービスレベル(設定ファイルまたはサービスのリコンパイル)でしか行う必要がありません。
- 一度セットアップしてホスティングすれば、ウェブサービスは簡単に利用できるようになります。
どのように解決するのですか?
-
セキュリティを確保する Webサーバ/アプリのユーザ以外にはDBアクセス権を与えないようにする。
これは、大量のユーザがいる場合に特に重要です。DB側でのユーザーやロールのメンテナンスの手間を省くことができます。
-
DBの負荷軽減。ウェブサービスはDBから取得したデータをキャッシュすることができる。
-
データベースコネクションプーリング(hat/tip @Dogs)。
ウェブサービスは恒久的に開かれたDB接続の小さなプールを使うことができます。これはさまざまな方法で役に立ちます。
-
DB 接続プールは、データベースサーバー側で制限されます。
-
新しいDB接続を開くことは、非常にコストがかかります(特にデータベースサーバに)。
-
-
フォールトトレランスの能力 - サービスは、フェイルオーバーの詳細をサービス消費者が実装することなく、プライマリ/DRデータソース間で切り替えが可能です。
-
スケーラビリティ - サービスは、リソースピッキングの詳細をサービスコンシューマに実装させることなく、複数の並列データソース間でリクエストを分散させることができます。
-
カプセル化。サービス利用者に影響を与えることなく、基盤となるDB実装を変更することができます。
-
データの充実 (これには、クライアントのカスタマイズからローカライズ、内部化まであらゆるものが含まれます)。基本的にこれらのどれもが有用かもしれませんが、どれもがデータベースへの大きな負荷であり、しばしばDB内部で実装するのは非常に困難です。
-
適用されるかもしれないし、されないかもしれない - ある種のアーキテクチャの決定は、DBへのアクセスに優しくはありません。 たとえば、Unix 上で動作する Java サーバーはデータベースに簡単にアクセスできますが、Windows PC 上で動作する Java クライアントはデータベースを意識していませんし、そうであってほしいとも思っていないでしょう。
-
移植性。クライアントはすべて同じプラットフォーム/アーキテクチャ/言語上にあるとは限りません。それぞれに優れたデータアクセス層を再作成することは、Webサービス用のコンシューマ層を構築するよりも困難です(前述のフェイルオーバーなどの問題を考慮しなければならないため...)。
-
パフォーマンスチューニング。クライアントが(あらかじめ用意されたストアドプロシージャではなく)独自のクエリを実行すると仮定すると、最適ではないクエリを使用し始めることは100%確実です。また、ウェブサービスが許容されるクエリのセットを制限している場合、データベースのチューニングに大きく役立ちます。このロジックはストアドプロシージャにも同様に適用可能であり、Webサービスに固有のものではないことを付け加えておかなければなりません。
良いリストもあります を参照してください。データベースアクセスのカプセル化。アジャイルなベストプラクティス(A Agile "Best" Practice)」。
はっきりさせておきたいのですが、これらの問題のいくつかは、すべての状況に適用できるわけではありません。ポータビリティを気にしない人もいます。DBのセキュリティについて心配する必要がない人もいます。DBのスケーラビリティについて心配する必要がない人もいます。
関連
-
[解決済み] デフォルトのエンドポイント要素が見つからない
-
[解決済み] w3wp.exeとは何ですか?
-
[解決済み】WCFとASMXのWebサービスの違いは何ですか?
-
[解決済み】Windows 8のIISでWCFサービスを提供できない。
-
[解決済み】WCFサービスからきれいなJSONを返すにはどうすればいいですか?
-
[解決済み] WCFサービスのタイムアウト値を増加させる
-
[解決済み] WCFサービスアプリケーションとWCFサービスライブラリの違いは何ですか?
-
[解決済み] WSDLファイルを使用してWCFサービスを作成する方法(呼び出しは行わない)。
-
[解決済み] WCFサービス、タイムアウトを増加させる方法は?
-
[解決済み] WCFタイムアウト例外の詳細調査
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] デフォルトのエンドポイント要素が見つからない
-
[解決済み] Windows 7のsvcutil.exeはどこにあるのですか?
-
[解決済み] w3wp.exeとは何ですか?
-
[解決済み] WCFサービスのREST / SOAPエンドポイント
-
[解決済み】Windows 8のIISでWCFサービスを提供できない。
-
[解決済み] WcfTestClient.exe (Visual Studioの一部)はどこにありますか?
-
[解決済み] WCFトレースをオンにするには?
-
[解決済み] WCFサービスのタイムアウト値を増加させる
-
[解決済み] EndpointDispatcherの例外でContractFilterの不一致が発生する。
-
[解決済み] WCFサービス、タイムアウトを増加させる方法は?