MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Best Practice für Django + PyMongo-Pooling?

Wie funktioniert das Verbindungspooling in PyMongo?

Jede Connection-Instanz verfügt über ein integriertes Verbindungspooling. Standardmäßig erhält jeder Thread bei seiner ersten Operation einen eigenen reservierten Socket. Diese Sockets werden gehalten, bis end_request() von diesem Thread aufgerufen wird.

Durch den Aufruf von end_request() kann der Socket an den Pool zurückgegeben und von anderen Threads verwendet werden, anstatt einen neuen Socket zu erstellen. Die vernünftige Verwendung dieser Methode ist wichtig für Anwendungen mit vielen Threads oder mit lang laufenden Threads, die nur wenige Aufrufe an PyMongo-Operationen vornehmen .

Alternativ teilt eine Verbindung, die mit auto_start_request=False erstellt wurde, Sockets (sicher) zwischen allen Threads.

Ich denke, es kommt auf die Art der Anwendung an, die Sie haben, und wie lange die Anfragen eine Verbindung halten. Die Idee, end_request aufzurufen hilft bei lang laufenden Anfragen, die lange an einem Socket festhalten und dazu führen, dass viele Sockets erstellt werden. Wenn eine einzelne Anfrage die Verbindung trennen kann, wenn sie nicht mehr benötigt wird, kann der Socket für andere Anfragen umfunktioniert werden.

Wenn es schnelle Anfragen sind, dann glaube ich dem auto_start_request=False funktioniert durch Wiederverwendung des Sockets.

Wenn sichergestellt wird, dass eine Verbindung immer denselben Socket verwendet, bedeutet dies, dass sie konsistente Lesevorgänge hat. Stellen Sie sich vor, Sie haben eine Abfrage durchgeführt, die jedoch verzögert wurde, und dann sofort eine weitere Abfrage durchgeführt und einen anderen Socket verwendet. Dieser Socket schafft es, vor dem vorherigen zu antworten. Sie hätten inkonsistente Daten, da sie den vorherigen Schreibvorgang nicht widerspiegeln.