JAVA 处理大量 JDBC 池连接
JAVA handling lots of JDBC pool connections
我在 JAVA 中创建批处理时遇到问题,这是我可能必须每秒调用某个连接来处理一个行块,达到池大小的限制。
如何在不增加池大小的情况下处理大量连接?
using (var connection = ExternalDBConnectionManager.getConnection()){
using (var prepStatement = connection.prepareStatement(queryToExecute)){
...
}
}
此函数每 100 行或更多行调用一次,但举个例子,我想 运行 每行(即 500 行,每行调用一次)-(这意味着调用此函数 500相同连接的次数)
您应该阅读连接池以了解它们的工作原理。 SO 上有数百个与此相关的主题。快速 google 搜索 "Understanding Java connection pools" 会出现一个关于其中一个库如何工作的简短描述:How Connection Pooling Works
有关此 SO 线程的更多信息:How to establish a connection pool
基本上,你的客户端请求进来,你从池中获取一个连接,你做你的 sql 操作,当你关闭连接时,它 returns 它回到池中。这就是高水平。
如果你想将它与批处理结合起来,它会变得有点棘手,因为你会获取数据,将其插入批处理,然后在你有预定数量的数据时触发 send/commit批次。
这真的取决于您希望客户看到什么,提交记录时他们是否需要确认?
有了池化,您就不太可能需要使用批处理,您只需根据您的环境调整连接池大小。
有许多独立的池库(C3PO 和 DBCP),并且许多不同的服务(如 websphere)已经内置了池。我相信 Oracle jdbc 驱动程序能够做到它给你。
Universal Connection Pool (UCP) 是一个 Java 连接池,它具有丰富的特性,并与 Oracle RAC、Oracle DG、Oracle ADG 数据库架构紧密集成,利用了高可用性、故障转移和性能特性。
它是一个独立的 ucp.jar,需要与 JDBC 驱动程序一起使用。
OTN 上有一些关于 UCP 及其功能的白皮书。
您提到了 "batch"。通常批处理不使用为 OLTP 应用程序保留的连接池。这是因为如果连接被借用和释放得相当快,连接池就可以很好地工作。批处理通常会创建自己的连接,这些连接在批处理的生命周期(可能是几个小时)内保持打开状态。
我在 JAVA 中创建批处理时遇到问题,这是我可能必须每秒调用某个连接来处理一个行块,达到池大小的限制。
如何在不增加池大小的情况下处理大量连接?
using (var connection = ExternalDBConnectionManager.getConnection()){
using (var prepStatement = connection.prepareStatement(queryToExecute)){
...
}
}
此函数每 100 行或更多行调用一次,但举个例子,我想 运行 每行(即 500 行,每行调用一次)-(这意味着调用此函数 500相同连接的次数)
您应该阅读连接池以了解它们的工作原理。 SO 上有数百个与此相关的主题。快速 google 搜索 "Understanding Java connection pools" 会出现一个关于其中一个库如何工作的简短描述:How Connection Pooling Works
有关此 SO 线程的更多信息:How to establish a connection pool
基本上,你的客户端请求进来,你从池中获取一个连接,你做你的 sql 操作,当你关闭连接时,它 returns 它回到池中。这就是高水平。
如果你想将它与批处理结合起来,它会变得有点棘手,因为你会获取数据,将其插入批处理,然后在你有预定数量的数据时触发 send/commit批次。
这真的取决于您希望客户看到什么,提交记录时他们是否需要确认?
有了池化,您就不太可能需要使用批处理,您只需根据您的环境调整连接池大小。
有许多独立的池库(C3PO 和 DBCP),并且许多不同的服务(如 websphere)已经内置了池。我相信 Oracle jdbc 驱动程序能够做到它给你。
Universal Connection Pool (UCP) 是一个 Java 连接池,它具有丰富的特性,并与 Oracle RAC、Oracle DG、Oracle ADG 数据库架构紧密集成,利用了高可用性、故障转移和性能特性。
它是一个独立的 ucp.jar,需要与 JDBC 驱动程序一起使用。
OTN 上有一些关于 UCP 及其功能的白皮书。
您提到了 "batch"。通常批处理不使用为 OLTP 应用程序保留的连接池。这是因为如果连接被借用和释放得相当快,连接池就可以很好地工作。批处理通常会创建自己的连接,这些连接在批处理的生命周期(可能是几个小时)内保持打开状态。