14

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

这些应用程序是否使用最后两个软件包之一?

这篇文章中,作者说有一个从 django 1.6 开始的补丁。这是否意味着我们不再需要使用这些解决方案,无论是应用程序,还是 PG Bouncer 或 PG Pool 包?

4

2 回答 2

14

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

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

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

在我们的案例中,切换持久连接将 AWS 上的平均响应时间减少了 10 毫秒(超过 20%)。

于 2014-10-20T16:24:59.443 回答
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 可能会干扰自动测功机重新启动(只是猜测)。

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

于 2015-09-10T18:52:45.840 回答