【问题标题】:Should I use connection-pooling in multi-threaded program?我应该在多线程程序中使用连接池吗?
【发布时间】:2014-11-21 07:01:55
【问题描述】:

我正在使用多个线程在不同的表中插入插入记录。另外,我正在使用批处理来插入记录以提高效率。

注意:要插入的记录数以百万为单位。

我的问题是我应该在这个多线程环境中使用连接池吗?

我的担忧:

每个线程都会运行一段时间来执行数据库操作。所以,如果我的连接池的大小是 2 并且线程数是 4,那么在给定的时刻只有 2 个线程会运行。因此,其他 2 个线程将在很长一段时间内获得连接,因为数百万条记录的数据库操作非常耗时。而且,这种连接池会阻碍使用多线程的目的。

【问题讨论】:

  • 所以收集池的大小应该等于线程数。
  • 那我们用connection-pool做什么呢?因为我们可以在不使用连接池的情况下创建 n 个连接。
  • 建立连接非常耗时。最好只做一次。

标签: java database multithreading database-connection connection-pooling


【解决方案1】:

批量使用连接池是一个方便的问题。它将帮助您限制打开连接的数量、放弃的时间、如果您忘记关闭连接则关闭连接、验证连接是否打开等。

查看 Plain Ol' Java 示例 here

【讨论】:

  • 没错。虽然您可能不需要它或获得与常规 OLTP 相同的优势,但它肯定没有害处。
  • 如果我明智地处理连接,那么他们不需要使用连接池(根据我的用例)?我对吗?顺便说一句,我尝试了 commons-dbcp。
  • 我猜你可以通过适当的连接池和配置来做同样的事情。例如,在您的情况下 maxActive 将为 2,而 maxWait 属性将使线程数。 3 等到连接在指定时间段内可用,但如果它使事情变得复杂,你不使用它,池也是为了方便。
猜你喜欢
  • 2011-08-21
  • 2013-05-23
  • 1970-01-01
  • 2016-07-02
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
相关资源
最近更新 更多