sql >> データベース >  >> NoSQL >> MongoDB

MongoDBキャッシュシステムを理解する

    :これは、MongoDBがまだかなり若いときに、2013年に書き戻されました。現在の機能はありませんでした。この答えは、mmapにも当てはまりますが、WiredTigerなどのMongoDBが現在実装している他のストレージテクノロジーには当てはまりません。またはPercona。

    何であるかを正確に理解し始めるのに適した場所 インデックス:http://docs.mongodb.org/manual/core/indexes/

    それをブラッシュアップした後、あなたはそれがとても良い理由を理解しますが、より複雑な質問のいくつかにスキップします。

    クエリするデータがメモリからのものであるかどうかをどのように確認できますか?

    1つの方法は、yieldsを確認することです。 クエリのフィールドexplain() 。これにより、データがRAMになかったためにリーダーがロックを解除した回数がわかります。

    もう1つのより詳細な方法は、mongostatや他のそのようなプログラムのようなプログラムを調べることです。これらのプログラムは、mongodで発生しているページフォールト(データをディスクからRAMにページングする必要がある場合)について通知します。 。

    MongoDBが空きメモリを使用して、現時点で空きメモリに関するデータをキャッシュすることを理解していますが、誰かがグローバルな動作をさらに説明できますか?

    これは実際には正しくありません。 MongoDBがこれを行うと言うのは簡単ですが、実際にはそうではありません。実際、MongoDBに対してこれを行うのは、OSと独自のページングアルゴリズム(通常はLRU)です。 MongoDBは、インデックスプランを一定期間キャッシュするため、インデックスのチェックとテストを継続的に行う必要はありません。

    どちらの場合、MongoDBキャッシュシステムを信頼するよりも、データを格納するノードサーバーで変数を使用する方がよいでしょうか?

    それがどのように機能するかわからない...つまり、この2つはまったく異なることを行うので、起動時にMongoDBからアプリケーションにデータを読み込んで、その変数を使用する場合は、絶対にお勧めしません。

    さらに、メモリ管理用のOSアルゴリズムは非常に成熟していて高速なので、問題ありません。

    大量のトラフィックにMongoDBを使用することをグローバルにどのようにアドバイスしますか?

    うーん、これはとても大きな質問です。このテーマについては、Googleを少しお勧めしますが、ドキュメントに記載されているように、ワーキングセットがRAMに収まるようにする必要があります。

    ここに良い出発点があります:「ワーキングセット」をMongoDBのRAMに収めることはどういう意味ですか?



    1. Laravel Redis ::scan('*')が期待されるキーを返すのに、Redis ::keys(' *')が返さないのはなぜですか?

    2. マングースのfindOneサブドキュメント

    3. RedisとMongoDB

    4. .NETを介してMongoDBでインデックスを作成する方法