Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在打开JDBCMySQL连接时节省时间_Java_Mysql_Jdbc - Fatal编程技术网

Java 如何在打开JDBCMySQL连接时节省时间

Java 如何在打开JDBCMySQL连接时节省时间,java,mysql,jdbc,Java,Mysql,Jdbc,我有一个非常短的Java应用程序,它只打开到远程MySQL数据库的连接,读取一些数据,打印数据,然后退出。应用程序最耗时的部分是数据库连接 目前我只有一个线程,我唯一关心的是节省打开连接的时间 我想了几种方法来加快速度,但结果证明它们没有帮助: 连接池-没有帮助,因为池仅在应用程序的单个运行期间存在。当应用程序终止时,池就消失了,当我重新运行应用程序时,我必须重新打开池中的所有连接 mysql代理-仅连接到本地服务器: TCP/IP服务器——我想持有一个本地TCP/IP服务器,它将保持一个持久

我有一个非常短的Java应用程序,它只打开到远程MySQL数据库的连接,读取一些数据,打印数据,然后退出。应用程序最耗时的部分是数据库连接

目前我只有一个线程,我唯一关心的是节省打开连接的时间

我想了几种方法来加快速度,但结果证明它们没有帮助:

  • 连接池-没有帮助,因为池仅在应用程序的单个运行期间存在。当应用程序终止时,池就消失了,当我重新运行应用程序时,我必须重新打开池中的所有连接
  • mysql代理-仅连接到本地服务器:
  • TCP/IP服务器——我想持有一个本地TCP/IP服务器,它将保持一个持久打开的连接,并根据请求将其发送给TCP/IP客户端。但是,连接对象无法序列化,因此我无法将连接对象从客户端传递到服务器

任何其他选项?

通常,连接到数据库是最耗时的操作。如果要启动和停止应用程序,那么您几乎无能为力


在web服务器中使用连接池,并通过运行使用JSON与web服务器对话的应用程序来调用连接池,这可能是一种选择。

通常,连接到数据库是最耗时的操作。如果要启动和停止应用程序,那么您几乎无能为力


在web服务器中使用连接池,并通过运行应用程序(使用JSON与web服务器对话)来调用连接池,这可能是一个选项。

您说您有一个非常短的应用程序,因此如果您将数据库逻辑放入“选项3 TCP/IP服务器”中,并将结果转发给您的连接客户端,您的第三个选项可能会起作用。这是一种典型的应用程序服务器模式。

您说您的应用程序很短,因此如果您将数据库逻辑放入“选项3 TCP/IP服务器”并将结果转发给连接的客户端,则第三个选项可能会起作用。这是一个典型的应用服务器模式。

Marc B评论中提到的关于网络查找的另一件事。

另一件事,你应该考虑Marc B在他的评论中提到的网络查找。

< P>,最好的解决方案是使用MySQL代理来处理一个脚本。连接池(前两个选项的组合)。我在这里找到了这样一个脚本:

它可能是为mysql proxy的旧版本编写的,所以我必须修复它(如果有人需要修复的版本,请写我)


它就像一个魔咒——我运行与以前完全相同的应用程序,唯一的变化是连接字符串:我没有连接到“qa srv:3308”(远程服务器),而是连接到“127.0.0.1:4040”(代理服务器)。

事实证明,最好的解决方案是使用mysql代理和处理连接池的脚本(前两个选项的组合)。我在这里找到了一个这样的脚本:

它可能是为mysql proxy的旧版本编写的,所以我必须修复它(如果有人需要修复的版本,请写我)



它就像一个符咒——我运行与以前完全相同的应用程序,唯一的变化是连接字符串:我没有连接到“qa srv:3308”(远程服务器),而是连接到“127.0.0.1:4040”(代理服务器)。

我们这里说的是什么时候?10毫秒?秒?是否可以继续连接到“服务器”程序的一部分,它有一个持久的连接,准备好的语句等,你的“短”java程序与之通信?我们谈论的是多少时间?连接需要一段时间,但我们谈论的是秒还是毫秒?连接到远程数据库需要大约10秒。计算本身需要不到1秒。我们在这里谈论的是什么时间?10秒的毫秒?秒?是否可以保持“服务器”状态程序的一部分,它有一个持久的连接,准备好的语句等,你的“短”java程序与?我们谈论的是多少时间?连接需要一段时间,但我们谈论的是秒还是毫秒?连接到远程数据库需要大约10秒。计算本身需要不到1秒。我不理解第二个选项。你能详细说明一下吗?有一个使用连接poo的本地web服务器吗ling。web服务器将始终在线等待查询。当被询问时,它将转到数据库。Java应用程序调用web服务器获取数据。这本身不是一个数据库查询。web服务器使用数据进行响应。Java应用程序使用数据。这应该具有两个世界中最好的一个:连接池和更快的响应。但是缺点是更多的基础设施,即web服务器。这可能是一个不错的选择,但是我使用了一些第三方代码,这些代码返回不可序列化的类,因此我无法从TCP/IP服务器发回它们。为什么要在应用程序和服务器之间来回发送类。我刚才说的是传输从应用程序中提取的数据应用程序和服务器之间的数据库。不知道第三方应用程序正在做什么。也许你可以在应用程序中创建一个伪连接。它看起来和行为都像一个连接,但它所做的只是将请求转发给服务器,而服务器实际上是在查询服务器。这很有趣。很可能容易出错和出现错误。只是一个想法。看起来你可能被夹在岩石和坚硬的地方之间。我不明白第二个选项。你能详细说明一下吗?有一个使用连接池的本地web服务器。web服务器将始终在线等待查询。当被询问时,它将转到数据库。Java应用程序调用web服务器以获取数据。这不是d数据库查询本身。web服务器用数据响应。Java应用程序使用数据。这应该具有