我正在准备开始使用PGBouncer,但是我不确定是否应该在我的数据库服务器或应用程序服务器上使用它。 如果它在应用程序服务器上,则必须有多个连接池,而应用程序服务器要共享一个中央连接池,但是必须重新为每个新查询重新创buildTCP连接,而不是同时进行池化(据推测)。 哪一种是使用像PGBouncer这样的连接外观的“正确”方式,而且我对每个连接的观点甚至有效?
对于那些绊倒这个问题,请参阅PgBouncer常见问题 (最后一个问题)。
就个人而言,我把它放在应用程序服务器上。 这是为什么。
PGBouncer基本上实现了连接池,这是一个有用的(虽然有时令人讨厌的麻烦),通过消除build立到数据库的新连接的成本来减less整体应用程序延迟。 在许多情况下,这是由数据库连接驱动程序本身完成的 – 请参阅Windows上的ADO.NET MSSQL驱动程序,PHP上的PDO等。主要目标是最小化代码之间的时间成本,说“我需要谈到数据库“,然后才能真正开始抛出SQL命令。
上面提到的驱动程序实现了连接池,因此代码在达到数据库可以接收SQL命令之前必须做的很less。
PGBouncer是一个奇怪的例子,因为你仍然需要打开一个PGBouncer守护进程的连接,无论它在哪里。 因为你想尽量减less连接时间,因此把守护进程尽可能地接近应用程序代码是有意义的。 理想情况下,您可以通过同一个盒子上的套接字连接,因为您不必通过TCP rigmarole来访问连接池。
尽pipe如此,YMMV。 testing,testing,然后再testing一些。