我正在尝试使用连接池,但我不理解它。谁实现了它?软件,驱动程序或数据库?
如何使用连接池运行程序?我正在使用本机PostgreSQL驱动程序。
我需要一个代码示例。我正在做一个webcrawler,它有很多与数据库的连接。
答案 0 :(得分:18)
有几种可能性:
应用程序服务器/ servlet容器可能为您提供连接池,请参阅例如Tomcat 7 JNDI Datasource for PostgresQL
您可以使用DBCP或C3P0等开源库手动创建连接池。
最后,您的数据库JDBC驱动程序可能会提供一些内置的连接池实现,请参阅PostgresQL Connection Pools and Data Sources和PGConnectionPoolDataSource(我不知道这些类是最新的和最新的)。
无论您选择哪个选项,原则上它始终以相同的方式工作:客户端维护与数据库的网络连接池。每次使用DataSource
请求新连接时,连接池都会查看免费连接并提供给您。当您认为关闭连接时,它实际上将被释放并重新放回池中。其他线程现在可以使用相同的已建立的连接。
合并池有很多优点:
没有TCP / IP连接,授权等的开销 - 它只进行一次。
游泳池将处理断开的连接,它也可能在给你之前测试连接
最后,活动数据库连接的数量更稳定,如果已经打开太多,连接池应该拒绝返回连接
答案 1 :(得分:1)
池本身由位于应用程序代码和数据库驱动程序之间的代码完成。
谁将那些代码放在那里?可能是任何人。它可能是你 - 有像DBCP这样的库,你的代码可以使用它来将池放在数据库之上。它可以是J2EE容器,如Tomcat或JBoss。它甚至可能是数据库 - 正如Tomasz指出的那样,PostgreSQL带有汇集代码。
听起来你没有使用J2EE容器,在这种情况下,它取决于你或数据库。就个人而言,我更喜欢DBCP之类的专用池实现,而不是数据库提供的实现。数据库的程序员最关心数据库;游泳池的程序员最关心游泳池。
所以,得到DBCP(恕我直言,它比替代品更好),并使用它。
答案 2 :(得分:0)
我认为您正在寻找在客户端完成连接到数据库的连接池。基本思想是建立新连接的成本很高,因为它涉及建立连接,设置数据库端对象,验证等,从而重用连接对象。