プログラムのどの部分をどこで実行するかを決めるのは良い質問です。Classic ASP と MS SQL Server を使用してアプリケーションをコーディングしていたときに、同様の質問がありました。
質問に答える前に、Web アプリケーションには少なくとも 3 つの層があることに注意してください。
- クライアントの Web ブラウザなどのプレゼンテーション層
- アプリケーション層 - PHP、JSP、または ASP サーバーが実行される場所
- データベース層 - データが存在する場所。
プレゼンテーション層で実行可能なデータ検証は、そこに置くのが常識です。たとえば、特定のフォーム フィールドが空かどうかを確認します。
アプリケーションを他の 2 つの層 (アプリケーション層とデータベース層) で開発する必要がある場合は興味深いことです。多くの悪いプログラマーは、Web サーバーと DB サーバーの間で非常に小さなことを何度も往復するような方法でコーディングします。このような場合、データベースにストアド プロシージャをコーディングすることを検討する必要があります。
ご指摘の点について、次のようにお答えしたいと思います。
速度を要求します。
Web サーバーとデータベース サーバー間の往復が少なくなるため、Web サーバーへの要求はより高速に処理されます。この違いは、アプリケーションが非常に複雑になり、データが数百 TB という意味で大きくなりすぎる場合に特に顕著です。処理負荷は Web サーバーから DB サーバーに転送されるため、Web サーバーはクライアントの要求に対してより利用可能になります。
セキュリティ面。(プログラムとデータベース)。
プログラムに提供されるセキュリティは、Web サーバー レベルとデータベース レベルの 2 つのレベルになりました。これら 2 つの間の通信を制限して、プログラムが崩壊せず、データが損なわれないようにすることができます。
スケーラビリティ。
Web サーバー コードとデータベース サーバー コードは、現在 2 つの異なる層にあります。両方の層は、要件に応じて個別にスケーリングできます。スケーラビリティの正確な意味については、こちらをお読みください。
収益性。
これにどう答えたらいいのかわかりませんが、ある考えが頭に浮かびました: データベース サーバーにお金を払って、Web サーバーが過負荷になっている間、アイドル状態にしておくとしたら、何の意味があるのでしょうか? もし私がデータベースサーバーにお金を払っているなら、私のウェブサーバーが持っている処理負荷の一部をデータベースサーバーに与えることで、それを最大限に活用したいと思います.
使いやすい時とそうでない時。
Web サーバーとデータベース サーバー間の往復が多すぎる場合に使用すると便利です。これについては何度も言及しているかもしれませんが、この問題は大きな頭痛の種であることが判明しました。
都合が悪い時は?まあ、単一の SQL ステートメントが必要なすべてを実行する単純なケースでは。
その他、良い点と悪い点。
- これらの 2 つの層の間の通信 (何が渡され、何が受信されるか) を確認する必要があります。間違いがあると両方の層が妨げられるため、すべてを十分に文書化しておいてください。