Django 1.7 и объединение пулов в PostgreSQL?

В чем отличия между приложениями django (Django-PostgresPool, djorm-ext-pool, django-db-pool) и PG Bouncer или PG Pool?

Используют ли приложения один из двух последних пакетов?

В в этой статье автор говорит, что существует patch начиная с django 1.6. Означает ли это, что нам больше не нужно использовать какие-либо из этих решений, ни приложения, ни пакет PG Bouncer или PG Pool?

Ответ 1

Соединения базы данных Postgres являются дорогостоящими (ресурсами) по сравнению с соединениями MySQL. Приложения для объединения Django откроют много соединений и сохранят открытые.

PG Bouncer и PG Pool откроют меньше подключений к Postgres, поддерживая большое количество локальных подключений (приложение к PG Bouncer/PG Pool) и повторно их используем.

Для достижения наилучшей производительности вам нужны: постоянные соединения от Django до PG Pool/PG Bouncer.

В нашем случае переключение постоянных соединений сократило среднее время отклика на 10 мс (более 20%) на AWS.

Ответ 2

@c2h5oh имеет отличный ответ выше. Я хотел бы добавить одну вещь относительно обновления Django 1.6. Я верю, что вы и автор статьи ссылаетесь на параметр CONN_MAX_AGE.

Я нашел этот вопрос, потому что сам искал то же самое, поэтому я не уверен в следующем, но позвольте мне предположить:

Вы должны иметь возможность использовать все три инструмента вместе:

  • CONN_MAX_AGE (постоянные подключения django)
  • django-postgrespool (объединенные подключения к PgBouncer)
  • PgBouncer (объединенные соединения с db)

Я знаю, что # 2 и # 3 играют хорошо, о чем свидетельствует статья Heroku о пуле соединений, но я не уверен, 1 и # 2.

Я предполагаю, что экономия использования # 1 и # 2 довольно тонкая. Django-postgrespool по существу предназначен для экономии времени на соединение, но ваши запросы по-прежнему должны подключаться к этим соединениям, поэтому CONN_MAX_AGE будет экономить вам совокупность очень малых соединений. Кроме того, если вы используете Heroku, CONN_MAX_AGE может помешать автоматическим перезагрузкам dyno (просто догадка).

Обратите внимание, что если вы используете веб-сервер, такой как Gunicorn, вам может потребоваться синхронизировать ваших сотрудников, чтобы предотвратить утечку соединения,