いずれかのDBMS(Oracle、MySQL、SQLite、PostGres)が結果セットのキャッシュを提供しますか?データベースの負荷を減らすためにSQL結果をキャッシュする最も一般的な方法を理解しようとしています。私の理解では、データベースはアプリケーションをスケーリングするためのボトルネックであり、キャッシングはデータベースの負荷を減らすのに役立ちます。
DBMSが結果のキャッシュを提供しない場合、Memcacheなどのキャッシュツールを使用することをお勧めしますか?
データベースは通常、結果セット自体ではなく、クエリの実行プランをキャッシュします。
実行可能なアプローチの1つは、提案したことを確実に実行し、これにMemcacheを使用することです。Memcacheは、この種の機能を提供する多くのツールの1つにすぎません。決定は、作業している環境、アプリケーションのタイプ(WebとWindows)、アーキテクチャなどに大きく依存します。
結果セットが大きすぎない場合は、たとえば、メモリにキャッシュする可能性があります。
Oracleは、キャッシュを実現するためのいくつかの方法を提供します。使用しているOracleデータベースのバージョンによって異なります。古いバージョンでは、「テーブルをメモリに固定する」ことを選択できました。これにより、頻繁にアクセスされるテーブルが効果的にキャッシュにキャッシュされました。ここでは、これを少し自由に使用できるように注意する必要があります。マテリアライズド・ビューを使用するオプションもあります。さて、これはキャッシングの方法ではありませんが、キャッシングと同じラインに沿った利点があります。Oracle 11gでは、データベースレベルとセッションレベルの両方でクエリをキャッシュできるようになりました。これは、ヒントを使用して実現されます。RESULT_CACHE_MODEおよびRESULT_CACHEを探します。さまざまな構成設定があり、EXPLAINPLANはクエリがRESULTCACHEから読み取られているかどうかを表示できます。私はしません