大家都知道,创建数据库连接是相当耗费资源的一项操作,如果我们每一次需要查询的时候多要创建连接,性能是非常低下的,那么,对于数据库连接,我们究竟可以采取哪些管理办法呢?
1。需要时创建,这种办法我觉得是效率最为低下的了,想想看,每一次执行查询的时候都要创建连接,有时候一个页面就会查询5到6次,用大脚趾想就知道,这种方法要不得。事实上,相当多的ASP新手写程序,采用的就是这种办法。
2。服务器启动时创建一次,缓存在Application中。这种方法猛然一看还不错,不用频繁创建连接对象,不用在内存中缓存大量的对象。可是仔细一想,不行,对于数据密集型的操作,这些操作都在同一个连接上进行,那还不塞车啊?
3。每个会话开始的时候创建一次,缓存在Session中。这种方法比第2中方法要好,至少不会造成塞车。但是也不是完全没有弊病,弊病就是要浪费大量的缓存空间,比如,我有一万个用户同时在线,就需要缓存一万个连接,比较浪费内存,而且对于我们论坛来说,很多用户打开一个页面是比较快的,而阅读完它却相当花时间,我们执行一个查询只要几百微秒,而每个连接要缓存十几分钟,浪费大了吧。还有一种极端情况,如果有用户不停的开始会话结束会话,再开始会话再结束会话,不要笑,不要以为没有这种无聊的情况发生,拒绝服务攻击就是很好的例子,那么我们就需要不停的创建连接关闭连接,再创建连接再关闭连接,对服务器的负担也是相当大的。
4。每个页面创建连接,缓存在页面中,这种方法正是动网论坛采用的方法,其实,仔细一分析,这种方法还不如第三种,因为每个用户可以打开多个页面,那么,它浪费的资源更多,也更加容易造成拒绝服务攻击。
5。使用连接池。我们可以在应用开始的时候就创建十几二十个连接,缓存在Application中,每当一个查询需要执行的时候,就从这十几二十个连接里面挑选一个空闲的,进行操作,操作完后,再还回连接池中,对于内存的浪费不会太大,因为就算有一万个用户同时在线我也只需要缓存这么点连接对象,对于数据密集型的操作,我想只需要稍稍排一下队就可以等到一个空闲的连接,如果真的塞车了,我可以增加缓存的连接的数量,很容易,不是吗?
个人认为,使用连接池的方法比动网论坛使用的方法要好,欢迎大家探讨。
在向JSP移植的过程中,我将使用第5种方法管理数据库连接。