Overview
このガイドでは、 クエリ キャッシュ の詳細について学習できます。クエリキャッシュは、以前の検索および集計クエリの結果を保存し、将来的にはそれらを再利用します。 これにより、Mongoid がクエリを再度実行することがなくなり、アプリケーションのパフォーマンスが向上し、データベースの負荷が軽減されます。
クエリ キャッシュを有効にする
このセクションでは、アプリケーションでクエリ キャッシュ機能を有効にする方法を学習できます。 ドライバーの名前空間または Mongoid の名前空間を使用して、クエリキャッシュを有効にできます。
Automatic
Rubyドライバーは、Rack ウェブリクエストとアクティブなジョブ実行のクエリキャッシュを自動的に有効にするミドルウェアを提供します。
注意
クエリキャッシュミドルウェアは、ウェブ リクエストまたはジョブの外部で実行されるコードには適用されません。
Rack Web リクエストでのクエリキャッシュの有効化
Rubyドライバーは、ウェブリクエストごとにクエリキャッシュを有効にする Rack ミドルウェアを提供します。 次のコードは、 Ruby on Railsアプリケーションでクエリ キャッシュ ミドルウェアを有効にする方法を示しています。
# Add Mongo::QueryCache::Middleware at the bottom of the middleware # stack or before other middleware that queries MongoDB. config.middleware.use Mongo::QueryCache::Middleware
Rails アプリケーションで Rack ミドルウェアを使用する方法の詳細については、Rails ドキュメントの ミドルウェア スタックの構成 を参照してください。
アクティブなジョブでのクエリ キャッシュの有効化
Rubyドライバーは アクティブ ジョブ 用のクエリ キャッシュ ミドルウェアを提供します。次のコードに示すように、初期化のすべてのジョブに対してこれを有効にすることができます。
# Enable Mongo driver query cache for Active Job ActiveSupport.on_load(:active_job) do include Mongo::QueryCache::Middleware::ActiveJob end
次のコードに示すように、特定のジョブクラスに対して有効にすることもできます。
class MyJob < ActiveJob::Base include Mongo::QueryCache::Middleware::ActiveJob end
マニュアル
特定のコード セグメントに対してクエリキャッシュを手動で有効にするには、次のブロック内でコードを実行します。
Mongo::QueryCache.cache do # Include code here ... end
クエリキャッシュ は明示的に有効化および無効化できますが、前述のコード例では ブロック形式を使用することをお勧めします。 次のコードは、 クエリキャッシュ を有効および無効にする方法を示しています。
begin Mongo::QueryCache.enabled = true # Include code here ensure Mongo::QueryCache.enabled = false end
最初のメソッドの結果をキャッシュする
モデルクラスで first メソッドを呼び出すと、結果を返すときに _idフィールドで昇順の並べ替えが使用されます。 クエリ キャッシュを有効にすると、予期しない動作が発生する可能性があります。
例、first を呼び出す前にモデルクラスで all メソッドを呼び出すと、first メソッドでは all からのキャッシュされた結果が使用されることが予想されます。 ただし、Mongoid は 2 番目の 呼び出しにソートを適用するため、両方の方法でデータベースがクエリされ、結果が個別にキャッシュ。
first メソッドを呼び出すときにキャッシュされた結果を使用するには、次の例コードに示すように、モデルクラスで all.to_a.first を呼び出します。
Band.all.to_a.first
前の例では、to_a メソッドを連鎖させることでクエリが実行され、その結果がメモリ内の配列に変換されます。 その後、first メソッドは別のクエリをトリガーして結果をキャッシュする代わりに、最初の配列エントリのみを返します。
詳細情報
フィルタ条件の作成の詳細については、「 ドキュメントクエリの指定 」ガイドを参照してください。
永続性ターゲットをカスタマイズする方法については、「 永続性構成ガイド 」を参照してください。