sql >> Databasteknik >  >> RDS >> PostgreSQL

Använda Django ORM i trådar och undvika för många klientundantag genom att använda BoundedSemaphore

Djangos ORM hanterar databasanslutningar i trådlokala variabler. Så varje annan tråd som kommer åt ORM kommer att skapa sin egen anslutning. Du kan se det på de första raderna i django/db/backends/__init__.py .

Om du vill begränsa antalet databasanslutningar som görs måste du begränsa antalet olika trådar som faktiskt kommer åt ORM. En lösning kan vara att implementera en tjänst som delegerar ORM-förfrågningar till en pool av dedikerade ORM-trådar. För att överföra förfrågningarna och deras resultat från och till andra trådar måste du implementera någon form av meddelandeöverföringsmekanism. Eftersom detta är ett typiskt producent-/konsumentproblem bör Python-dokumentationen om trådning ge några tips om hur man uppnår detta.

Redigera: Jag har precis googlat efter "django-anslutningspooling". Det är många som klagar på att Django inte tillhandahåller en ordentlig anslutningspool. Några av dem lyckades integrera ett separat poolpaket. För PostgreSQL skulle jag ta en titt på pgpool-mellanvaran.




  1. Databasmedveten lastbalansering:Hur man migrerar från HAProxy till ProxySQL

  2. Subtrahera två raders värden inom samma kolumn med Mysql-grupp efter ID

  3. Köra flera PostgreSQL-instanser på en enda värd

  4. Beräknar du Z-Score för varje rad i MySQL? (enkel)