2017-04-05 4 views
0

私のサーバは頻繁にdbに問い合わせます。 多くの場合、クエリは変更されていないデータを取得します。 したがって、キャッシュされた結果を作成して保存したいと思います。別にmongoDBインスタンスを2つ用意する必要がありますか?

私の主のMongoDBは、リモートアドレスに格納されているので、ローカルのMongoDBインスタンスと比較して応答するようにわずかに長くかかります。したがって、ローカルホスト上で動作する、より小さく、より静的なmongoDBを持つことが有益であると考えました。

リアルタイムクエリは、リモートメインDB上で実行され、小さい、時間効率的なクエリは、速度を最適化するためにローカルホストにキャッシュされたコレクションで実行される、ようになっています。

  • これを行うことができるものですか?
  • 人々が避けることをおすすめしますか?
  • どのように私は2つの接続を設定しますか?1つはメインリモートサーバーに、もう1つはローカルサーバーに です。

これは原理的には

var mongooseMain = require ('mongoose'); 
    var mongooseLocal = require ('mongoose'); 
    mongooseMain.connect(mainDBInfo.url); 
    mongooseLocal.connect(localDBInfo.url); 

答えて

0

私には間違っているようだ、あなたは正しい考えを持っています!キャッシングは、パフォーマンスの高いWebアプリケーションを構築する上で非常に重要です。

まず第一に、MongoDBはメモリにそれが使用しているすべてをキャッシュしたいし、それがキャッシュメモリに何を保つために、何の外に投げることを決定するのは非常にうまく設計されたシステムを持っています。オブジェクトがキャッシュにないことを要求された場合、ディスクからそれを読み取る必要があります。 MongoDBがメモリではなくディスクから読み込むと、ページフォールトと呼ばれます。

もちろん、このメモリキャッシュはリモートサーバー上にあるため、引き続き処理するネットワーク待ち時間があります。この遅延を排除するために

、私はあなたが頻繁から読み取るシリアライズされたオブジェクトを保存することをお勧めしますが、めったにRedisに、に書き込みません。これはレディスが造られたものです。これは基本的に辞書(キー:値)で、簡単にSETGETから入力できます。あなたのローカルマシン上で簡単にredis-serverを実行することができます。また、SETEXを使ってオブジェクトを辞書に設定することもできます。これは、一意のキーとキャッシュから追い出す必要がある期限があります。

それらが更新されますかいつでもあなたは手動でもキャッシュからオブジェクトを立ち退かせることができます(私は現時点ではキャッシュにそれらを再書き込みをお勧めします)。次に、オブジェクトが必要なときは常に、キャッシュから最初に読み込みを試み、キーがnullの場合はMongoDBにフォールバックしてください。

あなたのアプリケーションでそれをチェックして、幸運をチェックしてください!

関連する問題