何百万ものレコードを含む巨大なデータベースを備えた大規模なアプリケーションの場合、すぐに、単純な選択、更新、挿入、削除だけでは十分ではないことに気付くでしょう。
だからあなたは別の方法で考え始めます。プロシージャとトリガーを作成して、より複雑なものをデータベースで直接処理しますが、これはあまり良くありません。CRUD操作を実行すると、データベースは優れたパフォーマンスを発揮します。長い手順?それほどではありません。
手順の問題
プロシージャの概念をサポートしないデータベースに切り替えると想像してみてください。何をする?代わりにプロシージャをコードベースに移動する必要があり、Javaなどでプログラムを作成すると、どのデータベースエンジンを選択しても、常にそこに留まることがかなり確実になります。
言うまでもなく、通常、プロシージャはビジネスロジックの一部であり、コードベースとデータベース全体にビジネスロジックを適用することはお勧めできません。
理想的には、データベースと独自のビジネスルールを実装するクライアントとの間に常に仲介者がいる必要があります。データベースへの直接アクセスを提供することは良い考えではありません。これを行うと、アクセス権を持つユーザーはテーブルに直接アクセスでき、そこにあるデータでほとんど何でもできるからです。
短所
- 開発に時間がかかります:もちろん、新しいシステムを作成しています。これは、クライアントにデータベース接続文字列を与えて、クエリを作成させるだけの場合よりも時間がかかります。
- より複雑:システムの複雑さ>データベースクエリの複雑さ。
- サーバーはより多くの作業を行います。必ずしもそうではありません。優れた設計、キャッシング、...を使用して、負荷をデータベースサーバーからメディエーターの1つに移動できます。
- 遅い:開発に関しては?はい。データを取得する際の速度についてはどうですか?いいえ。キャッシュ(2016年1月の時点で人気のある -Redis、Elasticsearchなど)を使用してメディエーターを最適化し、実際のデータベースクエリよりも高速にデータを配信できます。
メリット
- 他のプラットフォームへの移行は簡単です:新しいデータベースエンジンへの移行ですか?絶対に。メディエーター全体を新しい言語に移行しますか?あんまり。
- ビジネスロジックは、データベースを直接呼び出す場合にも必要です。開発にそれほど時間はかかりません。前に説明したように、手順の問題です。
- セキュリティ:適切な承認があれば、メディエーターはデータベースへの直接アクセスを許可するよりもはるかに安全です。必要なクエリのみを実行するエンドポイントにユーザーを制限するからです。
- 保守性:メディエーターを持つことの最大の利点の1つ。クライアントが呼び出すAPIにバグがある場合は、修正し、修正をVCSリポジトリにプッシュし、修正を含む最新バージョンのVCSからメディエーターを構築します。すべてのクライアントは、修正を使用せずに突然修正を使用します。アップデートをダウンロードします。クエリがクライアントアプリケーションに直接格納されている場合、これを行うのは単に不可能です。その場合、クライアントはアプリケーションを更新する必要があります。
Security issues
REST-APIのデメリットとして数えますか?