2

Mongodb を使用する Flask ベースの Web アプリを実行しています (Python で使用するために Pymongo を使用)。ほぼすべてのビューがデータベースにアクセスするため、メモリと CPU リソースを最大限に活用したいと考えています。データベースへのアクセスと操作に使用される pymongo の Connection() オブジェクトをインスタンス化するための最も効率的な方法が何であるかはわかりません。現在、from pymongo import Connectionファイルの先頭で宣言し、各ビュー関数の先頭で次のように宣言しています。

def sampleViewFunction():
    myCollection = Connection()['myDB']['myCollection']
    ## then use myCollection to manipulation the database
    ## more code...

私ができるもう1つの方法は、ファイルの先頭で宣言することです:

from pymongo import Connection
myCollection = Connection()['myD']['myCollection']

その後、コードは次のようになります。

def sampleViewFunction():
    ## no declaration of myCollection since it's a global variable
    ## then use myCollection to manipulation the database
    ## more code...

したがって、唯一の違いは の宣言範囲ですmyCollection。これら 2 つの方法は、メモリの処理方法と CPU 消費の点でどのように異なるのでしょうか? これは Web アプリケーションなので、複数のユーザーが同時にサイトになるシナリオを考えています。データベースへの接続の寿命に違いがあり、パフォーマンスに影響を与える可能性があると思います。

4

1 に答える 1

3

2 番目の方法を使用する必要があります。pymongo で接続を作成すると、デフォルトで接続プールが作成されます。詳細については、こちらのドキュメントを参照してください。これが正しいやり方です。デフォルトの max_pool_size は 10 であるため、mongod インスタンスへの接続数は 10 になります。逆の方法で関数呼び出しごとにプールを作成した場合は、

  1. RAM と CPU の両方のリソースを浪費する各関数呼び出しで接続を作成および破棄します。
  2. コードがmongodに作成する接続の数を制御できません-接続でmongodをフラッディングする可能性があります
于 2012-08-27T12:57:17.150 に答える