数据库连接池数据结构

5

我希望开发数据库连接池。

请问有人能告诉我维护连接池需要使用哪种数据结构吗?


为什么要自己开发,不如使用像Commons DBCP这样广泛使用和经过充分测试的库呢? - Mark
此外,Apache许可证对于几乎所有类型的项目都非常有效。 - HMM
6个回答

10

应该使用对象池设计模式(Object Pool Design Pattern)来实现。您可以在Kircher, Michael; Prashant Jain; (2002-07-04). "Pooling Pattern". EuroPLoP 2002. Retrieved on 2007-06-09.Object Pool Design Pattern中了解更多信息。Java的ObjectPoolJDBCConnectionPool类的实现可以在这里找到。

对象池通常是一个单例(Singleton),其中包含两个对象(e.g.数据库连接)集合:

  1. 未锁定(unlocked) - 存储空闲对象,可按请求提供给客户端
  2. 已锁定(locked) - 存储正在使用的对象

这些集合可以根据需要实现为ListsHashTables或其他结构。对于简单的对象池,LinkedList结构就足够了。



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

在此基础上,您可以构建所需的任何日志记录/监视。

也有人支持现成的连接池框架。我知道有些人不同意,但我个人不会选择这条路--连接池(a)真的不难编写,(b)是您系统的关键部分,您可能需要了解和自定义。


0

我认为在对象池设计模式中没有特定的数据结构需要使用:http://en.wikipedia.org/wiki/Object_pool对象池的后备存储可以是简单的数组 - 它是如何管理有限数量资源的访问,由未定义数量的资源用户定义对象池的方面。 - diciu
@diciu - 提到的链接已经失效了...您能更新一下吗? - nanosoft

0
请参阅此Sun开发人员教程:连接池

在JDBC 2.0之前的版本中,即使上一个连接和登录使用相同的表和用户帐户,每个数据库会话都需要一个新连接和登录。如果您正在使用早于2.0的JDBC并且想要提高性能,则可以缓存JDBC连接。


-1

不确定自己创建是明智的选择。

我在许多项目中使用过c3p0连接池(与Hibernate一起),取得了很大的成功。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接