需要有关创建数据库连接池的信息(与数据库无关),以及它们的效率如何?它们可以提高性能的条件是什么?
如何显式创建?
发布于 2009-11-11 22:56:46
你的问题有点模棱两可:
你想自己开发一个连接池实现吗?如果是这样的话,这是一个很好的起点:http://java.sun.com/developer/onlineTraining/Programming/JDCBook/conpool.html ,但对于生产环境来说,这是非常不受欢迎的。最好使用现有的、经过全面测试的连接池应用编程接口,如DBCP或C3P0。
或者您想知道如何使用连接池?如果是这样的话,答案取决于您正在使用的连接池API。幸运的是,它通常可以在相关API的网站上找到。
或者您想知道何时/为什么要使用连接池?如果是这样的话,如果你有一个长寿命的应用程序(例如will应用程序),并且你需要更频繁地连接数据库,那么它肯定会提高连接性能。通常的做法是:获取和,在最短的范围内(即在同一个方法块内)关闭Connection、Statement和ResultSet。因为连接相当昂贵,可能需要200ms甚至更多的时间,所以使用连接池要快得多。它按需提供连接,并负责实际关闭连接。然而,这并不意味着你可以改变编写JDBC的方式,你仍然需要在最可能的范围内获取和关闭它们。您需要更改的唯一一件事是获取连接的方式。例如,更改为
connection = driverManager.getConnection();至
connection = connectionPool.getConnection();只要您的JDBC代码写得很好,就不需要更多的更改。
发布于 2009-11-10 18:27:07
Apache DBCP的简介页面很好地总结了这一点:
为每个用户创建新连接可能非常耗时(通常需要几秒钟的时钟时间),以便执行可能需要几毫秒的数据库事务。在公共托管的Internet应用程序中,为每个用户打开一个连接可能是不可行的,因为在该应用程序中,并发用户的数量可能非常大。因此,开发人员通常希望在应用程序的所有当前用户之间共享一个开放连接的“池”。在任何给定时间实际执行请求的用户数量通常只占活动用户总数的很小的百分比,并且在请求处理期间是唯一需要数据库连接的时间。应用程序本身登录到DBMS,并在内部处理任何用户帐户问题。
它们的效率如何?这取决于实现方式。通常,我希望池在启动时或在请求时实例化连接。第一个连接将需要一个到数据库的实际连接,然后当您请求一个连接时,您将获得一个现有的池连接。因此,第一个连接请求将占用最多的时间,之后您只需从集合中拉出对象(非常快)。
发布于 2009-11-10 18:28:30
创建到数据库的连接是非常昂贵的操作。连接池是创建和缓存的数据库连接的实例。每当需要到数据库的新连接时,都会使用池中的连接,而不是创建新连接。一些平台,如.NET + SQL Server,默认情况下使用连接池(您不需要创建自己的连接池)。因此,它们基本上通过节省每次创建新连接的时间来提高性能。
https://stackoverflow.com/questions/1706946
复制相似问题