0

我在 JAVA 中创建批处理时遇到问题,这是我可能必须每秒调用某个连接来处理一个行块,达到池大小的限制。

如何在不增加池大小的情况下处理大量连接?

using (var connection = ExternalDBConnectionManager.getConnection()){
        using (var prepStatement = connection.prepareStatement(queryToExecute)){
        ...
    }
}

此函数每 100 行或更多行调用一次,但例如,我想每行运行一次(即 500 行,每行调用一次)-(这意味着使用相同的连接调用此函数 500 次)

4

3 回答 3

0

您应该阅读连接池以了解它们是如何工作的。SO上有数百个与此相关的主题。对“了解 Java 连接池”的快速谷歌搜索显示了其中一个库如何工作的简短描述:连接池的工作原理

有关此 SO 线程的更多信息:如何建立连接池

基本上,您的客户端请求进来,您从池中获取连接,执行 sql 操作,当您关闭连接时,它会将其返回到池中。这就是高水平。

如果你想将它与批处理结合起来,它会变得有点棘手,因为你会抓取数据,将其插入批处理,然后当批处理中有一些预定数量的数据时触发发送/提交。

这真的取决于您希望您的客户看到什么,提交记录时他们是否需要确认?

使用池,您不太可能需要使用批处理,您只需为您的环境调整连接池大小。

有许多独立的池库(C3PO 和 DBCP),并且许多不同的服务(如 websphere)已经内置了池。我相信 Oracle jdbc 驱动程序能够为您做到这一点。

于 2016-02-25T14:51:47.033 回答
0

通用连接池 (UCP)是一个 Java 连接池,它功能丰富,并与利用高可用性、故障转移和性能特性的 Oracle RAC、Oracle DG、Oracle ADG 数据库架构紧密集成。

它是一个独立的 ucp.jar,需要与 JDBC 驱动程序一起使用。
有一些关于 UCP 及其在OTN上的功能的白皮书。

于 2016-02-26T19:59:37.503 回答
0

您提到了“批次”。通常批处理不使用为 OLTP 应用程序保留的连接池。这是因为如果连接被借用和释放得相当快,那么连接池就会很好地工作。批处理通常会创建自己的连接,这些连接在批处理的生命周期(可能是几个小时)内保持打开状态。

于 2016-02-26T21:15:03.873 回答