NCRE——D层优化
2015-12-27 19:59
393 查看
在做NCRE项目,D层的逻辑很简单:
这样看着好像还OK的感觉。但是看见省略号了没?这样的数据可是很多的。这样说吧,我的一个Excel查询到的数据,一个学生平均25个题,Word平均40个题,PPT平均30个题,再加上IE、Windows的,一个学生的答题记录就是100条。每一条都需要对数据库进行修改,也就是访问数据库,一个学生就高达100次。我们一个511教室能坐200人,那么判分的时候对数据库的访问就已经是20,000次了,那么再加上501的200人,就40,000次。就一个判分,那几分钟的时间,对数据库的访问量就已经高达4万次,那么服务器是否承受的了?经过我们的测试,好像不是那么太现实。测试的时候,一天下来一共参考的人300多人,但是收上来的试卷才100多份,这对于一场考试来说,真的是特别严重的事情了。所以我们的代码不得不翻新!
下面是十期师哥孟海滨和赵崇给我们讲述的方法,看大家有没有用过或者见到过。
之前查询到的答题结果都返回到一张list表里,然后我们只需要对这张表统一的更新到数据库表里。然后呈现的效果是这样的:
那么大家是否看到效果了呢?一个学生的答题记录Excel+Word+PPT+IE+Windows只需要访问数据库5次,就能够进行判分了。5*200*2=2,000。请将这个2,000与40,000这个数字进行比较,然后你就可以知道我们的D层优化的是有多棒了!
总结
从开始项目到现在,从了解需求,开发,成型,到现在的测试,我们跟着NCRE一路走过来,收获真的很多。一个Excel让我对Office甚至说对Microsoft了解的更加深刻,明白为什么他们经久不衰,他们为人民服务的理念真的很透彻!面向对象的思想贯彻的也很彻底!
当然在跟着这个项目的过程中,跟老师的接触也是让我收获颇丰的,老师说:做一个善良的软件设计师;把软件看成一件艺术品;把用户当成***。这些都起着醍醐灌顶的效果,让我明白了如何做一名合格的软件设计师。
这样看着好像还OK的感觉。但是看见省略号了没?这样的数据可是很多的。这样说吧,我的一个Excel查询到的数据,一个学生平均25个题,Word平均40个题,PPT平均30个题,再加上IE、Windows的,一个学生的答题记录就是100条。每一条都需要对数据库进行修改,也就是访问数据库,一个学生就高达100次。我们一个511教室能坐200人,那么判分的时候对数据库的访问就已经是20,000次了,那么再加上501的200人,就40,000次。就一个判分,那几分钟的时间,对数据库的访问量就已经高达4万次,那么服务器是否承受的了?经过我们的测试,好像不是那么太现实。测试的时候,一天下来一共参考的人300多人,但是收上来的试卷才100多份,这对于一场考试来说,真的是特别严重的事情了。所以我们的代码不得不翻新!
下面是十期师哥孟海滨和赵崇给我们讲述的方法,看大家有没有用过或者见到过。
public void ReturnExcelScore(List<ExcelQuestionRecordEntity> list, ExcelQuestionRecordEntity excelrecord) { String which = WhichExcelRecored (excelrecord); StringBuilder sbSql = new StringBuilder(); sbSql.Append("update ExcelQuestionRecordEntity_" + which + "SET Fration = CASE QuestionID "); string Fation = string.Empty; string questionID = string.Empty; string studentIDs = string.Empty; string tamstamp = string.Empty; //根据学号,和时间戳选出这一段的内容,然后再根据QuestionID给每一个flag更新分数。 #region 更新分数的拼接sql语句 for (int i = 0; i < list.Count; i++) { questionID = list[i].QuestionID.ToString(); //将分数传给变量 Fation = list[i].Fration.ToString(); //判分sql,拼接sql,用case,when语句 sbSql.Append("WHEN '" + questionID + "' THEN '" + Fation + "'"); } sbSql.Append("end,"); //加“,” #endregion #region 拼接考生答案更新到数据库中 //拼接更新考生答案sql sbSql.Append(" ExamAnswer = CASE QuestionID"); for (int i = 0; i < list.Count; i++) { string examAnswer = list[i].ExamAnswer.ToString(); questionID = list[i].QuestionID.ToString(); //学生答案信息更新,when后边的是QuerstionID, sbSql.Append("WHEN '" + questionID + "' THEN '" + list[i].ExamAnswer + "'"); } sbSql.Append("end"); //不加逗号“,” #endregion for (int i = 0; i < list.Count; i++) { studentIDs += "'" + list[i].StudentID.ToString() + "',"; tamstamp += "'" + list[i].TimeStamp.ToString() + "'"; } studentIDs.Remove(studentIDs.Length - 1, 1); sbSql.Append("where StudentID in (" + studentIDs + ") and TimeStamp in (" + tamstamp + ")"); }看见核心代码了吗?Case……When。这是我之前见过的一种判断方法,但是没想到可以用在D层的数据库拼接,那么这种方法的效果是怎样的呢?
之前查询到的答题结果都返回到一张list表里,然后我们只需要对这张表统一的更新到数据库表里。然后呈现的效果是这样的:
那么大家是否看到效果了呢?一个学生的答题记录Excel+Word+PPT+IE+Windows只需要访问数据库5次,就能够进行判分了。5*200*2=2,000。请将这个2,000与40,000这个数字进行比较,然后你就可以知道我们的D层优化的是有多棒了!
总结
从开始项目到现在,从了解需求,开发,成型,到现在的测试,我们跟着NCRE一路走过来,收获真的很多。一个Excel让我对Office甚至说对Microsoft了解的更加深刻,明白为什么他们经久不衰,他们为人民服务的理念真的很透彻!面向对象的思想贯彻的也很彻底!
当然在跟着这个项目的过程中,跟老师的接触也是让我收获颇丰的,老师说:做一个善良的软件设计师;把软件看成一件艺术品;把用户当成***。这些都起着醍醐灌顶的效果,让我明白了如何做一名合格的软件设计师。
相关文章推荐
- sqlite学习笔记之sqlite3_open函数的使用
- Android Tag-start Training
- sqlite学习笔记之sqlite3_open函数的使用
- 层次深入学习ARP协议
- memcached—理论基础
- 嵌入式系统下文件传输实验
- 第六届福建省大学生程序设计竞赛
- 使用XListView框架进行上拉加载和下拉刷新
- 创建被图像填充的组件
- 创建被图像填充的组件
- C# 字段(Field)、属性(Property)、特性(Attribute)
- LVM2的基本应用及操作
- 关于JSP简单入门
- 循环节入门
- Hadoop IO基于文件的数据结构详解【列式和行式数据结构的存储策略】
- spring mvc下shiro的session,request等问题
- Hadoop IO基于文件的数据结构详解【列式和行式数据结构的存储策略】
- 网红经济背后的故事
- Linux安装Memcached服务
- [转]三层之抽象工厂加反射实例