sql >> Base de Datos >  >> NoSQL >> MongoDB

¿La mejor práctica de django + PyMongo pooling?

¿Cómo funciona la agrupación de conexiones en PyMongo?

Cada instancia de Connection tiene una agrupación de conexiones integrada. De forma predeterminada, cada subproceso tiene su propio socket reservado en su primera operación. Esos sockets se mantienen hasta que ese hilo llama a end_request().

Llamar a end_request() permite que el socket se devuelva al grupo y que otros subprocesos lo utilicen en lugar de crear un nuevo socket. .

Alternativamente, una conexión creada con auto_start_request=False compartirá sockets (de forma segura) entre todos los subprocesos.

Creo que todo se reduce al tipo de aplicación que tiene y cuánto tiempo se mantendrán las solicitudes en una conexión. La idea de llamar a end_request ayuda con las solicitudes de ejecución prolongada que se mantienen en un socket durante mucho tiempo y hacen que se creen muchos sockets. Si una sola solicitud puede liberar la conexión cuando ya no la necesita, entonces el socket se puede reutilizar para otras solicitudes.

Si son solicitudes rápidas, creo que auto_start_request=False funciona reutilizando el zócalo.

Asegurarse de que una conexión siga usando el mismo socket significa que tendrá lecturas consistentes. Piense si realizó una consulta, pero se retrasó, e inmediatamente realizó otra consulta y utilizó un socket diferente. Este socket logra responder antes que el anterior. Tendría datos inconsistentes ya que no refleja la escritura anterior.