数据库为什么要添加连接池

今天在学习kauklahti的时候,自己写了一个Jdbc连接mysql的例子。算是复习了一下Jdbc的用法。

 

整个例子的源码如下:
 
//------------------------------------------------------------------------------------
import java.sql.Connection;
 
public class Database{
 
   private Connection connection;
   
   public Database(){
       Class.forName("com.mysql.jdbc.Driver").newInstance();   // 注册驱动
   }
   
   // 查询help_relation中help_topic_id小于100的数据,
   // 并打印输出
   public excuteQuery(){
       String url ="jdbc:mysql://localhost:3306/mysql?user=root&password=654321";
       connection = DriverManeger.getConnection(url);
       Statement statement = connection.createStatement();
       String sql ="select * from help_relation where help_topic_id<100";
       ResultSet rs = statement.executeQuery();
 
        while(rs.next){
               System.out.printlnl(rs.getString(1));
         }   
   }
 
      // 测试主函数
   public static void main(String[] args){
               new Database().executeQuery();
   }
}
//-----------------------------------------------------------------------------------
 
到此,jdbc连接mysql数据的工作已经完成了,但是这里我突然想出了一个问题:为什么所有的数据
在大负载的情况下都要用连接池?
 
 
现在通过这个简单的例子可以清楚的看到,如过每次我们请求数据时,都要创建一个Database对象,
通过该对象提供的方法来查询数据库,该对象中封装了一个Connection,这个连接用于连接msyql,
相当于在mysql和java之间建立了一条数据的传输通道。并且是一个独立的线程。如果有很多Connection
操作同时连接到mysql的时候,就需要建立很多的Connection,这样的话无疑是浪费了很多的Connection
实例。并且用可能引起内存泄漏,为了避免这样情况的方法,使用连接池可以缓解数据库的压力。
 
如果不添加连接池,最有可能影响数据库性能的一种现象是:
当msyql的负载(connection)已满,当前已经连接到msyql上的数据库的Connection都在等待mysql返回数
据,如果再有新的连接进来,也只能处于等待状态,当mysql中已有的连接完成查询退出后,新的连接才
能进入到mysql数据库中。这时新进来的Connection需要重新创建连接,无法复用已经创建的连接对象。
 
对于数据库来说,创建和断开连接是比较耗费资源的。因此使用连接池来重复使用已经创建好的对象可以
极大节省数据库的查询时间。
 
以上几点是本人在做Facebook的应用插件SuperMarket的时候的一个总结。
                                                                                           
                                                                         时间2010/03/03

你可能感兴趣的:(sql,mysql,工作,jdbc,Facebook)