写这个帖子主要也是因为在用PTS测试网站的时候,手动访问网站进入报错页面,主要原因是数据库连接对象存在问题,导致并发多的时候产生故障,于是简单分析了一下数据库读写的性能优化以及利用PTS的测试结果,整理出来和大家分享一下,顺便参加一下这个活动。
 
         几乎所有的网站都需要数据库来存储网站中的相关信息,因此在网站应用与数据库的交互过程中,数据库数据读取的性能对网站整体的性能是至关重要的。
         通常我们在网站编写之初不会考虑数据库的读写效率,主要是因为这时候网站建设的重点并不在数据库读写性能上,而是在数据库读写处理得正确性上,因此很多网站的开发人员一开始并没有重视这个问题,包括我也一样,在之前网站开发中,每次需要读写的操作,利用定义好的数据库连接类new一个对象,然后执行操作即可,至于连接对象的连接池,交给系统自己去维护,并没有过多的干预。
         比如常见的的一种方式如下:
| 
     
                 SQLServerCMD cmd = newSQLServerCMD(); 
      // new SQLServerCMD()时,自动从连接池中获取一个可用连接,再使用Open打开连接,使用完毕后Close String value = cmd.QueryValue("selectuser_name from User_Table where user_id=123");  | 
| 
     
               SQLServerCMD cmd = newSQLServerCMD();
     String value = cmd.QueryValue("GetUserName123");  | 
| 
     
     方法一:两个表进行自然连接后条件查询:
     
    
     SQLServerCMD cmd = newSQLServerCMD();
     SqlDataReaderdr = cmd.Query("select user_name from User_Table,User_Log where user_id=log_user_idand user_id=123")  | 
| 
     
     方法二:两个表没有进行自然连接,采取嵌套的方式进行查询:
     
    
                SQLServerCMDcmd = new SQLServerCMD();
     
    
                SQLServerCMDcmd2 = new SQLServerCMD();
     
    
                 SqlDataReader dr =cmd.Query("GetLog 12"); //获取第12条记录的数据
     
    
                 string username="-";
     
    
                 using(dr)
     
    
                 {
     
    
                     if(dr.Read())
     
    
                     {
     
    
                         string  id =dr["user_id"].ToString().Trim();
     
    
                         username = cmd2.Get_Value("selectuser_name from User_Table where user_id=" + id);
     
    
                     }
     
    
                 }
      | 
| 
     privatestatic List<SQLServerCMD> pool = new List<SQLServerCMD>(); //连接对象集合 
     privatestatic Dictionary<int, int> used = new Dictionary<int, int>();                 //连接对象使用次数
     
    
     privatestatic int index = 0;                                                                          //轮询连接标识
     
    
     privatestatic int MaxCount = 20;                                                                 //连接池连接对象数
       | 
| 
     SQLServerCMDcmd = SqlConnectionPool.GetSqlConnection(); 
     Stringvalue = cmd.QueryValue("GetUserName 123");
       | 
| 
     
     普通连接
      | 
SQLServerCMD cmd = newSQLServerCMD(); SQLServerCMD cmd2 = newSQLServerCMD(); SqlDataReader dr =cmd.Query("select * from User_Table"); string id ="123"; string username ="-"; using (dr) { if (dr.Read()) { id =dr["user_id"].ToString().Trim(); username =cmd2.Get_Value("select user_name from User_Table where user_id=" +id); } } cmd.Update("updateUser_Table set user_name='LT' where user_id='" + id + "'"); cmd.CloseConnection(); cmd2.CloseConnection();  | 
| 
     
     自定义连接池连接
       | 
SQLServerCMD cmd =SqlConnectionPool.GetSqlConnection(); //连接的初始化方式不同 SQLServerCMD cmd2 =SqlConnectionPool.GetSqlConnection(); SqlDataReader dr =cmd.Query("select * from User_Table"); string id="123"; using(dr) { if(dr.Read()) { id =dr["user_id"].ToString().Trim(); string username =cmd2.Get_Value("select user_name from User_Table where user_id=" +id); } } cmd.Update("updateUser_Table set user_name='LT' where user_id='" + id+"'");  | 
 
 
 版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
-------------------------
-------------------------
-------------------------