java - PHP 与 Java MySQL 连接池

标签 java php mysql connection-pooling

我有一个问题想分解成最简单的问题。 LAMP 堆栈上有两个应用程序,一个 PHP 和另一个 Java,它们执行唯一且完全相同的事情:运行一个简单的查询:

SELECT * FROM test

PHP 执行总共需要 30 毫秒

Java 执行总共需要 230 毫秒

在本地 MySQL 客户端上运行的查询总共需要 10-15 毫秒

Java 大约每次都需要 ~200 毫秒 来建立与数据库的连接。我知道 PHP 使用某种内置的连接池,因此它不需要每次都建立一个新连接,因此只需要 30 毫秒

同样的事情在 Java 上可能吗?到目前为止,我没能做到这一点。我尝试使用 Apache Commons DBCP 连接池,没有任何变化,仍然需要相同的时间来连接到数据库。

更新:这是一个单独的问题,我试图让连接池在 Java 上工作,对于那些要求代码示例的人:Java MySQL connetion pool is not working

最佳答案

您误解了连接池的概念和目的。

连接池旨在维护单个(Java 虚拟)机器(通常是应用程序服务器)上的(一组)连接。目标是允许同一台机器上的多个线程实质上共享它们与数据库服务器的连接,而无需在每次需要查询数据库时都打开一个连接。

独立应用程序无法共享连接,因为它们在不同的 Java 虚拟机上运行,​​甚至可能在不同的物理机上运行。

如果您有多个线程同时访问数据库,连接池将有助于您的独立应用程序。

但是,您仍然可以通过将测试(try...catch 中的代码)包装在一个循环中并迭代几次来衡量连接池的好处。在第一次迭代时,需要打开连接。不要忘记释放连接(调用 Con.close()),然后它将在下一次迭代中被重用。

关于java - PHP 与 Java MySQL 连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18105989/

相关文章:

java - 无法将存储库从外部 Jar Autowiring 到 Spring Boot 应用程序中

php - undefined variable : $_SESSION

mysql - SQL 查询结果如何用于另一个查询的 LIKE 条件?

java - 如何模拟 CrudRepository 调用?

java - 如何处理 Property<T>、更改监听器和属性初始化?

php - 从表中的数据库中选择复选框并使用 PHP 将其更新回来

php - 我的数组索引以何种方式为 'Illegal string offset' ?

mysql - 在mysql中的两个数据库之间在mysql中触发

php - MYSQL 创建具有唯一值的表

java - 嵌套循环模式