MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

melhor prática de django + PyMongo pooling?


Como o pool de conexões funciona no PyMongo?

Cada instância de Connection tem um pool de conexões integrado. Por padrão, cada thread recebe seu próprio soquete reservado em sua primeira operação. Esses soquetes são mantidos até que end_request() seja chamado por esse thread.

Chamar end_request() permite que o socket seja retornado ao pool e seja usado por outros threads em vez de criar um novo socket. O uso criterioso desse método é importante para aplicativos com muitos threads ou com threads de execução longa que fazem poucas chamadas para operações PyMongo .

Alternativamente, uma conexão criada com auto_start_request=False compartilhará sockets (com segurança) entre todas as threads.

Eu acho que se resume ao tipo de aplicativo que você possui e por quanto tempo as solicitações manterão uma conexão. A ideia de chamar end_request ajuda com solicitações de longa execução mantendo um soquete por um longo tempo e fazendo com que muitos soquetes sejam criados. Se uma única solicitação puder liberar a conexão quando ela não for mais necessária, o soquete poderá ser reaproveitado para outras solicitações.

Se forem solicitações rápidas, acredito que o auto_start_request=False funciona reutilizando o soquete.

Garantir que uma conexão continue usando o mesmo soquete significa que terá leituras consistentes. Pense se você fez uma consulta, mas atrasou e, imediatamente, fez outra consulta e usou um soquete diferente. Este socket consegue responder antes do anterior. Você teria dados inconsistentes, pois eles não refletem a gravação anterior.