10

db = pymongo.Connection()Django の views.py で、単純な MongoDB 接続を呼び出して、いくつかの単純な統計を保存しています。

MongoDB 接続プールを自動サポートするためのベスト プラクティスは何ですか?

end_request()コードはどこに置く必要がありますか?

max_pool_size接続中にパラメータを選択するにはどうすればよいですか?

4

1 に答える 1

12

PyMongoで接続プーリングはどのように機能しますか?

すべての Connection インスタンスには、組み込みの接続プールがあります。デフォルトでは、各スレッドは最初の操作で予約された独自のソケットを取得します。これらのソケットは、そのスレッドによって end_request() が呼び出されるまで保持されます。

end_request() を呼び出すと、ソケットがプールに返され、新しいソケットを作成する代わりに他のスレッドで使用できるようになります。このメソッドを慎重に使用することは、多くのスレッドを持つアプリケーションや、PyMongo 操作への呼び出しをほとんど行わない長時間実行されるスレッドを持つアプリケーションにとって重要です。

あるいは、auto_start_request=False で作成された Connection は、すべてのスレッド間で (安全に) ソケットを共有します。

それは、使用しているアプリケーションの種類と、リクエストが接続を保持する時間に帰着すると思います. 呼び出すという考え方はend_request、長時間実行されるリクエストがソケットに長時間保持され、多くのソケットが作成される原因となる場合に役立ちます。1 つの要求で接続が不要になったときに接続を解放できる場合は、ソケットを他の要求に再利用できます。

それらが高速な要求である場合auto_start_request=False、ソケットを再利用することで機能すると思います。

接続が同じソケットを使用し続けることを保証することは、一貫した読み取りが行われることを意味します。クエリを作成したが遅延が発生し、すぐに別のクエリを作成して別のソケットを使用したとします。このソケットは、前のソケットよりも前に応答することができます。以前の書き込みが反映されていないため、データの一貫性が失われます。

于 2012-07-16T05:59:02.423 に答える