慢SQL,压垮团队的最后一根稻草

作者:CQITer小编 时间:2018-04-16 21:56

字号
技术沙龙 | 4月21日多位区块链专家进行区块链技术应用场景解读!

先说结论,我支持将逻辑写在 Java 等应用系统中。

慢SQL,压垮团队的最后一根稻草

背景:

今天只讨论一种应用模式,就是最普遍的,前端实时调用后端web服务,服务端经过DB的增删改查作出响应的应用。至于离线数据分析,在线规则引擎模板执行,流式计算等不在本次讨论范畴。

重SQL开发的场景

先看一个例子吧。用经典的 Controller Service DAO 开发模式描述。

慢SQL,压垮团队的最后一根稻草

需求:

查询出每个学生所在的城市名以及分数展示到前端。

重SQL模式

class Controller{ 

  Service service; 

  Map<String,String> get(Map<String,Object> param){ 

    return service.get(param); 

  } 

 

class Service{ 

  DAO dao; 

  Map<String,String> get(Map<String,Object> param){ 

    return dao.get(param); 

  } 

class DAO{ 

  SQLTemplate template; 

  Map<String,String> get(Map<String,Object> param){ 

    String sql = "select city_name,student_name,score from student,score,city where city.city_code=student.city_code and score.student_id=student.student_id" ; 

    return template.execute(sql,param); 

  } 

重Java模式

class View

  String studentName; 

  String cityName; 

  String score; 

 

class Requent{ 

 

class Controller{ 

  Service service; 

  List<View> get(Requent request){ 

    return service.get(param); 

  } 

 

class Service{ 

  StudentDAO studentDAO; 

  ScoreDAO scoreDAO; 

  CityDAO cityDAO; 

  List<View> get(Requent param){ 

    Student studentRequest = new Student(); 

    //查询学生 

    List<Student> students = studentDAO.select(studentRequest); 

    List<View> result = new ArrayList(students.size()); 

     

    for(Student student : students){ 

      View view = new View(); 

      view.setStudentName(student.getStudentName()); 

     

       //拼接城市名 

      City cityRequest  = new City(); 

      cityRequest.setStudentId(student.getStudentId()); 

      City city = cityDAO.select(cityRequest); 

      view.setCityName(city); 

       

      //拼接分数 

      Score scoreRequest = new Score(); 

        scoreRequest.setStudentId(student.getStudentId()); 

      Score score = scoreDAO.select(scoreRequest); 

      view.setScode(score.getScore()); 

       

      result.add(view); 

    } 

    return result; 

  } 

 

class StudentDAO{ 

  SQLTemplate template; 

  Student select(Student param){ 

    String sql = "select * from Student where param = ..."

    template.select(sql,param); 

  }  

 

class ScoreDAO{ 

  SQLTemplate template; 

   Score select(Score param){ 

    String sql = "select * from Score where param = ..."

    template.select(sql,param); 

  } 

 

class CityDAO{ 

  SQLTemplate template; 

  City select(City param){ 

  String sql = "select * from City where param = ..."

    template.select(sql,param); 

  } 

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
关键词 >>SQL 团队 开发
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接