【问题标题】:Custom Connection Pool slow (JAVA)?自定义连接池慢(JAVA)?
【发布时间】:2016-01-27 09:34:57
【问题描述】:

对于我的项目,我们被要求实现自己的连接池。我们不允许使用来自 jdbc 的 PGoolingDataSource。当我使用 jdbc 池时,我的程序非常快,而我自己的连接池则无法预测并且速度要慢得多。我的连接使某些任务等待很长时间,而 jdbc 池不会发生这种情况。

我正在使用 Arrayblockingqueue 来实现连接池,我只是创建了一个预先设定的连接数,然后我让客户端借用并放回它们。

我的意思是这对我来说似乎很有意义,并且有效。但是它很慢,有时任务需要永远完成,有没有我可以改进它?让它更快更可靠?

【问题讨论】:

  • 当从池中获取连接时,if(c == null|| !c.isValid(2)) 这个验证检查是否通常返回 false,因此它必须创建一个全新的连接?
  • 不,但它只是为了确保如果连接无效/或为空,我们会创建一个新连接。

标签: java jdbc connection-pooling


【解决方案1】:

您使用错误的数据结构来存储连接ArrayBlockingQueue 是 FIFO 结构,它会减慢您的处理速度,使用ConcurrentLinkedQueue 是合理且更快的选择。

【讨论】:

  • 您能详细说明一下吗?你看我有很多线程访问这个有我的连接的队列,自然我希望首先提供连接的请求,对吗?那么为什么 arrayblockingqueue 不行呢?
  • 另外我想提一下你的建议对我很有帮助,我现在正在研究concurrentlinkedqueues
  • arrayblockingqueue 的行为是正确的但是一次只能有1个线程访问,ConcurrentLinkedQueue允许多个线程同时访问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
相关资源
最近更新 更多