繁体   English   中英

数据库连接池数据结构

[英]Database connection pooling datastructure

我想开发数据库连接池。

有谁能告诉我需要使用哪种数据结构来维护池?

它应该使用Object Pool desing模式实现 你可以在Kircher,Michael看到它; Prashant Jain; (2002年7月4日)。 “汇集模式”。 EuroPLoP 2002.检索2007-06-09。 或者在对象池设计模式中 可以在此处找到ObjectPoolJDBCConnectionPool类的Java实现。

对象池通常是一个包含两个对象集合 (例如数据库连接)的单例

  1. 解锁 - 免费对象,可以通过请求提供给客户端
  2. 已锁定 - 对于现在正在使用的锁定对象

此集合可以实现为ListsHashTables或其他内容,具体取决于您的需求。 对于简单的ObjectPool - LinkedList结构就足够了。

而不是开发自己的,为什么不使用像Commons DBCP这样广泛使用和经过充分测试的库。

您通常需要:

  • 围绕“原始”Connection对象的某种包装来管理诸如最后一次发出连接时的内容,诊断信息,可能是为该连接准备好的语句的缓存等 - 你定义它包含你需要的东西
  • 用于放置连接包装器的集合,支持并发添加/删除 - 任何正确同步的列表都可以,但ConcurrentLinkedQueue将是一个合理的选择
  • 一种管理池中分配的方法 - 考虑使用Semaphore
  • 可能,将各个池分组到一些“池管理类”(例如,所以你可以只调用“getConnection(databaseName,readOnly)”,然后进入相关的池)

最重要的是,您可以构建所需的任何日志记录/监视。

还有提供现成的连接池框架的倡导者。 我知道有些人不同意,但我个人不会走这条路 - 连接池(a)真的不难写,(b)构成你可能需要理解的系统的关键部分并定制。

您正在寻找的开源解决方案是什么?

请参阅Apache数据库连接池API

请参阅此Sun Developer教程: 连接池

在JDBC 2.0之前的版本中,即使先前的连接和登录使用相同的表和用户帐户,每个数据库会话也需要新的连接和登录。 如果您使用的是2.0之前的JDBC版本并希望提高性能,则可以缓存JDBC连接。

不确定创建自己的明智之举。

我已经在许多项目中使用了c3p0连接池(使用Hibernate )并取得了巨大的成功

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM