「キャッシュをウォームに保つ」という更新された質問コンテキストを考えると、データが使用可能なメモリに快適に収まらない限り、すべてのデータベースドキュメントにアクセスする戦略は、パフォーマンスを向上させるのではなく、低下する可能性があります。
MongoDBでのキャッシュは、ファイルシステムキャッシュのオペレーティングシステムの動作に依存します。これは通常、使用頻度が最も低い(LRU)アプローチに従ってキャッシュを解放します。つまり、時間の経過とともに、メモリ内の作業データセットは当然「ウォーム」データになるはずです。
データをメモリに強制的に読み込むと、エンドユーザーがほとんど(またはまったく)アクセスしないドキュメントをロードする可能性があります。アプリケーションユーザーが実際に頻繁に要求する可能性のあるデータを犠牲にする可能性があります。
キャッシュを「予熱」するユースケースがあります。たとえば、MongoDBサーバーを再起動し、データまたはインデックスをメモリにロードする場合です。
MongoDB 2.2では、この目的のために新しいtouch
コマンドを使用できます。
予熱のための他の戦略は、本質的にを使用して逆最適化を行うことexplain()
です。nscanned
インデックスエントリ( )とドキュメント( )の数を最小化しようとする代わりに、nscannedObjects
これらのエントリを意図的に最大化するクエリを作成します。
APIの応答時間の目標を設定すると、誰かの最初の呼び出しでデータをメモリにフェッチする必要があったとしても、それでもかなり迅速にインデックスを取得できるはずです。アプリケーションに多くの処理オーバーヘッドがない限り、3〜4秒の応答という目標は寛大なようです。MongoDBのデフォルトの「遅い」クエリ値は100ミリ秒です。