gpt4 book ai didi

java - 如何改进这个连接池设计?

转载 作者:行者123 更新时间:2023-12-01 15:40:43 27 4
gpt4 key购买 nike

首先,我正在开发自己的 DBCP(数据库连接池)实现,

我不会接受任何使用 c3p0 等第 3 方 DBCP 的建议。

我使用生产者-消费者设计模型作为 DBCP 的主要设计模板。

             PRODUCER | CONSUMER
Pn, ... P3, P2, P1 >> << C1, C2, C3, ... Cn

对于生产者和消费者,我使用 LinkedList 队列。

生产者队列

它将由最大数量的 SQLConnectionWrapper 实例填充。我已采取措施确保连接在队列中是唯一的。在 .close() 上,连接将,

  • 首先,删除 C 队列中的第一个元素(如果有)
  • 否则,进入 P 队列。

我使用管家线程来删除队列中陈旧/过期的连接,并生成新连接以保持配置的最小连接数。

消费者队列

它将由 FutureTask 实例填充。使用我的 DBCP 的应用程序会调用

Connection conn = dbcp.getConnection(long timeout);

这会,

  • 首先创建一个 Consumer FutureTask,
  • 删除 P 队列中的第一个元素(如果有),
  • 否则,进入 C 队列,
  • 阻塞 .get(timeout) 直到它被生产者“喂食”或超时,以先到者为准。

我的问题

这个设计还可以进一步改进吗?有什么明显的弱点吗?

我的首要任务是并发使用环境中的稳定性。我从当前的测试中了解到,由于涉及 2 个队列,因此需要双方同步。

现在,我正在探索以下想法:

  • 将2个队列减少为1个双端队列(尽管我很难思考如何让P端消灭C端)
  • 创建一个同步消灭器线程,消除生产者和消费者相互检查的需要。

最佳答案

既然您已经说过您不会接受任何第三方池建议。我想你的意思是任何第三方连接池。

你可以看到类似 apache commons connection pool 的内容,为任何对象提供池化设施。因此,虽然我没有冒犯的意思,也不想让你泄气,但我认为你正在尝试重新发明轮子。

话虽如此,上面的链接给出了通用池的非常高层次的设计。检查如何使用游泳池,您将对正在发生的事情有一个清晰的了解,并且也将帮助您进行设计。

关于java - 如何改进这个连接池设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8082403/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com