sql >> Databasteknik >  >> NoSQL >> MongoDB

bästa praxis för django + PyMongo pooling?

Hur fungerar anslutningspoolning i PyMongo?

Varje Connection-instans har inbyggd anslutningspoolning. Som standard får varje tråd sitt eget uttag reserverat vid sin första operation. Dessa sockets hålls kvar tills end_request() anropas av den tråden.

Genom att anropa end_request() kan socket returneras till poolen och användas av andra trådar istället för att skapa en ny socket. Förnuftig användning av denna metod är viktig för applikationer med många trådar eller med långa trådar som gör få anrop till PyMongooperations .

Alternativt kommer en anslutning skapad med auto_start_request=False att dela uttag (säkert) mellan alla trådar.

Jag tror att det beror på vilken typ av applikation du har och hur länge förfrågningarna kommer att hålla på en anslutning. Idén att anropa end_request hjälper till med långvariga förfrågningar som håller fast vid en socket under lång tid och gör att många sockets skapas. Om en enskild begäran kan släppa anslutningen när den inte längre behöver den, kan uttaget återanvändas för andra förfrågningar.

Om det är snabba förfrågningar tror jag att auto_start_request=False fungerar genom att återanvända uttaget.

Att se till att en anslutning fortsätter att använda samma uttag innebär att den kommer att ha konsekventa läsningar. Tänk om du gjorde en fråga men den blev försenad, och sedan omedelbart gjorde en annan fråga och den använde ett annat uttag. Detta uttag lyckas svara före det föregående. Du skulle ha inkonsekventa data eftersom de inte återspeglar föregående skrivning.




  1. MongoDB atomic findOrCreate:findOne, infoga om det inte finns, men uppdatera inte

  2. Enkel användning av EM::Synchrony#sync orsakar "rotfiber" FiberError -- mitt fel?

  3. Vad är Hadoop Mapper Class i MapReduce?

  4. Redis serialisering prefixet med extra sträng