MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

bonne pratique de la mutualisation django + PyMongo ?

Comment fonctionne le regroupement de connexions dans PyMongo ?

Chaque instance de Connection dispose d'un regroupement de connexions intégré. Par défaut, chaque thread obtient son propre socket réservé lors de sa première opération. Ces sockets sont conservés jusqu'à ce que end_request() soit appelé par ce thread.

L'appel de end_request() permet au socket d'être renvoyé dans le pool et d'être utilisé par d'autres threads au lieu de créer un nouveau socket. L'utilisation judicieuse de cette méthode est importante pour les applications avec de nombreux threads ou avec des threads de longue durée qui effectuent peu d'appels à PyMongooperations .

Alternativement, une connexion créée avec auto_start_request=False partagera les sockets (en toute sécurité) entre tous les threads.

Je pense que cela dépend du type d'application que vous avez et de la durée pendant laquelle les demandes conserveront une connexion. L'idée d'appeler end_request aide avec les requêtes de longue durée qui s'accrochent à un socket pendant une longue période et provoquent la création de nombreux sockets. Si une seule requête peut libérer la connexion lorsqu'elle n'en a plus besoin, le socket peut être réutilisé pour d'autres requêtes.

S'il s'agit de requêtes rapides, je crois que le auto_start_request=False fonctionne en réutilisant le socket.

S'assurer qu'une connexion continue d'utiliser le même socket signifie qu'elle aura des lectures cohérentes. Pensez si vous avez fait une requête mais qu'elle a été retardée, puis que vous avez immédiatement fait une autre requête et qu'elle a utilisé un socket différent. Cette socket parvient à répondre avant la précédente. Vous auriez des données incohérentes car elles ne reflètent pas l'écriture précédente.