sql >> Database >  >> NoSQL >> MongoDB

best practice van django + PyMongo pooling?

Hoe werkt pooling van verbindingen in PyMongo?

Elke Connection-instantie heeft ingebouwde pooling voor verbindingen. Standaard krijgt elke thread zijn eigen socket gereserveerd bij de eerste bewerking. Die sockets worden vastgehouden totdat end_request() wordt aangeroepen door die thread.

Door end_request() aan te roepen, kan de socket worden teruggestuurd naar de pool en kan deze worden gebruikt door andere threads in plaats van een nieuwe socket te maken. Verstandig gebruik van deze methode is belangrijk voor toepassingen met veel threads of met langlopende threads die weinig oproepen doen naar PyMongooperations .

Als alternatief kan een verbinding gemaakt met auto_start_request=False sockets (veilig) tussen alle threads delen.

Ik denk dat het neerkomt op het type applicatie dat je hebt en hoe lang de verzoeken een verbinding vasthouden. Het idee om end_request . te bellen helpt bij langlopende verzoeken die een socket lang vasthouden en ervoor zorgen dat er veel sockets worden gemaakt. Als een enkel verzoek de verbinding kan vrijgeven wanneer het deze niet langer nodig heeft, kan de socket opnieuw worden gebruikt voor andere verzoeken.

Als het snelle verzoeken zijn, geloof ik dat de auto_start_request=False werkt door de socket opnieuw te gebruiken.

Als u ervoor zorgt dat een verbinding dezelfde socket blijft gebruiken, betekent dit dat deze consistente uitlezingen heeft. Stel je voor dat je een query hebt gemaakt, maar deze vertraging heeft opgelopen en vervolgens meteen een nieuwe query hebt gemaakt en een andere socket heeft gebruikt. Deze socket slaagt erin om eerder te reageren dan de vorige. U zou inconsistente gegevens hebben omdat deze niet overeenkomen met de vorige schrijfactie.




  1. Gegevensstroom opslaan van POST-verzoek in GridFS, express, mongoDB, node.js

  2. golang + redis concurrency scheduler prestatieprobleem

  3. MongoDB $nin Query-operator

  4. Mongodb:kon geen verbinding maken met 127.0.0.1:27017, reden:errno:10061