MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

migliore pratica del pool di django + PyMongo?

Come funziona il pool di connessioni in PyMongo?

Ogni istanza di Connection ha un pool di connessioni integrato. Per impostazione predefinita, ogni thread ottiene il proprio socket riservato alla prima operazione. Quei socket vengono mantenuti finché end_request() non viene chiamato da quel thread.

La chiamata a end_request() consente al socket di essere restituito al pool e di essere utilizzato da altri thread invece di creare un nuovo socket. Un uso giudizioso di questo metodo è importante per le applicazioni con molti thread o con thread a esecuzione prolungata che effettuano poche chiamate a PyMongooperations .

In alternativa, una connessione creata con auto_start_request=False willcondividere i socket (in modo sicuro) tra tutti i thread.

Penso che dipenda dal tipo di applicazione che hai e per quanto tempo le richieste manterranno una connessione. L'idea di chiamare end_request aiuta con le richieste di lunga durata che trattengono un socket per molto tempo e provocano la creazione di molti socket. Se una singola richiesta può rilasciare la connessione quando non ne ha più bisogno, il socket può essere riutilizzato per altre richieste.

Se sono richieste veloci, allora credo che il auto_start_request=False funziona riutilizzando la presa.

Garantire che una connessione continui a utilizzare lo stesso socket significa che avrà letture coerenti. Pensa se hai fatto una query ma è stata ritardata, quindi hai immediatamente eseguito un'altra query e ha utilizzato un socket diverso. Questa presa riesce a rispondere prima della precedente. Avresti dati incoerenti poiché non riflettono la scrittura precedente.