oro*_*aki 5 postgresql database database-connection
我正准备开始使用 PGBouncer,但我不确定是否应该在我的数据库服务器或应用程序服务器上使用它。如果它在应用程序服务器上,则必然有多个连接池,而不是一个中央连接池供应用程序服务器共享,但随后必须为每个新查询重新创建 TCP 连接,而不是也被池化,大概。哪个是使用像 PGBouncer 这样的连接查看器的“正确”方法,我对每个的观点是否有效?
对于那些偶然发现这个问题的人,请参阅PgBouncer 常见问题解答(最后一个问题)。
就我个人而言,我会将其放在应用程序服务器上。原因如下。
PGBouncer 基本上实现了连接池,这是一个有用的(尽管有时非常麻烦)的东西,它通过消除建立到数据库的新连接的成本来减少整体应用程序延迟。在许多情况下,这是由数据库连接驱动程序本身完成的 - 请参阅 Windows 上的 ADO.NET MSSQL 驱动程序、PHP 上的 PDO 等。主要目的是最大限度地减少代码之间的时间成本“我需要说话”到数据库”,然后能够真正开始抛出 SQL 命令。
上面提到的驱动程序实现了连接池,因此在数据库可以接收 SQL 命令之前,代码只需执行很少的操作。
PGBouncer 是一个奇怪的情况,因为您仍然必须打开与 PGBouncer 守护程序的连接,无论它在哪里。由于您试图最大限度地减少连接时间,因此将守护进程尽可能靠近应用程序代码是有意义的。理想情况下,您可以通过同一个机器上的套接字进行连接,这样您就不必通过 TCP 繁琐的操作来访问连接池。
与所有事情一样,YMMV。测试,测试,然后再测试一些。