django 1.7和连接池到PostgreSQL?

Mic*_*ael 13 django connection-pooling pgpool pgbouncer django-1.7

django应用程序(Django-PostgresPool,djorm-ext-pool,django-db-pool)和PG Bouncer或PG Pool之间有什么区别?

应用程序是否使用最后两个包中的一个?

本文中,作者说有一个以django 1.6开头的补丁.这是否意味着我们不再需要使用任何这些解决方案,既不是应用程序,也不是PG Bouncer或PG Pool包?

c2h*_*5oh 13

与MySQL连接相比,Postgres数据库连接是昂贵的(资源).Django池应用程序将打开许多连接并保持打开状态.

PG Bouncer和PG Pool将打开更少的与Postgres的连接,同时保持大量本地连接(应用于PG Bouncer/PG Pool)并重复使用它们.

为了获得最佳性能,您需要两者:从Django到PG Pool/PG Bouncer的持久连接.

在我们的案例中,切换持久连接将AWS的平均响应时间缩短了10ms(超过20%).


gro*_*pot 5

@c2h5oh 上面有一个很好的答案。我想添加关于 Django 1.6 更新的一件事。我相信您和文章作者所指的是CONN_MAX_AGE设置。

我发现这个问题是因为我自己也在寻找同样的东西,所以我不确定以下内容,但请允许我假设:

您应该能够同时使用所有三个工具:

  1. CONN_MAX_AGE(django 持久连接)
  2. django-postgrespool(连接到 PgBouncer 的池化连接)
  3. PgBouncer(连接到数据库的池化连接)

我知道#2 和#3 的效果很好,正如Heroku 的关于连接池的文章所证明的那样,但我不确定#1 和#2 是如何交互的。

我猜一起使用#1 和#2 的节省是相当微薄的。Django-postgrespool 本质上旨在节省连接时间,但您的请求仍然必须连接到这些连接,因此 CONN_MAX_AGE 将为您节省非常小的连接时间。此外,如果您使用的是 Heroku,则 CONN_MAX_AGE 可能会干扰自动 dyno 重新启动(只是猜测)。

请注意,如果您使用的是 Gunicorn 之类的 Web 服务器,则可能需要使您的工作人员同步以防止连接泄漏。