django 1.7 et le regroupement de connexion à PostgreSQL?

quelles sont les différences entre les applications django (Django-PostgresPool, djorm-ext-pool, django-db-pool) et PG Bouncer ou PG Pool?

les applications d'utiliser l'un des deux derniers paquets?

cet article, l'auteur dit qu'il y a un patch à partir de django 1.6. Est-ce que cela signifie que nous n'avons plus besoin d'utiliser aucune de ces solutions, ni les applications, ni le paquet PG Bouncer ou PG Pool?

12
demandé sur Michael 2014-10-20 20:13:29

2 réponses

les connexions aux bases de données Postgres sont coûteuses (ressources) par rapport aux connexions MySQL. Django pooling apps va ouvrir de nombreuses connexions et de garder ouvert.

PG Bouncer et PG Pool ouvriront moins de connexions vers Postgres, tout en maintenant un grand nombre de connexions locales (app vers PG Bouncer/PG Pool) et en les réutilisant.

pour une meilleure performance, vous voulez les deux: connexions persistantes de Django à PG Pool / PG Bouncer.

dans notre cas commutation les connexions persistantes ont réduit le temps de réponse moyen de 10ms (plus de 20%) sur les SSFE.

11
répondu c2h5oh 2014-10-20 20:51:52

@c2h5oh a une bonne réponse ci-dessus. Je voudrais ajouter une chose concernant la mise à jour Django 1.6. Je crois que ce à quoi vous et l'auteur de l'article faites référence est le CONN_MAX_AGE paramètre.

j'ai trouvé cette question parce que je cherchais moi-même la même chose, donc je ne suis pas sûr de ce qui suit, mais permettez-moi d'émettre une hypothèse:

Vous devriez être en mesure d'utiliser tous les trois ensemble des outils:

  1. CONN_MAX_AGE (django les connexions persistantes)
  2. django-postgrespool (pool de connexions de PgBouncer)
  3. PgBouncer (pool de connexions db)

je sais que #2 et #3 jouer gentiment, comme en témoigne article D'Heroku sur la mise en commun des connexions

je suppose que les économies de l'utilisation de #1 et #2 Ensemble est assez mince. Django-postgrespool est essentiellement conçu pour gagner du temps de connexion, mais vos requêtes doivent encore se connecter à ceux les connexions, donc CONN_MAX_AGE vous économiserait un total de très petits temps de connexion. De plus, si vous utilisez Heroku, CONN_MAX_AGE pourrait interférer avec les redémarrages automatiques du dyno (juste une supposition).

Notez que si vous utilisez un serveur web comme Gunicorn, vous pourriez avoir besoin de rendre vos travailleurs synchrones pour éviter une fuite de connexion.

3
répondu grokpot 2015-09-10 18:52:45