数据库连接池是一种通过维护打开连接的“池”来降低打开和关闭连接成本的方法,可以根据需要从数据库操作传递到数据库操作。这样,我们就不必为要求数据库执行的每个操作打开和关闭一个全新的连接而付出代价。
虽然数据库连接池可以帮助提高应用程序性能,但它并不是一个放之四海而皆准的解决方案。根据具体情况,它可能根本不是解决方案。由于打开/关闭连接和维护打开的连接都会产生资源成本,连接池是否是一个好主意将取决于许多具体因素,包括(但不限于):
我们的应用程序以及它如何与数据库交互
它与数据库交互的频率(即规模)
我们选择的数据库技术
我们数据库服务器的硬件规格
网络延迟
一旦我们达到了足够的规模,池化连接通常是有意义的,但这会引发新的问题:我们如何实际创建一个连接池,它的大小应该是多少?
首先,我们不需要尝试从头开始构建连接池。根据我们应用程序的语言和我们选择的数据库技术,可能已经有很好的连接池框架可用。例如,有用于使用 Postgres 兼容数据库的 Go 应用程序的pgxpool ,用于 Java 应用程序的HikariCP等。
但是,我们仍然需要调整参数并调整我们的池大小以获得最佳性能。
使用连接池时,我们必须权衡保持连接打开和打开/关闭新连接之间的成本权衡。我们希望调整连接池的大小,使空闲连接的数量最少,但我们必须打开/关闭新连接的频率也是如此。我们还希望确保最大连接数是合适的,因为这反映了您的数据库可以完成的最大工作量。
如果我们使池太小(即选择的连接太少),我们将引入延迟,因为操作必须等待可用连接打开才能执行。另一方面,如果我们选择太多的连接,这也会造成延迟,原因与服务器中每个处理器内核通常如何执行线程有关。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习