java web项目优化记录:优化考试系统
考试系统在进行压力測试时发现,并发量高之后出现了button无反应。试题答案不能写到数据库的问题,于是针对这些核心问题,进行了优化。
数据库方面:
Select语句:Select * from TEB_VB_XZTRecord改为select 必须的列 form TEB_VB_XZTRecord。之前看的教学视频里就讲过最好别用*。因为查询了不必要的列,所以导致了低效率。
insert优化:考试业务的原因。须要把查询出来的试题,一条条的插入到数据库中。优化前:循环+每次插入一条的insert语句。
优化后:insert 表名(字段名) select (字段名) from 表名 where questionID in(,,,,,,,)
这样的优化在insert语句中用了select字句和inkeyword。相当于在数据库运行了查询之后。直接进行了查询。没有通过java项目的一次次的循环。之前想用一个insert+多个value的方法,发现这样的方式在mysql中行的通,但在oracle中行不通。
程序设计和算法优化:
算法常常受个人思路的影响,比方对复用认识深刻,干过的事情就把成果保存下来,以后再用就高效了。
程序设计也是一样。
缓存同样数据
考生的考试卷面,须要由考试信息、个人信息。考试卷面分值分布,试卷内容 四块内容组成。当中考试信息和卷面分值分布 对每一个考生都同样,因此将同样的信息进行缓存。就降低了大量的查询。而不是用一次查一次。
提前谋划,提前准备
在大并发量时。能够提前干的事就提前干,就像请人在自己家吃饭,到了吃饭的点暂时准备饭菜,肯定手忙脚乱。提前准备出来到时候就悠闲了。
对于考试系统的抽卷来说:考生考试时,每一个考生都随机从题库抽取一套试卷。这样的方法包括了大量的查询和一个循环,因此对性能要求较高。而且大并发量时导致了系统根本没反应。
第一次优化:在考试前为考生抽好试卷,考生登录时仅仅需从答题记录表查询就可以。这样是把抽题的过程提前准备好了。
第二次优化:考虑到第一次优化中扔须要大量的查询。这次优化的逻辑是 抽取固定的卷数,比方抽取50套,每套卷有一个卷号,考试前将50套卷载入到内存中。考生随机抽取到一个卷号,然后依据卷号从内存中拿试卷,这样仅仅要查询一次,然后其它考生都能够从内存中获取试卷,避免了大量的查询。
将事情分开干
很忙的时候,把能够后推推的事情推后点。合理规划好资源和时间。答卷过程中,将客观题判分的环节移到了教师判分逻辑中,由于正确答案须要查询。所以在答题时会同一时候有大量的查询和更新操作。去掉了判分,答题时就仅仅有更新了。
再有就是对String的优化,由于考试系统须要将试题显示在界面,因此须要在后台将试题拼好串,显示在前台,当时用了String。但String不是动态扩容的,仅仅会复制原来的String。加上新内容后新生产一个。因此存在着大量的存储浪费,改为了StringBuffer以后,对内存的要求小了非常多。
java web项目优化记录:优化考试系统的更多相关文章
- [经验] Java Web 项目怎么部署到 Linux 系统上
废话少说, 直奔主题 第一步: 将 web 项目打成 war 包 1: 打开项目的 pom.xml 文件 如果是迭代后的项目, 记得修改项目的版本号, 这里我的是第二版所有就把 1 改成了 2 2: ...
- 记录一个奇怪的异常,无法还原此异常。 普通的Maven Java Web 项目
项目 : 普通的Maven Java Web 项目 操作记录: 使用 Maven 构建项目,指令 tomcat7:run 无异常 但使用 eclipse 的 tomcat 运行项目,报此异常. 后面从 ...
- 关于Maven打包Java Web项目以及热部署插件Jrebel的使用
Java Web/Eclipse/Maven/Tomcat 最近有个新项目是java web项目,记录一下,可能比较乱.虽然没接触过Java,但是eclipse还是用过的 初识项目 同事说,项目是ma ...
- Java Web项目在Mac系统上启动时提示nodename nor servname provided
今天一不小心更新了Mac系统,然后在启动Java Web项目的时候,提示了java.net.UnknownHostException: MAC-mini-local nodename nor serv ...
- Java Web项目在Mac系统上启动时提示nodename nor servname provided的解决办法
今天在Mac系统上启动Java Web项目的时候,提示了Java.net.UnknownHostException: yangxiaomindeMacBook-Pro.local nodename n ...
- 大型Java Web项目的架构和部署问题
一位ID是jackson1225的网友在javaeye询问了一个大型Web系统的架构和部署选型问题,希望能提高现有的基于Java的Web应用的服务能力.由于架构模式和部署调优一直是Java社区的热门话 ...
- Java Web项目中连接Access数据库的配置方法
本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...
- step2-------使用myeclipse创建maven java web项目
1.文章内容概述: 在对项目需求进行分析之后,决定使用maven对我的java web项目进行管理,这篇文章记录了使用myeclipse创建maven java web项目的过程. 2.开发环境: j ...
- Java web项目综合练习(Estore)
Java web项目综合练习(Estore) 复习day18: ajax代码的书写步骤 2)json格式文本,转js对象的方法是那个 项目开发流程介绍 这里学习的JavaWEB项目实战,主要是把前面学 ...
随机推荐
- Git——基本操作
Shell 基本概念 shell俗称壳,为使用者提供使用界面,例如DOS下command以及后来的cmd.exe shell分类 图形界面shell,提供友好的可视化界面,例如windows操作界面, ...
- DeepMind:所谓SACX学习范式
机器人是否能应用于服务最终还是那两条腿值多少钱,而与人交互,能真正地做"服务"工作,还是看那两条胳膊怎么工作.大脑的智能化还是非常遥远的,还是先把感受器和效应器做好才是王道. 关于 ...
- (转)Hibernate框架基础——多对多关联关系映射
http://blog.csdn.net/yerenyuan_pku/article/details/52756536 多对多关联关系映射 多对多的实体关系模型也是很常见的,比如学生和课程的关系.一个 ...
- HDU_1874_畅通工程续_最短路问题
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- HDU多校Round 3
Solved:4 rank:268 C. Dynamic Graph Matching 状压DP一下 #include <stdio.h> #include <algorithm& ...
- Colletions工具类常用方法
Collections 工具类常用方法: 排序 查找,替换操作 同步控制(不推荐,需要线程安全的集合类型时请考虑使用 JUC 包下的并发集合 排序操作 void reverse(List list)/ ...
- Python使用Flask框架,结合Highchart处理xml数据
1.html代码 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...
- Codeforces Round #395 C. Timofey and a tree
package codeforces; import java.util.*; public class CodeForces_764C_Timofey_and_a_tree { static fin ...
- FJoi2017 1月20日模拟赛 直线斯坦纳树(暴力+最小生成树+骗分+人工构造+随机乱搞)
[题目描述] 给定二维平面上n个整点,求该图的一个直线斯坦纳树,使得树的边长度总和尽量小. 直线斯坦纳树:使所有给定的点连通的树,所有边必须平行于坐标轴,允许在给定点外增加额外的中间节点. 如下图所示 ...
- Python异常捕捉的一个小问题
问题: names = ['taotao','songwenjing','liu','li']I = iter(names)while True: try: s = next(I) except Ex ...